Skip to content

Repository files navigation

plumber

A Nintendo 64 emulator that runs inside Roblox. It interprets the original ROM on an R4300 CPU emulator, rasterizes the N64 graphics pipeline in software, and presents every frame through a Roblox EditableImage.

Demo

What works

  • R4300 interpreter that boots the Super Mario 64 (EU) ROM into gameplay
  • Fast3D and Goddard microcode rasterizers with texture mapping and a depth buffer
  • Software framebuffer at 320×240 with a 160×120 fast path, drawn through EditableImage:WritePixelsBuffer()
  • Audio HLE synthesized through a 16-voice sine oscillator bank
  • Keyboard and gamepad input mapped to the N64 controller
  • Deterministic session trace recording and replay
  • Structured runtime profiling records written to the Roblox Studio log

Requirements

  • Node.js 24
  • rokit — pins Rojo 7.7.0
  • Roblox Studio with the Rojo plugin
  • A legally obtained Super Mario 64 (EU) ROM

Quick start

npm ci
npm run embed:local-rom -- --rom /path/to/your/baserom.eu.z64
npm run build
rokit install
npm run build:place
npm run serve

Open build.rbxlx in Roblox Studio with the Rojo plugin connected, then press play. The ROM must match SHA-1 4ac5721683d0e0b6bbb561b58a71740845dceea9. Embedding writes generated chunks to local-rom/, which is gitignored — no copyrighted data lives in this repository.

Controls

N64 Keyboard Gamepad
Analog stick Arrow keys / WASD Left stick
A Z A
B X B
Z C L2
Start Enter Start
L Q L1
R E R1
C buttons I / J / K / L Right stick

How it works

The interpreter executes the ROM, display lists are rasterized in software into a framebuffer, and the client uploads that framebuffer into an EditableImage each frame. Guest audio commands are synthesized on a sine oscillator bank, and a separate trace system records and replays deterministic sessions. More detail:

Status

Functional in Roblox Studio: the EU ROM boots to gameplay, renders through EditableImage, accepts input, and produces audio. Ongoing work focuses on performance and differential testing between the Roblox and native renderers.

License

MIT

About

A Nintendo 64 emulator that runs inside Roblox — R4300 interpreter, software Fast3D rasterizer, and an EditableImage framebuffer.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages