Skip to content

dreamsailing59-ops/SuperRecomp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

image

SuperRecomp

A tool to statically recompile SNES games into native executables. It works by reading the raw bytes of a ROM and then generate C++ code of the game. The project is in a very early stage. So while C++ code generation is okay as of now. It still needs a few more polishing to be compiled without any errors.

Demonstration of the tool itself using a clean dump of Super Mario World without a 512-byte header.

2026-03-29.19-54-43.mp4

WAIT! But is this really necessary?

SNES emulation is already accurate enough that technically a Static Recompiler isn't really "needed". The reason most game consoles like the N64 have a Static Recompiler is because N64 emulation is still a mess in 2026. And most recompiled N64 games offer enhancements like Mods, Ray Tracing and 120 FPS support. However. There are some benefits of a Statically Recompiled SNES game.

1 - Native performance

Static recompilation converts SNES machine code into native C or machine code ahead of time. For most game consoles like the N64 or PS2. This can matter alot. But for the SNES. it’s like putting a jet engine on a bicycle. So it's kind of pointless here.

2 - Portability (the actually interesting part)

Recompiled games can run as standalone apps (no emulator needed) and be ported to weird platforms (mobile, web, consoles). Basically: turning ROMs into programs, not just data for an emulator

3 - Modding & reverse engineering

A static recompiler allows you to modify a game in C++ instead of Assembly. Which makes the process of making mods for the game much easier. The bad news is a Static Recompiler does not generate readable human code. You have function names like sub_0xXXXX address names like addr_0xXXXX. The good news is that we are been planning to release a Table that documents these recompiled functions and lists a possible function name for the specific function in each game. Like UpdateMarioPhysics() or HandleMarioPhysics().

DISCLAIMER!

The only game that currently works with this tool is Super Mario World. If you try to use the tool with a different game like Donkey Kong Country. You will get empty generated CPP code. The tool itself has only been tested with a clean dump of Super Mario World that does not include a 512-Byte header. So the generated CPP code might be different if you do have a dump of Super Mario World that includes a 512-Byte header (Usually present in .smc files).

Instructions

First. Download MSYS2 and CMake. Ninja is also heavily recommended.

Open the UCRT64 terminal and enter

git clone https://github.com/ExpansionPak/SuperRecomp.git

Now. Inside your cloned repo. Enter

mkdir build && cd build
cmake ..
cmake --build . --target RecompTool

Or. If you have Ninja. Enter ninja RecompTool instead pf cmake --build . --target RecompTool

Usage

./RecompTool <path/to/rom>

A TOOL MADE BY:

image

About

Tool to statically recompile SNES games into native executables.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages