wipeout_pc

wipeout_pc is a native PC port of WipEout Omega Collection for Windows 10/11 that runs the game's original code directly on the PC's processor with Vulkan graphics translation.

README

WipEout Omega Collection for PC (wipeout_pc)

A native PC port of WipEout Omega Collection (PlayStation 4) for Windows 10/11, in the style of bbport: the game's original x86-64 code runs directly on the PC's processor, a runtime replaces the PS4 system libraries, and the graphics are translated to Vulkan by the shadPS4 video core. There is no CPU emulator.

Status: early development. Menus and races (HD and 2048) play above 60 FPS. See Progress.

Download and play (Windows)

  1. Download wipeout-windows.zip from the latest release and extract it.
  2. Open WipEout.exe, choose your game folder (the one with eboot.bin) and click PLAY.

Requirements: Windows 10 or 11 (64-bit), a CPU with AVX, a GPU with Vulkan 1.3. The README-Windows.txt in the zip has the details. Linux: build from source (below).

No game files are included. You need your own copy of the game, dumped from your own PS4. This project is not affiliated with Sony Interactive Entertainment, XDev, Clever Beans or EPOS Game Studios. WipEout is a trademark of Sony Interactive Entertainment.

Progress

StepState
Unpack the game and its updateDone (scripts/pkg_extract.py)
Load and link the executable (eboot.bin, libc, Fios2, NpToolkit2)Done
PS4 system functions the game usesDone for menus and races; PSN, VR and camera answer as an offline console
Boot, menus, savesDone
Races (HD and 2048), race resultsDone
Game speedDone: the game runs on real time at any frame rate
Frame rate above 60 FPSDone: up to 240 FPS, set by the frame rate limit (110–150 FPS in 2048 races on an RTX 4070 Laptop)
Graphics: Metro Park terrainFixed (shader recompiler, #5)
Render resolutions: 2560x1080, 5120x2160, native 4K without checkerboardDone (patches/WipEout_Omega_Collection.xml, #2). HUD stays 16:9
HDRDone; the darker picture when RCAS runs is fixed, waiting for a test (#4)
Sound: music and effects (Audio3d)Done; the effects are new, please report anything that sounds wrong
Launcher and settingsDone (launcher/gow3_launcher_win.py)
Windows package (zip)Done (packaging/windows/package.sh, Actions > Windows zip)
LinuxBuilds from source; no package yet
PS4 Pro modeNot yet: the texture cache stop is fixed (v0.2.1), the game now stops in a Pro-only guest path
PSVR modeNot planned for now (#7)
Every game and event type (HD, HD Fury, 2048)Not all tested yet

2048 races need red-zone protection on Windows (src/redzone.cpp): the game's profile turns it on. Without it they run at less than 1 FPS.

The game times itself with the processor's time stamp counter (rdtsc), so the runtime gives it the real counter and its measured frequency (src/runtime_kernel.c). Its speed then does not depend on the frame rate.

Supported game versions

Title IDRegionVersionState
CUSA07671US01.00 + update 01.07Development target
CUSA05670EU—Untested

The base game and the update are merged into one folder (the update's files replace the base game's). One eboot.bin runs all three games: WipEout 2048, WipEout HD and WipEout Fury.

Building (Windows)

  1. Install MSYS2 (winget install MSYS2.MSYS2) and, in the MSYS2 CLANG64 shell, the packages listed in packaging/windows/README.md.

  2. Install Python 3.10+ from python.org (with Tk), then:

    python -m pip install pillow iced-x86==1.21.0 cryptography
    
  3. Clone with submodules and build in the MSYS2 CLANG64 shell:

    git clone --recursive https://github.com/AbdelmoumenDeghbouche/wipeout_pc
    cd wipeout_pc
    bash build.sh
    

    If Git converts line endings on your PC (core.autocrlf=true), the FSR patches do not apply. Turn it off for this repository and its submodules before building:

    git config core.autocrlf false
    git submodule foreach --recursive git config core.autocrlf false
    git rm -rq --cached . && git reset -q --hard
    git submodule foreach --recursive 'git rm -rq --cached . && git reset -q --hard'
    

Preparing your game

From fake PKGs of your own dump (base game and update):

python scripts/pkg_extract.py <base.pkg> D:\games\CUSA07671
python scripts/pkg_extract.py <update.pkg> D:\games\CUSA07671-patch

Then move the update's files over the base game folder, or pass the update folder with GOW3_PATCH_DIR. A folder dumped with GoldHEN works the same way.

Running

Start the launcher, choose your game folder on the Game page, then click Play:

python launcher\gow3_launcher_win.py

The Advanced page can put a shortcut on the desktop. Settings: display mode, frame rate limit, VSync, anisotropic filtering, HDR, controls, mods and the game language.

Without the launcher, run.py starts the game:

$env:GOW3_GAME_DIR = 'D:\games\CUSA07671'
python run.py

List the PS4 functions the runtime does not have yet:

$env:GOW3_GAME_DIR = 'D:\games\CUSA07671'
$env:GOW3_MODS_ENABLED = '0'
python run.py --check-imports

Without --check-imports, run.py starts the game. The loader stops at the first system function the runtime does not implement and prints its name.

How it works

PartWhereWhat it does
PKG unpackscripts/pkg_extract.pyDecrypts and unpacks fake PKGs (PFS, PFSC), as shadPS4 does
Game profilesscripts/game_profiles.pySystem modules to link per title ID
Preparationscripts/prepare.py, link_libc.py, link_modules.pyReads eboot.bin and links the game's own libc, libSceFios2 and libSceNpToolkit2
Import namesscripts/gen_import_names.py, src/import_names.incMaps the game's import NIDs to function names
Loadersrc/probe.cLoads the image and starts the game's original code
Runtimesrc/runtime_*.cPS4 system functions
Audio3dsrc/runtime_audio.cMixes the bed and the sound objects of the Wwise sink into one output
Json2src/runtime_json.csce::Json values, parser and serializer (race results)
Red zonessrc/redzone.cpp, scripts/function_starts.pyKeeps Windows exception records out of the game's red zones
Launcherlauncher/Settings window and game start
GPUgpu/shadps4/shadPS4 video core (Vulkan)

Many names (gow3-probe.exe, GOW3_* variables, the launcher) still come from the God of War III port this project is based on. They will be renamed.

Credits

This project is a fork of FelipePrado0's God of War III port, which comes from Supermedo's Windows port of deadinside28's original:

  • FelipePrado0: gow3_pc, the base of this project.
  • bc160201983: medievil_2019_pc_port, the first port of another game on that runtime. pkg_extract.py, game_profiles.py and gen_import_names.py come from it.
  • deadinside28: bloodborne_pc, the original native port.
  • Supermedo: bloodborne_pc for Windows.
  • cuesta4: shadPS4 fork (branch eltutz): the GNM blend rewrite, depth/stencil state and image aliasing fixes.
  • shadPS4 team: the shadPS4 video core, the PKG format and the symbol names (tools/aerolib.inl).

Contributors to this port: d4g (render resolution patches, the Metro Park terrain fix), benhaslett (game clock measurements, Linux build fix) and iannitram (PS4 FPU state).

Also used: LibAtrac9, FFmpeg, SDL3, Dear ImGui, sirit, magic_enum, miniz, xbyak, Vulkan Memory Allocator, FSR-Vulkan and the AMD FidelityFX SDK, MSYS2, LLVM and Pillow.

License

GNU GPL v2 or later (LICENSE). Third-party components keep their own licenses.