Troubleshooting
Start with ibf doctor
ibf doctorIt 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-gamedrives 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: whetherextension.dllfound 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 (asgame), and every bot's (asbot:<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).