Начало История
проекта "Казаки" началась в 1997 году, когда компания Microsoft
представила на суд общественности свой стратегический тайтл Age of
Empires. В нем было множество оригинальных ходов, которые просто
завораживали игроков, это была настоящая революция в жанре, новое слово в
стратегиях, которое, надо признаться, оставило след в наших сердцах. В
то время мы занимались созданием мультимедийных энциклопедий, продажи
которых стала потихоньку идти на спад, и разработка игр стала вопросом
дальнейшего выживания компании. Так или иначе, мы решили попробовать
себя в новой сфере. Исходив Age of Empires вдоль и поперек, мы изучили
все ее особенности и фичи, старались понять, чем она взяла аудиторию. За
полтора год активной игры у нас появились нужные идеи и понимание того,
что мы способны сделать продукт даже лучше, чем Ensemble Studios. Мы
были уверены в своих силах, и запустили проект "Казаки".
Первый вопрос, который встал на самых первых порах разработки - это в
каком временном периоде разместить игру? В Age of Empires затронуты
эпохи от каменного века до античности. Мы решили "бить" в ХV - XVIII
века, потому что Microsoft наверняка избрала бы средневековье для Age of
Empires II, и Казаки получились бы ее логическим продолжением.
Фактически, мы тем самым сделали "третью" AOE, не пересекающуюся с
первой и второй частями. Это был наш маркетинговый расчет. Время
показало, что мы не ошиблись. Сеттинг и время действия игры были
выбраны правильно, что привело к коммерческому успеху проекта. Microsoft
вложила в раскрутку тематики Age of Empires большие средства, тем самым
поспособствовав продажам Казаков. В результате нам удалось не только
сделать хорошую игру и получить удовольствие от процесса, но и неплохо
заработать. В
первом приближении "Казаки" выглядели так: противостояние задумывалось
между Россией и Украиной, а всего наций было четыре - русские, украинцы,
европейцы и турки. Продаваться игра должна была на отечественном рынке.
В 1998 году, когда проект был запущен, в команде насчитывалось всего
четыре человека. По нынешним меркам, это мизер - программист, дизайнер,
исторический консультант и руководитель проекта. Через два года, когда
"Казаки" уже вышли на финишную прямую, количество разработчиков выросло
втрое - до 12 человек. Хотя, опять же, это немного. Впрочем, следует
отметить, что к проекту на разных стадиях подключались создатели карт и
тестеры, так что размер команды варьировался. Первые шаги
Первым важным шагом к коммерческому проекту стала демо-версия, которую
мы в 1999 году привезли на выставку MILIA в Каннах. Это был настоящий
"выход в свет" - мы не только показали свой проект заинтересованной
аудитории, но и обзавелись полезными знакомствами с издателями и прочими
представителями игровой индустрии. Там же мы впервые услышали совет
делать "Казаков" с прицелом на весь европейский рынок. Собственно, для
нас это был шок, так как о потенциале нашей "игрушки" с уверенностью
говорили авторитете, в профессионализме которых не было сомнений. Так
было принято решение увеличить количество наций до 16 и издавать игру по
всему миру.
Собственно, удача следовала за нами с самого начала проекта. Как
оказалось, мы попали в яблочко и с названием проекта, так как казаков - в
силу исторических причин - знают и в Англии, и во Франции. В Европе это
слово однозначно считается синонимом русского колорита, как
"Калашников" или "водка". Успех был полный - узнаваемый, но незаезженный
бренд принес нам на Западе огромные продажи.
Продолжая список удачных моментов, нельзя не сказать и о дате релиза.
Нам помог тот факт, что за год до выхода Казаков рынок стратегий был
переполнен проектами, причем не самого высокого качества. Жанр перестал
привлекать разработчиков, и они сбавили обороты. Мы вышли как раз тогда,
когда игроки "изголодались" по качественным RTS. Кроме того, в игре был
задействован оригинальный временной промежуток: от средневековья до 18
века. Важную роль сыграли очень красочные скриншоты, на которых мы
"били" в одну из наших главных фич - огромные толпы юнитов. В то время
это было ново, и наши орды пришлись по душе и публике, и прессе, которая
не скупилась на высокие оценки на сайтах и в журналах.
Но брать пользователя мы собирались не только толпящимися на экране
юнитами. Отличий от других RTS хватало: в частности, в "Казаках"
применялась система формаций с возможностью удержания позиции (stand
ground). В результате отряды получали бонус к параметрам защиты и атаки.
Кроме того, мы реализовали возможность захватывать крестьян противника и
незащищенные здания и параллельно развивать нацию бывшего врага. В
основу экономической части игры была положена добыча ресурсов, как и в
большинстве стратегий того времени. В "Казаках" их число равнялось 6.
Основным ресурсом была еда, которая использовалась для постройки всех
юнитов и тратилась на их содержание и усовершенствование. Дерево, камень
и еда добывались крестьянами непосредственно на карте, а Оставшиеся 3
ресурса (золото, железо, и уголь) - в шахтах. Уголь, например, тратился
на каждый выстрел.
При балансировке игры мы сделали все ресурсы на карте бесконечными.
Плюс этой схемы - можно было играть одной базой, как угодно развивая
свою империю. Естественно, были и неизбежные минусы - теряется часть
игры, когда у тебя есть войска и отсутствует возможность постройки
юнитов, так что итог зависит от того, как ты проведешь последний бой.
Это сильно укорачивало время игровой сессии.
2D или 3D?
Споры о видении проекта начались в самом начале разработок. Мы
потратили неделю на выяснение того, выбрать ли нам 2D или 3D
(изометрия-перспектива), и лишь волевым решением Сергея Григоровича
решили остановиться на двумерном движке. Сейчас это решение может
показаться странным, но не стоит забывать, что для того времени прорыв в
3D мог обойтись слишком дорого. Кроме того, в пользу двумерности
говорило и то, что при тогдашнем развитии технологий с ее помощью можно
было сделать более качественных и детализированных юнитов. Наконец, наши
"толпы юнитов", важная и оригинальная черта игры, могли быть
реализованы только в 2D.
Был и еще один немаловажный момент, благодаря которому мы не стали
рваться в третье измерение. В то время мы не хотели конкурировать с
крупными разработчиками, которые вкладывали огромные суммы в разработку
нового поколения 3D-стратегий. Рынок 2D RTS быстро сокращался, и мы
оказались чуть ли не единственными представителями на нем. Разобравшись с
измерениями, мы начали экспериментировать с углом наклона камеры.
Вариантов был несколько - от 90 до 45 градусов, но остановились мы на
30. Оказалось, что в этом случае наши спрайтовые войска выглядели
максимально привлекательно и не закрывали стоящих за ними юнитов, что
упрощало управление крупными армиями. Как мы уже говорили выше,
первоначально игра планировалась к выходу только на территории СНГ.
Поскольку основная фишка игры - одновременное отображение 8000 юнитов,
нам пришлось разрабатывать свои технологии отображения графики и
просчета логики игры с учетом того, что будущие игроки будут иметь
компьютеры чуть ниже среднего уровня. Вообще, выбор главной "фичи" стоил
большой крови нашему главному программисту - темпы написания кода были
около 300-400 строк в день! Объем чистого кода "Казаков" на момент
релиза (1.5 Мб) мог сравниться по объему с "Анной Карениной". Главный
программист – человек с отличной памятью, который всегда помнил, "что
где лежит", не прибегая к комментариям кода.
Одними из основных проблем в разработке движка были вывод большого
количества юнитов и трехмерного ландшафта, быстрый поиск пути и
искусственный интеллект. Немало пришлось повозиться с
многопользовательской игрой и игрой через Интернет. Во время работы над
Казаками мы постоянно держали в уме главное правило - наш код не должен
тормозить. Считаем, что нам это удалось. Основная схема, по которой
делался "быстрый" код - функции не были громоздкими, а все алгоритмы
линейно зависели от количества юнитов.
Поиск пути
В постмортеме "Казаков" нельзя не упомянуть одну из главных проблем, с
которыми столкнулись девелоперы. Это поиск пути - фундаментальная задача
игровых разработок. В нашем случае пришлось столкнуться с тем, что
обычные алгоритмы поиска, при которых карта разбивается на проходимые и
непроходимые зоны, и от точки исхода до точки назначения строится
кривая, огибающая "непроходимости", не подходит. Все упиралось в так
много раз упоминаемые в этом постмортеме 8000 юнитов, которые на
классических алгоритмах безбожно тормозили.
Выйти из ситуации помог двухуровневый поиск пути, состоящий из двух
частей. Первая из них - "глобальная", путь в ней ищется по
топологическим зонам, которые имели соединения между собою и некий
условный вес. Вторая часть системы - "точный" поиск, который
использовался для перемещения в рамках 1 топологической зоны (обычный
поиск пути по карте, разбитой на квадраты в 16x16 пикселей).
Система работала следующим образом: чтобы найти путь, юниты искали
кратчайший путь, а затем, когда входили в конечный район, проверяя
прямые, которые связывали центры топологических зон, выбирали путь в
указанную игроком точку, используя точный поиск. Наличие топологических
зон здорово помогло при создании ИИ. Как уже говорилось, каждая зона
имела свой вес (на этот показатель влияло наличие и число войск
противника). ИИ строил путь по топологическим зонам, обходя опасные
места стороной. Как правило, на карте было около 700 топологических зон,
что значительно облегчало поиск пути, по сравнению с 16384х16384
возможных точек.
Впрочем, этот удачный во всех отношениях поиск пути буксовал при
наличии стен, которыми перегораживали топологическую зону. Чтобы обойти
эту проблему, мы реализовали алгоритм динамического изменения
топологических зон в реальном времени, что оказалось очень непростой
задачей.
Прочие проблемы
Были некоторые проблемы и в графическом департаменте. Огромные объемы
двумерной графики, которыми приходилось оперировать, привели нас к
созданию собственного формата: каждый кадр паковался отдельно, используя
алгоритм LZ с общим словарем. За счет этого достигалась хорошая степень
сжатия, а доступ к каждому кадру не требовал распаковки предыдущих.
Возникла проблема с просчетом тумана войны. Так как динамически
рассчитать радиус обзора для каждого из 8000 юнитов, не напрягая при
этом процессор довольно сложно, мы придумали следующее решение. Вокруг
юнита расставлялось от 1 до 8 точек - карта тумана войны. И далее
методом решения уравнения Лапласа достигалось сглаживание между этими
точками. В результате туман войны выглядел достоверно, плавно и не
тормозил. Еще одно приятное решение было связано с отображением воды, с
которой мы расправились с помощью быстрого и перспективного алгоритма,
который, кстати мы используем до сих пор. Маленькие волны на воде
целочисленно и быстро решались физическим реальным уравнением волновых
процессов. И рендеринг одной "водной" текстуры размером 256х256 точек на
компьютере 200 МГц занимал доли миллисекунды.
Игра через Интернет
Технология сетевой игры была реализована следующим образом:
Предположим, что 1, 2 и 3 - игровые такты. Предположим, что в некоторый
момент Игрок-2 нажимает на иконку строить юнит, и пакет с информацией об
этом приказе отсылается на компьютер Игрока-1. При этом компьютер
Игрока-2 выполняет этот приказ на 3 такте, когда пакет теоретически
будет у Игрока-1. Таким образом, происходит синхронизация компьютеров
Игрока-1 и Игрока-2. В случае, если пакет не доходит (теряется) и
Игрок-1 не получил информацию о приказе, то он останавливается на 3
стадии, а Игрок-2 идет дальше, на следующий такт, так как он пакет
отправил.
Игрок-2 не получает никаких пакетов от Игрока-1 и думает, что пакет,
наверное, потерян и посылает пакет снова. Игрок-1 получает пакет,
отсылает свои пакеты, а сам идет на 4 такт. После того как Игрок-2
получил пакет приказов от Игрока-1, игра синхронизировалась, и они
дальше продолжают обмениваться пакетами. И хотя ситуация с потерей
пакета возникает крайне редко, эту проблему все равно пришлось решать.
Данный метод хорош тем, что после отправки пакета Игрок-2 не должен
ждать пакета с подтверждением того, что приказ получен. Также на этапе
разработки возникла проблема, с реальным временем, которое на разных
машинах идет по-разному. При игре больше часа возникала разница где-то в
1-2 секунды. Эта проблема особо проявлялась при пинге больше 1000. Для
устранения проблемы машины пинговались и вычислялось среднее время. Для
этого посылались пакеты данных, фиксировалось время отправления и пинг.
Далее время уравнивалось.
Многопользовательская игра и Интернет
Проблема рассинхронизации игры на двух компьютерах возникала в самих
разных ситуациях, и отследить ее можно было только чудом. Поиски решения
занимали недели. Иногда при расчете таблицы синусов и косинусов,
которая использовалась повсеместно (например, для поиска путей или
траектории полета снарядов), на разных компьютерах получались разные
значения.
Эта проблема возникла из-за так называемой floating point inconsistency
(несоответствие значения при использовании плавающей точки). Для
успешного поиска точного места в коде, которое стало причиной
рассинхронизации, мы сделали генератор случайного числа (на которое
влияло почти все: расположение юнитов, отыгрываемые кадры анимации,
отданные приказы... в общем, все, что должно было быть
синхронизировано), который вставлялся в сомнительные участки кода.
После окончания игрового цикла значения между машинами сравнивались и
если цифры были разными, значит, произошла рассинхронизация. При этом
программист получал название файла и номер строки, где произошел "сбой
случайного числа". Далее методом предположения и околонаучного "тыка"
находилось конкретное место в коде, которое могло стать причинной
рассинхронизации. Найденный баг нещадно уничтожался. Несмотря на
титанические усилия по доводке Интернет-игры, следует отметить, что
интерес к сетевым баталиям в "Казаках" не был очень высоким. Причиной
тому - поэтапное издание игры в разных странах, из-за которого
коммьюнити Интернет-игроков никак не могло набрать критическую массу.
Сначала "Казаки" вышли в Германии, потом Англии и Франции, затем в
Испании, Японии, Италии и так далее. Всего наша игра вышла в 17 странах
мира, но интерес к Интернет-игре рос слишком медленно. Самое большое
количество игроков в онлайне было около 500, а в среднем - 150-200 днем и
10-50 ночью.
Количество игроков, необходимое для появления полноценного коммьюнити,
способного затягивать новых пользователей, мы в то время оценивали в
2000. Крупные компании (Blizzard, Microsoft, EA) издают свои игры
одновременно по всему миру, добиваясь огромного количества игроков на
серверах и создавая ажиотаж вокруг Интернет-возможностей своей
продукции.
Финишная прямая
В начале работы над проектом все гордились своей работой и проектом. Но
под конец сотрудники начали "выгорать". Появились сомнения в успехе,
развился синдром "бесконечного ремонта".
Кто-то стал говорить, что графика недостаточно детализирована, кто-то -
что игра не будет популярной и уже сейчас неинтересна. Проект
заканчивали, буквально стиснув зубы. Когда мы вышли на стадию
бета-тестирования "Казаков" и трезво оценили объемы работ, стало
понятно, что проекту потребуется еще минимум 6 месяцев. Чтобы не
допустить срывов, мы пошли на крайние меры и внедрили систему "военного
времени": трудовой день начинался в 6 утра и длился до 11 вечера с
обеденным перерывом в один час. Цели были ясны как никогда, и от нас
требовалось не выдохнуться на финишной прямой, на этом самом сложном
участке любого забега.
Жесточайший распорядок дня несколько сглаживался начислением двойных
зарплат и бесплатными обедами. Все приходили без опозданий и работали не
покладая рук. Военное время длилось для команды долгих 3 месяца, в
течение которых из беты выковывался к "золотой мастер" проекта. После
того, как финальная версия "Казаков" была отправлена издателю, полуживая
команда в полном составе была отправлена в отпуск.
P.S.
Поле завершения работы над "Казаками" и выдачи всех патчей (следует
признать, что после релиза последовала очень "жирная" заплатка) мы сели
за многопользовательскую игру и просидели на нашем сервере полгода.
Прибегали рано утром, до работы, и оставались после работы на всю
ночь... играли. Кроме того, после выхода Казаков, мы обнаружили, что в
50% игр в Интернете люди договаривались не нападать в начале сессии - от
15 до 60 минут. И мы сделали это опцией в аддоне (называется она Peace
Time - "время ненападения"), что оказалось довольно полезной находкой.
Потом, собравшись с силами и идеями, забросили "Казаков" на полку и
засели за "Завоевание Америки". Игра, начатая как небольшой проект для
внутреннего рынка от маленькой, никому не известной команды, вырос в
итоге в крупный игровой продукт, вышедший в двух десятках стран мира и
снискавший заслуженную славу. Реализовать его нам помогла вера в свои
силы и неувядаемое чувство энтузиазма. Каждая поездка на выставку, когда
люди вроде программистов Age of Empires или Джона Ромеро подходят к
стенду и говорят "Вау!", каждое похвальное превью и отзыв на форуме
давало положительные эмоции, дарило нам реальную понимание в то, что мы
можем сделать мега-хит. Это заставляло нас выкладываться на полную.
"Казаки" того стоили. Разработка проекта - это как игра в футбол:
вратарь может пропускать голы, но проигрывает вся команда, а если он
ловит мяч, то и выигрывает вся команда. Вся работа в команде опирается
на всех членов команды без исключения. Соответственно, успех и
популярность нас во всем мире - заслуга каждого члена команды.
|