From b2ba55fc56f65795e03b7adee0f033f0c09ca160 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Wed, 27 May 2026 17:28:06 +0600 Subject: [PATCH] [2026-05-27] Merged htpcs docs into wiki/htpc-bazzite-proton.md, family/projects points to wiki --- family/projects/htpc-windows-games-fix.md | 123 +--------- wiki/htpc-bazzite-proton.md | 267 +++++++++++++--------- 2 files changed, 164 insertions(+), 226 deletions(-) diff --git a/family/projects/htpc-windows-games-fix.md b/family/projects/htpc-windows-games-fix.md index 57f0a63b..6d00736d 100644 --- a/family/projects/htpc-windows-games-fix.md +++ b/family/projects/htpc-windows-games-fix.md @@ -1,124 +1,5 @@ # HTPC Windows Games — Compat Status -Live status of non-Steam Windows games added to Steam on Bazzite HTPC (`bazzite@192.168.1.86`). Setup started 2026-05-22. +Содержимое объединено с [[wiki/htpc-bazzite-proton]]. -## 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) - -## Removed from Steam shortcuts ✅ -- Human Fall Flat (3928445186) — already in real Steam -- Shovel Knight (2526703384) — already in real Steam - -## Recently added — not yet tested -| Game | AppID (signed) | AppID (unsigned) | Proton | Path | -|------|----------------|-------------------|--------|------| -| 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 через лаунчер. VK Play использует `mycomgames://` URL-схему. Atomic Heart официально совместим со Steam Deck/Proton (подтверждено VK Play). - -## Mapped to GE-Proton10-34 but **still broken** (need further investigation) - -These were swapped to GE-Proton in hopes its bundled VC++/d3dcompiler/dotnet/dxvk-async would fix them. Same symptoms as before — GE-Proton may be reusing the existing prefix's wine state. **Next:** consider deleting `pfx/` to force GE-Proton to regenerate cleanly. - -| 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\"` | - -## Moved to Luxtorpeda — need testing -| Game | AppID | Before | After | Status | -|------|-------|--------|-------|--------| -| Doom 3 BFG | 3602815006 | GE-Proton10-34 (white screen, audio plays) | Luxtorpeda → rbdoom-3-bfg (native Linux engine) | LaunchOptions `PROTON_USE_WINED3D=1` removed ✅ | - -## Still broken — fundamental issues - -| Game | AppID | Symptom | What's known | What might help | -|---|---|---|---|---| -| Atomic Bomberman / BM95 | 2875360586 | Crash "instruction at 0x0 referenced 0x7" before main window | Win3.1-era PE32 (Windows 4.00 subsystem). Tried: `proton_8`, registry `Version=win98`, virtual desktop 640×480, `[Services\\WineBus] Map Controllers=0 + Enable SDL=0`, LaunchOpt `SDL_JOYSTICK_DISABLE=1` | Run in dedicated 32-bit Wineprefix (`WINEARCH=win32`); try Wine ≤ 9.x; or DOSBox‑X | -| Discworld Noir | 2361018632 | "Please insert disk III" prompt (in Russian, after Cyrillic fix) | Russian "Zatmenie v2" 2-CD release. 69 missing files copied ✅. Drive D: → cd2 folder as CD-ROM | Try drive D: → cd1; or mount `.nrg` images | -| Final Fantasy X HD | 2642741094 | Was Japanese, no saves | `GameSetting.ini Language=jp → en` (copied from Windows) | **Test pending** | -| Metal Slug X | 2938712902 | Speed wrong, controls dead | (none) | Neo-Geo emulator config issue, not Wine | -| Metro Exodus | 3594910936 | "Unable to create interface isteamuser" | VC++ runtime copied; LaunchOpt `WINEDLLOVERRIDES` | Needs Goldberg `steam_api64.dll` emulator + `steam_appid.txt` | -| Split Second | 3871231787 | Green artifacts | LaunchOpt `PROTON_USE_WINED3D=1` | Switch to GE-Proton; or copy `d3dx9_*.dll` from Windows | -| Super Bomberman R2 | 3340354231 | Gamepad not detected | (none) | Steam Input config issue | - -## VDF Incident — 2026-05-27 -### Что произошло -При попытке добавить VK GameCenter и Atomic Heart VK в shortcuts.vdf через Python vdf.binary_load/dump на работающем Steam, Steam переписал VDF при старте, создав 110 пустых записей-заглушек. Все бэкапы (bak, bak-launch, bak2-6, clean, timestamped) также оказались пустыми — они были сделаны уже после того как Steam испортил файл. - -### Как восстановили -Обнаружено что `shortcuts.vdf.bak-eagle` (23 мая, 50720 байт) содержит 106 живых шорткатов. Проблема с `vdf.binary_loads` — он ищет ключи с точным регистром: `AppName`, а не `appname`. - -1. Остановлен Steam (`systemctl --user stop gamescope-session-plus@steam.service`) -2. Считан bak-eagle, добавлены записи VK GameCenter (index 106) и Atomic Heart VK (index 107) -3. AppID в shortcuts.vdf — signed int32; в config.vdf CompatToolMapping добавлены как unsigned uint32 -4. После записи обнаружено несоответствие appid — в config.vdf уже были entries с другими appid от предыдущих попыток -5. Перегенерация shortcuts.vdf с appid, совпадающими с config.vdf: VK GameCenter = `-555655402`, Atomic Heart VK = `-475792602` -6. Удалены дублирующиеся unsigned записи из config.vdf -7. Создан бэкап `shortcuts.vdf.whale-restored-2026-05-27` - -### Восстановленный backups -- `shortcuts.vdf.bak-eagle` — 106 entries, чистый, не тронут ✅ -- `shortcuts.vdf.whale-restored-2026-05-27` — 108 entries (106 старых + VK GameCenter + Atomic Heart VK) ✅ - -### Уроки -- Редактировать shortcuts.vdf ТОЛЬКО при остановленном Steam -- vdf.binary_loads: ключи с точным регистром (`AppName`, `Exe`, а не `appname`, `exe`) -- signed appid в shortcuts.vdf → unsigned (signed & 0xFFFFFFFF) в CompatToolMapping config.vdf -- Перед добавлением новой пары шорткат+Proton — проверить, нет ли уже CompatToolMapping с нужным appid в config.vdf -- Делать бэкап ДО любых изменений, а не после - -## Fixes done (filesystem / config / cover-art) -- Cover art swapped: Atomic Bomberman, Discworld Noir, SBR2, FFVI, ALttP, Sunset Riders -- "Captain Commando" Steam shortcut renamed → "Sunset Riders" -- `CompatToolMapping` for all AppIDs in `config.vdf`: - - **GE-Proton10-34**: Brawlhalla, Castle Crashers, Worms WMD, Worms 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 moved to Luxtorpeda → rbdoom-3-bfg (native Linux engine, 2026-05-27) -- Rayman Legends: Ubisoft Connect copied from Windows partition into prefix + registry -- Discworld Noir fixes (symlink, Cyrillic locale, missing files, drive D:) -- FFX HD: `GameSetting.ini` replaced with English+HD version -- VC++ runtime DLLs + `d3dcompiler_43/47` copied into 6 prefixes from Windows partition -- Duck Game prefix: XNA 4.0 framework dir copied from Windows -- Atomic Bomberman prefix: `Version=win98` + virtual desktop 640×480 + WineBus disabled -- GE-Proton10-34 installed to `~/.steam/steam/compatibilitytools.d/` - -## Source assets discovered on Windows partition -- `/run/media/bazzite/Windows/Program Files (x86)/Ubisoft/ubisoft game launcher/` (595 MB) -- `/run/media/bazzite/Windows/Windows/System32/` and `SysWOW64/` — VC++ runtime, d3dcompiler, xinput DLLs -- `/run/media/bazzite/Windows/Program Files (x86)/Microsoft XNA/` — XNA 4.0 Framework -- `/run/media/bazzite/Windows/Microsoft.NET/Framework64/v4.0.30319/` — .NET 4.0 -- `/run/media/bazzite/Data/downloads/zatmenie v2 [torrents.ru]/` — Discworld Noir source (cd1, cd2, .nrg images) -- `/run/media/bazzite/Windows/Users/mallexxx/documents/square enix/...` — FFX gamesetting.ini - -## Open questions / next steps -1. Try **deleting `pfx/` folders** for the still-broken GE-Proton games (Brawlhalla, Castle Crashers, Worms WMD/WP, Duck Game) -2. Atomic Bomberman: create separate 32-bit Wineprefix outside Proton -3. Discworld Noir: try drive D: → cd1 or mount `.nrg` images -4. Metro Exodus: ask user if OK to use Goldberg Steam emulator -5. **Atomic Heart VK:** test VK Play авторизацию через Proton, при необходимости — protontricks vcrun2019 -6. **Doom 3 BFG:** test с Luxtorpeda → rbdoom-3-bfg (должно работать с нативным OpenGL) - -## Lessons learned / Infra notes -- `shortcuts.vdf` is binary VDF; edit only with Steam closed -- `config.vdf` is text VDF; `CompatToolMapping` block controls per-AppID Proton -- Steam reads both vdfs on startup, writes back from in-memory state on exit -- `protontricks` (Flatpak) needs `flatpak override --user --filesystem=/var/home/bazzite/.local/share/Steam` -- Parallel protontricks runs on same Proton version **conflict** -- `xvfb-run protontricks ` — MS-redist EXE installers **hang on invisible button click**. Workaround: copy DLLs from Windows partition -- For Cyrillic/locale: Proton needs `HOST_LANG` / `HOST_LC_ALL` env vars -- Background jobs that survive SSH disconnect: `systemd-run --user --unit=` -- GE-Proton install: extract tar.gz into `~/.steam/steam/compatibilitytools.d/` -- `vdf.binary_loads` key names are case-sensitive: `AppName`, not `appname` -- signed appid in shortcuts.vdf ↔ unsigned in config.vdf CompatToolMapping +Эта заметка оставлена для обратной совместимости ссылок. Всё остальное — в wiki. diff --git a/wiki/htpc-bazzite-proton.md b/wiki/htpc-bazzite-proton.md index 2ac681c3..ce4efb50 100644 --- a/wiki/htpc-bazzite-proton.md +++ b/wiki/htpc-bazzite-proton.md @@ -1,9 +1,9 @@ --- -title: HTPC Bazzite — Proton Compatibility +confidence: medium created: '2026-05-23' -updated: '2026-05-27' -type: tech namespace: personal +sources: + - family/projects/htpc-windows-games-fix.md tags: - htpc - infra @@ -11,9 +11,11 @@ tags: - pitfalls - vk-play - atomic-heart -sources: - - family/projects/htpc-windows-games-fix.md -confidence: medium + - vdf + - doom +title: HTPC Bazzite — Proton Compatibility +type: tech +updated: '2026-05-27' --- # HTPC Bazzite — Windows Game Proton Compatibility @@ -21,15 +23,63 @@ 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. +## 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) + +## Removed from Steam shortcuts ✅ +- Human Fall Flat (3928445186) — already in real Steam +- Shovel Knight (2526703384) — already in real Steam + +## Recently added — not yet tested +| Game | AppID (signed) | AppID (unsigned) | Proton | Path | +|------|----------------|-------------------|--------|------| +| 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` | + +## 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\"` | + +## Moved to Luxtorpeda — need testing +| Game | AppID | Before | After | Notes | +|------|-------|--------|-------|-------| +| Doom 3 BFG | 3602815006 | GE-Proton10-34 (white screen, audio plays) | **Luxtorpeda → rbdoom-3-bfg** (native Linux engine) | LaunchOptions cleared ✅ | + +## 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 -For UE3/UE4 and modern Windows titles missing Visual C++ runtime: ``` protontricks vcrun2019 d3dcompiler_47 ``` @@ -49,9 +99,9 @@ Game needs `steam_api64.dll` emulator: ### Cyrillic encoding issues (e.g. Discworld Noir) Try in order: -1. `LANG=ru_RU.UTF-8 %command%` in Steam launch options +1. `LANG=ru_RU.UTF-8 %command%` 2. `WINEDLLOVERRIDES=\"gdiplus=n,b\"` -3. Install `ttf-mscorefonts` manually + set Cyrillic codepage in Wine registry +3. Install `ttf-mscorefonts` + set Cyrillic codepage in Wine registry ### White screen / broken D3D9 (Rayman Origins, Split Second) ``` @@ -60,82 +110,28 @@ 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). -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-эмуляцию). +VK Play версии игр запускаются через лаунчер VK GameCenter (`GameCenter.exe`) поверх Proton. Лаунчер отвечает за авторизацию и лицензирование (в т.ч. 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 официально подтвердил совместимость Atomic Heart со Steam Deck/Proton. +- Для авторизации используется `mycomgames://` URL-схема. На HTPC без Steam Deck API может потребоваться ручной ввод логина/пароля. +- Альтернатива: Lutris с конфигом из gist.github.com/keyCat (обработчик `mycomgames://` схемы). +- Перед первым запуском может понадобиться `protontricks -555655402 vcrun2019`. -### 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 игры +### Как добавить VK Play игру 1. Запустить VK GameCenter через Steam (GE-Proton10-34) 2. Авторизоваться в VK Play -3. Установить игру через лаунчер (в данном случае Atomic Heart установлен заранее) -4. После авторизации игра появится в библиотеке 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 @@ -145,37 +141,42 @@ systemctl --user stop gamescope-session-plus@steam.service ``` **Шаг 1: Прочитать shortcuts.vdf backup** -``` -python3 -c " +AppID в shortcuts.vdf — signed int32. В config.vdf CompatToolMapping — unsigned uint32. +```python import vdf +# read backup with open('shortcuts.vdf.bak-eagle', 'rb') as f: - data = f.read() -d = vdf.binary_loads(data) -# modify d['shortcuts'] + 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** -AppID в CompatToolMapping — unsigned uint32. -Если в shortcuts.vdf appid signed (-555655402), то unsigned = signed & 0xFFFFFFFF (3739311894). +Unsigned appid = signed & 0xFFFFFFFF. **Шаг 3: Запустить Steam, проверить** **Критически важно:** -- signed appid в shortcuts.vdf и unsigned в config.vdf — это один и тот же appid -- Не редактировать файлы при запущенном Steam — он перезапишет -- Делать бэкап перед любыми изменениями -- vdf.binary_loads ищет ключи с точным регистром: `AppName`, не `appname` +- Редактировать ТОЛЬКО при остановленном Steam +- Делать бэкап **до** изменений +- `vdf.binary_loads` — регистрозависим: `AppName`, `Exe`, а не `appname`, `exe` + +--- ## VDF Troubleshooting ### shortcuts.vdf испорчен (все записи пустые) -Steam перезаписывает VDF при старте если не понимает ручные правки. -Восстановление: скопировать один из бэкапов (bak-eagle, bak-launch и т.д.) и добавить нужные новые записи заново. +Steam перезаписывает VDF при старте если не понимает ручные правки. Восстанавливай из бэкапа. -Бэкапы в том же каталоге: `shortcuts.vdf.bak-eagle` (23 мая, 106 записей, последний чистый до экспериментов). +**Бэкапы** (в `~/.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 @@ -186,22 +187,78 @@ 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. +### VDF Incident — 2026-05-27 (разбор) +**Что произошло:** при попытке добавить VK GameCenter + Atomic Heart VK через Python vdf на работающем Steam, Steam переписал файл при старте, создав 110 пустых записей-заглушек. -### Бэкап после восстановления -``` -cp shortcuts.vdf shortcuts.vdf.whale-restored-YYYY-MM-DD -``` +**Почему бэкапы тоже пустые:** все бэкапы были сделаны уже после того как Steam испортил файл. Единственный выживший — `bak-eagle` (23 мая, до начала экспериментов). -## SteamGridDB +**Как нашли:** hexdump показал имена игр, но `vdf.binary_loads` не видел их — проблема в регистре ключей (`AppName`, а не `appname`). -API key хранится в `~/Documents/steamgriddb_api_key.txt` на HTPC. -Текущий ключ: `5f0a7cb3366dede2c10860a95795ce60` (обновлён: 2026-05-23, regenerated). +**Как восстановили:** +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` -Скрипты постеров: `~/scripts/update-artwork.sh` (или аналог). -Запускать после добавления новых шорткатов. +**Уроки:** +- Только при остановленном 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]]