RECOMPWATCHER

Native PC port · PlayStation 2

Fighting for One Piece

playable

A native Linux port of Fighting for One Piece (NTSC-J, SLPS-25545), made by statically recompiling the game's PlayStation 2 code to C++.

Original
PlayStation 2
Serial
SLPS-25545
Region
NTSC-J
Runs on
Linux
Language
Shell
Last update
1 Nov 2026

Options

Read the documentationThe project's README, belowCheck your discIs your copy the version this port supports?See the progress7 of 10 milestones doneOpen the repository ↗github.com/TheBozos/FightingForOnePiece_Recomp
DownloadNo build released yet. Builds will appear here once one is published.

No game data is included. You need your own copy of the game.

Disc check

Is your copy supported?

The port is built against one exact version of the game. Drop your game's executable (SLPS_255.45), a folder copied from the disc, or the whole disc image (.iso / .bin) to check yours.

All of these

  • SLPS_255.45SHA-1 e445f2af578e…

Drop files anywhere on this page

    Checked on your computer: files are read by your browser and never uploaded. Only the files this port needs are read from a disc image.

    Milestones

    7 of 10 done· 1 in progress

    Milestones over timeDoneListed
    01027 Oct 20264 Nov 20267/ 10
    Show as table
    DateDoneIn progressListed
    27 Oct 2026107
    27 Oct 2026117
    27 Oct 2026217
    27 Oct 2026227
    29 Oct 2026609
    29 Oct 2026719
    30 Oct 20267110
    • Map and recompile the main ELF
    • Boot: EE kernel, the game's own IOP modules, CD reads from the disc files
    • Title screen, menus, character select
    • Fights (Fighting Mode vs CPU)
    • Music and sound effects
    • Native target: GS on OpenGL at 2x, IOP modules recompiled, frames and sound on the PC clock, 60 fps
    • VU1 as native code (microprograms ported to C++, draws built natively): today on the sandbox, still emulation
    • Logos and movies (MOVIES/*.PSS)
    • Other modes: VS Fight, Gamble, Training, Replay, Option menus
    • Memory card: save and load

    From the checklist in the project's README.

    Screenshots

    • FightFight
    • Title screenTitle screen
    • Main menuMain menu
    • Character selectCharacter select
    • Fight introFight intro
    • Special moveSpecial move
    Full size ↗
    ← → to browse · Esc to closeSwipe to browse

    README.md

    View on GitHub ↗

    Platform Compiler Based on Status

    Fight Title screen Main menu Character select Fight intro Special move

    Captured from the running port: the GS translated to OpenGL at 2x (1280x896).

    Important

    No game files are included: no ELF, IRX modules, data archives, or code generated from them. You need your own copy of the Japanese release, PS2 ID SLPS-25545. The port is built against that disc's executable:

    File SHA-1
    SLPS_255.45 e445f2af578e3780bcd7f59cf57c57b491f3c747

    Status

    Playable. From the title screen through the main menu, character select and VS screen into 3D fights (Fighting Mode against the CPU, rounds, special moves and their cut-ins), with music and sound effects, at a steady 60 game frames per second. It runs on PS2Recomp's native target: the GS is translated to OpenGL at twice the PS2's resolution instead of being emulated, the game's 14 IOP modules are recompiled to C++ (none left to the interpreter), and the frames and the sound run on the PC's clock (no emulated vblanks). Still emulation, to be removed: the VU1 microprograms run as PS2 microcode on PS2Recomp's VU1 sandbox (an interpreter of their compiled code), and their output reaches the GL renderer through the GS front end's register state (gsWrites), not as native draws; the GS upload mirror and the VIF1 unpack remain too. VS Fight, Gamble, Training and the options reach their screens, and the memory card saves and loads the game's data. Movies are skipped.

    Milestone
    Map and recompile the main ELF ✅
    Boot: EE kernel, the game's own IOP modules, CD reads from the disc files ✅
    Title screen, menus, character select ✅
    Fights (Fighting Mode vs CPU) ✅
    Music and sound effects ✅
    Native target: GS on OpenGL at 2x, IOP modules recompiled, frames and sound on the PC clock, 60 fps ✅
    VU1 as native code (microprograms ported to C++, draws built natively): today on the sandbox, still emulation ⏳
    Logos and movies (MOVIES/*.PSS) ⏳
    Other modes: VS Fight, Gamble, Training, Replay, Option menus 🔧
    Memory card: save and load ✅

    ✅ works · 🔧 in progress · ⏳ not reached yet

    RECOMP_NOTES.md records how the port is brought up, every fix and how it was found.

    How it works

    disc files ──► ps2_analyzer (+ Ghidra, hint lists) ──► recomp/ffop.toml
                                      │
                           ps2_recomp ──► C++ (one file per function)
                                      │
                     ELF MPG uploads ──► ps2_vu_aot ──► generated/vu1/
               IRX as the IOP loads them ──► iop_recomp.py ──► generated/iop/
                                      │
       PS2Recomp runtime: EE kernel HLE · DMAC · GIF → GS on OpenGL · VIF/VU0/VU1 ─┼─► ps2EntryRunner
       PS2Recomp IOP:     the game's own IRX, recompiled · SPU2 on the PC clock · SIO2
    
    • The ELF has no symbols. ps2_analyzer maps the functions and binds the SCE SDK ones it recognises to the runtime's handlers.
    • PS2Recomp turns every function into C++. The VU1 microcode found in the ELF is compiled ahead of time by ps2_vu_aot; microcode loaded from the data archive runs in the interpreter. The IOP modules are dumped as the IOP loads them and recompiled the same way (scripts/recomp_iop.sh).
    • The GS is not emulated: its drawing state and primitives become OpenGL draws into GPU render targets (PS2Recomp's GS native back end), rendered at 2x.
    • runtime/ffop_overrides.cpp holds the game-specific bindings, matched to the ELF by entry point and CRC.

    The runtime is the PS2Recomp/ git submodule: TheBozos/PS2Recomp, branch native/renderer, shared with the Soulcalibur III, Twisted Metal: Black, Valkyrie Profile 2: Silmeria, The Lord of the Rings: The Third Age, Smash Court Tennis Pro Tournament 2 and Drakengard recompilations. The top-level CMakeLists.txt builds its runtime, swaps its placeholder function table for the generated one and links the generated code, runtime/, the compiled VU1 microcode and the recompiled IOP modules into ps2EntryRunner. Generic fixes go to boubou666's native/* branches, merged into native/renderer.

    Requirements

    • Linux (developed on Arch)
    • CMake 3.21+, Ninja, Clang with C++20, rsync, and bsdtar (libarchive) to extract the disc
    • FFmpeg development libraries (libavcodec, libavformat, libavutil, libswresample, libswscale)
    • X11/Wayland and OpenGL development headers (raylib is fetched and built by the runtime), a GPU with OpenGL 4.5
    • Your own copy of SLPS-25545 as a disc image (the extracted ELF is checked against the hash above)

    Build and run

    git clone --recurse-submodules https://github.com/TheBozos/FightingForOnePiece_Recomp.git
    cd FightingForOnePiece_Recomp
    scripts/extract_iso.sh "/path/to/Fighting for One Piece (Japan).iso"   # disc files -> game/
    scripts/build_tools.sh                                                  # ps2_recomp, ps2_analyzer, ps2_vu_aot -> build/tools
    scripts/recomp.sh                                                       # game/SLPS_255.45 + recomp/ffop.toml -> generated/
    scripts/compile_vu1.sh                                                  # VU1 microcode in the ELF -> generated/vu1/
    scripts/build_runtime.sh                                                # runtime + generated code -> build/game (RelWithDebInfo)
    scripts/recomp_iop.sh                                                   # one boot dumps the IOP modules -> generated/iop/
    scripts/build_runtime.sh                                                # again, with the recompiled IOP modules
    scripts/run.sh                                                          # ps2EntryRunner game/SLPS_255.45

    The game runs on PS2Recomp's native target by default: the GS translated to OpenGL (PS2X_GS_RENDERER=native) at twice the PS2's resolution (PS2X_GS_SCALE=2), the IOP modules recompiled (PS2X_IOP_NATIVE=1), the SPU2 and the IOP on the host clock (PS2X_SPU2_WALLCLOCK=1, PS2X_IOP_WALLCLOCK=1), and its frames end on the PC's clock (FFOP_NATIVE_FRAMES=0 keeps the PS2's vblanks). Export any of them to change it, e.g. PS2X_GS_RENDERER=cpu for the CPU GS. Without scripts/recomp_iop.sh the IOP interprets its modules as before.

    The extracted disc folder is the game's cdrom0:; the memory cards (mc0/, mc1/) are created next to the ELF in game/. scripts/analyze.sh reruns ps2_analyzer into build/analyzer.toml; recomp/ffop.toml started from that output and is edited by hand, so merge new analyzer output into it rather than replacing it.

    scripts/remote_build.sh builds the runner on another x86-64 Linux machine over ssh (REMOTE_HOST, default stallman) and copies it back into build/game; it links against this machine's FFmpeg, copied there once, and the game still runs here. JOBS=<n> sets the build parallelism of every script (default: all cores). scripts/build_runtime.sh Release or Debug picks another build type, and CXX another compiler (Clang is used when it is installed). scripts/ffoprun.sh <name> <seconds> [VAR=value...] runs the game for that long with a state dump every 5 seconds, logs to build/runs/<name>.log and screenshots the window.

    Disc facts

    Boot ELF SLPS_255.45, entry 0x10001C, stripped
    Video mode NTSC (SYSTEM.CNF VER = 1.01)
    IOP modules MODULES/*.IRX: CDVDSTM, LIBSD, MCMAN, MCSERV, MODHSYN, MODMSIN, PADMAN, SDRDRV, SIO2MAN, SKHSYNTH, SKMSIN, SKSADPCM, SKSOUND, STRADPCM
    IOP image MODULES/IOPRP300.IMG
    Data FILES.FOA (256 MiB archive)
    Movies MOVIES/ONEP_OP3.PSS, MOVIES/FO_1.PSS (SCE MPEG-2 PSS)

    Repository layout

    Path Contents
    PS2Recomp/ The recompiler and runtime (git submodule, TheBozos/PS2Recomp branch main)
    CMakeLists.txt Builds the runtime with the generated code and the game overrides linked in
    recomp/ Recompiler config (ffop.toml) and, as the port grows, the function map and entry-point hint lists
    runtime/ Game override module (ffop_overrides.cpp)
    scripts/ Build, analyze, recompile, VU1 compile and run scripts; disassembly, IRX and profiling helpers
    docs/screenshots/ Pictures of the running port
    RECOMP_NOTES.md How the port is brought up, the fixes and the debugging tools
    game/, generated/, build/ Created by the scripts, ignored by git: disc files, generated C++, builds

    Everything derived from the game (disc files, generated code, builds, logs) stays outside this repository. Never commit or redistribute it.

    Credits

    • PS2Recomp by ran-j and contributors (GPL), the recompiler and runtime this port is built on.
    • TheBozos/PS2Recomp and the recompilations developed on it; runtime fixes are shared both ways.
    • Fighting for One Piece © Eiichiro Oda / Shueisha, Toei Animation, Bandai. This is an unofficial fan project, not affiliated with or endorsed by them.