Files
obsidian-vault/wiki/htpc-bazzite-proton.md
T

313 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 DOSBoxX |
| 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 <AppID> vcrun2019 d3dcompiler_47
```
### XNA 4.0 games (Duck Game, etc.)
```
protontricks <AppID> 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/<AppID>/pfx/`
- **protontricks**: Flatpak, needs `flatpak override --user --filesystem=/var/home/bazzite/.local/share/Steam`
- **Background jobs**: `systemd-run --user --unit=<name>`
- **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]]