Initialise native Rust port of Ratchet & Clank: Going Commando
Sets up the foundation for reimplementing the PS2 game in Rust rather than emulating it. Nothing is implemented yet; this is the scaffold, the verified target and the working agreements that keep a long project coherent. Target disc, verified against a real image: SCUS_972.68 v1.01, USA Black Label, NTSC 60 Hz boot ELF 2,618,684 bytes, SHA-1 bacda860...d098a77, entry 0x00131AE8 The entry point independently matches the value recorded by the rac2-gc-decomp community reference, which cross-confirms the identification. This is the exact build the upstream research pins; Greatest Hits v2.00 is a different binary and is not the target. NTSC matters beyond label compatibility: PAL discs run 50 Hz, which would make chargeboots and other speed-sensitive movement run at 5/6 speed. Verifying the disc before writing movement code avoids discovering that in Phase 5. Contents: - Five-crate workspace (formats, extract, game, video, engine) on Bevy 0.19.1, matching the version ReRAC uses so its Graphics Synthesizer and VU work stays portable. `cargo check --workspace` is clean. - tools/identify-disc.py, which reproduces the identification against any disc image and distinguishes a truncated dump from a non-PS2 image. - .githooks/pre-commit, refusing game data from entering git history: disc image extensions, asset directories, container signatures at offset 0, and files over 50 MiB. Verified against seven cases including a disc image renamed to look like source. Now that this pushes to a remote, this matters more than it would have locally. - AGENTS.md, the operating agreements: no game data ever, reproduce the PS2 float model rather than approximating it, bound every read, verify against the real disc. - PROVENANCE.md, recording that this follows ReRAC (ISC) and learns from rac2-gc-decomp (MIT). Wrench is used as a written specification only and no GPLv3 code is copied, since that would relicense everything derived from it. RAC2Decomp is explicitly not used: its provenance is disputed in the upstream community reference, and it targets the wrong region. - docs/roadmap.md, phased so the riskiest unknowns are retired early. The two that matter: overlay relocation transfers from ReRAC and makes 27 level overlays tractable, while VU1 microcode is binary and is the hardest single item. Phase 5 is a deliberately scoped Veldin vertical slice as the go/no-go.
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
# Going Commando
|
||||
|
||||
A native PC reimplementation of **Ratchet & Clank: Going Commando** (PlayStation
|
||||
2, 2003), written in Rust.
|
||||
|
||||
The game is reimplemented, not emulated. There is no MIPS interpreter here and
|
||||
no CPU emulator: the systems are ported to Rust so they run as ordinary native
|
||||
code.
|
||||
|
||||
**Status: initial scaffold.** The disc is identified and verified, the
|
||||
workspace builds, and nothing else is implemented yet. See
|
||||
[`docs/roadmap.md`](docs/roadmap.md) for where things stand and what comes next.
|
||||
|
||||
## The target
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Game | Ratchet & Clank: Going Commando |
|
||||
| Platform | PlayStation 2 |
|
||||
| Disc | `SCUS_972.68` v1.01, USA Black Label |
|
||||
| Video | NTSC, 60 Hz |
|
||||
| Boot ELF SHA-1 | `bacda860cbd6723142e86db56f197e47e728970f` |
|
||||
|
||||
Verified against a real disc — see [`docs/disc-identification.md`](docs/disc-identification.md).
|
||||
This is the build the reference projects pin; Greatest Hits v2.00 is a
|
||||
different binary and is not the target.
|
||||
|
||||
## No game content
|
||||
|
||||
This repository contains **no game assets, no disc images, no BIOS dumps and no
|
||||
proprietary toolchains**. You supply your own legally obtained copy of the disc
|
||||
as an input, the way the upstream reference projects do.
|
||||
|
||||
A pre-commit hook enforces this, blocking disc images, asset directories,
|
||||
container signatures and files over 50 MiB. If you clone elsewhere, enable it:
|
||||
|
||||
```sh
|
||||
git config core.hooksPath .githooks
|
||||
```
|
||||
|
||||
## Layout
|
||||
|
||||
```
|
||||
crates/
|
||||
gc-formats/ asset format parsers (pure, no I/O beyond the caller's buffer)
|
||||
gc-extract/ disc pipeline: identify, unpack, verify
|
||||
gc-game/ game logic: hero, weapons, moby classes, progression, saves
|
||||
gc-video/ IPU / MPEG-2 decode
|
||||
gc-engine/ Bevy app: Graphics Synthesizer, VU0/VU1, renderer, frame loop
|
||||
docs/
|
||||
disc-identification.md which disc we build against, verified
|
||||
roadmap.md phases, gates, current status
|
||||
plan/ one file per subsystem, written as work proceeds
|
||||
formats/ format specs, written as formats are reversed
|
||||
tools/
|
||||
identify-disc.py identify any Going Commando disc image
|
||||
vendor/
|
||||
rerac/ pinned upstream reference checkout (not tracked)
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
Requires a Rust toolchain via [rustup](https://rustup.rs).
|
||||
|
||||
```sh
|
||||
cargo check --workspace
|
||||
cargo test --workspace
|
||||
```
|
||||
|
||||
The host audio backend is disabled in `Cargo.toml` (see the comment there) so
|
||||
that the workspace builds without system ALSA development headers. Audio decode
|
||||
is the last phase of the port and lives in `gc-video`; re-enable it and install
|
||||
`alsa-lib-devel` when that work starts.
|
||||
|
||||
## Identifying a disc
|
||||
|
||||
```sh
|
||||
python3 tools/identify-disc.py <your-disc.iso>
|
||||
```
|
||||
|
||||
Reports the serial, version and video mode from `SYSTEM.CNF`, hashes the boot
|
||||
executable, and warns when the disc is not the supported build. Reads only a
|
||||
few megabytes, so it is near-instant.
|
||||
|
||||
## How it will be verified
|
||||
|
||||
Visual and behavioural comparison against PCSX2, replaying recorded input and
|
||||
comparing frames, level by level. The PS2 float model is reproduced rather than
|
||||
approximated — see [`AGENTS.md`](AGENTS.md#2-reproduce-the-ps2-float-model).
|
||||
|
||||
## Credits and licensing
|
||||
|
||||
This project learns from and is built on the work of others. Licences are
|
||||
recorded in [`PROVENANCE.md`](PROVENANCE.md) and notices must travel with any
|
||||
code derived from them.
|
||||
|
||||
- **ReRAC** — a native Rust/Bevy port of *Ratchet & Clank* (2002), the first
|
||||
game. ISC. The architecture this project follows.
|
||||
- **OpenRAC / rac2-gc-decomp** — matching decompilation research for this
|
||||
game. MIT. Source of verified struct layouts and engine documentation.
|
||||
- **Wrench** — community documentation of Insomniac's container formats. GPL,
|
||||
used as a specification reference only; no code is copied.
|
||||
|
||||
Ratchet & Clank is a trademark of Sony Interactive Entertainment. This is an
|
||||
unofficial fan project, not affiliated with or endorsed by Sony Interactive
|
||||
Entertainment or Insomniac Games.
|
||||
Reference in New Issue
Block a user