Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

momusdigital/fnv_decomp

Games

Byte-exact C++ decompilation of Fallout: New Vegas 1.4.0.525, intended for modding research and game preservation.

119
18
C++
NOASSERTION
3 days old

What it is

This repository contains a function-by-function C++ decompilation of the PC Steam release of Fallout: New Vegas (version 1.4.0.525). Each function listed in build/units.json is meant to compile to the same bytes as the original executable, using the Microsoft compilers the game was built with. It is aimed at the modding community for research, modding and game preservation.

The repository ships source code only. It contains no game assets, executables or playable content, and no copy-protection tools. Building it produces object files for comparison, not a game. Function comments and many names were machine-proposed and then reviewed; comments may be wrong, and the matched machine code is the authority.

Current status is reported as 70,611 of 70,611 in-scope functions and 11,537,067 of 11,537,067 in-scope bytes matching byte for byte the status section.

Quick start

To build and compare, you need a legally owned copy of FNV for PC, version 1.4.0.525 (Steam app 22380, base game or Ultimate Edition), the plain unencrypted executable from your own copy, Python 3.10+, and the specific Microsoft compilers listed in the README: Visual C++ 2008 Express SP1, Visual C++ 2008 original release, and Visual C++ 2005 SP1 requirements. The installed Steam executable does not work because its code is encrypted on disk; the repository does not supply or help produce a usable executable.

With the compilers set up, configure their locations and run the matcher build and compare:

export FNV_MSVC9_ROOT=/path/to/msvc9
export FNV_MSVC9_RTM_ROOT=/path/to/msvc9rtm
export FNV_MSVC8_ROOT=/path/to/msvc8
export FNV_MSVC9_PREFIX=/path/to/wineprefix   # not needed on Windows

python3 tools/build_and_match.py --image /path/to/your/FalloutNV.exe

The image is first checked against SHA-256 fingerprints, and no other file is processed. A full run compiles about 2,988 units and reports matching functions and bytes plus any mismatches. --only <text>, --jobs N and --out results.json narrow the build, set parallelism and write per-unit results. Output is a count and mismatch list, not a runnable game.

Contributing and review

Readability work is welcome: renaming placeholder functions and variables, and improving comments, without changing generated bytes. Each pull request runs an automatic match check that builds affected units from main and from the change and compares function bytes and relocations. A pull request needs the check to pass and two approvals from people other than the last pusher; a change to comments, spacing or blank lines alone passes without a build contributing. Changes to tools, the build recipe and workflows must come from the repository owner. Any game executable, copied bytes, object files or game data is rejected never include game parts.

To run the check locally, commit the change, create worktrees for main and a scratch checkout, then run tools/compare_builds.py plan, shard and report in sequence running the check.

Constraints

  • The comparison depends on the exact 1.4.0.525 executable and the three specified compilers; other versions or compiler builds are not supported.
  • On Linux and macOS the Microsoft compilers must run under Wine. The README gives unpacking instructions for the Visual Studio 2008 and Windows SDK installers, tested on Ubuntu 24.04 with Wine 9 compilers without Windows.
  • The repository grants no licence of its own; third_party/zlib-1.2.1 keeps its separate licence legal.
  • You are responsible for owning the game and following its licence terms.

HotRepo's take

There is no all-language daily rank recorded for this repository, so the available HotRepo signal is limited. On the C++ new-project list for 2026-11-02 it appeared with 113 stars and 16 forks, gaining 7 stars and 3 forks in the roughly one-hour reporting window, and the two hourly samples in the collected curve show stars going from 106 to 113. That is a single-day observation and does not establish a trend. What stands out technically is the completion claim: the project reports every in-scope function and byte matching, and its contribution flow requires a byte-level check plus two human approvals. Those facts are the useful basis for judging it, not its early star count.

Written by AI from the project's README, updated . The project's own docs are the source of truth.