Commit Graph

8 Commits

Author SHA1 Message Date
Christian Semmler
f482898a72 Replace Range request asset loading with packed binary bundle
Extract save editor assets (animations, sounds, textures, bitmaps) into
a single save-editor.bin file at build time instead of fetching byte
ranges from ~550MB SI files at runtime. The bundle packs an embedded
JSON index and all fragment data into one file (~756KB), eliminating
Range request complexity and enabling proper Workbox precaching.
2026-02-13 16:30:03 -08:00
Christian Semmler
6b06c45f3a
Add click sound playback to actor editor
Plays the character's click sound (m_sound + 50) and, for Laura's
SwitchMood, an additional mood sound (m_mood + 66) from SNDANIM.SI,
matching the original game behavior. Sounds are fetched on demand,
decoded as WAV, and cached as AudioBuffers.
2026-02-13 15:42:42 -08:00
Christian Semmler
fe87b3d99f
Add click animations to actor editor
Play a one-shot gesture animation when clicking an actor, matching the
in-game LegoEntity::ClickAnimation behavior (objectId = m_move + 10).
After the click animation finishes, the walking loop resumes. Adds the
4 click animations from SNDANIM.SI to the asset manifest and extends
ActorRenderer with queue-based click animation playback. Also fixes
treadmill XZ stripping for click animations where actor_01 is nested
under wrapper nodes.
2026-02-13 14:28:35 -08:00
Christian Semmler
8734df9fee Fetch character icons from SI files via HTTP Range requests
Replace static webp character icons with runtime extraction from
INFOMAIN.SI, extending the bitmap manifest to support multiple SI files.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-08 16:40:35 -08:00
Christian Semmler
38ffd73236 Fetch assets from SI files via HTTP Range requests
Replace static animation, texture, and globe bitmap files with a
manifest-driven approach that extracts them directly from the game's
SI files at runtime using HTTP Range requests.

A new generate-manifest script scans SI files by MxCh objectId to
locate each asset's byte offset(s), verifies integrity via MD5, and
writes an asset-ranges.json manifest. The app consumes this manifest
to fetch assets on demand, including support for files split across
MxCh interleave boundaries.

Also removes unused constants (ActorLODIndex, animation keyframe
flag constants).
2026-02-08 16:09:13 -08:00
Christian Semmler
eed65faeac
Use Node.js built-in parseArgs for CLI argument parsing (#17)
Replace manual argument parsing with util.parseArgs() API.
2026-02-03 01:37:08 +01:00
Christian Semmler
8f374561e5
Add prepare:assets script for game asset setup (#11)
Some checks are pending
Build / build (push) Waiting to run
Add a Node.js script that sets up LEGO Island game assets via symlinks:
- Accepts source path interactively or via --path/-p flag
- Case-insensitive file matching for cross-platform compatibility
- Validates all required files before making changes
- Supports optional extra/ and textures/ folders
- Includes --force/-f flag to skip deletion confirmation

Updates README with new setup step and script documentation.
2026-01-31 20:14:44 +01:00
Christian Semmler
804a87e687
Migrate frontend to Svelte 5
- Replace vanilla JS with Svelte 5 components
- Add Vite build system with Terser optimization
- Reorganize assets into src/ and public/ directories
- Update README with setup instructions
2026-01-11 19:10:16 -07:00