Создание Warcraft (часть 1)

в 23:09, , рубрики: blizzard, dos, EMS, Protected Mode, Warcraft, истории, История ИТ
Введение (от переводчика)

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

Патрик, автор статьиИ вот недавно случилось интересное — Патрик Вайат (Patrick Wyatt), один из людей, кто стоял у истоков Blizzard и человек, который затеял разработку Warcraft начал цикл воспоминаний о тех временах. Первая статья, которую я вам предлагаю прочитать ниже — о начале разработке Warcraft. О том, откуда появилась идея; о том, какая сеть была организована у ребят в офисе, пока они грезили о мультиплеере; о EMS и тонкостях эстетики программирования под DOS; о команде проекта и так далее.

Я, увы, совсем не специалист в разработке под DOS, поэтому если читатели укажут мне на неточности в переводе, связанные с техническими деталями — буду рад и тут же исправлюсь.

Это касается, понятное дело, и любых других неточностей, опечаток, пунктуации и стилистики.


image Давным давно, в начале времен, когда игры для PC писались под операционной системой DOS, я начал работать над игрой под названием Warcraft.

Я начинаю вести проект!

Я разрабатывал несколько игр для PC, пару игр для Mac, семь консольных игр для Super Nintendo и Sega Genesis, но в роли разработчика-джуниора. В других случаях игры вообще портировались, а не разрабатывались с нуля. «Портирование» — это процесс переноса игры с одной платформы на другую. Например, берем игру для Amiga, переписываем куски кода, перерисовываем дизайн, меняем другие необходимые детальки и игра после этого запускается на Nintendo.

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

Корни Warcraft

В стартап-компании, где я тогда работал — она называлась Silicon & Synapse, но потом была переименована в Blizzard, в честь нашей буйной методологии разработки — разработчики в свободное время играли в множество замечательных игр. И благодаря этому вечному геймплею и возникла искра, из которой родился Warcraft.

На создание Warcraft нас вдохновила игра под названием Dune 2, разработанная Westwood Studios, в которую мы постоянно играли в то время. Dune 2, вероятно была первой современной стратегией в реальном времени (RTS). Со скроллирующейся картой, с созданием юнитов и управлением юнитами в реальном времени; с индивидуальными боями между юнитами. По сути своей эта игра не сильна отличалась от любой современной RTS, например от Starcraft 2, ну, за исключением определенного масштаба, да качества графики.

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

Я, как и другие сотрудники Blizzard, в то время основательно сидели на игре Dune 2. Мы играли в неё во время обеденных перерывов и после работы; играли за каждую из трех рас, определяя их сильные и слабые стороны, а после — обсуждали стили игры, стратегии, тактику.

Но несмотря на то, что играть было очень здорово, я страдал от ряда очевидных дефектов, которые намекали, чтобы их исправили (нет, даже требовали этого!). Одной из самых очевидных ошибок была та идея, что я и мои друзья могли играть в Дюну только против компьютера. Было очевидно, что этот игровой стиль был бы идеален для мультиплеера. В отличии от пошаговых игр, где каждый игрок должен ждать, пока все остальные игроки сделают ход, в риал-тайм играх можно было бы разрешить всем игрокам действовать одновременно, и таким образом делать акцент на скорость и решительные тактические ходы, вместо длительных стратегических решений и планирования.

И с этой единственной мыслью, началась разработка нашей игры. Без каких-либо серьезных попыток спланировать гейм-дизайн, без оценки технических требований, без расписаний и планов, без планирования бюджета для сотрудников. Даже на салфетке не рисовали. Мы в шутку называли это между собой «бизнес план du jour» (фр. «за день»), что тогда было у нас в Blizzard стандартным процессом.

Начало разработки

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

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

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

Первая уникальная фича: мульти-селект юнитов

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

До того, как я начал работать в игровой индустрии, я работал какое-то время с рядом приложений для автоматизированного проектирования (CAD), такими, как MacDraw и MacDraft. В них я разрабатывал дизайн винных погребов для бизнеса моего отца. Поэтому я машинально вспомнил о метафоре прямоугольно «click&drag» выделения, когда начал размышлять о том, как выделить несколько юнитов сразу.

Я думаю, что Warcraft стал первой игрой, где была применена эта UI метафора. Когда я только-только внедрил эту идею в игру, можно было выделять и управлять большим количеством юнитов одновременно; не было никакого ограничение на количество одновременно выбранных игровых персонажей.

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

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

Позже, в Warcraft II, мы сделали возможность выделять сразу 9 юнитов. Command and Conquer, духовный наследник Dune 2, кстати, не имел верхнего предела выбора, но рассуждения об этих дизайн-идеях, безусловно заслуживают отдельной статьи.

За исключением возможности управлять одновременно множеством юнитов, на данном этапе Warcraft представлял собой ничто иное, как упрощенную донельзя версию Dune 2. Сходство было настолько неприличным, что я даже шутил, что несмотря на то, что Warcraft инспирирован Dune 2, это все равно совершенно другая игра — у нас мини-карта в левом верхнем углу экрана, а у них — в правом нижнем.

Основание братства

В начале 1994, я уже достиг достаточного прогресса в проекте, чтобы подключить к нему еще ребят. Ко мне присоединились Рон Миллар, Сэм Дидье, Стю Роуз, Боб Фитч, Джесси МакРейнолдс, Майк Морхэйм, Микки Нильсен и другие. Многие из них стали работать над игрой после того, как наша компания была поглощена Davidson & Associates в феврале 1994.

Крепко сложенный длинноволосый блондин Рон Миллар, казалось, был потомком самих викингов. Изначально он был нанят как художник, он был автором множества артворков для платформы Gameboy в Virgin Games, но его впечатляющая креативность и дизайнерское чутье привели к тому, что он сыграл очень важную роль в дизайне многих проектов Blizzard и эту роль он без сомнений сыграл и в разработке Warcraft.

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

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

Боб Фитч начинал работать у нас как разработчик и тех-лид в другом проекте, в тот же момент, когда я начинал Warcraft. Аллэн Эдхем, президент Blizzard, выдал Бобу задачку написать игру в слова под названием "Games People Play", которая бы включала в себя кроссворды, эрудита, боггл и другие подобные игры. Боб настолько заметно проявлял отсутствие энтузиазма, что проект еле-еле продвигался на протяжении многих месяцев. Когда Warcraft пошел в гору, Боба подключили ко мне и его энтузиазм помог нашей игре шагнуть вперед семимильным шагом.

Джесси, выпускник Калтеха, начал работать с создания сетевого драйвера для протокола IPX, чтобы в игру можно было играть по локальной сетке (LAN). Майк Морхэйм, один из двух со-основателей Blizzard позже внес вклад в решение тяжелой задачи — она написал драйвер для модема, который мог работать в «mixed-mode». Warcraft ведь был игрой для DOS, которая работала в защищенном режиме (Protected Mode), а модемный драйвер можно было вызывать и из Protected Mode и из Real Mode одновременно только при помощи уловок, завязанных и на DOS, и на архитектуру чипа 80386, под которым система работала. Майк посидел в офисе, уставившись в мониторы, залитые диагностическими данными, разбирался с проблемами синхронизации. К концу дня, код модемной части был бронебойным, а это было важным достижением в то время, учитывая то, какие примитивные методы у нас использовались до этого.

Арт Warcraft'а

Аллан Эдхем надеялся добыть лицензию вселенной Warhammer, чтобы попробовать увеличить продажи, за счёт узнавания бренда. Warhammer вообще был источником мощного вдохновения для дизайнеров Warcraft. Но по ряду причин, мы отказались от этой затеи. Было сложно договориться о выгодных условиях на бизнес-уровне, и слишком горячо было желание контролировать создание нашей вселенной самостоятельно, чтобы никто не вмешивался в работу нашей команды (и меня, в том числе, разумеется). Плюс, у нас уже был довольно скверный опыт работы под лицензией — мы делали “Death and Return of Superman” и “Justice League Task Force” вместе с DC Comics и нельзя сказать, что нам бы хотелось повторить этот опыт в нашей новой игре.

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

Через несколько лет после того, как мы запустили Warcraft, мой отец, вернувшись из путешествия по Азии, вручил мне сет миниатюр Warhammer, отряд скелетов на колесницах и сказал: «Пока я путешествовал, мне попались вот эти забавные ребята, очень напомнили твои игры, ты бы сказал вашим юристам, пусть свяжутся с производителями, а то они похоже у вас тащат идеи.» Хмммм!

Преграды на пути разработчиков игр

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

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

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

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

Когда к проекту подключилось много разработчиков, дизайнеров и художников, работать над проектом, понятное дело стало проще, в основном, но мы обнаружили еще одно большое препятствие на нашем пути. Игра изначально разрабатывалась под DOS, в «Реальном режиме» (Real Mode), что значило, что в нашем распоряжении есть только 650К памяти, и меньше, где-то 120К для операционной системы. Можете себе представить какие адские условия у нас тогда были!?!

Как только дизайнеры начали отрисовывать персонажей, бэкграунды и пользовательский интерфейс, мы тут же столкнулись с тем, что мы жрем всю память. И мы начали искать альтернативные варианты. Первой идеей было использовать мэппинг через страничную память EMS и хранить дизайн игры «над» барьером памяти в 640К.

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

В любом случае, идея с EMS у нас, к счастью, не сработала; но появилось решение получше. Компания под названием Watcom выпустила компилятор C, который включал «расширитель» («extender») DOS-режима, который позволял программам, написанным в «Защищенном режиме» иметь доступ к линейной адресации 32-битной памяти, то есть к тому, что любой программист сейчас получает без проблем, когда пишет 32-битной (или даже 64-битное приложение). Пара дней ушло на то, чтобы поправить исходный код и встроить в него этот модуль, после чего мы снова взялись за дело, обладая доступом к большему объему памяти.

Не заключение

В следующей статье цикла я расскажу о Стю Роузе и дизайнерском перевороте; первой мультиплеерной Warcraft-схватке и о баге, который чуть не убил мультиплеер; о том, как Билл Ропер сделал Warcraft потрясающим, уместив его на флоппи-диски; о реакции Westwood Studio на нашу игру и о других детальках, которые сокрыты в игре, которую я и другие ребята из команды разрабатывали восемнадцать(!) лет назад.

Автор: peaceprayer

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js