DOA3 Recomp

DOA3 Native PC Port is a port of Dead or Alive 3 for Windows, macOS, and Linux that allows players to use DOAXBV swimsuits and a free camera.

README

DOA3 Native PC Port

A native PC port of Dead or Alive 3 (Windows, macOS & Linux), built by static recompilation, with the goal of rewriting it into readable source.

CI License: GPL-3.0-or-later Platform: Windows, macOS & Linux

Status · Report a bug

Join the Discord

Support me on Ko-fi

Important

This project ships no game files. You need your own legally obtained copy of the Xbox game: the Japan 3.1 disc, the main build, or the USA 3.0 disc. It is not affiliated with or endorsed by the game's rights holders.

About

The original Xbox executable is lifted to C with a static recompiler, then linked against a hand-written runtime that replaces the Xbox kernel imports and, one entry point at a time, the Direct3D 8 and DirectSound APIs with native equivalents: Direct3D 11 and XAudio2 on Windows, SDL_GPU (Metal or Vulkan) and SDL3 audio on macOS and Linux. The rest of the game, including its statically linked libraries, runs as generated code. The plan is to replace game logic with readable, hand-written source one data-structure cluster at a time once the game runs.

The runtime comes from the sister project doaxbv-re, which is fully playable on the same approach.

Status

Note

Playable, in early testing. Intro movie, title, menus, Story, Time Attack, Watch and Sparring fights with audio, stage transfers, continue and attract mode run on the whole-program recomp. See bring-up for run evidence, history for how the port got here, and runtime options for settings and runner flags.

The main build is the Japan 3.1 disc (XDK 4134), with 3.1's moves, balance and costumes; the USA 3.0 disc still builds. tools/build_game.py and the launcher tell them apart by default.xbe, keep each in its own extraction and play folder (so saves never mix), and the launcher shows which one is installed. Japan specifics are in Japan 3.1.

AreaState
Whole-program liftRuns from boot to fights, paced to 60 Hz
Kernel importsShared with doaxbv-re
D3D8 3925Device, frame, draws, textures, vertex programs and viewport bound to DOA3
DirectSound 3936Bound; XAudio2 (Windows) or SDL3 (macOS, Linux) output with 3D distance, Doppler and HRTF
macOS and LinuxNative builds; see building on macOS and Linux
CRI Sofdec moviesPlay natively
Hand-written game logicStage boundary and danger-zone collision
DOAXBV swimsuitsEvery DOA3 woman can wear her DOAXBV swimsuits, switched live in a fight, built from your own DOAXBV disc
Free cameraTake the game's camera and fly it through fights and cutscenes, freeze and step the game, hide the HUD, change swimsuits (with your DOAXBV disc) and save screenshots; see Free camera
DOAXBV swimsuits

With your own Dead or Alive Xtreme Beach Volleyball disc (an .iso or its extracted folder), Kasumi, Ayane, Christie, Tina, Hitomi, Helena and Lei Fang can each wear any of her 307 DOAXBV swimsuits. They keep their DOA3 heads, hair and moves; the suit is built on the fly from your disc, and skirts swing and clear the legs, and tassels swing, with DOAXBV's own cloth motion. In a fight, click L3 (the left stick) on any controller to open the swimsuit menu (click again to close): its left half dresses P1 and its right half P2. LB / LT and RB / RT change the swimsuits (hold to scroll), X / B mark a favorite (saved per girl), and Y browses only favorites. A panel lists the controls while the menu is open, and the keyboard's 1 / 2 switch too. Works on Japan 3.1 and USA 3.0. The game finds a DOAXBV .iso or extracted folder in private/ (or in a doaxbv-re checkout beside this one); otherwise choose or drop it in the launcher (steps in Getting the swimsuits). The suit recipes (recipes/doaxbv-suits.pack.gz) ship with the port; no DOAXBV data does. See DOAXBV swimsuits.

Free camera

Tick Free camera in the launcher, then in a fight or cutscene press F1 or click the right stick to take the game's camera and fly it: the sticks or WASD and the arrow keys move and look, the triggers or Q / E go down and up. Start or P freezes the game and the right shoulder or . steps it a frame, the left shoulder or H hides the HUD, and the d-pad's left or \ turns to a fighter whose swimsuit the d-pad's up and down change. F12, or the d-pad's right while flying, saves a screenshot to DOA3 in your Pictures folder. It works on both Japan 3.1 and USA 3.0. No control uses Back, which DOA3 acts on first. See Free camera.

recomp-runtime/ started from doaxbv-re at f6ad13e. Its DOAXBV address bindings are gated off; DOA3's D3D8, DirectSound, XAPI and CRI functions are re-bound in its adapters.

LibraryDOA3DOAXBV
XAPILIB, D3DX8, XGRAPHC, XBOXKRNL39114928
D3D839254928
DSOUND39364928

Both games carry CRI Sofdec (PSGSFD*), XPP and DOLBY sections and ship AFS archives and SFD movies.

Build the tests from source

The runtime tests build without any game files or submodules:

git clone https://github.com/NoRain211/doa3-re.git
cd doa3-re
# Windows: put llvm-mingw and CMake on PATH, downloading them into private/ the first time.
$env:PATH = (python -c "import os, sys; sys.path.insert(0, 'tools'); import build_game; print(os.pathsep.join(map(str, build_game.windows_tools())))" | Select-Object -Last 1) + ";$env:PATH"
cmake -S recomp-runtime -B build/recomp-runtime -G "MinGW Makefiles" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
cmake --build build/recomp-runtime
ctest --test-dir build/recomp-runtime --output-on-failure

The $env:PATH line uses the llvm-mingw Clang and mingw32-make and the CMake that tools/build_game.py pins; on macOS and Linux skip it and use -G Ninja without the compiler options. Visual Studio 2022 also works: configure with -G "Visual Studio 17 2022" and pass --config Release to the build and -C Release to ctest.

This produces test executables, not the game runner. Passing tests does not establish game accuracy.

Set up a local build

git submodule update --init
python tools/extract_iso.py <your-doa3.iso>        # -> private/imported-disc/disc
python tools/xbe_info.py private/imported-disc/disc/default.xbe

extract_iso.py needs XboxDev extract-xiso on PATH or at tools/artifacts/extract-xiso.exe. The lift and runner build are in docs/bring-up.md.

Play

Download the ZIP from the latest release and extract it to a folder with a short path. Drag a DOA3 ISO or extracted disc folder onto Launcher.exe, or choose it on the launcher's BUILD GAME page, to build the game; START GAME plays with the resolution, anti-aliasing, widescreen and volume you pick; see docs/test-release.md. After that, DOA3.exe starts the game with those settings. In a checkout, python tools/package_test.py --launchers . builds both exes. On Windows the build needs only Python 3.12+; its first run downloads llvm-mingw (Clang and make) and CMake (245 MB, about 850 MB unpacked) into private/. On macOS and Linux, extract the release's DOA3-<version>-macOS.tar.gz or DOA3-<version>-Linux.tar.gz and run ./build_game.sh with your ISO, then ./launcher.sh or ./run_game.sh; see docs/building.md. The game keeps its cache and saves in private/play-disc and each session's log in private/play-logs.

Display settings

RECOMP_D3D_SCALE (1-8, render height multiplier; 3 renders 1920x1440 natively), RECOMP_D3D_MSAA (sample count, for example 4) and RECOMP_D3D_SMAA=1 (built from the third_party/smaa submodule; Direct3D 11 only) work as in doaxbv-re.

Widescreen defaults off because DOA3's box lists no 16:9 support, but the game honors the dashboard flag that RECOMP_D3D_WIDESCREEN=1 reports: its 3D view renders anamorphic 16:9 with a wider horizontal view, and the window shows it at 16:9. The game leaves its 2D layer at 4:3, so the presenter narrows screen-space quads that are narrower than the centered 4:3 area by 3/4 toward the center. The HUD, menus and subtitles keep their 4:3 shape; full-screen fades, backdrops and the already pillarboxed movies are left as drawn.

RECOMP_D3D_WIDESCREEN=16:10, or any W:H from 4:3 to 4:1 such as an ultrawide monitor's 3440:1440, makes the game render that shape itself: the runner rewrites the 16:9 constants of its projection and fight camera, and the presenter narrows the 2D layer to 4:3 of the shape. Wider than 16:9, the fight camera keeps its 16:9 framing and the view widens around it. Movies come in a centered 4:3 frame the game sized for 16:9; the presenter keeps the film's shape, letterboxing 16:9 endings on 16:10 and pillarboxing them on ultrawide. The launcher's Ultrawide screen uses the primary monitor's own shape when it is wider than 16:9, up to 4:1, and 64:27 (2560x1080) otherwise.

Repository layout

PathContents
recomp-runtime/Runtime, kernel and input adapters, audio, D3D8 replacements, presentation, tests
xbe/XBE parsing and hashing
tools/ISO extraction, XBE info, lifter submodule, DOA3 function lists, build, launcher, packaging and export checks
third_party/SMAA submodule
docs/Bring-up status, lift and build steps, D3D8, audio, input and fiber research
private/Ignored local game inputs, generated output and run evidence

Contributing

Read the contribution guide first. Translation defects are fixed in the lifter and regenerated; generated game C is never patched by hand.

When reporting a bug, include your build version, steps to reproduce, what happened, your hardware and controller, and the stop or crash message (how to read logs). Remove private paths from logs, and never upload game binaries, generated game C, assets, extracted filenames, saves, BIOS data or private run evidence.

AI assistance

This project uses large language models and AI coding agents extensively for code, reverse-engineering analysis, debugging, tests and documentation. Their output can contain mistakes; changes are reviewed and tested, and unverified behavior is tracked as such.

License

Original code and documentation are licensed under GPL-3.0-or-later; see also NOTICE. Third-party components keep their own licenses. The license grants no rights to the game or its assets.