Quizás a la primera no capten de que trata este aporte. Bueno les explico. En las Roms de tercera generación existe una tabla de funciones estandarizadas que sirven a la ROM para llamar scripts predefinidos para evitar que el sistema cargue un montón de comandos cada que se hace un script determinado.
Los scripts estandarizados en FR se usan para los distintos msgbox existentes. La tabla de funciones estandarizadas es la siguiente, junto a su equivalente en XSE:
El punto es que dichas funciones son fácilmente expandibles y de esta manera agregar más msgboxes para lo que necesitemos. En este caso he agregado tres nuevas funciones para Fire Red, las cuales son las siguientes:
Para expandir y agregar estas nuevas funciones, lo que deben hacer es simplemente aplicar el parche que está al final del tutorial. Este parche ocupa los bytes 0x89F0000 hasta 0x89F04B0.
Tras aplicar el parche debes de pegar el archivo "std.rbh" en la carpeta donde tienes tu XSE 1.1.1 guardado. Debes de sustituir el que tienes por este. Y listo, con eso ya has expandido las funciones estandarizadas.
================================
Tutorial de Uso de nuevas funciones
================================
Uasar las nuevas funciones es relativamente sencillo. Es cuestión solamente de hacer un script donde se llame dichas rutinas y estas se mostrarán. Aqui dejo un script de ejemplopara las funciones agregadas:
0xA y 0xB: Minicaja de texto para nombres:
Resultado final:
0xC: Caja transparente:
Y el resultado de el script:
Y eso sería todo. Siempre tengan en cuenta que la caja solo soporta 10 carácteres para el nombre. Aunque hay que tener en cuenta que usualmente los nombres no suelen pasar los 10 carácteres, lo cual debería ser suficiente.
>>>Click aquí para descargar parche ips<<<
=====================================
Extra - Aplicando manualmente cambios
=====================================
Si tienes el problema de @darkeon75 y no puedes poner esto manualmente, deberás de descargar estos archivos que contienen lo que he hecho. Las instrucciones para plicarlo manualmente so las siguientes:
1. Habrá que repuntear la tabla de comandos estandarizados, la tabla se encuentra en 0x08160450. Debes copiar todas las entradas de la tabla y ponerla en un espacio libre donde quepan más punteros. Puedes tambien solo abrir el archivo stdfunc_table.bin del archivo anterior que tiene la tabla ya seleccionada. Es muy importante que no modifiques estas entradas, pues varios comandos usan dichas funciones en varios procesos.
2. Ya que pegues la tabla debes de calcular cuantas entradas nuevas vas a poner en la tabla. Cada entrada es un puntero común, osea 0x4 bytes. Debes apuntar el offset donde empieza la tabla y tambien el offset donde termina la tabla +1 (Esto se refiere al último byte de la tabla sumado, que debe ser siempre un 08). ya con esa información anotada deberás cambiar los siguientes punteros, todos en formato little endian.
Punteros donde inicia la tabla: 0x0806A178, 0x0806A1A8, 0x0806A1F4 y 0x0806A240
Punteros donde acaba la tabla: 0x0806A17C, 0x0806A1AC, 0x0806A1F8 y 0x0806A244
Guarda y con eso ya has repunteado la tabla de funciones estandarizadas. Todos los msgbox deberían funcionarte sin problemas.
3. Ahora agregaremos las nuevas funciones. Para agregar la función MSG_MINIBOX:
Abre el archivo routine_minibox.bin, copia su contenido y pégalo en tu Rom en una offset libre alineada, apunta la dirección donde la pegaste.
Ahora abre el archivo std_minibox_0xA.bin, copia todo su contenido en una offset libre (no importa si no está alineada), apunta la offset donde lo pusiste y agrega el puntero de la misma como nueva entrada. Al final del archivo .bin se leen los datos FF FF FF 08. Deben reemplazar esos FF's con el puntero de la offset de la rutina que carga la minicaja +1, que es la que previamente pusimos en una offset alineada, ya que cargamos una rutina asm THUMB. Si agregas este comando justo después de donde acaba la tabla original, esta se convierte en la función 0xA.
Finalmente solo queda abrir el archivo std_unload_minibox_0xB.bin, copian su contenido y lo pegan en una offset libre, apunten la offset y agreguen su puntero a la tabla de funciones. Si lo pones justo después de la función que carga la minicaja, la función toma el iD 0xB.
Para agregar la función MSG_TRANSPARENT:
Abre los archivos routine_transparent_boxes.bin y routine_unload_transparent_boxes.bin. Copia su contenido y pegalo en tu Rom en cualquier offset libre alineada. Tambien copia y pega el contenido del archivo pallete_transparent_boxes.bin . Copia el puntero de ambas rutinas y del tercer archivo. Si te das cuenta al final de la rutina routine_transparent_boxes.bin esta acaba con los bytes FF FF FF 08, Este es el puntero de donde pusiste el archivo pallete_transparent_boxes.bin, cambia los FF's por el puntero donde pusiste el arvhibo anterior. No hay que sumar nada. Guarda. Ten en cuenta que el archivo pallete_transparent_boxes.bin es una paleta que es editable con APE, Cambialo a tu gusto si quieres colores distintos para las cajas transparentes
Finalmente agregaremos la última función estandarizada, para ello abre el archivo std_msgbox_transparent_0xC.bin. Copia y pega su contenido en tu Rom, guarda el puntero donde lo has puesto. Notarás que en el archivo hay un grupo de bytes que contiene FE FE FE 08 y FF FF FF 08, Debes de reemplazar primero los FE's por el puntero donde pusiste el archivo routine_transparent_boxes.bin +1, ya que es una rutina ASM. Del mismo modo reemplazar los FF's por el puntero donde pusiste el archivo routine_unload_transparent_boxes.bin +1. Tras haber hecho esto solo queda tomar el puntero de la función y agregarlo a la tabla de funciones estandarizadas. Guarda tu ROM.
Si has seguido correctamente los anteriores pasos, las tres funciones deberían funcionarte sin problema. Solo queda que edites el archivo "std.rbh" en tu carpeta de XSE para que el compilador tome las nuevas entradas (O usar el que puse en el enlace del parche si usaste los mismos iD de las nuevas funciones)
====================================================
Bugs y/o rarezas:
* La minicaja secundaria es incapaz de leer cadenas de texto guardadas en búfer, por ende no les mostrará el nombre de su rival o cualquier nombre guardado en un búfer. Es un bug de la rutina original.
* La textbox transparente no reconoce colores de texto, todos los textos quedan blancos.
* Por el momento la caja transparente solo funciona como MSG_NORMAL
Créditos:
*Misingyep por la rutina original de caja secundaria
*ep!c por la rutina original de caja transparente
*Gold/Ruki (Osea yo) por expandir las funciones estandarizadas y arreglar el problema de la rutina original de textbox transparente que solo funcionaba en la offset 0x8750000.
Los scripts estandarizados en FR se usan para los distintos msgbox existentes. La tabla de funciones estandarizadas es la siguiente, junto a su equivalente en XSE:
Código:
0x0: MSG_OBTAIN
0x1: MSG_FIND
0x2: MSG_FACE
0x3: MSG_SIGN
0x4: MSG_KEEPOPEN
0x5: MSG_YESNO
0x6: MSG_NORMAL
0x7: MSG_ADDDECORATION
0x8: MSG_ADDPOKENAV (Solo Emerald, Duplicado de 0x0 en Ruby/FR)
0x9: Mensaje con fanfare (Solo Emerald, Duplicado de 0x0 en Ruby/FR)
0xA: MSG_POKENAV (Solo Emerald)
Código:
0xA: MSG_MINIBOX (Para cargar l¿una minicaja con el nombre de quien habla)
0xB: Función para ocultar la minicaja.
0xC: MSG_TRANSPARENT (Para caja de texto transparente)
Tras aplicar el parche debes de pegar el archivo "std.rbh" en la carpeta donde tienes tu XSE 1.1.1 guardado. Debes de sustituir el que tienes por este. Y listo, con eso ya has expandido las funciones estandarizadas.
================================
Tutorial de Uso de nuevas funciones
================================
Uasar las nuevas funciones es relativamente sencillo. Es cuestión solamente de hacer un script donde se llame dichas rutinas y estas se mostrarán. Aqui dejo un script de ejemplopara las funciones agregadas:
0xA y 0xB: Minicaja de texto para nombres:
Código:
#Dynamic 0xC00000
#org @start
lock
faceplayer
msgbox @nombre MSG_MINIBOX //Cargará una minicaja de texto donde podemos poner el nombre del personaje hablando. Puede reemplazarse por 0xA
msgbox @texto //Aqui va el texto común y corriente
callstd 0xB //Llama la función que esconde la minicaja secundaria. Si no se pone este comando la caja no desaparece
release
end
#org @nombre
= Prof. Elm
#org @texto
= Come on, [player]! Choose a Pokémon
0xC: Caja transparente:
Código:
#Dynamic 0xC00000
#org @start
lock
faceplayer
msgbox @texto MSG_TRANSPARENT //Carga la transparencia de las cajas de texto normales. Puede reemplazarse por 0xC
release
end
#org @texto
= Come on, [player]! Choose a Pokémon
Y eso sería todo. Siempre tengan en cuenta que la caja solo soporta 10 carácteres para el nombre. Aunque hay que tener en cuenta que usualmente los nombres no suelen pasar los 10 carácteres, lo cual debería ser suficiente.
>>>Click aquí para descargar parche ips<<<
=====================================
Extra - Aplicando manualmente cambios
=====================================
Si tienes el problema de @darkeon75 y no puedes poner esto manualmente, deberás de descargar estos archivos que contienen lo que he hecho. Las instrucciones para plicarlo manualmente so las siguientes:
1. Habrá que repuntear la tabla de comandos estandarizados, la tabla se encuentra en 0x08160450. Debes copiar todas las entradas de la tabla y ponerla en un espacio libre donde quepan más punteros. Puedes tambien solo abrir el archivo stdfunc_table.bin del archivo anterior que tiene la tabla ya seleccionada. Es muy importante que no modifiques estas entradas, pues varios comandos usan dichas funciones en varios procesos.
2. Ya que pegues la tabla debes de calcular cuantas entradas nuevas vas a poner en la tabla. Cada entrada es un puntero común, osea 0x4 bytes. Debes apuntar el offset donde empieza la tabla y tambien el offset donde termina la tabla +1 (Esto se refiere al último byte de la tabla sumado, que debe ser siempre un 08). ya con esa información anotada deberás cambiar los siguientes punteros, todos en formato little endian.
Punteros donde inicia la tabla: 0x0806A178, 0x0806A1A8, 0x0806A1F4 y 0x0806A240
Punteros donde acaba la tabla: 0x0806A17C, 0x0806A1AC, 0x0806A1F8 y 0x0806A244
Guarda y con eso ya has repunteado la tabla de funciones estandarizadas. Todos los msgbox deberían funcionarte sin problemas.
3. Ahora agregaremos las nuevas funciones. Para agregar la función MSG_MINIBOX:
Abre el archivo routine_minibox.bin, copia su contenido y pégalo en tu Rom en una offset libre alineada, apunta la dirección donde la pegaste.
Ahora abre el archivo std_minibox_0xA.bin, copia todo su contenido en una offset libre (no importa si no está alineada), apunta la offset donde lo pusiste y agrega el puntero de la misma como nueva entrada. Al final del archivo .bin se leen los datos FF FF FF 08. Deben reemplazar esos FF's con el puntero de la offset de la rutina que carga la minicaja +1, que es la que previamente pusimos en una offset alineada, ya que cargamos una rutina asm THUMB. Si agregas este comando justo después de donde acaba la tabla original, esta se convierte en la función 0xA.
Finalmente solo queda abrir el archivo std_unload_minibox_0xB.bin, copian su contenido y lo pegan en una offset libre, apunten la offset y agreguen su puntero a la tabla de funciones. Si lo pones justo después de la función que carga la minicaja, la función toma el iD 0xB.
Para agregar la función MSG_TRANSPARENT:
Abre los archivos routine_transparent_boxes.bin y routine_unload_transparent_boxes.bin. Copia su contenido y pegalo en tu Rom en cualquier offset libre alineada. Tambien copia y pega el contenido del archivo pallete_transparent_boxes.bin . Copia el puntero de ambas rutinas y del tercer archivo. Si te das cuenta al final de la rutina routine_transparent_boxes.bin esta acaba con los bytes FF FF FF 08, Este es el puntero de donde pusiste el archivo pallete_transparent_boxes.bin, cambia los FF's por el puntero donde pusiste el arvhibo anterior. No hay que sumar nada. Guarda. Ten en cuenta que el archivo pallete_transparent_boxes.bin es una paleta que es editable con APE, Cambialo a tu gusto si quieres colores distintos para las cajas transparentes
Finalmente agregaremos la última función estandarizada, para ello abre el archivo std_msgbox_transparent_0xC.bin. Copia y pega su contenido en tu Rom, guarda el puntero donde lo has puesto. Notarás que en el archivo hay un grupo de bytes que contiene FE FE FE 08 y FF FF FF 08, Debes de reemplazar primero los FE's por el puntero donde pusiste el archivo routine_transparent_boxes.bin +1, ya que es una rutina ASM. Del mismo modo reemplazar los FF's por el puntero donde pusiste el archivo routine_unload_transparent_boxes.bin +1. Tras haber hecho esto solo queda tomar el puntero de la función y agregarlo a la tabla de funciones estandarizadas. Guarda tu ROM.
Si has seguido correctamente los anteriores pasos, las tres funciones deberían funcionarte sin problema. Solo queda que edites el archivo "std.rbh" en tu carpeta de XSE para que el compilador tome las nuevas entradas (O usar el que puse en el enlace del parche si usaste los mismos iD de las nuevas funciones)
====================================================
Bugs y/o rarezas:
* La minicaja secundaria es incapaz de leer cadenas de texto guardadas en búfer, por ende no les mostrará el nombre de su rival o cualquier nombre guardado en un búfer. Es un bug de la rutina original.
* La textbox transparente no reconoce colores de texto, todos los textos quedan blancos.
* Por el momento la caja transparente solo funciona como MSG_NORMAL
Créditos:
*Misingyep por la rutina original de caja secundaria
*ep!c por la rutina original de caja transparente
*Gold/Ruki (Osea yo) por expandir las funciones estandarizadas y arreglar el problema de la rutina original de textbox transparente que solo funcionaba en la offset 0x8750000.
Última edición: