WinBack Recompiled

WinBack Recompiled is a native PC port of WinBack: Covert Operations for Nintendo 64, built using static recompilation.

README

Author's Notes:

I decided to take on this for 2 reasons. #1.) WinBack is one of the greatest games on the N64, and an astonishingly unloved hidden gem that deserves some spotlight. I love this game. #2.) I've been doing a lot of 'hands-on' work with Claude Code in my other projects, and I thought it would be fun to see how it would work if I flipped the script, and let it mostly do this by itself with only minimal interjection from myself.

If you love this game, and you don't like AI, then this isn't for you. However, I didn't see anyone else recomping this game, so please if you have the time and the talent, I ask that in all seriousness you make a better project. I'll step aside and take this down to make as much room as possible for a well thought out, human-first approach.

WinBack Recompiled

A native PC port of WinBack: Covert Operations (N64, USA), made by static recompilation. The game's MIPS code is translated to C and compiled for x64 using N64Recomp, and RT64 renders it. There is no emulator.

No game data is included. You need your own copy of the game: WinBack - Covert Operations (USA), big-endian .z64, SHA-1 fa04477b321a95e1f7a2edcac5c09bfa6ef72041.

Status

Early release (v0.1). The game plays from boot, through the intros, title screen and Controller Pak save, into the first mission at 60 fps. Mission 1 has been play-tested by hand, including aiming with the laser sight. Later missions haven't been tested much yet.

If the game freezes or crashes, please open an issue and say where it happened. Running WinBackRecompiled.exe --console shows a log that helps with diagnosis.

Installing

Releases are packaged for RecompLauncher and Quiver Launcher, which install and update the game from this repository's releases. To install by hand:

  1. Download WinBackRecompiled-vX.Y.Z-Windows-x64.zip from Releases and extract it.
  2. Run WinBackRecompiled.exe. On first start it looks for your ROM next to the executable and otherwise asks you to select it. You can also pass --rom <path>. The ROM is verified and a copy is kept in the game folder, so this is only needed once.

Requirements: 64-bit Windows 10 or 11 and a GPU with Vulkan support.

Playing

OptionEffect
--fullscreenStart in borderless fullscreen. F11 or Alt+Enter switches between windowed and full screen at any time.
--consoleShow log output.
--developerShow RT64's debug interface.

Keyboard (player 1)

KeyButton
W A S DAnalog stick
F / RA / B
SpaceZ
Q / EL / R
Y / T / G / HC-Up / C-Left / C-Down / C-Right
Arrow keysD-Pad
EnterStart
EscRecomp menu

Controller (Classic layout, as in the PlayStation 2 release):

ControlActionN64
Left stickMove / aimAnalog stick
XAction, take coverA
AReloadB
BChange weaponC-Up
YLock onC-Down
LBCrouchZ
RBAimR
LT / RT, right stickTurn cameraC-Left / C-Right
Right stick clickCamera behind playerC-Left/C-Right twice
D-pad downPlace / detonate C4D-Down
StartPauseStart
Select (Back/View)Recomp menu-

In menus and on the pause screen, A confirms and B goes back.

Recomp menu

Press Select (or Esc) at any time to open the recomp menu over the game; press it again to close it. The game gets no input while the menu is open. Move with the D-pad, left stick or arrow keys, choose with A (Enter) and go back with B (Backspace).

Level Select lists stages 00 to 30 with their area. Choose a stage, then its Stage start or one of its checkpoints, and the game jumps there from wherever you are, including the title screen.

  • A checkpoint becomes RECORDED the first time you reach it in normal play. The game's own checkpoint data is saved to saves/checkpoints/, and the menu loads exactly that state from then on.
  • Until then it is BASIC: a fresh start of the stage with you placed at the checkpoint. Items, opened doors and other progress from earlier in the stage are missing, so some areas can behave differently than in normal play. Checkpoints reached after a BASIC load aren't recorded.
  • Stage start begins the stage as the game does, with its opening scene, full health and starting equipment.

Display holds the picture settings. Change a setting with left and right; it applies straight away and is saved to settings.json next to the executable.

  • Window mode: Windowed, Borderless (a window covering the screen) or Fullscreen (exclusive full screen at your desktop resolution).
  • Resolution: how sharply the 3D scene is drawn. Original is the N64's 240 lines (216 with Crop overscan), Double is twice that, and Match window (the default) draws at the window's own size.
  • Crop overscan: WinBack leaves a black border around its picture, which TVs of the time hid past the edge of the screen. On cuts the border off so the picture fills more of the window.
  • Integer scale: On enlarges the picture only in whole steps, so every game pixel is the same size. The rest of the window stays black.
  • Anti-aliasing: off, or 2x (default), 4x or 8x MSAA.

Exit Game closes the program after a confirmation. Progress since your last Controller Pak save is lost.

Players 2-4 use additional controllers.

The game is fully portable: everything it writes (the ROM copy, saves, mods and renderer data) stays in its own folder, and nothing goes to AppData or Documents. Saves are on an emulated Controller Pak in saves/. To back up or move your game, copy the whole folder.

Building from source

Requirements: Visual Studio 2022 or later Build Tools (C++), LLVM/Clang, CMake, Ninja, Python 3 and Git.

python -m venv .venv
.venv\Scripts\python -m pip install "splat64[mips]" xxhash pyyaml
sh tools/fetch_deps.sh

Build deps/N64Recomp using the commands in the header of tools/fetch_deps.sh. Then put the ROM in rom/ as baserom.us.z64 and run:

sh tools/regen.sh
tools\vsenv.cmd cmake -S . -B build -G Ninja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_BUILD_TYPE=RelWithDebInfo
tools\vsenv.cmd cmake --build build

tools/regen.sh generates all game-specific code from your ROM into generated/. Each build copies the game into game/: run game\WinBackRecompiled.exe to play, and your saves there survive rebuilds. tools/package.ps1 packages release zips into dist/. docs/DEVELOPMENT.md explains the pipeline, debugging options and runtime constraints. docs/ROM_MAP.md describes the ROM layout.

Project layout

PathContents
config/winback.us.yamlsplat configuration
config/symbol_addrs.txtHand-maintained symbol names
config/winback.us.tomlN64Recomp configuration (stubs, replaced functions, hooks)
config/aspMain.us.tomlRSPRecomp configuration (audio microcode)
src/game/Game registration, patches and Controller Pak
src/main/Host application: window, renderer, audio, input
src/ui/Recomp menu (RmlUi), its RT64 renderer and shaders
assets/fonts/Menu font (Lato, SIL Open Font License), compiled into the executable
patches/Patches applied to dependencies
tools/Code generators and build helpers
docs/Development notes and ROM map
recomplauncher.jsonLauncher manifest shipped in the release zip

These folders are created locally and never committed: game/ (the playable game, with its saves and data), rom/ (your ROM), generated/ (everything produced from the ROM, plus logs and screenshots), deps/, build/ (compiler output) and dist/ (release zips).

Pinned versions

DependencyVersion
N64Recompffb39cdad1da5de07eaaa48bd1db4a89a7986771
N64ModernRuntimecdf5abbd5026fef5c364c676e4667c45e42b6863
RT6423cab603c4f9f4a8b369b38e036f1aa484603878 (plus patches/rt64)
splat640.50.1
SDL2 (Windows)2.30.3
RmlUi7a06f27db04fe5d13a5dacc19b2b4544673a4eca (6.0)
FreeType (Windows binaries)d6fb49d11a9d0011bf4ecfe7e570beaaa189838a

License

GPL-3.0, as required by N64ModernRuntime. See LICENSE.

WinBack is a trademark of its respective owners. This project is not affiliated with or endorsed by them, and it contains no game assets.

Credits