--- confidence: medium created: '2026-05-23' namespace: personal sources: - family/projects/htpc-windows-games-fix.md tags: - htpc - infra - how-to - pitfalls - vk-play - atomic-heart - vdf - doom title: HTPC Bazzite — Proton Compatibility type: tech updated: '2026-05-27' --- # HTPC Bazzite — Windows Game Proton Compatibility Bazzite HTPC at `bazzite@192.168.1.86`. 39 non-Steam Windows games added as Steam shortcuts (2026-05-22). Default tool: Proton Experimental; older titles on Proton 8.0. --- ## Working ✅ - Fallout 4 - Vladik Brutal - Red Alert 3 - **Rayman Origins** (fixed 2026-05-23 — GE-Proton10-34 + `WINEDLLOVERRIDES=\"d3d9=b\" %command%`) - Samurai Gunn (works but **gamepad not detected**) - GTA V, Cuphead (assumed; not retested) |- **VK GameCenter** (GE-Proton10-34, shared prefix c Lutris, авторизация через Lutris + `vk-login-helper`) |- **Atomic Heart VK** (через VK GameCenter, 97GB, `Data/gamecenter/atomic heart/`, URL-схема `vkplay://play/0.2015959`) - **Doom 3 BFG** (через flatpak Classic-RBDOOM-3-BFG) ## Removed from Steam shortcuts ✅ - Human Fall Flat (3928445186) — already in real Steam - Shovel Knight (2526703384) — already in real Steam ## Mapped to GE-Proton10-34 but still broken | Game | AppID | Symptom | LaunchOpt set | |------|-------|---------|---------------| | Brawlhalla | 2410005953 | Doesn't start | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` | | Castle Crashers | 3048471472 | "crash, mini dump sent" | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` | | Worms WMD | 3846411911 | Doesn't start | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140,d3dcompiler_47=n,b\"` | | Worms World Party | 2401592779 | Doesn't start | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` | | Duck Game | 2926094216 | Won't launch | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` | - **Doom 3 BFG** (flatpak, appid `-2113091226`) — работает ✅ - **Atomic Heart VK / VK GameCenter** — VK GameCenter запускается через Steam (GE-Proton10-34). Atomic Heart (97GB) установлен через GameCenter на Data. Exe GameCenter скопирован на Data (не на Windows/ — read-only). Symlink `d:` в dosdevices ведёт на `/run/media/bazzite/Data`. ## Target: ## Still broken — fundamental issues | Game | AppID | Symptom | What's known | What might help | |------|-------|---------|--------------|-----------------| | Atomic Bomberman / BM95 | 2875360586 | Crash "instruction at 0x0 referenced 0x7" | Win3.1-era PE32. Tried: `proton_8`, registry `Version=win98`, virtual desktop 640×480, WineBus controllers off | Dedicated 32-bit `WINEARCH=win32`; or DOSBox‑X | | Discworld Noir | 2361018632 | "Please insert disk III" | Russian 2-CD "Zatmenie v2". 69 missing files copied ✅. Drive D: → cd2 as CD-ROM | Try cd1; or mount `.nrg` images | | Final Fantasy X HD | 2642741094 | Was Japanese, no saves | `GameSetting.ini` replaced (en+HD) from Windows | Test pending | | Metal Slug X | 2938712902 | Speed wrong, controls dead | Neo-Geo emulator config issue, not Wine | — | | Metro Exodus | 3594910936 | "Unable to create interface isteamuser" | VC++ runtime copied | Needs Goldberg `steam_api64.dll` + `steam_appid.txt` | | Split Second | 3871231787 | Green artifacts | `PROTON_USE_WINED3D=1` | Switch to GE-Proton; copy `d3dx9_*.dll` | | Super Bomberman R2 | 3340354231 | Gamepad not detected | Steam Input config issue | — | ## Gamepad Issues - **Samurai Gunn, Super Bomberman R2**: not detected → Steam Input "Force Off" / "Use Default" cycle; or `SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD=1` - **Metal Slug X**: wrong speed in Neo-Geo wrapper --- ## Common Fix Recipes ### "Doesn't start" → try vcrun2019 ``` protontricks vcrun2019 d3dcompiler_47 ``` ### XNA 4.0 games (Duck Game, etc.) ``` protontricks xna40 ``` ### DOS-era games (e.g. Atomic Bomberman) Proton won't work. Use **Steam Tinker Launch** → wrap with DOSBox (dosbox-staging). ### Non-Steam copy of a Steam game (e.g. Metro Exodus) Game needs `steam_api64.dll` emulator: 1. Drop in Goldberg `steam_api64.dll` 2. Add `steam_appid.txt` with the real App ID (e.g. 412020 for Metro Exodus Enhanced) ### Cyrillic encoding issues (e.g. Discworld Noir) Try in order: 1. `LANG=ru_RU.UTF-8 %command%` 2. `WINEDLLOVERRIDES=\"gdiplus=n,b\"` 3. Install `ttf-mscorefonts` + set Cyrillic codepage in Wine registry ### White screen / broken D3D9 (Rayman Origins, Split Second) ``` PROTON_USE_WINED3D=1 %command% ``` Or try `WINEDLLOVERRIDES=\"d3d9=b\"` or an older Proton version. ### Doom 3 BFG Edition — чёрные текстуры, краш после интро Proton ломает текстуры — известный регресс. **Фикс:** Luxtorpeda → rbdoom-3-bfg (native Linux engine). --- ## VK Play / VK GameCenter на Bazzite ### Аккаунты VK Play - **Основной:** `xxxellam@gmail.com` — Google, залогинен на Bazzite - **Дополнительный:** `mallexxx@mail.ru` — подключён к VK Play ### Общая схема VK Play версии игр запускаются через лаунчер VK GameCenter (`GameCenter.exe`) поверх Proton. Лаунчер отвечает за авторизацию и лицензирование (в т.ч. Denuvo-эмуляцию). Известно: - VK Play официально подтвердил совместимость Atomic Heart со Steam Deck/Proton. - Для авторизации используется `mycomgames://` URL-схема. На HTPC без Steam Deck API может потребоваться ручной ввод логина/пароля. - Альтернатива: Lutris с конфигом из gist.github.com/keyCat (обработчик `mycomgames://` схемы). - Перед первым запуском может понадобиться `protontricks -555655402 vcrun2019`. ### Как добавить VK Play игру 1. Запустить VK GameCenter через Steam (GE-Proton10-34) 2. Авторизоваться в VK Play 3. Установить игру через лаунчер (Atomic Heart уже установлен) 4. После авторизации игра появится в библиотеке VK Play ### Lutris login workaround (shared prefix with Steam/Proton) **Проблема:** Steam CEF browser не умеет обрабатывать `mycomgames://` URL-схему, необходимую для OAuth-логина VK Play. При клике "Login" — `ERR_NETWORK_IO_SUSPENDED`. **Решение:** использовать Lutris для первичной авторизации, потом запускать игру через Steam/Proton. ### Implementation status (2026-05-28) Все компоненты настроены через SSH (Kraken → HTPC). Последний шаг (логин) требует GUI-сеанса на HTPC. | Component | Status | Notes | |-----------|--------|-------| | `d:` dosdevices symlink (→ Data) | ✅ | `/run/media/bazzite/Data` | | `handle-vkplay-scheme` script | ✅ | `~/.local/bin/` — обрабатывает `mycomgames://` через Proton 10.0 | | `.desktop` → MIME `x-scheme-handler/mycomgames` | ✅ | Зарегистрирован на `Vkplay-scheme-handler.desktop` | | Lutris flatpak | ✅ | `flathub net.lutris.Lutris` | | Lutris game config (shared prefix) | ✅ | `~/.config/lutris/games/vk-play-shared.yml` | | `start-vk.cmd` in Proton prefix | ✅ | `drive_c/VKPlay/gamecenter/start-vk.cmd` | | Steam shortcut VK GameCenter | ✅ | AppID=-1973339958, GE-Proton10-34 | | Steam shortcut Atomic Heart VK | ✅ | AppID=-1973339958 (через GameCenter) | | Atomic Heart installed (97GB) | ✅ | `/run/media/bazzite/Data/gamecenter/atomic heart/` | **Осталось сделать (на HTPC в десктоп-режиме):** 1. Открыть Lutris → VK Play Game Center → Login 2. Авторизоваться в браузере, разрешить `mycomgames://` 3. Вернуться в игровой режим 4. Запустить Atomic Heart через Steam → ожидать что токен в shared prefix работает 1. Установить Lutris через flatpak: ``` flatpak install flathub net.lutris.Lutris ``` 2. Создать кастомный пресет VK GameCenter в Lutris, указав **тот же Wine prefix**, что использует Steam: ``` ~/.local/share/Steam/steamapps/compatdata/-1973339958/pfx/ ``` 3. Зарегистрировать `mycomgames://` protocol handler — поместить .desktop-файл, который ассоциирует схему с Lutris: - Референс: https://gist.github.com/keyCat/a77b1d4d1e0f651b9d3a9818e7f739c5 4. Выполнить логин через Lutris — откроется внешний браузер, авторизация сработает, редирект `mycomgames://` попадёт в Lutris. 5. После успешного логина запускать игру через Steam — токен уже лежит в shared prefix, `mycomgames://` больше не нужен. **Почему shared prefix:** игра (Atomic Heart, 97GB) НЕ копируется — она уже установлена в `/run/media/bazzite/Data/gamecenter/atomic heart/` через Steam-версию VK GameCenter. Lutris будет использовать тот же префикс, где уже есть dosdevices symlink `d:` → `/run/media/bazzite/Data` и все токены авторизации. --- ## How to Add a Non-Steam Game via VDF **Шаг 0: Остановить Steam** ``` systemctl --user stop gamescope-session-plus@steam.service ``` **Шаг 1: Прочитать shortcuts.vdf backup** AppID в shortcuts.vdf — signed int32. В config.vdf CompatToolMapping — unsigned uint32. ```python import vdf # read backup with open('shortcuts.vdf.bak-eagle', 'rb') as f: d = vdf.binary_loads(f.read()) # edit d['shortcuts'] # write with open('shortcuts.vdf', 'wb') as f: f.write(vdf.binary_dumps(d)) ``` **Шаг 2: Добавить CompatToolMapping в config.vdf** Unsigned appid = signed & 0xFFFFFFFF. **Шаг 3: Запустить Steam, проверить** **Критически важно:** - Редактировать ТОЛЬКО при остановленном Steam - Делать бэкап **до** изменений - `vdf.binary_loads` — регистрозависим: `AppName`, `Exe`, а не `appname`, `exe` --- ## VDF Troubleshooting ### shortcuts.vdf испорчен (все записи пустые) Steam перезаписывает VDF при старте если не понимает ручные правки. Восстанавливай из бэкапа. **Бэкапы** (в `~/.steam/steam/userdata/147839491/config/`): | Файл | Дата | Entries | Примечание | |------|------|---------|------------| | `shortcuts.vdf.bak-eagle` | 23 мая 18:32 | 106 | **Последний чистый бэкап** — не тронут | | `shortcuts.vdf.bak-launch` | 22 мая 22:25 | 108 | Старый, без Atomic Heart | | `shortcuts.vdf.whale-restored-YYYY-MM-DD` | по ситуации | 108 | Текущее состояние после восстановления | | `/run/media/bazzite/Data/backups/saves/shortcuts/shortcuts.vdf.YYYY-MM-DD` | daily | — | Автоматический через saves-backup.service | Проверка бэкапа: ```python import vdf with open("shortcuts.vdf.bak-eagle", "rb") as f: d = vdf.binary_loads(f.read()) named = sum(1 for e in d["shortcuts"].values() if e.get("AppName")) print(f"{named} named entries") ``` ### VDF Incident — 2026-05-27 (разбор) **Что произошло:** при попытке добавить VK GameCenter + Atomic Heart VK через Python vdf на работающем Steam, Steam переписал файл при старте, создав 110 пустых записей-заглушек. **Почему бэкапы тоже пустые:** все бэкапы были сделаны уже после того как Steam испортил файл. Единственный выживший — `bak-eagle` (23 мая, до начала экспериментов). **Как нашли:** hexdump показал имена игр, но `vdf.binary_loads` не видел их — проблема в регистре ключей (`AppName`, а не `appname`). **Как восстановили:** 1. Остановлен Steam 2. Считан `bak-eagle` (106 записей) + добавлены VK GameCenter (index 106) и Atomic Heart VK (index 107) 3. Обнаружено что config.vdf уже имеет CompatToolMapping с другими appid от предыдущих попыток 4. Перегенерация с appid, совпадающими с config.vdf 5. Удалены дублирующиеся unsigned записи из config.vdf 6. Создан `shortcuts.vdf.whale-restored-2026-05-27` **Уроки:** - Только при остановленном Steam - Бэкап ДО изменений - Проверять signed↔unsigned соответствие - Регистр ключей в vdf.binary_loads --- ## Key Infra Notes - **shortcuts.vdf**: `~/.steam/steam/userdata/147839491/config/shortcuts.vdf` (binary VDF) - **config.vdf**: `~/.steam/steam/config/config.vdf` (text VDF, CompatToolMapping block) - **Wine prefix**: `~/.local/share/Steam/steamapps/compatdata//pfx/` - **protontricks**: Flatpak, needs `flatpak override --user --filesystem=/var/home/bazzite/.local/share/Steam` - **Background jobs**: `systemd-run --user --unit=` - **GE-Proton**: extract tar.gz into `~/.steam/steam/compatibilitytools.d/`, restart Steam ### saves-backup.service Systemd user service (`/etc/systemd/user/saves-backup.service`): - Ежедневный rsync Steam userdata - Копия shortcuts.vdf в `/run/media/bazzite/Data/backups/saves/shortcuts/shortcuts.vdf.YYYY-MM-DD` - Ротация: удаление старше 30 дней --- ## Fixes Done (filesystem / config / cover-art) - Cover art swapped: Atomic Bomberman, Discworld Noir, SBR2, FFVI, ALttP, Sunset Riders - "Captain Commando" → "Sunset Riders" - CompatToolMapping for all AppIDs: - **GE-Proton10-34**: Brawlhalla, Castle Crashers, Worms WMD/WP, Duck Game, Rayman Origins, VK GameCenter, Atomic Heart VK, insaneramzes Atomic Heart - **Proton 8.0**: Atomic Bomberman, Discworld Noir, Metal Slug X, Soldat, Red Alert 3, Split Second - **Luxtorpeda**: Doom 3 BFG - **Proton Experimental**: ~24 remaining games - Doom 3 BFG → Luxtorpeda (rbdoom-3-bfg, 2026-05-27) - Rayman Legends: Ubisoft Connect + registry fix - Discworld Noir: symlink, Cyrillic locale, missing files, drive D: as CD-ROM - FFX HD: English `GameSetting.ini` - VC++ runtime + d3dcompiler DLLs copied into 6 prefixes from Windows partition - Duck Game: XNA 4.0 framework dir copied - Atomic Bomberman: `Version=win98` + virtual desktop 640×480 + WineBus controllers off - GE-Proton10-34 installed ## Source Assets (Windows partition) - Ubisoft Game Launcher: `/run/media/bazzite/Windows/Program Files (x86)/Ubisoft/` - System DLLs: `/run/media/bazzite/Windows/Windows/System32/`, `SysWOW64/` - XNA 4.0: `/run/media/bazzite/Windows/Program Files (x86)/Microsoft XNA/` - .NET 4.0: `/run/media/bazzite/Windows/Microsoft.NET/Framework64/v4.0.30319/` - Discworld Noir source: `/run/media/bazzite/Data/downloads/zatmenie v2 [torrents.ru]/` - FFX settings: `/run/media/bazzite/Windows/Users/mallexxx/documents/square enix/...` ## Open Questions 1. Delete `pfx/` folders for still-broken GE-Proton games (Brawlhalla, Castle Crashers, Worms WMD/WP, Duck Game) 2. Atomic Bomberman: 32-bit Wineprefix outside Proton 3. Discworld Noir: try cd1 or mount `.nrg` images 4. Metro Exodus: Goldberg Steam emulator? 5. **Atomic Heart VK:** test VK Play авторизацию, при необходимости `protontricks vcrun2019` 6. **Doom 3 BFG:** test с Luxtorpeda → rbdoom-3-bfg ## See Also [[personal-os-architecture]] [[obsidian-mcp-wrapper]] [[family/how-to/htpc-steam-nonsteam-shortcuts]]