Guide
Decomp vs recomp: how fan PC ports work
Every native PC port of a console game starts from the same problem: the game only exists as machine code for one console. Fans solve it in a few ways. Of the 326 ports on PlayPorted, 198 are recomps, 77 are decomps, 39 are rebuilt engines and 12 are source ports.
The short answer
A decomp rewrites the game's code by hand as readable source, then ports that code to PC. A recomp runs the original machine code through a tool that translates it into C or C++ automatically. Decomps take a long time, since every function is written by hand. A recomp first needs a recompiler that supports the console; after that, the translation itself is automatic.
| Decomp | Recomp | |
|---|---|---|
| How it's made | People write C that compiles to the same bytes as the original | A tool translates each machine instruction into C or C++ |
| What it takes | A long time, since the code is written by hand | A recompiler for the console, then automatic translation |
| Readable source | Yes, with names and structure | Generated code |
| Game data | Neither includes the game. Both need files from a copy you own. | |
Decompilation
Decompilers start from the game's binary and rewrite it function by function in C. In a matching decomp, a function counts as done only when it compiles to exactly the same bytes as the original. Once the whole game is rewritten, it can be compiled for modern systems, and changes can be made directly in the code.
Examples: Ship of Harkinian (The Legend of Zelda: Ocarina of Time), 2 Ship 2 Harkinian (The Legend of Zelda: Majora's Mask), OpenGOAL (Jak and Daxter: The Precursor Legacy), sm64ex (Super Mario 64).
Static recompilation
A static recompiler reads the game's machine code ahead of time and translates it into C or C++, which is then compiled for PC. The graphics and sound chips are replaced by a modern renderer and audio layer. N64Recomp for the Nintendo 64 and ReXGlue for the Xbox 360 are recompilers of this kind.
Examples: Zelda64 Recomp (The Legend of Zelda: Majora's Mask), Unleashed Recompiled (Sonic Unleashed), Banjo: Recompiled (Banjo-Kazooie), Starfox64Recomp (Star Fox 64).
Rebuilt engines and source ports
A rebuild is a new engine written from scratch that loads the original game's data, without using its code. A source port builds on code the developers released themselves, as id Software did for Doom and Quake.
Examples: OpenLara (Tomb Raider), Cannonball (OutRun), OpenRCT2 (RollerCoaster Tycoon 2), Chocolate Doom (Doom), vkQuake (Quake), OpenJK (Star Wars Jedi Knight: Jedi Academy).
Browser ports
Any of these can be compiled to WebAssembly so the game runs in a web page. You load your own game files and they stay on your computer. PlayPorted lists 24 of them on the browser ports page.
Which one should I play?
Pick by status, not method: a playable port of either kind is one you can play now. Each port's page on PlayPorted shows its status, systems and last release. The console guides and the consoles page are good places to start.