[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Раздел игр Казаки, Казаки 2, Завоевание Америки, Александр » Казаки » Казаки, как И чт0 ?
Казаки, как И чт0 ?
GruccДата: Пятница, 2009.04.17, 13:34 | Сообщение # 1
Лидер [BDT]™
Постов : 2861
Награды : 30
Репутация : 51

При балансировке игры мы сделали все ресурсы на карте бесконечными. Плюс этой схемы - можно было играть одной базой, как угодно развивая свою империю. Естественно, были и неизбежные минусы - теряется часть игры, когда у тебя есть войска и отсутствует возможность постройки юнитов, так что итог зависит от того, как ты проведешь последний бой. Это сильно укорачивало время игровой сессии. 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 или Джона Ромеро подходят к стенду и говорят "Вау!", каждое похвальное превью и отзыв на форуме давало положительные эмоции, дарило нам реальную понимание в то, что мы можем сделать мега-хит. Это заставляло нас выкладываться на полную. "Казаки" того стоили. Разработка проекта - это как игра в футбол: вратарь может пропускать голы, но проигрывает вся команда, а если он ловит мяч, то и выигрывает вся команда. Вся работа в команде опирается на всех членов команды без исключения. Соответственно, успех и популярность нас во всем мире - заслуга каждого члена команды. cool


Люби своих врагов, и будь осторожен с друзьями, потому что враги делают тебя сильнее, а друзья всегда меняются
 
[BDT]_StenДата: Пятница, 2009.04.17, 22:34 | Сообщение # 2
Герцог
Постов : 597
Награды : 2
Репутация : 9

Это типа история создания казаков??? wacko
 
GruccДата: Пятница, 2009.04.17, 23:02 | Сообщение # 3
Лидер [BDT]™
Постов : 2861
Награды : 30
Репутация : 51

Чтото типо того wink

Люби своих врагов, и будь осторожен с друзьями, потому что враги делают тебя сильнее, а друзья всегда меняются
 
[BDT]_StenДата: Пятница, 2009.04.17, 23:11 | Сообщение # 4
Герцог
Постов : 597
Награды : 2
Репутация : 9

Quote (|BDT|_OveRLorD)
Чтото типо того

А зачем нам её выложил?????Разве это интересно???? smile Хотя........ wink
 
GruccДата: Суббота, 2009.04.18, 10:41 | Сообщение # 5
Лидер [BDT]™
Постов : 2861
Награды : 30
Репутация : 51

Ну мож тебе и не интересно, а некоторым интересно как создавали козаки ... happy

Люби своих врагов, и будь осторожен с друзьями, потому что враги делают тебя сильнее, а друзья всегда меняются
 
Форум » Раздел игр Казаки, Казаки 2, Завоевание Америки, Александр » Казаки » Казаки, как И чт0 ?
Страница 1 из 11
Поиск:

Карта сайта Правила Обратная связь BDT-Team.ru - бесплатные торрент игры © 2016