Привет, Хабр!
Историй о разработке игр было немало, сегодня я попробую вкратце рассказать нашу.

Мир есть текст — Жак Деррида
Игра есть словарь — a11aud


Идея


Началось все с выдвинутой a11aud идеи что состояние большинства процессов можно представить конечным автоматом, который управляется командами. Состояние этого конечного автомата представляется в виде словаря, работа с которым производится на языке высокого уровня, в нашем случае на Python. Такой подход сулил много преимуществ при должном выборе технологий. Антон запилил тестовый мессенджер на tornado и все об этом благополучно забыли.

К концу прошлого года экономическая обстановка заставила вернуться к идее и был рожден концепт. Хотя придуманная архитектура позволяла натянуть на механику практически любую стратегическую игры, окончательным решением стал командный tower defence 4х4 в фэнтезийном сеттинге.

Их было четверо


И разработчиками были только двое. И все работали на основных работах по 8 часов в день. И выдержали в таком темпе полгода.

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

Процесс был организован итеративно: на каждую неделю намечался список фич к реализации с ответственными. Независимо от результатов итерации функционал должен был расти от итерации к итерации. Каждую неделю по возможности проводился совместный сбор, демонстрация достижений, раздача слонов, поедание еды и иногда даже выпивание пива.

Планировалось плавно наращивать программный функционал и начиная с играбельной версии параллельно начинать работу над моделями существ и дизайном интерфейса.

Технологии


Для сервера было решено продолжать использовать tornado. Это сделало разработку доступной «для самых маленьких» и позволило легко масштабировать серверное решение. Сервер с самого начала задумывался авторитарным. Игрок может взаимодействовать с ним только строго определенными игровыми действиями и никак на механику повлиять не может. Извиняйте, читеры. То есть клиент по сути просто “телевизор с пультом”, который показывает игровой процесс.

Для клиентского приложения был выбран Unity: кроссплатформенность, прекрасная поддержка, легкость вхождения сделали этот движок единственным разумным решением в условиях нашего коллектива.

Взаимодействие между сервером и клиентом было решено осуществлять по сырому протоколу websocket. Подкупила простота работы в tornado, но потом это аукнулось.
Но обо всем по порядку.

Немного азов


Что такое любая игра? Это цикл расчета игрового мира с неким шагом расчета, продолжающийся до победы/поражения. Ровно так же на клиент прилетают состояния игры, которые он отрисовывает, попутно отсылая на сервер действия игроков. Игровых данных может быть очень много поэтому для того, чтобы на одном сервере могло быть запущено около 5000 игровых приложений, нам пришлось пройти следующий путь:
  1. Первоначально мы гоняли json-сериализованное состояние игрового мира.
  2. Когда стало ясно, что 10 инстансов это маловато, был реализован diff-алгоритм, который позволил слать только дельта-состояние. Жить стало лучше.
  3. Спецификация websocket’ предполагает возможность сжатия трафика алгоритмом deflate. Но к сожалению в той реализации, которую мы выбрали, сжатие зависело от системных библиотек и разнилось на Windows и MacOS. Пришлось лезть в исходники и делать свое сжатие с орлянкой и гоблиншами. Это дало выигрыш еще в 40 раз. Жить стало веселее.



Игровая механика




Расчет боя происходит по очевидной схеме: юниты сближаются, если расстояние до ближайшего врага позволяет провести атаку, завязывается драка с расчетом повреждений. Звучит просто, но в реале это алгоритм квадратичной сложности и на массовом замесе серьезно сказывается скорость работы python. Было применено комплексное решение:
  1. Юниты стали храниться в R-дереве. Это снизило длину цикла расчета целей для атаки.
  2. При помощи Cython компонент боя компилируется в сишный код. Выигрыш в производительности около 10 раз.


Атака лисят




А теперь вернемся к вопросу, вынесенному в заглавию. Конечно никак. Если игра сложнее крестиков-ноликов, у вас ничего не выйдет. На начальных этапах мы вели отладку на кубиках, потом перешли на бесплатные модели из Unity Asset Store. Когда мы чуть не травмировались от вида атаки щенят и лисят, мы призвали на помощь варяга. На наш призыв откликнулся один замечательный дизайнер из Кишинева. Дизайн, который вы видите на видео, выполнен им, но жизненные обстоятельства наложили на наше сотрудничество некоторые ограничения. Димыч, если ты это читаешь, спасибо огромное за гоблина, скорейшего новоселья, мы тебя ждем.

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

Проголосовало 645 человек. Воздержался 231 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (10)


  1. a11aud
    27.05.2015 00:31
    +1

    Кстати говоря, мы участвуем в питерском Global Meetup, который пройдет 6 июня в КДЦ «Club house». Там мы сделаем подробный доклад о нашей разработке (уже есть в программе на островке «3D-уголок»), а также предоставим возможность сыграть всем желающим.


    1. impowski
      27.05.2015 07:47

      А что за чат такой чудной, откуда оповещения идут? Кстати очень близко друг от друга территориально находимся:) Можно узнать, а на митапе вход свободный или как?


      1. a11aud
        27.05.2015 09:53

        Это Telegram. Вход на митап свободный, но нужна регистрация через сайт.


  1. impowski
    27.05.2015 07:28
    +2

    У меня такое ощущение, что я где то уже видел что-то подобное в W3:TFT, видимо все тавер дефенсы на одно лицо. Соглашусь с Тохой, Восхождение на Юпитер — знатное говно. А Кипе, удачно облегчиться.


    1. domix32
      27.05.2015 18:15

      Трава везде одинаковая какая-то.


  1. progchip666
    27.05.2015 09:52
    +2

    Вторая часть. Как заработать на этом миллион долларов когда выйдет?


    1. a11aud
      27.05.2015 13:18

      Тут все просто. Само по себе начинает работать сарафанное радио и уже через пару дней мы купаемся в лучах славы и денег.


  1. ababo
    27.05.2015 11:05

    Кто и как рисовал и дизайнил?


    1. a11aud
      27.05.2015 11:09
      +1

      Все модели взяты из Unity Asset Store (кто не в курсе, это встроенный в юнити магазин моделей, текстур и прочих полезностей). А интерфейс нарисован дизайнером, который некоторое время работал с нами (об этом есть в статье).


  1. drayv
    28.05.2015 18:48
    -1

    Как за полгода разработать многопользовательскую 3D-игру без художников, дизайнеров и моделлеров.

    *Смотрит на результат*
    -Никак.