mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-05-02 02:23:56 +00:00
* Implement display actor override for multiplayer extension Add displayActorIndex to the multiplayer protocol, allowing players to choose any of the 66 character models from g_actorInfoInit via the multiplayer:actor INI setting. The visual display is decoupled from the gameplay actor ID while maintaining backward compatibility. - Protocol: Add displayActorIndex field to PlayerStateMsg and validation helpers - RemotePlayer: Use display actor name for cloning instead of actorId - NetworkManager: Broadcast/handle displayActorIndex, respawn on display change - ThirdPersonCamera: Create/manage display clone ROI for local player override - INI: Read multiplayer:actor setting and resolve to g_actorInfoInit index * Use array syntax for INI option access in display actor setup Consistent with how relayUrl and room are read from options. * Fix display actor ROI handling in 3rd person camera - Fix direction flip targeting display clone instead of native ROI in Disable(), ReinitForCharacter(), and OnCamAnimEnd(). The native ROI is the source of truth for TransformPointOfView and Tick() sync. - Fix use-after-free: DestroyDisplayClone() now nulls m_playerROI when it points to the destroyed clone, preventing dangling pointer access in BuildRideAnimation after a 3rd→1st→3rd person toggle on a vehicle. - Recreate display clone in ReinitForCharacter() vehicle branch. - Extract EnsureDisplayROI() helper to deduplicate clone setup pattern. - Move IsValidDisplayActorIndex() to charactercloner.h, replacing magic number 66 with sizeOfArray(g_actorInfoInit). * Remove display actors plan document |
||
|---|---|---|
| .. | ||
| samples | ||
| history.ksy | ||
| multiplayer-mvp-assessment.md | ||
| multiplayer-rooms-and-animations.md | ||
| multiplayer-world-state-assessment.md | ||
| players.ksy | ||
| README.md | ||
| savegame.ksy | ||
LEGO Island File Format Documentation
This folder contains documentation for LEGO Island's custom binary file formats using Kaitai Struct, a declarative language for describing binary data structures.
What is Kaitai Struct?
Kaitai Struct allows you to define binary formats in a YAML-based .ksy file, which can then be:
- Compiled into parser libraries for many programming languages (C++, Python, JavaScript, etc.)
- Visualized interactively using the Kaitai Struct Visualizer
- Dumped to human-readable formats using
ksdump
Documented Formats
| File | Extension | Description |
|---|---|---|
savegame.ksy |
.GS |
Main game save data (game state, progress, customizations) |
players.ksy |
.gsi |
Player profile save data (usernames) |
history.ksy |
.gsi |
Score history and high scores |
Using the Tools
Installation
See the Kaitai Struct Visualizer installation instructions for setup details.
Kaitai Struct Visualizer (ksv)
The Kaitai Struct Visualizer (ksv) provides an interactive terminal UI for exploring binary files.
# View a save game file
ksv samples/G0.GS savegame.ksy
# View a Players.gsi file
ksv samples/Players.gsi players.ksy
# View a History.gsi file
ksv samples/History.gsi history.ksy
Kaitai Struct Dump (ksdump)
ksdump outputs the parsed structure as JSON or YAML for scripting and inspection.
# Dump a save game to JSON
ksdump --format json samples/G0.GS savegame.ksy
# Dump Players.gsi to JSON
ksdump --format json samples/Players.gsi players.ksy
# Dump History.gsi to YAML
ksdump --format yaml samples/History.gsi history.ksy
Sample Files
The samples/ directory contains example save files for testing:
G0.GS,G1.GS,G2.GS- Sample main game save files (slots 0, 1, 2)Players.gsi- Sample player profile dataHistory.gsi- Sample score history data