-Para entender esto, debes saber por lo menos usar el comando WBTO(Writebytetooffset)
-Debes saber manipular la ram con WBTO (Para este caso se recomienda saber cambiar las paletas)
-Debes saber usar el HxD (Buscar datos, editar, ect)
-Este metodo debe ser usado con precaucion, la RAM es limitada asi que no es bueno abusar de ella con este metodo.
Comenzemos...
Vosotros debereis saber que al utilizar el WBTO, podemos manipular lo que sea que este en la RAM, cualquier cosa. Inclusive, podemos manipular aspectos graficos de pantalla con esto (Entiendase VRAM o Video Ram).
El problema viene cuando queremos por ejemplo, cambiar las paletas o el mini del prota, que al abrir la mochila, o con un warp, o un fadescreen, estos vuelven a ser normales...
Eso se debe al refrescado de pantalla, que no es mas que la accion de resetear toda la VRAM.
En pocas palabras, olvidaos de cambios de paletas o de minis duraderos, porque apenas abris la mochila y ¡puf! se quitan.
Pero aqui traigo un truco para que el cambio dure para siempre...
Al resetear la VRAM, el juego Carga nuevamente todos los graficos y paletas desde la ROM hasta la VRAM. Lo que vamos a hacer aqui es cambiar esto:
Cargar desde Rom hasta VRAM
por esto:
Cargar desde RAM hasta VRAM
¿Que hacemos con eso?, sencillo, hacemos que el juego cargue los graficos y paletas X desde la RAM y no desde la rom.
Para este ejemplo voy a hacer un cambio de paletas permanente
1. Vamos a tomar el offset de nuestra paleta y lo permutamos. Entiéndase por permutar, a voltear los bytes de forma que el primero quede de ultimo y el ultimo quede de primero (Ejemplo, si el offset de la paleta es 345A2B, permutado seria 2B5A34)
2. Entramos al HxD y usamos la opcion "Buscar", y buscamos esos bytes permutados.
3.Al encontrarlos el HxD los sombreara, lo que vamos a hacer es a cambiar esos bytes por una dirección en la WRAM. Cambiaremos tambien el 08 que esta justo despues de los bytes encontrados.
Yo usare como ejemplo la direccion 02026CBA(Permutada, es decir BA6C0202), por lo que sustituire los bytes que encontre (En este caso el "2B5A3408") por "BA6C0202.
Con eso hacemos que el juego cargue la paleta desde la WRAM, y no desde la ROM. La ventaja de la WRAM es que se guarda junto con el archivo .sav del juego. Otra ventaja primordial seria que la WRAM es totalmente modificable usando WBTO.
4. Ahora colocaremos en un script al inicio del juego (O en una parte temprana en la que aun no se pueda acceder a la paleta) lineas de WBTO para cargar la paleta en la WRAM.
Haced como si escribieses cualquier dato en cualquier posicion de la RAM, solo que en este caso usareis la direccion en WRAM que colocaste en HxD y cargareis con WBTO vuestra paleta en esa direccion.
en este caso seria:
Writebytetooffset 0x20 0x02026CBA
Writebytetooffset 0x15 0x02026CBB
Writebytetooffset 0x63 0x02026CBC
......
Y asi hasta cargar toda la paleta
Es casi igual que cambiar una paleta de forma normal, solo se distingue en dos cosas:
-Utilizais la direccion en WRAM que pusiste en el HxD
-En esta parte, cargais vuestra paleta ORIGINAL
Si hiciste todo bien, la paleta debería quedar en la WRAM al ejecutarse ese script, por lo que a partir de alli la paleta cargara normalmente como si estuviese en la ROM.
Con una pequeña diferencia ;) , esta radica en que la RAM a diferencia de la ROM, es totalmente modificable :awesome:
Tan solo Abrid el memory viewer con la paleta cargada, y dirigios a la direccion en WRAM que usaron en el HxD. Vereis los bytes de la paleta en cuestion, entonces ¡Cambiadlos! y luego refresca la pantalla(Abre la mochila xD)
BOALA!! al hacer eso la paleta a cambiado segun lo que pusiste en el memory viewer, y lo mejor es, que al refrescar, ¡Esta no vuelve a ser igual que la original!
Perfecto, pero ¿Lo ideal no seria que el juego mismo las cambie y no el usuario, verdad?. Pues en ese caso usaremos WBTO
5.Repetiremos el proceso que hicimos en el primer script, pero esta vez cargaremos la paleta cambiada.
Luego solo refrescamos con un Fadescreen o un Special, quedaria algo parecida a esto:
Writebytetooffset 0x55 0x02026CBA
Writebytetooffset 0x00 0x02026CBB
Writebytetooffset 0x85 0x02026CBC
...
(Muchos WBTO despues)
...
special 0x8e
end
Y con ese script, ya quedarían cambiadas las paletas, y lo mejor es que al refrescar, ESTAS NO VUELVEN A SER LAS ORIGINALES!!, incluso si guardasemos el juego y cerrasemos el emulador ESTAS NO CAMBIARIAN!! porque recordad que la WRAM se guarda con el .sav :awesome:
Y si quisiésemos hacer que las paletas volviesen a ser las originales, tan solo tendriamos que repetir el primer script(EL que carga las paletas originales)
Con esa tecnica, podreis hacer maravillas, como rutas primaverales que de pronto se ponen blancas por la nieve XD
Y si no me equivoco, también podéis aplicarla para otros datos como los minis y esas cosas, pero lamentablemente eso aun no lo termino de investigar xD