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


Like Tree11Gracias
  • 10 Post By Dr. Seuss
  • 1 Post By KevinXDE
Respuesta
 
Herramientas Desplegado
  #1  
24/11/2015
Predeterminado FR | Música personalizada para Clases de Entrenador
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:
Cuando el Dragón Verde y Negro se convierta en el terrible gigante y desate su furia contenida contra todo ser viviente y conquiste el cielo... Vida y Muerte, Cielo y Tierra, Existencia y la Nada, Pasado y Futuro... Las flamas convertirán toda la vida en ruido y cubrirán el mundo. Aunque muchas almas vagarán, buscando un eterno descanso, ellas serán comida para la furia del gigante y consumidas por el Ragnarök, para dar inicio a una era de caos... Los mundos de Anctgard y Nezgard se aplastaran uno con otro, junto a sus respectivas penas... No existirá ni un solo rayo de luz o algún resquicio de la oscuridad. Solo el ruido inerte del La Sinfonía de un Final Destinado...
  #2  
24/11/2015
Predeterminado 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!!


ORGULLOSO DE NACHO, UN EXCELENTE TRABAJO Y AFORTUNADAMENTE PUEDO DECIR QUE TIENE MI GRANO DE ARENA!


¡GRACIAS A TODOS!


  #3  
22/05/2017
Predeterminado 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
  #4  
22/05/2017
Predeterminado Respuesta: FR | ASM | Música personalizada para Clases de Entrenador
Dicho por Zapy_MLG Ver mensaje
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
Gracias: pikachu240

Este tío es un...



Zero for GMod
  #5  
13/06/2017
Predeterminado 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♠
COMING SOON

The grass is greener than ever - Breathe the smoke of power

El mejor tutorial de inserción de Tiles

(Yes, we had to wait until 2020 for this to happen...)
----------------
¡No te olvides de visitar mi galería de mapas!
Exposición del Desastre - !Los mapitas del tío Sub!

Discord: DrakoVinyl#3790
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 11:04.