Registrarse

[ASM] FR | Mini-caja de Texto secundaria

Mysterion.

Average RomHacker
Siempre me ha gustado de los juegos a partir de séptima generación es la adición de una pequeña caja de texto a la caja principal, esto para identificar a quien está hablandonos, he rebuscado como replicar este pequeño detalle en GBA y he encontrado que hace tiempo el usuario Missingyep ya había hecho una rutina que, aunque no era para eso precisamente, se puede utilizar para ello. pero esta vez envez de usar la de Missingyep usaremos estas nuevas de parte del usuario eMMe97.

Primero, compilamos la siguiente rutina con la herramienta Thumb de hackmew (Pincha aquí para ir al tutorial y link para compilar una rutina ASM.

Código:
[PLAIN]
.text
.align 2
.thumb
.thumb_func

box_func:
push {r4, lr}
ldr r4, =0x2037101 @free RAM space
LDR R0, =0x0202402C @free table RAM space
LDR R1, =0x020370B8 @var8000
mov r2, #0
strb r2, [r0]
LDRH R2, [R1]
STRB R2, [R0, #0x1] @X
LDRH R2, [R1, #0x2]
STRB R2, [R0, #0x2] @Y
LDRH R2, [R1, #0x4]
STRB R2, [R0, #0x3] @W
LDRH R2, [R1, #0x6]
STRB R2, [R0, #0x4] @H
mov r2, #0xf
STRB R2, [R0, #0x5]
mov r2, #0x8
STRB R2, [R0, #0x6]
mov r2, #0x0
STRB R2, [R0, #0x7]
mov r2, #76
STRB R2, [R0, #0x8]
mov r2, #0x9f
STRB R2, [R0, #0x9]
mov r2, #0x41
STRB R2, [R0, #0xa]
mov r2, #0x8
STRB R2, [R0, #0xb]
ldr r3, =0x8003ce5
bl call_r3
strb r0, [r4]
ldr r3, =0x8003fa1
bl call_r3
ldrb r0, [r4]
mov r1, #0
ldr r3, =0x80F6F1D @Something with BGs
bl call_r3
bl print_string
ldr r0, =(0x8[offsetROUTINE] + print_string)
mov r1, #2
pop {r4, pc}

print_string:
push {r4-r7, lr}
sub sp, sp, #0xC
add r7, r0, #0
ldr r5, =0x2021D18 @displayed_string
ldr r1, =0x3000F14 @loader 0x0
ldr r1, [r1]
mov r0, r5
ldr r3, =0x8008FCD @body_string_loader
bl call_r3
ldr r0, =0x2037101 @free RAM space
ldrb r0, [r0]
mov r1, #3
str r1, [sp]
mov r1, #0xff
str r1, [sp, #4]
mov r1, #0
str r1, [sp, #8]
mov r1, #2
add r2, r5, #0
mov r3, #4
ldr r4, =0x8002C49 @writeTextToTilemap
bl call_r4
ldr r0, =0x2037101 @free RAM space
ldrb r0, [r0]
mov r1, #2
ldr r3, =0x8003F21 @writeBoxesToTilemap
bl call_r3
add sp, sp, #0xC
pop {r4-r7, pc}

call_r3:
bx r3

call_r4:
bx r4

.align 2[/PLAIN]
Y ahora para cerrar la caja y limpiar sus datos usados en la RAM usaremos esta otra rutina.

Código:
[PLAIN]
.text
.align 2
.thumb
.thumb_func

push {r0-r3, lr}
ldr r0, =0x02001840
ldr r3, =0x0600F800
mov r1, #0xFF
mov r2, #0

loop:
str r2, [r0]
str r2, [r3]
add r0, #4
sub r1, r1, #1
bpl loop
pop {r0-r3, pc}[/PLAIN]
Tras compilarlas procederemos a insertarla en cualquier offset libre alineada (0, 4, 8 o C) con su editor hexadecimal preferido, siempre anotando el sitio en donde las insertaron.

Las diferencias notables entre esta rutina y la de Missingyep es:
  • Esta rutina no muestra un cabezal y cuerpo, pero si es de efecto instantáneo
  • Es totalmente capaz de mostrar textos guardados en búfer (La de Missingyep tenia eso como fallo grave)
  • Es totalmente capaz de mostrar textos coloreados
  • Usa la caja de texto secundaria del juego, por lo que al cambiar de frame en ajustes tambien vas a poder personalizar esta cajita.

Y ahora, ¿Como lo usamos? pues en un simple script, aqui les dejo un sencillo script de ejemplo para que vean como es su estructura.

Código:
[PLAIN]
#dynamic 0x800000

#org @start
lock
loadpointer 0x0 @cabezal ' Texto que se mostrará en la cajita
setvar 0x8000 0x1 ' Eje X (0x01 = 8px)
setvar 0x8001 0xB ' Eje Y (único byte)
setvar 0x8002 0x8 ' Alto (único byte)
setvar 0x8003 0x2 ' Ancho (único byte)
callasm 0x8[tuOFFSET_1] ' Cámbialo por la dirección donde pusiste la rutina de carga +1
msgbox @Standard MSG_NORMAL ' Texto de demostración
callasm 0x8[tuOFFSET_2] ' Cámbialo por la dirección donde pusiste la rutina de cierre +1
release
end

#org @Header
= Prof. Oak

#org @Standard
= ¿Qué has traído para mí?[/PLAIN]
El resultado final será este


Aquí una muestra de video:


Pueden ahorrarase un montón de espacio si ponen la rutina en un callstd y lo llaman comosi s etratase de un msgbox común en XSE.

Y eso es todo, los créditos van a eMMe97 por las rutina de la carga y cierre de textbox secundaria, la cual usé como base para hacer la caja de texto como la de los juegos de séptima generación, ya que creo que es más sencillo que usar mughots, los cuales con ciertas rutinas como el día y noche y paletas dinámicas dan problemas.

Es todo, comenten c:
 
Última edición:

NozZ C

Ando activo
Respuesta: FR | ASM | Mini-caja de Texto secundaria

Yo me pregunto por que no me doy vueltas por pokeCo?

Bueno solo me queda agradecerte por traerlo a Wah, tambien gracias a Missingyep por crear la rutina.

Espero que sigas aportandonos como siempre. Sobre todo a aquellos que no pasamos por pokeco.

Saludos
 

FraynSebas

Psychedelic Client~
:O :O :O :O :O :O

¡Esto es increíble!
¡Esto es hermoso!
¡Esto es majestuoso!

Prefiero mil veces esto que una mugshot xD
Sinceramente la gente que logra hacer esto son unos genios.
Esto si o si estará en un proyecto futuro mio.
¡Gracias por compartir esto Ruki!
Y claro, también al creador Missingyep. :)
 

Juan Kio

Usuario de Platino
Respuesta: FR | ASM | Mini-caja de Texto secundaria

que genial tutorial
gracias por traerlo aquí @~Vector
pero tengo una duda de como usarlo con showepic de un lado el nombre y del otro el mugshot salu2 :cool:
 

Katherine

Omnipresente
Miembro de honor
Usuario de Platino
Respuesta: FR | ASM | Mini-caja de Texto secundaria

Un tutorial interesante, ¡grashié!

Siempre se agradece traer cosas a este foro de la gran pokeco. Esta caja secundaria parece una apuesta más segura y más sencilla como alternativa a los mugshots que traen bastantes problemas como bien tú has dicho.

Au revoir~.
 

Sage0ne

Baneado
Respuesta: FR | ASM | Mini-caja de Texto secundaria

Seguro no lo dije porque estaba baneado, pero es un aportazo!
ya lo había visto en Pokéco, pero me dió mucha flojera interpretarlo porque estaba en inglés..
Anyways, seguramente lo use lo más pronto posible, me parece algo que mejora un puntazo el aspecto gráfico de un hack, sumado a la rutina de los mugshots! 7u7

Sigue traendo cosas así, senpai!
Saludos Y Buenas vibras!

~Cyao
 

Helix Boo

Emperador Kaktiácero
Miembro de honor
Respuesta: FR | ASM | Mini-caja de Texto secundaria

Sé sobre qué tutorial hablas y sí, esto puede añadir mucho atractivo a los diálogos. Quisiera puntualizar algunos detalles:

  • ¿Has probado a compilar todos los setvar en otro script y llamarlo con call? Esto nos ahorraría trabajo y espacio.
  • ¿Sabes si han encontrado alguna forma para hacer cajas de texto redondeadas o con estilos distintos?
Up y +Gracias.
 

Axel

Usuario de Platino
Respuesta: FR | ASM | Mini-caja de Texto secundaria

Creo que esta es una de las mejores rutinas que has traido al foro, se agradece mil este pedazo de aporte.​
 

Mysterion.

Average RomHacker
Respuesta: FR | ASM | Mini-caja de Texto secundaria

.:Helix Boo♪:.;376046 dijo:
Sé sobre qué tutorial hablas y sí, esto puede añadir mucho atractivo a los diálogos. Quisiera puntualizar algunos detalles:

  • ¿Has probado a compilar todos los setvar en otro script y llamarlo con call? Esto nos ahorraría trabajo y espacio.
  • ¿Sabes si han encontrado alguna forma para hacer cajas de texto redondeadas o con estilos distintos?
Up y +Gracias.
1. Si se puedw hacer, aunque crwo que queda aún más corto si se agregan como funciones extra a los callstd, los cuales son expansibles y acortan mucho los scripts.
2. La caja depende de la frame secundaria, osea la frame del menú o de los mensajes yes/no
 

Kaiser de Emperana

Called in hand
Respuesta: FR | ASM | Mini-caja de Texto secundaria

.:Helix Boo♪:.;376046 dijo:
  • ¿Has probado a compilar todos los setvar en otro script y llamarlo con call? Esto nos ahorraría trabajo y espacio.
Para eso se podría hacer un nuevo comando, y se podría dejar tan simple como:
Código:
...
printname @nombre
...

#org @nombre
= Juan
Dejando predeterminadas las posiciones, o se podrían agregar los parámetros de las mismas o como a uno se le ocurra...
 

Mysterion.

Average RomHacker
he actualizado el post principal con una nueva versión de la rutina hecha por el usuario eMMe97 la cual está mejor optimizada y que la vieja hecha por Missingyep (Que era del 2010, lmao).

Las diferencias notables entre estas rutinas y la de Missingyep es:

  • Esta rutina no muestra un cabezal y cuerpo, pero si es de efecto instantáneo
  • Es totalmente capaz de mostrar textos guardados en búfer (La de Missingyep tenia eso como fallo grave)
  • Es totalmente capaz de mostrar textos coloreados
  • Usa la caja de texto secundaria del juego, por lo que al cambiar de frame en ajustes tambien vas a poder personalizar esta cajita.

En el post principal pueden ver las nuevas rutinas puestas.
 

Andrea

Leyenda de WaH
For completeness, i also post the ruby version of the routine:
.THUMB
.ALIGN 2

PUSH {R0-R7, LR}
LDR R0, = 0x0202E8C4
LDRH R1, [R0, #2]
LDRH R2, [R0, #4]
LDRH R3, [R0, #6]
LDRH R0, [R0]
PUSH {R0,R1}
BL BOX
POP {R0, R1}
ADD R1, R0, #1
ADD R2, R0, #1
LDR R0, = 0x0300061C
LDR R0, [R0]
BL STRING
POP {R0-R7, PC}

BOX:
LDR R4, = 0x08071F08+1
BX R4

STRING:
LDR R3, = 0x08071E50+1
BX R3
And the script:
#dynamic 0x800000
#org @inizio
lock
loadpointer 0 Pointer_messaggio
setvar 0x8000 X
setvar 0x8001 Y
setvar 0x8002 W
setvar 0x8003 H
callasm Offset_routine
message @msg 6
hidebox 0 0 32 20
release
end
Through loadpointer, the pointer of the message that will be displayed in the box is saved in memory.
After setting the values of the variables appropriately, we will call the routine with the callasm command.
The values contained in the variables from 8000 to 8003 correspond respectively to the X coordinate, Y coordinate, width and height of our box.
Finally, after viewing a simple message with the msg command, we will go to clean the screen with the hidebox command.

Result:
 
Arriba