Registrarse

[ASM] FR | VS bar personalizable

Invert

why so serious?

Vs bar persolnalizable
¡Qué pasa gente!
Jugando varias ediciones de pokémon en DS me gustó la manera en cómo se cargan las vs bar, por eso decidí hacer una rutina que decido al final compartirla.

PASO 1

Lo primero de todo es insertar esta rutina:
Código:
.thumb
.align 2

push {r4-r6, lr}

Image:
ldr r0, =0x000040F2 @var_40F2
ldr r4, =0x0806E455 @Decrypt
bl call_r4
ldrb r0, [r0]
ldr r1, =0x08900000 @Table_images
lsl r2, r0, #0x3  
lsl r0, r0, #0x2  
add r0, r0, r2  
add r1, r1, r0
mov r6, r1
ldr r1, [r1]
mov r0, #0
mov r2, #0
mov r3, #0
ldr r4, =0x080F6879 @decompress_with_fallback_maybe
bl call_r4

PAL:
add r6,#4
mov r0, r6 @Pal
ldr r0, [r0]
mov r1, #0XD0
mov r2, #0X20
ldr r4, =0x080703Ed @gpu_pal_apply
bl call_r4
mov r0, r6
ldr r0, [r0]
ldr r4, =0x08008929 @gpu_pal_obj_alloc_tag_and_apply
bl call_r4

RAW:
add r6,#4
mov r1, r6 @Raw
ldr r1, [r1]
mov r0, #0
mov r2, #0
mov r3, #0
ldr r4, =0x08002041 @gpu_tilemap_config_and_commit
bl call_r4
mov r0, #0x0
ldr r4, =0x080020BD @bgid_send_tilemap
bl call_r4
mov r0, r6 @Raw
ldr r0, [r0]
ldr r4, =0X080086DD @gpu_tile_obj_alloc_tag_and_upload
bl call_r4


showBG:
mov r0, #0x0
ldr r4, =0x80019BD
bl call_r4
pop {r4-r6, pc}

call_r4: bx r4

Cambiar la direccion de la tabla.
0x08900000 @Table_images


PASO 2


Lo segundo será insertar la imagen,raw y paleta.
Para eso necesitaremos estas herramientas:

  • NTME
  • NLZ-GBA Advance
  • APE

Primero, necesitas una imagen 256x160 de tamaño indexada, yo usaré esta:
La imagen debe estar en formato BMP



Ahora abrimos el NTME y creamos nuestra raw (será más fácil si se usan las flecas + del width y height.
Otra cosa que deben marcar es abajo donde pone "preset size" marcan la opción FR/LG TS.


Al final cuando tengamos la raw completa abajo, le damos a la opción "Palette Map" y rellenamos toda la imagen con la paleta D.



Cuando tengamos eso guardamos la raw: file-Save tilemap.

PASO 3

Ahora necesitaremos insertar todo, y usaremos la herramienta "NLZ-GBA Advance".
Abrimos la Rom, nos parecerá un cuadro en el que ponen accept.
Ahora, clickeas donde pone "import a bitmap" y abres tu imagen (archivo BMP). Les aparecerá un cuadro donde pondrás el offset donde será guardada tu imagen y más abajo solo señalarás la opción "Abort if new daa is bigger" le das ok y luego "Write to rom", si salió todo bien tuvo que haber salido un mensaje que ponía "Finished".
Para insertar la Raw le das en load Raw, y eliges tu raw (para que salga debes elegir el tipo all files). Nuevamente eliges tu offset y por último "Write to ROM"
Y luego insertas tu paleta con APE, no creo que sea necesario explicarlo xD.

PASO 4

Cuando tengas todo tus datos, debes armar la tabla de la siguiente forma:
(Imagen-paleta-raw)
xx xx xx 08 xx xx xx 08 xx xx xx 08
Cada entrada tiene un tamaño de 0xC.

Ahora pasamos a la parte de como usar la rutina.
La rutina sola lo único que hace es cargar la imagen usando este fragmento:
Código:
setvar 0x40F2 0x (Entrada de tu tabla)
callasm 0x (Offset de tu rutina +1)
Pero para hacer que se mueva necesitamos manipular los efectos de pantalla, aqui les dejo un script:

Código:
#org @loop
compare 0x8003 0x70
if 0x1 goto @Batalla
copybyte 0x4000010 0x20370C2
pause 0x1
addvar 0x8005 0x10
addvar 0x8003 0x1
goto @loop
Ese es el fragmento que moverá la imagen, ¿como sería todo?

Código:
#org @inicio
setvar 0x40F2 0x (Entrada de tu tabla)
callasm 0x (Offset de tu rutina +1)
goto @loop

#org @loop
compare 0x8003 0x70
if 0x1 goto @Batalla @Cuando termine el loop va a la batalla)
copybyte 0x4000010 0x20370C2
pause 0x1
addvar 0x8005 0x10
addvar 0x8003 0x1
goto @loop

#org @Batalla
trainerbattle 0x3 0x5 0x0 @texto
.....
Lo más recomendable es usar el trainerbattle tipo 3 para esto.
Para insertar los sprites puedes usar varios showpokepics y ponerlos antes de el @loop.

Código:
#org @inicio
setvar 0x40F2 0x (Entrada de tu tabla)
callasm 0x (Offset de tu rutina +1)
showpokepic 0x1 0x1 0x1
showpokepic 0x2 0xF 0x1
goto @loop

#org @loop
compare 0x8003 0x70
if 0x1 goto @Batalla @Cuando termine el loop va a la batalla)
copybyte 0x4000010 0x20370C2
pause 0x1
addvar 0x8005 0x10
addvar 0x8003 0x1
goto @loop

#org @Batalla
trainerbattle 0x3 0x5 0x0 @texto
.....
Para poner varios y quitarles la caja aquí te dejo un tutorial hecho por @jiangzhengwenjz que además me permitió sus datos para acabar mi rutina.
Y bien, ese es básicamente el proceso a seguir, si tienen dudas o errores me los dejan saber. :cool:
 
Última edición:

CompuMax

Discord: CompuMax#0425
Miembro insignia
Respuesta: FR|ASM|Vs bar persolnalizable

Excelente aporte!

Muy bien explicado, con imágenes de apoyo y demasiado sencillo como para no aplicarlo.

jejeje

Muchas gracias. Se agradece.

:)
 

jiangzhengwenjz

Usuario mítico
Re: FR|ASM|Vs bar persolnalizable

It's a good tutorial, but I really want to know who told you the location of the graphic functions lol. Nice done.
 

Bugrhak

A long time ago I used to call myself "Subzero".
Respuesta: FR|ASM|Vs bar personalizable

WOW, Pero que pocos comentarios tiene esto, por dios o_O

Esta rutina me viene magnífica en mi "jak", el solo hecho de que sea personalizable me hace querer probarla yá!!!

"Kiero" eso en mi hack para ayer, así que empezaré a trabajar :V
APORTAZO COLEGA ^^

Salu2
 

Naren Jr.

Puto amo
Usuario de Platino
Respuesta: FR|ASM|Vs bar personalizable

Puto amo, yo ya la había visto, es genial que la liberaras ya bro.

Un saludo, y que la gente aproveche estas rutinas que realmente le dan un gran toque al hack.
 
M

Miembro eliminado 28262

Invitado
Respuesta: FR|ASM|Vs bar personalizable

Vaya tutorial más chulo!
Se me había olvidado comentarlo, Sin duda lo usaré para crear algo ultra genial en mi hackrom. ¡Muchisimas gracias por el aprote!

Como ya te dijeron por ahí, eres un Puto amo.
Sigue así!

Buenas vibras!!
 

Cheve

MoonLover~
Miembro de honor
Respuesta: FR|ASM|Vs bar personalizable

baia baia...

¡Que bonito! Ya me pongo a probarlo y meto scan a ver que tal vá.
 

CompuMax

Discord: CompuMax#0425
Miembro insignia
Re: FR|ASM|Vs bar personalizable

Saludos amigo

Te escribo para ver si me puedes ayudar a resolver un pequeño inconveniente que tengo al correr tu rutina ASM. Y es que luego de llamar la rutina, llamo los mugshots que saldrán a enfrentarse y siempre el primer mughshot que llame termina distorcionándose.

Lo que hice fue obviamente insertar la rutina, insertar los mugshot en los espacios vacíos de pokémon, les eliminé la caja (Gracias a @jiangzhengwenjz) y los llamo con showpokepic.

He hecho muchas pruebas, desde quitar la animación, reducir los numeros de mughsots, hacer fadescreen antes de llamar la rutina y nada. Creo que es un problema en las variables o quizás en el ASM en concreto (pero no sé ASM así que no he modificado nada).

Te agradecería mucho si logras ayudarme.

Aquí te dejo el enlace para que veas el inconveniente en video.

https://www.youtube.com/watch?v=vOZAV7dAv5c&feature=youtu.be
 
Re: FR|ASM|Vs bar personalizable

buenas tengo un pequeño problema al querer compilar el script
en el setvar puse la entrada de la tabla xx xx xx 08 xx xx xx 08 xx xx xx 08
osea que puse la direccion en donde agregue esa tabla y me dice que desconoce esa entrada de overfield o algo asi uso xse no se que hice mal
 

CompuMax

Discord: CompuMax#0425
Miembro insignia
Respuesta: Re: FR|ASM|Vs bar personalizable

buenas tengo un pequeño problema al querer compilar el script
en el setvar puse la entrada de la tabla xx xx xx 08 xx xx xx 08 xx xx xx 08
osea que puse la direccion en donde agregue esa tabla y me dice que desconoce esa entrada de overfield o algo asi uso xse no se que hice mal
jejeje

Creo que no entendiste bien a que se refiere. En la entrada debes poner el numero de entrada de la tabla, es decir, si vas a usar la primera entrada colocas 0x0, si vas a usar la segunda entrada colocas 0x1 y así sucesivamente.

;)
 

Rubire4

Usuario mítico
Respuesta: FR|ASM|Vs bar personalizable

Si dejo la animación sola funciona de la manera esperada. Sin embargo esto es lo que ocurre cuando pongo los sprites encima:

 
Arriba