Registrarse

[ASM] FR | Música personalizada para Clases de Entrenador

Gold

Porrero a tiempo parcial
Miembro insignia
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.

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
Como sé lo vagos y noobs que son soy buena persona aqui les dejo la rutina ya compilada

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
Ahora, en un editor hexadecimal ve a 0x8043FF2 y escribe esto
Código:
01 48 00 47 00 00 XX XX XX 08
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):

Código:
[Clase de Entrenador - Byte][00 - Byte][Canción que sonará - Half-Word]
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:

Código:
55 00 30 01
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:

Código:
FE FE 00 00
en mi caso, mi tabla luce así:

Código:
55 00 30 01 FE FE 00 00
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:
Código:
[Batalla Poke Salvaje - Half-Word][Batalla doble - Half-Word][Batalla entrenador - Half-Word][Batalla entrenador - Half-Word][Batalla Campeón - Half-Word]
Si no quieres música basada en la región haz la tabla así:

Código:
2A 01 54 01 29 01 28 01 2B 01
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:
 

Naren Jr.

Puto amo
Usuario de Platino
Respuesta: FR | ASM | Música personalizada para Clases de Entrenador

Puto amoooooooo

Ya era hora besho gold, esta rutina será MUY util para personalizar mejor todo x'D

Apenas termine de hacer varias cosas edito esto y comento con el resultado :'D me tienes con el Hype arriba!!!

Saludos!!
 
Respuesta: FR | ASM | Música personalizada para Clases de Entrenador

En la parte de "Ahora, en un editor hexadecimal ve a 0x8043FF2 y escribe esto" el offset es muy largo o no se que y no me deja ir, ¿que hago? (Si, recien estoy revisando esto por falta de tiempo)

Enviado desde mi XT1032 mediante Tapatalk
 

KevinXDE

Usuario mítico
Respuesta: FR | ASM | Música personalizada para Clases de Entrenador

En la parte de "Ahora, en un editor hexadecimal ve a 0x8043FF2 y escribe esto" el offset es muy largo o no se que y no me deja ir, ¿que hago? (Si, recien estoy revisando esto por falta de tiempo)

Enviado desde mi XT1032 mediante Tapatalk
El offset es 043FF2, el 8 solo indica que es parte de la ROM (por ejemplo, el offset 0x2343734 indica que es parte de la RAM, por el 2)

PD: Me explico como el culo xD
 

Bugrhak

A long time ago I used to call myself "Subzero".
Respuesta: FR | ASM | Música personalizada para Clases de Entrenador

La puta madre, ¡Como mola!
Esto es muy bueno para tener tan pocos comentarios :V

Con esto ya puedo darle un toque especial a las "batallas importantes". Sacando partido de esto se puede incluso darle un poco más de ambientación a la batalla para que sea acorde a la trama y eso.

Mis dieses, gracias por traerlo

♠Un saludo♠
 

Ryurs

Usuario de oro
Buenas, ¿saben si hay algo parecido de esto para esmeralda? Me refiero a la rutina ASM utilizada. He buscado por pokecommunity y por aquí pero no encuentro nada similar.
 
Arriba