Registrarse

[Gráficos] R | Paletas individuales para cada mini

Antes de dar paso al tuto voy a explicar de que trata ya que el titulo no es tan preciso, ¿o si lo será?... no lo sé. Es el segundo tutorial que escribo, así que si me enredo o escribo poco o algo comprensión.

En algún punto cuando intentaste insertar nuevos minis te debiste dar cuenta que los minis comparten paletas, ósea esto quiere decir que si cambiabas la paleta de uno también se cambiaba la paleta de otros. Ejemplo gráfico.


El mini 8 y 11 usan la paleta #5.​
Entonces este tutorial sirve para que el mini que vayas a insertar use una paleta única.

Introducción
No es obligatorio leer esta parte pero te sirve para aprender, no seré tan técnico así que lo explicaré en lenguaje cotidiano que tu y yo entendamos. La pantalla de GBA solo puede mostrar 32 paletas, que se divide en dos segmentos. 16 paletas para background y 16 paletas para Sprite. Nos centramos en esta, lo que hace el juego original es que usa un Slot (Caja de colores) que sirve exclusivamente para que se muestren los colores del mini.

En el ejemplo de arriba los colores del mini que inserte usan la caja numero 4.

Entonces todas esas 32 cajas (Slots) sirve para mostrar colores (paletas). Obviamente caja caja (Slot) tiene alguna función (texbox, battleground ectect..). Como viste malgaste la caja #4, ya que ese slot solo muestra la paleta para que ese mini se vea bien.

Entonces hay que usar la creatividad para saberte administrar en las paletas ya que como te habrás dado cuenta ese mapa no aprovecha todos sus caja de colores (Slots). Ejemplo.
- La caja (Slot) 01= Usada para el reflejo en el agua.​
¿Vemos alguna laguna o algo en ese mapa?. ¡Nop!
Entonces aprovechemos ese slot. Ahora observa otra vez el slot 0E tiene colores negros usemos ese slot también. Solo es cuestión de saberse administrar y darse cuenta que Slots se esta usando ese mapa.
Empecemos...

Con esa breve introducción ya estamos listos, cabe mencionar que este método es para la rom de Ruby. Para FR ya existe al final del tuto les dejaré algunos anexos. Y algo importante es que este tutorial es una adaptación del tutorial de Invert que el solo lo tenía para FR. Gracias a su tuto pude adaptarlo a Ruby.
Las herramientas que usaremos serán las siguientes:
- Ape
- HXD (Editor hexadecimal)
- NSE 1.7.5
- El mini indexado
En mi ejemplo usaré este mini de seiyouh
1) Hacer una nueva tabla.

Ir al offset: 0x0837377C, copiar D8 bytes y pegar en un espacio vacío. Recuerda anotar el offset.
1.1) Abre la herramienta HXD, carga la rom. Aplasta control + G y escribe esto 37377C. Seleccionemos D8 bytes, como en la imagen de abajo.
1.2) Copiamos esos bytes (control + C) y los pegamos (control + B) en un offset vacío. En mi ejemplo yo pegaré mi tabla en el offset: 0xB00000
Guardamos (control + S) y listo. Recuerda anotar el offset de tu tabla. En mi ejemplo mi nueva tabla de paletas esta guardada en 0xB00000
2) Insertar nuevas paletas.

Exporta la paleta del mini con CMP. Una vez exportado inserta esa paleta con la herramienta APE. Recuerda anotar el offset la paleta.
2.1) Abre APE, carga la rom, marca la casilla Load from offset y en offset Hex escribe un offset vacio. Una vez hecho eso clic en Load. En mi ejemplo insertare la paleta en el offset: 0xC00000
2.2) Clic en parte que señale de naranja, y buscamos la paleta que exportamos de CMP.
2.3) Simplemente damos clic en Replace y al cuadro que nos salga le damos que SI. Ahora damos clic en Load y listo tu paleta ya esta insertada. Recuerda anotar el offset. En mi ejemplo inserta la paleta en el offset: 0xC00000.
3) Agregando nuestra paleta a la tabla de paletas.

A continuación, les voy a definir la tabla. La tabla consiste en fragmentos de 8 byes uno detras de otro. Cada fragmento sirve para asignar una paleta a cada número de paleta de mini. El final de la tabla lo cerramos con estos bytes 00 00 00 00 FF 11 00 00 00.
Tabla:
Código:
XX XX XX 08 YY 11 00 00
Donde:
XX XX XX -> Puntero de la paleta
YY ->Es el número de la paleta de mini (el que usas en NSE y OEditor)

Una vez hecho el fragmento, pegamos esos bytes en la tabla. Y recuerda cerrar la tabla. Seguimos el mismo procedimiento para cada paleta que vayamos agregar.
3.1) En mi ejemplo yo inserte la paleta en el offset: 0xC00000 y mi tabla esta en el offset: 0xB00000.
- Permuto la paleta 00 00 C0 08
- Si te fijas en tabla de paletas, la ultima es 1A (esta en uso). Entonces la que sigue es [b}1B (libre), yo usaré esa.
-Entonces al final mi fragmento de bytes quedo de la siguiente manera
Código:
00 00 C0 08 1B 11 00 00 00
3.2) Simplemente pego esos bytes al final de mi tabla. Y no te olvides de cerrar la tabla con estos bytes.
Código:
00 00 00 00 FF 11 00 00 00
No te olvides de guardar (control + S)

4) Creando un settings para la herramienta NSE 1.7.5.

Abrimos un block de notas y pegamos esto:
Código:
[AXVE]
Inherits: AXVE
Palette table = &HOffset de la tabla de paletas
Sprite table = &H36DC58
[/AXVE]
Escribimos el offset de la tabla. (No borraras esto &H) y listo guardamos con el nombre de settings.ini. Y ese archivo lo pegan en la carpeta del NSE.


5) Repuntear la tabla de paletas

Buscan este puntero: 7C 37 37 08. Y Lo modifican por el puntero de su tabla, en total hay 3 punteros que tienes que modificar.
4.1) Convertimos en puntero nuestra tabla de paletas. En mi ejemplo mi tabla esta en el offset: 0xB00000, en puntero sería: 00 00 B0 08

4.2) Abre HXD, carga la rom. Aplasta (control + F), marca la opción valores hexadecimales y en el cuadro buscar escribe esto: 7C 37 37 08
En esa dirreción escribe tu puntero. En ejemplo escribiría 00 00 B0 08.

4.3) Aplasta F3, y otra vez escribes tu puntero. Aplasta otra F3 y otra vez escribes el puntero XD… solo son tres. Y mira al final son estos tres
Y listo guardamos (control + S)
6) Modificando algunos bytes

Van al siguiente offset: 0x0805B01C. Y escriben los siguientes bytes : 70 88 09 07 09 0f 00 29 01 d0 05 e0
Van al siguiente offset: 0x0805B034. Y escriben los siguientes bytes: 03 e0
.Y guardar (control + S).

7) ¿Como asigno las paletas a los minis?

En NSE cargar el rom y se van al mini que van a reemplzar. Y en esta parte escribimos la paleta que acabamos de insertar.
En mi ejemplo yo asigne mi paleta 1B. Ahora importamos el mini. Y vamos a verificar si carga esa paleta que agregamos.

¿Cómo cambio la caja (slot en mi caso la 04) para que aparezca en otra caja (slot)?

En mi ejemplo, como vemos la caja 0E (Slot) no esta siendo usada así que ahí pondré mi paleta del mini.
Abren su rom con NSE y se van al mini como pueden ver ya tenemos nuestra paleta #1B que enseñe antes.
Clic en View , Hex editor y seleccionan SPRITE OFFSET.
Nota: Esta parte tengo que seguir investigando para ver como funciona en realidad. Pero de momento si se cambian los Slots con este método.
El byte seleccionado es el que cambiaremos, por ejemplo quiero que mi paleta se cargue en el slot 0E, Pues escriben 0E

¡Y listo! con esto hemos acabado!.

No creo que haya perdida pero si tienen preguntas las pueden escribir aquí o preguntarme directamente. Y si les sirvió el tuto no dejen su me gusta (+Gracias). O algo comentario, si ven algo que esta mal me dicen para corregir eso es todo.

Pd: No creo que este tan deforme el post..

Anexos
https://whackahack.com/foro/t-20596/fr-uso-paletas-para-minis
https://whackahack.com/foro/t-28751/fr-otros-poner-mas-paletas-para-minis

M.H.B.P.
 

Eddie

U Got Woomy
Respuesta: [Ruby] Paletas individuales para cada mini

Definitivo, me paso a Ruby.

Hermoso, muy bien explicado y la verdad es que pinta muy bien, hay algunas faltas ortograficas pero nada grave, en general se entiende a la perfeccion y es muy intuitivo. ¡Sigue así!

¡Hey, listen!
 

Nachoius

Caminante del cielo
Respuesta: [Ruby] Paletas individuales para cada mini

Gran tutorial bro! jejeje me recuerda a lo que conversabamos, dijiste que subirias el tutorial y lo hiciste, grandísimo aporte, esto superará varias limitaciones de la rom. Un paso más hacia la calidad gráfica. Enhorabuena
 

Versekr Dark

Usuario mítico
Hola, veo que el tutorial es muy bueno pero hay un problema creo, no estoy seguro pero si asignas es slot a esa paleta quedaria definitivo de ese mapa o en general?
 
Arriba