Desperate Housewives: The Game на macOS Apple Silicon через CrossOver

Ссылки

CrossOver — www.codeweavers.com/crossover

Страница игры и DVD-версии — www.myabandonware.com/game/desperate-housewives-the-game-dkm

В этой инструкции использовалась DVD-версия игры. Если на странице есть несколько вариантов загрузки, нужен именно DVD-вариант, а не CD-версия. Используйте только те файлы, на которые у вас есть право.

Инструкция

Эта инструкция описывает рабочий способ запуска Desperate Housewives: The Game на macOS Apple Silicon через CrossOver. Тестировалось на Apple Silicon M5 Pro и CrossOver 26.1.0, но логика должна быть похожей для M1/M2/M3/M4/M5.

Важно: инструкция предполагает, что у вас есть легальная DVD-версия игры или собственный образ диска.

Перед началом

Эта статья рассчитана не только на технарей. Большая часть действий делается через Terminal, потому что так проще точно попасть в нужные файлы внутри CrossOver bottle.

Как открыть Terminal:

  1. Нажмите Command + Space.
  2. Введите Terminal.
  3. Нажмите Enter.

Команды из статьи можно копировать целиком и вставлять в Terminal. Если Terminal просит пароль, вводите пароль от macOS: символы при вводе могут не отображаться, это нормально.

В статье используется bottle с именем:

DHW

Если вы назвали bottle иначе, замените DHW во всех командах на своё имя.

Два важных пути:

Windows-путь внутри игры:
C:GamesDHW

Тот же путь на macOS:
~/Library/Application Support/CrossOver/Bottles/DHW/drive_c/Games/DHW

Если команда пишет No such file or directory, почти всегда причина одна из трёх: другое имя bottle, игра установлена в другую папку или вы запускаете команду не из папки DVD.

Коротко о проблеме

Игра может установиться, но не запускаться или показывать только чёрный экран. В нашем случае были сразу три разные проблемы:

  1. В установленную папку не попали все игровые архивы .HZL.
  2. Wine/CrossOver падал на встроенной avicap32.dll.
  3. DXVK запускал игру, но давал чёрный экран при рабочем звуке и курсоре.

Финальная рабочая связка:

CrossOver bottle: DHW
Windows version: Windows XP
Graphics backend: wined3d
Wine Direct3D renderer: opengl
DLL override: avicap32=n
Запускать: DesperateHousewives.exe, не dhw.exe

1. Создать bottle в CrossOver

Откройте CrossOver и создайте новую bottle. В разных версиях CrossOver кнопки могут называться немного по-разному, но общий порядок такой:

  1. Откройте CrossOver.
  2. Перейдите в раздел Bottles.
  3. Нажмите New Bottle или Create Bottle.
  4. Имя bottle укажите DHW.
  5. Тип Windows выберите Windows XP.
  6. Архитектуру оставьте 64-bit, если CrossOver предлагает выбор.

Итог должен быть таким:

Bottle name: DHW
Windows version: Windows XP
Architecture: win64

Игра старая, но в CrossOver на Apple Silicon нормально живёт в win64 bottle, где сама игра запускается как 32-битный процесс.

2. Установить игру

Установите игру в:

C:GamesDHW

Если установщик предлагает стандартный путь в Program Files, лучше заменить его вручную на C:\Games\DHW. Так потом проще запускать игру и проверять файлы.

Примерный порядок:

  1. В CrossOver выберите bottle DHW.
  2. Запустите установщик игры с DVD или из папки с распакованным DVD.
  3. Когда установщик спросит путь установки, укажите C:\Games\DHW.
  4. Дождитесь завершения установки.

Не запускайте игру через dhw.exe. Это launcher, который может проверять диск. Рабочий exe:

C:GamesDHWDesperateHousewives.exe

Если вы хотите открыть установленную папку игры через Finder, путь будет примерно такой:

~/Library/Application Support/CrossOver/Bottles/DHW/drive_c/Games/DHW

Быстро открыть её можно командой:

open "$HOME/Library/Application Support/CrossOver/Bottles/DHW/drive_c/Games/DHW"

Дальше в статье будут использоваться переменные BOTTLE, GAME и CXWINE. Их удобно один раз вставить в Terminal:

BOTTLE="$HOME/Library/Application Support/CrossOver/Bottles/DHW"
GAME="$BOTTLE/drive_c/Games/DHW"
CXWINE="/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/CrossOver-Hosted Application/wine"

Если вы закрыли Terminal и открыли заново, эти три строки нужно вставить снова.

3. Проверить диск z:

В CrossOver/Wine диск z: должен указывать на корень macOS /.

Проверьте:

BOTTLE="$HOME/Library/Application Support/CrossOver/Bottles/DHW"
ls -l "$BOTTLE/dosdevices/z:"

Должно быть примерно так:

z: -> /

Если z: указывает на DVD-папку или куда-то ещё, исправьте:

ln -sfn / "$BOTTLE/dosdevices/z:"

Что это значит простыми словами: Wine показывает macOS-диски как Windows-диски. Диск z: обычно является мостом ко всей файловой системе macOS. Если z: случайно указывает только на папку DVD, игра может искать файлы не там и запуск будет ломаться.

После исправления снова проверьте:

ls -l "$BOTTLE/dosdevices/z:"

Если видите z: -> /, этот пункт готов.

4. Проверить игровые архивы .HZL

После установки в папке:

C:GamesDHWArchives

должны быть большие архивы игры. На macOS это путь:

GAME="$HOME/Library/Application Support/CrossOver/Bottles/DHW/drive_c/Games/DHW"
ls -lh "$GAME/Archives"

Если Terminal отвечает No such file or directory, проверьте, что:

  1. Bottle действительно называется DHW.
  2. Игра действительно установлена в C:\Games\DHW.
  3. Вы вставили переменную GAME, если открывали новое окно Terminal.

Особенно важны:

Dialogue.HZL
Meshes.HZL
Music.HZL
SoundEffects.HZL
Textures.HZL

Если в установленной игре не хватает больших архивов, скопируйте их с DVD:

DVD="/path/to/DHW_DVD"
GAME="$HOME/Library/Application Support/CrossOver/Bottles/DHW/drive_c/Games/DHW"

cp "$DVD/Archives/SoundEffects.HZL" "$GAME/Archives/"
cp "$DVD/Archives/Dialogue.HZL" "$GAME/Archives/"
cp "$DVD/Archives/Textures.HZL" "$GAME/Archives/"
cp "$DVD/Archives/Meshes.HZL" "$GAME/Archives/"

В строке DVD="/path/to/DHW_DVD" нужно указать реальный путь к папке DVD. Самый простой способ:

  1. Откройте папку DVD в Finder.
  2. Перетащите эту папку прямо в окно Terminal.
  3. Terminal сам вставит полный путь.

Например, если папка DVD лежит в Downloads, может получиться так:

DVD="$HOME/Downloads/Desperate-Housewives-The-Game_Win_RU_DVD-version/DHW_DVD"

После копирования проверьте размер папки:

du -sh "$GAME/Archives"
ls -lh "$GAME/Archives"

Если Textures.HZL занимает около 1.3 GB, а Dialogue.HZL и SoundEffects.HZL тоже крупные, значит основные архивы на месте.

В нашем случае отдельно не хватало Music.HZL. Игра из-за этого доходила до инициализации, писала Exiting… и закрывалась.

5. Достать Music.HZL из data1.cab

Сначала перейдите в папку DVD, где лежит data1.cab:

cd "$DVD"
ls -lh data1.cab

Если переменная DVD ещё не задана, задайте её вручную. Пример:

DVD="$HOME/Downloads/Desperate-Housewives-The-Game_Win_RU_DVD-version/DHW_DVD"
cd "$DVD"

Сначала установите unshield:

brew install unshield

Если macOS пишет brew: command not found, значит Homebrew ещё не установлен. Установите Homebrew с официального сайта brew.sh, затем откройте новое окно Terminal и повторите команду brew install unshield.

Проверьте, есть ли Music.HZL внутри cab:

unshield l data1.cab | grep Music.HZL

Если команда ничего не выводит, вы, скорее всего, находитесь не в той папке DVD.

Попробуйте обычную распаковку:

mkdir -p /tmp/dhw-unshield
unshield -d /tmp/dhw-unshield x data1.cab '*Music.HZL'

Если получилось, скопируйте файл:

cp /tmp/dhw-unshield/ProgramFiles/Archives/Music.HZL "$GAME/Archives/"

Если unshield падает с ошибкой decompression, можно вытащить raw-данные и восстановить файл вручную:

mkdir -p /tmp/dhw-unshield-music
unshield -r -d /tmp/dhw-unshield-music x data1.cab '*Music.HZL'

Затем восстановить Music.HZL:

python3 - <<'PY'
import zlib
from pathlib import Path

raw_path = Path('/tmp/dhw-unshield-music/ProgramFiles/Archives/Music.HZL')
out_path = Path('/tmp/dhw-recovered-Music.HZL')

raw = raw_path.read_bytes()
marker = b'x00x00xffxff'
expected = 46339380

pos = 0
out_len = 0
chunks = 0
skips = 0

with out_path.open('wb') as out:
    while out_len < expected:
        want = min(10240, expected - out_len)
        search = pos

        while True:
            m = raw.find(marker, search)
            if m < 0:
                raise RuntimeError(f'no marker after raw offset {pos}, output {out_len}')

            chunk = raw[pos:m]

            try:
                d = zlib.decompressobj(-15)
                data = d.decompress(chunk)

                if len(data) == want:
                    out.write(data)
                    pos = m + len(marker)
                    out_len += len(data)
                    chunks += 1
                    break
            except zlib.error:
                pass

            skips += 1
            search = m + 1

if out_len != expected:
    raise RuntimeError(f'incomplete recovery: out={out_len}')

print(f'recovered {out_len} bytes in {chunks} chunks, skipped {skips} false markers')
PY

Скопируйте восстановленный файл:

cp /tmp/dhw-recovered-Music.HZL "$GAME/Archives/Music.HZL"

Проверка:

ls -lh "$GAME/Archives/Music.HZL"

Размер Music.HZL должен быть около 46 MB.

Можно дополнительно проверить начало файла:

xxd -l 8 "$GAME/Archives/Music.HZL"

Если в правой части видно LIQDLH2O, файл похож на правильный игровой архив.

6. Сделать заглушку avicap32.dll

Без этого игра может падать внутри Wine builtin avicap32.capGetDriverDescriptionW.

Установите MinGW:

brew install mingw-w64

Если команда пишет brew: command not found, сначала установите Homebrew с brew.sh.

Теперь создайте исходник заглушки. Просто скопируйте весь блок ниже в Terminal:

cat > /tmp/avicap_stub.c <<'EOF'
#include <windows.h>

__declspec(dllexport)
BOOL WINAPI capGetDriverDescriptionA(
    UINT driverIndex,
    LPSTR name,
    int nameLen,
    LPSTR version,
    int versionLen
) {
    if (name && nameLen > 0) name[0] = '';
    if (version && versionLen > 0) version[0] = '';
    return FALSE;
}

__declspec(dllexport)
BOOL WINAPI capGetDriverDescriptionW(
    UINT driverIndex,
    LPWSTR name,
    int nameLen,
    LPWSTR version,
    int versionLen
) {
    if (name && nameLen > 0) name[0] = L'';
    if (version && versionLen > 0) version[0] = L'';
    return FALSE;
}
EOF

Соберите 32-битную DLL:

i686-w64-mingw32-gcc -shared -Os -o /tmp/avicap32.dll /tmp/avicap_stub.c -Wl,--kill-at

Если Terminal пишет i686-w64-mingw32-gcc: command not found, значит mingw-w64 не установился или Terminal был открыт до установки. Закройте Terminal, откройте заново и повторите brew install mingw-w64.

Сохраните оригинал и замените DLL в bottle. Важно: для 32-битной игры внутри 64-битной bottle нужен именно syswow64, не system32.

SYSWOW64="$HOME/Library/Application Support/CrossOver/Bottles/DHW/drive_c/windows/syswow64"

if [ ! -f "$SYSWOW64/avicap32.real.dll" ]; then
  cp "$SYSWOW64/avicap32.dll" "$SYSWOW64/avicap32.real.dll"
fi

cp /tmp/avicap32.dll "$SYSWOW64/avicap32.dll"

Важно: одной замены файла недостаточно. При запуске обязательно нужен override:

WINEDLLOVERRIDES=avicap32=n

Без этого Wine может всё равно взять свою встроенную avicap32.dll, и старый crash вернётся.

7. Отключить DXVK и включить WineD3D через OpenGL

Чёрный экран со звуком и курсором в нашем случае был из-за DXVK/MoltenVK. В логе DXVK была ошибка компиляции D3D9 pipeline.

Решение: использовать wined3d и renderer opengl.

Это важный пункт. Если оставить DXVK, игра может выглядеть почти запущенной: музыка есть, звуки меню есть, курсор меняется, но вместо картинки чёрный квадрат. Это не проблема с видеофайлом или звуком, это проблема D3D9-рендера.

Установите renderer:

CXWINE="/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/CrossOver-Hosted Application/wine"

"$CXWINE" --bottle DHW --no-update reg add "HKCUSoftwareWineDirect3D" /v renderer /d opengl /f

Проверьте:

"$CXWINE" --bottle DHW --no-update reg query "HKCUSoftwareWineDirect3D" /v renderer

Должно быть:

renderer    REG_SZ    opengl

Если в выводе всё ещё vulkan, повторите команду reg add выше. Если вы используете другое имя bottle, замените DHW на своё имя.

8. Финальная команда запуска

Запуск лучше делать из Terminal, чтобы явно передать CrossOver правильные параметры. Вставьте команду целиком:

CXWINE="/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/CrossOver-Hosted Application/wine"

"$CXWINE" 
  --bottle DHW --no-update 
  --env "CX_GRAPHICS_BACKEND=wined3d WINEDLLOVERRIDES=avicap32=n" 
  --winver winxp 
  --desktop "DHW,800x600" 
  --workdir "C:GamesDHW" 
  "C:GamesDHWDesperateHousewives.exe" 
  nointro skipintro nosplash

Именно эта комбинация дала рабочий результат: меню отображается, музыка и звуки работают, курсор работает.

Критичные части команды:

CX_GRAPHICS_BACKEND=wined3d
WINEDLLOVERRIDES=avicap32=n
--winver winxp
--desktop "DHW,800x600"
DesperateHousewives.exe

Если заменить wined3d на dxvk, игра может снова стать чёрной. Если убрать WINEDLLOVERRIDES=avicap32=n, может вернуться crash в avicap32. Если запускать dhw.exe, launcher может упереться в проверку диска.

Необязательный удобный запуск с рабочего стола

Чтобы каждый раз не вставлять длинную команду, можно создать .command-файл на Desktop:

cat > "$HOME/Desktop/Launch Desperate Housewives.command" <<'EOF'
#!/bin/zsh

CXWINE="/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/CrossOver-Hosted Application/wine"

"$CXWINE" 
  --bottle DHW --no-update 
  --env "CX_GRAPHICS_BACKEND=wined3d WINEDLLOVERRIDES=avicap32=n" 
  --winver winxp 
  --desktop "DHW,800x600" 
  --workdir "C:GamesDHW" 
  "C:GamesDHWDesperateHousewives.exe" 
  nointro skipintro nosplash
EOF

chmod +x "$HOME/Desktop/Launch Desperate Housewives.command"

После этого игру можно запускать двойным кликом по файлу Launch Desperate Housewives. command на рабочем столе. Если macOS спросит разрешение на запуск, подтвердите его.

Симптомы и быстрые проверки

Если игра сразу закрывается:

Скорее всего, не хватает Music.HZL или других .HZL архивов.

Если есть звук и курсор, но чёрный экран:

Скорее всего, игра запущена через DXVK. Нужно использовать wined3d + opengl.

Если был crash c0000005 внутри avicap32:

Нужна native-заглушка avicap32.dll и запуск с WINEDLLOVERRIDES=avicap32=n.

Если launcher просит диск:

Запускайте DesperateHousewives.exe напрямую, а не dhw.exe.

Полезная команда для логов

"$CXWINE" 
  --bottle DHW --no-update 
  --cx-log /tmp/dhw.log 
  --debugmsg "+seh,+module,+file" 
  --env "CX_GRAPHICS_BACKEND=wined3d WINEDLLOVERRIDES=avicap32=n" 
  --winver winxp 
  --desktop "DHW,800x600" 
  --workdir "C:GamesDHW" 
  "C:GamesDHWDesperateHousewives.exe" 
  nointro skipintro nosplash

Инструкция для нейронки

Если хотите ускорить процесс, проще дать эту задачу CLI-нейронке с доступом к Terminal: например, Codex CLI или Claude Code. Обычный веб-чат может объяснить команды, но не сможет сам проверить bottle, собрать DLL, скопировать файлы и запустить игру.

Сначала откройте Terminal и перейдите в папку DVD, где лежат data1.cab и папка Archives.

cd "$HOME/Downloads/Desperate-Housewives-The-Game_Win_RU_DVD-version/DHW_DVD"

Проверьте, что папка правильная:

ls -lh data1.cab
ls -lh Archives

Если файлы видны, запускайте одного из агентов.

Запуск через Codex CLI

codex --dangerously-bypass-approvals-and-sandbox -C "$PWD"

После запуска Codex вставьте в него промпт из блока ниже.

Главный bypass-флаг Codex:

--dangerously-bypass-approvals-and-sandbox

Запуск через Claude Code

claude --dangerously-skip-permissions

После запуска Claude Code вставьте в него промпт из блока ниже.

Главный bypass-флаг Claude Code:

--dangerously-skip-permissions

Если в вашей версии Claude Code используется permission mode, можно запустить так:

claude --permission-mode bypassPermissions

Важно: bypass-флаги позволяют агенту выполнять команды без постоянных подтверждений. Это удобно, но даёт ему широкий доступ к файлам. Запускайте так только в понятной папке и следите за действиями агента.

Промпт для нейронки

Скопируйте этот текст и вставьте его в Codex или Claude Code после запуска:

Мне нужно запустить Desperate Housewives: The Game RU DVD на macOS Apple Silicon через CrossOver.

Работай через Terminal. Текущая папка должна быть папкой DVD с data1.cab и Archives. Сначала проверяй состояние, потом вноси изменения. Не удаляй пользовательские файлы. Перед заменой DLL обязательно делай backup.

Контекст:
- CrossOver bottle называется DHW.
- Игра должна быть установлена в C:GamesDHW.
- macOS-путь к установленной игре обычно:
  ~/Library/Application Support/CrossOver/Bottles/DHW/drive_c/Games/DHW
- Запускать нужно C:GamesDHWDesperateHousewives.exe, не dhw.exe.
- Версия игры: RU DVD. Нужна именно DVD-версия, не CD.

Что нужно сделать:
1. Проверь, что текущая папка содержит data1.cab и Archives.
2. Проверь, что bottle DHW существует.
3. Проверь, что dosdevices/z: в bottle указывает на /.
4. Проверь, что игра лежит в C:GamesDHW.
5. Проверь наличие архивов в C:GamesDHWArchives:
   Dialogue.HZL, Meshes.HZL, Music.HZL, SoundEffects.HZL, Textures.HZL.
6. Если больших .HZL архивов нет в установленной игре, скопируй их из DVD-папки Archives.
7. Если Music.HZL отсутствует, достань его из data1.cab через unshield.
8. Если обычный unshield падает на Music.HZL, используй raw extraction и восстановление deflate chunks.
9. Собери native-заглушку avicap32.dll с экспортами capGetDriverDescriptionA и capGetDriverDescriptionW. Обе функции должны возвращать FALSE.
10. Оригинальную avicap32.dll сохрани как avicap32.real.dll.
11. Заглушку положи в drive_c/windows/syswow64/avicap32.dll.
12. При запуске обязательно используй WINEDLLOVERRIDES=avicap32=n.
13. Для графики не используй DXVK и d3dmetal. DXVK даёт чёрный экран со звуком и курсором.
14. Рабочая связка: CX_GRAPHICS_BACKEND=wined3d и Wine Direct3D renderer=opengl.
15. Установи renderer=opengl через CrossOver wine:
    reg add "HKCUSoftwareWineDirect3D" /v renderer /d opengl /f
16. Запусти игру и проверь, что появляется картинка, музыка, курсор и меню.
17. После тестов проверь, не остались ли зависшие DesperateHousewives.exe, winewrapper.exe или wineserver.

Финальная команда запуска должна быть такой:

"/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/CrossOver-Hosted Application/wine" 
  --bottle DHW --no-update 
  --env "CX_GRAPHICS_BACKEND=wined3d WINEDLLOVERRIDES=avicap32=n" 
  --winver winxp 
  --desktop "DHW,800x600" 
  --workdir "C:GamesDHW" 
  "C:GamesDHWDesperateHousewives.exe" 
  nointro skipintro nosplash

В конце дай короткий отчёт:
- какие файлы были скопированы;
- был ли восстановлен Music.HZL;
- была ли установлена avicap32.dll заглушка;
- установлен ли renderer=opengl;
- точная команда запуска.

Если команда claude или codex не найдена, значит соответствующий CLI-агент не установлен или не добавлен в PATH.

Главная мысль: это не одна галочка в CrossOver, а цепочка из трёх фиксов: дополнительные игровые архивы, avicap32 override и принудительный wined3d + opengl.