Lo que os traigo aquí es un aporte curioso, importante y no muy fácil de encontrar. Se trata de la rutina ASM desarrollada por koolboyman para utilizar las zapatillas deportivas en Pokémon Oro y Plata pulsando B. Mi único aporte aquí es acercaros la rutina, explicarla un poco más que en el post original y traducir al español todo (no existe ninguna documentación de ASM de GBC en español), ya que la rutina es 100% obra de koolboyman. Lo que pongo entre paréntesis detrás del código ASM es exactamente la misma línea pero en Hexadecimal, por si preferís añadir la rutina “a capón” en Hex en vez de utilizar un Assembler.
Empezamos:
Offset 97BFA:
•ld hl,$7BE4 (21 E4 7B) - El contador de la Tienda de Bicicletas cuenta el número de pasos dados a una velocidad mayor que la del minisprite normal, por lo que hay que asegurarse de que no funcione para evitar bugs (como que el tendero te llame antes de tener la bici). Esto desactiva la flag del contador antes mencionado.
Offset 10000:
•call $7E66 (CD 66 7E) - Llama al offset 13E66 donde pondremos nuestro código. Sin mucho misterio, ¿No?
Offset 13E66:
•call $4017 (CD 17 40) - Es el código que había en el offset 10000, simplemente lo hemos movido aquí para ampliarlo.
•ld de,$D682 (11 82 D6) - Carga el contenido del Offset D682 a “de”; determina si el protagonista está en montado en la bici o no (y por tanto la velocidad del mini).
•ld c,$04 (0E 04) - La RAM usa la misma localización para la bici y Surf; con esto no pasa nada cuando surfeamos.
•ld a,[de] (1A) - Pone el contenido de “de” (al cual habíanos cargado el valor de D682 de la RAM) en “a”
•sbc a,c (99) - Resta “c” a “a”
•jr z,$7E8B (28 18) - Comprueba si la resta anterior (“c” - “a”) da como resultado 0. Si es cierto, salta 18 bytes hasta el final de la rutina, es decir “ret” (C9 en Hex). Como el byte de surf es 04, es el único que restado a “a” da 0.
•ld de,$CF29 (11 29 CF) - Carga el contenido de CF29 (offset en el que se encuentran los bytes que dicen si X botón está presionado o no) a “de”.
•ld a,[de] (1A) - Carga todo el contenido de “de” a “a”. Con esto ya casi estaría, pero hay un inconveniente: no hemos decidido a qué botón asignar las zapatillas. Como queremos asignarlas al botón B, vamos a desactivar la rutina para el resto de botones. B es el bit número 1 así que:
*res 0,a (CB 87) - Desactiva el bit 0 en “a” (anula la rutina para A)
*res 2,a (CB 97) - Descativa el bit 2 en “a” (anula la rutina para Select)
*res 3,a (CB 9F) - Desactiva el bit 3 en “a” (anula la rutina para Start)
*res 4,a (CB A7) - Desactiva el bit 4 en “a” (anula la rutina para Flecha Derecha)
*res 5,a (CB AF) - Desactiva el bit 5 en “a” (anula la rutina para Flecha Izquierda)
*res 6,a (CB B7) - Desactiva el bit 6 en “a” (anula la rutina para la Flecha Arriba)
*res 7,a (CB BF) - Desactiva el bit 7 en “a” (anula la rutina para la Flecha Abajo)
*rcc, a (CB 0F) - Cambia los bits de debajo de A por uno menos (cambia 2 por 1...).
•ld de,$D682 (11 82 D6) - Carga de nuevo D682 en “de”
•ld [de],a (12) - Carga el contenido de “a” en “de”.
•ret (C9) - Finaliza la rutina
Como conclusión: esto hace que cada vez que B es pulsado, la rutina escribe 01 en D682, lo cual hace que la velocidad de tu minisprite aumente a la de la bicicleta.
Bugs conocidos:
-Si hablas con un personaje mientras mantienes pulsado el botón B, al terminar subirás a la bicicleta aunque no la tengas. La solución a esto es copiar el minisrite del prota caminando encima del de la bicicleta. Pierdes la Bici, pero ganas las zapatillas, las cuales veo mucho más cómodas, además de un hueco de música sin usar (el tema de la Bici) que puedes usar para insertar una canción nueva.
Espero que este aporte haya sido útil tanto para hackers de GBC como para curiosos.
Todos los créditos reservados para Koolboyman, dadle créditos si usais esta rutina.
Post original: [Gold/Silver] Running Shoes - The PokéCommunity Forums