tuts_gba
Thread Id: 25074
Thread Name: GBA | Scripting | El maravilloso comando setmapfooter
#0
Doctor Juanjo 12932
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:

#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) Si son pacientes pueden hacer un banco de datos escribiendo setmapfooter 0x0 [Petalburg City]... setamapfooter 0x1 , setmapfooter 0xDA ....

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)

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)



¡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

#1
JV Works 12391
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
#2
Brock 25910
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 :)
#3
wobba_ffet 12383
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.
#4
Tito Sayer301 26309
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!
#5
J.com 12785
El puto amo!
Este comando es genial, la verdad te felicito por este trabajaazo.
Pues si, lo usaré muy sabiamente.

Salu2!!
#6
Loony Boo♪ 12263
¡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.
#7
Megascep_9 Kuchiki 28187
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.
#8
Cheve_X 15014
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 ;)
#9
Doctor Juanjo 12932
Iniciado por Sceptile9
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.