Custom frontend for the Emscripten port of isle-portable
Go to file
Christian Semmler c85eeef56a
Some checks are pending
Build / build (push) Waiting to run
Feature/vehicle part editor (#14)
* 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

* Reserve space for reset button in vehicle editor to prevent layout shift

* Add tooltip to vehicle editor explaining click-to-cycle interaction

* 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.

* 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.

* 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.

* 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.

* Fix WDB texture parsing for parts vs models

Parts and models have different texture info formats - models include a
skipTextures field that parts don't have. Add isModel parameter to
parseTextureInfo to handle this difference correctly. Also remove silent
catch blocks and overly defensive checks.
2026-02-02 02:08:12 +01:00
.github/workflows Skip service worker in dev mode and copy isle.js/isle.wasm on build 2026-01-11 20:59:55 -07:00
public Feature/island sky color editor (#13) 2026-02-01 23:42:40 +01:00
scripts Add prepare:assets script for game asset setup (#11) 2026-01-31 20:14:44 +01:00
src Feature/vehicle part editor (#14) 2026-02-02 02:08:12 +01:00
src-sw Migrate frontend to Svelte 5 2026-01-11 19:10:16 -07:00
.gitignore Migrate frontend to Svelte 5 2026-01-11 19:10:16 -07:00
index.html Migrate frontend to Svelte 5 2026-01-11 19:10:16 -07:00
LICENSE Initial commit 2025-06-13 00:30:51 +02:00
package-lock.json Add save game editor (#12) 2026-02-01 00:28:16 +01:00
package.json Add save game editor (#12) 2026-02-01 00:28:16 +01:00
README.md Add prepare:assets script for game asset setup (#11) 2026-01-31 20:14:44 +01:00
svelte.config.js Migrate frontend to Svelte 5 2026-01-11 19:10:16 -07:00
vite.config.js Improve development mode experience 2026-01-11 21:11:32 -07:00
workbox-config.cjs Migrate frontend to Svelte 5 2026-01-11 19:10:16 -07:00

isle.pizza Frontend

A custom web frontend for the Emscripten port of isle-portable, allowing LEGO Island to run directly in modern web browsers.

image

Requirements

Quick Start

  1. Clone the repository:

    git clone https://github.com/isledecomp/isle.pizza.git
    cd isle.pizza
    
  2. Install dependencies:

    npm install
    
  3. Obtain the game files (isle.js and isle.wasm) by building the Emscripten version of isle-portable, then copy them to the project root.

  4. Set up the LEGO Island game assets:

    npm run prepare:assets
    

    This will prompt you for the path to your LEGO Island installation or mounted ISO and create the necessary symlinks. You can also provide the path directly:

    npm run prepare:assets -- -p /path/to/your/LEGO
    
  5. Start the development server:

    npm run dev
    
  6. Open the URL shown in the terminal (usually http://localhost:5173).

Scripts

Command Description
npm run prepare:assets Set up LEGO Island game assets via symlinks
npm run dev Start development server with hot reload
npm run build Build for production (outputs to dist/)
npm run preview Preview the production build locally

Project Structure

isle.pizza/
├── src/
│   ├── App.svelte         # Main application component
│   ├── app.css            # Global styles
│   ├── stores.js          # Svelte stores for state management
│   ├── core/              # Core modules (audio, OPFS, service worker, etc.)
│   └── lib/               # UI components
├── public/                # Static assets (images, fonts, PDFs)
├── scripts/               # Build scripts
├── src-sw/                # Service worker source
├── index.html             # HTML entry point
├── isle.js                # Emscripten JS (not in repo, build from isle-portable)
├── isle.wasm              # Emscripten WASM (not in repo, build from isle-portable)
└── LEGO/                  # Game data directory (not in repo)

Building the Game Files

The isle.js and isle.wasm files are not included in this repository. To obtain them:

  1. Follow the isle-portable build instructions for the Emscripten target
  2. Copy the resulting isle.js and isle.wasm to this project's root directory

Alternatively, a Docker image that bundles the runtime with this frontend is available.

Tech Stack

  • Svelte 5 - UI framework
  • Vite - Build tool and dev server
  • Workbox - Service worker and offline support

License

See LICENSE for details.