openbor - RetroBIOS¶
Technical notes
Sprite based side scrolling engine continuing Senile Team's Beats of Rage,
built for beat em up and shooter style 2D games. A game is a module: a .pak
archive carrying its own data tree, and that archive is what the frontends
hand over as content. ES-DE runs the .pak on macOS, the game's own AppImage,
.exe or .lnk on Linux and Windows, and opens the engine UI on Android since
the package takes no file argument. Batocera runs OpenBOR
packfile holds "bor.pak" until argv[1] names a path that exists, and with no such argument the built in menu lists Paks/ and the player picks one (engine/sdl/sdlport.c:25,124-135, engine/sdl/menu.c:172-203,802). packfile_supported accepts any name containing .pak and skips menu.pak (engine/source/gamelib/packfile.c:1577-1584).
Everything read for a running game comes out of that module. buffer_pakfile
tries the real filesystem first through fopen, then the same path inside the
archive (engine/openbor.c:921-965,969-1018), so data/models.txt,
data/levels.txt, data/video.txt, data/menu.txt, the scene scripts and the
sprites and sounds under data/ resolve either from an unpacked data/ directory
beside the binary (engine/source/gamelib/packfile.c:781-810) or from the pak.
Four names take precedence over their in-pak copy when they exist on disk:
translation/translation.txt and translation/menu.txt over data/translation.txt
(engine/source/gamelib/translation.c:102-106, engine/openbor.c:5975,53240),
saves/lifebar.txt over data/lifebar.txt (engine/openbor.c:4965-4972), and on
Android Saves/
Startup reads nothing. Logo, menu and log viewer artwork are PNG byte arrays compiled in from engine/resources (engine/sdl/menu.c:20-27), menu text draws from the embedded hankaku face (engine/sdl/menu.c:16,228), the GLSL fragment shaders are string literals (engine/sdl/opengl.c:45-116), and the Android touch skin is a header (engine/android/app/jni/openbor/video.c:49). No gamepad mapping file is read, nothing is dlopened at runtime, the Android package ships an empty assets directory, and the SecurePAK paths compile out of every build because no build file defines SPK_SUPPORTED (engine/source/gamelib/packfile.c:36, engine/source/gamelib/packfile.h:9,135).
Files the engine writes rather than expects: Paks, Saves, Logs and ScreenShots
are created at startup when missing (engine/sdl/sdlport.c:30-33,119-122),
settings and progress land in Saves as
No BIOS or firmware files required. Generated on 2026-08-23T16:12:06Z