Game development
January 24 2017

«A» значит «Astral». Интервью с Иваном Поляковым (Apus Software)

Существует определённый круг предметов и явлений, по отношению к которым люди чётко делятся на две категории. Услышав про некое Х, представители первой категории спросят:«А что такое Х? Возможно, я что-то слышал об этом, но ничего конкретного не припоминаю.» Те же, кто относится к категории второй, выдохнут:«О-о, то самое Х!» — и глаза у них загорятся слегка нездоровым энтузиазмом. Только две категории. Никаких полутонов не предусмотрено.

Отличным примером такого явления может служить белорусская компания Apus Software и их серия компьютерных карточных игр, большая часть которых содержит в своём названии слово Astral. Начиная с олдовой Astral Tournament, которая, будь она человеком, в прошлом году уже могла бы получить паспорт, и заканчивая недавно вышедшей Astral Heroes, в которой лучшее из прошлых игр соединилось с лучшим из того, чего в них не было, Apus Software исправно сдают карты тем картёжникам, кому эльфы и единороги милее карманной пары и ловленного мизера.



В далёких уже две тысячи нулевых, коротая ночи за «Турниром в Астрале», вряд ли я мог представить, что когда-нибудь стану брать интервью у его создателя. Однако жизнь — удивительная штука, и сегодня у моего (метафорического, конечно) микрофона — сам Иван Поляков, более известный как Cooler.

Расскажите немного о себе. Как вы заинтересовались программированием, и, в итоге, пришли к тому, что сейчас называется модным словосочетанием «indie game development»?

Родился в Минске в 1980 году. Когда развалился СССР и упал железный занавес, сложилась интересная картина: с одной стороны, на рынке стали доступны ПК, с другой — активно появлялись коммерческие структуры, которые могли себе их позволить и имели какой-то интерес к информатизации. Моя мама, в прошлом работавшая программистом на «больших» машинах в одном из НИИ, в это время трудилась в одной фирме, решившей приобрести PC AT 286. В общем, ей поручили «осваивать» эту чудо-технику, причём не на рабочем месте в офисе, а дома. В результате я получил возможность познакомиться с компьютером.

Немногочисленные игры быстро надоели, захотелось чего-то более интересного: мне установили Turbo Pascal 5.0 и купили книжку по нему. Так я и увлёкся программированием. Впрочем, всё хорошее быстро заканчивается — компьютер увезли, а интерес остался. Я продолжал грызть литературу, а для практики искал возможности позаниматься у кого-нибудь на работе. В народе компьютеры тогда были очень редким явлением, люди, разбирающиеся в них — тем более, однако мне повезло: в нашем классе было еще несколько ребят, интересующихся программированием. Мы очень интенсивно общались, делились книжками, устраивали всяческие опыты и обменивались знаниями.

Наконец, в 16 лет (я тогда учился в 10-м классе в Лицее БГУ) мне купили свой домашний компьютер, и я смог заниматься программированием ещё интенсивнее. Пробовал делать разные игры «just for fun» — они никогда не превращались во что-то законченное, это было просто развлечение. Больше времени тратил на написание всяческих библиотек. В 11-м классе представилась возможность написать курсовой проект по информатике, и тогда мы с друзьями, будучи фанатами WarCraft II, решили сделать небольшую RTS. Создать полноценную игру не смогли, получилась что-то вроде очень ограниченной демки, но в качестве курсовой она сгодилась. Главное ведь — правильно оформить текст курсача, а уж насколько там работает или не работает код — дело десятое :)

Эстарх (Алексей Станкевич, сооснователь Apus Software — прим. ред.) учился в том же классе и сделал тогда свой курсовой проект — текстовую игру-MUD «Болота Хаоса», которая, в отличие от нашей, была играбельной! Делать игры и сдавать их в качестве всяческих учебных проектов оказалось интересной идеей, так что в БГУ я продолжил этим заниматься, но уже с Эстархом, поскольку мы учились вместе. Так мы сделали простенький сетевой космический шутер «Star Madness», который помог получить зачёт по компьютерным сетям, а заодно немного освоить DirectX (предыдущие игры работали в DOS).



В это время в FIDO я познакомился с шареварщиком Анатолием Ковылиным из Москвы, который рассказал о том, что игры можно продавать в Интернете, что это может быть не только учёба/развлечение, но и какой-то заработок. Интернет тогда был редкой диковинкой, но мы решили попробовать. Анатолий «издал» наш Star Madness в виде shareware, но игра не пошла — за год не было продано ни одной копии. Впрочем, сама тема была интересна, а отрицательный опыт — тоже опыт. Мы начали экспериментировать, делать бесплатные игры и публиковать их в Интернете, смотреть, что из этого получается, накапливать опыт. Потихоньку нащупался подход к разработке, появилось что-то вроде игрового движка. Наступило время снова попробовать себя в shareware.

Как вы придумали название компании?

Для публикации игр нужно было выбрать имя разработчика. В то время одним из основных источников трафика были сайты-каталоги (софта/игр), где игры показывались в виде списков, отсортированных в том числе по названию или по имени разработчика. Поэтому если они начинались с буквы «A» — игра оказывалась в списке выше. Этот фактор не давал значительного преимущества, но даже небольшое преимущество стоило использовать, тем более тогда многие так делали. Поэтому у нас много названий игр с буквы «A», и название компании тоже начинается на «A». Вообще говоря, Apus — это просто латинское название созвездия «Райская птица».

Получается, Apus Software — это два человека, вы и Эстарх?

Изначально у нас был штатный художник Виктор. Он нарисовал карты/портреты в Astral Tournament, карты существ в Astral Masters, несколько отдельных карт в Спектромансере. Экран боя в Astral Heroes, рамка карт, логотип — тоже его рук дело.

Кто же художествует для вас теперь?

Во всех играх графику делали несколько человек, они указаны в credits :) Портреты для Astral Masters создавал Александр Прибылов — художник, рисовавший персонажей для DBA Online в Wargaming. Он же предложил заставку для игры, но стиль картины не подошел, поэтому её основательно доработал художник-демосценер Lynx Vulgaris.

Графика интерфейса в Astral Masters и Spectromancer — дело рук Георгия Рукосуева, он же рисовал заклинания для AM. В своей работе он очень активно использует рендер: моделирует всякие элементы, а потом соединяет результат рендера в финальной картинке. Портреты и большинство карт в Спектромансере, а также все портреты в Astral Heroes рисовал Иван Дрибас — бывший арт-директор Wargaming, работавший там над серией Massive Assault. Большую часть интерфейса в Astral Heroes сделал Андрей Беляков.

image

Кстати, всегда было интересно, откуда вы берёте музыку/звуки? Звуковое оформление — сильная сторона всех ваших игр.

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



Насколько мне известно, последняя (хотя лучше назовём её крайней) ваша игра, Astral Heroes, написана на Pascal, как и предыдущие. Чем обусловлен выбор языка? Не возникает ли трудностей из-за того, что Паскаль — не очень популярный язык сейчас (нехватка библиотек, что-нибудь в этом роде)?

Так исторически сложилось, что базовый код написан на Паскале. Процесс и тулзы понятны, привычны и хорошо изучены. Всегда ведь проще начинать не с нуля, а с какой-то базы. Неоднократно поднимался вопрос — а не перейти ли на C++? Но всякий раз это означало «больше возни и трудозатрат сейчас, ради возможных преимуществ в долгосрочной перспективе». Насущные проблемы всегда волновали больше, чем гипотетическое будущее, поэтому на C++ так и не перешли. Хотя сам по себе язык C++ для меня не проблема — я несколько лет проработал C/C++ программистом.

Трудности, конечно, есть. Но скорее не с библиотеками — никто ведь не запрещает использовать библиотеки, написанные на других языках: мы используем zlib, libfreetype и прочие. Трудности в основном связаны с кроссплатформенностью, а также с библиотеками, жёстко заточенными под свой родной язык. В геймдеве C++ — это почти стандарт, поэтому многие библиотеки (например, физический движок Bullet), не приспособлены для использования из других языков. То есть использовать их, конечно, можно — но весьма неудобно и трудозатратно. Вообще в игровом клиенте я стараюсь не использовать внешние библиотеки, если только в этом нет очевидной необходимости. И не потому, что люблю изобретать велосипеды (есть такой грешок), а потому, что при портировании, скажем, на IOS, может возникнуть вопрос — а где взять эту либу, получится ли её скомпилировать под нужную платформу, не повылазят ли подводные грабли?

Серверная часть тоже написана на Паскале?

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

Вы собираетесь портировать Astral Heroes на Android и iOS. Наверное, уж тут-то вам придётся сменить язык?

Не обязательно. Существует несколько способов разработки мобильных приложений на Паскале. Один из вариантов — использовать Delphi XE и его проприетарный фреймворк FMX, скрывающий под собой детали взаимодействия с платформами. Плюсы такого подхода: минимум необходимых знаний об API платформ, единый код для всех платформ. Минусы: трудно добраться до возможностей, которые платформа предоставляет, а фреймворк — не поддерживает. Сложно подключить сторонние библиотеки. Ну и необходимость покупать лицензию на Delphi :)

Другой вариант — создавать нативные приложения на чистом паскале, используя непосредственно API платформ и компилятор FPC (Free Pascal Compiler), поддерживающий огромное множество платформ, в том числе и IOS/Android. В случае Андроида приложение создаётся в виде так называемой нативной библиотеки, работающей через NDK, в которой размещается основной код приложения. А минимальная java-обёртка используется лишь для подключения и вызова этой нативной библиотеки.

В случае с IOS можно и вовсе упростить себе жизнь, используя диалект языка, называемый Objective Pascal — он бинарно совместим с Objective C и позволяет использовать IOS SDK напрямую. Именно так я портировал на IOS Спектромансер. Правда, тут Apple сама устроила разработчикам подлянку — запретила в своей лицензии дистрибуцию модифицированных (переведённых) хидеров из IOS SDK. Это значит, что любой желающий написать на паскале приложение под IOS должен либо самостоятельно перевести нужные хидеры из IOS SDK с Objective C на паскаль (для этого, правда, существует автоматический парсер-конвертер), либо пойти на нарушение лицензии и скачать уже переведённые кем-то другим файлы. Впрочем, тут есть и позитивный момент: в отличие от C++, специфика Objective C такова, что нет необходимости транслировать полные описания всех классов со всеми их зависимостями и ссылками, а достаточно описать лишь те методы, которые используются в приложении.

Вы говорили о том, что всегда проще начинать с какой-то базы. Какова эта база? Насколько велик общий, так сказать, знаменатель ваших игр?

У нас используется общий базовый код и общий движок, который эволюционирует вместе с эволюцией игр. Наш второй движок был создан в 2004 году для игры Astral Masters, он был ориентирован на использование 3D-графики и асинхронную обработку событий. Игры Spectromancer и Astral Towers сделаны на нём же, но в ходе работы над этими играми движок сильно изменился. Одни фичи добавлялись, другие убирались, появилось огромное множество костылей. В итоге мы решили сделать то же, что когда-то сделала Valve, создав новую ветку своего движка для HL2. Мы тоже заморозили текущий код движка (допуская лишь багофиксы), а для дальнейшего развития создали новую ветку «Engine3», которую подвергли жёсткому рефакторингу и чистке от костылей. Таким образом, игра Astral Heroes уже делалась на новом движке, хотя корни его кода тянутся глубоко в прошлое.

Если говорить про размер, то базовый код — это примерно 700 Кб исходников, движок — ещё мегабайт. Для сравнения, исходники клиента игры — 1200K, сервера — 400K.

Что касается кода самой игры, то в основном он пишется с нуля, хотя, конечно, идеи и алгоритмы заимствуются из предыдущих проектов. Иногда заимствуются и куски кода, хотя я не одобряю метод «Copy&Paste» — это один из основных источников багов.

Какие специфические проблемы возникают при разработке компьютерной ККИ?

В ККИ много текста, причём текст местами динамический — всё это создаёт сложности для локализации. Кроме того, у нас концепция «Юзабилити превыше всего», которая, в частности, диктует использование 2D-интерфейса. Приходится учитывать множество ограничений, сковывающих дизайн интерфейса, думать о куче разных мелочей. Например: если увеличить карту при наведении мыши, что будет с чёткостью картинки, что будет с чёткостью текста? Как избежать артефактов алиасинга? Как добиться максимальной чёткости/читабельности в статичном положении? Если сравнить, скажем, Hearthstone с одним из его клонов — Star Crusade CCG, то заметно, что в первом гораздо тщательнее поработали над подобными мелочами, поэтому визуальных артефактов там гораздо меньше.



Ещё такой вопрос: вы делаете «игры для себя» или «игры для игрока»? Иначе говоря, ориентируетесь вы в первую очередь на собственные предпочтения, или пытаетесь угодить целевой аудитории?

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

Отдельно хотелось бы поговорить о таком вашем проекте, как Spectromancer. В отличие от прочих ваших игр, эту вы делали в сотрудничестве с другими людьми, в частности, с небезызвестным Ричардом Гарфилдом. (создателем коллекционной карточной игры Magic: the Gathering, на сегодняшний день самой известной в своём жанре. — прим. ред.) Как так вышло?

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

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

Не скажу, что это было основной целью: наши игры и раньше были почти полностью ориентированы на западную аудиторию — в начале 2000-х это было стандартной практикой в shareware, поскольку покупки были только там. Цель скорее в увеличении масштаба: дополнительное финансирование разработки, дополнительные возможности маркетинга — всё это было полезно проекту! Игра попала в такие места, куда мы бы вряд ли смогли разместить её сами. Один Steam чего стоит, ведь никакого greenlight тогда ещё не было, а самих игр в Стиме было меньше тысячи. Попасть туда было очень круто. Надо сказать, что Ричард внёс полезный вклад и в игровую механику. Правда, со временем такой формат стал больше тормозить развитие игры, чем способствовать ему.

image

Мне всегда было интересно, во что играют создатели игр. Расскажите, какие ваши любимые игрушки.

Я поклонник жанра 3D FPS (Half Life, Portal, FEAR, Red Faction, NOLF, Prey и т.д), а также жанра гоночных симуляторов: 4 года занимался киберспортом — в чемпионате Беларуси по виртуальной Формуле-1. Правда в последние годы почти не играю, разве что изучаю некоторые игры с профессиональной точки зрения. Последняя игра, в которую «залип» — браузерка agar.io.

Эстарх — активный ММОшник, играл в линейку, WoW, Rift. Ну и в MtG, конечно (картонную версию).

А вы как относитесь к коллекционным карточным играм?

В целом я не любитель ККИ: в Спектромансер я ещё играл с удовольствием, но собирать колоды — это не моё. Хорошо что у нас есть режим случайных колод! А вот Эстарх — большой ценитель жанра: и в своей игре проводит много времени, и в других хорошо разбирается. Кстати, Astral Tournament он придумал во время службы в армии, куда попал из-за слишком сильного увлечения MtG во время учёбы в университете :)

Напоследок поговорим о текущем вашем проекте — Astral Heroes. Какие улучшения в него внесены по сравнению с предыдущими играми?

Ну, во-первых, это переход на модель Free-to-Play и ряд других мер для того, чтобы сделать игру способной жить и развиваться в долгосрочной перспективе без ущерба для себя. Кроме того, нам удалось улучшить learning curve.

Каковы ближайшие и долгосрочные планы по развитию Astral Heroes?

В ближайшей версии 1.1 устраним ряд явлений, мешающих/отталкивающих новичков, а также впервые добавим в игру новые карты. Также в ближайшее время выпустим порты для Android и IOS. Дальше планируем добавлять новые карты, новые фичи (типа просмотра реплеев), устроить официальные турниры по игре.

Как вы оцениваете текущую степень успешности этого проекта?

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

P.S. Как известно, существует грейт рашн традишн — разговаривать с копипастой. Однако в данном случае в этом нет необходимости: внезапно так получилось, что Иван Cooler2 стал полноправным членом хабросообщества и с удовольствием ответит на ваши комментарии лично.
+11
4.1k 26
Comments 32
Top of the day