tuts_gba
Thread Id: 11770
Thread Name: FR&E | Scripting | Movimiento Instantáneo de Cámara en FR y EMERALD
#0
Sephiroth 13677
Instant movecamera
en Fire Red y Emerald


Hola a todos. Bien, como el título del tema indica, aquí expondré una rutina ASM y un código en Hexadecimal que encontré por ahí. La primera corresponde a Fire Red USA y ha sido hecha por TSK de PokéCommunity, mientras que lo segundo corresponde a Emerald USA y ha sido hecho por Sonicarvalho. No creo que sea necesario especificar que los créditos si usan algo de aquí deben ir a sus respectivos autores y que yo no tengo ningún mérito.

Fire Red USA

Bueno... es bastante simple, sólo tenéis que insertar esta rutina ASM en HEX en la ROM de Fire Red:

07B5 0548 0168 054A 1288 0A80 0231 044A 1288 0A80 07BD C046 0850 0003 BC70 0302 BE70 0302
Pégalo en un lugar en blanco en tu ROM de FR con cualquier Hex editor.

Y aquí están los specials que tienes que utilizar:

special 0x113 (para separar la telecámara y los movimientos del player)
special 0x114 (para "conectar" de nuevo la telecámara y el player)
special 0x8E

Bueno, pero eso no es todo... para usarlo correctamente tendréis que usar esto en lugar de los writebytetooffset:

setvar 0x8002 0xX (donde X es la coordenada X de la camara)
setvar 0x8003 0xY (donde Y es la coordenada Y de la camara)
callasm 0xOFFSET DONDE SE ENCUENTRA LA RUTINA + 1

Emerald USA

Pues esta vez es aún más sencillo. Una vez que hayas expandido el ROM a 32 MB (puesto que hay realmente poco espacio en Emerald), tendrás que pegar esto en un offset libre (FF FF FF... etc etc etc):

07 B5 05 48 01 68 05 4A 12 88 0A 80 02 31 04 4A 12 88 0A 80 07 BD C0 46 8C 5D 00 03 DC 75 03 02 DE 75 03 02Y otra vez los setvars en lugar de los writebytetooffset's:

setvar 0x8002 0xX (donde X es la coordenada X de la camara)
setvar 0x8003 0xY (donde Y es la coordenada Y de la camara)
callasm 0xOFFSET DONDE INSERTASTE EL HEX ARRIBA + 1Y para terminar, tendréis que insertar estos specials en lugar de los originales de Ruby USA en un movimiento de camara instantaneo, ya que los de Emerald son distintos...:

special 0x116 en lugar del special 0x113
special 0x91 en lugar del special 0x8E
special 0x117 en lugar del special 0x114

HAZ LO SIGUIENTE AL INSERTAR EL CÓDIGO/RUTINA:

Debes colocarlo en un OFFSET múltiplo de 4. Es decir, el offset donde lo coloques terminará en 0, 4, 8 o en C.




Bueno, para los que se pregunten "¿Y por qué no puedo utilizar un WBTO? Pues la razón es sencilla... en ambos juegos (FR y Emerald) las coordenadas son dinámicas, es decir, se refrescan (no sé exactamente si es por la RAM), así que no, no se puede usar un WBTO sin haber antes "des-dinamizado" las coordenadas, y al haberlo hecho el código no es compatible por alguna razón con un WBTO.

Un saludo.
#1
Zaux 12266
¡Excelente aporte!
¡Lo que me hacia falta esto para Fr, realmente gracias!
Vere si me funciona, gracias.

Nos Vemos!
#2
Sonicarvalho 17082
Muy bueno! :D

Si, ese codigo HEX es una rutina THUMB, así que debe ser llamada con OFFSET+1!

Y eses specials son:
Special 0x116 - Libera la camara del player
Special 0x91 - Refresca la screen
Special 0x117 - Agrega la camara al player

Saludos :D
#3
Sephiroth 13677
Buenas a todos de nuevo. Sí, como dice el amigo Sonicarvalho y como me dijo el amigo ~Arc de PokéUniverso... es una rutina en THUMB Mode (cito: THUMB = +1; ARM = +0), por lo cual al offset en el que lo insertaste (que debe terminar en 0, 4, 8 o C) le tienes que sumar + 1.

Gracias a todos.
#4
Cheve_X 15014
=0

Muchas Gracias por las Rutinas =D

De seguro las aplicaré ^^'
Muy buena información y bien explicada
Saludiños!
#5
Gut_Bro 14808
Oh vaya!

Es muy bueno el tutorial, está perfectamente explicado, seguro lo hiciste para ganar el mejor tutorial del año (?)

xD No, en serio, hacen falta turoriales de este tipo para ir familiarizándonos con el ASM, mas o menos me doy una idea de lo que hace, obtiene el valor en ram de las variables, y las escribe en el offset dinámico obtenido de una forma similar :D

Bueno, lo que me pregunto es, cómo se obtienen los Offsets que contienen el Offset dinámico xD Estaría bueno un tuto de eso ;D

Felicidades y Gracias!!
#6
Steven 13336
Que gran tutorial amigo!! Jeje...en verdad este trabajo es muy útil... especialmente para aquéllos que, como yo, tratan de encontrar un "enlace" entre ruby, FR y Emerald ^^"

En cada modo, he logrado a solucionar el problema de que te he hablado, amigo Guru...y vengo a dar mi pequeña contribución (si no es un problema ^^")

Hablamos de Fire Red:
07B5 0548 0168 054A 1288 0A80 0231 044A 1288 0A80 07BD C046 0850 0003 BC70 0302 BE70 0302
(éste es el código HEX por todos los que no tienen tiempo de compilar la routine. Bastará sencillamente pegarlo en el offset que se desea con un Hex Editor)

Y acerca de el script...por fire red tienes que utilizar:

Especial 0x113 (para separar la telecámara y los movimientos del player)
Especial 0x114 (para "conectar" de nuevo la telecámara y el player)
Especial 0x8E (que irá a reemplazar el especial 0x91 que tú has usado en emerald)

Esto es todo...
Un agradecimiento especial a mis amigos Guru, Eing y Sonicarvalho qué me han permitido de solucionar un molesto problema debido al demasiado tiempo pasado lejos del rom hacking (que me ha hecho olvidar muchas cosas XD)