Troubleshooting

Start with ibf doctor

ibf doctor

It checks each part and prints a fix for what fails: your Python and the client library; the game folder and its executable's build; the shim, the steam stub and the host, and whether their version matches the package's; the profiles; ibf.toml; the last log. With the game running it also asks the framework inside it: its version, its Direct3D hooks, its profile, its bot pads.

ibf doctor --in-game

drives the running game through a checklist, in about a minute: the menus answer a bot pad, the Navigator starts a versus match, two example bots play a round, and a bot killed mid-round frees its pad within a quarter of a second. Leave the game alone while it runs.

The logs

ibf\logs\ in the game folder:

  • shim.log: whether extension.dll found and loaded the host, and why not;
  • ibf-<date>-<time>-<pid>.log: everything the framework did in one run, the game's own log lines among them (as game), and every bot's (as bot:<name>);
  • crash-<time>.dmp: written if the game crashes; with the symbols zip it shows where.

ibf logs -f follows the newest run's log live, and the console (F2) shows it in the game.

Common problems

ibf setup waits for the Steam download forever. Steam must be running and signed in with the account that owns the game, and the download_depot line must be pasted into the Steam console (it opens at steam://nav/console). The download shows no progress bar; the Downloads page's network graph moves. If it was done before, --source <folder> with the folder Steam printed skips the wait.

The game starts without the framework (no status bar). ibf doctor says which part is missing. The usual causes: the game was updated or verified by Steam, which puts the protected Inversus.exe and Valve's steam_api.dll back (run ibf setup again); ibf.toml has a syntax error (the log and ibf doctor name the line); IBF_DISABLE=1 is set; or an antivirus removed or blocked extension.dll or ibf_host.dll (allow the game folder).

The game ignores my keyboard and mouse. That is on purpose, so typing elsewhere cannot steer a match bots are playing. Press F5 (the status bar shows "input on"), with the game window in focus.

ibf run says the pad is not a bot pad. Bots can only play the slots listed in [input] bot_pads of ibf\ibf.toml, which the game reads when it starts. ibf setup sets [0, 1]; restart the game after changing it.

ibf run says the pad belongs to another client. Another bot holds it: stop it, or take the pad with --force. ibf cmd bots lists who plays what.

A bot loads but does nothing in the menus. On purpose: a bot's pad is neutral outside play. Start matches with ibf match, or by hand (F5, then the menus); a bot that should drive the menus sets menus = True.

ImportError: ibf_client.dll ... was not found or "would not load". The package for the other bitness was installed: a 64-bit Python needs the win_amd64 wheel, a 32-bit one the win32 wheel.

"ABI" errors (the host speaks another bridge version). The game has the framework of another release than the package: ibf setup again updates the game's files.

The game is slow while bots play in lockstep. Lockstep waits for the slowest bot every tick; that is its purpose. ibf cmd bots shows each bot's latency. Use real time for normal play.

A plugin does not load. The plugins console command says why: no file, not a 32-bit DLL, no ibf_plugin_entry, declined, or faulted (and where).