Разработчик под ником Franckrst представил рабочий порт культовой экшен-RPG Diablo II: Lord of Destruction для портативной консоли PlayStation Vita. Проект получил название D2Vita и основан не на обратной разработке или воссоздании исходного кода с нуля. Вместо этого автор задействовал специализированную среду выполнения winx86 с динамическим транслятором инструкций на базе Box86, которая выполняет оригинальный 32-битный бинарный файл для Windows, переводя его код на лету в нативные инструкции ARMv7.
Технические детали и производительность
Ранее автор пытался реализовать классический нативный перенос через декомпиляцию в проекте D2MOO и статическую трансляцию кода в C, однако колоссальный объем работы позволил перевести лишь около 3. 4% базовой библиотеки D2Common. В итоге стратегию сменили на прямое исполнение оригинального исполняемого файла от Blizzard патча 1. 14d. Чтобы заставить игру работать без операционной системы от Microsoft, разработчик создал более 600 программных заглушек-шиммов, заменив библиотеки KERNEL32, USER32, GDI32, системные механизмы ввода-вывода и стек Winsock нативными вызовами для процессора консоли.
Ограниченная аппаратная начинка портативной системы Sony потребовала серьезного вмешательства в графическую подсистему, так как стандартный программный рендеринг работал слишком медленно. Проект получил собственную графическую прослойку Glide, использующую низкоуровневый системный графический интерфейс sceGxm консоли вместо отрисовки силами центрального процессора. Переход на асинхронную отправку кадра видеочипу поднял показатели бенчмарка сразу на 52%, а перенос ресурсоемких циклов отрисовки ячеек тайлов и динамического освещения в нативный код обеспечил стабильную скорость в пределах от 55 до 60 кадров в секунду в реальном игровом процессе.
Наиболее спорным и смелым элементом проекта стала реализация сетевого режима, включая возможность выхода на официальные серверы Blizzard. Клиент честно рассчитывает проверочные хэши CheckRevision, сверяет цифровую подпись Authenticode и передает лицензионные ключи без подделки сетевых пакетов или взлома кода в памяти. При этом доступ к официальному сервису Battle. net активен по умолчанию, что создает реальный риск блокировки учетной записи пользователя за нарушение пользовательского соглашения. Поведение встроенного серверного античита Warden в таком окружении до конца не изучено, поэтому игрокам оставили системную возможность принудительно заблокировать внешние соединения и переключиться исключительно на частные серверы.
Управление классической ролевой игрой полностью адаптировали под портативные стандарты консоли. Левый аналоговый стик отвечает за прямое управление движением персонажа, правый стик выполняет роль курсора мыши, а сенсорный экран обрабатывает быстрые нажатия. Для вызова ключевых игровых экранов вроде журнала заданий, книги навыков, карты и инвентаря автор разработал специальное радиальное меню на 7 секторов, привязанное к кнопке Select, тогда как виртуальная клавиатура открывается отдельной комбинацией клавиш.
Сам установочный пакет в формате VPK не содержит никаких защищенных авторским правом файлов. Желающим прикоснуться к классике на портативной системе требуется самостоятельно предоставить оригинальные файлы расширения Lord of Destruction, включая монолитный исполняемый файл патча 1. 14d объемом ровно 3 618 792 байта и оригинальные архивы MPQ. Любые другие версии игры, включая популярный в сообществе патч 1. 13c, загрузчик консоли запускать отказывается.
Проект развивается активными темпами и уже получил обновление до версии 0. 1. 6, в котором расширили доступный объем оперативной памяти под игровые нужды до 25 МБ, устранили вылеты при старте из-за отсутствия графических компонентов и наладили встроенную систему отправки зашифрованных отчетов о сбоях. Исходный код загрузчика и готовые сборки для установки через VitaShell находятся в открытом доступе на GitHub.
Комментарии
Оставляйте комментарии, отвечайте другим пользователям, ставьте плюсы и минусы и добавляйте быстрые реакции.
Войдите в аккаунт, чтобы оставлять комментарии, отвечать другим пользователям и ставить реакции.