Skip to content

reeseboisse/shadowrun_64bit_macos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shadowrun Patcher

One-click 32-bit → 64-bit patcher for the macOS releases of the Shadowrun trilogy:

  • Shadowrun Returns
  • Shadowrun Dragonfall – Director's Cut
  • Shadowrun Hong Kong – Extended Edition

These titles shipped as 32-bit Unity 4.x builds. macOS 10.15 (Catalina) and later refuse to launch 32-bit binaries. This tool automates the well-known community fix — swap in the 64-bit standalone playback engine from the matching Unity 4.x installer — so non-technical users can do it by double-clicking.

How it works

For each detected Shadowrun install the patcher:

  1. Downloads the exact Unity 4.x .dmg the game was built against (Returns → 4.2.2, Dragonfall → 4.3.4, Hong Kong → 4.6.2), caching it under ~/Library/Caches/com.shadowrun-patcher/.
  2. Verifies the download against the published MD5.
  3. Mounts the .dmg, copies the 64-bit UnityPlayer binary and the Frameworks/ tree out of Unity.app/.../macosx64_nondevelopment_mono/UnityPlayer.app/Contents/.
  4. Renames the game's existing .app to a timestamped backup, clones it back to the original location, then drops the new binary (renamed to match CFBundleExecutable) and merges the Frameworks.
  5. Removes the download-quarantine xattr and ad-hoc resigns the bundle so Gatekeeper / Apple Silicon's launch policy don't refuse it.
  6. Verifies the patched bundle is Mach-O 64-bit executable x86_64 and that codesign --verify passes.

On Apple Silicon Rosetta 2 is required (Unity 4.x is x86_64-only). The patcher detects its absence and offers to install it via softwareupdate --install-rosetta.

The technique is documented at https://github.com/boggydigital/mac-gaming-guides/blob/main/common/unity-porting.md.

Usage

GUI (recommended)

  1. Download Shadowrun-Patcher-v1.0.zip from the latest release and unzip — you'll get Shadowrun Patcher.app.
  2. Double-click it. A single admin password prompt covers the whole run.
  3. Native progress bar shows download → mount → patch per game.

Prefer to build from source? Clone the repo and run ./build.sh on a Mac — produces an equivalent Shadowrun Patcher.app in the repo root.

Terminal

The bash core is fully standalone:

# Auto-detect installed games and prompt
src/shadowrun_patcher.sh --cli

# Patch every detected game without prompting
sudo src/shadowrun_patcher.sh --cli --all

# Patch a specific game
sudo src/shadowrun_patcher.sh --cli --game dragonfall

# See what would happen, change nothing
src/shadowrun_patcher.sh --cli --all --dry-run

# List detected games (id<TAB>path)
src/shadowrun_patcher.sh --list

Logs go to ~/Library/Logs/shadowrun-patcher.log.

If Unity's downloads stop working

The patcher pulls each Unity 4.x installer from download.unity3d.com on first run. Unity Technologies has previously removed older installers from their CDN without warning, and if they do that again the download step will start failing with an HTTP error.

As a backstop, this repo includes the three exact installers under the unity/ folder (LFS-tracked because they're ~700 MB each). To use them when Unity's CDN is unreachable:

  1. Grab the three DMGs. Either:

    • Clone the repo with LFS support and copy them out:
      brew install git-lfs && git lfs install
      git clone https://github.com/reeseboisse/shadowrun_64bit_macos.git
      # the unity/ folder now contains real DMG files
    • Or download them individually from the GitHub UI by clicking each file under unity/ and pressing Download (the GitHub UI proxies LFS so you get the real bytes, not the pointer text).
  2. Drop them into the patcher's cache directory:

    mkdir -p ~/Library/Caches/com.shadowrun-patcher
    cp unity/unity-*.dmg ~/Library/Caches/com.shadowrun-patcher/
  3. Run the patcher normally (double-click Shadowrun Patcher.app or src/shadowrun_patcher.sh --cli). It checks the cache before the network: each cached DMG that matches the manifest MD5 is reused, and the download step is skipped entirely. The cache lookup tolerates either filename convention (unity-4.2.2.dmg from Unity's URL or unity-4.2.2f1.dmg from a previous run), so no renaming is needed.

If you only have one of the three (e.g. just Returns), drop in only that one. The patcher will use the cached file for that game and still attempt to download for the others.

Reverting

Every patch leaves the original bundle alongside the patched one as <GameName>.backup-<UTC-timestamp>.app. To revert:

cd "/Applications/Shadowrun Dragonfall - Director's Cut"
rm -rf "Shadowrun Dragonfall.app"
mv "Shadowrun Dragonfall.backup-20260528T120000Z.app" "Shadowrun Dragonfall.app"

Requirements

  • macOS 10.15 or later
  • Network access for the first run of each Unity version (~500 MB per DMG)
  • Admin password (a single prompt per run)
  • About 1.5 GB of free disk during patching (cache + staging + backups)

Repo layout

src/
  shadowrun_patcher.sh     # bash entrypoint
  lib/
    games.sh               # game/Unity manifest
    unity.sh               # download / mount / extract helpers
    patch.sh               # per-game pipeline
    dialogs.sh             # native osascript dialog wrappers
    log.sh                 # logging + progress reporting
  launcher.applescript     # AppleScript glue (compiled into the .app)
build.sh                   # macOS-only: builds Shadowrun Patcher.app

License

Copyright (C) 2026 Reese Boisse.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See LICENSE for the full text.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages