208 lines
9.6 KiB
Markdown
208 lines
9.6 KiB
Markdown
---
|
||
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 <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%` 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/<AppID>/pfx/`
|
||
- **protontricks**: Flatpak, needs xvfb + flatpak filesystem permission to
|
||
`~/.local/share/Steam`
|
||
- **Background protontricks** (survives SSH disconnect):
|
||
`systemd-run --user --unit=<name> 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]]
|