Custom frontend for the Emscripten port of isle-portable
Go to file
Christian Semmler 39598aa3b9
Vehicle textures (#21)
* Add vehicle texture editing

Parse and serialize Act1State textures in save files. Add a texture
picker modal with default presets (from .tex files) and custom uploads
persisted to IndexedDB per texture name. Quantize uploaded images
against the WDB palette and render texture changes in the 3D preview.
Support resetting textures to the WDB default.

* Fix vehicle texture not updating when switching save slots

Include slot number in the part key so that switching save slots
triggers a full part reload with the new slot's textures.

* Preload default textures for instant texture picker opening

Fetch and parse .tex files in the background when a textured part
loads, and pass the results to TexturePickerModal as a prop. The
modal no longer fetches on mount, eliminating the loading delay.

* Cleanup: parallel fetching, error recovery, dead code removal

- Fetch .tex files in parallel with Promise.all instead of sequentially
- Clear cached IndexedDB promise on rejection so subsequent calls retry
- Remove unused textureOrder array from Act1State parser
- Unify selectDefault/applyCustom into single applyTexture function
- Remove redundant squareTexture call on already-squared wdbTexture

* Add vehicle texture editor to February 2026 changelog

* Fix mouseenter error on non-Element targets
2026-02-07 23:34:57 +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 Vehicle textures (#21) 2026-02-07 23:34:57 +01:00
scripts Use Node.js built-in parseArgs for CLI argument parsing (#17) 2026-02-03 01:37:08 +01:00
src Vehicle textures (#21) 2026-02-07 23:34:57 +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 dynamic tooltip positioning using Floating UI (#18) 2026-02-03 02:00:24 +01:00
package.json Add dynamic tooltip positioning using Floating UI (#18) 2026-02-03 02:00:24 +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 Vehicle textures (#21) 2026-02-07 23:34:57 +01: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.