mirror of
https://github.com/Kaisaan/lostkefin.git
synced 2025-06-18 16:45:40 -04:00
Solve most of the graphics format
This commit is contained in:
parent
a181f08aaa
commit
ff4002d8ef
@ -1,6 +1,8 @@
|
|||||||
# Graphics Formats
|
# Graphics Formats
|
||||||
|
|
||||||
*Ys V: Lost Kefin - Kingdom of Sand* uses unique file formats for different graphics.
|
*Ys V: Lost Kefin - Kingdom of Sand* uses unique file formats for different graphics.
|
||||||
|
|
||||||
|
**Note: All values are stored in Little Endian unless otherwise specified.**
|
||||||
|
|
||||||
# HGK Files
|
# HGK Files
|
||||||
|
|
||||||
@ -21,10 +23,10 @@ The `NAXA5010` file header indicates that it is a sprite file.
|
|||||||
|Offset|Description|
|
|Offset|Description|
|
||||||
|---|---|
|
|---|---|
|
||||||
|$00-$07|Always `4E 41 58 41 35 30 31 30` or `NAXA5010` in ASCII|
|
|$00-$07|Always `4E 41 58 41 35 30 31 30` or `NAXA5010` in ASCII|
|
||||||
|$08-$0B|Palette size (In little Endian), either $10 or $100|
|
|$08-$0B|Palette size , either $10 or $100|
|
||||||
|$0C-$0F|Palette Data offset, always `$20000000`|
|
|$0C-$0F|Palette Data offset, always `$20000000`|
|
||||||
|$10-$13|Offset to Image Data (in little Endian)|
|
|$10-$13|Offset to Image Data|
|
||||||
|$14-$17|Offset to Unknown Data (in little Endian)|
|
|$14-$17|Offset to Animation Data|
|
||||||
|$18-$19|Unknown, sometimes matches Image Width|
|
|$18-$19|Unknown, sometimes matches Image Width|
|
||||||
|$1A-$1B|Unknown, sometimes matches Image Height|
|
|$1A-$1B|Unknown, sometimes matches Image Height|
|
||||||
|$1C-$1F|Unknown, always `$00000000`|
|
|$1C-$1F|Unknown, always `$00000000`|
|
||||||
@ -34,24 +36,24 @@ The `NAXA5010` file header indicates that it is a sprite file.
|
|||||||
The Palette (or CLUT) data always starts at $20 in the file and is either $10 colours or $100 colours. Each colour is 32 bits in RGBA8 format.
|
The Palette (or CLUT) data always starts at $20 in the file and is either $10 colours or $100 colours. Each colour is 32 bits in RGBA8 format.
|
||||||
The size of the palette determines if the image data is either 4-bits or 8-bits respectively
|
The size of the palette determines if the image data is either 4-bits or 8-bits respectively
|
||||||
|
|
||||||
## Unknown Data
|
## Animation Data
|
||||||
|
|
||||||
I don't understand yet how this data is used but there are some patterns that emerge when comparing different files.
|
I don't understand yet how this data is used but there are some patterns that emerge when comparing different files.
|
||||||
|
|
||||||
### Header
|
### Header
|
||||||
|
|
||||||
The unknown data starts with an info for the number of entries each file has.
|
The animation data starts with an info for the number of entries each file has.
|
||||||
|
|
||||||
|Size|Description|
|
|Size|Description|
|
||||||
|---|---|
|
|---|---|
|
||||||
|$4|Number of entries (in little Endian)|
|
|$4|Number of entries |
|
||||||
|$4|Entry offset (in little Endian), calculated as (Unknown Data Offest + Entry Offset)|
|
|$4|Entry offset , calculated as (Animation Data Offest + Entry Offset)|
|
||||||
|
|
||||||
The header is padded with `FF FF FF FF`.
|
The header is padded with `FF FF FF FF`.
|
||||||
|
|
||||||
### Entry
|
### Entry
|
||||||
|
|
||||||
Entries can have multiple frames? I'm not sure what each of these items in each entry are so I am calling them "frames" for now.
|
Entries can have multiple frames
|
||||||
|
|
||||||
|Size|Description|
|
|Size|Description|
|
||||||
|---|---|
|
|---|---|
|
||||||
@ -60,29 +62,29 @@ Entries can have multiple frames? I'm not sure what each of these items in each
|
|||||||
|
|
||||||
### Frames
|
### Frames
|
||||||
|
|
||||||
Again, not sure what these are but they seem to have a format. It's not very consistent across files though.
|
Frames are also used for static images.
|
||||||
|
|
||||||
|Size|Description|
|
|Size|Description|
|
||||||
|---|---|
|
|---|---|
|
||||||
|$4|Some value? Usually less than $10 in smaller files|
|
|$4|Frame length (in frames)|
|
||||||
|$2|Another value? Usually less than the previous value|
|
|$2|Usually set to `$01`, image will appear|
|
||||||
|$2|Another unknown Value that is somtimes used|
|
|$2|Image Index number|
|
||||||
|$4|Unknown value, when not empty is usually larger than `$FF000000` (in little endian)|
|
|$2|Horizontal offset|
|
||||||
|
|$2|Vertical offset|
|
||||||
|$4|Unknown value again|
|
|$4|Unknown value again|
|
||||||
|
|
||||||
The rest of each frame is usually empty and padded to be a total of $60 bytes.
|
The rest of each frame is usually empty and padded to be a total of $60 bytes.
|
||||||
|
|
||||||
|
|
||||||
## Image Data
|
## Image Data
|
||||||
|
|
||||||
The image data is $10 bytes long per image. It is located based on the offset in the file header. They are formatted as follows:
|
The image data is $10 bytes long per image. It is located based on the offset in the file header. They are formatted as follows:
|
||||||
|Size|Description|
|
|Size|Description|
|
||||||
|---|---|
|
|---|---|
|
||||||
|$2|Image Width (In little Endian)|
|
|$2|Image Width|
|
||||||
|$2|Image Height (In little Endian)|
|
|$2|Image Height|
|
||||||
|$2|Image Width repeated?|
|
|$2|Image Width for VRAM|
|
||||||
|$2|Image Height repeated?|
|
|$2|Image Height for VRAM|
|
||||||
|$4|Image Offset (In little Endian), calculated as (Image Data Offset + Image Offset)|
|
|$4|Image Offset , calculated as (Image Data Offset + Image Offset)|
|
||||||
|$4|Image Index|
|
|$4|Image Index|
|
||||||
|
|
||||||
## Images
|
## Images
|
||||||
|
Loading…
Reference in New Issue
Block a user