Add Kaitai Struct definition for texture data files (.tex) (#1741)

This commit is contained in:
Christian Semmler 2026-02-07 08:31:49 -08:00 committed by GitHub
parent 464e59df3e
commit 2dfc4b72ab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 99 additions and 0 deletions

View File

@ -21,6 +21,7 @@ Kaitai Struct allows you to define binary formats in a YAML-based `.ksy` file, w
| [`animation.ksy`](/docs/animation.ksy) | `.ani` | Animation data (keyframes, actor references, camera animation) | | [`animation.ksy`](/docs/animation.ksy) | `.ani` | Animation data (keyframes, actor references, camera animation) |
| [`wdb.ksy`](/docs/wdb.ksy) | `.wdb` | World database (textures, parts, models, ROI hierarchies, LODs) | | [`wdb.ksy`](/docs/wdb.ksy) | `.wdb` | World database (textures, parts, models, ROI hierarchies, LODs) |
| [`dta.ksy`](/docs/dta.ksy) | `.dta` | Animation data (world animation info, model placement) | | [`dta.ksy`](/docs/dta.ksy) | `.dta` | Animation data (world animation info, model placement) |
| [`tex.ksy`](/docs/tex.ksy) | `.tex` | Texture data (named textures with palette and pixel data) |
## Using the Tools ## Using the Tools
@ -50,6 +51,9 @@ ksv /path/to/lego/data/world.wdb wdb.ksy
# View an animation data file # View an animation data file
ksv samples/BLDRINF.DTA dta.ksy ksv samples/BLDRINF.DTA dta.ksy
# View a texture data file
ksv samples/Dbfrfn.tex tex.ksy
``` ```
### Kaitai Struct Dump (ksdump) ### Kaitai Struct Dump (ksdump)
@ -74,6 +78,9 @@ ksdump --format yaml /path/to/lego/data/world.wdb wdb.ksy
# Dump an animation data file to JSON # Dump an animation data file to JSON
ksdump --format json samples/BLDRINF.DTA dta.ksy ksdump --format json samples/BLDRINF.DTA dta.ksy
# Dump a texture data file to JSON
ksdump --format json samples/Dbfrfn.tex tex.ksy
``` ```
## Sample Files ## Sample Files
@ -84,5 +91,6 @@ The [`samples/`](/docs/samples/) directory contains example files for testing:
- `History.gsi` - Sample score history data - `History.gsi` - Sample score history data
- `pns065rd.ani` - Sample animation file - `pns065rd.ani` - Sample animation file
- `BLDRINF.DTA` - Sample animation data file - `BLDRINF.DTA` - Sample animation data file
- `Dbfrfn.tex` - Sample texture data file (dune buggy front fender)
Note: The world database (`world.wdb`) can be found in your LEGO Island installation at `lego/data/world.wdb`. Note: The world database (`world.wdb`) can be found in your LEGO Island installation at `lego/data/world.wdb`.

BIN
docs/samples/Dbfrfn.tex Executable file

Binary file not shown.

91
docs/tex.ksy Normal file
View File

@ -0,0 +1,91 @@
meta:
id: tex
title: Texture Data File
application: LEGO Island
file-extension: tex
license: CC0-1.0
endian: le
doc: |
Texture data format for LEGO Island (1997). Contains one or more named
textures with 8-bit indexed color image data.
Texture data is embedded in SI (Interleaf) container files and parsed by
LegoTexturePresenter::Read(). Each texture consists of a length-prefixed
name followed by image data with a color palette and pixel indices.
The image format is shared with the world database (world.wdb) texture
data, using the same LegoImage and LegoPaletteEntry serialization.
File structure:
1. Texture count
2. Named texture entries - name + palette + pixel data
seq:
- id: num_textures
type: u4
doc: Number of textures in this file.
- id: textures
type: named_texture
repeat: expr
repeat-expr: num_textures
doc: Array of named textures.
types:
named_texture:
doc: |
A named texture with 8-bit indexed color image data.
seq:
- id: name_length
type: u4
doc: Length of the texture name buffer in bytes.
- id: name
type: str
size: name_length
encoding: ASCII
terminator: 0
doc: |
Texture name (e.g., "dbfrfn.gif"). The name is a null-terminated
C string within the allocated buffer. Bytes after the null
terminator are unused padding and consumed but not included
in the string value.
- id: image
type: image
doc: The texture image data.
image:
doc: |
An 8-bit indexed color image with palette. Parsed by LegoImage::Read().
seq:
- id: width
type: u4
doc: Image width in pixels.
- id: height
type: u4
doc: Image height in pixels.
- id: palette_size
type: u4
doc: Number of entries in the color palette (max 256).
- id: palette
type: palette_entry
repeat: expr
repeat-expr: palette_size
doc: Color palette entries.
- id: pixels
size: width * height
doc: |
Pixel data as palette indices. Each byte is an index into
the palette array.
palette_entry:
doc: RGB color palette entry. Parsed by LegoPaletteEntry::Read().
seq:
- id: red
type: u1
doc: Red component (0-255).
- id: green
type: u1
doc: Green component (0-255).
- id: blue
type: u1
doc: Blue component (0-255).