Xuuki
holi
Se que existe un tema aqui explicando la rutina de Coolboyman, pero tiene varios detalles que hacen que no quede muy bien que digamos, tales como el poder correr en todos lados y el mas importante, el no poder usar la bici.
Bien pues si quieren ver la rutina original aqui les dejo el link
http://www.pokecommunity.com/showthread.php?t=206689
y aqui la traduccion por parte de @Gallego13
http://whackahack.com/foro/t-15493/gbc-asm-poniendo-zapatillas-deportivas
Cabe aclarar que mi rutina esta basada en la original de coolboyman, pero si ven cualquiera de los 2 links que les puse y la comparan con la mia, notaran la diferencia entre ambas.
Sin mas rodeos comencemos:
Lo primero que haremos es desactivar el contador de de pasos a una mayor velocidad, que aunque no se si afecte o no, es mejor prevenir
Asi que iremos a $97BFA y cambiaremos 21 EC D9 por 21 E4 7B
Lo siguiente es indicar los pointers de las rutinas que usaremos, asi que nos dirigiremos a $10000 y cambiamos CD 17 40 por CD 10 7E
Aqui lo que hacemos es cambiar la direccion a la cual se va a llamar, en este caso ahora va a llamar al offset $13E10
Ahora vamos a $10417 y remplazamos FA 82 D6 FE por CD 39 7E C9
Aunque no lo parezca, ya hemos hecho cambios en las rutinas, osea, hemos aplicado algo de asm, claro, aunque "traducido" a hex
Pero, eso no servira sin las siguientes rutinas, las cuales haran que podamos usar las deportivas al pulsar el boton B y la bici sin ningun problema
para facilitar la tarea, copiar todo eso e insertar en $13E10
Comparandola con la rutina de Collboyman, podria decir que ya esta terminado, pero si la probamos en un rom obtendremos un bonito bug que hara que se nos "crashe" el juego, esto se puede solucionar regresando los valores ubicados en $10417 a a su valor inicial, pero esto conlleva a otro bug un tanto menor (comparado con el crasheo del juego seria minimo), el bug es que cuando entramos a una zona con hielo, no nos deslizaremos como pasa normalmente, es por eso que se cambian los valores y se incluye una nueva rutina
En hex igualmente, onsertar en $13E39
Ahora si, ya esta la rutina funcional y sin bug (creo)
bueno, hay un bug casi insignificante, que es al momento de mantener presionado "B" y la tecla de direccion hacia una pared o algo en lo que no podamos avanzar, el mini no muestra animacion(se queda estatico), pero eso no implica que no podamos movernos
Otra cosa, si se tiene aplicado el parche de seleccion de generos, ir al offset $17FFC (aproximadamente, ya que yo lo tengo ahi, pero creo que @chamber lo cambio)y buscar 00 5E 01 58 04 53 08 34 FF y remplazar 08 34 por 02 5E
Ahora si, eso es todo
creditos a Koolboyman por su rutina original, a @Gallego13 por traerla aqui y a @chamber por facilitarme los offsets que comprueban los permisos de los mapas
Bien pues si quieren ver la rutina original aqui les dejo el link
http://www.pokecommunity.com/showthread.php?t=206689
y aqui la traduccion por parte de @Gallego13
http://whackahack.com/foro/t-15493/gbc-asm-poniendo-zapatillas-deportivas
Cabe aclarar que mi rutina esta basada en la original de coolboyman, pero si ven cualquiera de los 2 links que les puse y la comparan con la mia, notaran la diferencia entre ambas.
Sin mas rodeos comencemos:
Lo primero que haremos es desactivar el contador de de pasos a una mayor velocidad, que aunque no se si afecte o no, es mejor prevenir
Asi que iremos a $97BFA y cambiaremos 21 EC D9 por 21 E4 7B
Lo siguiente es indicar los pointers de las rutinas que usaremos, asi que nos dirigiremos a $10000 y cambiamos CD 17 40 por CD 10 7E
Aqui lo que hacemos es cambiar la direccion a la cual se va a llamar, en este caso ahora va a llamar al offset $13E10
Ahora vamos a $10417 y remplazamos FA 82 D6 FE por CD 39 7E C9
Aunque no lo parezca, ya hemos hecho cambios en las rutinas, osea, hemos aplicado algo de asm, claro, aunque "traducido" a hex
Pero, eso no servira sin las siguientes rutinas, las cuales haran que podamos usar las deportivas al pulsar el boton B y la bici sin ningun problema
Código:
$13e10:
[I]call $4017[/I] -- llama al offset $10017, es el offset que originalmente era llamado en el offset $10000
[I]ld a,(D682) -- [/I]carga en "a" el contenido de la RAM ubicada en [B]$D682[/B], el cual determina el tipo de "movimiento" en el que se encuentre el personaje
[I]cp a,04 --[/I] lo compara con 04, que es el valor de cuando surfeamos
[I]jr z,$1E --[/I] si la comparacion anterior es cierta, saltamos "1E" bytes (fin de la rutina)
[I]cp a,01 -- [/I]si la comparacion anterior es falsa, ahora lo compara con 01, que es el valor de cuando montamos la bici
[I]jr z,$1A -- [/I]si la comparacion anterior es verdadera, saltamos "1A" bytes (fin de la rutina)[I]
call $2D63 -- [/I]si no es ninguno de los valores anteriores, hacemos una llamada al offset [B]$2D63[/B], en este offset hay una rutina que comprueba los "permisos" del mapa, osea que comprueba si podemos usar la bici o no (lo mismo pasa con vuelo y por ende, pasara lo mismo con las deportivas)
[I]cp a,04 -- [/I]lo compara con 04, el cual corresponde a cuando estamos en una cueva
[I]
jr z,$09 --[/I] si la comparacion anterior es verdadera, saltamos "09" bytes
[I]
cp a,06[/I] [I]-- [/I]lo compara con 06, el cual corresponde a cuando estamos en una caseta/portal (la que sirve de separacion entre un mapa y una ruta)
[I]
jr z,$05 --[/I] si la comparacion anterior es verdadera, saltamos "05" bytes[I]
call $23CD -- [/I]si no es alguno de los valores anteriores, hacemos una llamada al offset [B]$23CD[/B], en este offset hay una rutina que comprueba los permisos exteriores, con lo cual se incluye las ciudades/pueblos y las rutas
[I]
jr nz,$0A -- [/I]si no es cualquiera de los anteriores, saltamos "0A" bytes (fin de la rutina), en otras palabras esta comprobaciones haran que no podamos usar las deportivas en interiores a excepcion de cuevas y casetas
[I]
ld de,CF29 --[/I] carga en "de" el contenido de la RAM ubicado en [B]$CF29[/B], el cual determina cual boton esta pulsado
[I]
ld a,(de) -- [/I]carga el contenido de "de" en "a"
[I]
and 02 -- [/I]verifica que solo sea 02,que corresponde al boton B
[I]
ld de,D682 -- [/I]carga nuevamente [B]$D682[/B] en "de"
[I]
ld (de),a -- [/I]carga "a" en "de"
[I]
ret[/I] -- fin de la rutina
Código:
CD 17 40 FA 82 D6 FE 04 28 1E FE 01 28 1A CD 63 2D FE 04 28 09 FE 06 28 05 CD CD 23 20 0A 11 29 CF 1A E6 02 11 82 D6 12 C9
Código:
$13E39
[I]ld a,(D682) -- [/I]cargamos el contenido de la RAM ubicada en [B]$D682[/B], en "a", como se menciono antes, aquie es donde se ubica el "movimiento2 del personaje (normal, bici, surf)
[I]
cp a,02 -- [/I]comprueba si es 02, que corresponde a "deslizarse" en el hielo
[I]
jr nz,$02 -- [/I]si no es 02, salta 02 bytes [I]
and a -- [/I]si es 02, verifica "a"? (no entiendo bien este comando XD)
[I]
ret -- [/I]fin de la rutina[I]
ld a,(CF32)[/I] -- carga en "a" el contenido de la RAM ubicado en [B]$CF32[/B], el cual determina la accion del tile en el que nos encontramos
[I]
cp a,23 -- [/I]lo compara con 23, el cual corresponde al hielo
[I]
jr z,$02 -- [/I]si lo anterior es cierto, saltamos 02 bytes
[I]
and a[/I] -- si no es 02, verifica "a"? (creo que ya lo dije)[I]
ret [/I][I][I]-- [/I]fin de la rutina
scf -- [/I]"set flag carry", con esto nos deslizaremos si estamos en el hielo
[I]
ret[/I] [I] -- [/I]fin de la rutina
Código:
FA 82 D6 FE 02 20 02 A7 C9 FA 32 CF FE 23 28 02 A7 C9 37 C9
bueno, hay un bug casi insignificante, que es al momento de mantener presionado "B" y la tecla de direccion hacia una pared o algo en lo que no podamos avanzar, el mini no muestra animacion(se queda estatico), pero eso no implica que no podamos movernos
Otra cosa, si se tiene aplicado el parche de seleccion de generos, ir al offset $17FFC (aproximadamente, ya que yo lo tengo ahi, pero creo que @chamber lo cambio)y buscar 00 5E 01 58 04 53 08 34 FF y remplazar 08 34 por 02 5E
Ahora si, eso es todo
creditos a Koolboyman por su rutina original, a @Gallego13 por traerla aqui y a @chamber por facilitarme los offsets que comprueban los permisos de los mapas