Registrarse

[Map Editing] Aplicar una tercera capa a la hora de mapear

Inferno

Miembro insignia
Miembro insignia
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:
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
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.


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:
-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
Guardamos todos los cambios que hemos hecho y listo, ya tenemos el sistema implementado.
RUBY


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:

Sumamos +1 al offset: 0xE84001
Permutamos el offset: 01 40 E8
Sustituimos los bytes 00 00 00 por 01 40 E8
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.

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!! :D
 

Omega

For endless fight
Miembro del equipo
Moderador/a
Respuesta: [GBA][Mapping] Aplicar una tercera capa a la hora de mapear

Mis dieces con este tutorial Inferno!
Hace un par de días tuve un pequeño problemita estético debido a la limitación de paletas, es casi invisible pero cualquier buen observador puede notarlo:


Veremos si con este tuto puedo jugar con la 3er capa y arreglarlo, luego edito ;)

Saludos!!!

Edito: Me ha funcionado de maravilla!

 
Última edición:

Naren Jr.

Puto amo
Usuario de Platino
Respuesta: [GBA] [Mapping] Aplicar una tercera capa a la hora de mapear

Ya conocía este tutoría de hace años y lo he usado en todos mis Hacks, sin embargo creo que a la hora de aplicarlo en el segundo tileset, se debe colocar el bloque debajo del otro por algún motivo que desconozco, o no sé si es que siempre metí la rutina mal, pero es un punto a tener en cuenta.

Gracias por traer el tutorial! Un abrazo!
 

Toni

Leyenda de WaH
Respuesta: [GBA] [Mapping] Aplicar una tercera capa a la hora de mapear

Pues cierta vez estuve buscando este tutorial y no encontré nada, claro que sería allá por el 2016. Sólo quiero preguntar si este sistema tiene alguna clase de bug, ya que en su día me dijeron que había una rutina pero que tenía ciertos bugs.
Gracias
 

Inferno

Miembro insignia
Miembro insignia
Respuesta: [GBA] [Mapping] Aplicar una tercera capa a la hora de mapear

Pues cierta vez estuve buscando este tutorial y no encontré nada, claro que sería allá por el 2016. Sólo quiero preguntar si este sistema tiene alguna clase de bug, ya que en su día me dijeron que había una rutina pero que tenía ciertos bugs.
Gracias
Yo de momento no he tenido ningún problema con este sistema, pero si alguien reporta algún bug que lo mencione.

Lo que si te puede dar bugs, tal y como dije en el post, es el hacer que el NPC se vea por encima de las tres capas. Según Diegoisawesome (el autor) esto puede traerte bugs con otros bloques que, en principio, no deberían de dar ningún tipo de problema.
 

~Lukhi

El tipo que a veces comenta en tu post.
Respuesta: [GBA] [Mapping] Aplicar una tercera capa a la hora de mapear

¡Muchísimas gracias Infernó! esta bastante bien explicado y el post esta bastante bien escrito y con imágenes hace que la lectura sea muy agradable. El único problema de que nos podríamos ahorrar todo este trabajo, simplemente editando el tile en photoshop y aunque entiendo que con este tutorial te puedes ahorrar espacio en el tileset, fácilmente se puede expandirlo en el Advance Map. De todas maneras se agradece tu esfuerzo por traducir el tutorial.
 

Toni

Leyenda de WaH
Respuesta: [GBA] [Mapping] Aplicar una tercera capa a la hora de mapear

¡Muchísimas gracias Infernó! esta bastante bien explicado y el post esta bastante bien escrito y con imágenes hace que la lectura sea muy agradable. El único problema de que nos podríamos ahorrar todo este trabajo, simplemente editando el tile en photoshop y aunque entiendo que con este tutorial te puedes ahorrar espacio en el tileset, fácilmente se puede expandirlo en el Advance Map. De todas maneras se agradece tu esfuerzo por traducir el tutorial.
No es realmente así. Por mucho que lo juntes en Photoshop luego lo vas a tener que insertar en el ROM, y para ello usarás bastantes más colores. De esta forma nos podemos ahorrar bastantes colores al insertar los tres tiles con paletas diferentes.
 

~Lukhi

El tipo que a veces comenta en tu post.
Respuesta: [GBA] [Mapping] Aplicar una tercera capa a la hora de mapear

No es realmente así. Por mucho que lo juntes en Photoshop luego lo vas a tener que insertar en el ROM, y para ello usarás bastantes más colores. De esta forma nos podemos ahorrar bastantes colores al insertar los tres tiles con paletas diferentes.
Tienes razón, pero eso es en casos muy específicos a si que no lo considero muy importante, por ahora no lo implementare en mi hack. Gracias de todas formas a Inferno por traer esto a Whack a hack porque estoy seguro que a muchísimas gente le servira.
 

Toni

Leyenda de WaH
Respuesta: [GBA] [Mapping] Aplicar una tercera capa a la hora de mapear

Estuve probando el otro día este sistema y funciona de maravilla. Lo único que veo más liado es ahora configurar estos bloques "compuestos", pero nada imposible, solo hace falta alcahuetear un poquito.
Ahora me surge otra pequeña duda. ¿Se puede usar el bloque de la izquierda normal y corriente? Supongo que sí.
Gracias.
 

Omega

For endless fight
Miembro del equipo
Moderador/a
Respuesta: [GBA] [Mapping] Aplicar una tercera capa a la hora de mapear

Tienes razón, pero eso es en casos muy específicos a si que no lo considero muy importante, por ahora no lo implementare en mi hack. Gracias de todas formas a Inferno por traer esto a Whack a hack porque estoy seguro que a muchísimas gente le servira.
Como mencionaron arriba, en un solo bloque puedes poner 2 capas de tiles que dan resultado de 2 paletas(Si es que vas a usar tantos en un solo tile xD), pero con 3 capas son 3 paletas disponibles, cosa que viene de maravilla para dar mayores detalles (y arreglar cosillas como en mi anterior comentario).

No se trata de casos muy especificos, por que estoy seguro que al menos una vez alguien ha tenido limitaciones debido a solo poder usar 2 capas, ojala AMap dejará usarlas directamente xD
 

JasPkmn

He/Him | ♣️Aprendiz de Leyenda♠️
Estaba probando en Emerald pero cuando veo los resultados se me reinicia el juego
 
Arriba