Registrarse

[C] FR |RF| Custom EV-IV Display Screen

Acimut

Usuario de platino
INTRODUCCIÓN innecesariamente larga

¡Que tal! ¿Me recuerdan?

Soy el quería publicar el EV-IV Display Screen de @jiangzhengwenjz para rojo fuego en español, pero el autor ha borrado el código de los repositorios de GitHub, así que luego de hablar con él también desistí de publicar su código.

Y, ¿qué pasa con esto?

Pues bien, una de las razones por las que me uní a esta comunidad fue por este recurso, me cautivó por completo. Quiero decir, he visto mods en otros juegos, así como modificaciones de mecánicas y mejoras gráficas; pero esto era algo totalmente nuevo dentro de este juego y me pareció increíble lo que podía lograr esta comunidad (por cierto, muy, pero muy pocas personas hacen cosas así, la decepción hermano).

Fue así, que no tuve más remedio que estudiar un poco más su código y empezar el mío desde cero. Bueno, no desde cero luego de entender cómo funciona.

Resulta, que @jiangzhengwenjz se basó en el código de `Diploma.c` de `\pokefirered\src\` de ya hace un tiempo considerable, por lo que tuvo que arreglárselas con lo que tenía, y una de esas cosas era DevkitARM r45, incompatible con todo lo actualizado de hoy, como inyecciones en C y proyectos de decompilación.

Y ¿por qué el código de Diploma.c?

Para hacer algo coomo el EV-IV Display Screen anterior, es necesario salir del Overworld y mostrar otra pantalla que imprima los EV-IV de nuestro equipo Pokémon. Así que el mejor ejemplo que ya tenemos en el código del juego es el diploma, de hecho, buscando entre el código de Pokefirered, es el más corto para mostrar otra pantalla desde el OW e imprimir texto, con menos de 300 líneas de código.

Así que, tomando una versión más actualizada del código de `Diploma.c` de `\pokefirered\src`, me he tomado la molestia de traerles un nuevo EV-IV Display Screen, donde además de poder ver los EV – IV de tu equipo Pokémon, podrás modificarlo para que se adapte de acuerdo tus necesidades y capacidades.




Y de esto va este tutorial, más que inyectar el código a tu rom, va dirigido a cómo modificar el código para que obtengas los resultados que quieres (siempre que sea posible), así como aclarar dudas.

Así que empecemos con ello, pero primero…

DEFINICIÓN DE TÉRMINOS:

  • EV: valores de esfuerzo. Un Pokémon puede ganar puntos de esfuerzo mediante combates, ítems o cheats, desde 0 hasta un total de 255 EV en cada estadística (ps, ataque, defensa, atq.esp., def.esp. y velocidad), y la suma de los EV en todas las estadísticas no puede superar 512, a menos que uses cheats o modifiques la rom.
  • IV: valores iniciales. Son los valores con los que nace un Pokémon, del 0 al 31, y NO se pueden deben cambiar a menos que quieras un Pokémon ilegal. Estos valores determinan qué tan fuerte es tu Pokémon, así como decidir el tipo y fuerza del movimiento “poder oculto”.
  • BS: estadísticas base. Son los parámetros individuales de cada especie, donde se define su fortaleza. Los IV, EV, así como la personalidad juegan un papel importante aquí, ya que de acuerdo a estos varían los valores cada estadística, haciendo que Pokémon de la misma especie y nivel tengan estadísticas distintas.
  • Resumen: Entre más altos sean los IV, EV y los BS de tu Pokémon, más fuerte es.

CARACTERÍSTICAS:
  • Base compatible: Pokémon Fire Red 1.0 y Pokémon Rojo Fuego
  • Además de los EV-IV, muestra las estadísticas base del Pokémon.
  • El IV, así como el nombre de la estadística cambia de color de acuerdo a la naturaleza del Pokémon, negro si es neutro, rojo si se beneficia y azul si se perjudica.
  • Muestra el Sprite del Pokémon
  • También suena su grito.
  • Censura la información de estadísticas de los huevos.
  • Puedes cambiar el background por el fondo que quieras para tu EV-IV, la inyección la insertará automáticamente.
  • Puedes cambiar las coordenadas para que se ajuste a tus gustos.
  • Suma el total de las estadísticas.
  • En los huevos, muestra aprox. cuántos pasos falta para la eclosión del huevo.
  • Es posible portearlo a tu proyecto de decomp sin muchas complicaciones (o eso supongo, y mientras no sea de pokeruby mejor). Pueden ver el port de Lunos a pokeemerald dando click aquí.
  • Huele a limón.
INSTRUCCIONES DE USO

Para inyectar el código en tu rom es necesario tener:
  • Ganas y paciencia.
  • Conocimientos intermedios o avanzados sobre el rom hacking (no recomendado para novatos).
  • Instalado devkitARM, cualquier versión reciente sirve.
  • Instalado MAKE, cualquier versión reciente sirve.
  • Instalado ArmIPS, cualquier versión reciente sirve.
  • Instalado pret-tools (en seguida explico cómo).
  • Más paciencia.
  • Una rom de pokémon fire red o rojo fuego.
  • Clonado o descargado el siguiente repositorio: https://github.com/Acimut/Custom-EV-IV-Display-Screen
Además de tener instalado devkitarm y armips, ahora será necesario tener instalado las “tools” que se usan para los proyectos de decompilación de PRET, en las inyecciones que estoy realizando.

En Windows:

1. Descargar el archivo rar con los binarios compilados desde aquí.
Aclaro que estos binarios los he compilado en Windows 10 para sistemas de 64 bits.​

2. Descomprimir este archivo preferiblemente en la raíz del disco del sistema, en mi caso C:\pret-tools

3. Desde cmd o ejecutar (tecla Windows + R) escriben SystemPropertiesAdvanced y dan enter.

4. Dan clic en el botón “variables de entorno…”

5. Abajo en el cuadro Variables del sistema buscamos la variable Path, le damos editar.

6. Le damos a nuevo, pegamos la ruta donde descomprimieron los archivos, en este caso C:\pret-tools y le dan a aceptar, aceptar, y aceptar.

7. Comprobar que todo salió bien, abren cmd y escriben gbagfx y dan enter, debería salir algo como:
Usage: gbagfx INPUT_PATH OUTPUT_PATH [options…]​
también pueden probar escribiendo preproc y dando enter, debería salir algo como:​
Usage: preproc SRC_FILE CHARMAP_FILE​

Estos 2 binarios son los que vamos a usar en esta inyección, así que asegúrate de que funciona.

Pueden ver en el siguiente gif cómo se configura en Windows 10:


Si usas Linux, puedes compilar los binarios usando el código fuente: https://github.com/pret/pokefirered/tree/master/tools

Lo siguiente es modificar el archivo makefile para cambiar el offset y la rom con la que vamos a trabajar. Buscamos las siguientes líneas:

export ROM_CODE := BPRE
export INSERT_INTO := 0x08f90000

  • Cambiamos f90000 por un offset alienado con suficiente espacio libre (más de 0x2000 bytes libres) se puede insertar en espacio expandido de la rom cambiando el 0x08 por 0x09 al inicio del offset.
  • Cambiamos BPRE por BPRS si vas a compilar en una rom rojo fuego española.
Ya no es necesario cambiar el offset de gBaseStats.

Ponen su rom con el nombre BPRE0.gba (BPRS0.gba para rojo fuego), dentro de la carpeta raíz del proyecto.

Luego sólo es abrir la consola o terminal de turno que utilizan dentro de la carpeta del repositorio, escribir make y darle enter. Se genera una nueva carpeta llamada “build” donde se encontrará un archivo “rom.gba” (“romEsp.gba” en caso de Rojo Fuego) que tendrá el código compilado. Pueden abrir el archivo “offset.txt” y comprobar que el offset de “maineviv” corresponde a donde insertaron el código.

Para probar si funciona, en un script ponen callasm offset+1 donde insertaron el código.

Código:
#dynamic 0x800000

#org @evivEjemplo
callasm 0x8F90001
end


MODIFICACIONES

Para el background deben usar uno de 256x256 píxeles, obtener el tileset en formato .png a 16 colores (o menos), y el tilemap (raw) en formato .bin

Se pueden guiar del diseño de @ACE10 para hacer sus propios bg:


Pueden usar el background por defecto que hizo @ACE10 (no olviden dar créditos).

Para generar un tileset y un tilemap, recomiendo el uso de tilemapstudio y gale, pueden descargarlos desde sus páginas oficiales:
También pueden guiarse del siguiente vídeo, en donde uso tilemapstudio y gale para crear el tileset y tilemap (recomiendo verlo en 720p o 1080p):

Para cambiar el background, sólo tienes que reemplazar el que viene por defecto en la carpeta “src/graphics”; reemplazas el bgEvIv.png por tu tileset, y bgEvIv.bin por tu tilemap, la inyección insertará automáticamente el tileset, tilemap y paleta en espacio libre justo después del código.

Las ventanas son espacios rectangulares que el juego usa para múltiples propósitos, el más importante es imprimir texto en pantalla, seguido de mostrar íconos como los tipos y estados.

Las ventanas están asociadas a una paleta, de la cual se tomará los colores para los textos y otros usos, así como para los íconos que aparezcan en ella. Esto explica por qué cuando cambias la paleta de los tipos cambia el color del texto, pues porque comparten la misma ventana y por ende la misma paleta.

En esta inyección de código las ventanas usan la paleta 15. Para que se hagan una idea más simple, en las siguientes imágenes pueden ver las ventanas que uso en el código:


Las ventanas de esta inyección se usan en el bg 0, así que junto con el bg 1 (donde tenemos nuestro background personalizado) y el sprite del pokémon tenemos esto:


El tamaño de la ventana la podemos configurar fácilmente a través de unos #defines en el archivo TaskEvIvInit.c, ya que de esta manera no tendrán que calcular el baseblock, y así no tendrán bugs visuales. El tamaño de estos lo mediremos en tiles de 8x8 píxeles, por lo que si ponemos 10 de ancho y 10 de alto, tendremos una ventana de 80x80 píxeles. Así, si queremos cambiar el tamaño de la ventana 1, buscamos las siguientes líneas y cambiamos los números que tienen delante de ellas (Aplica para todas las ventanas de esta inyección).
C:
#define VENTANA1_ANCHO 17
#define VENTANA1_ALTO 11
El código se ve algo así:


Para cambiar las coordenadas de las ventanas nos meteremos con la estructura de WindowTemplate, pero sólo con las siguientes líneas y deben corresponder a la ventana que quieren mover:
Código:
    .tilemapLeft = X,
    .tilemapTop = X,
Esto tampoco tiene misterio, tilemapLeft indica a qué distancia se encuentra del borde izquierdo del bg0 (eje x), y tilemapTop a qué distancia del borde superior del bg0 (eje y), también medidos en tiles de 8x8 píxeles.

Puedes cambiar el texto que aparece simplemente abriendo el archivo Textos.c que se encuentra en la carpeta src, y modificando el texto que aparece entre comillas. Tened en cuenta los espacios usados.

Recordar que los colores del texto están sujetos a la paleta de la ventana, en este caso la paleta 15.

Para cambiar las coordenadas de los textos dentro de las ventanas, primero nos situamos en el archivo TaskEvIvInit.c

La función encargada de poner el texto en la ventana es AddTextPrinterParameterized3

C:
void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 x, u8 y, const u8 * color, s8 speed, const u8 * str);
Esta función es de tipo void (no retorna ningún tipo de dato), pero eso no les interesa a ustedes :v lo que quieren saber son los parámetros de entrada que recibe esta función (los que están dentro de paréntesis, separados por una coma), pues con ella controlamos la siguiente información:
  • windowId: número de la ventana a la que le enviaremos el texto.
  • fontId: tamaño del texto, nosotros usaremos el 2 para que se vea grande xd.
  • x: coordenada x, distancia en píxeles en el eje x (de izquierda a derecha) dentro de la ventana, repito, dentro de la ventana, donde empezará a imprimir el texto.
  • y: coordenada y, distancia en píxeles en el eje y (de arriba abajo) dentro de la ventana, donde empezará a imprimir el texto.
  • color: puntero a un arreglo con el número del color del fondo, de la fuente y de la sombra, en ese orden, tomados de la paleta de la ventana. El texto tendrá esta configuración de color, pero puede ser cambiada dentro del texto.
  • speed: velocidad del texto. Dejarlo en 0, no es necesario cambiarlo.
  • str: puntero al texto que vamos a imprimir en la ventana.

Ahora veamos un ejemplo, este es la línea que imprime el nickname del Pokémon en la parte superior, encima del sprite:
C:
AddTextPrinterParameterized3(0, 0x2, 0x90, 0x2, gColorTextoGris, 0, gStringVar4);
Como pueden ver, a la función se le da los siguientes parámetros: Imprima en la ventana 0, tamaño de fuente 2, 0x90 píxeles desde el borde izquierdo de la ventana 0, 2 píxeles desde el borde superior de la ventana 0, color de texto gris (o lo que tenga ahí), velocidad 0, y por último, el texto que está en gStringVar4. Si quieres cambiar las coordenadas donde aparece el texto dentro de la ventana o el color, lo haces desde ahí.

¿por qué gStringVar4? Bueno, como tiene suficiente espacio lo usamos como búfer para acomodar nuestros textos de manera temporal.

El truco que usé para cambiar el color del texto para las naturalezas, fue metiéndole un código que el juego interpreta como cambio de color, que son los bytes FC 04 seguidos de 3 bytes con la configuración de color fuente, fondo, sombra; es llamado a través de una función StringAppend, donde se concatena el texto de gStringVar4 con los bytes del cambio de color, ya sea rojo (gColorRojo) si beneficia o azul (gColorAzul) por si perjudica el stat, así el texto que le sigue será de ese color. Tener en cuenta que este cambio de color sólo lo estamos aplicando en la ventana 1, donde se imprimen los stats.

Luego de pintar el color del stat beneficiado o perjudicado, es necesario volver al color que definido en AddTextPrinterParameterized3, por lo que se usa un color más: gColorDefecto. Este debería ser igual al color usado por AddTextPrinterParameterized3, que para la ventana 1 estoy usando gColorTextoNegro, por lo que si van a cambiar este deberían cambiar el de gColorDefecto. Podemos ver en seguida que el color de fuente, fondo y sombra, son el mismo en ambos:

C:
//                                      fondo                   fuente                  sombra
static const u8 gColorTextoNegro[3]  = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY,   TEXT_COLOR_LIGHT_GREY};

//                                              fuente                  fondo                   sombra                 0xff
static const u8 gColorDefecto[] = {0xFC, 0x04,  TEXT_COLOR_DARK_GREY,   TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GREY, EOS}; //negro

Cambiar las coordenadas del Sprite y la animación es lo más sencillo de todo, pues les he preparado unos #defines al inicio del código del archivo TaskEvIvInit.c, con los que podrán configurar el resultado que deseen, incluso dejé anotaciones así que no creo que sea necesarias más explicaciones:
C:
#define SPRITE_SALTO             1   //1 = ACTIVADO, 0 = DESACTIVADO, activa la animación de salto del sprite del pokémon.
#define SPRITE_DIRECCION_SALTO   1   //1 = DE DERECHA A IZQUIERDA, 0 = EN EL CENTRO -1 = DE IZQUIERDA A DERECHA, dirección a donde salta el pokémon.
#define SPRITE_DIRECCION_VISTA   0   //1 = A LA DERECHA, 0 = A LA IZQUIERDA, dirección a la que mira el sprite del pokémon.

#define PICMON_X    18          //coordenada x del sprite pokémon, se mide en tiles de x8 pixeles
#define PICMON_Y     5          //coordenada y del sprite pokémon, se mide en tiles de x8 pixeles

NOTAS Y ACLARACIONES

Si hay algo en lo que esté equivocado y deba corregir, hacérmelo saber. Somos personas y no somos perfectos.

Las definiciones de términos y la mayoría de lo que he escrito en este post representa mi opinión personal, y está sujeto a modificaciones y/o actualizaciones.

Los archivos de cabecera .h que se encuentran en “\src\include\” fueron tomados de una versión no actual de “pokefirered\include\”. Me ha dado ansiedad el reducir los archivos de cabecera para que sólo tengan información relevante del proyecto, así que solo copié y pegué los archivos que dependían unos de otros, excepto el archivo “\src\include\pokemon.h” que fue modificado para que sea compatible con las inyecciones.

La plantilla (archivos linker.ld, main.s y Makefile) para hacer la inyección C a la rom, la tomé de los repositorios de @Kaiser de Emperana te amo!

El código que he hecho está lleno de spanglihs :v y esto tiene explicación. Quien sepa que me gusta ir en contra de la corriente, se imaginará que, en mi primera clase de programación, mis compañeros de clase se reían al ver que no escribí el clásico “Hola mundo”, en vez de ello, aparecía un “Tengo hambre” en la consola. Además, como estoy trabajando sobre código que está escrito en inglés, se me facilita el nombrar funciones y variables en español, para no usar palabras reservadas y recordar rápidamente lo que he hecho desde que empecé el proyecto, no me queda mucho tiempo libre lamentablemente.

He puesto algunos comentarios luego de releer el código, en contra de la práctica de programación limpia, para que la parte que he hecho sea un poco más fácil de entender y modificar. Sin embargo, si tienen dudas sobre el código no duden en preguntar, apenas tenga tiempo con gusto les aclaro sus dudas.

Si quieres adaptar el código a tu proyecto de decomp, no más es preparar el background y cambiar algunas cosas del código para que se ajusten a tu proyecto. No he hecho la prueba aún, pero en teoría no debería haber problemas.

Ha sido probado personalmente sobre:

  • Pokémon Fire Red 1.0
  • armips assembler v0.11 [Source]
  • devkitARM54r
  • GNU Make 4.3
  • GNU Make 4.2.1
  • Cygwin64
  • WSL (ubuntu 20.04)
  • Windows 10 Pro

CRÉDITOS:

@ACE10 por los gráficos, ideas y sugerencias.
@Tohru
@Drakymino
@Tio_Terry por reportar bugs
@Frander_Pikapro por reportar bugs
@Kaiser de Emperana viendo tus tutos y parte de tu código me decidí a empezar también a hacer mis propias modificaciones.
@Samu por aclararme una duda sobre la estructura de la BgTemplate aquí.
@jiangzhengwenjz por ser la inspiración de este pequeño proyecto.
Al equipo de PRET, sin ellos no sería tan fácil esto. Enlace a pokefirered.
 
Última edición:

Acimut

Usuario de platino
Comentario reservado para responder dudas.
No me borren pls.

Tio_Terry dijo:
Y otra cosa.... No se si te has dado cuenta pero, al cambiar los offsets del tile, el raw, y la paleta, y compilar todo, el único que esta bien es la paleta creo, pero el raw y el tile no cambian, y en el archivo de texto que muestra los offsets en donde se inserta todo, aparecen los que trae por defecto, aún habiendolos cambiado...

Al menos yo no tuve problemas en encontrar la solucion.... Pero habra quienes inserten todo en diferentes offsets y les dara problemas por que el sistema no encuentra el raw o el tile en el offset en el que busca...
Corregido, como ahora la inyección convierte e inserta el tileset, tilemap y paleta, ya no será necesario pelearse con los offset. Además, ahora el makefile se encarga de limpiar siempre los archivos compilados antes de una nueva compilación, por lo que ya no habrá ese problema al cambiar el offset de inserción.

frander_pikapro dijo:
no se si versekr te dijo pero al testearlo no reconoce si es shiny o no (debido a que usas showpokepic)
Corregido, ahora si el pokémon es shiny usa su paleta correspondiente. Y no, no uso showpokepic, nomás la función tiene nombre parecido xd.

:cry:alguien me presta una versión compilada de esto?
Soy de los que su laptop no le funciona los programas de compilación como DevkitARM y etc...
Se agradece la ayudita, y está muy bueno este recurso :D
Preferiría que no hicieran un parche de esto, aunque muy tarde para exigir esto, pues anda una versión compilada en modexe donde se atribuyen el crédito por compilarlo wtf! y ni siquiera se le da el crédito a @ACE10 por el background. Podría haberlo publicado un parche desde en un principio en el offset 0x800000, pero lo que se busca con este recurso es precisamente que el rom hacker pueda personalizarlo a su gusto, un parche va en contra del por qué se hizo esto. Así que no, por favor no hagas un parche de esto para hacerlo público.
 
Última edición:

Eaas

Usuario de platino
INTRODUCCIÓN innecesariamente larga

¡Que tal! ¿Me recuerdan?

Soy el quería publicar el EV-IV Display Screen de @jiangzhengwenjz para rojo fuego en español, pero el autor ha borrado el código de los repositorios de GitHub, así que luego de hablar con él también desistí de publicar su código.

Y, ¿qué pasa con esto?

Pues bien, una de las razones por las que me uní a esta comunidad fue por este recurso, me cautivó por completo. Quiero decir, he visto mods en otros juegos, así como modificaciones de mecánicas y mejoras gráficas; pero esto era algo totalmente nuevo dentro de este juego y me pareció increíble lo que podía lograr esta comunidad (por cierto, muy, pero muy pocas personas hacen cosas así, la decepción hermano).

Fue así, que no tuve más remedio que estudiar un poco más su código y empezar el mío desde cero. Bueno, no desde cero luego de entender cómo funciona.

Resulta, que @jiangzhengwenjz se basó en el código de `Diploma.c` de `\pokefirered\src\` de ya hace un tiempo considerable, por lo que tuvo que arreglárselas con lo que tenía, y una de esas cosas era DevkitARM r45, incompatible con todo lo actualizado de hoy, como inyecciones en C y proyectos de decompilación.

Y ¿por qué el código de Diploma.c?

Para hacer algo coomo el EV-IV Display Screen anterior, es necesario salir del Overworld y mostrar otra pantalla que imprima los EV-IV de nuestro equipo Pokémon. Así que el mejor ejemplo que ya tenemos en el código del juego es el diploma, de hecho, buscando entre el código de Pokefirered, es el más corto para mostrar otra pantalla desde el OW e imprimir texto, con menos de 300 líneas de código.

Así que, tomando una versión más actualizada del código de `Diploma.c` de `\pokefirered\src`, me he tomado la molestia de traerles un nuevo EV-IV Display Screen, donde además de poder ver los EV – IV de tu equipo Pokémon, podrás modificarlo para que se adapte de acuerdo tus necesidades y capacidades.



Y de esto va este tutorial
, más que inyectar el código a tu rom, va dirigido a cómo modificar el código para que obtengas los resultados que quieres (siempre que sea posible), así como aclarar dudas.

Así que empecemos con ello, pero primero…

DEFINICIÓN DE TÉRMINOS:

  • EV: valores de esfuerzo. Un Pokémon puede ganar puntos de esfuerzo mediante combates, ítems o cheats, desde 0 hasta un total de 255 EV en cada estadística (ps, ataque, defensa, atq.esp., def.esp. y velocidad), y la suma de los EV en todas las estadísticas no puede superar 512, a menos que uses cheats o modifiques la rom.
  • IV: valores iniciales. Son los valores con los que nace un Pokémon, del 0 al 31, y NO se pueden deben cambiar a menos que quieras un Pokémon ilegal. Estos valores determinan qué tan fuerte es tu Pokémon, así como decidir el tipo y fuerza del movimiento “poder oculto”.
  • BS: estadísticas base. Son los parámetros individuales de cada especie, donde se define su fortaleza. Los IV, EV, así como la personalidad juegan un papel importante aquí, ya que de acuerdo a estos varían los valores cada estadística, haciendo que Pokémon de la misma especie y nivel tengan estadísticas distintas.
  • Resumen: Entre más altos sean los IV, EV y los BS de tu Pokémon, más fuerte es.

CARACTERÍSTICAS:
  • Base compatible: Pokémon Fire Red 1.0
  • Además de los EV-IV, muestra las estadísticas base del Pokémon.
  • El IV, así como el nombre de la estadística cambia de color de acuerdo a la naturaleza del Pokémon, negro si es neutro, rojo si se beneficia y azul si se perjudica.
  • Muestra el Sprite del Pokémon
  • También suena su grito.
  • Censura la información de estadísticas de los huevos.
  • Puedes cambiar el background. Sólo tienes que insertar el fondo que quieras para tu EV-IV e indicar el offset en el archivo BPRE.ld
  • Puedes cambiar las coordenadas para que se ajuste a tus gustos.
  • Suma el total de las estadísticas.
  • En los huevos, muestra aprox. cuántos pasos falta para la eclosión del huevo.
  • Es posible portearlo a tu proyecto de decomp sin muchas complicaciones (o eso supongo, y mientras no sea de pokeruby mejor).
  • Huele a limón.
INSTRUCCIONES DE USO

Para inyectar el código en tu rom es necesario tener:
  • Ganas y paciencia.
  • Conocimientos intermedios o avanzados sobre el rom hacking (no recomendado para novatos).
  • Instalado devkitARM, cualquier versión reciente sirve.
  • Instalado MAKE, cualquier versión reciente sirve.
  • Instalado ArmIPS, cualquier versión reciente sirve.
  • Insertado un Background en tu rom, y tener apuntado los offset del tile, raw y paleta.
  • Más paciencia.
  • Clonado o descargado el siguiente repositorio: https://github.com/Acimut/Custom-EV-IV-Display-Screen
Lo siguiente es modificar el archivo “linker.ld” y “main.s” y cambiar 0x08F90000 por el offset con suficiente espacio libre (más de 0x1200 bytes libres) donde insertarán el código.

Después, abren el archivo “BPRE.ld” y buscan lo siguiente y cambian el offset de acuerdo a sus necesidades. Los 3 primeros se refieren al background del EV-IV Display Screen.
gBaseStats se refiere la tabla de estadísticas base, si no has repunteado esta tabla o expandido la cantidad de Pokémon no necesitas cambiarlo. Pueden hacerlo con el block de notas:
  • gEvIvTILE = 0x08f8fc00;
  • gEvIvRAW = 0x08f8fa00;
  • gEvIvPAL = 0x08f8ffe0;
  • gBaseStats = 0x08254784;

Ponen su rom con el nombre “BPRE0.gba” dentro de la carpeta raíz del proyecto.

Luego sólo es abrir la consola o terminal de turno que utilizan dentro de la carpeta del repositorio, escribir make y darle enter. Se genera una nueva carpeta llamada “build” donde se encontrará un archivo “rom.gba” que tendrá el código compilado. Pueden abrir el archivo “offset.txt” y comprobar que el offset de “maineviv” corresponde a donde insertaron el código.

Para probar si funciona, en un script ponen callasm offset+1 donde insertaron el código.

Código:
#dynamic 0x800000

#org @evivEjemplo
callasm 0x8F90001
end

MODIFICACIONES

BACKGROUND
Para el background deben usar uno de 256x256 píxeles, obtener el tile, el raw y la paleta, luego insertarlos en tu rom y anotar los offset, claro.
El tile y el raw deben estar comprimidos, la paleta no.

Se pueden guiar del diseño de @ACE10 para hacer sus propios bg:


Pueden usar el background por defecto que hizo @ACE10 (no olviden dar créditos) Tile.bmp + raw.bin +paleta.act del bg de ACE10 para descargar aquí.

Codigo del bg de ACE10 listo para insertar:

Código:
10 00 0A 00 10 AA AA AA C0 02 11 11 AA AA 70 A1 00 16 50 03 C0 21 1A 11 AA A1 78 A1 00 02 40 03 D0 3F 10 12 A1 1A AA 56 1A 00 23 AA 00 48 1A E0 5D 20 5B 11 BF 00 17 11 30 49 D0 3F F0 5F E0 5F 10 43 10 47 FB 10 84 F0 9F 00 BF 10 75 20 03 11 E0 C0 00 9A FF A0 03 F0 FF A1 0A F1 00 10 5F 70 60 F0 34 F0 01 C7 F0 01 51 48 AA 1A 17 F0 18 71 29 01 3D F9 F0 E0 61 A5 10 1C F0 7F B0 5F 11 A2 F0 18 87 51 87 1A 11 12 A1 01 EA F0 01 50 1F 1F A1 12 A1 01 C9 F0 1B 42 06 12 08 D1 DE D7 02 37 51 F1 1A 12 24 1A F0 3F 70 DD 22 66 3F 00 00 F0 01 90 13 F2 8F F2 10 60 03 11 52 DE F1 45 12 AB 11 02 93 12 B6 F1 F0 02 C9 11 EF 22 86 10 24 F2 EF A1 10 C7 10 CB 40 68 F3 0F FF 90 03 13 3B E0 5F 30 03 F2 2E 82 AF 40 03 22 0F FD B0 C4 23 29 20 01 21 EE 33 55 A3 6F 1A 30 DC FF 22 2C 00 0B 13 56 F0 66 71 93 01 97 C3 EF 23 8B 90 31 91 11 2A D0 7F 1A A1 11 1A F2 00 03 60 07 12 37 B0 52 A1 1A 02 47 11 FF 30 07 23 BD B3 F3 12 42 50 16 50 03 A1 7E 02 23 FC 04 72 12 6A 12 2F F2 72 72 2B F0 FD AA AA 20 55 55 30 01 99 99 99 99 44 60 44 F0 01 70 1F 59 55 44 44 94 9F 00 03 44 59 90 03 50 3F F0 01 F0 01 40 6B 76 95 C0 03 30 14 00 80 49 F0 7F 80 7F 99 B6 50 7B 94 90 03 80 7F 99 00 5A 00 AF 49 FD A0 03 F0 52 70 E5 40 F3 A0 CF 70 DF 94 20 F3 FF F0 AF B0 B7 F0 56 31 45 10 CB 10 D3 D0 AF 80 BF 78 59 10 D3 D0 AF 70 BF 10 CB 55 99 88 1F 88 88 88 51 A3 10 0B F0 0F 40 1F 06 88 00 A8 6A 66 66 A8 66 11 11 2E A5 16 30 03 A8 00 07 50 3F 16 A7 66 3B 66 66 00 1D B0 01 C0 1F A6 00 1F 10 23 60 61 50 03 70 7F A5 AA 8A 88 AA 00 66 8A 88 6A 16 5A 55 6A 78 11 10 03 00 0B F0 5F 50 60 22 22 22 7E 21 00 03 F0 1F 60 1E 20 02 F0 1F 50 3E 12 E1 10 42 70 BF 02 A8 A6 8A 88 88 00 80 07 88 61 5A 55 55 20 03 00 0F 10 E3 FD 90 EF D0 0F F0 01 E0 13 60 EB F0 03 11 00 62 FD 30 EB 50 EF D0 0F 50 C7 F0 01 60 19 12 F0 03 FF 70 13 10 C3 90 CF D0 0F F0 DF 01 DF 11 E3 01 EB 7F 88 28 6D F0 01 11 E3 11 EB 38 8D F0 D7 40 1E 79 A6 18 BB F0 DF 21 DB 01 E3 AA 66 01 5D 7F AA 51 A7 11 CB 21 90 C0 5F D0 FF F0 1F 60 FF FA 21 D3 D0 9F F0 FF 01 E3 01 DF A6 01 E3 AA 84 82 FB 35 23 11 11 F0 03 11 11 FF 54 BF F1 02 32 E9 F0 33 B0 47 F0 01 F0 01 F0 01 80 73 45 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF

Código:
10 00 08 00 00 00 00 01 00 02 00 03 00 00 04 00 05 00 06 00 07 00 14 08 00 09 00 05 0A E0 01 0B 00 10 0C 00 0D 00 17 0E 00 0F 00 00 10 00 11 00 12 00 13 00 40 14 00 01 15 00 16 00 17 00 00 18 00 04 08 19 00 1A 00 4C 1B 00 39 09 08 10 05 D0 41 1C 00 00 1D 00 1E 00 1F 00 20 00 00 21 00 22 00 23 00 24 00 51 25 20 3F 26 20 01 27 00 28 40 01 18 29 00 2A 40 13 50 05 2B 00 2C EA C0 11 50 1F 10 7F 2D 20 01 2E 60 3F 2F 31 00 30 40 13 50 05 31 00 32 C0 11 D1 50 1F 10 BF 33 00 01 34 00 35 F0 01 80 60 13 36 00 37 00 38 00 39 8C 80 01 3A 00 3B 20 37 50 3F 3C 00 60 3D F0 01 60 13 3E 00 3F 00 40 8F A0 01 41 00 42 F0 3F F0 01 F0 3F F0 3F FF F0 3F F0 3F F0 3F F0 3F F0 01 F0 3F F0 3F F0 3F FF F0 01 F0 3F F0 3F F0 35 F0 3F F0 3F F0 3F F0 01 FF F0 3F F0 3F F0 3F F0 3F F0 3F F0 3F F0 01 F0 3F C6 F0 3F 02 81 43 00 44 F0 01 60 13 45 02 00 46 00 47 00 48 80 01 49 23 00 4A 62 7F 4B 00 4C F0 01 F0 01 8B F0 01 00 4B 04 13 BF 4D F0 B1 F0 01 DF F0 01 02 F1 4D F0 3F F0 01 F0 01 F0 3F F0 01 E3 F0 01 F0 01 40 7F 4B 08 4C F0 01 F0 01 8F F0 01 08 4B 0C 14 BF F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 92 F7 00 00 FF FF FF FF FF FF FF FF

Código:
FF 03 FF 7F 7B 6F F7 5E C3 56 49 5A 8C 39 BA 14 A6 41 E5 20 C6 18 00 00 00 00 00 00 00 00 00 00



TEXTO
//En construcción.
COORDENADAS //En construcción.
NOTAS Y ACLARACIONES

Si hay algo en lo que esté equivocado y deba corregir, hacérmelo saber. Somos personas y no somos perfectos.

Las definiciones de términos y la mayoría de lo que he escrito en este post representa mi opinión personal, y está sujeto a modificaciones y/o actualizaciones.

Los archivos de cabecera .h que se encuentran en “\src\include\” fueron tomados de una versión no actual de “pokefirered\include\”. Me ha dado ansiedad el reducir los archivos de cabecera para que sólo tengan información relevante del proyecto, así que solo copié y pegué los archivos que dependían unos de otros, excepto el archivo “\src\include\pokemon.h” que fue modificado para que sea compatible con las inyecciones.

La plantilla (archivos linker.ld, main.s y Makefile) para hacer la inyección C a la rom, la tomé de los repositorios de @Kaiser de Emperana te amo!

El código que he hecho está lleno de spanglihs :v y esto tiene explicación. Quien sepa que me gusta ir en contra de la corriente, se imaginará que, en mi primera clase de programación, mis compañeros de clase se reían al ver que no escribí el clásico “Hola mundo”, en vez de ello, aparecía un “Tengo hambre” en la consola. Además, como estoy trabajando sobre código que está escrito en inglés, se me facilita el nombrar funciones y variables en español, para no usar palabras reservadas y recordar rápidamente lo que he hecho desde que empecé el proyecto, no me queda mucho tiempo libre lamentablemente.

He puesto algunos comentarios luego de releer el código, en contra de la práctica de programación limpia, para que la parte que he hecho sea un poco más fácil de entender y modificar. Sin embargo, si tienen dudas sobre el código no duden en preguntar, apenas tenga tiempo con gusto les aclaro sus dudas.

Si quieres adaptar el código a tu proyecto de decomp, no más es preparar el background y cambiar algunas cosas del código para que se ajusten a tu proyecto. No he hecho la prueba aún, pero en teoría no debería haber problemas.

Ha sido probado personalmente sobre:

  • Pokémon Fire Red 1.0
  • armips assembler v0.11 [Source]
  • devkitARM54r
  • GNU Make 4.3
  • Cygwin64
  • Windows 10 Pro

CRÉDITOS:

@ACE10 por los gráficos, ideas y sugerencias.
@Tohru por conejillo de indias.
@Drakymino por que sí.
@Kaiser de Emperana viendo tus tutos y parte de tu código me decidí a empezar también a hacer mis propias modificaciones.
@Samu por aclararme una duda sobre la estructura de la BgTemplate aquí.
@jiangzhengwenjz por ser la inspiración de este pequeño proyecto.
Al equipo de PRET, sin ellos no sería tan fácil esto. Enlace a pokefirered.
Vale,, vale
Sinceramente mira que hablo mier.... En este foro xd.
Pero aqui me quede sin palabras.
Esta exelente y en verdad el detalle de poder cambiar la grafica lo hace aun mejor, por poder hacer que queda hack tenga ese toke de distinto.
La verdad tio me sorprendes con este aporte,desde mi punto de vista, de los mejores de la comunidad y todos lo que trabajan FR te lo van a agradecer.
Y para rematar bien explicado el tuto
 

Versekr Dark

Héroe de WaH
Es bellísimo, la verdad me he dado bastante tiempo en cambiarlo y dejarlo a mi gusto y lo he conseguido muchas gracias de nuevo:

Pokémon Super Heart Red Beta 01.png



10 00 16 00 32 00 00 F0 01 90 01 FF FF 70 01 FC 00 9F 99 FC C9 C9 CC C9 C9 2E C9 FF 20 03 CC 00 03 90 1F 10 0E C9 00 9F CC 9F C9 C9 FC CF 99 38 CC FF 00 2D B0 1F 00 3D FF CC FC 03 99 9C FC FF 99 9C 60 49 90 3F FD C0 5F 10 03 D0 5F 10 43 10 03 20 1C 9C A0 1E 95 00 01 9F 99 00 03 CC 00 03 FC 70 0B 86 80 7F 9C FC 9F CC 00 03 00 1E 9F 4E C9 00 03 CC CF B0 7F 00 34 70 03 99 04 99 C9 FC CC CC A0 3F 9F 99 03 99 9C CF 9C CC 9C 10 3F 40 03 5F CF B1 1F FC A0 03 01 07 C0 9F F0 01 E0 01 5F 99 00 92 89 00 E3 00 7F 10 03 F0 1E 01 07 EC 01 41 00 BF 00 1D 9C A0 9F F1 4B 9C 9C CE F0 19 51 8B FF FF 01 BF E0 17 00 E3 FC 87 00 79 C9 99 9C 9C 20 03 F0 1F 00 1F 3D CC 97 30 1F 00 07 E0 1F 50 9F CF 00 46 FB C1 7F A0 9F 00 1D F0 9F 90 9F 9F 12 09 E0 1F BF 10 5F CF 10 75 00 03 02 06 10 08 00 63 40 10 74 FF F0 6E 12 2A 20 01 9C 02 91 CF CC F5 E1 90 02 01 01 46 01 2A CF 11 4C CC A1 CF A5 31 6F C9 02 05 C9 CF 00 07 CF C2 0E EF 50 3F 32 AB 00 5F CC F0 5F 01 87 00 1C 00 B0 FB 10 01 00 5F F0 E8 32 AB 42 AF CF F0 20 10 61 10 FF 9C CC 01 0F FC CC FC CF FF F2 50 40 3E 11 97 00 A0 F0 7F 20 3D 30 26 F0 3D F9 E0 ED 00 83 91 4F 02 81 02 65 CC 89 00 13 EA 12 78 F0 FF 00 2D 9F 01 62 9F 02 28 CF D0 10 38 F0 7F C9 00 1B 9C 99 9C C9 DF 03 38 04 19 FC D0 E2 20 56 00 35 F0 5E 40 1F 5F CC 32 87 9C 30 DF F0 1F 42 87 F0 1F 54 33 9B 00 9F 9F 9C 00 25 01 C4 CC F0 9F 20 9F FD 30 03 01 DE F1 21 04 AB 24 94 00 87 99 01 7F E8 E0 60 22 83 42 8B FC F0 7E FF 11 11 02 11 11 33 33 33 33 90 07 22 18 22 22 22 10 07 20 01 C1 99 99 08 33 C3 44 44 90 07 22 C2 AA 70 AA 10 07 10 03 10 01 44 44 44 44 84 90 07 AA AA AA AA 30 19 99 99 00 1C 65 E1 EE C4 51 16 DD 98 00 08 D1 44 00 08 10 11 AA AA CA 60 51 10 1A 11 BB EE EE EE EE DD 55 DD 70 01 D1 00 03 16 00 03 65 00 08 A1 00 36 DD 10 1F DE DD DD 1D F0 03 C2 30 03 10 68 CC BB BB BB 10 07 BB F7 40 78 90 03 10 01 00 1E BB D0 97 90 01 00 1E 50 1B 00 06 11 00 1E D1 99 99 19 90 00 03 1A DD 00 0E DD 99 A9 D1 7F DD 61 07 F0 01 61 1F F0 03 70 03 F0 01 B0 01 97 01 16 DD C9 41 1F 99 00 08 10 11 01 16 EA 61 1F D0 EF 01 16 1D 01 16 1D 00 36 1D FE 00 36 20 FF F0 03 B0 FF F0 01 30 01 21 0F 19 2A D1 DD 00 EE DD 00 EE DD 00 EE DD AF 00 0E DD 00 0E DD 00 0E 21 8B 90 EA A2 17 D7 F0 01 A0 1F C1 02 AD C1 05 3F F0 1F 30 01 03 CC 1C 11 11 99 CC B1 3F 92 57 EA F1 3F F1 BF 42 5F 1E 01 36 1D 00 08 11 EC 02 56 E1 3F D1 0F A1 00 03 00 24 99 65 1A 91 99 99 10 2D 40 01 A9 00 03 19 BF 00 03 1A 12 07 00 0E 62 07 10 AB 11 07 10 03 FF 01 7F E0 03 10 1F 92 BF D0 01 10 1F F0 37 70 03 77 E1 C2 FF F0 3F 20 01 99 80 03 11 35 A2 81 7F C9 00 13 50 03 00 1C 21 55 61 67 01 83 20 03 FA 08 1B 60 0B 00 03 11 9F 30 1F 1C 00 03 CC B3 01 8B CC 00 3C 50 03 1C 11 01 9E 20 01 6F 1C 01 28 01 5F AA 11 5F F2 9F 28 03 21 97 FE 50 E7 D3 BF 90 1F F0 DD B0 1F F1 1F 10 1F 11 7F DD 03 96 01 07 10 59 F0 01 F0 33 B0 03 F0 01 F0 F1 5F F2 D7 F2 D7 F0 15 11 11 91 99 6F 1C 21 67 B0 1F C1 11 82 01 4E 06 4F 00 03 FF E2 F7 00 15 01 8B 1A 46 20 01 F0 1F 20 1E 01 A3 FE 30 01 E0 1F 01 B8 25 ED 31 C9 F0 3F 01 BB C9 7F 9C 10 03 00 27 08 1A F0 9F 41 D7 52 48 F3 77 EF E3 7F F3 77 A3 7F EE 03 76 F4 BF 85 DF F1 97 FE 70 03 D5 FF F1 9F F0 01 91 97 11 83 10 03 C1 7F CC 31 8B D0 1F 01 83 61 8B 31 8F 31 13 50 1F FD 51 87 50 01 01 5F B0 3F 11 6C 80 20 C1 80 20 FF 10 1F 03 55 51 8B 01 72 00 6A 43 57 60 1F 19 9D FF 00 56 21 8F 10 82 14 F8 90 5F 41 87 10 03 70 19 FD 82 77 F1 93 A5 2F F6 3F 71 7F 01 B6 CA D1 6F FE D3 9F F1 55 32 D7 50 03 60 14 10 D7 31 4A C9 DF 90 03 B2 B7 9C 09 8C 30 18 02 C2 20 0B 90 1F FF 04 2C 70 39 32 E3 66 1F 21 38 0D 30 0A AC 10 04 F3 09 55 10 01 A0 1F 00 7E C9 11 61 C9 41 D5 FF F2 D7 71 4F 21 53 02 9F F1 1F 72 9F F0 FD D6 C7 FF F2 57 A3 6F 20 C5 06 C9 C1 F7 50 0B 20 EA 12 24 FF 81 F8 A0 3F 40 20 55 8F F0 1F 11 27 01 09 F0 1F FF 20 01 31 0B A0 1E B0 3F F2 57 E9 DF F2 57 B9 DF E7 F8 37 99 DF F2 7F AA AA F1 5F D2 57 81 57 BE 00 A2 C1 10 C6 2C C8 41 DE 22 0D 40 0B 1C FF 1C BB 13 5F 11 6B 40 0B 20 03 13 4F 18 68 45 6E FF 42 59 32 82 12 69 22 6D B5 6E 10 01 A3 CF 11 95 FF 05 2E 21 47 20 2C 80 78 92 5F D2 57 81 57 F1 97 FE 41 59 32 B6 72 3F E5 E7 03 04 F1 D7 79 40 1C 3B C1 99 E4 6F 90 3F 00 EA 99 84 4E F9 5F FF 00 03 91 9F F9 1F 31 9F F1 97 70 01 81 0A 50 01 FF 20 0B 58 63 22 9F 01 89 20 CB 24 E8 31 60 50 D6 FF 74 F9 30 03 03 DC 1D 11 60 20 60 18 00 40 70 0B FF 2E D4 38 9F 81 93 90 01 F2 CF B9 13 90 27 E1 37 FF 10 61 42 50 F0 1F 34 C8 24 82 44 7F E1 B7 20 BF FF 30 AA 11 5F F6 FF 71 5F C0 B6 E0 B7 10 8B 56 40 FF 00 0B E4 27 55 27 F4 27 56 5F 71 5B 30 97 C2 4F FF F3 DF 83 E7 10 EA F0 01 50 01 20 8C F5 3F 60 DF F6 D1 5F 1E 3F D8 2B 11 1F C2 00 3F 12 88 33 7A C3 0A 48 06 B1 DA 3F 10 01 A5 00 37 56 82 00 07 61 95 99 99 1E 00 08 DE 80 00 08 DE 1D 56 99 EE EE 61 05 95 DE DD 1D 56 06 BB 61 4D 03 EC CA 1F 30 01 00 36 99 50 3F 00 36 99 DD D5 00 08 00 36 99 00 36 A5 00 36 56 00 2A 5F 61 00 03 1D D8 5F 50 AF 60 3F 00 88 30 7F 3C 45 44 10 7F D0 CF 50 0F 5E EB 00 00 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 F0 01 F0 01 F0 01 50 01 00 00 00

10 00 08 00 00 20 00 01 00 02 00 03 00 00 04 00 05 00 06 00 07 00 01 08 00 09 00 0A 00 0B E0 01 00 0C 00 0D 00 0E 00 0F 00 00 10 00 11 00 12 00 13 00 04 14 00 15 00 00 00 01 16 00 00 17 00 18 00 19 00 1A 00 04 1B 00 1C 00 1D 00 39 1E 00 40 1F F0 3F 00 21 00 22 00 23 00 00 24 00 25 00 26 00 27 02 00 28 00 29 00 2A 20 3F 2B 88 C0 01 2C 00 2D A0 01 2E 00 2F 02 00 30 00 31 00 32 E0 01 33 A2 20 7F 34 C0 01 35 00 36 C0 01 37 0A 00 38 00 39 A0 15 3A 20 01 3B A2 20 BF 3C 40 01 3D 00 3E 20 0B 3F 22 00 40 E0 01 41 00 42 80 55 43 00 00 44 00 45 00 46 00 47 80 60 7F 48 00 49 00 4A 00 4B C0 F0 7F 60 8B 4C 00 4D 00 4E 00 41 4F 20 03 50 00 51 00 52 20 03 80 11 40 53 00 54 00 55 00 56 00 00 57 00 58 00 59 00 5A 0D 00 5B 00 5C F0 01 00 13 5D 01 07 18 5E 00 5F A0 03 11 80 60 00 61 00 00 62 00 63 00 64 00 65 03 00 66 00 67 00 68 40 DD F0 05 18 69 00 6A 40 77 90 7F 34 00 6B 00 00 6C 00 6D 00 6E 00 6F 0D 00 70 00 71 F0 BF 81 4F 72 C0 83 80 12 00 73 00 74 00 75 00 76 00 00 77 00 78 00 79 00 7A 0D 00 7B 00 7C F0 01 60 13 7D A0 83 80 31 BF 7E 00 7F 00 80 00 81 03 00 82 00 83 00 84 F0 7F F0 83 C0 A0 FF 11 BF 85 00 86 00 87 00 19 88 00 89 F1 BF F0 01 00 8A 61 07 80 32 3F 8B 00 8C 00 8D 00 8E 01 00 8F 00 90 00 84 08 F0 7F E0 F0 83 51 07 51 BF 91 00 92 00 93 07 00 94 00 91 04 F1 BF F0 01 11 DF 60 95 21 8B 51 BF 96 00 97 00 98 20 00 99 00 07 67 00 9A 00 9B CD F0 01 F0 01 00 9C 03 17 13 80 9D F0 01 EF F0 01 F0 01 00 37 9E 23 BF F0 DF F0 01 F0 01 C3 33 63 14 00 9F 00 7C 08 F0 01 F0 01 91 F0 01 7C 08 14 40 A0 00 A1 F0 59 E0 F0 01 F0 01 40 7F 51 00 A2 00 A3 3F 00 A4 F0 01 F0 01 E0 25 24 C0 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 FF F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 F0 01 80 F0 01 00 78 1D 9B E8 FE 07 00

E0 7F E7 24 29 29 6B 31 94 56 09 5F E5 39 5A 67 BA 14 BD 77 5A 6B F7 5E 10 42 C6 18 63 0C 00 00
 
Última edición:

ACE10

Usuario de platino
Wow nunca me habían nombrado tantas veces y dado tanto crédito hermano jeje xd
Yo solo soy una parte del equipo porque aquí el bueno eres tú. (ya viendo en otros juegos esta hermoso
La verdad desde que lo empezamos sabíamos que sería algo genial que le gustaría a la comunidad y como acordamos dejarles el código y la explicación para que cada quien pudiera usar a su manera y gustos cambiando las cosas para su juego
 

Eaas

Usuario de platino
Wow nunca me habían nombrado tantas veces y dado tanto crédito hermano jeje xd
Yo solo soy una parte del equipo porque aquí el bueno eres tú. (ya viendo en otros juegos esta hermoso
La verdad desde que lo empezamos sabíamos que sería algo genial que le gustaría a la comunidad y como acordamos dejarles el código y la explicación para que cada quien pudiera usar a su manera y gustos cambiando las cosas para su juego
Veo que lo lograste bro.
Bueno lograron.
Ahora te falta algo.
Me ptpmetista hacer el menu personalizado en C.
Dijiste q estaban trabajando en ello.
Me lo debes jjjj.
 

Acimut

Usuario de platino
Veo que lo lograste bro.
Bueno lograron.
Ahora te falta algo.
Me ptpmetista hacer el menu personalizado en C.
Dijiste q estaban trabajando en ello.
Me lo debes jjjj.
Estamos trabajando en ello, tenemos un contratiempo con una instrucción que le damos al procesador de la GBA y sólo pasa con el mGBA, que lo reconoce como ilegal. Pero como eso es otro tema, queda como promesa para este año.
Si tienes dudas sobre este código, no dudes en preguntar.
 

Eaas

Usuario de platino
Estamos trabajando en ello, tenemos un contratiempo con una instrucción que le damos al procesador de la GBA y sólo pasa con el mGBA, que lo reconoce como ilegal. Pero como eso es otro tema, queda como promesa para este año.
Si tienes dudas sobre este código, no dudes en preguntar.
Ok bro.
Cualquier cosa que necesiten iwual me dicen.
Tal vez tenga forma de ayudarlos.
 

Tio_Terry

Aqua-Sama
Tengo un problema, y es que se me queda pegado al iniciar cualquier combate
Ya revise todo y no encuentro el problema, agradecería si me ayudasen.

Muchas gracias.
 
Última edición:

Acimut

Usuario de platino
Tengo un problema, y es que se me queda pegado al iniciar cualquier combate
Ya revise todo y no encuentro el problema, agradecería si me ayudasen.

Muchas gracias.
¡Que tal!
Lamento que tengas problemas con tu hack, pero, ¿podrías ser tan amable de darnos más información?
 

Tio_Terry

Aqua-Sama
puede ser que podamos ayudar con algo más si necesitas
Al "refrescar el mapa" (Oséa salir y entrar al mapa) Los pokémon salvajes no aparecen, y al enfrentarme a un entrenador, se queda en negro pero la música sigue... y lo único que he hecho este día es cambiar gráficos nada mas.

Si me ayudan, muchas gracias.
 

Acimut

Usuario de platino
See....

desgraciadamente, revisando Backups Previos de mi Rom, descubrí que era un problema que ya estaba antes de insertarlo....
Es una pena, sin embargo, si tienes dudas sobre cómo personalizar este recurso, no dudes en preguntarnos. ¡Hasta la próxima!
 

Tio_Terry

Aqua-Sama
Logre reparar mi ROM, ahora tengo una duda.

Donde puedo cambiar las coordenadas de los textos...

Por lo menos este del porcentaje de Felicidad que es el que más me da toc verlo ahi jsjsjs

Pokémon Fire Red 2.png


Muchas gracias por su ayuda.
 
Arriba