Бум консольных портов на ПК: долой эксклюзивность?

Статьи

В последнее время игровые порталы буквально засыпало новостями о портировании то одной, то другой консольной игры на ПК. Нет, пользовательские порты существовали и раньше, однако в последние месяцы о них говорят заметно чаще. Неужели энтузиасты наконец нашли ключ от всех дверей, а консольным эксклюзивам скоро придёт конец?

В игровых сообществах уже обсуждают, как лихо ПК-бояре переиграют консольщиков, когда GTA VI, изначально выходящая на консолях, доберётся до ПК. Да ещё и «бесплатно», да ещё и в «лучшем качестве»! Звучит как мечта любого непримиримого противника консольных эксклюзивов. Но если копнуть поглубже, выясняется, что всё не так просто. Хотя поводов напрягаться у платформодержателей и разработчиков действительно стало больше.

Чтобы разобраться в происходящем, придётся освоить несколько терминов и понять, что за ними стоит. Так что, если вам интересно, как энтузиасты умудряются запускать консольные игры на ПК, немного поднапрячься всё-таки придётся. С другой стороны, матана и листингов на сотни строк здесь не будет: о сложных вещах я постараюсь рассказать простым языком. А если вы гуру программирования или читаете даташиты за завтраком — не судите строго.

А начнём с того, что за бумом консольных портов на ПК стоят несколько технологий, и ни одна из них не нова. Более того, они тесно связаны между собой, а некоторые проекты сочетают сразу несколько подходов. И это мы ещё не обо всём успеем поговорить в рамках одной статьи.

Во всём виноват какой-то «-ция»

Эмуляция

Эмуляция — это воспроизведение работы одной аппаратной платформы программными средствами другой. Проще говоря, эмулятор заставляет компьютер вести себя так, словно перед нами не ПК, а игровая консоль.

Собственно, самих игр для консолей разработчики эмуляторов практически не касаются. По имеющимся спецификациям оборудования, даташитам и результатам обратной разработки они воспроизводят логику работы компонентов консоли на программном уровне. Так что игры, запущенные в таких эмуляторах, оказываются в среде, воспроизводящей родную платформу, вне зависимости от того, на каком оборудовании работает сам эмулятор.

Обратная сторона такого подхода — большие накладные расходы. Это в «железе» чип выполняет определённые действия непосредственно. При классической эмуляции с помощью интерпретации программа должна прочитать каждую инструкцию, определить, что она означает, и воспроизвести её выполнение с помощью заранее написанного программного кода. Причём на одну инструкцию эмулируемого процессора может приходиться множество инструкций реального.

Другими словами, для комфортной эмуляции производительность ПК зачастую должна существенно превосходить производительность эмулируемой системы. Причём разница в отдельных случаях может измеряться десятками.

Эмуляция давно известна, особенно игрокам со стажем. В своё время широкое распространение получили эмуляторы консолей Nintendo и Sega — NES, SNES и Genesis. В России также были и остаются популярны эмуляторы ZX Spectrum 48K/128K, а также его советских и российских клонов. Со временем появились эмуляторы и более современных консолей: к примеру, первых PlayStation.

Зато хороший эмулятор запустит любую (или почти любую) игру той платформы, которую он эмулирует. А часто ещё и с различными улучшениями, вроде поддержки сохранений или сглаживания графики. Идеальный вариант.

Но для современных консолей это куда более сложная задача. Причина проста: современная консоль — это сложная система с мощным процессором, графическим ускорителем и множеством специализированных компонентов. Точное воспроизведение их работы программными средствами требует огромных вычислительных ресурсов. Некоторые ПК, которые геймеры до сих пор используют дома для игр, по производительности уступают современным консолям. Какая уж тут эмуляция.

Но даже если производительности ПК достаточно, разработчикам эмуляторов приходится прибегать к различным ухищрениям, отказываясь от буквального воспроизведения работы оборудования там, где без этого можно обойтись. Один из таких приёмов — двоичная (бинарная) трансляция, при которой машинный код оригинального процессора преобразуется в код, пригодный для выполнения на ПК.

Трансляция

Двоичная трансляция — это преобразование машинного кода, предназначенного для одной программной или аппаратной среды, в форму, пригодную для выполнения в другой. Чаще всего речь идёт о процессорных инструкциях. Например, российские процессоры «Эльбрус» поддерживают трансляцию машинного кода x86 в код собственной архитектуры e2k с помощью транслятора Lintel.

Трансляция бывает динамической и статической. Разницу между ними можно сравнить с устным и письменным переводом. При динамической трансляции код переводится «на лету», по мере выполнения программы. Это напоминает синхронный перевод: нужно быстро передать смысл сказанного, не имея возможности заранее подготовить результат.

При статической трансляции код преобразуется заранее, ещё до запуска программы. Это уже ближе к письменному переводу, который можно тщательно проработать и оптимизировать. Хороший пример статической рекомпиляции — проект Zelda 64: Recompiled, позволяющий запускать The Legend of Zelda: Majora’s Mask на ПК. С помощью инструмента N64Recomp машинный код оригинальной игры преобразуется в код на языке «Си», который затем компилируется для целевой платформы. В результате получается нативная программа, которой уже не нужно эмулировать процессор Nintendo 64.

Но есть и другой важный нюанс: иногда переводить процессорный код вообще не требуется. Современные консоли — PS4, PS5, Xbox One и Xbox Series X|S — используют процессоры AMD с архитектурой x86-64. Поэтому машинный код игр для этих платформ во многом совместим с процессорами современных ПК. Если можно так выразиться, у консолей и компьютеров один язык, но разные диалекты. Различия в системных библиотеках, форматах исполняемых файлов и других компонентах. Поэтому просто просто взять консольную игру и запустить её на компьютере не выйдет.

Чтобы преодолеть эти различия, энтузиасты разрабатывают специальные инструменты. К примеру — AnyPS5, проект для запуска исполняемых файлов PlayStation 5 в Windows и Linux. Он адаптирует исполняемые файлы консоли к целевой системе и предоставляет собственные реализации необходимых системных библиотек. При этом основная логика игры может выполняться непосредственно на процессоре ПК, без эмуляции процессора консоли.

Именно такой подход позволил запустить версию Dead Cells для PS5 как обычную программу Windows. Теоретически он может быть применён и к другим играм.

Сходная идея лежит в основе BBPort — проекта, посвящённого Bloodborne. Он позволяет запускать оригинальный исполняемый файл игры для PlayStation 4 на ПК с процессором x86-64 под управлением Windows и Linux. Поскольку процессорный код совместим с архитектурой компьютера, переводить его на другой набор инструкций не требуется. Вместо этого проект реализует необходимое системное окружение, а графические команды обрабатывает собственный рендерер на основе наработок эмулятор shadPS4 — для работы через Vulkan.

Однако у такого подхода есть ограничения. Совместимость зависит от того, насколько полно реализованы нужные игре системные функции в проектах и насколько корректно работает графическая трансляция. Если игра вызывает неподдерживаемую функцию или рассчитывает на специфическое поведение консольного оборудования, она может завершиться с ошибкой или работать некорректно.

Поэтому даже при совпадении архитектур универсального решения для всех игр не получается: каждую приходится проверять, а иногда и вручную дорабатывать окружение.

С графикой вообще всё сложнее. Игры взаимодействуют не напрямую с графическим чипом видеокарты, а через программные интерфейсы (API). И здесь у консолей и ПК есть различия. Хотя у Xbox и Windows много общего на уровне графических API: обе платформы используют Direct3D, консольные версии имеют собственные особенности и расширения. Поэтому о полной совместимости говорить не приходится

С PlayStation ситуация отличается радикально: Sony использует собственные графические интерфейсы, которые приходится адаптировать к API целевой платформы.

А если речь идёт о запуске игр под Linux, задача усложняется ещё больше: Direct3D там не является родным графическим API. Правда, существуют инструменты вроде DXVK, способные преобразовывать команды Direct3D в Vulkan, но это лишь ещё один слой совместимости, который тоже должен работать корректно.

Таким образом, сложность переноса зависит не только от того, откуда мы переносим игру, но и куда. Чем больше различий между исходным и целевым программным окружением, тем больше работы требуется для их преодоления. И порой оказывается проще потратить усилия не на трансляцию, а на декомпиляцию.

Декомпиляция

Компилятор — это программа, которая переводит код, написанный на языке программирования высокого уровня, в машинный код. Декомпилятор, в свою очередь, пытается выполнить обратную операцию: на основе машинного кода восстановить программу на языке более высокого уровня. И, казалось бы, если всё так просто, почему бы не декомпилировать все консольные игры и не переписать их по-быстрому на ПК?

Декомпилировать-то их можно, но вот переписать «по-быстрому» не выйдет. Если вы когда-либо занимались программированием, то, наверное, знаете, что программы много читают. Читаемость кода критически важна для понимания того, что делает программа: хорошо структурированный код проще поддерживать и изменять. Поэтому программистов учат следовать определённым принципам и использовать проверенные приёмы проектирования — например, KISS (Keep It Simple, Stupid) и SOLID (долго объяснять, да и расшифровка не поможет).

Проблема декомпиляции заключается в том, что при компиляции часть информации теряется. Машинный код не хранит исходную структуру программы в удобном для человека виде: имена переменных и функций, комментарии, названия классов и многие другие детали могут быть утрачены. Декомпилятор пытается восстановить логику программы по инструкциям и переходам между ними, но результат далеко не всегда похож на исходный код. Вместо аккуратных функций с понятными именами можно получить длинные блоки с условными обозначениями, запутанными ветвлениями и промежуточными переменными.

Иронично, но если скомпилировать результат декомпиляции, на выходе вы, скорее всего, не получите исходный исполняемый файл. А иногда не получите даже работающую программу. И это нормально: даже если восстановленный код сохраняет логику оригинала, компилятор может сгенерировать другой машинный код. В идеале получившаяся программа будет работать так же, как оригинал. Но на практике это удаётся не всегда.

В проектах по декомпиляции игр энтузиасты-разработчики нередко стремятся восстановить исходный код так, чтобы он был не только читаемым, но и при повторной компиляции воспроизводил оригинальный бинарный файл. Это позволяет проверить, насколько точно удалось восстановить исходную программу. Правда, побайтовое совпадение — не обязательное условие декомпиляции, а скорее цель некоторых проектов по реконструкции кода.

Когда логика игры восстановлена, а код приведён в порядок, портировать её на другую платформу становится значительно проще. Особенно если игра использует движок, который уже поддерживает ПК: тогда часть работы сводится к адаптации платформозависимых компонентов и настройке сборки.

Но что делать, если движок не поддерживает ПК? А если он ещё и закрытый?

При декомпиляции порой невозможно (или очень сложно) отделить код внутриигровых скриптов от кода движка. Хорошо, если архитектура игры предусматривает разделение игровой логики и кода, отвечающего за физику, рендеринг и звук. Неважно, скомпилированы скрипты или нет (во втором случае всё ещё проще). А если такого разделения нет? Тогда декомпиляция и реконструкция исходного кода превращаются в настоящую головоломку: приходится разбираться в связях между компонентами, восстанавливать логику работы движка и вручную приводить полученный код в пригодный для дальнейшей разработки вид.

Именно поэтому успешные проекты по декомпиляции часто связаны со старыми играми: за годы существования вокруг них успевает сформироваться сообщество исследователей, а иногда удаётся найти и дополнительные материалы, помогающие восстановить код. А вот игры на собственных закрытых движках (или глубоко модифицированных открытых), со сложными системами скриптов и тесно переплетённой игровой логикой могут оказаться серьёзным вызовом. Даже если удаётся восстановить значительную часть кода, это ещё не означает, что игру получится быстро и безболезненно перенести на ПК.

Впрочем, успешные примеры есть, и их немало. Один из самых известных — Super Mario 64: энтузиасты восстановили исходный код игры на «Си», добившись его соответствия оригинальному бинарному файлу, а затем на его основе создали нативные версии для ПК.

Другой пример — The Legend of Zelda: Ocarina of Time. Проект декомпиляции позволил восстановить исходный код игры, а на его основе появился Ship of Harkinian — нативный порт для современных платформ с поддержкой высокой частоты кадров, широкоэкранного режима и других улучшений.

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

Например, в 2021 году Take-Two подала в суд на авторов проекта re3/reVC, в рамках которого энтузиасты реконструировали код GTA III и Vice City. Правообладатель обвинил разработчиков в нарушении авторских прав. В 2023 году претензии к четырём ответчикам были урегулированы, а требования к остальным десяти Take-Two отозвала отдельно — без ущерба для возможности подать иск повторно. Таким образом, даже если техническая задача решена, юридические риски могут поставить под угрозу дальнейшую судьбу проекта.

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

Реимплементация

В отличие от трансляции и декомпиляции, реимплементация не предполагает преобразования оригинального машинного кода в новую форму. Разработчики фактически воссоздают игру на собственной кодовой базе. При этом они могут изучать поведение оригинала, анализировать его форматы данных и даже обращаться к результатам обратной разработки. Главное отличие в том, что код игры пишется заново, а не получается путём преобразования оригинального.

Но получается ли при этом та же игра? И да, и нет. Если новая реализация использует ресурсы оригинальной игры — модели, текстуры, музыку и другие данные, — игрок может вообще не заметить разницы. По крайней мере, пока не столкнётся с отличиями в поведении игры, ошибками или особенностями, которые разработчики ещё не успели воспроизвести.

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

Зачастую подобные проекты развиваются постепенно. На ранних этапах разработчики могут использовать ресурсы оригинальной игры, чтобы быстрее добиться работающего результата. Затем, если это входит в их планы, они заменяют их собственными моделями, текстурами, звуками и другими элементами. А со временем проект может перерасти простое воссоздание оригинала: получить новые механики, дополнительные уровни и другой контент. В итоге вместо порта или точного воспроизведения оригинала получается самостоятельная игра, созданная по его мотивам.

Среди консольных проектов хороший пример — AM2R (Another Metroid 2 Remake), фанатский ремейк Metroid II: Return of Samus для Game Boy. Игра воссоздаёт оригинал в стиле более поздней Metroid: Zero Mission, с обновлённой графикой и современным управлением. Правда, этот пример немного отличается от классической реимплементации: AM2R — именно фанатский ремейк, созданный как отдельная игра. После релиза в 2016 году Nintendo потребовала прекратить распространение проекта, но сообщество продолжило развивать его, выпуская неофициальные обновления, исправления и дополнительный контент.

Другой показательный пример — OpenTTD, открытая реализация Transport Tycoon Deluxe 1995 года. Правда, оригинал вышел на ПК, а не на консолях, так что это скорее иллюстрация самого принципа. Разработчики заново написали игровой код, а на первых этапах OpenTTD использовала графику и звуки оригинала. Позднее сообщество создало собственные наборы ресурсов — OpenGFX, OpenSFX и OpenMSX, благодаря которым игра смогла работать без файлов оригинальной Transport Tycoon Deluxe. На этом развитие не остановилось: OpenTTD получила новые возможности и поддержку пользовательских модификаций. В результате получился самостоятельный проект, который давно перерос простое воспроизведение оригинала.

Таким образом, реимплементация позволяет не только запускать старые игры на современных платформах, но и постепенно освобождать их от технических ограничений оригинала. А если разработчики создают собственные ресурсы и добавляют новый контент, проект может превратиться в самостоятельную игру. Правда, это требует куда больше усилий, чем просто добиться сходства с оригиналом: по сути, разработка начинает напоминать создание полноценного ремейка.

Бум ИИ и бум портов — совпадение?

Нетрудно заметить, что бум портов консольных игр совпал с бумом ИИ. И хотя одной лишь хронологической близости недостаточно, чтобы доказать прямую связь, конкретные примеры уже показывают, что ИИ действительно меняет подход к восстановлению и переносу старых игр.

Дело в том, что современные большие языковые модели заметно упростили работу с программным кодом. Но важнее даже не то, что нейросеть может написать функцию по запросу, а то, что она способна помогать на разных этапах разработки: разбираться в чужом коде, изучать поведение программы, предлагать реализацию и проверять её на практике.

Причём это уже не только теория. В 2024 году исследователи представили LLM4Decompile — семейство моделей, специально обученных декомпиляции машинного кода. В опубликованных экспериментах специализированные модели заметно превзошли обычные инструменты по доле успешно повторно выполняемых программ на тестовых наборах.

Не менее полезны нейросети при трансляции. Перенос программы на другую платформу может потребовать адаптации системных вызовов, замены библиотек, преобразования графических команд и исправления несовместимостей. Раньше разработчику приходилось самостоятельно разбираться в документации, особенностях API и тонкостях низкоуровневого кода. Теперь часть этой работы можно поручить ИИ: он способен предложить подходящий аналог функции, переписать фрагмент кода и помочь найти причину ошибки. Разумеется, это не значит, что разработчику больше не нужно понимать устройство программы. Нейросеть может уверенно предложить решение, которое выглядит правдоподобно, но работает неправильно, — поэтому результат всё равно приходится проверять.

Однако настоящие перемены связаны не только с самими языковыми моделями, но и с развитием ИИ-агентов. В отличие от обычного чат-бота, которому приходится последовательно задавать вопросы и вручную переносить ответы в проект, агент может работать с файлами, запускать инструменты, изменять код, собирать программу и проверять результат.

Причём подобный подход применим не только к декомпиляции и трансляции, но и к реимплементации. Если агент способен исследовать работу программы, изучать её файлы и проверять собственный код на соответствие оригиналу, то почему бы не поручить ему воссоздание игры целиком? Конечно, с крупными проектами всё гораздо сложнее: десятки систем, огромные объёмы данных, сложная физика, графика и тысячи взаимосвязанных деталей не исчезнут по одному щелчку пальцев. Но что насчёт небольших игр? Или старых проектов для DOS, которые можно исследовать и запускать в контролируемой среде?

К примеру, проект PyWarlords показывает, как этот подход работает на практике. Автор поставил ИИ-агенту задачу воссоздать DOS-игру Warlords на Python. Агент декомпилировал оригинальный исполняемый файл, подготовил описания игровых механик, реализовал их заново и сравнивал результат с оригиналом, запущенным в DOSBox. В итоге появилась играбельная реализация с боевой системой, экономикой, компьютерными противниками и другими основными механиками. Человек при этом не исчез из процесса: автор задавал направление работы и проверял результат. Но значительную часть рутинного анализа и реализации выполнял агент.

Важно, что PyWarlords — не просто пример генерации кода по запросу. Здесь агент участвовал в последовательном процессе: исследовал оригинальную программу, восстанавливал её поведение, писал новую реализацию и проверял её. Пока это отдельный проект, а не доказательство того, что ИИ способен автономно переносить игры любого масштаба. Но он наглядно демонстрирует принципиальную возможность такого подхода.

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

Однако не всё так радужно, как может показаться на первый взгляд. Обратная разработка затрагивает интересы правообладателей, а сами ИИ-инструменты тоже могут сталкиваться с ограничениями. Недавно Antropic буквально «дёрнула» рычаг и запретила нейросети Claude декомпилировать игры. 

Впрочем, джин из бутылки уже выпущен. Помимо облачных сервисов существуют открытые модели, веса которых можно скачать и запускать на собственном оборудовании — домашнем компьютере или арендованном сервере. Такие модели тоже могут иметь ограничения, но пользователь получает гораздо больше контроля над тем, как и где они работают.

И для этого вовсе не обязательно строить собственный дата-центр. Современные видеокарты позволяют запускать достаточно мощные модели локально, хотя объём видеопамяти накладывает ограничения на их размер и производительность.

Так что даже если облачные ИИ-сервисы начнут строже ограничивать отдельные задачи, связанные с обратной разработкой, сама технология никуда не исчезнет. Открытые модели, локальный запуск и быстро развивающиеся агентные инструменты делают её всё доступнее. А значит, борьба между правообладателями, разработчиками ИИ и энтузиастами, желающими вдохнуть новую жизнь в старые игры, скорее всего, только начинается.

Так есть ли ключ от всех дверей?

Как мы видим, ни одна из перечисленных технологий не позволяет безболезненно и быстро переносить любые игры с консолей на ПК — или на какую-либо другую платформу. За кажущейся простотой скрывается множество технических нюансов: несовместимые системные библиотеки, особенности графических API, различия в работе оборудования и десятки других проблем, которые приходится решать разработчикам. Универсальной кнопки «Сделать порт» пока не существует.

Поэтому не стоит ждать, что уже завтра появятся полноценные эмуляторы или трансляторы PlayStation 5 и Xbox Series X|S, на которых без проблем запустится вся библиотека этих консолей. Дело не только в недостатке вычислительной мощности. Современные консоли — сложные системы, а для качественной эмуляции необходимо разобраться в работе их оборудования, графики и программного окружения. На это уходят годы исследований и разработки, а производительность зависит от множества факторов.

Декомпиляция и реимплементация тоже не стали волшебным решением. Да, современные ИИ-модели и агенты способны заметно ускорить работу: помогать разбираться в чужом коде, находить ошибки и писать отдельные компоненты. Но они не отменяют необходимости исследовать оригинальную игру, проверять результаты и исправлять многочисленные несовпадения. И декомпиляция, и реимплементация по-прежнему требуют огромного количества человеко-часов. ИИ сокращает затраты, но не превращает многолетний проект в задачу на один вечер. А энтузиастов, готовых тратить свободное время на такое программирование, даже с помощью вайб-кодинга, не так уж много.

Увидим ли мы сразу после выхода GTA VI её неофициальный порт на ПК? Скорее нет, чем да. Даже если удастся получить и преобразовать исполняемый код, это ещё не означает, что игра запустится и будет работать правильно. GTA VI — это не только игровая логика, но и сложнейшая графическая подсистема, физика, искусственный интеллект, звук, потоковая загрузка огромного мира, сетевые функции и множество платформозависимых компонентов.

Все-таки масштабы первых ласточек, вроде Dead Cells и GTA VI не сопоставимы. Кроме того, важна не только возможность запустить игру, но и качество получившегося порта или воспроизводимой эмуляции. Они должны быть достаточно стабильным, производительными и удобными для игры. Сам факт запуска ещё не означает, что результат сможет заменить полноценную ПК-версию.

Наконец, остаётся юридическая сторона вопроса. Даже если технически перенести игру на ПК уже возможно, это не означает, что проект можно без риска распространять или что правообладатель отнесётся к нему благосклонно. А если речь идёт о крупной современной игре уровня GTA VI, цена ошибки и возможные последствия для разработчиков проекта могут оказаться особенно высокими.

Хочется надеяться, что в будущем так любимых платформодержателями эксклюзивов станет меньше. Ведь если неофициальные порты будут появляться всё чаще, правообладателям, возможно, придётся пересмотреть свою политику. Удерживать игру в рамках одной платформы становится менее привлекательной стратегией, если технические барьеры постепенно снижаются.

Возможно, именно это подтолкнёт индустрию к настоящей мультиплатформенности, где игрокам не придётся покупать отдельную консоль ради одной-двух интересующих их игр. А проекты, годами остававшиеся заложниками платформенной политики, получат шанс обрести новую жизнь — не только благодаря энтузиастам, но и в виде официальных портов. Например, XBOX уже запустил подобную инициативу с подзаголовком LAB, где будут тестироваться разные способы создания игр — в том числе и декомпиляции.

И тогда выиграют все: игроки получат больше свободы выбора, разработчики — новую аудиторию, а хорошие игры перестанут быть привязаны к железу, для которого когда-то были созданы. Но это уже совсем другая история.

Не пропускайте наши новостиДобавьте сайт в предпочитаемые источники, чтобы видеть нас чащеДобавить в Google

Сейчас на главной