Mostrar Sprites en pantalla en FireRed
Muchas veces hemos tratado de mostrar OBJ o Sprites en pantalla, para mostrar PSS Icons, Mugshots, Vs Sprites o simplemente mostrar imágenes de nuestros distintos sistemas.
Lamentablemente hasta ahora creo que no había una manera realmente funcional o fácil de como hacerlo. Por ello les traigo este tutorial de como hacerlo fácilmente.
He creado un sistema bastante fácil e intuitivo de usar...
¿Cómo funciona?
Sencillo, compilas en la rom 2 funciones. Una que carga los OBJ o Sprites y otra que los borra. Insertas el Sprite comprimido en LZ77 y la paleta sin comprimir, creas una tabla con la estructura: XX XX XX XX YY YY YY YY, donde, XX XX XX XX es el puntero al Sprite y YY YY YY YY el puntero a la paleta.
Adicionalmente se han asignado dichas funciones a SPECIALES libres en la FR para mayor comodidad a la hora de usar las funciones. Así que empecemos.
¿Qué necesitamos?
Primero que nada necesitan tener instalado las herramientas de desarrollador como:
- DevkitPro/ARM
- Python
- Armips
- Cygwin
Luego descargar el siguiente archivo: FR-Load_Sprites.rar
Configurando el sistema
- Descomprimir el archivo que acabamos de descargar, una vez dentro de la carpeta FR-Load_Sprite extraer el archivo "deps.zip".
- Luego, coloca tu rom Fire Red V1.0 y nómbralo "BPRE0.gba".
- Modifica la línea ".org 0x08800000" en "main.s", con una dirección libre en la rom.
- El archivo "pointer.s" dentro de de la carpeta "patches" está configurado para asignar las funciones de cargar sprites y borrarlo a los especiales 6 y 7 respectivamente (si ya los estás usando simplemente edita a tu conveniencia).
- Finalmente en la última línea del archivo "BPRE.ld" editen "spriteTable = 0x08900000;" con la dirección donde deseen insertar la tabla.
Ahora podemos construir el proyecto ejecutando "make".
Si la última línea es "Build Complete", entonces todo salió bien.
Una nueva rom llamada "Load Sprite.gba" debería haber aparecido en el directorio "build"
Deberían de obtener algo como esto:
Usándolo
Para usar el sistema vamos a tener en cuenta las siguientes consderaciones:
- Antes de usar el SPECIAL que carga los Sprites debemos configurar las variables 0x8000, 0x8001 y 0x8002 de la siguiente manera:
0x8000 = 0x(SIZE + ID), es decir, el byte más significativo representa el tamaño y el byte menos significante el ID con que identificaremos dicho Sprite. Muy bien, el tamaño viene definido de la siguiente manera:
0 representa un sprite de 8x8
1 representa un sprite de 16x16
2 representa un sprite de 32x32
3 representa un sprite de 64x64
0x8001 = 0x(INDEX),es decir, el índice del Sprite que queremos cargar ubicado en nuestra tabla donde el primer sprite en la tabla está definido con el INDEX = 0x0.
Y 0x8002 = 0x(X + Y). Al igual que la variable 0x8000 aquí vamos a configurar la posición donde vamos a cargar dicho Sprite en píxeles.
Para borrar el Sprite solo vamos a necesitar el ID y asignarlo a la variable 0x8000 antes de llamar el SPECIAL correspondiente.
A continuación unos ejempls de scripts y su uso:
Y aquí el resultado:
Recomendaciones
Usar con el Sistema de Paletas Dinámicas de Navenatox
Finalmente al usar este sistema en conjunto con el tutorial [ASM] FR | Mostrar Imágenes a Pantalla Completa y con un poco de ingenio podemos hacer cosas como esta:
Lamentablemente hasta ahora creo que no había una manera realmente funcional o fácil de como hacerlo. Por ello les traigo este tutorial de como hacerlo fácilmente.
He creado un sistema bastante fácil e intuitivo de usar...
¿Cómo funciona?
Sencillo, compilas en la rom 2 funciones. Una que carga los OBJ o Sprites y otra que los borra. Insertas el Sprite comprimido en LZ77 y la paleta sin comprimir, creas una tabla con la estructura: XX XX XX XX YY YY YY YY, donde, XX XX XX XX es el puntero al Sprite y YY YY YY YY el puntero a la paleta.
Adicionalmente se han asignado dichas funciones a SPECIALES libres en la FR para mayor comodidad a la hora de usar las funciones. Así que empecemos.
¿Qué necesitamos?
Primero que nada necesitan tener instalado las herramientas de desarrollador como:
- DevkitPro/ARM
- Python
- Armips
- Cygwin
Luego descargar el siguiente archivo: FR-Load_Sprites.rar
Configurando el sistema
- Descomprimir el archivo que acabamos de descargar, una vez dentro de la carpeta FR-Load_Sprite extraer el archivo "deps.zip".
- Luego, coloca tu rom Fire Red V1.0 y nómbralo "BPRE0.gba".
- Modifica la línea ".org 0x08800000" en "main.s", con una dirección libre en la rom.
- El archivo "pointer.s" dentro de de la carpeta "patches" está configurado para asignar las funciones de cargar sprites y borrarlo a los especiales 6 y 7 respectivamente (si ya los estás usando simplemente edita a tu conveniencia).
- Finalmente en la última línea del archivo "BPRE.ld" editen "spriteTable = 0x08900000;" con la dirección donde deseen insertar la tabla.
Ahora podemos construir el proyecto ejecutando "make".
Si la última línea es "Build Complete", entonces todo salió bien.
Una nueva rom llamada "Load Sprite.gba" debería haber aparecido en el directorio "build"
Deberían de obtener algo como esto:
Usándolo
Para usar el sistema vamos a tener en cuenta las siguientes consderaciones:
- Antes de usar el SPECIAL que carga los Sprites debemos configurar las variables 0x8000, 0x8001 y 0x8002 de la siguiente manera:
0x8000 = 0x(SIZE + ID), es decir, el byte más significativo representa el tamaño y el byte menos significante el ID con que identificaremos dicho Sprite. Muy bien, el tamaño viene definido de la siguiente manera:
0 representa un sprite de 8x8
1 representa un sprite de 16x16
2 representa un sprite de 32x32
3 representa un sprite de 64x64
0x8001 = 0x(INDEX),es decir, el índice del Sprite que queremos cargar ubicado en nuestra tabla donde el primer sprite en la tabla está definido con el INDEX = 0x0.
Y 0x8002 = 0x(X + Y). Al igual que la variable 0x8000 aquí vamos a configurar la posición donde vamos a cargar dicho Sprite en píxeles.
Para borrar el Sprite solo vamos a necesitar el ID y asignarlo a la variable 0x8000 antes de llamar el SPECIAL correspondiente.
A continuación unos ejempls de scripts y su uso:
Mostrar Sprites
Ocultar Sprite
Código:
//---------------
#org 0xC00000
lockall
setvar 0x8000 0x300
setvar 0x8001 0x0
setvar 0x8002 0x1880
special 0x6
pause 0x20
addvar 0x8000 0x1
addvar 0x8001 0x1
addvar 0x8002 0x2000
special 0x6
pause 0x20
addvar 0x8000 0x1
addvar 0x8001 0x1
addvar 0x8002 0x2000
special 0x6
pause 0x20
addvar 0x8000 0x1
addvar 0x8001 0x1
addvar 0x8002 0x2000
special 0x6
pause 0x20
addvar 0x8000 0x1
addvar 0x8001 0x1
addvar 0x8002 0x2000
special 0x6
pause 0x20
addvar 0x8000 0x1
addvar 0x8001 0x1
addvar 0x8002 0x2000
special 0x6
pause 0x20
addvar 0x8000 0x1
addvar 0x8001 0x1
addvar 0x8002 0x2000
special 0x6
pause 0x20
releaseall
end
Código:
//---------------
#org 0xB00000
lockall
setvar 0x8000 0x7
special 0x7
pause 0x20
subvar 0x8000 0x1
special 0x7
pause 0x20
subvar 0x8000 0x1
special 0x7
pause 0x20
subvar 0x8000 0x1
special 0x7
pause 0x20
subvar 0x8000 0x1
special 0x7
pause 0x20
subvar 0x8000 0x1
special 0x7
pause 0x20
subvar 0x8000 0x1
special 0x7
pause 0x20
subvar 0x8000 0x1
special 0x7
pause 0x20
releaseall
end
Y aquí el resultado:
Recomendaciones
Usar con el Sistema de Paletas Dinámicas de Navenatox
Finalmente al usar este sistema en conjunto con el tutorial [ASM] FR | Mostrar Imágenes a Pantalla Completa y con un poco de ingenio podemos hacer cosas como esta:
Última edición: