Проект “Экипаж” запущен. Ура!

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

С момент начала работы над этой версией игры прошло ровно три месяца. Напомним, что игра делалась в одиночку: сервер, клиент, графика (арт и анимация) и подбор озвучки. Надо сказать – адский труд… :) Зато на данный момент мы имеем довольно необычный многопользовательский онлайн реал-тайм симулятор летающей боевой машины.


http://vk.com/crowlers

Вместо эпиграфа:
“…Многие люди спрашивают меня – как себя мотивировать?
Никак. Оставайтесь в жопе…” (А. Лебедев)

Фактически, закончена не вся игра, а только ее первый играбельный фрагмент – роль стрелка краулера. Остальные роли (пилот, штурман, медик, инженер) еще не реализованы, во время боевых вылетов их функции выполняют AI-члены экипажа. Кстати сказать, AI у нас обычно получается довольно сообразительный и интересный, а в данном случае – еще и общительный. :)

Игра только-только стала доступна пользователям. Естественно, вылезут еще какие-то баги и недоработки – как же без этого… :)

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

Сервер
Ядро сервера использовалось общее для всех наших игр. Ядро конкретно этой игры было заложено где-то год назад, но потом заморожено. Думается, главной сложностью здесь было создание качественного AI – искусственного интеллекта. Им наделены не только члены экипажа, но и, естественно, корабли противника. Хотя, с кораблями противника было не сложно.

Игра командная, поэтмоу AI-члены экипажа тоже должны не просто выполнять свои функции, а взаимодействовать с другими членами экипажа – как с ИИ, так и с игроками: штурман анализирует плотность руды и дает приказы пилоту, пилот управляет кораблем, механик ремонтирует поврежденные узлы и агрегаты, медик лечит всех. По совместительству каждый из них может быть стрелком, управляя одним из орудий корабля.
В общем, с АИ пришлось попариться… :)

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

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

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

Что мы сделали, чтобы победить синхронизацию. В каждом пакете приходят координаты и вектор движения корабля. В этот же момент мы имеем фактические координаты корабля в клиенте. Другими словами – есть две пары координат – серверные и клиентские. Они в 90% случаев не совпадают из-за лагов сети и тормозов клиента. Если делать по-простому – можно просто перекинуть корабль в координаты, пришедшие с сервера, но это некрасиво. При большом расхождении координат – заметный рывок и дерганья. Но тут на помошь приходит вектор движения, пришедший с сервера. Имея исходную точку и вектор движения, можем вычислить, где, по расчетам сервера, должен быть корабль через секунду. Тогда задача сводится к тому, чтобы вычислить новый вектор движения – из текущей клиентской точки – в расчетную точку следующего такта. Так и сделали. В итоге корабли движутся плавно и вполне приятно глазу.

Я понимаю, что объяснил все довольно скомканно и без примеров. Если понадобится более развернутая верся – обращайтесь – посвятим этому целую статью. Оно того стоит.

Арт и анимация
Повесть о том, как серверные программеры становятся художниками. :)
Определенный опыт фотошопа у меня был (и есть), много пользы дали прошлые проекты, например “Охотники”. Механически что-то нарисовать умею. Сложнее придумать – что именно рисовать: форма, выбор точки зрения и проекции, цветовая гамма, стиль – уйма всего. Слава богу, фантазия и пространственное мышление присутствуют.

Очень помогло то, что клиент сначала делался на технических интерфейсах, отражающих функционал, и только его. при таком подходе приходит быстрее понимание того, что именно должно быть в интерфейсе, и как примерно расположено. Кое-какое видение появилось, попробовал сделать наброски на бумаге – видение укрепилось. После этого понемногу, шаг за шагом, началась прорисовка в фотошопе. Сначала общей концепции, затем – деталей. А, перед тем как начать рисовать, я провел пару дней, роясь в интернете и рассматривая интерфейсы к современным играм. Очень не хотелось делать модный “няшный” интерфейс. Тем более, игра все равно вышла довольно хардкорной – не для секретарш.

Так родились интерфесы, и стартовая платформа №528. :)

Резюме и выводы

  • Главный вывод – делать сложные игры в одиночку – реально. Реально трудно, но реально возможно. :) См. эпиграф.
  • Одиночная разработка имеет как плюсы, так и минусы. К минусам отнес бы пониженное качество исполнения некоторых частей проекта, в которых я не профи, а так же большой календарный срок разработки. Как к плюсу, так и к минусу можно отнести то, что мне не нужно было ни с кем обсуждать деталей гемплея, спорить и что-то доказывать – все варилось в одной голове. Несомненный плюс – экономия финансов, особенно учитывая, что лишних нет. Огромный плюс – не нужно тратить время на раздачу заданий и проверку результатов другим участникам проекта. Так же, не надо их искать, ругать и поощрять. Не надо нервничать, когда они работают плохо, или вообще не работают.
  • Надо сказать, хардкор, как направление, дает некторые преимущества разработчику. Во-первых – не нужно стараться следовать стандартам, делать интерфейсы ссылающиеся на самые популярные игры и т.п., можно пофантазировать. Во-вторых – большой посещаемости и онлайна не предвидится – игра для избранных и думающих, поэтому нагрузки на сервер не будут космическими. И в третьих – разрабатывать такие игры (в отличие от казуального красочного хлама) интереснее на порядок, в тыщу раз!! :)

    P.S. Если интересуют подробности реализации каких-то частей проекта – не стесняйтесь спрашивайте – мы посвятим этому будущие статьи.

  • Эта запись была опубликована в рубрике Новости и отмечена метками , , , , , , , , , , , . Добавить в закладки ссылку.

    3 в ответ на Проект “Экипаж” запущен. Ура!:

    1. loderunner пишет:

      Добрый день, очень заинтересовал процесс создания клиента игры. Если можете, то расскажите о нём более подробно, или если опять же можно, пообщаться лично? и про сервер и про клиент, на as3.

      • antares пишет:

        Спасибо за ваш интерес. Этот блог ведется в основном серверным программистом, который имеет лишь косвенное отношение к клиентской части игр. Но на какие-то вопросы ответ наверное найдется. :) Спрашивайте.

    2. Nadezhda пишет:

      Спасибо за статью. Удачи вашему проекту!