BGST
The background format for Kirby's Epic Yarn.
General Information
- Byte order: big-endian
- Sections: 3
- header
- grid entries
- image data
Format documentation
Header
Size = 0x40
| field | offset | size | data type | description |
|---|---|---|---|---|
| magic | 0x0 |
0x4 |
char[0x4] |
"BGST" |
| flags | 0x4 |
0x4 |
u32? |
Often seen to be 0x10 or 0x11. |
| image width | 0x8 |
0x4 |
u32 |
The width of each image, in pixels. |
| image height | 0xC |
0x4 |
u32 |
The height of each image, in pixels. |
| grid width | 0x10 |
0x4 |
u32 |
The number of rows in the grid. |
| grid height | 0x14 |
0x4 |
u32 |
The number of columns in the grid. |
| image count | 0x18 |
0x4 |
u32 |
The number of total images in the file. |
| layer enabled | 0x1C |
0xC |
bool[0xC] |
Indicates which rendering layers are available for the file to use.1 |
| grid entry offset | 0x28 |
0x4 |
u32 |
Offset to grid entries. |
| image data offset | 0x2C |
0x4 |
u32 |
Offset to image data array. |
| scale modifier | 0x30 |
0x4 |
float |
Used in-game when rendering the cells.2 This value is set to 1.0f if the flags are 0x10. |
1 - Below is an enum of rendering layers as they are called by the game. Relative to the viewer, they're sorted from furthest to nearest:
enum Layer {
Far05 = 0,
Far04 = 1,
Far03 = 2,
Far02 = 3,
Far01 = 4,
Map = 5,
Game = 6,
Near01 = 7,
Near02 = 8,
Near03 = 9,
Near04 = 10,
Near05 = 11
};
2 - When the game renders images, the output X position is 46.0f / scale modifier and the output Y position is 1 / (46.0f / scale modifier). 46.0f seems to be some scale factor.
Grid Entries
Grid entries can be thought of as information for rendering a grid cell. Every field here is treated by the game as a signed 16-bit integer.
| field | offset | description |
|---|---|---|
| entry enabled | 0x0 |
Indicates whether or not this entry should be rendered. |
| layer | 0x2 |
The layer this entry will be rendered on. |
| row | 0x4 |
The row this entry will be rendered on. |
| column | 0x6 |
The column this entry will be rendered on. |
| main image index | 0x8 |
The image this entry will render.3 |
| mask image index | 0xA |
The mask this entry will apply to this image, if any.3 |
| unknown | 0xC |
This field is almost always 0xFFFF. |
| unknown | 0xE |
This field is almost always 0xFFFF. |
3 - Image indices can be assigned a certain value.
- A value greater than or equal to
0is an image index. - A value equal to
-1indicates that no image is to be rendered. - The meaning of a value equal to
-2is currently unknown. Additionally, fields that appear to be grid entries do not follow the regular grid entry pattern -- an example can be found instage/stage000/section001.bgst3. It's unknown if this is an entry, some other data, or garbage.
Image data
A "main image" is a CMPR-compressed image. Because transparency is not supported in that format, grids that want to render a specific part of the image must use an additional I4-encoded alpha mask.
These compressed data blocks are 0x20000 bytes in size.
Example of main images and masks
The following examples are from stage/stage000/section005.bgst3.
Main image: index 26

Mask image: index 27

Main image: index 28

Mask image: index 29
