Est tutorial me lo viene pidiendo @~Naren Jr. desde hace rato, pero hasta ahorita que me tomé el tiempo de traerlo aquí
Recordatorio: Este tutorial requiere conocimientos muy básicos de ASM, si eres novato no intentes hacer esto.
En Fire Red seguro has notado que solo tres clases de entrenador poseen una música de batalla propia (Campeón, Lider de gimnasio y Alto mando) y para el resto (incluso tu rival) se escucha la misma melodía de batalla, hay una forma limitada de hacer esto con scripts normales usando un Special, pero es muy limitado y falla algunas veces, por eso es que haremos esto con ASM.
Primero, localiza espacio libre en tu ROM, compila esta rutina y pegala ahi.
Como sé lo vagos y noobs que son soy buena persona aqui les dejo la rutina ya compilada
Ahora, en un editor hexadecimal ve a 0x8043FF2 y escribe esto
Recuerda que las XX significan el puntero donde pusiste la rutina más 1 ya que es una rutina THUMB.
Y, ¿Ya acabamos? pues no, aún falta muchisimo, ahora debemos regresar a donde insertamos la rutina
Ahora localizamos algo de espacio libre donde crearemos la tabla de clases de entrenadores que tendrán su propia música, esto NO funciona con las clases Campeón/Alto Mando/Lider de Gimnasio.
La estructura de la tabla a crear es esta (Recuerda ponerla en una offset que acabe en 0, 4, 8 o C):
Por ejemplo, si deseo que cuando luche contra la clase de entrenador Team Rocket (0x55) y quiero que suene la canción 0x130, debo escribir lo siguiente en la tabla:
Repite esta misma estructura con cada clase de entrenador que desees que tenga su propia música de batalla.
Cuando acabes debes poner al final de la tabla los siguientes bytes:
en mi caso, mi tabla luce así:
facil, ¿Verdad? para que la rutina reconozca la tabla solo ve a la offset donde la insertaste y busca los bytes FF FF FF 08, cambialos por el puntero donde pusiste la tabla (aqui no sumas nada) y con eso la rutina ya está trabajando.
Ahora, si lees bien el código de esto verás que checkea la variable 0x40F6, esto se debe a que la rutina te permite crear musica de batalla según la región (Si no le pillas, en OPC cuando estamos en Kanto toda la música es distinta a la de Johto)
La estructura es esta:
Si no quieres música basada en la región haz la tabla así:
facil, ¿Verdad? para que la rutina reconozca la tabla de música por región solo ve a la offset donde la insertaste y busca los bytes FE FE FE 08, cambialos por el puntero donde pusiste la tabla (aqui no sumas nada) y con eso la música por región ya está trabajando.
Guarda y ¡Listo! ya tienes música basada en la región, para activarla solo fija la variable 0x40F6 a 1, si está en 0 la rutina es ignorada
Y es todo, espero con esto ver hacks con entrenadores que tengan su propia música de batalla, que muchos hacks no lo hacen
Créditos a Jambo51 por la rutina y basarme en su post original.
Saludos c:
Recordatorio: Este tutorial requiere conocimientos muy básicos de ASM, si eres novato no intentes hacer esto.
En Fire Red seguro has notado que solo tres clases de entrenador poseen una música de batalla propia (Campeón, Lider de gimnasio y Alto mando) y para el resto (incluso tu rival) se escucha la misma melodía de batalla, hay una forma limitada de hacer esto con scripts normales usando un Special, pero es muy limitado y falla algunas veces, por eso es que haremos esto con ASM.
Primero, localiza espacio libre en tu ROM, compila esta rutina y pegala ahi.
Código:
.text
.align 2
.thumb
.thumb_func
.global battlemusichack
main:
ldr r0, there
ldr r1, [r0, #0x0]
mov r0, #0x80
lsl r0, r0, #0x5
and r0, r1
cmp r0, #0x0
bne later
mov r0, #0x80
lsl r0, r0, #0x7
and r0, r1
cmp r0, #0x0
bne later2
mov r0, #0x2
and r0, r1
cmp r0, #0x0
beq one
later2: mov r0, #0x85
lsl r0, r0, #0x1
b return2
later: mov r0, #0x95
lsl r0, r0, #0x1
b return2
one: mov r0, #0x8
and r1, r0
cmp r1, #0x0
beq wild
ldr r2, table
ldr r2, [r2, #0x0]
ldr r0, ramoffset
ldrh r1, [r0, #0x0]
lsl r0, r1, #0x2
add r0, r0, r1
lsl r0, r0, #0x3
add r0, r0, r2
ldrb r0, [r0, #0x1]
cmp r0, #0x54
beq gym
cmp r0, #0x57
beq gym
cmp r0, #0x5A
beq champ
normal: push {r2,r3}
ldr r3, terminate
ldr r1, classtable
loop: ldrh r2, [r1, #0x0]
cmp r2, r0
beq loadmusic
cmp r2, r3
beq carryon
add r1, #0x4
b loop
carryon: mov r0, #0x2
pop {r2,r3}
b return
loadmusic: ldrh r0, [r1, #0x2]
pop {r2,r3}
b return2
wild: ldr r0, there
ldr r0, [r0, #0x0]
mov r1, #0x1
and r0, r1
cmp r0, #0x0
bne alternate
mov r0, #0x0
b return
alternate: mov r0, #0x1
b return
gym: mov r0, #0x3
b return
champ: mov r0, #0x4
return: push {r2-r7}
mov r11, r0
ldr r0, variable
bl vardecrypt
ldrh r0, [r0, #0x0]
mov r1, #0xA
mul r0, r1
ldr r1, normaltable
add r0, r0, r1
mov r1, r11
lsl r1, r1, #0x1
add r0, r0, r1
ldrh r0, [r0, #0x0]
mov r1, #0x0
mov r11, r1
pop {r2-r7}
return2: pop {r1}
bx r1
vardecrypt: ldr r1, vardec
bx r1
.align
table: .word 0x08044028
there: .word 0x02022B4C
ramoffset: .word 0x020386AE
terminate: .word 0x0000FEFE
classtable: .word 0x08FFFFFF
normaltable: .word 0x08FEFEFE
vardec: .word 0x0806E455
variable: .word 0x000040F6
Código:
2E 48 01 68 80 20 40 01 08 40 00 28 0B D1 80 20 C0 01 08 40 00 28 03 D1 02 20 08 40 00 28 05 D0 85 20 40 00 43 E0 95 20 40 00 40 E0 08 20 01 40 00 29 1E D0 20 4A 12 68 21 48 01 88 88 00 40 18 C0 00 80 18 40 78 54 28 1D D0 57 28 1B D0 5A 28 1B D0 0C B4 1B 4B 1C 49 0A 88 82 42 06 D0 9A 42 01 D0 04 31 F8 E7 02 20 0C BC 0F E0 48 88 0C BC 1D E0 12 48 00 68 01 21 08 40 00 28 01 D1 00 20 04 E0 01 20 02 E0 03 20 00 E0 04 20 FC B4 83 46 10 48 00 F0 0E
F8 00 88 0A 21 48 43 0B 49 40 18 59 46 49 00 40 18 00 88 00 21 8B 46 FC BC 02 BC 08 47 07 49 08 47 C0 46 28 40 04 08 4C 2B 02 02 AE 86 03 02 FE FE 00 00 FF FF FF 08 FE FE FE 08 55 E4 06 08 F6 40 00 00
Código:
01 48 00 47 00 00 XX XX XX 08
Y, ¿Ya acabamos? pues no, aún falta muchisimo, ahora debemos regresar a donde insertamos la rutina
Ahora localizamos algo de espacio libre donde crearemos la tabla de clases de entrenadores que tendrán su propia música, esto NO funciona con las clases Campeón/Alto Mando/Lider de Gimnasio.
La estructura de la tabla a crear es esta (Recuerda ponerla en una offset que acabe en 0, 4, 8 o C):
Código:
[Clase de Entrenador - Byte][00 - Byte][Canción que sonará - Half-Word]
Código:
55 00 30 01
Cuando acabes debes poner al final de la tabla los siguientes bytes:
Código:
FE FE 00 00
Código:
55 00 30 01 FE FE 00 00
Ahora, si lees bien el código de esto verás que checkea la variable 0x40F6, esto se debe a que la rutina te permite crear musica de batalla según la región (Si no le pillas, en OPC cuando estamos en Kanto toda la música es distinta a la de Johto)
La estructura es esta:
Código:
[Batalla Poke Salvaje - Half-Word][Batalla doble - Half-Word][Batalla entrenador - Half-Word][Batalla entrenador - Half-Word][Batalla Campeón - Half-Word]
Código:
2A 01 54 01 29 01 28 01 2B 01
Guarda y ¡Listo! ya tienes música basada en la región, para activarla solo fija la variable 0x40F6 a 1, si está en 0 la rutina es ignorada
Y es todo, espero con esto ver hacks con entrenadores que tengan su propia música de batalla, que muchos hacks no lo hacen
Créditos a Jambo51 por la rutina y basarme en su post original.
Saludos c: