The whole project in five pictures. No programming background needed.
Write the game's source code again, so exactly that it compiles back into the very same bytes.
The game came out as a finished program: about 74,500 functions of machine code, with no source code released. We write each function again in C++ and build it with the same compiler the developers used, Microsoft Visual C++ 2008. It only counts if every byte comes out identical. Almost right counts as zero, which is why every function on this site is proven, not guessed.
Every function goes through the same loop: write, build, compare, try again.
Here is what those tries look like for the little function above.
The AI used a field name our project does not know yet, so the compiler refused. This is the most common failure of all (see What is hard).
int Inventory::FreeSlots() const {
return maxCount - count; // error: 'maxCount' is not a member
}Right idea, wrong wording. The program would behave the same, but the compiler laid it out differently, and it even came out 3 bytes too long.
int Inventory::FreeSlots() const {
return count > unk08 ? 0 : unk08 - count;
}So close. Writing "greater than zero" instead of "not below zero" gives the same answer for every input, but the compiler picks a different jump instruction. Close does not count.
int n = unk08 - count;
if (n > 0) return n;
return 0;Reworded the way the 2008 compiler likes it. Identical. The match is saved and merged that night.
int n = unk08 - count;
return n < 0 ? 0 : n;Bigger functions are harder, so the bigger the function, the stronger the AI we send.
Every AI works through the same loop and the same byte-for-byte check, so a match from a small local model is worth exactly as much as one from the most expensive model. The SQUAD tab on the main page keeps score.
We taught a free local AI from our own proven matches, and it got 4.6 times better.
Every proven match is also a perfect lesson: code that is known to produce the right bytes. We trained a 27-billion-parameter open model on a few thousand of them, using two desktop AI computers, then let it learn from its own wins as well. A third round, aimed at bigger functions, learns from rewrites by Claude. Only matches from models whose terms allow it are used for training.
Out of every 100 tries, only about 3 succeed.
That is normal. A function usually needs several tries, and the AI learns from each failure. Measured over 96,537 tries in a day and a half.
The biggest blocker is not the AI. It is gaps in our shared blueprints.
Functions share "blueprints" (class declarations) that describe the game's objects. When one is missing a field, every function that touches that field fails to build, however good the AI is. That is what happened in try 1. About a third of all build failures are blueprint gaps, so fixing one blueprint unblocks many functions at once.
From the first error in 320 failed builds. "Auto-fixed" are slips the checker now repairs before compiling, such as the AI pasting in its own copy of a blueprint.
Three more things we learned the hard way.
741 open functions are only 1–2 instructions off. A tool that shuffled instructions around fixed none of the 40 we tried: the last difference is almost always a misunderstanding, not an ordering.
Out of 20 big functions, Claude matched 12 on its lightest thinking setting and 17 on its heaviest, but got less code per unit of effort. We run it in the middle.
Two thirds of the code still to do sits in large functions. The bytes percentage on the main page is the honest measure of progress; the functions percentage flatters.
A fan research project that publishes numbers about our own work. Never the game.
Progress statistics: how many functions and bytes we have rewritten, by day and by AI model, plus this explanation of how the work is done.
No game files, assets, executables, disassembly or downloads. Nothing on this site, or anything we release, can be played or used in place of the game.
Contributors receive only what one function needs: its file with every function body removed, plus headers. No repository, no game data, nothing that runs.
Fallout, Fallout: New Vegas and related names are trademarks of their owners (Bethesda Softworks and ZeniMax Media, part of Microsoft; the game was developed by Obsidian Entertainment). We use them only to say which game we study. This project is not affiliated with or endorsed by any of them.
We do this to understand and preserve a game we love, the same way established fan decompilation projects work. If you hold rights in the game and have a concern, please email contact@fnvdecomp.com and we will respond promptly.