Pipe Dream

An open Super Mario World level editor. Reads and writes real SMW ROMs, stays compatible with Lunar Magic, and runs headless for scripting and CI.

In development

What it is

Pipe Dream edits Super Mario World levels by operating on the ROM directly — the same pointer tables, level headers, object streams and Map16 pages the game itself reads. It is not an emulator front-end and not a patch format: you open a ROM, move a pipe, and the bytes that come out are the bytes SMW loads.

ROMs already touched by Lunar Magic stay readable and stay writable. Pipe Dream honours LM's RATS allocation tags, its Direct Map16 ASM, its secondary-exit and ExAnimation structures, so a hack in progress does not have to pick a side.

What it does

Level editing

Objects and sprites on a live canvas — place, drag, rubber-band select, undo. The view renders through the real object engine, so what you see is what loads.

Map16 & graphics

Map16 pages with tile properties (acts-like, palette, priority, flips), a GFX browser, palette grids, background picker.

Exits & entrances

Main entrance, secondary entrances, vanilla and LM secondary exits — listed, inspected and edited rather than hand-poked in hex.

Projects, not saves

A .pdp project keeps your work beside a clean base ROM and builds the output, so nothing you edit is trapped in a single binary.

BPS patches

Apply and write BPS, so a finished build ships as a patch the way the community expects.

Headless tools

The same executable runs the ROM tooling with no window: render, diff, self-check, project create and build. Scriptable, CI-friendly.

Install

Windows, per-user — no admin rights, nothing written outside your own profile.

git clone https://github.com/john-sparwasser/pipe-dream
cd pipe-dream
.\install\install.ps1

That publishes a self-contained build (~80 MB, it carries its own .NET runtime, so the target machine needs nothing preinstalled), copies it to %LOCALAPPDATA%\Programs\PipeDream, adds a Start Menu shortcut, and registers .pdp so double-clicking a project opens it. Re-run it any time to upgrade in place; -SkipPublish reuses the last build.

.\install\uninstall.ps1 removes all three. Your config (%APPDATA%\PipeDream) and project folders are left alone — uninstalling never costs you work.

You supply your own copy of Super Mario World. Pipe Dream ships no game data.

The command line

One executable does both halves. PipeDream.Ui.exe opens the editor; with --headless — or any command flag — it runs the ROM tools instead. --headless on its own lists them.

PipeDream.Ui.exe --headless                    # list the ROM commands
PipeDream.Ui.exe --selfcheck  rom.smc          # verify a ROM parses and round-trips
PipeDream.Ui.exe --render     rom.smc 105 out.png
PipeDream.Ui.exe --diff       a.smc b.smc      # changed runs + new RATS blocks
PipeDream.Ui.exe --newproject ...              # create a .pdp
PipeDream.Ui.exe --buildproject ...            # build the output ROM
AreaCommands
Projects--newproject --buildproject --bps
Inspection--selfcheck --diff --markers --disasm --dumpcell
Levels--render --exits --entrances --mainentrance --sprites
Graphics--gfxsheet --blobsheet --tilepng --map16def --writedm16
Animation--exanim --globalexanim

On Windows the editor is a GUI-subsystem binary, so it has no console of its own and borrows the terminal's. Launched somewhere with no terminal at all, redirect output to a file.

How it is built

C# on .NET 10, with an Avalonia UI. Three layers, and the boundaries are enforced by tests rather than by good intentions:

The ROM side is documented as a format contract — what to read to open a level, what to write to save it — with every claim marked as verified in-repo, stated in FuSoYa's Lunar Magic help, or community lore not yet byte-checked. Behaviour is traced against the actual SMW disassembly, not guessed from a wiki.

Status

Pipe Dream is under active development and not yet at a first release. The core loop — open a ROM, edit a level, save something the game runs — works; expect sharp edges, and keep backups of any ROM you point it at. Overworld, title screen and credits editing are out of scope for now.