This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
banjo_kazooie:sprites [2025/04/12 13:01] snowboundmage2 [Sprite Binary File Format Reference and Design Document] |
banjo_kazooie:sprites [2025/05/01 12:05] (current) snowboundmage2 removed emojis for easier reading |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Sprite Asset ====== | + | ====== Sprite Data ====== |
This page documents the binary sprite format derived from Banjo-Kazooieโs N64 rom. It supports both single-chunk and multi-frame layouts, with support for various pixel formats and chunk-based rendering. | This page documents the binary sprite format derived from Banjo-Kazooieโs N64 rom. It supports both single-chunk and multi-frame layouts, with support for various pixel formats and chunk-based rendering. | ||
Line 7: | Line 7: | ||
---- | ---- | ||
- | ===== ๐ขฉ Overview ===== | + | ===== Overview ===== |
This format is used for static or animated sprite graphics in the ROM. Depending on frame count, it can store a simple image or a complex animation. | This format is used for static or animated sprite graphics in the ROM. Depending on frame count, it can store a simple image or a complex animation. | ||
Line 13: | Line 13: | ||
---- | ---- | ||
- | ===== ๐ Reference Table ===== | + | ===== Reference Table ===== |
- | ==== ๐ฅ File Header (offsets 0x00โ0x03) ==== | + | ==== File Header (offsets 0x00โ0x03) ==== |
^ Field ^ Offset ^ Type ^ Description ^ | ^ Field ^ Offset ^ Type ^ Description ^ | ||
Line 21: | Line 21: | ||
| Format ID | 0x02 | `uint16_t` | Format identifier | | | Format ID | 0x02 | `uint16_t` | Format identifier | | ||
- | ==== ๐จ Format ID Mappings ==== | + | ==== Format ID Mappings ==== |
^ Format ID ^ Enum ^ Description ^ Bits per Pixel ^ | ^ Format ID ^ Enum ^ Description ^ Bits per Pixel ^ | ||
Line 28: | Line 28: | ||
| 0x0020 | I4 | 4-bit intensity | 4 | | | 0x0020 | I4 | 4-bit intensity | 4 | | ||
| 0x0040 | I8 | 8-bit intensity | 8 | | | 0x0040 | I8 | 8-bit intensity | 8 | | ||
+ | | 0x0100 | IA4 | 4-bit intensity(with alpha) | 4 | | ||
+ | | 0x0200 | IA8 | 8-bit intensity(with alpha) | 8 | | ||
| 0x0400 | RGBA16 | 16-bit RGBA (5-5-5-1 format) | 16 | | | 0x0400 | RGBA16 | 16-bit RGBA (5-5-5-1 format) | 16 | | ||
| 0x0800 | RGBA32 | 32-bit RGBA | 32 | | | 0x0800 | RGBA32 | 32-bit RGBA | 32 | | ||
Line 33: | Line 35: | ||
---- | ---- | ||
- | ===== ๐ผ Single Chunk Sprite Layout ===== | + | ===== Single Chunk Sprite Layout ===== |
Used if `frameCount > 256` (`0x0100`). | Used if `frameCount > 256` (`0x0100`). | ||
Line 53: | Line 55: | ||
---- | ---- | ||
- | ===== ๐ Multi-Frame Sprite Layout ===== | + | ===== Multi-Frame Sprite Layout ===== |
Used if `frameCount โค 256` (`0x0100`). | Used if `frameCount โค 256` (`0x0100`). | ||
- | ==== ๐ Frame Table ==== | + | ==== Frame Table ==== |
* Offset: `0x10` | * Offset: `0x10` | ||
Line 63: | Line 65: | ||
* Each entry contains a **relative** 32-bit offset from the start of the frame data block. | * Each entry contains a **relative** 32-bit offset from the start of the frame data block. | ||
- | ==== ๐งฑ Frame Data Block ==== | + | ==== Frame Data Block ==== |
Starts at: `0x10 + (frameCount ร 4)` | Starts at: `0x10 + (frameCount ร 4)` | ||
Line 96: | Line 98: | ||
---- | ---- | ||
- | ===== ๐ง Design Rationale ===== | + | ===== Design Rationale ===== |
=== Format ID and Versatility === | === Format ID and Versatility === | ||
Line 124: | Line 126: | ||
---- | ---- | ||
- | ===== โ Validation Checklist ===== | + | ===== Validation Checklist ===== |
Use the following to verify whether a file matches this format: | Use the following to verify whether a file matches this format: | ||
Line 137: | Line 139: | ||
---- | ---- | ||
- | ===== ๐ Notes ===== | + | ===== Notes ===== |
* All integers are stored in **big-endian** format. | * All integers are stored in **big-endian** format. |