JN Engine · Contribute

Start here

A clean-room reimplementation of the engine behind Jimmy Neutron: Boy Genius, rebuilt against a Direct3D 7 command stream captured off period hardware. There is real, scoped work available at every level — including work that needs no code and no setup at all.

🎮 Play and report bugs

Spot something wrong in the browser demo, click it, describe it. The game records which asset it is and where.

nothing to install · 5 minutes

🛠 Build and fix

Clone, build, pick a task off the open list. Each one names the files and how to verify it.

git · python3 · a C compiler

🤖 Point an agent at it

A bounded, commit-pinned MCP surface for Claude or ChatGPT. Claim a task, read source, open a PR.

a Claude or ChatGPT account

The one rule worth reading first

Every claim carries its evidence. “We don’t know” is a valid, respected answer — there is a queue for it. A wrong confident answer costs this project far more than an honest blank, and we have the scars to prove it: see the audit report.

01 No setup required

Report visual bugs from inside the game

Both playable demos have a built-in reporting mode. Spot a misplaced, misoriented, glitched or broken-looking model? Click it in-game and file a report — the game records exactly which asset it is, where it sits in the level, and where you were standing. No guessing about which “weird brown thing” you meant.

🎮 Boy Genius 🚀 vs. Jimmy Negatron
  1. Play normally until you see something wrong (WASD to walk, N for noclip flying if you want a closer look).
  2. Press B (think “bug”) or tap the QA: Off button in the top bar — it flips to QA: On. Your mouse now inspects instead of steering the camera.
  3. Hover over any model: it lights up yellow and a label shows its name (e.g. labshak · placement or 3JIM [JIM1] · entity).
  4. Click the broken model. It turns orange and a report dialog opens.
  5. Pick a category:
    CodeMeaning
    PLCwrong position
    ORIwrong orientation / rotation
    SCLwrong size
    ANIanimation wrong or missing
    TEXtexture wrong or missing
    MISmodel missing entirely
    GFXother visual glitch
    OTHanything else
  6. Describe it in a sentence — “rotated 90° vs original”, “floats above the ground”, “texture is the fence instead of bark” — and hit OK. (Cancel or Esc discards.)
  7. A tag appears top-right. Reports stack up as you play and survive switching levels. Hover a tag’s ✕ to re-read its note, click to delete. Press B again to return to normal play.
  8. When you’re done, hit export at the top of the tag stack — it copies the full report (a readable table plus machine-readable data) to your clipboard.

📤 Send it in

Paste the exported clipboard contents into a Discord DM to scotty, or the engine-troubleshooting channel. The paste contains everything needed to find and fix each issue — asset names, coordinates, camera position, your notes — so it goes straight into the fix queue.

This is genuinely the highest-value thing a newcomer can do. Two of the project’s worst rendering bugs — a rotation sign error and a back-face culling default — were caught by someone playing and noticing that a sign read backwards.

Want to see where your report ends up? The QA ticket resolution log shows how community tickets get diagnosed and fixed — before/after shots and the evidence trail for each root cause.

02 Code

Get a checkout that builds

⬇ Contributor bundle

138 KB · onboarding, the open-task list, the audit findings, and the runnable tooling.
sha256 e058e04b5e3a2f402babe18d34d37526c30b58e5652442f7b39b1cfbc7ed2b32

Unzip it and run:

bash update.sh --clone jn-engine
cd jn-engine
./scripts/bootstrap.sh   # SDL2, GL, zlib, xvfb
make && make check

Or skip the bundle entirely and clone straight from GitHub — the bundle is just a convenient offline copy of the docs plus a bootstrap script.

Re-run ./scripts/update.sh from inside the checkout any time. It pulls, then re-verifies everything downstream: assets present, your game-file copies still matching their checksums, and the spec gate. It refuses to touch a dirty tree, and on a feature branch it tells you what’s upstream rather than merging behind your back.

What you get, and what you supply

The repository already contains the level data and every derived catalog — 8,116 asset files. You do not need the game to build, run, or work on most tasks.

The three files we can’t give you

Neutron.exe, NeutronSW.exe and OMT2.dll are THQ / Nickelodeon property. We don’t ship, mirror or pass them around — please don’t either. They’re needed only for binary-backed tooling: PE headers, disassembling a registrar, confirming a vtable address.

If you own a copy, the extractor pulls them from your own disc and checksum-verifies them:

python3 tools/extract_game_exes.py --source <install dir | disc | .iso>

It takes an installed game directory (no dependencies), a mounted disc, or a .iso — it walks ISO 9660 itself to pull the installer archive out without mounting anything. On Windows, drag a folder or .iso onto tools\extract-game-files.cmd. Full detail in docs/GAME_FILES.md.

Working on asset formats?

Two things worth knowing about before you start. The parsers in tools/contrib_awefan/ are the authoritative reading of the OMT formats — improve them upstream rather than reimplementing. And there’s a headless extraction library and CLI for the game’s asset formats at the OMT asset toolkit (access-gated to current collaborators — ask in the Discord).

Pick something

docs/audit/TASKS.md in your checkout, or read it in the bundle. Every task names the files, how to verify, and what “done” means. A few to start with:

TaskWhatNeeds
A-01Remove a retracted statistic that’s still live in two entry-point docsnothing
A-02Qualify an invariant that only holds on one parsing pathnothing
B-01Fix the FourCC resolver — closes 17 spec defects at the sourcepython
B-02Re-run validation on 29 specs that skipped a cross-check that was availablepython
B-03Confirm 7 remaining FourCCs against the binaryyour own disc

How work gets accepted

Four gates, and they’re the part of this project that demonstrably works. Nothing here is bureaucracy — each one exists because something got through without it.

Two rules paid for in blood

Decompiler output is a hypothesis; the raw disassembly is the evidence. A committed evidence document once assigned the wrong expressions to three outputs and silently dropped a term, because the decompiler missed a stack argument. Anyone implementing from it in good faith would have shipped a subtly wrong transform.

A number in prose must match what the code prints. A fabricated 94% statistic reached both entry-point documents and is still live on master. If you quote a figure, quote the command that produced it.

03 Agents

Point Claude or ChatGPT at the repository

A bounded MCP surface exposing a reviewed, commit-pinned snapshot — search and fetch source, look up recovered symbols, claim a task, open a pull request. No shell, no git, no host access.

Nine tools: search, fetch, list_tasks, project_context, claim_task, release_task, lookup_symbol, check_status, open_pr. Search IDs include the active commit and expire on snapshot refresh, so a client can’t silently mix content from two revisions.

Setup, the tool surface, the write guards, and what the service records: the MCP guide →

If you use an agent, you still own the output

Agent-written work goes through exactly the same gates, and “the model said so” is not evidence. Tag claims the same way you would by hand, and if the agent can’t cite a file and line for something, treat that as a finding rather than a fact.

04 Landing it

Submitting your work

  1. Branch from master. Run make check before you push — that’s the same gate CI runs.
  2. Open a PR against alexscott2718-gif/jn-engine. Say which task you’re closing, and how you verified it.
  3. If you changed a spec, delete its entry from docs/audit/spec_check_baseline.json in the same PR.
  4. If something turned out to be unresolvable, say so and add it to the ground-truth queue. That’s a complete contribution, not a failed one.

Questions, claims on tasks, and bug-report pastes all go to the Discord. If you’re not in it, ask scotty.

05 Credit

Who built what

awefan4524 is the project’s main contributor and triager, and maintains the Hot Wheels: Mechanix and Operation Krabby Patty efforts. The 3DSP parsers covering v0–v5 with endianness auto-detect and extra-pass-set support, the bidirectional Canvas RLE, and the independent decoder that settled the 32-bit canvas byte order and the 8-bit palette layout are theirs — that last one caught this project having both wrong. Those parsers are vendored here with credit, and improvements that generalise should go upstream to their repos, not just here.

Everyone who has ever pasted a bug report from the QA mode is in the fix queue’s history. The rotation-sign bug and the culling default both came from someone noticing a sign read backwards.