~Criisss
Usuario mítico
Hoy a la tarde estuve un buen rato investigando esto, para hacer que un mini que no tiene frames de correr, pueda correr sin problema para cuando hacemos un cambio de mini (sea con JPAN, ASM, o lo que fuere). Pude lograrlo después de un rato, y luego Nacho me dijo que existía este tutorial, noté que llegamos al mismo resultado jaja.
La cuestión es que como dice Gold más arriba, los frames se agregan bien, pero cuando corremos la animación no se ve bien como el mini del prota original.
Para esto seguí un poco mas la investigación, y llegué a la solución. Primero que nada, tengo que explicar la estructura de los OW:
Lo importante está en el puntero que marqué en negrita. Viendo esta estructura, comparando el mini del prota con los demas, encontré que ese puntero cambia:
Cabecera del Mini 0 de BPRE
FF FF 00 11 02 11 00 02 10 00 20 00 10 01 00 00 10 37 3A 08 9C 37 3A 08 70 34 3A 08 A0 00 3A 08 FC 1C 23 08
Cabecera del Mini random de BPRE
FF FF 00 11 FF 11 00 01 10 00 20 00 15 01 00 00 10 37 3A 08 9C 37 3A 08 68 33 3A 08 80 14 3A 08 FC 1C 23 08
Para cambiar el puntero al mini que le agregamos los frames, ahora vamos a editar la cabecera del OW, y no los frames como hace Eing.
La cabecera está resaltada en amarillo en esta imagen del NSE. Para modificar el puntero, ctrl+G en HxD y ponen ese offset. Los va a llevar a los datos que puse arriba.
También se puede ver que acá marca cual es el puntero a la animación, como ese es el mini 0 tiene la animación correcta. Lo que tenemos que hacer es poner ese mismo puntero en la cabecera del mini al que le agregamos frames. En mi caso queda así:
FF FF 00 11 FF 11 00 01 10 00 20 00 15 01 00 00 10 37 3A 08 9C 37 3A 08 70 34 3A 08 80 14 3A 08 FC 1C 23 08
Y así se ve el puntero actualizado en NSE:
Espero haber sido claro.
La cuestión es que como dice Gold más arriba, los frames se agregan bien, pero cuando corremos la animación no se ve bien como el mini del prota original.
Para esto seguí un poco mas la investigación, y llegué a la solución. Primero que nada, tengo que explicar la estructura de los OW:
OW Data
Sacado de la documentación del OWM de Kimonas, todos los creditos para él y JPAN, el autor original.
https://github.com/kimwnasptd/OWM-Qt/wiki/Inner-Workings
Name | bytes | Description |
---|---|---|
Starter bytes | 2 | Pair of FFs used to mark the start of the sprite. Also used to determine shift and possible animation for the byte, calculated by a complex function at 0x08007190 |
OW Palette | 2 | Number of the 16 color palette for this sprite |
Replacement Palette | 2 | A second palette for a switch up, but never used. |
Unknown | 2 | Interesting halfword, responsible for synchronization of all sprites of the same kind. Need more research |
Width (pixels) | 2 | Horizontal size of the sprite |
Height (pixels) | 2 | Vertical size of the sprite |
Palette slot + ??? | 1 | The lower half chooses the sprite slot to load the palette to. The upper half is a mystery to me |
??? | 1 | One of its functions is to tell if the palette overwrites some other or not if its slot is already occupied. |
Filler | 2 | To align the pointers that come |
Pointer 1 | 4 | Points to a set of 64 bits that have a say in the starting distribution of the images (but don’t know what exactly) |
Size-draw Pointer | 4 | Related to the size of the sprite. Not required to be accurate. |
Shift-redraw pointer | 4 | Points to an address and some data that allow for the drawing of moving animations, that is, the movement frames. |
Sprite-pointer pointer | 4 | The pointer that tells where your sprite image data begins. (This is the Frames Pointer). Sprite-pointer (first in a series, continues afterward with no frame limiter) |
Pointer 2 | 4 | Always the same for all sprites, used to calculate the starting location to store this data in the RAM |
Sacado de la documentación del OWM de Kimonas, todos los creditos para él y JPAN, el autor original.
https://github.com/kimwnasptd/OWM-Qt/wiki/Inner-Workings
Lo importante está en el puntero que marqué en negrita. Viendo esta estructura, comparando el mini del prota con los demas, encontré que ese puntero cambia:
Cabecera del Mini 0 de BPRE
FF FF 00 11 02 11 00 02 10 00 20 00 10 01 00 00 10 37 3A 08 9C 37 3A 08 70 34 3A 08 A0 00 3A 08 FC 1C 23 08
Cabecera del Mini random de BPRE
FF FF 00 11 FF 11 00 01 10 00 20 00 15 01 00 00 10 37 3A 08 9C 37 3A 08 68 33 3A 08 80 14 3A 08 FC 1C 23 08
Para cambiar el puntero al mini que le agregamos los frames, ahora vamos a editar la cabecera del OW, y no los frames como hace Eing.
La cabecera está resaltada en amarillo en esta imagen del NSE. Para modificar el puntero, ctrl+G en HxD y ponen ese offset. Los va a llevar a los datos que puse arriba.
También se puede ver que acá marca cual es el puntero a la animación, como ese es el mini 0 tiene la animación correcta. Lo que tenemos que hacer es poner ese mismo puntero en la cabecera del mini al que le agregamos frames. En mi caso queda así:
FF FF 00 11 FF 11 00 01 10 00 20 00 15 01 00 00 10 37 3A 08 9C 37 3A 08 70 34 3A 08 80 14 3A 08 FC 1C 23 08
Y así se ve el puntero actualizado en NSE:
Espero haber sido claro.