Installation & portable mode

How to set up Ninja Gaiden II Recompiled on Windows and Linux, configure portable mode, manage save/config paths, or compile from source.

  • Title ID: 544307D5 (World)
  • Patch: Title Update 3
  • Portable flag: portable.txt
  • Config: ng2.toml
Desktop gaming PC workstation with dual monitors and tempered glass chassis
Windows 10/11 x64 desktop workstation for Vulkan 1.3, 8x render scale, 8x MSAA and 21:9/32:9 ultrawide

What you need before starting

gamboozino/ng2recomp ships zero game assets. On first launch, the setup dialog asks for your own Xbox 360 files in this exact order (see Title Update 3 & DLC Guide for media IDs and SHA-1 hashes):

  1. Ninja Gaiden II (World release, Title ID 544307D5) in any one of three formats:
    • A disc image: *.iso (World disc Media ID 69F555CB)
    • A Games on Demand package: the container file inside 544307D5/00007000 (named like C1200E9B558D04454FA6) with its companion .data directory beside it
    • An already-extracted game folder containing default.xex and the .ng2 archives
  2. Title Update 3 (Required): TU_1A461UL_000000G000000.00000000000O4 (2,486,272 bytes, located on a console under Content/0000000000000000/544307D5/000B0000) or the default.xexp (2,416,640 bytes) extracted from it.
  3. Downloadable Content (Optional): The console’s 544307D5/00000002 folder containing Mission Mode and costume packs. You can select it during first start or drop additional DLC packages into your game folder’s dlc/ directory later.

Windows 10 & 11 installation steps

  1. Download NinjaGaiden2-windows-x64.zip (159.0 MB) from Download & SHA-256 and verify its SHA-256 checksum.
  2. Extract the ZIP archive to any writable folder (do not extract inside C:\Program Files if you plan to use portable mode). Microsoft Visual C++ runtime DLLs are already bundled inside the folder.
  3. Run ng2.exe. On first start, choose whether to enable Portable Mode, then select your World copy of the game, your Title Update 3 file, and (optionally) your DLC folder.
  4. If you selected a disc image (.iso) or Games on Demand container, the installer extracts and copies the game data once into %LOCALAPPDATA%\NinjaGaiden2\game (or userdata/ in portable mode).
  5. Wait for the initial startup pipeline build to finish. The first boot constructs the 333 pre-recorded Vulkan render pipelines and caches them in your GPU driver; every subsequent launch starts much faster.

Where files, saves & ng2.toml are stored (Standard vs Portable Mode)

ItemWindows DefaultLinux / Steam Deck DefaultPortable Mode (portable.txt)
Copied game data, saves & ng2.log%LOCALAPPDATA%\NinjaGaiden2~/.local/share/ng2-recompuserdata/ next to ng2.exe or AppImage
Settings (ng2.toml) & pipeline list (ng2-pipelines.bin)%LOCALAPPDATA%\NinjaGaiden2~/.config/ng2-recompuserdata/ next to ng2.exe or AppImage
Replacement file mods%LOCALAPPDATA%\NinjaGaiden2\mods~/.local/share/ng2-recomp/modsuserdata/mods/

Enabling or disabling Portable Mode: Creating an empty file named portable.txt next to ng2.exe or NinjaGaiden2-x86_64.AppImage stores all game files, saves, ng2.toml, ng2-pipelines.bin, mods/, and ng2.log inside a local userdata/ subfolder. Delete portable.txt to switch back to standard OS user paths.

Skipping the first-start prompt & environment overrides

  • Pre-extracted folder next to the binary: If you place an extracted copy of the game right next to the AppImage or executable (default.xex beside it, or inside a game_files/ or game/ folder there) with Title Update 3’s default.xexp next to default.xex and DLC inside dlc/, the port launches directly without prompting.
  • Custom game directory override: Pass --game_data_root=<folder> on Windows, or set NG2_GAME_DIR=<folder> on Linux.
  • CPU instruction set override: Set NG2_NO_AVX2=1 to force the SSE4.2 executable if you are debugging CPU compatibility.

Building from source (Linux x86_64, Windows cross-compile & ARM64 Linux)

Building from source requires your own disc image along with clang 20+, CMake 3.25+, Ninja, Python 3, Vulkan headers/loader, and FFmpeg (libavformat, libavcodec, libswresample, libswscale):

# 1. Clone and patch ReXGlue SDK (pinned at v0.10.0)
git clone --recursive https://github.com/rexglue/rexglue-sdk thirdparty/rexglue-sdk
cd thirdparty/rexglue-sdk && git checkout v0.10.0 && git submodule update --init --recursive
git am ../../patches/rexglue-sdk/*.patch
cmake --preset linux-amd64 && cmake --build out/build/linux-amd64 --config Release --target install && cd ../..

# 2. Clone and patch XenosRecomp (990d03b) and plume (1192686)
git clone --recursive https://github.com/hedge-dev/XenosRecomp thirdparty/XenosRecomp
cd thirdparty/XenosRecomp && git checkout 990d03b && git submodule update --init --recursive
git am ../../patches/xenosrecomp/*.patch && cd ../..

git clone https://github.com/renderbag/plume thirdparty/plume
cd thirdparty/plume && git checkout 1192686 && git submodule update --init contrib/volk contrib/VulkanMemoryAllocator contrib/Vulkan-Headers
git am ../../patches/plume/*.patch && cd ../..

# 3. Extract World ISO and Title Update 3 default.xexp into game_files/
python3 tools/xdvdfs_extract.py "Ninja Gaiden II (World).iso" game_files
python3 tools/stfs_extract.py TU_1A461UL_000000G000000.00000000000O4 default.xexp game_files/default.xexp

# 4. Generate ~560 MB of C++, translate 663 shaders, and build
cmake --preset linux-amd64-release
cmake --build out/build/linux-amd64-release
out/build/linux-amd64-release/ng2 --game_data_root=game_files

Ninja Gaiden II Recompiled supports Xbox, PlayStation and Nintendo controllers with native Xelu button prompts (plus low-latency VK_KHR_present_wait input mode):

ControllerBest For in Ninja Gaiden II RecompHardware AdvantageLink
Xbox Wireless ControllerOriginal Xbox 360 layout & promptsNative XInput mapping matching the 2008 Xbox 360 combat layoutView on Amazon
GameSir Cyclone 21000 Hz Master Ninja precisionTMR sticks, micro-switch face buttons and 1000 Hz wireless dongleView on Amazon
Sony DualSensePlayStation button promptsAutomatic PlayStation button prompt switching and crisp D-padView on Amazon
8BitDo Ultimate 2 WirelessWindows & SteamOS dock playZero-drift TMR sticks, charging dock and rear macro paddlesView on Amazon

As an Amazon Associate, this site earns from qualifying purchases.

Sixteenth-century Japanese steel tachi blade with carved dragon horimono engraving and black lacquer scabbard
Sixteenth-century Japanese tachi blade with dragon engraving from The Metropolitan Museum of Art
Macro photograph of the Microsoft Xbox 360 ATI Xenos GPU and eDRAM multi-chip package on a green PCB
Xbox 360 ATI Xenos GPU silicon package (663 shaders pre-translated to Vulkan SPIR-V by XenosRecomp)
Macro view of a handheld mainboard PCB and multi-core AMD Zen 2 RDNA2 APU silicon die
Steam Deck Zen 2 / RDNA2 APU running Ninja Gaiden II Recompiled at a locked 60.0 FPS and 10 W power draw

Common questions

Why does the first startup take longer than later boots?

On first start, the game builds the 333 pre-recorded Vulkan render pipelines in the background and writes them to your GPU driver’s pipeline cache. Once cached, subsequent launches start immediately.

Can I add Mission Mode or costume DLC after installing the base game?

Yes. Copy your Xbox 360 DLC files (from 544307D5/00000002) into the dlc/ subfolder inside your installed game directory; the port detects and installs new DLC packages on the next startup.

Does ng2recomp support 64-bit ARM Linux handhelds like the AYN Odin 3 Ultra?

Yes. Running packaging/aarch64/build.sh after a Linux x86_64 build cross-compiles the SDK, FFmpeg 9.0.2, and ng2 against an Ubuntu 24.04 arm64 sysroot (glibc 2.39+, tested on Armada on the AYN Odin 3 Ultra) into out/aarch64-dist.