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
| Area | Commands |
|---|---|
| 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:
- Storage — ROM bytes,
.pdpfiles, the patch builder. No UI packages; runs headlessly for CI and scripting. - Services — the only layer above storage that reaches its internals.
- UI — deliberately cannot touch the project file or config directly. Everything goes through the services.
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.