GBC | ASM | Deportivas + bici funcional

Avisos

Like Tree6Gracias
  • 6 Post By Assassin aerdnA

Respuesta
 
Herramientas Desplegado
  #1  
16/12/2014
Predeterminado GBC | ASM | Deportivas + bici funcional
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://wahackforo.com/t-15493/gbc-as...las-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:
call $4017 -- llama al offset $10017, es el offset que originalmente era llamado en el offset $10000

ld a,(D682) -- carga en "a" el contenido de la RAM ubicada en $D682, el cual determina el tipo de "movimiento" en el que se encuentre el personaje

cp a,04 -- lo compara con 04, que es el valor de cuando surfeamos

jr z,$1E -- si la comparacion anterior es cierta, saltamos "1E" bytes (fin de la rutina)

cp a,01 -- si la comparacion anterior es falsa, ahora lo compara con 01, que es el valor de cuando montamos la bici

jr z,$1A -- si la comparacion anterior es verdadera, saltamos "1A" bytes (fin de la rutina)

call $2D63 -- si no es ninguno de los valores anteriores, hacemos una llamada al offset $2D63, 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)

cp a,04 -- lo compara con 04, el cual corresponde a cuando estamos en una cueva

jr z,$09 -- si la comparacion anterior es verdadera, saltamos "09" bytes

cp a,06 -- 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)

jr z,$05 -- si la comparacion anterior es verdadera, saltamos "05" bytes

call $23CD -- si no es alguno de los valores anteriores, hacemos una llamada al offset $23CD, en este offset hay una rutina que comprueba los permisos exteriores, con lo cual se incluye las ciudades/pueblos y las rutas

jr nz,$0A -- 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

ld de,CF29 -- carga en "de" el contenido de la RAM ubicado en $CF29, el cual determina cual boton esta pulsado

ld a,(de) -- carga el contenido de "de" en "a"

and 02 -- verifica que solo sea 02,que corresponde al boton B

ld de,D682 -- carga nuevamente $D682 en "de"

ld (de),a -- carga "a" en "de"

ret -- fin de la rutina
para facilitar la tarea, copiar todo eso e insertar en $13E10
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
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

Código:
$13E39
ld a,(D682) -- cargamos el contenido de la RAM ubicada en $D682, en "a", como se menciono antes, aquie es donde se ubica el "movimiento2 del personaje (normal, bici, surf)

cp a,02 -- comprueba si es 02, que corresponde a "deslizarse" en el hielo

jr nz,$02 -- si no es 02, salta 02 bytes 

and a --  si es 02, verifica "a"? (no entiendo bien este comando XD)

ret -- fin de la rutina

ld a,(CF32) -- carga en "a" el contenido de la RAM ubicado en $CF32, el cual determina la accion del tile en el que nos encontramos

cp a,23 -- lo compara con 23, el cual corresponde al hielo

jr z,$02 -- si lo anterior es cierto, saltamos 02 bytes

and a -- si no es 02, verifica "a"? (creo que ya lo dije)
ret -- fin de la rutina
scf -- "set flag carry", con esto nos deslizaremos si estamos en el hielo

ret  -- fin de la rutina
En hex igualmente, onsertar en $13E39
Código:
FA 82 D6 FE 02 20 02 A7 C9 FA 32 CF FE 23 28 02 A7 C9 37 C9
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


mis proyectos



  #2  
16/12/2014
Predeterminado Respuesta: [GBC][ASM]Deportivas mas Bici funcional
En mi vida toqué GBC y dudo que lo haga, pero si es el caso esto va a ayudar mucho.
Gracias por la currada que os metisteis!
  #3  
16/12/2014
Predeterminado Respuesta: [GBC][ASM]Deportivas mas Bici funcional
Al final todo fue mas sencillo Javcdark.

Mirando en desensamble de crystal y gracias a un chico de Skeetendo veo que lo que define la velocidad del sprite esta en la rutina TryStep y lo unico que hay que intervenir es que la opcion de "caminar" para que compruebe si se esta pulsando B, de ser asi, aplica la velocidad de la bici, de este modo en apariencia no ocurre ningun bug y no se tiene que modificar ninguna otra rutina extra. A continuacion te dejo la rutina original donde se inserta nuestro parche:

Código:
TryStep: ; $1016B

; Surfing actually calls TrySurfStep directly instead of passing through here.
	ld a, [PlayerState]
	cp PLAYER_SURF
	jr z, TrySurfStep
	cp PLAYER_SURF_PIKA
	jr z, TrySurfStep

	call CheckLandPermissions
	jr c, .asm_801be

	call IsNPCInFront
	and a
	jr z, .asm_801be
	cp 2
	jr z, .asm_801be

	ld a, [StandingTile]
	call CheckIceTile
	jr nc, .ice

; Downhill riding is slower when not moving down.
	call CheckRiding
	jr nz, .asm_801ae

	ld hl, BikeFlags
	bit 2, [hl] ; downhill
	jr z, .fast

	ld a, [WalkingDirection]
	cp DOWN
	jr z, .fast

	ld a, STEP_WALK
	call DoStep
	scf
	ret

.fast
	ld a, STEP_BIKE
	call DoStep
	scf
	ret

.asm_801ae
	ld a, STEP_WALK-----------$101AE ; Aqui va el parche
	call DoStep
	scf
	ret

.ice
	ld a, STEP_ICE
	call DoStep
	scf
	ret

; unused?
	xor a
	ret

.asm_801be
	xor a
	ret
Esta es mi version de la rutina:

Código:
$101AE
call @extension
scf
ret


org 04:7E03//$13E03
@extension

call $2D63//GetMapPermission
cp a,04//Cave
jr z,@siguiente
cp a,06//Indoor
jr z,@siguiente

call $23CD//CheckOutdoorMap
jr nz,@Walk

@siguiente
ld a,[$CF29]//let's game know, that you're pushing "B"
bit 2,a
and a,$02
jr z,@Walk

ld a,$02//STEP_BIKE ; run
call $425F//DoStep
ret

@Walk
ld a,$01//STEP_WALK
call $425F//DoStep
ret

Última edición por Chamber; 16/12/2014 a las 23:27
  #4  
16/12/2014
Predeterminado Respuesta: [GBC][ASM]Deportivas mas Bici funcional
cosas de la vida, la vi esta mañana cuando iba a postearla en skeetendo, do todas formas ambas son funcionales


mis proyectos



Respuesta

Herramientas
Desplegado

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Desactivado



Extra
Estilo clásico
La franja horaria es GMT +1. Ahora son las 07:29.