Murray the Munchkin NES
A native NES reimagining of a small graphical adventure originally written in
QBasic in the early 1990s. The game is being developed from scratch in 6502
assembly as a compact, nonviolent adventure through Munchkinville, the Rusty
Keg, and the nearby lake.
This repository currently contains a playable two-room prototype with custom
sprite artwork and an original FamiStudio arrangement of the theme imagined
for the QBasic game.
Requirements
ca65 and ld65, supplied by cc65
- GNU Make
- An NES emulator
On macOS, install the toolchain with:
brew install cc65
Build
Build and validate the ROM with:
make smoke
The resulting ROM is written to build/murray-the-munchkin.nes. To rebuild
from scratch:
make clean
make smoke
The project targets NROM-128 (mapper 0), with 16 KiB of PRG-ROM and 8 KiB of
CHR-ROM.
Controls
- Start: begin the game, pause, or resume
- D-pad: move Murray smoothly in four directions
- A: close dialogue
Bump into a resident to speak with them. Walk through the eastern opening in
Munchkinville to reach East Road and the lakeside, then use its western opening
to return.
Current features
- Title screen and continuous overworld music
- Two data-driven rooms built from 16-by-16 metatiles
- Smooth movement with front-, back-, left-, and right-facing walk cycles
- Palette-swapped residents with a separate idle animation
- Feet-based collision for bushes, trunks, buildings, and water, allowing
Murray’s upper body to overlap obstacle edges for top-down depth
- Sparse two-variant grass texture inspired by early console RPG fields
- Opaque golden-tan paths with restrained alternating brown speckles
- Foreground canopy overlays that place Murray behind leaves without making
textured grass or adjacent bushes clip through him
- Solid rippling lake water, wooden dock planks, and a jagged shoreline
- Bump-to-talk dialogue
- A short pulse-channel boop when dialogue begins
- Pause and resume, including synchronized music pause
- Stable FamiStudio playback during full room redraws
Project layout
src/murray.s: game state, rooms, collision, dialogue, sprites, and CHR data
src/murray_audio.s: minimal FamiStudio engine configuration
music/Murray the Munchkin Theme v1.fms: editable FamiStudio project
music/murray-the-munchkin-theme.s: CA65 music export used by the build
music/murray-sfx.s: compact FamiStudio data for in-game sound effects
music/reference/: optional local FamiStudio preview ROMs, ignored by Git
assets/sprites/: editable 16-by-16 player and NPC reference artwork;
directional GIF variants are kept locally once their pixels are encoded
into the assembly CHR data
assets/reference/: optional local book-cover and historical sprite
references, ignored by Git because they are not required as build assets
vendor/FamiStudio450-SoundEngine/: minimal vendored FamiStudio 4.5 CA65
engine and NTSC note tables
nes.cfg: cc65 linker layout
Makefile: build, smoke-test, and clean targets
Editing artwork and music
Character artwork is edited in Aseprite as 16-by-16 images with transparency
and no antialiasing. The NES game currently encodes the exported pixel patterns
directly in src/murray.s.
Music is edited in the .fms project and exported from FamiStudio as CA65
assembly, replacing music/murray-the-munchkin-theme.s. The current export
requires FAMISTUDIO_USE_DUTYCYCLE_EFFECT, which is enabled in
src/murray_audio.s. If later exports report additional required flags, the
audio configuration must be updated to match.
Near-term roadmap
- Polish room layouts and character interactions
- The Rusty Keg tavern interior and its own music
- Lake and dock expansion with a giant octopus encounter
- Additional transition, pause, and discovery sound effects
- A small quest-state system and a complete ending
The deliberately limited scope is intended to produce a finished, shareable
adventure before expanding the world or adding editor tooling.
Third-party code
The FamiStudio sound engine is vendored under
vendor/FamiStudio450-SoundEngine/. Its upstream copyright and distribution
terms are preserved in the engine source.
评论