Программист Натан Бэггс выпустил технический разбор и исправление для приключенческой игры Odyssey: The Search for Ulysses, вышедшей в 2000 году. Долгое время проект оставался практически недоступным на современных операционных системах из-за критических ошибок при выводе изображения и воспроизведении вступительных видеороликов.
История и особенности игры
Квест создавался французскими студиями In Utero и Cryo Interactive, а издателями выступили Cryo в Европе и DreamCatcher Interactive в Северной Америке. Игра базировалась на движке Cryogen, который совмещал трёхмерные модели персонажей в реальном времени с предварительно отрендеренными статичными фонами. Сюжет опирался на поэму Гомера: Пенелопа отправляла друга детства Одиссея по имени Геритий на поиски пропавшего царя Итаки. Герою предстояло начать путь с руин Трои, вступить в схватку с Горгоной и Циклопом, а также распутать заговор приспешников бога Посейдона.
В момент релиза тайтл получил сдержанные отзывы прессы и заработал 58 баллов на Metacritic. Журналисты отмечали атмосферное звуковое сопровождение и верность первоисточнику, однако ругали запутанную схему управления, завышенную сложность и механику мгновенной гибели персонажа при выборе неверного действия в диалогах или загадках. Из-за специфической архитектуры со временем проект стал полностью неработоспособным на актуальном железе.
При попытке запустить игру на Windows 11 пользователи сталкивались с целым рядом сбоев. Программа инсталляции отказывалась функционировать без принудительной совместимости с Windows 98, а главное меню, отрисованное в трёхмерном пространстве через устаревший интерфейс Direct3D 3, покрывалось визуальными артефактами. Основной проблемой стал встроенный видеоплеер движка CryoMovie, приводивший к вылету игры при старте воспроизведения сюжетных роликов формата HNM.
Анализ исполняемого файла в декомпиляторе Ghidra показал, что подсистема декодирования видео была жёстко рассчитана на полноэкранный 16-битный буфер рендеринга. Современные графические библиотеки Microsoft работают исключительно с 32-битными поверхностями, а встроенная системная заплатка Dwm8And16BitMitigation не смогла корректно обработать устаревший видеокодек. «Современная Windows больше не поддерживает 16-битные поверхности и возвращает 32-битный буфер. Системные механизмы совместимости должны были справиться с этим, однако логика используемой библиотеки оказалась несовместима с системными заплатками», — пояснил Натан Бэггс.
Для устранения неполадок автор разработал перехватчик системных функций на языке C++26, внедрив его через подмену библиотеки ddraw. dll. Созданный инструментарий перехватывает обращения к интерфейсам COM, включая IDirectDraw, IDirectDraw4 и IDirect3D3, а также контролирует параметры инициализации функции HNMPI_Init в сторонней библиотеке декодирования синематиков. В процессе работы патч выделяет промежуточный буфер и на лету конвертирует 16-битные цветовые данные в современный 32-битный формат при вызовах блокировки и разблокировки поверхности. Исходный код модификации опубликован в открытом репозитории gems на платформе GitHub под лицензией Boost Software License.

Комментарии
Оставляйте комментарии, отвечайте другим пользователям, ставьте плюсы и минусы и добавляйте быстрые реакции.
Войдите в аккаунт, чтобы оставлять комментарии, отвечать другим пользователям и ставить реакции.