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.
Y ahora para cerrar la caja y limpiar sus datos usados en la RAM usaremos esta otra rutina.
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:
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.
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:
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:
.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
Código:
.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}
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:
#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í?

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: