Registrarse

[Rutina] R&FR| ASM | Msgbox Efecto "pensamientos" y efecto default

eing

Miembro de honor
Miembro de honor
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:
Código:
.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.

Código:
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 04
Ponerla 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.

Código:
.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:
Código:
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 02
Ponerla 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:

Código:
#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

Código:
.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:
Código:
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 08
Si 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:

Código:
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í:
Código:
#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.
 

Jo7a

Kiero mi nick amarillo D:
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Que mosno (?)
Pues se agradece este aporte, yo tenia el tutorial para hacerlo de una pagina alemana de RH, pero este metodo es mas sencillo creo.

Lo voy a probar en FR y te digo, que no todos los wbto de ruby funcionan en FR como tú dices, por ejemplo, el del cambio de sexo y alguno mas en FR no me funcionaron.

Aún asi esto es ASM no wbto, espero que funcione.

Grachie tito Eing :3
 

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Otro genial aporte, para variar, ¿no?
 

Dani_SR_17

¡Pokémon LionHeart!
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Pues muy útil el aporte eh, como no siempre sorprendiendo :D
 

Laquin

Usuario mítico
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Todos a comentar! XD
Pues eso, Jota tiene que cambier de sitio esto xD
Pero bueh, genia aporte, nos servirá mucho ^^
Slau2!! :D
 

Sayer301!

UnityLord!
Miembro de honor
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Pues yo tengo por ahi una rutina así que me paso foxz creo... XD pero la verdad que prefier una hecha por ti, que si le encuentro fallos te voy a dar por el culo mazo hasta que los arregles ajajajajjaja (¿Porque no hay un icono lanzando un beso?)

No ya enserio, me renta que empieces a liberar rutinas yaa puto jajajajaj Para aportar algo y sentirme to guay, aqui dejo el offset de las paletas que dices para FR, aunque no se si te refieres a esto pero buehh yo lo dejo y si cuela, cuela XDDD
Código:
00471DEC
En fin buena rutina ni dudes que la usaré!

Paz bro!
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Esto si es un gran aporte, me gusta el resultado, imagino que para portearla a FR solo hay que cambiar alguna direccion, pero eso lo probare otro dia.

Y no se que tanto se complican para obtener la rutina en hex, solo basta con compilarla, abrir el rom con un editor hex e ir a la offset de la rutina y ya esta la rutina en hex.
 
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Yo tengo una duda. Para los msgbox, que tipo de mensaje hay que poner? 0x6, 0x2 o cual?
Lo he probado con 0x2 tal como recomiendas y el resultado es este:


Uso Fire Red, y he usado las rutinas para fire red que pusiste.

Aquí mi script:

Código:
'---------------
#org 0x801980
callasm 0x88018D1
msgbox 0x8801996 '"Funciona!"
callstd 0x2
callasm 0x8801931
end


'---------
' Strings
'---------
#org 0x801996
= Funciona!
Donde la rutina para mostrar el mensaje está en la direccion 0x8018D0
y la rutina para ocultarlo en la direccion 0x801930

Es decir, no se muestran las letras blancas como cuando pierdes un combate, si no que sale una caja de texto normal.
¿Qué estoy haciendo mal?
 

eing

Miembro de honor
Miembro de honor
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Yo tengo una duda. Para los msgbox, que tipo de mensaje hay que poner? 0x6, 0x2 o cual?
Lo he probado con 0x2 tal como recomiendas y el resultado es este:


Uso Fire Red, y he usado las rutinas para fire red que pusiste.

Aquí mi script:

Código:
'---------------
#org 0x801980
callasm 0x88018D1
msgbox 0x8801996 '"Funciona!"
callstd 0x2
callasm 0x8801931
end


'---------
' Strings
'---------
#org 0x801996
= Funciona!
Donde la rutina para mostrar el mensaje está en la direccion 0x8018D0
y la rutina para ocultarlo en la direccion 0x801930

Es decir, no se muestran las letras blancas como cuando pierdes un combate, si no que sale una caja de texto normal.
¿Qué estoy haciendo mal?
En principio NO estas haciendo nada mal, puesto que la rutina te funcina a medias.
El error es mio por postear algo con prisas y sin comprobar -la rutina asm de fr- asi que te pido disculpas. Cuando llegue a casa la comprobare por mi mismo y la pondre fixeada.

Un saludo y gracias por el aviso, pense que estaba bien (porque bo la probe lol)
 
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

¡Ni mucho menos tienes que disculparte!

Yo soy el que te tiene que dar las gracias, ya que esta es la primera vez que inserto una rutina ASM, así que ahora me voy a animar a hacer más.

Gracias a tí por investigar estas rutinas.
 

eing

Miembro de honor
Miembro de honor
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

@Jotta @PaladinBuceador @BLAx @Sayer301 @Dani_SR_17
Os he citado a todos, porque sois hackers de Fire Red, bien vengo a notificaros que tal como imaginaba la idea de la rutina que os puse antes para FR estaba bien, pero como siempre FR anda tocando las pelotas con la ram, y diversas funciones que son "anti edición" por fuerza bruta (cosa que en rubí no sucede, por eso me gusta más..)
(Puse writebytetooffset 0x0 0x020377DA y no se pone a 0 xD)

Entonces, voy a editar la rutina de cargar las paletas del msgbox. (Por lo tanto no será necesario hacer callasm 0x en nuestro script..) y se medirá según el valor de una variable. (Yo desconozco las variables de Fr, porque sinceramente nunca lo he hackeado y no tengo datos relevantes, así que me vendría bien vuestra ayuda, que variable podría usar para ese fin? Asignarle un valor y mediante este, se cargue un estilo de msgbox u otro).

Por ejemplo:
Setvar 0xvar 0x0 -> msgbox normal
setvar 0xvar 0x1 -> arriba y todo negro (estilo pensamiento)
setvar 0xvar 0x2 -> textbox invisible
??? Ideas

Así que denme ideas, y una variable libre, yo me encargaré de editar la rutina ^^
 

Sayer301!

UnityLord!
Miembro de honor
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

@Jotta @PaladinBuceador @BLAx @Sayer301 @Dani_SR_17
Os he citado a todos, porque sois hackers de Fire Red, bien vengo a notificaros que tal como imaginaba la idea de la rutina que os puse antes para FR estaba bien, pero como siempre FR anda tocando las pelotas con la ram, y diversas funciones que son "anti edición" por fuerza bruta (cosa que en rubí no sucede, por eso me gusta más..)
(Puse writebytetooffset 0x0 0x020377DA y no se pone a 0 xD)

Entonces, voy a editar la rutina de cargar las paletas del msgbox. (Por lo tanto no será necesario hacer callasm 0x en nuestro script..) y se medirá según el valor de una variable. (Yo desconozco las variables de Fr, porque sinceramente nunca lo he hackeado y no tengo datos relevantes, así que me vendría bien vuestra ayuda, que variable podría usar para ese fin? Asignarle un valor y mediante este, se cargue un estilo de msgbox u otro).

Por ejemplo:
Setvar 0xvar 0x0 -> msgbox normal
setvar 0xvar 0x1 -> arriba y todo negro (estilo pensamiento)
setvar 0xvar 0x2 -> textbox invisible
??? Ideas

Así que denme ideas, y una variable libre, yo me encargaré de editar la rutina ^^
Diuu tendría que haberlo probado antes para reportar y sentirme guay(?) jajajajaja

Bueh pues yo creo que curioseando el manual de JPAN, y que no hay mucha mas rutina por aqui en wah, pues creo que la variable 4000 seria una facil de recordar y que no usa nada.

Por otro lado, sería genial el efecto del pensamiento pero a la inversa, en vez de texto blanco sobre un fondo negro, texto negro sobre un fondo blanco.

Dale caña putoo!! Si tu te animas a FR yo participo y ayudo todo lo que quieras!
 

Jo7a

Kiero mi nick amarillo D:
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Prueba lo que dice Sayer301, es el experto en variables xD
La verdad es que la idea del fondo blanco y texto negro también quedaria bien, pero me conformo con el modo "pensamiento" de siempre aunque, por qué no los dos?

Define que clase de ideas quieres y yo te ilumino amol (L)
 

eing

Miembro de honor
Miembro de honor
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

@Jotta @PaladinBuceador @BLAx @Sayer301 @Dani_SR_17 @Echoriver @Д£EXI§ @Kyurem Beltza

Después de citaros a cada uno de vosotros, os dire que esta tarde estaba tan rallado con una rutina de rubí que no lograba sacar, que me pasé a FR.
Añadiendole que @Sayer301 se puso pesado(?)

Bien, el caso es que la rutina de los pensamientos y demás, está finalizada.
Es la siguiente:

Código:
.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:
Código:
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 08
Si 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:

Código:
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í:
Código:
#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.
(Y si, luego han de refrescar la pantalla, si no se continuará viendo negro. Cosas del fr.. ^^)

Ahora para los aprendices de ASM, o que saben asm directamente, pueden tener más efectos de textbox, modificando esta rutina. (Por ejemplo efecto invisble..)

Solo queda decir, que cualquier bug, notificarlo, y si la usais debeis dar creditos a eing.

 

Dani_SR_17

¡Pokémon LionHeart!
Respuesta: [ASM] Msgbox Efecto "pensamientos" y efecto default

Que grande Eing, ya te lo he comentado por skype, pero vaya, no quito la posibilidad de usarlo alguna vez :D

Bien explicadito y masticadito todo. Perfecto para los que no tienen ni zorra de ASM, algún día tengo que meterme con eso...

Bueno, a ver cuando nos sorprendes mas cosas para FR :rolleyes:
 

eing

Miembro de honor
Miembro de honor
Acabo de editar el manual de FR.
Para que se vean los cambios correctamente.

Ah, y si usais esa var para los terremotos, despúes de estos, poner setvar 0x8004 0x0.

Si no, cada vez que entreis en un mapa, las paletas se bugearán. (Dado que la rutina es para que se ponga solo 0 o 1, no se contempla ningun otro valor).
 

Jo7a

Kiero mi nick amarillo D:
Acabo de editar el manual de FR.
Para que se vean los cambios correctamente.

Ah, y si usais esa var para los terremotos, despúes de estos, poner setvar 0x8004 0x0.

Si no, cada vez que entreis en un mapa, las paletas se bugearán. (Dado que la rutina es para que se ponga solo 0 o 1, no se contempla ningun otro valor).
¿Pero se puede usar otra var para que la rutina de los pensamientos no use la misma que los terremotos?
Es que me da perezoon buscar todos los terremotos de mi hack y añadir ese comando, si al menos fuese una rom recién empezada...

Y gracias por corregir el manual, por qué probé la rutina el otro dia y no me iva, a ver si ahora me sale xD

Gracias tito Eing :3
 

eing

Miembro de honor
Miembro de honor
¿Pero se puede usar otra var para que la rutina de los pensamientos no use la misma que los terremotos?
Es que me da perezoon buscar todos los terremotos de mi hack y añadir ese comando, si al menos fuese una rom recién empezada...

Y gracias por corregir el manual, por qué probé la rutina el otro dia y no me iva, a ver si ahora me sale xD

Gracias tito Eing :3
Sí, puedes cambiar la variable.
Para ello asigna un script así:

#org 0xoffset
setvar 0xvar 0x1234
end

Entonces una vez compilado y asignado a un mini, procedemos a hablar con él.
Tras hablar con él, vamos en el emulador a cheats -> search cheats for cheats.
Se nos abrirá una ventania y pon que sea busqueda igual, y en formato 16 bits. Busca el valor 1234.

Entonces te saldrá una direccion o varias.
(Si son varias comprueba cual es la de la var, haciendo cambios con el visual viewer)
Una vez encontrada, ya solo hemos de cambiar los siguientes bytes de nuestra rutina. (Los que están en negrita, cambiarlos por la direccion de nuestra var, y acordarse de que sea permutado el offset).

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 08
 
Arriba