mirror of
https://github.com/isledecomp/isle.git
synced 2026-02-02 10:28:55 +00:00
Add Kaitai Struct definition for animation data files (.dta) (#1740)
This commit is contained in:
committed by
GitHub
parent
eaf603941e
commit
464e59df3e
@@ -20,6 +20,7 @@ Kaitai Struct allows you to define binary formats in a YAML-based `.ksy` file, w
|
|||||||
| [`history.ksy`](/docs/history.ksy) | `.gsi` | Score history and high scores |
|
| [`history.ksy`](/docs/history.ksy) | `.gsi` | Score history and high scores |
|
||||||
| [`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) |
|
||||||
|
|
||||||
## Using the Tools
|
## Using the Tools
|
||||||
|
|
||||||
@@ -46,6 +47,9 @@ ksv samples/pns065rd.ani animation.ksy
|
|||||||
|
|
||||||
# View the world database (from game installation)
|
# View the world database (from game installation)
|
||||||
ksv /path/to/lego/data/world.wdb wdb.ksy
|
ksv /path/to/lego/data/world.wdb wdb.ksy
|
||||||
|
|
||||||
|
# View an animation data file
|
||||||
|
ksv samples/BLDRINF.DTA dta.ksy
|
||||||
```
|
```
|
||||||
|
|
||||||
### Kaitai Struct Dump (ksdump)
|
### Kaitai Struct Dump (ksdump)
|
||||||
@@ -67,6 +71,9 @@ ksdump --format json samples/pns065rd.ani animation.ksy
|
|||||||
|
|
||||||
# Dump world database to YAML (from game installation)
|
# Dump world database to YAML (from game installation)
|
||||||
ksdump --format yaml /path/to/lego/data/world.wdb wdb.ksy
|
ksdump --format yaml /path/to/lego/data/world.wdb wdb.ksy
|
||||||
|
|
||||||
|
# Dump an animation data file to JSON
|
||||||
|
ksdump --format json samples/BLDRINF.DTA dta.ksy
|
||||||
```
|
```
|
||||||
|
|
||||||
## Sample Files
|
## Sample Files
|
||||||
@@ -76,5 +83,6 @@ The [`samples/`](/docs/samples/) directory contains example files for testing:
|
|||||||
- `Players.gsi` - Sample player profile data
|
- `Players.gsi` - Sample player profile data
|
||||||
- `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
|
||||||
|
|
||||||
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`.
|
||||||
|
|||||||
135
docs/dta.ksy
Normal file
135
docs/dta.ksy
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
meta:
|
||||||
|
id: dta
|
||||||
|
title: Animation Data File
|
||||||
|
application: LEGO Island
|
||||||
|
file-extension: dta
|
||||||
|
license: CC0-1.0
|
||||||
|
endian: le
|
||||||
|
|
||||||
|
doc: |
|
||||||
|
Animation data file format for LEGO Island (1997). Contains animation
|
||||||
|
information for world objects including their positions, orientations,
|
||||||
|
and associated models.
|
||||||
|
|
||||||
|
DTA files are located at `<install_path>/lego/data/<world>inf.dta` where
|
||||||
|
<world> is the world name (e.g., "isle", "act1", "act2m", etc.). They are
|
||||||
|
loaded by LegoAnimationManager::LoadWorldInfo() to populate animation
|
||||||
|
information for the current world.
|
||||||
|
|
||||||
|
File structure:
|
||||||
|
1. Header - version (must be 3) and animation count
|
||||||
|
2. AnimInfo entries - animation references with nested model placement data
|
||||||
|
|
||||||
|
seq:
|
||||||
|
- id: version
|
||||||
|
type: u4
|
||||||
|
doc: |
|
||||||
|
File format version. Must be 3 for valid files.
|
||||||
|
The game rejects files with mismatched versions.
|
||||||
|
- id: num_anims
|
||||||
|
type: u2
|
||||||
|
doc: Number of animation info entries in this file.
|
||||||
|
- id: anims
|
||||||
|
type: anim_info
|
||||||
|
repeat: expr
|
||||||
|
repeat-expr: num_anims
|
||||||
|
doc: Animation information entries.
|
||||||
|
|
||||||
|
types:
|
||||||
|
anim_info:
|
||||||
|
doc: |
|
||||||
|
Animation information for a single animation (AnimInfo struct).
|
||||||
|
Contains metadata about the animation and a list of models involved.
|
||||||
|
Parsed by LegoAnimationManager::ReadAnimInfo().
|
||||||
|
seq:
|
||||||
|
- id: name_length
|
||||||
|
type: u1
|
||||||
|
doc: Length of the animation name in bytes.
|
||||||
|
- id: name
|
||||||
|
type: str
|
||||||
|
size: name_length
|
||||||
|
encoding: ASCII
|
||||||
|
doc: |
|
||||||
|
Animation name identifier. The last two characters are used
|
||||||
|
to look up a character index via GetCharacterIndex().
|
||||||
|
- id: object_id
|
||||||
|
type: u4
|
||||||
|
doc: Object ID used to identify this animation in the game.
|
||||||
|
- id: location
|
||||||
|
type: s2
|
||||||
|
doc: |
|
||||||
|
Location index referencing a LegoLocation. A value of -1
|
||||||
|
indicates no specific location is assigned.
|
||||||
|
- id: unk_0x0a
|
||||||
|
type: u1
|
||||||
|
doc: Boolean flag (MxBool). Purpose unknown.
|
||||||
|
- id: unk_0x0b
|
||||||
|
type: u1
|
||||||
|
doc: Unknown byte field.
|
||||||
|
- id: unk_0x0c
|
||||||
|
type: u1
|
||||||
|
doc: Unknown byte field.
|
||||||
|
- id: unk_0x0d
|
||||||
|
type: u1
|
||||||
|
doc: Unknown byte field.
|
||||||
|
- id: unk_0x10
|
||||||
|
type: f4
|
||||||
|
repeat: expr
|
||||||
|
repeat-expr: 4
|
||||||
|
doc: Array of 4 unknown float values (16 bytes total).
|
||||||
|
- id: model_count
|
||||||
|
type: u1
|
||||||
|
doc: Number of model entries that follow.
|
||||||
|
- id: models
|
||||||
|
type: model_info
|
||||||
|
repeat: expr
|
||||||
|
repeat-expr: model_count
|
||||||
|
doc: Model information for each model in this animation.
|
||||||
|
|
||||||
|
model_info:
|
||||||
|
doc: |
|
||||||
|
Model information defining position and orientation for a single
|
||||||
|
model within an animation (ModelInfo struct). Used to place characters
|
||||||
|
and objects in the world during animation playback.
|
||||||
|
Parsed by LegoAnimationManager::ReadModelInfo().
|
||||||
|
seq:
|
||||||
|
- id: name_length
|
||||||
|
type: u1
|
||||||
|
doc: Length of the model name in bytes.
|
||||||
|
- id: name
|
||||||
|
type: str
|
||||||
|
size: name_length
|
||||||
|
encoding: ASCII
|
||||||
|
doc: |
|
||||||
|
Model name used to look up the character or vehicle.
|
||||||
|
Examples: "caprc01" (race car), "irt001d1" (character).
|
||||||
|
- id: unk_0x04
|
||||||
|
type: u1
|
||||||
|
doc: Unknown byte field.
|
||||||
|
- id: position
|
||||||
|
type: vertex3
|
||||||
|
doc: World position (X, Y, Z) of the model.
|
||||||
|
- id: direction
|
||||||
|
type: vertex3
|
||||||
|
doc: Forward direction vector of the model.
|
||||||
|
- id: up
|
||||||
|
type: vertex3
|
||||||
|
doc: Up direction vector of the model.
|
||||||
|
- id: unk_0x2c
|
||||||
|
type: u1
|
||||||
|
doc: |
|
||||||
|
Boolean flag. When non-zero, this model is considered a vehicle
|
||||||
|
and tracked in the animation's vehicle list (m_unk0x2a).
|
||||||
|
|
||||||
|
vertex3:
|
||||||
|
doc: A 3D point or vector with X, Y, Z components.
|
||||||
|
seq:
|
||||||
|
- id: x
|
||||||
|
type: f4
|
||||||
|
doc: X component.
|
||||||
|
- id: y
|
||||||
|
type: f4
|
||||||
|
doc: Y component.
|
||||||
|
- id: z
|
||||||
|
type: f4
|
||||||
|
doc: Z component.
|
||||||
BIN
docs/samples/BLDRINF.DTA
Executable file
BIN
docs/samples/BLDRINF.DTA
Executable file
Binary file not shown.
Reference in New Issue
Block a user