Registrarse

[Scripting] Comando setmapfooter

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia

Doctor Juanjo Orgullosamente presenta:

¡EL MARAVILLOSO COMANDO SETMAPFOOTER!

INTRODUCCIÓN
Bueno, muchos de ustedes tal vez recordarán cuando jugaban Zelda Ocarina of Time y viajaban al futuro ¡Se encontraban con que el Castillo de Hyrule ¡Se había transformado en un escenario post-apocaliptico con zombies y el castillo de Gannon!



Algunos de ustedes dirán. Bien eso en ¿Qué me afecta? Y bien, aquí viene la respuesta:

¿Nunca han soñado en congelar un pueblo, inundar una caverna, destruir una ciudad? ¿Nunca han pensado poner un pueblo en construcción para después poder entrar en en él?

Bueno, si de verdad querían hacerlo fijo ya lo habrían intentado. No se, tal vez con un setmaptile, o hacer dos mapas y organizar las conexiones y eventos.

Las soluciones anteriores son algo elegantes pero tienen sus peros:

-Un setmaptile es la mejor opción porque literalmente te cambia solo los tiles manteniendo los eventos, conexiones, posiciones de vuelo, etc. Pero es limitado con respecto a que tienes que hacer 10000 setmaptile para cambiar un pedazo de ciudad y además te limita a únicamente los tiles del tileset.

-Hacer otro mapa es otra buena idea. Puedes tener un nuevo tileset, mapear es más fácil. Pero tu problema ahora son mantener los eventos originales, organizar los warps (Incluyendo casas adentro) y al final te vas a enredar con flags y sin poder organizar correctamente las conexiones ni poder llegar volando.

Así que ¿Existe una verdadera opción de hacer esto de manera fácil, cómoda y que realmente te cambie el mapa? ¡Y la respuesta es que si! ¡Con ustedes el comando....

SETMAPFOOTER

Los que hackeen Ruby (O lo hayan hecho) no si si alguna vez por casualidad han intentado ver el mapa de Cave of Origen y se topan con esto:



¿Por qué en Pokémon Ruby esta el mapa del agua? ¿No debería ser lava?.

Bien la respuesta es más simple de lo que parece:
Ambos mapas existen en ambas versiones [Ruby-Zafiro], con un comando especial debe ser posible cambiar el mapeado del mapa. ¡Y si que existe!

El comando es el setmapfooter 0x__ y permite carga directamente el mapeado de otro mapa (Incluyendo su tileset). Sin cambiar el Header del propio mapa.

DEFINICIÓN:

setmapfooter: set[Establecer] map[mapa] footer[Pie] (Establecer pie de mapa)

Pero ¿Qué es el pie de mapa? ¿O más bien que espero encontrar en él?



En el pie de mapa encontramos: el borderblock, el mapeado y los tileset.

En el pie de mapa no encontramos: Los eventos, scritps, posiciones de vuelo, conexiones con otros mapas y el Header.

APLICACIÓN:

Simplemente con un script de nivel tipo 03 o un setmaptile script funcionara, (NO FUNCIONA EN UN SCRIPT DE GATILLO).

Sencillamente cuando entres al mapa original cambiara todo el mapeado y todos los tiles [Dejando scripts de nivel y eventos como minis y objetos] ¡A que es una maravilla!

Ejemplo:

Supongamos que vamos a hacer que una ciudad sea cubierta de nieve. Necesitaremos:

-La ciudad normal (Con todos sus warps, eventos, scripts, conexiones etc).

-La ciudad nevada (No necesita ningún script ni cabezal, solo el mapeado y tileset)

En un script de nivel (Tipo 03 o 'setmaptile' 01) ponemos el siguiente código:

Código:
#dynamic 0x712345

#org @script
compare 0x4FF 0x0
if 0x1 goto @no_nieve
setmapfooter 0x123 [Aquí está el número de mapa que quieren insertar]
end

#org @no_nieve
end
En este caso, al encontrar la variable 0x4FF distinta de cero cargará el mapa nevado, de resto cargará la ciudad normalmente.

¡Pero donde encuentro los números de mapa!

¡Y la mejor respuesta de toda!...

¡NO LO SE!

¿Pero hey, que pasa?

No se preocupen, tengo una solución, realmente 2+1:

1) Si son pacientes pueden hacer un banco de datos escribiendo setmapfooter 0x0 [Petalburg City]... setamapfooter 0x1 [BLA], setmapfooter 0xDA [BLABLA]....

2) Un truco mucho más fácil, genial y brillante es el siguiente:

-Creen el mapa con el que van a reemplazar.

-Vallan allí directamente en el juego.

-En el VBA vallan a "Tools -> Memmory Viewer"

Dependiendo si juegan Ruby o FireRed ingresen la siguiente dirección:

Ruby: 0x2025766

FireRed: 0x2036E0E



Si todo va bien fíjense en esos 2 bytes (Están permutados)

Edit [2018]
Gracias @~Ruki!(o Vector o como se llame).... He caído en cuenta que el footer del mapa se encuentra también como parte del cabezal del mapa. ¿Qué hay en el cabezal? Lo veremos pronto en otro tuto.



En la vista avanzada del cabezal de Advance Map se pueden apreciar algunos bytes muy interesantes, entre ellos los bytes #19 y #20 (Están permutados). Estos son el número de pie de mapa. 00 1B

Así que, si queremos insertar ese mapa en otro basta con un script de nivel y un setmapfooter 0x1B

Supongamos que lo insertamos en el script de nivel de Littleroot Town (Cuando bajas del camión y tu madre te saluda)

Código:
setmapfooter 0x1B


¡Woola! ¡Hemos convertido un pueblo en la ruta 111! [Tengan en cuenta los tamaños a la hora de hacer conexiones]

¿SABÍAS QUÉ?

Este script hace que se cargue la Mirage Island.

También explica el cambio de la marea de la Shoal Cave.

¡Así que usen sabiamente este viejo y útil comando!

Att:
Doctor Juanjo

 
Última edición:

Mariofan

Usuario mítico
Respuesta: El maravilloso comando setmapfooter [R/S/E/FR/LG]

Pues, no debo más que felicitarte por hacer un muy bien explicado tutorial. Se entiende perfectamente (¿Con esas imágenes del ocarina al principio quien no entenderá? xD)

El método tiene muchísimo potencial, se me ocurren mil y una maneras de hacer mucho más dinámicos los mapas con este método. De verdad, es de agradecerte por sacarlo a la luz, ya que si bien tiene bastante tiempo estando en EXS, nunca se había hecho algún tutorial en español y su funcionamiento era un tanto dudoso (Yo llegue a verlo muchas veces en algunos scripts de ruby y siempre me cuestione que diablos hacía, pero en realidad nunca experimente...)

Por ultimo, quiero agregar que me alegra que cada día aumenten más las posibilidades de modificación a las distintas roms. cuando yo empece, habían muchas cosas que no podían hacerse. Hoy en día, realmente, con los métodos y herramientas actuales, una rom de ruby, fire red, emerald, o incluso gold o blue pueden llegar a ser auténticos lienzos donde pintar lo que se desee.

:D
 

Master Brock

Miembro insignia
Miembro insignia
Usuario de Platino
Respuesta: El maravilloso comando setmapfooter [R/S/E/FR/LG]

WOW...siempre estuvo hay y no nos dimos cuenta XDD
muchas gracias por haberte tomado la molestia de subir esto.

Me trajo recuerdos lo del zelda xdd
En fin, muchas gracias :)
 

Corbitto

espantaviejas
Respuesta: El maravilloso comando setmapfooter [R/S/E/FR/LG]

wow ya sabia que esto se podia hacer de alguan manera pero no sabia como.
que bueno que has descubierto este comando y lo has explicado de una manera muy comprensible y completa, eres un grande.
 

Sayer301!

UnityLord!
Miembro de honor
Respuesta: El maravilloso comando setmapfooter [R/S/E/FR/LG]

Tenía el gran problema de no saber como hacer que los pokemons se desactivasen, pues esto es una solución cojonuda y sin ocupar demasiado espacio.

Imagino que al no tener offsets específicos y demás, ¿Servirá igual tanto para FR como para Ruby no?
Joder entre tu y Javi me estais solucionando los grandes problemas de mi hack y sin haber hecho ni un tema de dudas XD.

En fin espero que sigas aportando con cosas tan guays, que engorilan muy mucho!
Un saludo!
 

Jo7a

Kiero mi nick amarillo D:
Respuesta: El maravilloso comando setmapfooter [R/S/E/FR/LG]

El puto amo!
Este comando es genial, la verdad te felicito por este trabajaazo.
Pues si, lo usaré muy sabiamente.

Salu2!!
 

H.B.P

Emperador Kaktiácero
Miembro de honor
Respuesta: El maravilloso comando setmapfooter [R/S/E/FR/LG]

¡Avalancha de tutos, jaja! Bien, este es un comando que todos deberían de conocer, se agradece el aporte. Voy a dar un pequeño apunte: creo que en la versión 1.95 del Advance Map te aparecían los parámetros de cada mapa para el setmapfooter.
 

MegaSceptile9

Usuario mítico
Respuesta: El maravilloso comando setmapfooter [R/S/E/FR/LG]

Es trenando nuevo nombre XD.
Muy buen tuto, me preguntaba a veces como podia cambiar un mapa sin usar setmaptile, y aqui la solución XD.
Lo unico que no entendi bien es esta parte...

En este caso, al encontrar la variable 0x4FF distinta de cero cargará el mapa nevado, de resto cargará la ciudad normalmente.
Como le hago para activar o desactivar esta función, se puede con flag y cosas haci.
 

Cheve

MoonLover~
Miembro de honor
Respuesta: El maravilloso comando setmapfooter [R/S/E/FR/LG]

Ya conocia el comando, pero no tenia npi de como saber el mapa xD

Es un comando escencial, y muy bueno, para implementar ciudades de noche con las ventana y luces encendidas, o tambien para usar correctamente el sistema de Estaciones... Se complementa muy bien con el DNS ;)
 

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
Respuesta: El maravilloso comando setmapfooter [R/S/E/FR/LG]

Es trenando nuevo nombre XD.
Muy buen tuto, me preguntaba a veces como podia cambiar un mapa sin usar setmaptile, y aqui la solución XD.
Lo unico que no entendi bien es esta parte...



Como le hago para activar o desactivar esta función, se puede con flag y cosas haci.
Supongamos que al establecer el valor de una variable 0x4FF (Originalmente como 0x0, ahora es un 0x1)

setvar 0x4FF 0x1 [Esto podría ir en algún script de gatillo de otro lugar, digamos en la montaña y cuando despiertes un pokemon este congele la ciudad]

---------------------------------------------------

Este comando es muy útil también si quieren hacer un script donde haya muchos mapas. Y que podrían controlar todo desde un script central y hacer muchos warps al mismo mapa (Con un setmapfooter controlarían los "disfraces de mapas") Así es mucho más cómodo y se ahorran muchos scripts de nivel.
 

Skyflyer

Creador de Pokémon Zenit
Siento revivir un tema de hace tanto pero lo he encontrado al googlear y me ha entrado la curiosidad ya que no lo aclara, sirve también en fire red?
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: Re: GBA | Scripting | El maravilloso comando setmapfooter

Siento revivir un tema de hace tanto pero lo he encontrado al googlear y me ha entrado la curiosidad ya que no lo aclara, sirve también en fire red?
Porsupuesto que sí, alrededor del 95% de comandos de scripts que sirven en ruby tambien sirven en FR.
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: GBA | Scripting | El maravilloso comando setmapfooter

He encontrado que para el comando setmapfooter no es necesario hacer todo eso que Juanjo dice, solo necesitas, en Advance Map, ir al mapa que reemplazará al otro con el setmapfooter, ir a header, presionar Ctrl+H, y en los bytes que estan marcados como "Map Header" ir al byte número 19, ese byte es el ID del mapa, solo basta con poner ese dígito en el comando setmapfooter para que esto funcione, no necesariamente se usa a-map
 

Sarkoo

Profesional de WaH
Respuesta: GBA | Scripting | El maravilloso comando setmapfooter

wow!!!
Buen comando!!!
Sera de gran ayuda, gran aporte!!!
Salu2
 

Xabier2012

Usuario mítico
Respuesta: GBA | Scripting | El maravilloso comando setmapfooter

He encontrado que para el comando setmapfooter no es necesario hacer todo eso que Juanjo dice, solo necesitas, en Advance Map, ir al mapa que reemplazará al otro con el setmapfooter, ir a header, presionar Ctrl+H, y en los bytes que estan marcados como "Map Header" ir al byte número 19, ese byte es el ID del mapa, solo basta con poner ese dígito en el comando setmapfooter para que esto funcione, no necesariamente se usa a-map
Una vez más Dios Vector iluminándonos el camino. Gracias.
 

Inferno

Miembro insignia
Miembro insignia
Respuesta: GBA | Scripting | El maravilloso comando setmapfooter

Y yo haciendo los setmaptile teniendo esto... Fantástico comando, ahorra mucho tiempo y es sencillo de utilizar.
 

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
Respuesta: GBA | Scripting | El maravilloso comando setmapfooter

~Ruki!;360317 dijo:
He encontrado que para el comando setmapfooter no es necesario hacer todo eso que Juanjo dice, solo necesitas, en Advance Map, ir al mapa que reemplazará al otro con el setmapfooter, ir a header, presionar Ctrl+H, y en los bytes que estan marcados como "Map Header" ir al byte número 19, ese byte es el ID del mapa, solo basta con poner ese dígito en el comando setmapfooter para que esto funcione, no necesariamente se usa a-map
Perdon por responderte como 1000 años después. Pero aquello es un tanto más fácil ;) Lo editaré en el tema principal para que quede claro.

Estoy en proceso de remodelar mis tutos para las nuevas generaciones y ASDF.... También para promocionar el uso de Ruby... Ya que el 94.321% usan FR.

Saludos.
 

Nachoius

Caminante del cielo
Tengo mis dudas, este comando solo sirve en script de nivel o en gatillo tambien? en caso de ser el segundo, necesita algun refresh o algo por el estilo?
 

Gold

Porrero a tiempo parcial
Miembro insignia
Tengo mis dudas, este comando solo sirve en script de nivel o en gatillo tambien? en caso de ser el segundo, necesita algun refresh o algo por el estilo?
Solo en scripts de nivel (Del tipo 01 o 03 si mal no estoy). Al menos hace tiempo lo probé en scripts normales y no hace nada o simplemente crashea el juego.
 

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
Tengo mis dudas, este comando solo sirve en script de nivel o en gatillo tambien? en caso de ser el segundo, necesita algun refresh o algo por el estilo?
En efecto, señor Nacho, en el propio post lo digo. No sirve para scripts de gatillo puesto que el footer se carga al lodear el mapa cuando recién entras (por warp, por ejemplo) así que la única que te queda es usar un gatillo que active una flag. Hacer warp invisible al mismo sitio y un script de nivel que cargue el nuevo mapa. (Es más sencillo de lo que parece)
 
Arriba