qna_rh
Thread Id: 14122
Thread Name: Cambiar al prota
#0
J.com 12785
Hoy me gustaria saber como se cambia el prota por otro minisprite (se que es mediante ASM) pero no encuentro tutos por internet que me digan como hacerlo.
Por si no entendieron la duda, vean este video, quiero hacer exactamente lo mismo:
http://www.youtube.com/watch?v=FKJM4L7xP84

Bueno espero que me ayuden, grax!
#1
cosarara97 12296
http://wahackforo.com/t-CAMBIO-MINI-RUBY-USA?pid=80084#pid80084
No necesitas ASM, solo un writebytetooffset.
#2
J.com 12785
Pero yo trabajo con FR
¿Tambien se puede en FR?
#3
cosarara97 12296
Seguramente sí, pero tendrás que buscar la dirección en la RAM.
#4
eing 12479
Een fr es distinto creo...
Ya que los punteros que se hayan en la ram son dinamicas, por lo tanto no se si funciona igual que en el rubi, que es cambiando el puntero del mini en el rom, o bien cambiandole el sexo...
Igualmente te doy un consejo, descargate el cheat engine -la ultima version- y busca el puntero del minisprite, -miralo en el overworld editor en modo profesional- seguido de eso coge la direccion y editala mediante wbto, y nos cuentas que tal...


Un saludo!
#5
cosarara97 12296
Para buscar el puntero no hace falta el cheat engine, puedes hacerlo directamente con vba.
#6
J.com 12785
Ya probe a buscar el puntero del mini, pero auna vez lo encuentro, no se que hacer con el
#7
cosarara97 12296
Una vez lo encuentres, apuntas su dirección y haces lo mismo que harías con ruby...
#8
eing 12479
El puntero sale en el overworld editor.. En modo profesional.
Pongamos que es el "08093D60".
Entonces buscamos los bytes en la ram de "08093D60", y nos dara una ubicacion en la ram, entonces luego haces un wbto a esa direccion -la de la ram- y ale mini cambiado!

Pd. Deberias saber que TODO tipo de datos reflejados en la ram,son extraidos del ROM. Por lo tanto empezaran todos los punteros por 08.
Y algunas funciones del rom, estan sacadas de funciones globales de la ram.. (como x ejemplo el i/o)
#9
J.com 12785
A ver si lo he entendido.
Tengo que buscar el mini que quiero que aparezca en el overworld, y donde dice "Pointer del sprite me sale un nº (083A0420)
Luego, ese nº lo introduzco en el vba, en tools/memory viewer. Le doy a buscar y el 1º nº que me sale (justo a la derecha de este) es 08365BA8.
Luego pongo ese nº en un script con un writebytetooffset poniendo 0x1/2 0x08365BA8
Eso es lo que e probado y no me sale.
Lo estoy haciendo bien?? :s
#10
eing 12479
No, has entendido mal..
Abre tu rom en el overworld editor y pon el sprite de tu protagonista, y dale a vista modo profesional.
Entonces te salen 3 pointer sprite, pues te has de quedar con el tercero.
Ahora abres el rom con el vba y le das a search cheata for cheats en modo 32bits (porque una direccion son puntero+direccion, pongamos que la direcion es 080F3D65, pues 08 es el puntero y 0F3D65 es la direccion... Entonces cada byte son dos numeros, y como hay 8 numeros, pues en total son 4bytes. Y 4 bytes son 32bits.. -1byte=8bits-)
Es por eso por lo que has de buscar ese offset en modo 32 bits.
Entonces le das a buscar con el search cheats for cheats esa direccion y si te sale algo sera una direccion de la ram, pues a esa es a donde habras de hacer el writebytetoooffse, poniendo el pointer sprite numero 3 del sprite que quieras manejar.

Por otro lado, NUNCA hagas un wbto a una direccion con puntero 08, ya que esto es el ROM, y este es solo de lectura, por lo cual mientras se ejecuta NO puedes sobreescribir su informacion...
#11
J.com 12785
Al buscar la direccion del prota me sale 02020648, eso lo pongo en un writebytetooffset, pero como?
Lo escribo asi en el script:

writebytetooffset 0x1(aqui no se que poner) 0x02020648

Pero el mini del prota se estropea, como hago para que se transforme en el mini que yo quiera?
Tambien probe en buscar en el search for cheats la direccion del pointer 3 del mini que quiero que aparezca, pero no me salen resultados, no encuentra ninguna direccion.
#12
eing 12479
Ponme una screen de lo que te sale en esa direccion.
Porque cada direccion es un byte, y normalmente cuando intentas cambiar un mini, la direccion que te dan es el primer byte, que es el puntero. Asi que solo has de cambiar los 3 primeros bytes de despues de ese numero...
Pasame screen y te digo!

Pd. El offset de donde lo has sacado?
#13
J.com 12785
Bueno, aki hago un resumen de los pasos que sigo:


Y despues en el script de un mini de ciudad pongo:
writebytetooffset 0x1(aqui no se que poner) 0x02020648
Pero no me sale, que paso me e saltado? :S
#14
cosarara97 12296
En lugar de 0x1 pones el pointer 3 del mini que quieres, lógicamente. Aún así, me parece muy raro que puedas hacerlo en FR, por el tema de la RAM dinámica y eso...
#15
eing 12479
Muy bien, hasta ahí quería llegar...
Has encontrado el offset en la RAM que carga el mini del protagonista.
La direccion es:
02020648 = A0 (Primer byte de la dirección donde se ubica el mini en la ROM.)
02020649 = 00 (Segundo byte de la direccion donde se ubica el mini en la ROM.)
0202064A = 3A (Tercer byte de la direccion donde se ubica el mini en la ROM.)
0202064B = 08 (Es el puntero del mini, que indica que carga un dato del ROM.)

Tendriamos que cambiar los 3 primeros bytes de esa direccion.
Para colocar una nueva dirección.
Supongamos que el nuevo mini su pointer 3 es el 083A0C40.
Lo permutamos -ya que todo está permutado en la rom cuando apunta a una dirección..-
083A0C40 = SIN PERMUTAR
400C3A08 = PERMUTADO.

Como vemos, que el pointer es el mismo EN AMBOS MINIS (Y siempre será el mismo pointer para TODOS los datos siempre y cuando sean extraidos DEL MISMO LUGAR, -VRAM, I/O,ROM..etc.-) soloo hará falta 3 writebytetooffset.

Quedaría así...

writebytetooffset 0x40 0x02020648
writebytetooffset 0x0C 0x02020649
writebytetooffset 0x3A 0x0202064A


Y en resumen, siempre que quieras substituir un gráfico u otra cosa con el WBTO, y en el offset que estes indique una direccion offset (3 bytes)| Puntero, habras de modificar solo los 3 bytes primeros.
#16
J.com 12785
Lo he probado con el pointer 3 del mini en el que me quiero comvertir, es 083A0420
Asi que en el script pongo:

writebytetooffset 0x3A 0x02020649
writebytetooffset 0x04 0x0202064A
writebytetooffset 0x20 0x0202064B

Pero cuando se ejecuta, el mini del prota y el mini con el que ablo se estropean y se ven a rayas.
#17
eing 12479
Mmm que extraño, como dijo cosara, en FR es más "dificil", ya que solo ha sido comprobado en rubí.. y fr en este sentido es más complejo -.-'
Ves con el memoryviewer y comprueba que se hayan cambiado los bytes..
Si no, pasame un FR sin mugs, y dejame que pruebe ;P
#18
J.com 12785
http://wahackforo.com/t-Fire-Red-Usa-sin-bugs
Ahi tienes uno, es el mismo que uso yo, FR USA.
#19
eing 12479
Vale fallo garrafal mío, por falta de práctica.
La estructura de un offset, que apunta a otra dirección es un offset permutado.
Es decir, en la dirección de la ram, hayarás la direccion fisica donde se haya el gráfico, pero permutada.

Así mismo, el offset que carga el mini:
02020648 --> A0 00 3A 08 (si te fijas es la dirección fisica que buscamos en el search for cheats, pero permutada)
Así que como estamos en la ram, hay que editar esa dirección, mediante WBTO, poniendo la nueva direccion fisica de nuestro nuevo mini.

Así que deberiamos colocarlo así..

writebytetooffset 0x40 0x02020648
writebytetooffset 0x0C 0x02020649
writebytetooffset 0x3A 0x0202064A

De manera que si vamos al visual viewer a la dirección "02020648", encontraremos la siguiente combinacion de bytes. --> 40 0C 3A 08

Y guala! ya tendremos nuestro sprite cambiado con éxito -Si es la misma paleta-
Si no es la misma paleta, tocará poner unos 30 WBTO más para cambiar toda la paleta del sprite, ya que no he podido encontrar como carga la paleta el sprite..

PD:Ah, y no olvides poner scripts de nivel en TODOS los mapas donde interactues con el mini cambiado, con el WBTO, ya que al refrescar la pantalla, los cambios se pierden y vuelven al por defecto.

PD2: De paso, te pondré para que sirve cada pointer..
ANIM POINTER= Animacion del mini. (Te aconsejo cambiarla si el mini no tiene la misma animacion, para evitar problemas)
POINTER 1 = WIDTH del mini
POINTER 2= HEIGHT del mini
POINTER 3= Informacion de mini. (con todas sus frames)


PD3: Adjunto foto...

(No cambie la paleta, por eso se ve con la paleta del protagonista.. para eso como dije anteriormente hacen falta 30 wbto más.. si los quieres hacer allá tu, pero es mejor usar distinto mini, misma paleta..)


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

EDIT:
Me he molestado en hacer yo TOOODO el script, para obtener un cambio de mini del protagonista, al policia de FR..

IMAGEN:


Y el script os lo dejo en un spoiler ^^


Espacio minimo necesitado (en bytes): 198 bytes.
(Lo que viene a ser 12 lineas de código..)
¿Mucho? Sí, pero el espacio está para gastarlo ¿no?

PD: Esto también se podría hacer por ASM... y se vería notablemente reducido el espacio usado, ya que con asm puedes manejar cadenas de 32 bits (4bytes) y tan solo ocupariamos un par de lineas, ya que con una funcion cargamos el mini anterior, cargamos el mini nuevo, y con 4 funciones mas cargamos toda una paleta.. (4x4=16^^)

Saludos..
#20
cosarara97 12296
A mi me ha quedado una duda: ¿Donde consigues los offsets de los pointers de las paletas?
#21
eing 12479
Palete viewer, buscas la paleta del mini a insertar, le das a value y buscas... Por ejemplo 7FFF.
Lo buscas en el search for cheats en modo 16 bits, y te da la direccion de la ram.
Ahora vas al principio de la paleta y cambias todos los bytes (15 paletas x 2 bytes = 30 bytes) menos el primer color que es el invisible...
Ah y al poner wbto, las paletas tambien van permutadas. Si la value en el palette viewer es 1580, habras de poner primero 80 y luego 15.

Saludos!

Cualquier duda publicarla aqui...
#22
J.com 12785
Muchisimas muchisimas gracias a los 2 sobre todo a ti eing!
Aun no e probado esto ultimo que me has dicho, pero si te funciona en un FR significa que tambien funcionara en el mio.
No obstante, luego probare a hacerlo (aora no tengo ganas) asi que no cerreis el tema por si fallo en algo y necesito vuestra ayuda una vez mas (no, no quiero abusar de vuestra ayuda, pero me estais haciendo un fabor ENORME!)

EDITO:
Ya lo probé y funciona. Bien una parte esta lista, la de cambiar al mini, probé cambiando a otro mini que no fuese el poli y tambien funciona, osea que lo 1º ya está listo.
Ahora, me ice un poco de lio con lo de las paletas.
Sigo por pasos lo que has dicho para cambiar las paletas, pero no entiendo lo que hay que hacer en esta parte:

Iniciado por eing

Ahora vas al principio de la paleta y cambias todos los bytes (15 paletas x 2 bytes = 30 bytes) menos el primer color que es el invisible...
Ah y al poner wbto, las paletas tambien van permutadas. Si la value en el palette viewer es 1580, habras de poner primero 80 y luego 15.


Aqui una imagen del primer paso para cambiar la paleta:


Despues de eso, me trabo :S
#23
eing 12479
Esa paleta que me has seleccionado, es la paleta que quieres insertar.
Bien el primer color NO interesa, por lo tanto no mires su value.
Las value que te interesan son las 15 que vienen detras del primer color.
Entonces coge el script que yo te di, y cambia desde el 4o wbto hasta el ultimo, con los value de esa paleta!
Y permutados!! Es decir si el value es 40FF, pondras primero wbto 0xFF 0xdireccion y luego whto 0x40 0xdireccion...


Un saludo
#24
J.com 12785
Si! Al fin! Como e tardado en conseguirlo, pero al final lo consegui.
Gracias de nuevo por la ayuda.

Antes de cerrar tema solo quiero preguntar un extra que tiene que ver con esta misma duda.
¿Aparte del mini, tambien se puede cambiar el sprite del trainer que se ve en la T card?
#25
eing 12479
Eso nunca lo he probado...
Pero imagina que si, abre el unlz y mira donde esta el sprite del prota, busca su direccion y seguido de ello buscala con el search for cheats...
Si esta pues haces wbto tbe, si no no xD
Aunque igualmente, es dificil de cambiar dado que ese sprite si rubieses que haces un whto, al entrar al menu se pondria normal.. Ya que refrescas la ram, asi que tendria que ser editando el menu con asm directamente... O nose, esta informacion que te facilito actualmente es mi "opinion", pero es insuficiente como para ser 100% efectiva/fiable..
Cuando lo estudie te lo digo.. Un saludo!!
#26
J.com 12785
Ok pues muchas gracias por todo, la duda esta resuelta y el tema puede ser cerrado ;)