Как всё начиналось
Запуску WA и Diablo I мешает сбой. DirectDraw всё рисует как настоящий Windows, но мы видим только чёрный квадрат, который всё перекрывает. Патча нет но есть хак, который не принимают в код Wine, потому что он сломает что-нибудь ещё. Для Wine 0.9 - 0.9.48 нужно было просто скачать файл ddraw.dll для именно своей версии Wine и положить в каталог с игрой. Сам патч для исходного кода - это один-единственный файл для всех версий Wine - просто уже пропатченные бинарники не подходили к другим Wine (кстати не замечал такого для других всевозможных патчей) вследствие частого переписывания больших частей кода библиотеки ddraw.
P.S. Для Wine 0.9 - 0.9.12 один-единственный файл, а потом почему-то для каждой новой версии Wine приходилось вручную патчить исходник! Либо загружать из Интернета файл ddraw.dll для свей версии Wine, как я и делал. Список. (Исходный код патча для всех версий один и не менялся, бинарники 0.9.49-0.9.52 неработоспособны).
Что было дальше
Начиная с Wine 0.9.49 всё поменялось, патч не работал. Для тех кто не помнит версии Wine объясняю. Последним Wine был 0.9.61, потом релиз-кандидаты (пять штук) и 1.0 в мае 2008 года. Как всегда, разница во времени между релизами - 2 недели. Всё это время я использовал Wine 0.9.48. А потом нашёл решение. Его знали и раньше, но после совмещения двух страничек на AppDB про WA нужный комментарий удалился. Я его нашёл только потом. Надо было пропатчить user32.dll (а точнее, одну строчку заккоментировать), и старый патч для ddraw работал. Я тут же послал результаты тестов для Wine 1.1.2 - последнего на тот момент. В 1.1.3 всё работать перестало. Ссылку удалил.
Держал два Wine. Потом нашёл страницу человека, который улучшил патч для ddraw так, что он стал работать! Патчить user32 уже не надо было. С 1.0 по 1.1.26 всё работало, а на appdb и не знают. Ну что, никто больше результаты тестов после меня не выкладывал, я написал что в 1.1.26 всё работает вот с этим патчем. В 1.1.27 - перестало. Ссылка на бинарник. Страничка с патчами закрылась, видимо зря я выложил результат тестов с ссылкой на патч.
Потом кто-то ещё написал работающий патч для Wine 1.1.35. Как нетрудно догадаться, в одном из следующих релизов (1.1.38) работать перестало. Потом был патч для 1.1.44, с какого релиза Wine не работает не знаю.
Как обстоит дело сейчас
В комментариях к 1.2 ValdikSS (один из лучших и известных игроков) написал что нашёл принципиально новое решение, не трогающее ddraw. Я попробовал - в сетевой игре не удаётся отправлять по Enter тексты (встречался с этим глюком и раньше, но вот в каком релиза - не помню, 1.1.20 наверное, до того как прикрыли страничку с патчами). Патч для Wine 1.2, бинарник для Wine 1.2.
Сегодня последняя версия Wine 1.3.15 и патч от ValdikSS опять не работает. В Bugzilla об этом написали, тут же кто-то ответил просьбой больше сюда не писать ("в этой теме полезных комментариев штук 20, так давайте же писать только полезные комментарии", и в качестве антиоффтопика какие-то полезные размышления).
Почему так происходит? Мне кажется, разработчики Wine намеренно ломают работоспособность стороннего патча для ddraw сразу как он появляется. Правда с последним пришлось повозиться, так как он ddraw не трогает. Сделано это может быть например для того, чтобы больше людей приобрели коммерческий Wine от CodeWeavers.
P.S. Чтобы сделать Wine 1.1.2 с работающим Worms Armageddon и Diablo I, нужно закомментировать строчку
Код: Выделить всё
if (hwnd == GetActiveWindow()) WINPOS_ActivateOtherWindow( hwnd );
в файле dlls/user32/dialog.c, и пропатчить ddraw старым патчем. Закомментировать - поставить перед ней // и пробел. Да, кстати, 1.1.2 больше не собирается с новыми компиляторами, используйте строчку "CC=gcc-4.2 ./configure" чтобы собрать со старым, если он установлен в систему.