Eficacia confirmada por los siguientes usuarios: CampeonSteven.
Este tutorial está dedicado a mi colega @CampeonSteven, quien preguntó una duda acerca de un tutorial de Pokecommunity. Y bueno, al principio pensé en responderle sobre una parte específica. Sin embargo, pensándolo bien, yo soy bastante torpe y sé que estas cosas son costosas de entender. Por ello, he pensado resolver su duda y la de muchos de vosotros de la forma más útil y entendible que pueda imaginar: ¡traduciendo el mismísimo tutorial!
Este manual está redactado por Jambo51, yo simplemente lo he traducido y le doy mis más sincero agradecimiento. Podéis encontrar su tutorial en la siguiente dirección: >>Accede aquí<<
Y dicho esto, ¡empecemos!
Controlar la música de los Pokémon Legendarios (Special 0x138)
A ver, a ver, a ver, ¡¡lo primero!! Una aclaración MUY IMPORTANTE, este "invento" tan sólo funciona con combates contra Pokémon Legendarios que hayan sido creados mediante el uso del comando setwildbattle, seguido de special 0x138.
Una cosilla antes de empezar a realizar este tutorial, si lo sigues, tendrás que incluir en una lista de definición a TODAS las especies que quieras que sean afectadas por este código. Así que, si por ejemplo no pones a Mewtwo, Zapdos y Moltres en la lista, se reproducirá una pista de audio estándar cuando te enfrentes a ellos.
Y dicho esto, quiero que me respondáis a una pregunta... ¿alguna vez os habéis puesto a pensar por qué leches Moltres, Zapdos y Articuno tienen su propio temita de música especial, mientras que otros Pokémon tienen la típica musiquilla estándar? Y lo más importante, lo que realmente nos importa, qué cuernos, ¿alguna vez habéis deseado hacer que, al encontraros con un Pokémon salvaje, se reproduzca la música que a vosotros os salga de la nariz? ¡Pues no digáis más, aquí os traigo la solución! Tan sólo seguid este tutorial, repito, seguid este tutorial y vuestros deseos quedarán satisfechos. A diferencia de lo que habréis visto en Doraemon, no conseguiréis conocimientos comiendo papeles o aparatos electrónicos, ni siquiera con pan, así que no me vale que lo oláis, lo mordáis o lo saboreéis, me basta con que sigáis este tutorial con la vista y todos contentos. Y dicho esto, vamos con los pasos.
Paso 1: Tenéis que compilar la siguiente rutina:
Paso 2: Carga tu editor hexadecimal, ve a la dirección 0x7F9F4 y cambia los bytes que encuentres ahí por estos otros: 01 1C 00 00 00 48 00 47 XX XX XX 08. Aquí viene la parte esencial, donde pone "XX XX XX 08", debes poner el offset permutado donde hayas insertado tu rutina +1. Por ejemplo, si nuestro offset es el 834422, entonces tendrás que poner esto: "23 44 83 08". Si por ejemplo insertamos en un offset ampliado, como 1834422, en vez de 08 al final, pues ponemos 09 (08 + 01), quedaría así: "23 44 83 09".
Paso 3: Ahora vamos a agregar una nueva tabla al ROM y vamos a repuntear el tableloc: .word 0x08FFFFFF hacia ella. La tabla que hagamos presentará la siguiente estructura:
[ID de Especie - Media palabra][ID de la música a reproducir - Media palabra]
¿No se entiende? No pasa nada, vamos poco a poco. Supongamos por ejemplo que quiero que al combatir con Mew se reproduzca la canción con el ID 0x129 y, si combato con Ho-Oh, se reproduzca la que tiene el ID 0x124. Si repasamos los datos, tenemos esto:
Pues bueno, así es como debe de quedar:
Finalmente, cambia tableloc: .word 0x08FFFFFF por el offset de la tabla donde hayas realizado los cambios (por ejemplo, si es el offset 808080, quedaría así: tableloc: .word 0x08808080).
Y nada más, espero que os haya servido el tutorial y que os paséis a saludar a Jambo51, que se ha currado este y muchos tutos y merece nuestro más que merecido agradecimiento. Si el tutorial tuviera algún problemilla, por favor, avisadlo lo antes posible.
Este tutorial está dedicado a mi colega @CampeonSteven, quien preguntó una duda acerca de un tutorial de Pokecommunity. Y bueno, al principio pensé en responderle sobre una parte específica. Sin embargo, pensándolo bien, yo soy bastante torpe y sé que estas cosas son costosas de entender. Por ello, he pensado resolver su duda y la de muchos de vosotros de la forma más útil y entendible que pueda imaginar: ¡traduciendo el mismísimo tutorial!
Este manual está redactado por Jambo51, yo simplemente lo he traducido y le doy mis más sincero agradecimiento. Podéis encontrar su tutorial en la siguiente dirección: >>Accede aquí<<
Y dicho esto, ¡empecemos!
Controlar la música de los Pokémon Legendarios (Special 0x138)
A ver, a ver, a ver, ¡¡lo primero!! Una aclaración MUY IMPORTANTE, este "invento" tan sólo funciona con combates contra Pokémon Legendarios que hayan sido creados mediante el uso del comando setwildbattle, seguido de special 0x138.
Una cosilla antes de empezar a realizar este tutorial, si lo sigues, tendrás que incluir en una lista de definición a TODAS las especies que quieras que sean afectadas por este código. Así que, si por ejemplo no pones a Mewtwo, Zapdos y Moltres en la lista, se reproducirá una pista de audio estándar cuando te enfrentes a ellos.
Y dicho esto, quiero que me respondáis a una pregunta... ¿alguna vez os habéis puesto a pensar por qué leches Moltres, Zapdos y Articuno tienen su propio temita de música especial, mientras que otros Pokémon tienen la típica musiquilla estándar? Y lo más importante, lo que realmente nos importa, qué cuernos, ¿alguna vez habéis deseado hacer que, al encontraros con un Pokémon salvaje, se reproduzca la música que a vosotros os salga de la nariz? ¡Pues no digáis más, aquí os traigo la solución! Tan sólo seguid este tutorial, repito, seguid este tutorial y vuestros deseos quedarán satisfechos. A diferencia de lo que habréis visto en Doraemon, no conseguiréis conocimientos comiendo papeles o aparatos electrónicos, ni siquiera con pan, así que no me vale que lo oláis, lo mordáis o lo saboreéis, me basta con que sigáis este tutorial con la vista y todos contentos. Y dicho esto, vamos con los pasos.
Paso 1: Tenéis que compilar la siguiente rutina:
Código:
.text
.align 2
.thumb
.thumb_func
.global battlemusichackleg
main: push {r2,r3}
ldr r0, tableloc
loopstart: ldrh r2, [r0, #0x0] // Carga la ID de la especie a partir de la posición actual de la tabla
cmp r1, r2 // R1 contiene la especie contra la que estamos a punto de combatir
beq loadmusic // Si R1 == R2, entonces carga el ID de la pista de música
ldr r3, end // Carga el ID delimitante para comprobar si hemos alcanzado el final de la tabla (en términos cristianos, FE FE 00 00, si no entiendes lo que es, lee más abajo y luego vuelve de nuevo hasta aquí)
cmp r2, r3 // Comprueba si el ID de la especie que hemos cargado es igual que el delimitador de la tabla (osea, si es FE FE 00 00)
beq loadnormal // Si lo es, carga una pista de audio normal y corriente
add r0, #0x4 // Aumenta el ID de la posición de la tabla
b loopstart // Vuelve hacia el principio
loadnormal: mov r1, #0xAA
lsl r1, r1, #0x1
add r1, #0x1 // R1 contendrá el valor 0x155 en este punto
return: pop {r2,r3}
ldr r0, goback // Vueve con la ejecución normal
bx r0
loadmusic: ldrh r1, [r0, #0x2] // Carga la pista de audio con el ID que viene en la tabla en R1
b return
.align
end: .word 0x0000FEFE
goback: .word 0x0807FA3F
tableloc: .word 0x08FFFFFF
Paso 3: Ahora vamos a agregar una nueva tabla al ROM y vamos a repuntear el tableloc: .word 0x08FFFFFF hacia ella. La tabla que hagamos presentará la siguiente estructura:
[ID de Especie - Media palabra][ID de la música a reproducir - Media palabra]
¿No se entiende? No pasa nada, vamos poco a poco. Supongamos por ejemplo que quiero que al combatir con Mew se reproduzca la canción con el ID 0x129 y, si combato con Ho-Oh, se reproduzca la que tiene el ID 0x124. Si repasamos los datos, tenemos esto:
Código:
ID de Mew: 0x0097; ID de la canción: 0x0129.
ID de Ho-Oh: 0x00FA; ID de la canción: 0x0124
Como podéis ver, hemos insertado el ID de Mew (97 00), el ID de su canción (29 01), el ID de Ho-Oh (FA 00) y el ID de su canción (24 01). Al final, muy importante, colocamos unos bytes, FE FE 00 00, los cuales nos permitirán delimitar el tamaño de la tabla. ¿Por qué lo hacemos? Pues os explico, si no los colocamos, el juego seguirá buscando más Pokémon a los que cambiarle la música de batalla hasta el fin de los tiempos. Por ese motivo, le agregamos esos bytes, para que de esa manera limitemos el tamaño de la tabla y el juego deje de buscar. Puedes hacer la tabla lo larga que quieras, ya sea un poco larga, muy larga, o empepinadamente larga, pero SIEMPRE, SIEMPRE, añade los bytes FE FE 00 00 al final.97 00 29 01 FA 00 24 01 FE FE 00 00
Finalmente, cambia tableloc: .word 0x08FFFFFF por el offset de la tabla donde hayas realizado los cambios (por ejemplo, si es el offset 808080, quedaría así: tableloc: .word 0x08808080).
Y nada más, espero que os haya servido el tutorial y que os paséis a saludar a Jambo51, que se ha currado este y muchos tutos y merece nuestro más que merecido agradecimiento. Si el tutorial tuviera algún problemilla, por favor, avisadlo lo antes posible.
Última edición: