Skip to content

Creator Tools

References: the authoritative detail is in frontend.md; scripting has its own spec in scripting.md. This page is a curated handbook entry point.

Beyond just running games, RustyNES ships a suite of tools for TAS authors, ROM hackers, cheat writers, and the merely curious. They are all frontend-side and, where they read the emulator, read-only against the deterministic core (the overlay never advances emulator-visible state). Most are surfaced from the Tools and Debug menus.

Debugger

A Mesen2-style debugging overlay (toggle with `) layers chip-inspection panels over the running game: CPU (registers + disassembly), PPU, OAM, APU, Memory (+ a Memory Compare), Mapper, an execution Trace, Watches, Events, and an NSF panel. Chip panels need &mut Nes and a per-frame core poll, so they render only while the overlay is visible. See frontend.md § Chip panels vs tool panels and user-guide/debugger.md.

Cheats & Game Genie

The Cheats tool panel edits Game Genie and raw address/value codes. Codes are keyed on the ROM's identifying CRC32s (the header-excluded key and the full-file No-Intro key), so a code matches whichever dump variant the user has. A curated, header-robust Game Genie code database ships with the app (v2.1.3 "Codex").

ROM Info & ROM Database

  • ROM Database (editable) — view and correct the loaded ROM's per-game DB entry (mirroring / region / mapper / submapper / title), persisted to a user overlay. Mirroring applies live; header overrides apply on next load.
  • ROM Info (read-only, v2.2.0 "Capstone") — a purely observational companion: the loaded ROM's two identity CRC32s (game-DB key + No-Intro full-file key), its SHA-256, its effective DB entry, and its decoded cartridge header (mapper, region, PRG-ROM / CHR-ROM sizes). See frontend.md.

Movies & TAStudio

RustyNES records, plays, and branches input movies (.rnm), and imports foreign formats (.fm2 / .bk2 and legacy .fcm / .fmv / .mc2 / .vmv). The TAStudio piano-roll editor gives a frame-by-frame input timeline with seeking and branching. Determinism (same ROM + seed + input ⇒ byte-identical frames) is what makes movie replay exact — see testing-strategy.md for the determinism contract. The .rnm deserializer is hardened against malformed input (bounded allocations; fuzz-tested, see fuzz/).

Movies record two ports. FrameInput models P1 and P2, so a recording made with the Four Score adapter active captures half of what drove the run and replays as a different one. The console carries four ports and the emulator drives all four; the movie format does not. This is a documented limit rather than a defect being worked around: widening FrameInput is a .rnm format epoch change (ADR 0028), not an additive one, and the .fm2 importer takes the same position — it keeps pads 1 and 2, drops 3 and 4, and preserves the fourscore flag so the caller is not misled.

The failure is silent at record time, so it is surfaced where the claim is made: the Replay panel prints the caveat directly under the "Four Score (P1..P4)" topology row, and rustynes verify catches a divergent replay after the fact because its attestation folds in the video the run produced, not just the input.

Scripting (Lua)

An embedded Lua engine exposes an emulation API (memory peek/poke, frame hooks, input, drawing) for tool-assisted automation and overlays. See the dedicated Scripting (Lua) page.

RetroAchievements

A built-in RetroAchievements client (login, achievement list, hardcore mode). See RetroAchievements.