Хорошие игры делать сложно, особенно когда нужные тебе технологии еще не изобрели. Автор культовой игры Another World собственными силами создал виртуальную машину, векторный движок и средства разработки. Результат — игра невообразимого для своего времени технического уровня.

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

Хронология выхода Another World на разных платформах

1991 — Amiga, Atari ST
1992 — Apple IIGS, DOS, SNES, Mega Drive
1993 — 3DO
2004 — Game Boy Advanced
2005 — Windows XP, Symbian OS, Windows Mobile
2011 — iOS
2012 — Android

Эрик Шайи (Eric Chahi) потратил два года ежедневного труда на то, чтобы в одиночку создать Another World. Он написал движок игры, спроектировал дизайн уровней, нарисовал всех персонажей, объекты и фоны, записал звуки и вступительные ролики и даже нарисовал картинку для коробки с дискетой. Попутно ему пришлось изобрести аналог Flash — и это в конце восьмидесятых годов!

 

Логово дракона

В 1983 году мало кому неизвестная сегодня компания Cinematronics выпустила игровой автомат с очень необычной для того времени игрой Dragon’s Lair. Она не была прошита в постоянную память устройства или на магнитный носитель, как это обычно бывает. Вместо этого в автомате стоял привод LaserDisk — предшественник современных CD и DVD размером с грампластинку.

Dragon’s Lair представляла собой интерактивный мультфильм, разбитый на множество частей и записанный на диск. В определенные моменты игрок должен был нажимать те или иные кнопки, и в зависимости от правильности и своевременности нажатия головка привода перемещалась к следующему эпизоду либо к эпизоду смерти героя.

Кадр из оригинальной версии Dragon’s Lair
Кадр из оригинальной версии Dragon’s Lair

По уровню графики и анимации Dragon’s Lair мало уступала диснеевским мультфильмам, и немудрено — к разработке приложил руку бывший аниматор студии Disney Дон Блут (Don Bluth). И это во времена, когда Digger был новой игрой, а до выхода первого Super Mario оставалось два года!

Неудивительно, что «Логово дракона» ждала популярность. За следующие тридцать лет игра была портирована на десятки различных платформ, включая PlayStation 3, Xbox 360, iOS и Android. Среди первых был порт на Amiga — едва ли не лучший компьютер восьмидесятых.

Именно порт Dragon’s Lair для Amiga в 1989 году увидел Эрик Шайи, к тому времени хоть и молодой, но уже опытный аниматор и программист. Почти сразу в его голову пришла идея, что нечто подобное можно реализовать с помощью векторной графики, сократив при этом объем игры всего до одной дискеты вместо шести, на которых распространялась версия Dragon’s Lair для Amiga. Кстати, полноценное видео с лазердисков в ней заменили на спрайты, от чего анимация стала не такой роскошной. Векторная графика позволила бы обойти эту проблему.

Future Wars — одна из ранних игр Эрика Шайи
Future Wars — одна из ранних игр Эрика Шайи

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

Эрик на тот момент уже два месяца изучал ассемблер процессора Motorola 68000, и поэтому на реализацию proof of concept у него ушла всего неделя. Как оказалось, производительности 68000 вполне хватало для отрисовки десяти полигонов (закрашенных многоугольников) на скорости 50 кадров в секунду. Этого было вполне достаточно для реализации полноценной игры для Atari ST и Amiga 500, где стоял тот же процессор.

 

20 Кбайт

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

Самописный векторный редактор
Самописный векторный редактор

Изюминка редактора была в том, что он не только позволял создавать изображения и анимацию, но и включал в себя движок самой игры, так что отлаживать и менять игровой процесс можно было на лету. Движок представлял собой виртуальную машину размером 20 Кбайт, которая запускала байт-код игры, хранившийся на дискете. Эрик Шайи объяснил такой подход тем, что просто хотел уйти от особенностей ОС и аппаратной архитектуры и упростить разработку игры (байт-код не нужно было компилировать). В дальнейшем виртуальная машина позволила легко портировать игру на множество платформ.

INFO


Заставка Another World длится три минуты, но занимает при этом всего 58 Кбайт в сжатом виде.

В 2006 году Грегори Монтуар (Gregory Montoir), один из разработчиков ScummVM, дизассемблировал виртуальную машину и переписал ее на языке C++, а в 2011-м Фабьен Санглар (Fabien Sanglard) — сейчас работающий в Google — причесал его исходники и снабдил множеством комментариев. Поэтому сегодня у нас есть возможность узнать, как все это работало. Бинарник, запускающий игру, состоял из четырех основных компонентов: самой ВМ, менеджера ресурсов, рендерера и аудиомикшера.

Виртуальная машина была регистровой (в противовес появившейся позже стековой JavaVM) и включала в себя 256 регистров общего назначения; код исполнялся в 64 потока, которые последовательно передавали управление друг другу в режиме round-robin. Каждый из потоков отвечал за свой тип задач.

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

Архитектура виртуальной машины
Архитектура виртуальной машины

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

Все игровые объекты хранились в специальных data-файлах в виде координат вершин, из них с помощью специальной инструкции виртуальной машины на экране формировались полигоны, из которых состояли объекты (по одному или по несколько полигонов на объект). Лестер (главный герой) состоял из десятка с лишним полигонов: одна рука, вторая рука, нога, глаз... На начальных этапах разработки даже фоны уровней были полигональными, то есть не загружались из памяти в виде готового изображения, а рисовались при создании сцены. Например, первая сцена в игре рядом с бассейном состояла из 981 полигона.

Знаменитая первая сцена игры
Знаменитая первая сцена игры

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

Раскадровка первой сцены (требуется плагин QuickTime)

В начале каждой сцены фон отрисовывался в специальный фоновый буфер. Затем он копировался в бэкбуфер, и поверх него рисовались движущиеся объекты, потом бэкбуфер копировался во фронтбуфер и отображался на экране. Это был первый кадр; одновременно с его отображением вновь происходило копирование фона в бэкбуфер, отрисовка объектов, копирование картинки во фронтбуфер и, наконец, отображение второго кадра.

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

 

Игра началась

Вступительный ролик Эрик Шайи закончил в начале 1990 года. Потрудиться над самой игрой еще предстояло. То, какой она будет, он лишь воображал: почти весь процесс создания Another World был импровизацией. По ходу дела автор столкнулся со многими проблемами, для решения которых пришлось изменить движок, доработать виртуальную машину и отказаться от некоторых возможностей.

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

Первой идеей было сначала перенести изображение с телевизора на целлофановую пленку, а затем приложить ее к монитору и обвести изображение в векторном редакторе. Однако перерисовать таким образом несколько десятков кадров было, по выражению Шайи, сумасшествием. Поэтому он решил использовать Genlock — совместимое с Amiga устройство для захвата видео с VHS-плеера. Трудно представить, через что ему пришлось пройти, то и дело ставя на паузу и перерисовывая картинку с VHS (помнишь, каким размытым и дрожащим было изображение?).

Кадр из видео и обрисованный вручную кадр из игры
Кадр из видео и обрисованный вручную кадр из игры

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

Версия игры для Windows с новыми фонами
Версия игры для Windows с новыми фонами

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

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

Телепорт, двери и охранник
Телепорт, двери и охранник

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

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

Один из самых знаменитых эпизодов игры
Один из самых знаменитых эпизодов игры
 

Выход в люди

Наконец в 1991 году игра была готова, и оставалось только найти издателя. Это оказалось непросто. Представители компании Virgin Interactive, которым Шайи отправил игру, согласились на ее публикацию, но поставили условие: превратить Another World в квест (в то время это был очень популярный жанр). Ни желания, ни возможности переделывать всю игру у Шайи не было, и он решил заключить контракт с уже знакомой ему фирмой Delphine Software. На этот раз переговоры прошли успешно, и Another World было суждено стать самой популярной игрой, которую опубликовала Delphine.

Это, впрочем, не последняя интересная история, связанная с Another World. Потом были и другие. О том, как Шайи боролся с Nintendo, не желая менять вступительную музыку к игре (которую, кстати, написал его школьный друг). О том, как появилось неофициальное провальное продолжение. О Flashback, успешной игре, похожей на Another World, но не имеющей к Эрику Шайи никакого отношения. О свалившейся на голову автора славе, о многочисленных интервью и выступлениях, о юбилейных изданиях, о реверсе движка, фан-арте, проектах воссоздания игры и многом-многом другом.

Если ты успел в девяностые провести за Another World не один час, то ты отлично понимаешь причину восторгов. А если нет, то никто не мешает попробовать наверстать упущенное прямо сейчас.

1 комментарий

  1. Аватар

    k1k0

    04.10.2015 в 08:06

    Сделать в одиночку игру и продолжать оставаться с ней — это подвиг! Кажется на вики было описание, в котором не говорилось, что автор музыки школьный друг создателя игры.
    Как жаль что меня обошла стороной эта мегаигра. Теперь надо восполнить пробелы, благо HD версия вышла.

Оставить мнение