Files
local_machine/docs/games/JA3_RUNBOOK.md
ahauimix 1938b7c743 Expand local_machine docs and automation for connectivity, games, and ops.
Add proxy/VPN/telegram launchd and emergency runbooks; reorganize apps docs;
document JA3 CrossOver runbook and Wine troubleshooting; add GOG/HoMM game
scripts, disk cleanup guides, and gitea push-via-proxy helper. Ignore temp/.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 08:12:19 +03:00

298 lines
18 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.
# Jagged Alliance 3 (GOG) — runbook Mac / Apple Silicon
**Машина:** M1 Pro, macOS Sonoma+, bottle Whisky **GOG-Install** (`9ee55e7c-a58e-411e-a93f-30530d4f1073`).
**Проверено:** 2026-05-28 (установка) · 2026-05-29 (запуск через CrossOver).
Связанные документы: [JA3_MAC_WITHOUT_GALAXY.md](JA3_MAC_WITHOUT_GALAXY.md) (установка offline), [TROUBLESHOOTING.md](TROUBLESHOOTING.md), [GOG_GALAXY_7H_RCA.md](GOG_GALAXY_7H_RCA.md).
---
## 1. Быстрый путь (канон)
### Установка (один раз, Whisky)
```bash
# Offline backup (5 файлов) в ~/Games/
bash ~/code/local_machine/scripts/games/gog/install-ja3-innoextract.sh
bash ~/code/local_machine/scripts/games/gog/finish-ja3-layout.sh
```
### Запуск (каждый раз, CrossOver + D3DMetal)
```bash
brew install --cask crossover # один раз
bash ~/code/local_machine/scripts/games/gog/setup-ja3-crossover.sh # один раз
bash ~/code/local_machine/scripts/games/gog/run-ja3-crossover.sh
```
- **Cmd+Tab** → окно `JA3.exe`
- В настройках графики: **отключить heat haze**
- **Swap:** «залипший» swap после Wine (24 GB без процессов) **не блокирует** запуск — только предупреждение. Стоп: swap ≥ **4096 MB** без Wine, или swap ≥ **1200 MB** пока **Wine/JA3 ещё работают**`reset-ja3-crossover.sh` / reboot. Обход: `JA3_IGNORE_SWAP=1`
### Два «контура»
| Контур | Роль | Инструмент |
|--------|------|------------|
| **GOG-Install** (Whisky) | innoextract, файлы игры, CommonLua, реестр GOG | `install-ja3-innoextract.sh`, `finish-ja3-layout.sh` |
| **JA3-GOG** (CrossOver) | **запуск** D3D12 через D3DMetal | `setup-ja3-crossover.sh`, `run-ja3-crossover.sh` |
Whisky **`run-ja3.sh` не запускает JA3 с рабочей графикой** — только CrossOver (или Porting Kit GUI).
---
## 2. Почему CrossOver, а не Whisky
JA3 на Windows использует **DirectX 12**. На Apple Silicon единственный рабочий путь — **Apple D3DMetal** (Game Porting Toolkit), встроенный в **CrossOver 23+** с флагом `WINED3DMETAL=1`.
**Whisky** использует **Gcenx Wine** — maintainer явно пишет, что сборки **не содержат D3DMetal hooks** ([Gcenx/macOS_Wine_builds#97](https://github.com/Gcenx/macOS_Wine_builds/issues/97)). В этом случае `d3d12.dll` (94 KB) идёт через **wined3d → Vulkan**, а на Mac нет Vulkan physical device:
```text
fixme:d3d12:d3d12_get_vk_physical_device Could not find Vulkan physical device for DXGI adapter.
```
→ UI: **«Failed to initialize graphics subsystem»**
→ лог JA3: **`Failed creating render device`**
Копирование `D3DMetal.framework` + `libd3dshared.dylib` + моста `d3d12.so` **не достаточно**, если PE `d3d12.dll` / `ntdll` от Gcenx — unix-вызовы D3DMetal не подключены.
---
## 3. RCA: злоключения 2026-05-28 — 2026-05-29
Хронология попыток на этой машине (чат + логи `JA3.exe-*.log`, Wine debug).
### Фаза A — установка и ложные следы (28.05)
| # | Симптом / действие | Реальная причина | Итог |
|---|-------------------|------------------|------|
| A1 | GOG web-stub, пустые кнопки | Нет **gdiplus** (winetricks) | ✅ `install-gdiplus.sh` + corefonts |
| A2 | Galaxy CEF, окна нет | HWND/CEF в Wine, swap | Galaxy **не нужен** для JA3 offline |
| A3 | Лог `Steam initialized … Beta branch GOG` | GOG API-шим (`steam_api64.dll`), **не** Steam.app | ❌ не причина краша |
| A4 | `CreateSubsystem failed MatchmakingServers/Music` | GOG wrapper без Galaxy service | ❌ шум, не графика |
| A5 | `Game name not defined` | innoextract не выполнил Inno-постскрипты | ⚠️ косметика; фикс: `register-ja3-registry.sh` |
| A6 | Swap ~3 GB, скрипт блокирует запуск | «Залипший» swap после Wine; macOS не отдаёт без reboot | ✅ `gog_swap_guard_ja3_launch`: warn до 4 GB без процессов; reboot если Mac тормозит |
### Фаза B — «графика» в Whisky (2829.05)
| # | Попытка | Лог / ошибка | Почему не работает |
|---|---------|--------------|-------------------|
| B1 | DXVK + `-graphicsapi d3d11` | `Failed creating render device` | DXVK = D3D10/11, **не D3D12** |
| B2 | DXMT v0.80 | `dxgi.dll` **c000007b** | Несовместимость с Gcenx Wine 11 + overrides |
| B3 | `upgrade-whisky-wine-gcenx.sh` (11.9) + GPTK bridge | `d3d12_get_vk_physical_device` | Gcenx d3d12 = **Vulkan**, не Metal |
| B4 | GPTK PE `d3d12.dll`/`dxgi.dll` (114/86 KB) в `system32` | Всё ещё Vulkan path или `dxgi not found` | PE GPTK 7.7 ≠ ntdll Gcenx 11 |
| B5 | GPTK PE в `wine/lib/x86_64-windows` | `Library dxgi.dll not found` (c0000135) | `__wine_unix_call` не реализован в Gcenx ntdll |
| B6 | Замена `ntdll.so` на GPTK | `virtual_alloc_first_teb` / wine не стартует | Нельзя мешать ntdll разных Wine |
| B7 | `ditto` всего GPTK `lib/` в Whisky | Wine **7.7 GPTK** поверх bottle | Перезаписал `wine64` → comctl32 и др. |
| B8 | `prepare-ja3-d3dmetal.sh` (убрать d3d12 из system32) | Всё равно render device fail | Builtin Gcenx d3d12 без Metal |
| B9 | `forceD3D11: true` в Metadata.plist | Противоречие с D3D12 backend | Исправлено на `false` — без эффекта на Gcenx |
| B10 | GPTK Wine 7.7, отдельный prefix | `comctl32.dll failed to initialize` (c0000005) | GPTK Wine 7.7 **сломан** на этой macOS |
| B11 | `fixmywhisky.sh` (ditto GPTK lib) | Как B7 | Только D3DMetal.framework + bridge **без** подмены всего Wine |
### Фаза C — CrossOver (29.05, **успех**)
| # | Шаг | Результат |
|---|-----|-----------|
| C1 | `brew install --cask crossover` | CrossOver 26.1, встроенный `apple_gptk` |
| C2 | Bottle **JA3-GOG**, template **win10_64** (не win32 Wow64!) | `kernel32` c000007b на 32-bit bottle |
| C3 | `WINED3DMETAL=1`, `WINEDXVK=0` в `cxbottle.conf` | D3D12 → Metal |
| C4 | Symlink игры из Whisky bottle | `CommonLua/Core/autorun.lua: File Not Found` — Wine **не читает** symlink **вне** prefix |
| C5 | `cp -cR` (APFS clonefile) игры в CrossOver bottle | Файлы видны Wine; **~0** доп. места на APFS |
| C6 | `start /d "C:\GOG Games\Jagged Alliance 3" JA3.exe -unpacked` | CWD с `CommonLua/`; не `--cx-app` без `/d` |
| C7 | Запуск | **JA3.exe** стабильно работает, нет `Failed creating render device` |
| C8 | Курсор: смещение клика → `RetinaMode=y` + `LogPixels=192` | Курсор **не опускается ниже середины экрана** (Y делится пополам) | ✅ профиль **`legacy`**: `RetinaMode=n`, без LogPixels — **подтверждено 2026-05-29** |
### Сигнатуры в логах (диагностика)
| Строка | Значение |
|--------|----------|
| `Failed creating render device` | D3D12 не дошёл до GPU — Whisky/Gcenx, не CrossOver |
| `d3d12_get_vk_physical_device Could not find Vulkan` | Gcenx wined3d path — нужен CrossOver D3DMetal |
| `Failed to initialize graphics subsystem` (UI) | То же, пользовательский текст JA3 |
| `Error opening 'CommonLua/Core/autorun.lua'` | Нет CWD (`start /d`) или symlink вместо клона в bottle |
| `comctl32.dll failed to initialize` | GPTK Wine 7.7 — не использовать |
| `__wine_unix_call` / `aborting` | GPTK PE на чужом Wine |
| `dxgi.dll` **c000007b** | DXMT + неправильные overrides |
| `Language: English` без `Failed creating` | Графика OK; смотреть CommonLua / crash дальше |
| Курсор виден, клик смещён по Y | HiDPI без согласованного масштаба Wine | `fix-ja3-crossover-mouse.sh` → профиль **legacy** |
| Курсор **не ниже середины экрана** | `RetinaMode=y` + `LogPixels=192` / двойной DPI | **legacy** (не retina); перезапуск JA3 |
Логи JA3:
`…/AppData/Roaming/Jagged Alliance 3/logs/JA3.exe-*.log`
Whisky: `…/Containers/com.franke.Whisky/Bottles/9ee55e7c-…/`
CrossOver: `~/Library/Application Support/CrossOver/Bottles/JA3-GOG/`
---
## 4. Антипаттерны (полный список)
### Установка
| ❌ Не делать | ✅ Вместо |
|-------------|----------|
| GOG web-stub `GOG_Galaxy_Jagged_Alliance_3.exe` | Offline backup 5 частей в `~/Games/` |
| `install-ja3-multipart.sh` (Wine Inno) | `install-ja3-innoextract.sh` |
| Распаковка в `scripts/games/cache/` | Сразу в `drive_c/GOG Games/…` |
| Bottle **HoMM-OldenEra** (Steam) | Bottle **GOG-Install** |
| Удалять `steam_api64.dll` в папке игры | Это GOG-шим, **оставить** |
| Steam client в GOG-bottle | `purge-steam-from-bottle.sh` |
### Графика / Wine
| ❌ Не делать | ✅ Вместо |
|-------------|----------|
| Whisky `run-ja3.sh` для игры | **`run-ja3-crossover.sh`** |
| `upgrade-whisky-wine-gcenx.sh` «для D3DMetal» | Gcenx **не** поддерживает D3DMetal hooks |
| `ditto` всего GPTK `lib/` в Whisky Libraries | Только `D3DMetal.framework` + `libd3dshared` + `.so` bridge (см. `install-gptk-whisky.sh`) |
| GPTK PE `d3d12/dxgi` в system32 **Whisky** | CrossOver со встроенным `apple_gptk` |
| Замена `ntdll.so` GPTK в Gcenx Wine | Ломает preloader |
| DXVK / DXMT для JA3 как «замена D3D12» | Не подтверждено; JA3 = D3D12 |
| `dxgi,d3d11=n,b` с DXMT | Ломает цепочку → c000007b |
| Whisky Run **`JA3.exe`** без CWD | `start /d` или `run-ja3.cmd` (Whisky) / CrossOver `start /d` |
| Symlink игры из Whisky в CrossOver bottle | **`cp -cR`** (APFS clone) |
| CrossOver bottle **win32** / Wow64 | **`win10_64`** |
| `--cx-app JA3.exe` без `start /d` | `start /d "…Jagged Alliance 3" JA3.exe -unpacked` |
| `forceD3D11: true` + backend d3dMetal | `forceD3D11: false` (Metadata Whisky — не решает Gcenx) |
### Окружение
| ❌ Не делать | ✅ Вместо |
|-------------|----------|
| Считать «залипший» swap 24 GB блокером JA3 | Запуск разрешён (warn); reboot — если Mac тормозит |
| Запуск JA3 при swap ≥ **1200 MB** + **Wine/JA3 ещё работают** | `reset-ja3-crossover.sh` → reboot |
| Запуск JA3 при swap ≥ **4096 MB** без Wine | Reboot Mac или `JA3_IGNORE_SWAP=1` |
| Жёсткий лимит **800 MB** для `run-ja3-crossover.sh` | Устарело; см. `gog_swap_guard_ja3_launch` в `config.sh` |
| Путать лог Galaxy с JA3 | JA3 offline **без** Galaxy UI |
| Чинить «graphics» через Galaxy service | `MatchmakingServers`/`Music` — шум GOG API |
### Мышь (CrossOver / Retina)
| ❌ Не делать | ✅ Вместо |
|-------------|----------|
| `RetinaMode=y` + `LogPixels=192` + `Win8DpiScaling=1` «по умолчанию» | **`fix-ja3-crossover-mouse.sh`** — профиль **legacy** (`RetinaMode=n`) |
| CrossOver GUI **High Resolution Mode** без проверки | Если клип Y на середине → **legacy** |
| Менять реестр мыши без перезапуска JA3 | `reset-ja3-crossover.sh``run-ja3-crossover.sh` |
| Профиль **retina** при клипе на середине экрана | **legacy**; при смещении клика — **retina-lite** |
| Ожидать фикс мыши «на лету» | Workaround: верхний левый угол окна = угол экрана |
---
## 5. Скрипты
| Скрипт | Назначение | Статус |
|--------|------------|--------|
| `install-ja3-innoextract.sh` | Multipart offline → bottle | ✅ канон установки |
| `finish-ja3-layout.sh` | CommonLua, реестр, upscale DLL | ✅ после innoextract |
| `setup-ja3-crossover.sh` | Bottle JA3-GOG, clone игры, D3DMetal | ✅ один раз |
| **`run-ja3-crossover.sh`** | **Запуск игры** | ✅ **канон** |
| `reset-ja3-crossover.sh` | Stop JA3 / Wine перед перезапуском | ✅ |
| `fix-ja3-crossover-mouse.sh` | Профили мыши (legacy / retina-lite / retina) | ✅ default **legacy** |
| `run-ja3.sh` | Whisky (эксперимент; графика fail) | ⚠️ только с предупреждением |
| `prepare-ja3-d3dmetal.sh` | Whisky D3DMetal prep | ⚠️ не решает Gcenx d3d12 |
| `upgrade-whisky-wine-gcenx.sh` | Wine 11.9 | ❌ для JA3 не использовать |
| `run-ja3-gptk-wine.sh` | GPTK Wine 7.7 prefix | ❌ comctl32 на этой Mac |
| `install-ja3-dxmt.sh` | DXMT fallback d3d11 | ❌ c000007b |
| `emergency-stop.sh` | Kill Wine/GOG перед запуском | ✅ |
---
## 6. CrossOver bottle (детали)
**Путь:** `~/Library/Application Support/CrossOver/Bottles/JA3-GOG/`
**cxbottle.conf** (минимум):
```ini
"WINED3DMETAL" = "1"
"WINEDXVK" = "0"
```
**Игра:** `drive_c/GOG Games/Jagged Alliance 3/` — APFS-клон из Whisky GOG-Install (не symlink).
**Проверка:**
```bash
pgrep -fl 'JA3\.exe'
grep -E 'Failed creating|autorun|CRASH' \
"$HOME/Library/Application Support/CrossOver/Bottles/JA3-GOG/drive_c/users/"*/AppData/Roaming/Jagged\ Alliance\ 3/logs/*.log | tail
```
---
## 7. Альтернативы
| Вариант | Комментарий |
|---------|-------------|
| [Porting Kit](https://www.paulthetall.com/jagged-aliance-3-for-mac/) + GOG offline | Тот же GPTK/D3DMetal; GUI, «просто работает» на M-series |
| CrossOver GUI | Bottle JA3-GOG → Install → Run exe; D3DMetal в Advanced Settings |
| Whisky + GPTK drag DMG | [Whisky#124](https://github.com/Whisky-App/Whisky/issues/124) — для **DX12** на Gcenx всё равно нет hooks |
---
## 9. Курсор: HiDPI / Retina (CrossOver)
**Проверено 2026-05-29** на M1 Pro + CrossOver 26.1, bottle **JA3-GOG**.
### Симптомы
| Симптом | Типичная причина |
|---------|------------------|
| Клик «выше/ниже» UI, курсор виден | Wine отдаёт logical pixels, игра рисует в другом масштабе |
| **Курсор не опускается ниже середины экрана** | `RetinaMode=y` + `LogPixels=192` — координата Y делится пополам |
### Профили (`fix-ja3-crossover-mouse.sh`)
| Профиль | Реестр | Когда |
|---------|--------|-------|
| **`legacy`** (default) | `RetinaMode=n`, LogPixels/Win8Dpi **удалены** | **Канон** — полный ход курсора по Y; возможен небольшой сдвиг клика |
| `retina-lite` | `RetinaMode=y`, без LogPixels | Если legacy смещает клик, но **нет** клипа на середине |
| `retina` | `RetinaMode=y`, `LogPixels=192`, `Win8DpiScaling=1` | ❌ часто **клип Y на 50%** — не использовать как default |
```bash
# Канон (после смены профиля — перезапуск JA3)
bash ~/code/local_machine/scripts/games/gog/fix-ja3-crossover-mouse.sh
bash ~/code/local_machine/scripts/games/gog/reset-ja3-crossover.sh
bash ~/code/local_machine/scripts/games/gog/run-ja3-crossover.sh
# Если legacy смещает клик
JA3_MOUSE_PROFILE=retina-lite bash ~/code/local_machine/scripts/games/gog/fix-ja3-crossover-mouse.sh
bash ~/code/local_machine/scripts/games/gog/reset-ja3-crossover.sh
bash ~/code/local_machine/scripts/games/gog/run-ja3-crossover.sh
```
**Без перезапуска (workaround):** перетащите окно JA3 так, чтобы **верхний левый угол окна** совпал с **верхним левым углом экрана**.
CrossOver GUI: Bottle **JA3-GOG****High Resolution Mode** — при клипе на середине **выключить** (эквивалент **legacy**).
---
## 10. Быстрые команды (терминал)
| Действие | Команда |
|----------|---------|
| **Запуск** | `bash ~/code/local_machine/scripts/games/gog/run-ja3-crossover.sh` |
| **Стоп / reset Wine** | `bash ~/code/local_machine/scripts/games/gog/reset-ja3-crossover.sh` |
| **Стоп всё GOG/Wine** | `bash ~/code/local_machine/scripts/games/gog/emergency-stop.sh` |
| **Первичная настройка bottle** | `bash ~/code/local_machine/scripts/games/gog/setup-ja3-crossover.sh` |
| **Фикс мыши** | `bash ~/code/local_machine/scripts/games/gog/fix-ja3-crossover-mouse.sh` |
| Swap «залип» 24 GB, Wine нет | просто `run-ja3-crossover.sh` (warn) |
| Swap + Wine/JA3 живы ≥ 1200 MB | `reset-ja3-crossover.sh` → reboot |
| Swap ≥ 4096 MB без Wine | reboot Mac |
| Обход swap | `JA3_IGNORE_SWAP=1 bash …/run-ja3-crossover.sh` |
| Профиль мыши | `JA3_MOUSE_PROFILE=legacy\|retina-lite\|retina` + fix + reset + run |
**Полный цикл перезапуска:**
```bash
bash ~/code/local_machine/scripts/games/gog/reset-ja3-crossover.sh
bash ~/code/local_machine/scripts/games/gog/run-ja3-crossover.sh
```
---
## 8. Ссылки
- [Gcenx — нет D3DMetal в packages](https://github.com/Gcenx/macOS_Wine_builds/issues/97)
- [CrossOver — D3DMetal advanced settings](https://support.codeweavers.com/miscellanous/advanced-settings-in-crossover-mac-26)
- [Whisky — GPU / GPTK tracking](https://github.com/Whisky-App/Whisky/issues/124)
- [Proton JA3 — graphics / LocalStorage](https://github.com/ValveSoftware/Proton/issues/7039) (Linux; отражения Off/Low — аналог для Wine при других GPU)