- Python 97.8%
- Shell 2.2%
| LICENSES | ||
| music | ||
| res | ||
| tools | ||
| .gitignore | ||
| ASSETS.md | ||
| game.py | ||
| install.sh | ||
| LICENSE | ||
| main.py | ||
| NOTICE.md | ||
| Pycap.py | ||
| PycapRes.py | ||
| README.md | ||
| requirements.txt | ||
| run.sh | ||
ROM CHECK FAIL — native Linux port
Farbs' 2008 glitch platformer running natively on Linux, without Wine.
This is a small compatibility layer: the game logic is Farbs' official
game.py (released under MIT), and Pycap.py / PycapRes.py reimplement the
original C++ SexyAppFramework ("Pycap") API with pygame-ce. The game renders at
its original 256x224 resolution and is scaled 3x by default. This port uses a
10-second round timer and, by default, the Invader and Asteroids balance values
from ROM CHECK GO; --classic restores the stock 1.1 balance.
Development note
This port was created with the help of generative AI tools, including the OpenCode coding agent. The maintainer reviewed and tested the result and remains responsible for the release.
Run
./run.sh
Options:
./run.sh --fullscreen # start fullscreen
./run.sh --scale=4 # window scale factor (default 3)
./run.sh --no-music # disable music
./run.sh --classic # stock 1.1 Invader/Asteroids balance
./run.sh --autoplay # demo/test mode
./run.sh --smoke=8000 # run a fixed number of frames, then exit
Controls: arrow keys, Space, Esc to quit. F11 or Alt+Enter toggles fullscreen.
If .venv is missing:
./install.sh
install.sh creates .venv and installs the pinned dependencies. You need
Python 3 and the venv module (on Debian/Ubuntu: python3-venv).
Headless validation of every player, enemy and environment:
.venv/bin/python tools/smoke_test.py
Distribution packages
Build portable release archives:
./tools/make_dist.sh
The archives are written to dist/:
romcheckfail-1.1-linux3-x86_64.tar.gz— full playable package, including the originalres/assets and pre-renderedmusic/.romcheckfail-1.1-linux3-src.tar.gz— source-only package with the MIT port code andgame.py, but no original assets or music.
To install from a full archive:
tar xzf romcheckfail-1.1-linux3-x86_64.tar.gz
cd romcheckfail-1.1-linux3-x86_64
./install.sh
./run.sh
The source-only archive needs a res/ directory from a legally obtained copy
of the game; see ASSETS.md.
The current release is v1.1-linux3
(https://git.t44.org/topy/romcheckfail/releases/tag/v1.1-linux3). Release
downloads, including the full package with the original assets, are at
https://git.t44.org/topy/romcheckfail/releases. The full package contains
Farbs' freeware assets and is not open source; see NOTICE.md for the
rights-holder/takedown statement.
Licensing and provenance
The original ROM CHECK FAIL is not technically open source. In 2011 Farbs
released only the Python script game.py under the MIT license. The artwork,
sound effects, music, levels, title, original binaries and the original C++
engine were not released under an open-source license. The freeware game as a
whole remains proprietary freeware.
- The new Linux port code and
game.pyare MIT-licensed; seeLICENSE. - The original assets in
res/are Copyright (C) Farbs and are freeware, not MIT. They are included in the full package for personal compatibility use. - The original Pycap / SexyAppFramework C++ engine is not included. The Python shim is an independent pygame-ce reimplementation.
- The OGG music was rendered with FluidSynth and the GPL-2 TimGM6mb soundfont;
the soundfont is not included. See
NOTICE.mdandLICENSES/.
Do not sell the full package or relicense Farbs' assets. This is an unofficial port and is not affiliated with or endorsed by Farbs. The notices are a good-faith summary, not legal advice.
What is here
game.py— official ROM CHECK FAIL 1.1 source, ported to Python 3, with a 10-second round timer and optional ROM CHECK GO balance.main.py— window, main loop, scaling, fullscreen and test flags.Pycap.py— pygame implementation of drawing, sound, music and input.PycapRes.py— image/sound/tune/font loading plus the glitch effects.res/— original game assets.music/— the 35 MIDI tunes pre-rendered to OGG.install.sh— creates.venvand installs dependencies.LICENSE— MIT terms for the port code andgame.py.NOTICE.md— provenance, asset/music licensing and distribution notes.ASSETS.md— how to supply assets for the source-only package.LICENSES/— GPL-2 and TimGM6mb notices for the music renditions.tools/render_music.py— optional MIDI-to-OGG renderer.tools/smoke_test.py— headless test of every player/enemy/environment.tools/install_desktop.sh— installs a desktop-menu entry.tools/make_dist.sh— builds the distribution archives.
Differences from the original
- Python 2.5 -> Python 3 (
rangehandling, integer division, portable paths). - The original Pycap C++ framework was replaced by pygame-ce. Pycap's update delta is in centiseconds, so at 60 fps the game receives ~1.667 per frame, not 1.0.
- Images are composed from the RGB file plus its optional
_alpha-mask file, matching SexyAppFramework. Alpha-only assets (Pac-Man, invaders, moon tiles, fonts) are treated as white images modulated by the mask. - MIDI music is pre-rendered to OGG with FluidSynth because MIDI playback through SDL_mixer requires a configured General MIDI synthesizer and Timidity/GUS patches; pre-rendering avoids that runtime dependency.
- The round timer runs for 10 seconds (1000 centiseconds) instead of the 1.1 source's 5 seconds. The glitch warning starts one second before each swap.
- By default the Invader and Asteroids player balance follows Farbs' 2016
ROM CHECK GO: Invader moves at 1.5x speed with a 150-centisecond death
time, and Asteroids acceleration is 0.075. Pass
--classicto restore the stock 1.1 values (Invader 1.0 speed and 200 death time; Asteroids 0.05 acceleration). - The startup test pattern uses the shipped 1.0 timing (
0.01) instead of the 1.1 source's0.001. The latter would hold it for about 10 seconds; 0.01 gives the intended ~1 second.
High scores are stored in save.json (ignored by git).
Related games
- ROM CHECK FAIL (2008), the original freeware game by Farbs: https://www.farbs.org/romcheckfail.php. The Windows release is https://farbs.org/ROM%20CHECK%20FAIL%20Setup.exe.
- ROM CHECK GO (2016), Farbs' speedrun-friendly variation: https://farbs.org/, https://www.speedrun.com/rcg, and http://farbs.org/ROMCHECKGO.v0.1.zip. It is a separate Windows release, not part of this port.
- ROM CHECK PANIC! (2026), a fan sequel/remake by plourples: https://plourples.itch.io/rom-check-panic. It is not by Farbs, is not affiliated with this port, and is not included here.
Upstream and existing ports
- Farbs released the game's source under the MIT license in 2011; the official 1.1 source archive is https://www.farbs.org/ROMCHECKFAIL/game.zip.
- The only existing native Linux package found was the original 32-bit
TuxCap-based build (AUR
lib32-romcheckfail-bin). It needs old 32-bit SDL 1.2 libraries and is not maintained; this port is 64-bit and uses pygame-ce.