Enable the previously hidden Voices tab showing reactions from the
original LEGO Island development team. Each quote card displays the
team member's professional role and tagline. Improved card styling
with gradient backgrounds, decorative quote marks, and gold hover
accents. Added March 2026 changelog entry.
* Plant editor
Add Plants tab to the save editor for browsing and editing all 81 plants.
Click-to-customize based on selected character matches the original game
behavior (Pepper→variant, Mama→sound, Papa→move, Nick→color, Laura→mood).
Includes 3D preview with per-variant display tuning, click animations,
sound playback, and reset to defaults.
* Refactor shared animation code into AnimatedRenderer base class
Extract duplicated animation infrastructure (clock, mixer, animation
caching, raycaster, keyframe interpolation) from ActorRenderer and
PlantRenderer into a new AnimatedRenderer intermediate class. Extract
identical sound player code from both editors into createSoundPlayer()
utility. Fix PlantRenderer interpolateVertex bug where scale keys had
X incorrectly negated. Remove dead PLANT_ANIM_IDS export and redundant
textures.clear() calls.
* Extract shared editor CSS and fix vehicle nav spacing
Move duplicated preview, spinner, navigation, and side-button styles
from VehicleEditor, ActorEditor, and PlantEditor into a shared
editor-common.css. Standardize class names (nav-index, nav-name,
side-btn) and fix VehicleEditor part-info min-width (100px → 150px)
to match the other editors.
* Add carousel tabs and selection-based nav to save editor
Wrap save editor tab buttons in a Carousel to prevent overflow on
desktop. Carousel nav buttons now cycle through the selected item
(save slot or tab) instead of scrolling, with auto-scroll-into-view.
On mobile, tabs reflow with flex-wrap as before.
* Update February changelog with plant editor and carousel navigation
- Temporarily expand tooltip for accurate size measurement before positioning
- Use @media (hover: hover) to prevent CSS :hover triggering on touch tap
- Await position calculation before showing tooltip
- Use @floating-ui/dom for intelligent tooltip placement
- Tooltips now shift/flip to stay within viewport bounds
- Collapse hidden tooltips to prevent horizontal scroll overflow
- Move tooltip setup to App.svelte for global coverage
* WIP
* stuff
* WIP: Interactive 3D score cube for save editor
* Conditionally render ScoreCube to properly clean up WebGL canvas
Only mount the ScoreCube component when on the save-editor page.
This ensures onDestroy is called when navigating away, properly
disposing of the WebGL renderer and removing the canvas from DOM.
* Refactor: Consolidate formats and genericize WDB rendering
- Move parsing/serialization code to src/core/formats/:
- BinaryReader.js, BinaryWriter.js (shared utilities)
- SaveGameParser.js, SaveGameSerializer.js
- PlayersParser.js, PlayersSerializer.js
- Create formats/index.js as barrel export
- Extract generic WdbModelRenderer from ScoreCubeRenderer:
- WdbModelRenderer handles D3DRM geometry and paletted textures
- ScoreCubeRenderer extends it with score-specific logic
- Prepares for rendering other WDB models in the future
- Keep savegame/constants.js for domain-specific constants
- savegame/index.js remains as high-level API facade
* Save editor UI improvements
- Make save slot cards fixed width (85px) to prevent resizing with name length
- Make save slot cards more compact (smaller icons, padding, font)
- Remove Act selection from Character section
- Remove box-shadow from selected character to fix collapsed section bleed
* Improve score cube lighting to match in-game appearance
- Use flat, even lighting (high ambient + soft front light)
- Remove harsh directional shadows from edges
- Adjust camera position slightly for better framing
* Add spacing below score cube canvas
* Add spinning loader while loading score cube
* Update three.js to 0.182.0 and fix npm audit issues
- Update three.js from 0.170.0 to 0.182.0
- Fix npm audit vulnerabilities (devalue, lodash, svelte)
- Remaining vulns are in dev dependencies (vite, workbox-cli)
* Fix score cube overflow on mobile
Add max-width constraints to prevent the score cube from expanding
its container on narrow viewports while preserving its natural
200x200 size on desktop.
* Add save slot carousel and improve empty states
- Add reusable Carousel component with arrow navigation, drag-to-scroll,
and click-to-scroll-into-view functionality
- Replace static save slot list with horizontal carousel
- Add empty state with image when no save files exist
- Add prompt state when saves exist but none is selected
- Reset selected slot when entering Save Editor page
* Add February 2026 changelog entry for Save Editor
* Add missing January 2026 changelog entries for Safari and mobile fixes
* Remove unused mission images
* Refactor opfs.js to reduce code duplication
- Consolidate getFileHandle to use getOpfsRoot internally
- Add writeTextFile helper that uses writeBinaryFile
- Extract showToast helper for toast notifications
- Simplify saveConfig to use writeTextFile instead of duplicate worker
- Simplify fileExists and readBinaryFile to use getFileHandle
* Remove unused ScoreColorButton component
* Remove unused UI components
- Allow tooltips to overflow container when section is open
- Expand touch target for tooltip triggers on mobile devices
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Show "DEVELOPMENT MODE" in footer instead of timestamp
- Disable offline install/uninstall when service worker unavailable
- Set __BUILD_TIME__ to null in dev mode for conditional rendering
- 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