Commit Graph

21 Commits

Author SHA1 Message Date
Christian Semmler
9c46c8cc6c
Use MeshLambertMaterial for original game-like rendering
Switch from MeshStandardMaterial (PBR) to MeshLambertMaterial for flat,
vibrant colors matching the original game. Simplify lighting setup for
solid colors without visible shadows.
2026-02-01 16:00:14 -08:00
Christian Semmler
94f857a695
Add transparency support to vehicle part rendering
Apply mesh alpha values from WDB to Three.js materials. In the original
game, alpha=0 means opaque while alpha>0 enables transparency. Disable
depthWrite for transparent meshes to prevent z-fighting.
2026-02-01 15:53:47 -08:00
Christian Semmler
a86013e552
Extract EditorTooltip component for consistent tooltip positioning
Refactored tooltip markup into reusable EditorTooltip component used by
both ScoreCube and VehicleEditor. Tooltip now consistently appears in
top right corner of the editor section.
2026-02-01 15:48:27 -08:00
Christian Semmler
50a25a802c
Add scroll-into-view behavior for name slots on mobile
When name slots overflow on narrow screens, focusing a partially visible
slot now smoothly scrolls it into view. Scrollbar is hidden for cleaner UI.
2026-02-01 15:38:16 -08:00
Christian Semmler
4101ecfa07
Add tooltip to vehicle editor explaining click-to-cycle interaction 2026-02-01 15:31:01 -08:00
Christian Semmler
7789ed593b
Reserve space for reset button in vehicle editor to prevent layout shift 2026-02-01 15:28:54 -08:00
Christian Semmler
c0da123d56
Add vehicle part color editor to save editor
- Add Vehicles tab with 3D preview of customizable vehicle parts
- Support all 43 colorable parts across 4 vehicles (dune buggy, helicopter, jetski, race car)
- Implement shared LOD resolution for proper rendering of all parts
- Extract reusable NavButton and ResetButton components
- Remove debug console.log statements from ScoreCube
2026-02-01 15:22:29 -08:00
Christian Semmler
36a6e0fde9
Feature/island sky color editor (#13)
* Add Island tab with sky color editor

- Add parseVariables() to SaveGameParser to extract variable names, values, and offsets
- Add updateVariable() to SaveGameSerializer for modifying variable values
- Add colorUtils.js with LEGO Island's custom HSV-to-RGB algorithm
- Add SkyColorEditor component with H/S/V sliders and color preview
- Add Island tab to SaveEditorPage with Sky Color section
- Include reset to default button when values differ from default (56/54/68)

* Remove tooltip

* Add light position editor to Island tab

Allows users to select one of 6 sun positions using visual globe
image selectors. Includes converted globe images (BMP to WebP).
2026-02-01 23:42:40 +01:00
Christian Semmler
64be72194e
Add save game editor (#12)
Some checks are pending
Build / build (push) Waiting to run
* 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
2026-02-01 00:28:16 +01:00
Christian Semmler
15169c3ec5
Fix transition animation in config section
Some checks are pending
Build / build (push) Waiting to run
2026-01-30 16:32:51 -08:00
Christian Semmler
ff379338f9
Fix issue on Safari: audio not playing on first toggle 2026-01-30 15:01:30 -08:00
Christian Semmler
b5389b2685
Fix tooltip CSS issues on Config page
Some checks failed
Build / build (push) Has been cancelled
- 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>
2026-01-25 16:31:45 -08:00
Christian Semmler
1703e0ec73
Improve development mode experience
- 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
2026-01-11 21:11:32 -07:00
Christian Semmler
adfea5e91b
Skip service worker in dev mode and copy isle.js/isle.wasm on build
- Skip service worker registration when running in dev mode to avoid 404 errors
- Add isle.js and isle.wasm copy step to production build
- Add build:ci script for CI builds without required wasm files
2026-01-11 20:59:55 -07:00
Christian Semmler
894546a468
Test CI 2026-01-11 19:51:08 -07:00
Christian Semmler
abe2b70871
Test CI 2026-01-11 19:50:20 -07:00
Christian Semmler
bb1deef26a Add complete animation list and fix select styling in debug panel 2026-01-11 19:28:45 -07:00
Christian Semmler
92d90de61b
Rename serviceWorker.js to service-worker.js 2026-01-11 19:15:18 -07: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
Christian Semmler
65fb5a46cb
Add Widescreen Backgrounds extension 2025-08-10 19:37:40 -07:00
Christian Semmler
300af0a71f
Add HD Texture download progress 2025-07-25 16:02:54 -07:00