NFL Street 2
OrigenGameCube
TecnologíaPort Nativo C/C++ (Reimplementación de Motor)
Disponible paraWindows, Linux, macOS
Ver proyecto oficialSobre el proyecto
NFL Street 2 es un videojuego de acción y aventura publicado por Electronic Arts en 2004.
Información oficial del proyecto
NFL Street 2
A matching decompilation of NFL Street 2 (GameCube, 2004). The goal is source that compiles back to a byte-identical copy of the original executable, with names, types and source structure supported by evidence.
Targets
| Id | Region | Revision | Status | Original SHA-1 |
|---|---|---|---|---|
GN7E69-rev0 | USA | 0 | active | 3561e946e9ff785b68692f87d2ba85d81fd2dcf4 |
config/targets.json is the registry; the target's inputs are in config/GN7E69-rev0/, described in its README.
Building
You need your own copy of the game disc. Keep disc images and extracted files outside public Git. The tools support Python 3.9 or newer on Linux x86-64 and macOS ARM64 (macOS runs Wibo through Rosetta).
- Place the original at
orig/GN7E69-rev0/sys/main.dol. python3 build.pybuilds the reconstructed units in place of their original bytes, analyzes the executable, measures every registered comparison and writesbuild/GN7E69-rev0/report.json. It fails unless the complete executable matchesconfig/GN7E69-rev0/build.sha1, and ends withbuild/GN7E69-rev0/main.dol: OK.python3 build.py checkrelinks the original objects with GNU ld and with SN's ngcld, runs the tool tests that need the toolchain, and checks that the committed unit-boundary proposal inconfig/GN7E69-rev0/boundaries/equals a fresh run oftools/boundaries.py(python3 tools/boundaries.py --writeupdates it). That the site's publish script accepts the report is CI'sCheck the reportstep, on every pull request and push.
The tools are downloaded on first use and checked against the versions and hashes pinned in tools/baseline-tools.json, tools/compiler-tools.json and tools/matching-tools.json. python3 build.py configure --dtk PATH --binutils DIR --compilers DIR --wibo PATH --objdiff PATH uses tools already installed instead; the build image does this.
Tools for closing a file
After one python3 build.py:
| Command | What it does |
|---|---|
python3 tools/trial.py src/game/X.cpp [function ...] [--diff] | Compiles one file and compares each function (all of them, or the ones named by symbol or 0x address) with the original in about a second; exit 0 when all are identical and use the original's constants. |
python3 tools/trial.py src/game/X.cpp fn --dump DIR | The same, keeping ProDG's per-pass RTL dumps (-da, or --dump-flags dl,dg) in DIR, outside the repository or under build/: why a register or an instruction order differs. |
python3 tools/rename.py OLD NEW --evidence "..." | Renames a function, label, type or class in src/, include/, evidence.tsv subjects and the unit configs, mangled spellings included, and records --evidence as the new name's own row (evidence text is never rewritten); --check lists compiled names, externals and evidence rows that disagree. |
python3 tools/files_closed.py | Counts closed files (linked, descriptive file name, every function and label named with an evidence row; Nintendo SDK data labels keep the SDK's names without a row each) and writes what keeps each other file open to build/GN7E69-rev0/files.tsv; build.py runs it. |
python3 tools/sibling_tables.py nascar-units / ps2-map --ps2 DIR | Regenerates NASCAR 2005's compile-unit table and the GameCube-to-PS2 function map under references/. |
A function that is exact but unlinked also has its constants checked: each literal it loads from its own file's data must hold the original's bytes, or the build fails.
CI and the progress site
.github/workflows/validate.yml builds the target in the private build image and publishes each measurement to the progress site on main. Pull requests publish nothing.
Contributing
The project owner is mitsevox, the sole merge authority. See CONTRIBUTING.md for the tiers, the task loop and the review checklist; agents start with AGENTS.md.
Layout
| Directory | Purpose |
|---|---|
src/, include/ | Reconstructed source and headers; version differences under #if VERSION_<ID> (include/version.h) |
src/game/ | NFL Street 2's own game code, mostly C++ (front end, gameplay, AI, replay, audio direction, rendering of players and field), 0x800034A0-0x801AA640 |
src/engine/ | EA Tiburon's shared engine and libraries in C and C++ (memory, resources, T3DB database, TM renderer, particles, sound, input, animation, the viewport manager at 0x8002AE90) and the SN and C runtime support code, mostly 0x801AA640-0x8023873C and 0x8025E148-0x80285A90 |
src/dolphin/ | Nintendo's GameCube SDK (OS, DVD, GX, VI, PAD, CARD, AX and the rest), built with CodeWarrior |
src/Common/ | EA code shared across titles under its original Source/Common path: the UIStudio menu engine |
docs/ | subsystems.md: the map of the executable by area, with file names, ladder rungs and held areas |
config/GN7E69-rev0/ | The target's units, comparisons, analysis inputs, build.sha1 and evidence.tsv |
orig/GN7E69-rev0/ | Where the original goes locally; ignored by Git |
build/ | Generated; ignored |
build.py, tools/, tests/ | The build entry, the kit tools and the project's own, with their tests |
references/ | Reference material from related builds |
Credits and licenses
Imported source is credited in CREDITS.md.