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

http://vk.com/crowlers
Вместо эпиграфа:
“…Многие люди спрашивают меня – как себя мотивировать?
Никак. Оставайтесь в жопе…” (А. Лебедев)
Фактически, закончена не вся игра, а только ее первый играбельный фрагмент – роль стрелка краулера. Остальные роли (пилот, штурман, медик, инженер) еще не реализованы, во время боевых вылетов их функции выполняют AI-члены экипажа. Кстати сказать, AI у нас обычно получается довольно сообразительный и интересный, а в данном случае – еще и общительный.
Игра только-только стала доступна пользователям. Естественно, вылезут еще какие-то баги и недоработки – как же без этого…
В этой статье мы хотели бы поделиться опытом подобной одиночной разработки в деталях. Для этого поделим проект на такие части: сервер, клиент, арт. При реализации каждой из них возникали свои специфические трудности, поэтому поговорим о них раздельно.
Сервер
Ядро сервера использовалось общее для всех наших игр. Ядро конкретно этой игры было заложено где-то год назад, но потом заморожено. Думается, главной сложностью здесь было создание качественного AI – искусственного интеллекта. Им наделены не только члены экипажа, но и, естественно, корабли противника. Хотя, с кораблями противника было не сложно.
Игра командная, поэтмоу AI-члены экипажа тоже должны не просто выполнять свои функции, а взаимодействовать с другими членами экипажа – как с ИИ, так и с игроками: штурман анализирует плотность руды и дает приказы пилоту, пилот управляет кораблем, механик ремонтирует поврежденные узлы и агрегаты, медик лечит всех. По совместительству каждый из них может быть стрелком, управляя одним из орудий корабля.
В общем, с АИ пришлось попариться…
Второй сложностью был расчет баланса всей игры – денежного, тактико-технического и т.п. Наверняка, баланс еще далек от совершенства – это время покажет, но вроде бы играбелен. Здесь нам пришлось применить весь свой опыт прошлых игровых разработок.
Клиент
Здесь основной запаркой было применение незнакомых ранее технологий. Все-таки я серверник с опытом, а не клиентщик. Но ничего, экшен-скрипт дался довольно легко. Были определенные трудности с синтаксисом при частых переключениях между java и flash, но это мелочи.
Когда флэш покорился – возникла вторая, логическая проблемка – синхронизация реал-тайма. Для того чтобы корабли летали плавно, а сервер не сильно напрягался, пакеты о положениях кораблей отсылаются клиентам раз секунду. В промежутках между пакетами необходимо было изобразить плавное движение без рывков, резких смен курса или скорости. Плюс, природа сети такова, что пакеты иногда задерживаются, и тогда следующие приходят чуть быстрее, чем надо. Если не принять мер, будет некрасиво.
Что мы сделали, чтобы победить синхронизацию. В каждом пакете приходят координаты и вектор движения корабля. В этот же момент мы имеем фактические координаты корабля в клиенте. Другими словами – есть две пары координат – серверные и клиентские. Они в 90% случаев не совпадают из-за лагов сети и тормозов клиента. Если делать по-простому – можно просто перекинуть корабль в координаты, пришедшие с сервера, но это некрасиво. При большом расхождении координат – заметный рывок и дерганья. Но тут на помошь приходит вектор движения, пришедший с сервера. Имея исходную точку и вектор движения, можем вычислить, где, по расчетам сервера, должен быть корабль через секунду. Тогда задача сводится к тому, чтобы вычислить новый вектор движения – из текущей клиентской точки – в расчетную точку следующего такта. Так и сделали. В итоге корабли движутся плавно и вполне приятно глазу.
Я понимаю, что объяснил все довольно скомканно и без примеров. Если понадобится более развернутая верся – обращайтесь – посвятим этому целую статью. Оно того стоит.
Арт и анимация
Повесть о том, как серверные программеры становятся художниками.
Определенный опыт фотошопа у меня был (и есть), много пользы дали прошлые проекты, например “Охотники”. Механически что-то нарисовать умею. Сложнее придумать – что именно рисовать: форма, выбор точки зрения и проекции, цветовая гамма, стиль – уйма всего. Слава богу, фантазия и пространственное мышление присутствуют.
Очень помогло то, что клиент сначала делался на технических интерфейсах, отражающих функционал, и только его. при таком подходе приходит быстрее понимание того, что именно должно быть в интерфейсе, и как примерно расположено. Кое-какое видение появилось, попробовал сделать наброски на бумаге – видение укрепилось. После этого понемногу, шаг за шагом, началась прорисовка в фотошопе. Сначала общей концепции, затем – деталей. А, перед тем как начать рисовать, я провел пару дней, роясь в интернете и рассматривая интерфейсы к современным играм. Очень не хотелось делать модный “няшный” интерфейс. Тем более, игра все равно вышла довольно хардкорной – не для секретарш.
Так родились интерфесы, и стартовая платформа №528.
Резюме и выводы


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