AI-ported games: does it run?
A second pass over the repositories that built in the clean-room build check. Each one is built again on a fresh runner, and the program the build produced is launched under a virtual display with no game files present. The question is narrow: what does a player see in the first 45 seconds, before adding their own copy of the game? A window, a crash, a usage screen from a command-line tool, or a message asking for a ROM or disc image. It is not a test of whether the game plays, and the Works, Partial and Research labels are the outcomes each project reported on the source list, not ours.
As of October 29, 2026. Raw data: /data/ai-ports-smoke.json. CC BY 4.0.
What happened on launch
| outcome | meaning | Works | Partial | Research | all |
|---|---|---|---|---|---|
| window_opened_kept_running | opened a window and kept running | 0 | 3 | 0 | 3 |
| exited_clean | exited cleanly | 0 | 2 | 0 | 2 |
| exited_asking_for_files | exited asking for files | 3 | 1 | 0 | 4 |
| printed_usage | printed a usage screen (a command-line tool, not a game) | 5 | 5 | 4 | 14 |
| ran_self_test | ran its own self-test and passed (a check program, not a game) | 0 | 2 | 0 | 2 |
| missing_runtime_library | started, then a system library was missing on the runner | 1 | 1 | 0 | 2 |
| vendored_tool_only | built only a vendored dependency | 0 | 1 | 0 | 1 |
| tests_or_libraries_only | the build produced only test programs and libraries | 2 | 3 | 0 | 5 |
| nothing_built | the build command ran and produced no targets at all | 6 | 1 | 1 | 8 |
| no_native_program | builds a package or a web app, nothing to launch natively | 6 | 2 | 0 | 8 |
| not_built | did not build this time | 0 | 1 | 0 | 1 |
Every README in this set says the player must supply the original game (50 of 50match the strict phrases). The launch pass records which programs say so themselves, which open a window anyway, and which never produced anything to launch.
Every repository
| id | repository | reported | build | on launch | program | windows | exit | files it asked for |
|---|---|---|---|---|---|---|---|---|
| w007 | sedthh/batch_and_vibe | Works | python | no_native_program | 0 | |||
| w009 | Druthulu/BFM-decomp | Works | make | nothing_built | 0 | |||
| w020 | z3xox/Tenkaichi3Decomp | Works | build_sh | missing_runtime_library | <repo>/port/build_release/bt3_64 | 0 | 127 | libSDL3.so |
| w022 | r331/driver | Works | cmake | exited_asking_for_files | <build>/driver | 0 | 1 | |
| w023 | maxgraf96/ee-macos | Works | cmake | nothing_built | 0 | |||
| w025 | ethannicholas/fzerogx-recomp | Works | cmake | tests_or_libraries_only | 0 | |||
| w031 | jkdansereau/goldeneye-pc-port | Works | cmake | exited_asking_for_files | <build>/ge007.x86_64 | 0 | 1 | /tmp/build/data/ge007.ini, baserom.u.z64, data/ge007.ini, ge007.ntsc-final.z64 |
| w038 | griches/JamesPond2RobocodRecomp | Works | cmake | printed_usage | <build>/jp2-recomp | 0 | 1 | cov.bin |
| w044 | AlmazProud/metal-slug-5-recomp | Works | cmake | printed_usage | <build>/src/dump_cycles | 0 | 2 | output.bin |
| w045 | hivvu/scale-miniatures | Works | npm | no_native_program | 0 | |||
| w047 | kDylanHayes/mystery-house-decompilation | Works | build_sh | nothing_built | 0 | |||
| w051 | blakebratcher/ntm-decomp | Works | make | nothing_built | 0 | |||
| w054 | Jared-woodruff/OMF-2097-Remastered | Works | npm | no_native_program | 0 | |||
| w056 | PS1Recomp/ps1-recomp | Works | cmake | printed_usage | <build>/ps1Runtime/ps1Runtime | 0 | 1 | |
| w064 | vibecodekun/shantaerecomp | Works | cmake | printed_usage | <build>/bin/gbrecomp | 0 | 1 | .gb/.gbc |
| w069 | ogdanimal/SkiesOfArcadiaLegends-Recomp | Works | make | nothing_built | 0 | |||
| w076 | pakompom/SpaceRangers1_decomp | Works | cargo | printed_usage | <repo>/target/release/decomp | 0 | 2 | |
| w084 | dyzz/srw64-recomp | Works | cmake | tests_or_libraries_only | 0 | |||
| w090 | TekRantGaming/simpsons-wrestling-recompiled | Works | cmake | exited_asking_for_files | <build>/SimpsonsWrestling_Recompiled | 0 | 1 | /path/to/SCPH1001.BIN, /path/to/game.cue, /tmp/build/overlay_captures.json |
| w093 | jbeaumont/ultima4-companion | Works | npm | no_native_program | 0 | |||
| w094 | rehan-remade/universal-modder | Works | python | no_native_program | 0 | |||
| w097 | mr-finster/vf1-recomp | Works | make | nothing_built | 0 | |||
| w100 | s-macke/weltendaemmerung | Works | npm | no_native_program | 0 | |||
| p002 | librematch/genie | Partial | cargo | printed_usage | <repo>/target/release/gsk | 0 | 2 | |
| p003 | GeneralPawz/acr | Partial | cargo | exited_clean | <repo>/target/release/AmericanConquest | 0 | 0 | |
| p004 | minty-hippo/amped3revamped | Partial | cmake | window_opened_kept_running | <build>/amped3-launcher | 1 | ran out | |
| p006 | byroweb/AC1_RE | Partial | make | ran_self_test | <repo>/re/build/mission_sim | 0 | 0 | |
| p009 | openblack/bw1-decomp | Partial | make | vendored_tool_only | <repo>/src/zlib/minigzip | 0 | 0 | |
| p024 | Igrise12/DQVIIIPC | Partial | cmake | printed_usage | <build>/src/host/dq8-game | 0 | 2 | |
| p025 | victor-takai/dragon-valor-recomp | Partial | cmake | window_opened_kept_running | <build>/DragonValorRecompiled | 1 | ran out | /tmp/build/overlay_captures.json |
| p031 | VinceIP/fci-recomp | Partial | python | no_native_program | 0 | |||
| p043 | abhinavt0681/hitman-contracts_clone | Partial | cargo | missing_runtime_library | <repo>/target/release/hitman_clone | 0 | 101 | libxkbcommon-x11.so |
| p046 | mrOt4/babel-recomp | Partial | cmake | window_opened_kept_running | <build>/babel-recomp | 1 | ran out | config.ini, keybinds.ini |
| p051 | Yokimitsuro/khdays-port | Partial | cmake | tests_or_libraries_only | 0 | |||
| p052 | sonofskywalker3/khdays-358-android | Partial | cmake | tests_or_libraries_only | 0 | |||
| p053 | Cor3Duo/kirikae | Partial | cargo | exited_clean | <repo>/target/release/kirikae | 0 | 0 | |
| p057 | AndrewAltimit/legend-of-legaia-re | Partial | cargo | exited_asking_for_files | <repo>/target/release/asset-viewer | 0 | 1 | disc.bin, extracted/PROT.DAT |
| p060 | AlmazProud/metal-slug-3-recomp | Partial | cmake | printed_usage | <build>/src/dump_cycles | 0 | 2 | output.bin |
| p066 | ptitty12/mvp2005-decomp | Partial | cmake | printed_usage | <build>/mods/mvp-pack | 0 | 2 | |
| p077 | wastelandgunner/pokemon-colosseum-recompiled | Partial | cargo | printed_usage | <repo>/target/release/colo-tool | 0 | 0 | file.dat, scene.json |
| p080 | thebardockgames/Precursor | Partial | cmake (timeout) | not_built | 0 | |||
| p092 | TheRealestNwah/sotc-decomp | Partial | python | no_native_program | 0 | |||
| p111 | seco560/OpenTonic | Partial | make | ran_self_test | <repo>/core/build/playcheck | 0 | 0 | |
| p119 | ethannicholas/bluestorm-recomp | Partial | cmake | tests_or_libraries_only | 0 | |||
| p126 | ILFforever/YW4Recomp | Partial | cmake | nothing_built | 0 | |||
| r002 | ekwoka/Battlefield-2142-Decomp | Research | cmake | printed_usage | <build>/src/Main/bf2142 | 0 | 2 | symbols/BF2142.exe |
| r003 | Yharnam-Hunters/Paleblood | Research | cmake | printed_usage | <build>/runtime/pbboot | 0 | 2 | NID_DB.xml, OUT.json |
| r006 | gustavocanepa/gt4-native | Research | cmake | printed_usage | <build>/gt4_elf_inspect | 0 | 2 | |
| r011 | bitplane/nokia-dct3-re | Research | make | nothing_built | 0 | |||
| r014 | rages4calm/pcenginerecomp | Research | cmake | printed_usage | <build>/pce-checkpoint-probe | 0 | 1 |
Method
Every repository that built in the clean-room pass was built again on a fresh GitHub-hosted runner, then the most likely executable the build produced was launched under a virtual X display with dummy audio and no game files present, for at most 45 seconds. After 20 seconds the harness counted X windows. The exit code, the window list, and the last lines of output decide the outcome. No paid or proprietary file was supplied; the question is what a player sees before adding their own copy of the game.
The executable is chosen among the files the build produced: ELF programs newer than the clone, excluding libraries, tests and CMake probes, with vendored directories picked last and flagged. The program runs from its own directory with dummy audio under Xvfb. After 20 seconds the harness lists the X windows; at 45 seconds it stops the program. The exit code, the window list and the last lines of output decide the outcome. Builds that produce a Python package or a web app have nothing to launch natively and sit in their own bucket. The step is the smoke input of the public harness at github.com/major-matters/ai-port-build-check.
Limitations
- A window under Xvfb with software rendering is not a desktop with a GPU. A program that needs Vulkan or a real OpenGL context may fail here and work on a player's machine.
- The executable picker is a heuristic. When a build produces several programs the largest game-like one is chosen; the candidate count is recorded so a wrong pick can be seen.
- Forty-five seconds is enough to reach a title screen or a file check, not to prove anything about play.
- "Asked for files" comes from a word list over the program's own output. A program that exits silently without its data is recorded as an error, not a request.
- No game file, ROM, disc image or BIOS was supplied at any point. The pass records what the programs say they need; it does not judge the legality of obtaining them.
See also: does it build?, the MCP open data, build log.