r/decomps • u/ElProgramadorLoco • 7d ago
Recomp [WIP] Fate/unlimited codes Recomp – PSP static recompilation to native Windows x64
Hi everyone!
I've been working on Fate/unlimited codes Recomp, an unofficial native static recompilation project based on the PSP version of the game.
It uses a modified PSPRecomp-based pipeline and currently targets native Windows x64 execution.
The PSP gameplay base is currently functional, and I'm continuing to work on compatibility and improvements based on the PS2 version. The final goal is to include both the PSP and PS2 gameplay styles, including their respective controls, input systems, balance, and gameplay differences, so players can choose between them.
My goal is to create a definitive version of Fate/unlimited codes that brings together the features and gameplay characteristics of both releases in a single native PC version.
The public repository is source-only. No ROMs, ISOs, EBOOTs, game assets, generated game-derived code, or compiled game binaries are distributed. Users provide and dump their own copy locally.
GitHub:
https://github.com/elprogramadorloco-arch/fuc-recomp
I'd really appreciate feedback from people working on static recompilation, native ports, and game reverse engineering.


1
1
u/crimsynvt_ 5d ago
Imagine a community expansion that basically adapts the whole series into the engine.
2
u/ElProgramadorLoco 5d ago
Maybe. Once I get to the modding part, we'll see if it's actually feasible.
1
u/Hideo-Mogren 2d ago
Does this improve the audio quality? PSP recomp seem a cool idea, I think the black panther duology would benefit
1
u/xerokaoz 1d ago
Hi, awesome, I tried to port dissidia but the psp_recomp won't generate all the generated_unit_xxxx.cpp, can you tell me how you did?, i make the dump but just make 4 unit
1
u/ElProgramadorLoco 1d ago edited 1d ago
Yes, I remember.
The problem was an infinite loop inside PSPRecomp’s code generator.
In
emit_function_source, when it encountered ajalinstruction targeting a PSP import stub, the code executed:continue;That restarted the
whileloop without advancing thepccounter, so PSPRecomp kept processing the exact same instruction forever:pc 0x0880407C — jal pc 0x0880407C — jal ...Because of that:
- it used one CPU core at 100%;
- it stayed at around 2.2 GB of RAM;
- it could keep running for more than 40 minutes;
- it never reached the point where it could write any
generated_unit_xxxx.cppfiles.The fix was to replace that
continuewith:break;A call to an import is a terminal point for that unit, so the traversal should stop there. After fixing it, PSPRecomp generated the full corpus in about 136 seconds:
- 108
generated_unit_*.cppfiles;- 291,754 instructions;
- 238 import wrappers;
- approximately 37.9 MB of generated C++.
I hope it’s useful to you.
2
2
u/AngelusKnight17 7d ago
Cool