Возрождение прошлого: обзор круглого стола о создании WoW Classic

World of Warcraft Classic — очень ожидаемый проект, который игроки активно обсуждают уже долгое время. Однако о том, что значит воплотить эту смелую задумку в жизнь по всем стандартам качества Blizzard, могут знать только сами создатели. Программисты Брайан Бирмингем и Омар Гонзалез, а также директор игры Йон Хаззикостас поделились своим опытом со сцены BlizzCon.

Поиск нужных материалов

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

  • Данные баз — это количество здоровья у того или иного существа, запас прочности предметов, места возрождения монстров и множество других параметров, связанных с данными.
  • Ресурсы включают в себя все, что было создано художниками и дизайнерами, — от слившегося с тенью ночного эльфа и звуковых эффектов «Огненной глыбы» до движений орка, размахивающего топором.
  • Исходный код охватывает весь спектр параметров, связанных с отображением игры, обработкой входных данных и взаимодействием между игроками

Для начала нам нужно было выяснить, насколько нынешний исходный код отличается от своей «классической» версии, и мы обнаружили, что репозиторий исходного кода датируется 1997 годом, то есть он существовал еще до начала разработки World of Warcraft.

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

И наконец, мы нашли ресурсы на старых ленточных носителях, которые соответствовали всем данным баз в наших архивах.

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

Классический игровой процесс в современном мире

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

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

От прототипа к демоверсии

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

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

Данные ландшафта версии 1.12

Движок 1.12

Современный движок

Высота ландшафта

Вода

Трава

Размещение объектов

Высота ландшафта

Вода

Трава

Размещение объектов

Высота ландшафта

Размещение объектов

Вода

Трава

К счастью, современный редактор умеет преобразовывать данные, и мы смогли проделать это с данными ландшафта, используя версию редактора из Battle for Azeroth. Редактор способен загружать ландшафты старых форматов и преобразовывать их в новые, чтобы затем экспортировать на современный движок. Это исправило неполадки с размещением костров и внешним видом деревьев, а также ряд других неполадок.

Еще одна проблема, с которой мы столкнулись, — это хранение и слияние данных. Для World of Warcraft работа над несколькими обновлениями ведется одновременно, и все они находятся на разных стадиях разработки в определенный момент времени. И мы хотели при добавлении какого-то элемента в одну версию иметь возможность автоматически добавить его и в версии после всех последующих обновлений. На протяжении 14 лет обновления выходили по фиксированному графику. Если бы мы просто обновили текущую версию игры до классической версии, то это перезаписало бы такие данные, как состояние плотины в Лок Модане, и стало бы причиной неполадок в Battle for Azeroth.

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

Классические модели и анимация

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

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

Восстановление системы классов

Мы хорошо продвинулись, преобразуя данные в код, однако у некоторых систем просто нет современного аналога. Возможно, самый проблемный в этом смысле класс — это охотник. Уровень счастья питомца и система лояльности были упразднены, равно как и обучение питомца и возможность использовать 2 типа оружия (дальнего и ближнего боя). Это как раз тот случай, когда преобразование старых данных для новой системы не поможет, потому что в новой системе просто нет ничего похожего. Здесь нам пришлось прибегнуть к старому коду. Процесс восстановления прошел гладко, хотя некоторых очень удивило, что теперь нужно покупать стрелы и кормить своих питомцев.

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

Пользовательский интерфейс и освещение

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

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

Так игра уже готова?

Учитывая объем работы, вы, возможно, задаетесь вопросом, каков процент готовности проекта и не было бы проще обновить клиент.

За год упорной работы над проектом мы преодолели множество испытаний и исправили ряд недочетов, отчетливо осознавая разницу между текущими результатами и тем, чего мы хотим достичь. Глядя на World of Warcraft, легко заметить отличия игры в ее текущем состоянии от классической версии. Если бы мы просто обновили оригинальный клиент, нам пришлось бы выявить массу малозаметных неполадок, способных привести к появлению уязвимостей в игре, а также серьезных неисправностей, которые возникали бы только при одновременной игре миллионов игроков. И это далеко не все. Мы решили воспользоваться таким подходом, который упростил бы задачу, сделал ее более понятной, а не привносил бы дополнительные сложности и неразбериху.

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

Принципы работы и планы на будущее

В World of Warcraft Classic мы хотим воссоздать условия, при которых игроки, переставшие играть еще до выхода дополнений, смогли бы продолжить игру как ни в чем не бывало. Производительность игры возросла, равно как и аппаратные мощности, однако ощущения от игрового процесса должны быть те же, что и в 2006 году. Важнейшей компонентой в этом отношении являются не только формулы, отвечающие за бои, или навыки игроков, но и социальные аспекты игры, а также необходимость взаимодействия с другими игроками — ведь группу найти может быть весьма непросто, но вы при этом зависите от примкнувших к вам игроков во время боев в подземелье или где-либо еще. Нам также необходимо было сохранить данные версии 1.12 и присущие ей особенности игрового процесса.

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

Другие же моменты оказались не столь однозначны. В свое время максимальное число наложенных отрицательных эффектов равнялось 8. Потом ограничение подняли до 16, а затем и вовсе от него отказались. Эти изменения крайне серьезно сказались на балансе классов и стратегиях, которые использовали игроки, осваивающие внутриигровой контент. Чтобы избежать модификации данных версии 1.12, мы ввели в World of Warcraft Classic ограничение в 16 отрицательных эффектов.

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

В прошлом в процесс обмена добычей часто вовлекали службу поддержки, например, если игрок случайно получал предмет, который не намеревался подбирать. В рамках современной системы у игроков есть некоторое время для обмена добычей друг с другом. Этот элемент эргономики мы решили сохранить в World of Warcraft Classic и избавить игроков от лишних запросов в службу поддержки, которые никак не повышают качество игрового процесса. (Извините, любители тайком набрать побольше предметов!)

Что касается классов, полагающихся на восполнение энергии, таких как разбойники, то со времен классических версий очень многое изменилось. Восполнение происходило «порциями» в соответствии с частотой обновления серверов. Таким образом, чтобы восстановить 20 единиц энергии, требовалось ровно 2 секунды. Сейчас же процесс идет более плавно, и персонажи восполняют по 1 единице энергии раз в 100 миллисекунд. Это изменение повлияло на частоту применения определенных способностей. То, что сейчас кажется незначительным повышением качества игрового процесса, на самом деле коренным образом сказывается на динамике ротаций и возможностях нанесения большого урона за короткое время в классической версии игры. Мы решили, что следует отказаться от этого изменения и сохранить специфику классического игрового процесса.

Также с течением лет изменились возможности модификаций, так как благодаря накопленному игроками опыту и знаниям они становились все более сложными. Мы пока точно не знаем, что собой будет представлять среда для создания модификаций в World of Warcraft Classic, но уже с уверенностью можем сказать, что не будем возвращаться к API, использовавшемуся в версии 1.12. Подобный шаг привел бы к практически полной автоматизации боев, как если бы персонажами управлял искусственный интеллект, а это противоречит фундаментальным принципам игрового процесса WoW. Такой результат нам точно не нужен. С другой стороны, современный API модификаций обладает рядом дополнительных функций, позволяющих реализовывать различные социальные возможности, которые также не вписываются в классический игровой процесс. Пока что мы стараемся все хорошенько обдумать и найти удачный компромисс. Мы будем внимательно знакомиться с мнениями игроков и авторов модификаций относительно того, где стоит провести границу.

План выхода контента

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

  • 1-й этап: Огненные Недра, Ониксия, Забытый Город, Каззак, Азурегос.
  • 2-й этап: логово Крыла Тьмы, поля боя и PvP-награды, Зул'Гуруб.
  • 3-й этап: Ан'Кираж (включая вводное событие), уровень экипировки 0,5, контент Силитуса, зеленые драконы.
  • 4-й этап: рейд «Наксрамас», вторжение Плети.

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

Владельцы обычных и виртуальных билетов BlizzCon 2018 смогут поиграть в демоверсию World of Warcraft Classic уже сегодня! Подробности о демоверсии вы найдете в нашей статье, а информацию о возможных ограничениях — на форуме.

worldofwarcraft.com