Skip to content

astrobleem/SNES-SuperDragonsLairArcade

Super Dragon's Lair Arcade (SNES)

Super Dragon's Lair Arcade is a full-motion-video (FMV) game for the Super Nintendo Entertainment System, built on the Super Road Blaster engine by snesdev0815. It runs on real NTSC SNES hardware with MSU-1 audio/video on SD2SNES/FXPAK Pro.

This is a faithful recreation of the 1983 arcade classic — the legendary laserdisc adventure, now on your SNES, complete with authentic packaging and documentation that would feel right at home on a store shelf in 1993.

Gameplay

Watch the trailer on YouTube

Watch the trailer on YouTube

Gameplay Preview

What's in the Box

  • User Manual - Complete 4-page instruction booklet with story, controls, and survival guide
  • Sticker Sheet - Dragon's Lair themed stickers
  • Upcoming Releases Preview - Sneak peek at future titles

Note

All schwag materials are available in the schwag/ directory for your enjoyment and nostalgia.

Features

Engine (inherited from Super Road Blaster)

  • Written purely in 65816 assembly with a custom object-oriented framework
  • Dynamic allocation of work RAM, video RAM, color palettes, and DMA channels
  • MSU-1 full-motion video playback at 23.976 fps with per-chapter audio tracks
  • SPC700 audio engine with BRR sample playback
  • Script system for cooperative game flow scheduling

Dragon's Lair Arcade

  • 516 chapters across 29 scenes covering the complete Dragon's Lair arcade game
  • 3 game modes — Arcade Mode (13 randomized scenes + dragon finale), Boss Rush (5 boss encounters on loop), Oops, All Traps! (7 environmental hazard scenes on loop)
  • Randomized scene order — each playthrough shuffles scenes so no two runs are the same
  • Full menu system — Arcade Mode, Boss Rush, Oops All Traps!, Options (High Scores, Sound Test, Scene Select)
  • Scene select — jump to any of the 29 scenes directly from the title screen
  • Attract mode — automated demo playback after 60 seconds idle on the title screen
  • Credit/coin system — SELECT inserts credits during gameplay, continue screen on game over with countdown timer
  • Pause menu overlay — shows scene name, score, lives, credits, chapter, and current video frame
  • 40+ event classes for gameplay — directions, sequences, checkpoints, room transitions, cutscenes, plus scene-specific events (rolling balls, tentacle room, flying horse, giddy goons, and more)

What You Get

  • All 29 scenes fully playable across 3 game modes with randomized scene order per playthrough
  • 28/28 automated scene tests passing — every gameplay scene verified beatable with correct inputs
  • Tested and working on real NTSC SNES hardware with SD2SNES / FXPAK Pro
  • Complete boot-to-gameplay loop — Boot, MSU-1 init, losers screen, logo intro, title screen, gameplay

Building

The project builds under Linux/WSL using make and a Python 3 toolchain. The assembler (WLA-DX 9.3) comes pre-built in the repo.

# Standard build (assembles the ROM in ~2-3 minutes)
make clean && make

The MSU-1 video data pipeline is a separate step that extracts video frames from Daphne laserdisc segment files and packages them for the SNES.

For full build instructions, prerequisites, video pipeline details, and troubleshooting, see BUILD.md.

Converter GUI

A tkinter-based GUI (converter/gui.py) provides a visual interface for the entire MSU-1 video pipeline, real-time quality tuning, and an interactive event timeline editor. Double-click converter/GenerateMSUData.bat to launch — it auto-installs dependencies via uv.

Converter GUI

# Or launch manually:
python converter/gui.py

Video Pipeline:

  • Scene and chapter browser — select any of the 29 scenes, browse its chapters, and preview extracted frames
  • Side-by-side preview — source frame alongside the SNES 4BPP tile reconstruction, updated live as you adjust settings
  • Frame scrubber — drag to navigate through chapter frames, or use arrow keys for single-frame stepping
  • Quality controls — dithering method (none / Floyd-Steinberg / ordered Bayer), palette count (1-8 sub-palettes), max tile count, grayscale mode, and shared palette (per-chapter temporal stability)
  • Per-segment quality — split a chapter into segments with independent quality settings; tweak dithering for a dark scene while keeping defaults elsewhere
  • Segment save/load — export segment layouts to JSON files and reload them later
  • Animated clip preview — render and play back ~2 seconds of converted frames to see how settings look in motion
  • Full pipeline execution — run extraction, audio conversion, tile conversion, and .msu packaging with progress tracking and ETA

Event Timeline Editor:

  • Multi-track timeline — each direction event (left, right, up, down, action) is drawn on its own horizontal lane, color-coded by direction, so overlapping events are always visible and individually selectable
  • Drag to move and resize — click and drag an event bar to reposition it in time; drag the edges to adjust the start or end frame. Arrow overlay on the source preview updates in real time
  • Right-click context menu — add new events at any position, delete events, change direction, toggle correct path vs. death trap, or set the target chapter for transitions
  • Save XML — write edited events back to data/events/*.xml, preserving non-direction events (checkpoints, room transitions) verbatim. Round-trips frame positions back to absolute timestamps
  • Export Lua — generate DirkSimple game.lua format for the current chapter in a copy-to-clipboard dialog, making it easy to contribute timing fixes upstream
  • Dirty state tracking — modified indicator with save prompts on chapter switch and window close, so you never lose edits accidentally

How It Works

The game is written in 65816 assembly with an abstraction layer inspired by object-oriented programming. Almost everything — textlayers, sound, scores, sprites, keypress events — is an object that gets created, updated each frame, and destroyed when no longer needed. Resources like VRAM, palettes, and DMA channels are allocated dynamically.

The game flow is driven by scripts — cooperative routines that control what happens on screen. Each of the 29 scenes is made up of chapters (short video segments with timed events). When the player presses the right direction at the right moment, the game transitions to the next chapter. Miss, and Dirk meets a gruesome end.

Boot → MSU-1 init → losers screen → logo intro → title screen
  → level select → first chapter → [player input] → next chapter → ... → scene complete → next scene

Chapter events are generated from XML data files in data/events/ — over 516 of them, covering every move in the original arcade game.

Source Layout

  • src/ — all 65816 assembly source (core engine, objects, scripts)
  • data/events/ — 516 XML chapter definitions with timing and event data
  • data/chapters/ — generated assembly from the XML files
  • tools/ — Python utilities for video pipeline, graphics conversion, and XML parsing
  • schwag/ — print-ready packaging materials (manual, stickers, cards, etc.)

Documentation

Hardware Targets

  • NTSC Super Nintendo with SD2SNES / FXPAK Pro (MSU-1 required for video playback)
  • Also runs in Mesen 2, SNES9x, and bsnes for development and testing

Credits

  • Engine: Super Road Blaster by snesdev0815 — the 65816 OOP framework, MSU-1 video playback, SPC700 audio engine, and core infrastructure that makes this project possible
  • Game Data: Dragon's Lair chapter timing and event data derived from DirkSimple by icculus

License

This project includes no commercial Dragon's Lair assets. All extracted assets must be supplied by the user. This repository contains engine code and converter tools only.

About

SuperDragonsLairArcade is an FMV conversion of the original Dragon’s Lair arcade game for the Super Nintendo Entertainment System. Built in 65816 assembly and powered by MSU-1 streaming, this project brings arcade-quality animated gameplay to real SNES hardware and compatible flash cartridges.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages