Registrarse

[Gráficos] FR | Aumentar la cantidad de Trainer Sprites

hacanoca

Héroe de WaH
Buenas a todos.
Este será mi primer tutorial.
Este tutorial está basado en otro tutorial de mbcn10ww de Pokeco
Todo surgió porque tuve un problema ampliando los trainers Sprite y sólo en el post de él logré hallar la solución.

Bueno, como menciono en el título buscamos ampliar la cantidad de Trainer Sprites, de tal forma que podamos agregar más entrenadores sin necesidad de sobrescribir alguno de los existentes (es para aquellos que tenemos pensado gran cantidad de personajes y los 148 Sprites que trae FR no nos son suficientes :p )

Bueno, inicialmente pensé que bastaba con ampliar la tabla de Sprites Trainer y la tabla de sus respectivas paletas. Pero no, con sólo hacer eso nos dará problemas al usar el nuevo sprite en las batallas.

Advertencia: Con este método podemos llegar a tener hasta 255 Sprite Trainers. Ese es el límite. Desconozco sí se puede hacer más. Leí que mbcn10ww estaba intentando ampliar esta cantidad y creo que logró alcanzar los 510. Pero realmente no he mirado el tema.

A continuación describo el procedimiento completo:

1)¿Qué necesitamos?
-Editor Hexadecimal
-Free Space Finder
-Un programa para insertar imágenes (Por ejemplo NSE 2.0)
-Imágenes de los entrenadores a ingresar (16 colores 64x64)

2) En primer lugar insertamos las imágenes de los nuevos Sprite Trainers. Para ello haremos uso de NSE 2.0
En el NSE cargamos nuestra rom y le damos a New Sprite. Nos abrirá una nueva ventana en donde indicaremos que la imagen a ingresar es "8x8 Sprite 4bpp"


Nos abrirá un espacio en blanco, allí importaremos la imagen de nuestro Sprite cargando tanto la paleta como la imagen


Le damos click en salvar. Luego insertamos de forma comprimida tanto la imagen como la paleta.


Antes de insertar, el programa nos dirá la cantidad de bytes libres necesarios. Así que debemos buscar esa cantidad en FSF y darle un pointer con un espacio libre suficiente. Igual el NSE abortará la inserción si no encuentra suficiente espacio libre.
En mi caso tengo una rom expandida así que insertaré mi imagen en el pointer 1000E80, aunque para roms no expandidas lo normal es un pointer de 6 dígitos.

(Subrayado está el espacio libre necesario)

En el caso de la paleta la inserté en E608C8 (¡CUIDADO! este pointer normalmente está siendo usado en el juego (corresponde a una parte de un Sprite Trainer original), sino que por cosas varias yo en mi rom eliminé esa información y tenía allí espacio libre).

Ahhh, se me olvidaba, tanto los sprites como las paletas deben insertarlas en punteros que terminen en 0,4,8 ó C. Si no pueden ocurrir problemas durante las batallas, como que el trainer no se vea bien.

No sobra decir que deben llevar registro de los pointers donde ingresan sus imágenes y sus paletas.

Este proceso se repite con cada uno de los Sprite Trainers que se quieran insertar.

3)Ahora, para poder ingresar estas imágenes a la tabla de entrenadores y que funcione correctamente se debe tener en cuenta 5 tablas del juego:

-238E8C: Parece ser una tabla donde se almacenan las animaciones de los Sprites Trainers
-2390DC: Una tabla que repointea a las posiciones de la tabla anterior
-23932C: Otra tabla de pointers reacionada con la animación de los Sprite. No sé bien su uso.
-23957C: Tabla donde se almacenan los Sprite Trainers como tal.
-239A1C: Tabla donde se almacenan las paletas de los Sprite Trainers.

Estas tablas estan localizadas una detrás de la otra, cada una con 148 "casillas" (Una por Sprite)
Veremos un ejemplo de las modificaciones asumiendo que queremos insertar 10 Sprites Trainers nuevos.

3.1) Tabla 1: Tabla 238E8C
Esta tabla tengo entendido que está relacionada con las animaciones de los Sprite Trainers, y como en FR los sprites no están animados, todas las casillas llevan el mismo pointer permutado E8 47 23 08. Ahora, si tú no deseas incluir animaciones a tus sprites puedes reducir esta tabla a sólo una casilla de 4 bytes (los mencionados E8 47 23 08) y reemplazar el resto de la tabla con bytes ibres FF. Pero si quieres crear animaciones en los sprites no la puedes reducir y deberás repointear la tabla añadiendo 4 bytes por cada nuevo sprite que desees insertar al juego: Si en nuestro caso quisiéramos una animación por trainer requerimos un pointer con 4x(148 Sprites Originales+10 Nuevos) =4x158= 632 bytes libres (decimal, o 278 en HEX).
Pero continuaremos el ejercicio suponiendo que no tendremos Sprite Animados por lo que reducimos la tabla a una única casilla con 4 bytes. Sin necesidad de repuntear. Nos sigue quedando en el pointer 238E8C

Por cierto, Tía Piolín tiene un tuto para agregar Sprite Trainer con animación.

3.2) Tabla 2: Tabla 2390DC
Es una tabla que conduce a cada una de las casillas de la tabla anterior. Entonces si redujimos la tabla previa a sólo 4 bytes, todas las casillas de esta tabla deben llevar al mismo pointer. En nuestro caso 8C 8E 23 08.
Debemos tener tantas casillas como Sprite Trainers tengamos, como en nuestro ejemplo estamos agregando 10 Sprites nuevos, requerimos que esta tabla tenga 158 casillas, cada casilla consta de un pointer de 4 bytes. Por lo que necesitamos 632 bytes libres (decimal). Buscamos espacio en el FSF y creamos la tabla en el pointer seleccionado.
En mi caso, como liberé espacio de la tabla anterior, pude ubicar esta tabla en el pointer 238EB0.

En la imagen se resaltan partes de la tabla intentando mostrar cada una de las "Casillas". Nótese que cada una de las casillas llevan al mismo pointer permutado (que corresponde a la casilla unitaria en la que dejamos la Tabla1 dado que todos los Sprites tendrán la misma "animación" (Sin animación)

Ahora vamos a las siguientes direcciones 0x3F8F4 y 0x10BDA8 y allí colocamos el pointer permutado de nuestra tabla 2. En nuestro caso B0 8E 23 08




3.3) Tabla 3: Tabla 23932C
Esta tabla debe llevar una casilla por cada Sprite trainer, en nuestro caso. 158 casillas. Cada una de las casillas debe estar rellenada con 08 01 00 00, sólo hay cuatro sprites que están rellenos con 08 02 00 00. Pero no tengo idea del por qué. La recomendación es que los nuevos Sprite Trainers se llenen con 08 01 00 00. Como ven, cada casilla posee 4 bytes, así que debemos repointear a una localización con 158x4 bytes libres. Es decir 632 bytes libres. En mi caso (que he ido limpiando el espacio de las tablas anteriores tras repointear) la inserté en el pointer 239190.

Ahora vamos a las siguientes direcciones: 0x37E78, 0x3804C, 0x3CAD4 , 0x158514 y allí colocamos el pointer permutado de nuestra tabla 3. En nuestro caso 90 91 23 08


Ejemplo con la primer ruta, así mismo para las otras 3.

3.4) Tabla 4: Tabla 23957C
Esta tabla es la tabla de los Sprite Trainers y por obvias razones debe llevar una casilla por cada Sprite. En esta tabla cada Casilla tiene la siguiente estructura: XXXXXX YY 0008 ZZ00
-XXXXXX YY corresponde al pointer permutado donde está insertado el sprite. Coloco YY porque este valor puede ser 08 ó 09. Cuando trabajamos en una rom ampliada y ubicamos información más allá de 00FFFFFF los pointers permutados irán con 09 en vez de 08.
-0008: no debe ser modificado, algunos llevan 0010. Pero no sé por qué.
-ZZ00: Mitad del ID de la imagen. En ZZ llevará su numeración, la primera casilla con 00 y la 147 con 93 (así, el primer sprite adicional que creemos llevará el 94).

De acuerdo con lo anterior la info para nuestro Sprite Trainer 148 (Usando la imagen ingresada en la parte 2) será 80 0E 00 09 00 08 94 00.
En nuestro caso necesitaremos llevar la tabla a un pointer con 8 x158 bytes libres = 1264 bytes. En mi caso utilicé el pointer ED0000.


En la imagen se señala el ingreso del Sprite Trainer 148 (94 en HEX) que es el primero de los nuevos Sprite Trainers Insertados.

Ahora, vamos a las siguientes direcciones:
0x3473C
0x347A4
0x37E8C
0x38060
0x3CAE8
0x838E4
0x83928
0x10BC3C
0x158528
y allí colocamos el pointer permutado de nuestra tabla 4. En nuestro caso 00 00 ED 08


Ejemplo del repunteo de la primer dirección. Hacer lo mismo con las otras.

3.5) Tabla 5: Tabla 239A1C
Esta tabla es la tabla de las paletas de los Sprite Trainers y por obvias razones debe llevar una casilla por cada Sprite. En esta tabla cada Casilla tiene la siguiente estructura: XXXXXX YY ZZ00 0000
-XXXXXX YY corresponde al pointer permutado donde está insertada la paleta. Coloco YY porque este valor puede ser 08 ó 09 (Por lo explicado anteriormente).
-ZZ00: Mitad del ID de la imagen. En ZZ llevará su numeración, la primera casilla con 00 y la 147 con 93 (así, el primer sprite adicional que creemos llevará el 94).
-0000: Sin usar, siempre 0000

De acuerdo con lo anterior la info para nuestro Sprite Trainer 148 (Usando la imagen ingresada en la parte 2) será C8 08 E6 08 94 00 00 00.
En nuestro caso necesitaremos llevar la tabla a un pointer con 8 x158 bytes libres = 1264 bytes. En mi caso utilicé el pointer ED05A0.


En la imagen se señala el ingreso de la paleta del Sprite Trainer 148 (94 en HEX) que es el primero de las nuevas paletas de Sprite Trainers Insertadas.

Ahora, vamos a las siguientes direcciones:
0x3474C
0x347A0
0x37E88
0x3805C
0x3CAE4
0x838E0
0x8392C
0x10BD1C
0x10BD3C
0x10BD7C
0x158524
y allí colocamos el pointer permutado de nuestra tabla 5. En nuestro caso A0 05 ED 08


Ejemplo del repunteo de la primer dirección. Hacer lo mismo con las otras.

4)Listo! Tras haber organizado esas 5 tablas ya deben funcionar correctamente los nuevos Sprites Trainers adicionados. Personalmente no he podido visualizarlos en advance trainer (no sé por qué), pero en Gen III tools sí se cargan correctamente (Tras modificar en el INI la cantidad de Sprite Trainers)
mbcn10ww recomienda Hopeless Trainer Editor, también modificando la cantidad de Sprite Trainers en el ini
Acá una muestra






Y ya, eso era todo. Espero les sea de ayuda.
Lamento si lo hice muy extenso. No tengo experiencia en esto de hacer tutoriales.
Por si no me hice entender o quieren mirar más, acá les dejo el link de Pokeco
https://www.pokecommunity.com/showthread.php?t=382995

Saludos
 
Última edición:

Sukhoik8

Mejor Rom hacking, mejor persona
Respuesta: Aumentar la cantidad de Trainer Sprites en FR

Enserio nadie ha comentado este increíble aporte?

Pues tengo que decirte que esta bien explicado,
pero de momento no lo usare creo que basta con los
que trae el juego. Pero para otras personas que necesiten
mas personajes le vendrían bien.

PD:xD por el 3 scan entendí esa referencia :v
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: Aumentar la cantidad de Trainer Sprites en FR

Pues me parece muy buena la idea de expandir trainers en FR. Aunque creo que los 147 que tiene por defecto son mas que suficientes, teniendo en cuenta que los primeros 87 son los trainers originales de RSE.
 
Arriba