Видели Штормград в Tony Hawk’s Pro Skater? А шутер от первого лица прямо внутри WoW? За такими роликами и мемами стоят фанаты, которые превращают Азерот в площадку для самых разных игр: переносят города, пишут аддоны и даже создают собственные клиенты вроде WoWee. Сейчас расскажем, как это делают.

WoWee: заново научиться показывать Азерот

WoWee расшифровывается как World of Warcraft Engine Experiment. Келси Дэвис взялась за собственный клиент WoW: программу, которая рисует мир, принимает нажатия клавиш и общается с сервером. Код написан на C++, за графику отвечает Vulkan. Оригинальный клиент Blizzard для этого запускать не нужно.

В документации WoWee названы три поддерживаемые версии: оригинальный WoW 1.12, The Burning Crusade 2.4.3 и Wrath of the Lich King 3.3.5a. Авторы проверяли клиент с AzerothCore/ChromieCraft, TrinityCore, MaNGOS и Turtle WoW 1.18. На официальные миры нынешнего актуала с ним не зайти: он рассчитан на старые версии и совместимые серверные эмуляторы.

Самого Азерота в скачанном WoWee нет. Модели, текстуры и файлы мира нужно взять из собственной законно полученной установки игры. WoWee извлечёт их из архивов и составит каталог, чтобы потом находить нужное здание, дерево или существо.

WoWee — образовательный и исследовательский проект. Он не содержит ресурсов, данных или закрытого кода Blizzard Entertainment.

— Документация WoWee

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

Оплот Чести в WoWee
Оплот Чести глазами WoWee. Скриншот из репозитория проекта.

Город уже виден. Теперь нужно, чтобы в нём можно было играть

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

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

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

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

Собственный клиент зато даёт свободу менять то, до чего обычный аддон не доберётся. WoWee поддерживает контроллеры и, помимо настольных систем, Android с сенсорным управлением. На телефоне приходится мириться с мелким оригинальным интерфейсом; если свернуть приложение, соединение обрывается. Поиграть с другим управлением уже можно, а удобный мобильный WoW ещё предстоит довести до ума.

Три дня настройки — и первый вход в мир

Пользователь average_hungarian рассказал на Reddit, как после трёх дней возни запустил сервер tortoise-wow в контейнере Docker и подключился через WoWee. По его словам, получилась связка для Turtle WoW 1.18.1.

Работает ли это? Едва. Может ли стать началом чего-то хорошего? Да!

— average_hungarian, r/wowservers

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

Клиент WoWee и серверный эксперимент сообщества
Запуск WoWee вместе с tortoise-wow. Скриншот average_hungarian из обсуждения на Reddit.

У WoWee есть и ранний редактор мира. В нём можно работать с рельефом, объектами и водой, персонажами и заданиями. Для собственных зон предусмотрены открытые форматы, среди них изображения PNG и таблицы JSON; разрабатывается экспорт серверных данных для AzerothCore.

До чудесного превращения любой игры в подземелье WoW отсюда далеко. У чужой карты свои материалы и модели, у персонажа — свои анимации, у движка — свои правила. Папку с другой игрой нельзя просто перетащить в редактор: сначала придётся объяснить ему, как читать её содержимое.

Перенести башню проще, чем босса

В ролике со смешением игр легко заметить знакомого персонажа или город и не задуматься, что именно перенёс автор. Чужая модель может заменить внешний вид героя, а карта — дать ему новое место для прогулки. Сохранить задания, бой и связь с сервером гораздо труднее.

С моделями помогают инструменты вроде wow.export. Программа извлекает ресурсы актуала и классики, показывает их и сохраняет в распространённые трёхмерные форматы, включая OBJ и glTF. Дополнение для Blender помогает импортировать модели и участки карты.

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

Рельеф из документации wow.export
Пример работы с рельефом и текстурами из документации wow.export. Экспорт окружения сам по себе не переносит правила игры.

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

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

Старый WoW на Unreal Engine

WowUnreal — другой, самостоятельный проект: клиент Wrath of the Lich King 3.3.5a на Unreal Engine 5.7. Автор описывает подключение к AzerothCore и чтение оригинальных ресурсов прямо во время игры.

Клиент читает неизменённые архивы MPQ из WoW и преобразует их в собственные форматы Unreal Engine во время работы.

— Документация WowUnreal

Текстура WoW должна стать текстурой Unreal Engine, существо — моделью с костями и анимациями, здание — неподвижной геометрией. Из участков карты нужно собрать рельеф. StormLib помогает открыть архивы, но содержимое этих архивов ещё предстоит разобрать и перевести в понятный движку вид.

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

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

Когда Азерот стал кубическим

Crafting Azeroth решал совсем другую задачу. Rumsey переносил географию WoW в Minecraft: материки, здания и природные объекты. Версия 1.0 вышла 24.12.2013. В описании релиза перечислены открытые зоны до Cataclysm включительно, в том числе Запределье и Нордскол.

Собственная программа преобразует материки World of Warcraft в блоки Minecraft с помощью процесса, который называется вокселизацией.

— Rumsey, автор Crafting Azeroth

За словом «вокселизация» скрывается понятная идея: исходную геометрию превращают в объём из блоков. Но программа должна знать, из чего строить. Деревянной текстуре WoW автор подбирал доски Minecraft, мшистой поверхности — замшелый булыжник. Вспомогательный инструмент облегчал выбор, однако сопоставление материалов всё равно заняло много ручной работы.

Затем программа делала основную часть сама. По словам Rumsey, после настройки преобразование занимало около 48 часов без вмешательства человека. Нейросеть здесь ни при чём: ещё в 2013 году мир можно было переносить автоматически, если заранее задать нужные правила.

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

Карта Азерота из проекта Crafting Azeroth
Обзорная карта Crafting Azeroth из авторского репозитория: знакомая география WoW перенесена в Minecraft.

Рейды, классы и боевая система WoW в Minecraft вместе с материками не появились. Зато появилась возможность путешествовать по знакомым местам в другой игре. Для такого проекта прогулка по кубическому Азероту и была результатом, ради которого стоило писать преобразователь.

Что изменили новые инструменты и ИИ

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

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

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

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

И чужие материалы от этого не становятся свободными. WoWee требует собственные игровые данные и не имеет одобрения Blizzard. Его нынешняя лицензия также запрещает без письменного разрешения использовать код в коммерческих игровых продуктах. Техническая возможность переноса и разрешение правообладателя — отдельные вопросы.

В этих опытах привлекает возможность взглянуть на давно знакомые места иначе. Для одного автора задача — войти в старый WoW через собственный клиент, для другого — заставить его мир работать на Unreal Engine, для третьего — пройтись по Азероту из кубиков. Пока результатом могут быть и три дня настройки ради первого входа, и мост, сквозь который проваливается персонаж. Но именно из таких попыток и складываются фанатские проекты, которые хочется не только посмотреть в ролике, но и попробовать самому.