INTRODUCCIÓN
Hoy os traigo algo que estoy casi seguro de que muchos no conocéis, se trata de conseguir obtener una capa superior a la hora de mapear, es decir, todos sabemos que al usar un editor de mapas, por defecto, disponemos de dos capas para la construcción de un bloque: El tile que va a ir por debajo y el tile que va a ir por encima de este, dicho de otro modo el tile que se va a sobreponer a este. Aquí os dejo una imagen de ejemplo:
Pues el objetivo será, de alguna forma, poder aplicar una tercera capa nuestros tiles. En este caso todos los créditos van para Diegoisawesome de PokeCo y, como siempre aquí tenéis el link al tema: https://www.pokecommunity.com/showthread.php?t=352725
Lo que yo os traigo aquí es una versión en español y, obviamente, con mi manera de explicar.
Herramientas necesarias:
-Advance Map 1.92/1.95
-Editor Hexadecimal (Yo usaré HxD)
-Una ROM de Fire Red/Ruby/Emerald
-Algunos necesitareis Free Space Finder aunque yo no lo use aquí
INSTALACIÓN
Como los pasos para su instalación son similares pero no iguales pasaré a dividir el Tutorial en tres partes:
FIRE RED
1º PASO
Lo primero que tendremos que hacer será descargar el siguiente archivo: Triple-Layer Blocks (FireRed)
Este contiene tres rutinas ya compiladas, es decir, con una extensión .bin, listas para abrir con nuestro editor hexadecimal.
2º PASO
Abriremos con el HxD la primera rutina: Triple-Layer Blocks (FireRed) (1).bin. Copiaremos su contenido, iremos a la dirección 0x5A9BC y lo pegaremos ahí (recordad pegarlo con CTRL+B).
Lo siguiente será buscar una dirección con suficiente espacio libre y que acabe en 0,4,8 o C. Una vez hecho esto remplazaremos los últimos bytes de la rutina que acabamos de insertar 00 00 00 08, por el puntero a la dirección que hayáis buscando con espacio libre antes.
Si yo por ejemplo busco espacio y me sale la dirección 0x720000, haría lo siguiente:
Un dato muy importante es que esta va a ser la única vez que hagáis el +1 a un puntero. Más adelante se trabajara con más punteros pero no se les añadirá el +1 al final, recordarlo bien.Le sumo +1 al offset: 0x720001
Permuto el offset: 01 00 72
Voy a los bytes anterirores y sustituyo los 00 00 00 por el offset permutado, en mi caso 01 00 72
3º PASO
Lo primero que haremos en este paso será abrir la segunda rutina: Triple-Layer Blocks (FireRed) (2).bin
Seguidamente lo que haremos será dirigirnos a la dirección que buscamos en el paso anterior, la que tenía espacio libre, en mi caso 0x720000, por lo tanto desde el HxD nos iremos a esa dirección y pegaremos allí el contenido de esa segunda rutina.
Ahora tendremos que volver a buscar un offset con espacio libre, en mi caso elegí el 0x720100, y haremos lo siguiente:
Permutamos el offset: 00 01 72
Sustituimos los bytes 00 00 00 por el offset permutado, en mi caso 00 01 72
4º PASO
Nos vamos al offset anterior, el que tenía espacio libre (0x720100 en mi caso), en esa dirección tenemos que pegar los siguientes bytes:
Código:
6C AA 05 08 CE A9 05 08 0C AA 05 08 00 00 00 08
De nuevo, buscamos otro offset con espacio libre y lo sustituimos por los bytes 00 00 00.
Ahora elegí el offset 0x720200, por lo tanto:
Permuto el offest: 00 02 72
Sustituyo los bytes 00 00 00 por el offset permutado, en mi caso 00 02 72
5º PASO
Lo primero que haremos aquí será abrir la tercera rutina: Triple-Layer Blocks (FireRed) (3).bin
Una vez hayamos hecho esto nos dirigiremos a la dirección con espacio libre del paso anterior, que en mi caso fue 0x720200 y en ella pegaremos la tercera rutina.
Por último solo nos queda hacer unos pequeños cambios hexadecimales:
Guardamos todos los cambios que hemos hecho y listo, ya tenemos el sistema implementado.-Nos vamos a 0x352F0B y cambiamos el 0x60 por 0x70
-Nos dirigimos a 0x352F16 y cambiamos el 0x1D por 0x1C
-Nos situamos en 0x9B868 y cambiamos el 0x01 por 0x02
-Nos iremos a 0x9B86E y cambiamos la halfword 02 DC por 2F D0
RUBY
1º PASO
1º PASO
Lo primero que haremos será descargar este archivo: Triple-Layer Blocks (Ruby)
Contiene dos rutinas ya compiladas, en extensión .bin, listas para abrir en un editor hexadecimal.
2º PASO
Lo que haremos será abrir con HxD la primera rutina: Triple-Layer Blocks (Ruby) (1).bin
Copiaremos su contenido y lo pegaremos en el offset 0x57E96.
Lo siguiente será buscar un offset con suficiente espacio libre, una vez encontrado tendremos que sustituir los bytes 00 00 00 del final, para ello haremos lo siguiente (En mi caso elegí el offset 0x720000):
Permutamos el offset: 00 00 72
Sustituimos los bytes 00 00 00 por nuestro offset permutado 00 00 72
3º PASO
Ahora lo que haremos será ir al offset con espacio libre usado en el paso anterior (0x720000) y en él pegaremos los siguientes bytes:
Código:
A0 7F 05 08 28 7F 05 08 AC 7E 05 08 00 00 00 08
Lo siguiente será buscar otro offset con espacio libre, 0x720100 por ejemplo y procederemos a cambiar los últimos bytes 00 00 00 por el offset permutado:
Permutamos el offset: 00 01 72
Cambiamos los bytes 00 00 00 por el offset permutado 00 01 72
4º PASO
En este paso lo primero que haremos será abrir la segunda rutina: Triple-Layer Blocks (Ruby) (2).bin
Por último lo que haremos será ir al offset con espacio libre del paso anterior (0x720100) y en esa dirección pegaremos el contenido de la segunda rutina.
Guardáis todos los cambios hechos y ya estaría el sistema implementado.
EMERALD
1º PASO
Lo primero que tendréis que hacer será descargar este archivo: Triple-Layer Blocks (Emerald)
Contiene tres rutinas ya compiladas, extensión .bin, listas para abrir desde un editor hexadecimal.
2º PASO
Lo que haremos será abrir con el HxD nuestra ROM y la primera rutina, el archivo: Triple-Layer Blocks (Emerald) (1).bin
Copiaremos el contenido de este y lo pegaremos, haciendo CTRL+B recordad, en el offset 0x89F80.
Una vez hecho esto tendremos que buscar un offset con suficiente espacio libre y que acabe en 0, 4, 8 o C. Yo por ejemplo elegí el offset 0xE84000. Lo que haremos sera sustituir los bytes 00 00 00 del final por el puntero a nuestro offset:
Algo que debéis tener muy en cuenta es que este va a ser el único puntero al que vamos a añadir +1, trabajaremos con más punteros, pero a esos no les añadiremos nada.Sumamos +1 al offset: 0xE84001
Permutamos el offset: 01 40 E8
Sustituimos los bytes 00 00 00 por 01 40 E8
3º PASO
Lo primero que haremos en este paso será abrir la segunda rutina: Triple-Layer Blocks (Emerald) (2).bin
Seguidamente lo que haremos será dirigirnos a la dirección que buscamos en el paso anterior, la que tenía espacio libre, en mi caso 0xE84000, por lo tanto desde el HxD nos iremos a esa dirección y pegaremos allí el contenido de esa segunda rutina.
Ahora tendremos que volver a buscar un offset con espacio libre, en mi caso elegí el 0xE84100, y haremos lo siguiente:
Permutamos el offset: 00 41 E8
Sustituimos los bytes 00 00 00 por el offset permutado, en mi caso 00 41 E8
4º PASO
Nos vamos al offset anterior, el que tenía espacio libre (0xE84100 en mi caso), en esa dirección tenemos que pegar los siguientes bytes:
Código:
30 A0 08 08 D0 9F 08 08 92 9F 08 08 00 00 00 08
De nuevo, buscamos otro offset con espacio libre y lo sustituimos por los bytes 00 00 00.
Ahora elegí el offset 0xE84200, por lo tanto:
Permuto el offest: 00 42 E8
Sustituyo los bytes 00 00 00 por el offset permutado, en mi caso 00 42 E8
5º PASO
Lo primero que haremos aquí será abrir la tercera rutina: Triple-Layer Blocks (Emerald) (3).bin
Una vez hayamos hecho esto nos dirigiremos a la dirección con espacio libre del paso anterior, que en mi caso fue 0xE84200 y en ella pegaremos la tercera rutina.
Guardamos todos los cambios hechos y ya tendríais el sistema implementado en vuestra ROM.
COMO FUNCIONA Y COMO UTILIZARLO
Para la aplicación de este sistema necesitaremos dos bloques, los llamaremos bloque A y bloque B, estos bloques deberán ir de forma consecutiva, es decir, el bloque B tiene que estar a la derecha del bloque A:
Los ejemplos estarán representados en FR, pero funciona igual para R y E
El bloque A estará compuesto por las capas 0 y 1, podéis volver a la introducción si no sabéis a lo que me refiero, ademas tendrá que tener asignado el valor Fondo-Byte 30:
El bloque B formará lo que será la capa 2, dicho de otro modo, la capa superior a las anteriores, el requisito que este bloque debe poseer es que solo puede tener tiles pertenecientes a una capa, con esto me refiero a que este bloque solo puede estar compuesto por tiles que, en un bloque normal, ocuparían la capa 0, la del fondo:
De esta forma ya tendríamos todo configurado, lo único que nos quedaría sería mapear. La manera de hacerlo es usar el bloque A cada vez que quieras hacer este efecto, el bloque B no lo usarás a la hora de mapear, ya que, aunque en Advance Map no consigas apreciar el efecto, en cuanto pruebes la ROM con el emulador este se hará visible, por así decirlo la ROM detecta el Fondo-byte del bloque A y ya lee por encima de este el bloque B sin necesidad de usarlo para mapear:
COMO INTERACTÚAN ESTOS BLOQUES CON LOS NPC's
Cuando un NPC esté sobre uno de estos bloques lo que ocurrirá es que el NPC se verá por encima de lo que vendría a ser el bloque A, pero, por otro lado, estaría por detrás del bloque B, dicho de otro modo, el NPC estará en una posición superior a las capas 0 y 1, pero en una inferior a la capa 2:
Si lo que quieres es que el NPC se vea por encima de estas tres capas lo que tendrás que hacer es jugar con la pestaña "Movimientos permitidos" y añadirle a este un movimiento que le otorgue una "altura" mayor, pero esto podría acarrear algún fallo con otro bloque diferente, como por ejemplo que el NPC se vea por delante de un bloque sobre el cuál se debería de ver por detrás, así que no es algo recomendable de aplicar.
---------------------------------------
---------------------------------------
Pues eso sería todo por mi parte, si os ha quedado alguna duda para algo están los comentarios.
Sé que podía haber hecho el tutorial bastante más corto, pero hay dos problemas: 1. Creo que así hasta alguien que lleva muy poco tiempo en el RH puede aplicarlo sin problema. 2. Me gusta dejar las cosas lo mejor explicadas y claras que puedo. Así que tendréis que leer xD
Espero que os haya servido de ayuda.
Un saludo!!