The Binding of Isaac: Repentance
TecnologíaPort Nativo C/C++ (Reimplementación de Motor)
Ver proyecto oficialSobre el proyecto
The Binding of Isaac: Repentance es un videojuego de acción y aventura publicado por Nicalis, Inc. en 2021.
Información oficial del proyecto
⚠️ !! WARNING !! ⚠️
THE MOST VIBESLOP SHIT YOU HAVE EVER SEEN
This repository contains industrial quantities of AI-assisted reverse engineering, vibe coding, ugly experiments, suspiciously effective slop, and code that was repeatedly bullied into running on a 2011 handheld.
If you are anti-AI, please close this repository now. Continued exposure may be harmful to your blood pressure, sleep schedule, and faith in software engineering. Yes, it is AI slop. You have been warned.
repentogxm
repentogxm is an experimental static-recompilation port of The Binding of
Isaac: Repentance to the PlayStation Vita. The PC executable is translated
ahead of time into C and compiled for the Vita's ARM CPU. There is no emulator.
This repository contains no game code, resources or binaries; you supply your
own PC copy. It is not affiliated with or endorsed by Edmund McMillen, Nicalis,
Valve, Sony, or the maintainers of any dependency named below.
Does it work?
Yes: title screen, menus, rooms, bosses, pause, Continue, Exit to menu, Vita controls, music and effects, saves, and the External Item Descriptions (EID) mod. Output is the Vita's native 960x544. Game logic runs at its normal 30 updates per second; the port presents up to 60 frames per second.
Video of v0.1.0-alpha (at first lags cause of EID warning, sorry)
Video of v0.1.1-alpha and v0.1.0-alpha in same rooms
The current release is v0.1.1-alpha (2026-09-07); release/RELEASE_NOTES.md lists what changed.
Telegram channel with any updates: @localgxm.
Measured on one PS Vita with EID loaded (STATUS.md names the build behind each number):
| Scene | Result |
|---|---|
| Menus | 60 FPS |
| Rooms with enemies | 55-59 FPS |
| Dense rooms (about 78 draw calls per frame) | 33-34 FPS |
| Laser-heavy rooms (Circle of Protection, Brimstone) | slower than ordinary rooms; not measured on this build |
| Door transition with resource loads | 0.9-1.1 s stall |
| Floor change | 1.5-4.3 s |
| Continue from the main menu; process start to the menu | about 7 s; about 4 s |
Below 60 FPS the cost is CPU render time: translated game code, vitaGL draws and Lua; laser rooms add GPU fill on the laser layers. Music can run dry and restart during a load stall. An open EID description box costs 8-10 ms of Lua per frame and breaks 60 FPS. No other mod has been tested.
Not tested: PS TV, language switching, front-touch zones, a full run to a final boss. PLAN.md lists the priorities.
How it works
recomp/gen_all.py translates the functions of the unpacked PC executable
into C. recomp/vita/ compiles that C with the soft-float VitaSDK together
with a host runtime and loads it at a fixed address (0x98000000) through
kubridge. The game's OpenGL calls go to vitaGL (an OpenGL layer over the
Vita's native GXM graphics API), its audio to OpenAL Soft, and its Lua 5.3.3
is built from a source tree you supply. Selected hot functions are replaced by
native code; each replacement falls back to the translated code when its
preconditions are not met.
Why this exists
Rebirth is the only Isaac the Vita ever got, and it stayed that way: no Afterbirth, no Afterbirth+, no Repentance. I wanted to play Repentance on my Vita and I was bored. And, I guess, nobody else was going to do it. So I decided to burn a frankly stupid amount of LLM tokens on the problem and see whether the PC exe could be statically recompiled into something that runs on a 2011 handheld. Turns out it can, mostly.
It's a fun project, it runs well enough that I actually play it, and now you can too.
You must supply the game
This repository contains no game executable, generated C code, gameplay
resources, saves, keys, Sony modules or firmware. The only tracked artwork
is the LiveArea images in recomp/vita/assets/sce_sys/. Ready-made VPKs are on
the Releases page; they contain the recompiled game code but no resources.
Everything else comes from your own legally obtained PC copy of Repentance
v1.7.9b, the version the port is generated from; resources of other versions
are untested. Building from source additionally needs exactly one unpacked
32-bit executable; any other file is rejected (how to unpack it is not
described here):
size: 8,650,240 bytes
sha256: 31846486979cfa07c8c968221553052c3ff603518681ca11912d445f96ca9404
Installing on a Vita
You need:
- a homebrew-enabled PS Vita;
kubridge.skprxlisted under*KERNELin the taiHEN config the console actually loads (normallyur0:tai/config.txt); reboot after adding it;- your own
libshacccg.suprxatur0:data/libshacccg.suprx(vitaGL compiles shaders at run time); - about 1.5 GiB free on
ux0:(the packed resources alone are about 1 GiB); - the complete
resourcesdirectory of your PC installation, copied toux0:data/isaacr001/resources/.
The title ID is ISAACR001. The app appears in LiveArea as The Binding of Isaac: Repentance with a second button, SAVE / MOD MANAGER (untested on
hardware). Everything the port writes lives under ux0:data/isaacr001/,
outside the app directory:
- saves and the game's
log.txt:ux0:data/isaacr001/Documents/My Games/Binding of Isaac Repentance/; - the port's own log:
ux0:data/isaacr001/first-arm-fault.log; - mods:
ux0:data/isaacr001/mods/<workshop id>/; a file nameddisable.itinside a mod directory turns that mod off.
Back up the save directory before replacing a build, and keep the old
eboot.bin until the new one has loaded, entered a room and completed one
save/load cycle. Removing the app does not remove ux0:data/isaacr001/. A run
saved without a mod cannot be continued after enabling one; that is the game's
own rule, not a port bug. When reporting a problem, include the SHA-256 of the
installed ux0:app/ISAACR001/eboot.bin, the port log and the game's log.txt.
VPKs are on the Releases page. Install, update and Vita3K instructions are in INSTALL.md; known failures in TROUBLESHOOTING.md.
Building from source
Host requirements: Python 3.10 or newer, the packages in requirements.txt,
Git, CMake (Ninja for --release), and the soft-float VitaSDK
(vitasdk-softfp), not the default hard-float one.
python -m pip install -r requirements.txt
python tools/build_vita.py \
--pe /path/to/isaac-ng.exe.unpacked.exe \
--vitasdk /path/to/vitasdk-softfp
To run Lua mods add --lua --lua-source /abs/path/to/lua-5.3.3 (a pristine
Lua 5.3.3 source tree); a build without Lua crashes at startup if a mod is
enabled. --heap-mb sets the game heap (default 81 MiB).
python tools/build_vita.py --help lists the rest. The script checks the
executable hash and the generated code and stops on any mismatch.
build_vita.py builds a slower baseline configuration. The released VPK turns
on options the script does not expose (translated-code CPU optimizations,
native Vorbis and PNG decoders, asynchronous logging and others); its exact
option set is release/v0.1.1-alpha.cmake, a
CMake initial cache whose header lists the three commands that reproduce the
build. The option reference is recomp/vita/README.md.
Broken or in progress
- rooms below 60 FPS (table above), laser-heavy rooms lower;
- load stalls: door transitions with resource loads 0.9-1.1 s, Continue about 7 s, floor changes up to 4 s;
- the game heap can fill up over a long session; seen once after 27 minutes, when the game stopped on "Exit game" after writing the saves;
- the on-device Save/Mod Manager and the PC sync tool are untested on hardware;
- no controller remapping UI.
Repository layout
recomp/-- the translator (gen_all.py), its tests and the portable runtime;recomp/vita/-- the Vita CMake project, host runtime, vitaGL and OpenAL patches, the Manager, tests;tools/--build_vita.py, the PC/Vita sync tool, release audit helpers;release/-- release notes and the per-release CMake configuration (text only; binaries and their checksums are on the GitHub Releases page).
PC/Vita sync
tools/isaac_vita_sync.py copies saves and downloaded Steam Workshop mods
between PC and Vita over FTP (the Manager's server or VitaShell). plan needs
no Vita. push never deletes: replaced files are backed up on the Vita and every
upload is SHA-256 verified. pull only downloads the three save files into a
new dated folder under Documents/Isaac Vita Save Backups. In the examples,
836319872 is EID's Steam Workshop id.
python tools/isaac_vita_sync.py plan --saves --latest-save-backups
python tools/isaac_vita_sync.py push --host 192.168.1.50 --mod 836319872 --yes
python tools/isaac_vita_sync.py pull --host 192.168.1.50 --saves
tools/launch_isaac_vita_sync.cmd opens a Windows GUI around the same commands.
The Manager's FTP server has no password: enable it only for the transfer.
Neither the Manager nor the tool has been tested end to end on real hardware.
Contributing and licence
AI-written, human-written and mixed contributions are welcome. Preserve exact
game behaviour, state what you measured, and keep the translated fallback for
cases you did not prove. Never commit game executables, resources, generated
guest_####.c files, saves, keys, firmware, Sony modules, build outputs,
dumps or credentials; .gitignore covers them.
The project's own code is licensed under the GNU GPL, version 2 or (at your option) any later version (LICENSE): fork it, change it, ship it, keep it open. Third-party material keeps its own terms (THIRD_PARTY.md). The game and its resources belong to Nicalis and Edmund McMillen and are not distributed here. Releases carry the VPK only; see DISTRIBUTION.md and CONTRIBUTING.md.
Credits
The biggest external sources of code, formats, fixes and ideas:
- Team REPENTOGON and libzhl -- most of the useful Isaac function names, signatures, layouts and several exact gameplay/render bug fixes;
- Rinnegatamante -- vitaGL, the entire OpenGL/GXM foundation, and lpp-vita as prior art for the on-device manager/FTP workflow;
- VitaSDK and vitasdk-softfp -- the Vita ABI, headers, linker/package pipeline and the soft-float toolchain;
- TheOfficialFloW/kubridge and fgsfdsfgs/max_vita -- loading the game at a fixed memory address and the loader patterns behind it;
- Chris Robinson and OpenAL Soft, plus isage's Vita port -- the audio backend and its Vita adaptation;
- Rich Geldreich/miniz, Jean-loup Gailly and Mark Adler/zlib, and the libpng contributors -- the archive and PNG algorithms adapted into native code;
- Sean Barrett's stb_vorbis and xerpi's libftpvita -- the music decoder and the Manager's FTP server;
- Rick Gibbed/Gibbed.Rebirth
and Basement Renovator
-- archive encryption/framing and Isaac's
.stbroom-file format; - the Vita3K team and AnimMouse/SceShaccCg -- the main bring-up environment and the shader-compiler path that made it usable;
- max_vita, gtasa_vita, baba-is-you-vita, and pkgj -- proven Vita I/O, cache, libc and input patterns reused instead of reinventing them;
- M-HT/SR, XenonRecomp, and xboxrecomp -- the main static- recompilation architecture references;
- the Khronos OpenGL Registry and Wine's Isaac fix -- the generated GL surface and the clue for an animation-file crash;
- Specialist Dance
by Jiftoo, Devector and SetoKeino -- the loading-screen animation (converted
frames in
recomp/runtime/kage_vita_loading_specialist.inc, rebuilt from the mod withtools/build_specialist_loader.py).
Also adapted or linked: OpenAL Soft 1.19.1, stb_vorbis v1.04, miniz v1.15,
zlib 1.1.4, libpng 1.4.20, musl 1.2.5 (decimal float formatting), Lua 5.3.3
(from your own source tree), capstone and pefile (PC translator tooling),
Pillow (PC GUI only). kubridge and libshacccg.suprx are not included. Exact
revisions and licences are in THIRD_PARTY.md and
NOTICE.md.
Thanks also to Edmund McMillen, Nicalis and everyone who made Repentance; to wofsauge and the External Item Descriptions contributors, whose mod is the Lua-compatibility benchmark here; to Team Molecule, yifanlu and TheOfficialFloW for HENkaku, taiHEN and VitaShell, without which nothing runs; to Rinnegatamante for vitaShaRK and years of Vita ports to learn from; to the Lua team at PUC-Rio; to the capstone, pefile, Pillow, CMake, Ninja and GCC maintainers; and to everyone in the Vita homebrew scene who answers questions.
