--- title: HTPC Bazzite — Proton Compatibility created: '2026-05-23' updated: '2026-05-27' type: tech namespace: personal tags: - htpc - infra - how-to - pitfalls - vk-play - atomic-heart sources: - family/projects/htpc-windows-games-fix.md confidence: medium --- # 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 Games Fallout 4, Vladik Brutal, Red Alert 3, GTA V, Cuphead. Samurai Gunn works but gamepad is not detected. ## Common Fix Recipes ### "Doesn't start" → try vcrun2019 For UE3/UE4 and modern Windows titles missing Visual C++ runtime: ``` 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%` in Steam launch options 2. `WINEDLLOVERRIDES=\"gdiplus=n,b\"` 3. Install `ttf-mscorefonts` manually + 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 Experimental и 7+/8+/9+ ломают текстуры — известный регресс. **Лучший фикс** — заменить движок через Luxtorpeda: 1. Совместимость → **Luxtorpeda** (установлен в compatibilitytools.d) 2. При запуске выбрать **rbdoom-3-bfg** (нативный Linux движок) 3. LaunchOptions очищены (`PROTON_USE_WINED3D=1` больше не нужен) ## VK Play / VK GameCenter на Bazzite ### Общая схема VK Play версии игр запускаются через лаунчер VK GameCenter (`GameCenter.exe`) поверх Proton. Игра устанавливается средствами VK Play, лаунчер отвечает за авторизацию и лицензирование (в т.ч. Denuvo-эмуляцию). ### Steam shortcuts | Shortcut | AppID (signed) | AppID (unsigned) | Proton | Путь | |----------|----------------|-------------------|--------|------| | VK GameCenter | `-555655402` | `3739311894` | GE-Proton10-34 | `/run/media/bazzite/Windows/users/mallexxx/AppData/Local/GameCenter/GameCenter.exe` | | Atomic Heart VK | `-475792602` | `3819174694` | GE-Proton10-34 | `/run/media/bazzite/Data/gamecenter/atomic heart/AtomicHeart.exe` | ### VK Play + Proton: известные проблемы и решения - **Авторизация:** лаунчер использует `mycomgames://` URL-схему для браузера. Может потребоваться ручной ввод логина/пароля или обработчик схемы (через Lutris конфиг). - **vcredist:** на Steam Deck гайдах рекомендуется установить Visual C++ runtime через protontricks перед первым запуском. - **Совместимость:** VK Play официально подтвердил совместимость Atomic Heart со Steam Deck/Proton. - **Альтернатива через Lutris:** есть готовый `vk_play_lutris.yml` с обработчиком `mycomgames://` схемы (источник: gist.github.com/keyCat). ### Запуск VK Play игры 1. Запустить VK GameCenter через Steam (GE-Proton10-34) 2. Авторизоваться в VK Play 3. Установить игру через лаунчер (в данном случае Atomic Heart установлен заранее) 4. После авторизации игра появится в библиотеке VK Play, можно запускать ## Key Infra Notes - **shortcuts.vdf**: binary VDF at `~/.steam/steam/userdata/147839491/config/shortcuts.vdf` Edit with Steam closed: `systemctl --user stop gamescope-session-plus@steam.service` - **CompatToolMapping**: `~/.steam/steam/config/config.vdf` — per-AppID Proton override - **Wine prefix**: `~/.local/share/Steam/steamapps/compatdata//pfx/` - **protontricks**: Flatpak, needs xvfb + flatpak filesystem permission to `~/.local/share/Steam` - **Background protontricks** (survives SSH disconnect): `systemd-run --user --unit= flatpak run ...` - **shortcuts.vdf бэкапы:** хранятся в той же папке, именованные `shortcuts.vdf.bak-*`. Автоматический daily backup через saves-backup.service в `/run/media/bazzite/Data/backups/saves/shortcuts/shortcuts.vdf.YYYY-MM-DD`. ## BTRFS / Backups - **saves-backup.service** — systemd user service, ежедневный rsync Steam userdata + копия shortcuts.vdf с ротацией 30 дней. - После изменений shortcuts.vdf: cp в `shortcuts.vdf.whale-restored-YYYY-MM-DD` в той же папке. ## Added Games | Game | AppID (unsigned) | Path | Proton | |------|-----------------|------|--------| | Atomic Heart (insaneramzes) | 2234736297 | `/run/media/bazzite/Data/games/atomic.heart.ultimate.edition-insaneramzes/atomicheart.exe` | GE-Proton10-34 | | VK GameCenter | 3739311894 | `/run/media/bazzite/Windows/users/mallexxx/AppData/Local/GameCenter/GameCenter.exe` | GE-Proton10-34 | | Atomic Heart VK | 3819174694 | `/run/media/bazzite/Data/gamecenter/atomic heart/AtomicHeart.exe` | GE-Proton10-34 | | Doom 3 BFG | 3602815006 | `/run/media/bazzite/Data/games/doom 3 bfg edition/doom3bfg.exe` | Luxtorpeda → rbdoom-3-bfg | ## Broken Status | Game | AppID | Issue | Next | |------|-------|-------|------| | Atomic Bomberman | 2875360586 | DOS-era; 0x0 memory read | DOSBox wrapper | | Brawlhalla | 2410005953 | Won't start | Try `Brawlhalla.exe` entry-point | | Duck Game | 2926094216 | XNA 4.0 missing | Wait for `xna40` install | | Worms W.M.D | 3846411911 | UE3 + anti-tamper | `vcrun2019 + d3dcompiler_47` | | Metro Exodus | 3594910936 | steam_api64.dll | Goldberg + appid.txt | | Castle Crashers | 3048471472 | Mini-dump crash | `vcrun2019 dotnet48` | ## Gamepad Issues - **Samurai Gunn, Super Bomberman R2**: not detected → try Steam Input "Force Off" → "Use Default" cycle → or `SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD=1` - **Metal Slug X**: wrong speed in Neo-Geo wrapper → check emulator settings ## How to Add a Non-Steam Game via VDF **Шаг 0: Остановить Steam** ``` systemctl --user stop gamescope-session-plus@steam.service ``` **Шаг 1: Прочитать shortcuts.vdf backup** ``` python3 -c " import vdf with open('shortcuts.vdf.bak-eagle', 'rb') as f: data = f.read() d = vdf.binary_loads(data) # modify d['shortcuts'] with open('shortcuts.vdf', 'wb') as f: f.write(vdf.binary_dumps(d)) " ``` **Шаг 2: Добавить CompatToolMapping в config.vdf** AppID в CompatToolMapping — unsigned uint32. Если в shortcuts.vdf appid signed (-555655402), то unsigned = signed & 0xFFFFFFFF (3739311894). **Шаг 3: Запустить Steam, проверить** **Критически важно:** - signed appid в shortcuts.vdf и unsigned в config.vdf — это один и тот же appid - Не редактировать файлы при запущенном Steam — он перезапишет - Делать бэкап перед любыми изменениями - vdf.binary_loads ищет ключи с точным регистром: `AppName`, не `appname` ## VDF Troubleshooting ### shortcuts.vdf испорчен (все записи пустые) Steam перезаписывает VDF при старте если не понимает ручные правки. Восстановление: скопировать один из бэкапов (bak-eagle, bak-launch и т.д.) и добавить нужные новые записи заново. Бэкапы в том же каталоге: `shortcuts.vdf.bak-eagle` (23 мая, 106 записей, последний чистый до экспериментов). Проверка бэкапа: ```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") ``` ### AppID mismatch: shortcuts.vdf vs config.vdf Steam хранит appid как unsigned uint32 в CompatToolMapping, но в shortcuts.vdf как signed int32. При добавлении нового шортката через VDF нужно сгенерировать новый appid (signed int32) и добавить его же (unsigned) в CompatToolMapping. ### Бэкап после восстановления ``` cp shortcuts.vdf shortcuts.vdf.whale-restored-YYYY-MM-DD ``` ## SteamGridDB API key хранится в `~/Documents/steamgriddb_api_key.txt` на HTPC. Текущий ключ: `5f0a7cb3366dede2c10860a95795ce60` (обновлён: 2026-05-23, regenerated). Скрипты постеров: `~/scripts/update-artwork.sh` (или аналог). Запускать после добавления новых шорткатов. ## See Also [[personal-os-architecture]] [[obsidian-mcp-wrapper]] [[family/how-to/htpc-steam-nonsteam-shortcuts]]