28001-R&FR|_ASM_|_Msgbox_Efecto_"pensamientos"_y_efecto_default
#0
eing 12479
Bueno, hoy os traigo una simple rutina, que he decidido compartir.
Que es la siguiente:

¿A que todos sabeis hacer este efecto?



Bien, pues como soy generoso, y me cansa que siempre hagais esto con Writebytetoffset, gastando un chorrón de bytes y "ensuciando" el código del script, os traigo mi rutina, para que quede mas simple, comodo y limpio.

Es la siguiente:

RUTINA POKEMON RUBY


Rutina pensamientos:

.align 2
.thumb

main:
push {r0-r2,lr}
ldr r0,.dispcnt
ldrh r1, .dispcntv
strh r1,[r0]
ldr r0, .textbox_pos
mov r1, #0x5f
strb r1,[r0]
ldr r0, .textbox_data
ldrh r1, .ff
strh r1, [r0]
mov r2, #0x0
b bucle

bucle:
add r2, #0x2
mov r1, #0x00
strh r1, [r0, r2]
cmp r2, #0x1C
beq end
b bucle

end:
pop {r0-r2,pc}

.align 2
.textbox_data: .word 0x0202f0aa
.ff: .word 0x0000ffff
.dispcnt: .word 0x04000000
.dispcntv: .word 0x00006161
.textbox_pos: .word 0x04000012
Para los perezosos, aquí la tienen compilada.

07 B5 0B 48 0B 49 01 80 0B 48 5F 21 01 70 06 48 06 49 01 80 00 22 FF E7 02 32 00 21 81 52 1C 2A 00 D0 F9 E7 07 BD C0 46 AA F0 02 02 FF FF 00 00 00 00 00 04 61 61 00 00 12 00 00 04Ponerla que empiece en 0,2,4,6,8,a, c o e (Si no no os funcionará)

Y como no, también la rutina para hacer que el msgbox vuelva a la normalidad.


.align 2
.thumb

main:
push {r0-r3,lr}
ldr r0, .dispcnt
ldr r1, .dispcntv
strh r1,[r0]
ldr r0, .textbox_pos
mov r1, #0x0
strb r1,[r0]
mov r2, #0x0
ldr r0, .textbox
ldr r1, .textboxv
b change

change:
ldr r3,[r1] @valor xxxx xxxx r1
str r3,[r0,r2]
add r2,#0x2
add r1,#0x2
cmp r2, #0x1c
beq fin
b change

fin:
pop {r0-r3,pc}


.align 2
.textbox: .word 0x0202f0aa
.dispcnt: .word 0x04000000
.dispcntv: .word 0x00001F70
.textboxv: .word 0x0202ECA8
.textbox_pos: .word 0x04000012
Para los perezosos:
0F B5 09 48 09 49 01 80 06 4A 05 48 08 49 FF E7 0B 68 83 50 02 32 02 31 1C 2A 00 D0 F8 E7 0F BD AA F0 02 02 00 00 00 00 00 00 00 04 70 1F 00 00 A8 EC 02 02Ponerla que empiece en 0,2,4,6,8,a, c o e (Si no no os funcionará)

Como podeis ver, el espacio que ahorramos usando esta rutina es BASTANTE.

Así que os animo a usarla ^^

Ahora solo queda el scirpt de muestra:


#org 0xoffset
callasm 0xoffset_rutina_msgbox_pensamientos+1
msgbox 0x8offset_msgbox
callastd 0x2
callasm 0xoffset_rutina_msgbox_default+1
end

#org 0xoffset_msgbox
= mensaje

RUTINA FR

.align 2
.thumb

main:
push {r0,r3}
ldr r0, .var
ldrh r0, [r0,#0x0]
cmp r0, #0x0
beq normal
ldr r0,.dispcnt
ldrh r3, .dispcntv
strh r3,[r0]
ldr r0, .textbox_pos
mov r3, #0x5f
strb r3,[r0]
pop {r0,r3}
ldr r1, .black_box
add r0,r0,r1
pop {r1}
bx r1

normal:
ldr r0,.dispcnt
ldrh r3, .dispcntvn
strh r3,[r0]
ldr r0, .textbox_pos
mov r3, #0x0
strb r3,[r0]
pop {r0,r3}
ldr r1, .normal_msgbox
add r0,r0,r1
pop {r1}
bx r1


.align 2
.var: .word 0x020370c0 @var 0x8004
.dispcnt: .word 0x04000000
.dispcntv: .word 0x00006161
.dispcntvn: .word 0x00007f60
.textbox_pos: .word 0x04000012
.normal_msgbox: .word 0x08471dec
.black_box: .word 0x089F3A10
La dejo compilada:
09 B4 0D 48 00 88 00 28 0A D0 0C 48 0C 4B 03 80 0D 48 5F 23 03 70 09 BC 0D 49 40 18 02 BC 08 47 06 48 08 4B 03 80 08 48 00 23 03 70 09 BC 07 49 40 18 02 BC 08 47 C0 46 C0 70 03 02 00 00 00 04 61 61 00 00 60 7F 00 00 12 00 00 04 EC 1D 47 08 10 3A 9F 08Si solo copian y pegan, en el offset: 9F 3A 10, habrán de copiar los nuevos colores del textbox. (Los que se usarán para el efecto pensamiento), que son los siguientes:

2E 53 00 00 FF 7F 00 00 FF 7F FF 7F FF 7F FF 7F FF 7F FF 00 00 00 00 00 00 00 00 00 00 00 00 00*Nota: Si el espacio, donde van los nuevos colores está ocupada por algo vuestro, simplemente copien los colores en otro lado, y en la rutina cambien el offset de "black_box", por vuestro nuevo offset. (Y si usan ya la compilada cambiar 10 3a 9f 08 por el offset donde se hayen vuestros colores)

Luego, despues de tener los colores del textbox acabados, y la rutina compilada, hemos de ir al offset siguiente: 08150448

Ahí, habremos de colocar los siguientes valores:
00 4F 38 47 XX XX XX 08

(Donde XX XX XX será el offset donde colocasteis la rutina+1)

Por último, el script sería así:

#org 0xoffset
setvar 0x8004 0x1
msgbox 0x8offset
callstd 0x6
setvar 0x8004 0x0
callasm 0xoffset_rutina+1
CUando la variable esté a 1, se verá efecto pensamientos, si no pues normal.



Dar creditos si se usa a Eing.