Fable 2 for Mac (Fable2RecompMac)

Setting up Fable2RecompMac

From nothing to a running game on an Apple Silicon Mac, building it yourself. (Just want to play? The ready-made app does all of this by itself: see “The app” in the README.) Once it is built, day-to-day use (the launcher, options) is in RUNNING.md.

You need your own copy of Fable II for Xbox 360 (a disc image or a Games on Demand package) and title update 1 for your disc’s media ID. Nothing of the game is included in this repository.

1. Requirements

2. Install the ReXGlue SDK

The port needs ReXGlue SDK 0.10.0.24-dev (commit bd833a2a), the mac-arm64 release.

  1. Download the mac-arm64 package of that release from rexglue-sdk releases and extract it, for example to ~/rexglue-sdk.
  2. Point REXSDK at it (add this line to ~/.zshrc, then open a new Terminal window):

    export REXSDK=~/rexglue-sdk
    
  3. Clear the download quarantine so macOS lets the tools run:

    xattr -dr com.apple.quarantine "$REXSDK"
    

Check it with "$REXSDK/bin/rexglue" --version; it prints 0.10.0.24-dev.gbd833a2.

3. Get the code

Clone with its submodules:

git clone --recursive https://github.com/itar3/Fable2RecompMac.git
cd Fable2RecompMac

(Already cloned without --recursive? Run git submodule update --init --recursive.)

4. Prepare the game files

The game files go under assets/ in the repository folder:

assets/
  game/      default.xex, default.xexp, data/, ...   (the game + title update 1's patch)
  update/    default.xexp, data/tu1_data.bnk          (title update 1)

The build generates its code from assets/game, so this comes first. Later you can reinstall or switch versions from the launcher instead (Install from ISO in RUNNING.md).

  1. Build the extractor (about a minute):

    cmake -S tools/sdk_tools -B out/sdk_tools -G Ninja -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_PREFIX_PATH="$REXSDK"
    cmake --build out/sdk_tools
    
  2. Extract the game from a disc image, or from a Games on Demand package (a header file with no extension next to a <name>.data folder: pass the header file):

    out/sdk_tools/extract "/path/to/Fable 2.iso" assets/game
    
  3. Title update 1. Use the one made for your disc’s media ID (title update packages are named like TU_16L61VH_...). Extract it, then put its default.xexp next to assets/game/default.xex and the whole update into assets/update/:

    out/sdk_tools/extract "/path/to/<title update package>" /tmp/fable2_tu1
    cp /tmp/fable2_tu1/default.xexp assets/game/
    mkdir -p assets/update && cp -R /tmp/fable2_tu1/default.xexp /tmp/fable2_tu1/data assets/update/
    

Which versions work

The port runs one program: Fable II 0.0.1.33, a disc’s program with title update 1 applied. These discs become exactly that program with their own title update 1:

Disc Media ID Disc version
Game of the Year (Russian) / Games on Demand 05FBECEA 0.0.0.33
Game of the Year (English, Polish, Hungarian, Korean, Czech, Slovak, Chinese) 716F0A0D 0.0.0.26

To check your copy before building, print the fingerprint of the program with the update applied; it must be 97bf3532efcd6bb2281dc1196172056b:

out/sdk_tools/extract --image-hash assets/game

The launcher does this check itself before every install from a disc image.

5. Build

"$REXSDK/bin/rexglue" codegen Fable2_manifest.toml   # after a fresh clone or a change to Fable2_config.toml
cmake --preset mac-arm64-native                         # once
cmake --build out/build/mac-arm64-native

Codegen prints XEX patch applied successfully ... new version: 0.0.1.33 when it finds the title update. The first build compiles the whole recompiled game and takes several minutes; later builds take seconds to a minute. The build makes:

6. Run

Double-click Fable 2.app (you can drag it to the Dock), choose your settings and press Play. Everything about running, the launcher and the options is in RUNNING.md.

First start: the game’s shaders are translated on first use and Metal compiles its pipelines, so the first minutes stutter; both are cached for later starts.

Troubleshooting