Skip to content

Latest commit

 

History

History
148 lines (129 loc) · 8.74 KB

SOURCES.md

File metadata and controls

148 lines (129 loc) · 8.74 KB

Where the code comes from

OpenRAC brings the games' decompilation projects together. Each was imported as a snapshot of its default branch (the first four on 2026-10-03), and their later commits are synced in as diffs. A snapshot is the project's tree at one commit, taken with git archive, not its git history. The histories hold material the projects later removed, so they stay in the original repositories, which remain the record of who wrote what. CREDITS.md lists the people behind each project.

Directory Project Repository Branch Commit Its date License
games/rac1 rac1-decomp https://github.com/OpenRAC/rac1-decomp main 693667f24057 2026-10-31 GPL-3.0 (third-party parts keep theirs)
games/rac1/ntsc Lombyte https://github.com/lombyte-project/Lombyte main d29807486aeb 2026-10-31 GPL-3.0 (GPL-2.0 and newlib parts keep theirs)
games/rac2/ntsc rac2-decomp https://github.com/OpenRAC/rac2-gc-decomp master 8bc9d785bfec 2026-10-20 GPL-3.0
games/rac3/ntsc rac3-uya-decomp https://github.com/OpenRAC/rac3-uya-decomp main bfd8278e8c73 2026-10-07 GPL-3.0
games/rac4/ntsc rac-deadlocked-decomp https://github.com/OpenRAC/rac-deadlocked-decomp main dedfcd416a1b 2026-10-05 MIT (GPL libgcc, newlib libm)
games/rac5/ntsc rac5-sm-decomp https://github.com/OpenRAC/rac5-sm-decomp master 57b025248ac0 2026-10-18 GPL-3.0
games/rac6/ntsc rac-sac-decomp https://github.com/OpenRAC/rac-sac-decomp main 4e38d3d88f62 2026-10-21 GPL-3.0

The full commit hashes are in each games/<game>/game.json under source, which tools/sources.py reads and updates. rac1/pal is synced from the Veradictus fork's main: upstream plus work waiting to be merged there, so its commit may not exist upstream yet.

What changed on import

Everything else is exactly as it was at that commit.

rac1/pal

  • Left out .agents/mcp_config.json, a machine-specific MCP configuration.
  • Moved tools/extract/ (the level extractor) and docs/GDSCRIPT_CONVENTIONS.md to the top-level editor/, and pointed tools/overlays.py, tools/overlay_scan.py, tools/dossier.py and the docs at it.
  • tools/docker/run.sh mounts all of OpenRAC in the build container, so the editor, baserom/ and toolchains/ are reachable.
  • The tree lives at games/rac1/ itself (the merged game; "dir" in games/rac1/game.json), not games/rac1/pal/, so tools/docker/run.sh looks two levels up for OpenRAC's top instead of three.
  • tools/wave.py names its own directory in worker prompts instead of a path on one machine, and gives its commits the rac1/pal scope.
  • README.md, THIRD_PARTY_NOTICES.md, docs/ASSETS.md, docs/OVERLAYS.md and docs/LLM_DECOMP_INSTRUCTIONS.md point to the editor and OpenRAC's rules. Upstream rewrote its README on 2026-10-07; OpenRAC keeps that version with only its extractor link pointed at the editor.
  • tools/lombyte.py and tools/names.py read Lombyte from games/rac1/ntsc and its published report from progress/sources/; docs/SIBLING_DECOMPS.md says where the sibling projects are.
  • src/game/space.c names the display list's size D_0016100C itself, not D_00160000 + 0x100C: the same address on the console, but each level keeps its own copy of the variable and the port moves only the address the code names. The level's copy was left at the pause menu's size, and loading a save from the pause crashed the flight.
  • src/game/loaders.c reaches the class-resource arrays after class_resource_ids (D_001CBEA0, D_001CBF60, D_001CC0E0) from that base, as one block: the level loader pairs only the first base, so the port relocates the others with it.
  • src/overlays/l07_umbris/taxi_platform.c: the Bombomatic's hit handler names its hit message hit_message, not s16. A local named after the type shadows it, and hostgen writes casts by the type's name.
  • nonmatching/game/func_0020E3D0.c (a candidate) declares the moby layout it reads itself: src/game/mobyfunc.c, where it goes, now uses include/moby.h, whose field names differ.

rac1/ntsc

  • The README credits the NTSC decomp by that name only (removal requests).
  • docs/commit-messages.md notes that OpenRAC's commit convention applies.
  • Added host/: a wrapper and a runner that build the project on an Apple Silicon Mac under rac1/pal's Wine (host/README.md). Nothing in the project reads them.
  • C patches for the native port (port/game/rac1-ntsc), each listed with its reason in OPENRAC_PATCHES.md: the C made explicit where it relied on a register or named a PAL address. A sync keeps them, and leaves a .rej where the project changed the same lines; they are to be offered to the project.

rac2/ntsc

  • Nothing changed. Since 2026-10-11 the project carries the sourcing edits OpenRAC used to make itself (no include/moby.h, the leaked-material passages gone from its docs) and states the sourcing rule in its own CONTRIBUTING.md and AGENTS.md. Its history was squashed when it was rebuilt to rac1-decomp's structure, so it was imported afresh at that commit.
  • ports/pal-functional/ (platypet2217-star's RAC2Decomp, MIT) comes along unchanged; it is not part of the matching sources or progress.

rac5/ntsc

  • Nothing changed: imported as the project's commit, whole. It already states the sourcing rule in its own LEGAL.md, CONTRIBUTING.md and AGENTS.md.

rac6/ntsc

  • Imported as the project's commit, whole; it states the sourcing rule in its own LEGAL.md, CONTRIBUTING.md and AGENTS.md.
  • config/toolchain.json names the sibling workspace's compiler depot by its relative path (tools/compilers/...), without a local drive path.
  • THIRD_PARTY_NOTICES.md credits GCC's fp-bit.c and libgcc2.c (GPL-2.0-or-later with the libgcc exception) for the runtime-library bodies in src/levels/bodies/.

rac4/ntsc

  • In src/game/00473A88.c, the five members of the local struct are named by offset (f20, f68, f69, f6A, fBE), as the project's own LEGAL.md asks. Four carried the names rac1/pal's MobyInstance header uses at the same offsets, whose origin is open question 3.
  • tools/docker/run.sh mounts all of OpenRAC and can use rac1/pal's local image.
  • tools/setup_asm.sh hashes with python3 instead of sha1sum.

rac3/ntsc

  • Left out localdecomp/server.py.bak_0926, a stale backup of server.py.
  • localdecomp/server.py commits and pushes only when its project is the top of its own git work tree, so never into OpenRAC.
  • .gitignore covers the linker script splat writes during setup.

Bringing in later work

While the projects are still active in their own repositories, their new commits can be applied here as a diff, so the changes above survive:

python3 tools/sources.py status            # how far each checkout is past its recorded commit
python3 tools/sources.py sync rac1/ntsc    # apply the checkout's new commits to games/rac1/ntsc

A checkout is looked for at the path in game.json, written from the top of OpenRAC (for example ../rac1-decomp-ntsc: the project cloned beside OpenRAC), or in $OPENRAC_SOURCE_RAC1_NTSC when it lives elsewhere. A hunk that touches a line changed here is left as a .rej file to resolve by hand. After syncing rac2/ntsc, write the port's copy of the names its build derives again from a build of that commit (port/game/rac2-ntsc). Before committing a sync, check it against the sourcing policy, including the removal requests, and commit it as one chore(import) commit per project, naming the new commit.

Other projects OpenRAC builds on

These are credited where their work is used, and in THIRD_PARTY_NOTICES.md:

  • ReRAC (ISC): the moby, collision and animation formats in the editor, and function notes in rac1/pal.
  • Wrench (GPL-3.0-or-later): asset formats, read for the editor; the tool rac2 and rac3 use to unpack discs.
  • splat, spimdisasm, objdiff, asm-differ, decomp-permuter, m2c and wibo: the decompilation tooling the projects use; none is vendored here.