История разработки онлайн стратегии непрямого управления. Часть 2: Первый сервер
В этой серии постов я расскажу историю разработки нашей онлайн стратегии непрямого контроля, которая выходит на Windows, Mac, Linux, iOS, Android. Для начала поясню, что такое стратегия непрямого контроля. Это поджанр стратегий, в котором игрок обустраивает базу, создает юнитов и зарабатывает ресурсы, но при этом боевая составляющая почти никак не зависит от действий игрока.
Первая часть: ПрототипыВторая часть: Первый сервер
В прошлой части я рассказал о первых прототипах, а теперь речь пойдет о нашем первом сервере и альфа-тестировании.
ПсевдосерверИтак, у нас уже была готова вполне рабочая версия клиента, но совершенно без серверной части. На чем писать сервер мы не выбирали, тут все зависело от человека, которого мы найдем. Начались поиски индивидуума на должность серверного разработчика, заняло это приличное количество времени, так как многие после нескольких дней работы просто переставали отвечать или у них не хватало времени. Но исполнитель все таки был найден, хоть у него и было мало свободного времени для нашего проекта.Началось обсуждение технологий для реализации серверной части. Язык, на котором решено было писать сервер оказался Java. Для обмена данными между клиентом и сервером был выбрал текстовый формат JSON из-за его простоты и универсальности, но шифрование пакетов мы решили отложить на потом. Работа и взаимодействие с БД было организовано через MongoDB из-за JSON-подобной схемы данных и открытости исходного кода. Связь клиент-сервер реализовывалась через протокол UDP.
Пошли томительные дни ожидания первых билдов сервера. Кстати, машину под серверную часть покупать нам на первых порах не пришлось, так как у серверного разработчика она уже была в достаточно приличной конфигурации, способная выдержать до одной сотни человек.
Мы это время не сидели сложа руки и добавляли новых героев и новые заклинания в игру, улучшали постройки в графическом и функциональном планах, были добавлены декорации и улучшен задний план. Наконец был готов конвейер с героями, куда игрок мог добавить герое, для того, чтобы они появились на сцене, или удалить их оттуда. Самое же главное, был сделан полный редизайн карт. Теперь их вид вызывал не отвращение, а лишь приятные чувства. Звуковая составляющая так же постоянная улучшалась, было добавлено множество эффектов, для каждого действия у героев были готовы свои уникальные звуки, наконец-то для построек так же появились звуковые дорожки, за это все спасибо команде Gamingearz. А вот с анимацией персонажей произошли кардинальные изменения. С помощью новых анимаций мы резко увеличили динамичность боя, выработали для каждого из них характер, а некоторым даже добавили некоторые интересные эффекты.
Новая анимация:[embedded content]
Новая веселая музыка:[embedded content]
И вот начальная версия сервера была готова, для работы с форматом JSON я выбрал достаточно известную библиотеку Json.NET, но из-за нее у нас в будущем появились проблемы, о чем я расскажу позднее. Началась работа по связке сервера и клиент. Интеграция с клиентом, конечно, проходила не гладко, но благодаря модульности каждой части приложения все делалось достаточно быстро и на приличном уровне.
Новая версия карты:
А почему же псевдо? Примерно за неделю, а был уже декабрь 2013, мы сделали все основные части взаимодействия клиента с сервером в меню, уже могли создаваться комнаты для боя, улучшаться карты, теперь настала очередь переходить к самой трудной части игры — бой. Вследствие нехватки времени у серверного разработчика, было принято, наверно, наиглупейшее решение за все время разработки проекта, сделать логику не на сервере, а на клиенте. Это открывало богатейшие возможности для читерства в бою, даже через ArtMoney можно было хорошо нашаманить.Вернемся к нашим баранам, так как вся логика была на клиенте, то мы сделали так, что один игрок был главным, а второй второстепенным. Главный игрок выбирался исходя из пропускной способности его интернета. Происходящее на клиенте у главного игрока считалось приоритетнее. Да, это был глупейший способ, но нам хотелось скорее попробовать, как же все это будет выглядеть, когда вместе играют два человека. Сервер при этом исполнял роль ресивера для передачи сообщений между двумя клиентами и более ничего не делал.
Так медленными, но уверенными шагами началась работа над боем. Интеграция не заняла бы много времени, если бы не одна глупая ошибка, которую я лично допустил. А заключалась она вот в чем. Нанесенный урон персонажам и их жизни я сравнивал между 2 клиентами, а вот про то, что у нас есть персонаж, который восстанавливает жизни героям позабыл, вследствие этого появился рассинхронизация между клиентами и играть было невозможно. Из-за этой ошибки мы потеряли приличное количество времени, но все таки мы ее исправили.
Так была готова не очень стабильная, но работоспособная версия клиента, в которой можно было играть, хоть и с некоторыми огрехами. Теперь оставалось дело за малым, оптимизировать и исправить баги для альфа-теста, который мы хотели запустить в феврале. Но тут обнаружилась очень неприятная проблема.
PVP:
Что же за проблема? Однажды, тестируя клиент на предмет багов, мы заметили, что при перемещении окна клиента игра полностью замораживалась и продолжала работу лишь после фиксирования окна. Это было очень и очень плохо, так как в PVP была жесткая рассинхронизация. Что же это такое? Немного поискав по интернету были найдены причины столь странной работы приложений. Мы поняли, что это особенность работы всех OC семейства Windows. Но ведь другие приложения работают при перемещении окна, значит дело в Unity3D? И тут быстро была найдена причина, вследствие однопоточной работы приложений на Unity3D происходили такие заморозки.Начались поиски решений данной проблемы, но были найдены лишь два способа. Первый можно описать достаточно просто. После перемещения окна, просто разрывалась связь с сервером, что было очень неприятно для игрока, поэтому этот вариант сразу был отметен. Второй же способ весьма прост, сделать логику на сервере. Но из-за нашего глупого решения сделать логику на клиенте этот вариант нам претил по причине переписывания всего сервера. Так же был еще один ужасный способ и он заключался в том, чтобы игроку запретить играть в окне, что плохо бы сказалось на нашей игре, где игрок может просто подолгу ожидать своего противника при поиске боя. Мы подумали, что тест можно провести на текущей версии клиента и сервера, а потом воспользоваться вторым способ, что и было сделано в дальнейшем, хоть это и отнимает значительное количество времени до сих пор, так как Heroes Of Scene еще в разработке.
Лаунчер Для нашей игры был написан лаунчер на Windows Forms, он не отличался особой практичностью, но работало стабильно. Для обновления клиента я использовал сравнение md5 хэшей файлов, и если хэши не совпадали происходило скачивание новой версии этого файла, это было не очень правильное решение, но быстрое. После теста я решил, что буду использовать алгоритм сравнения rsync о котором уже было рассказано тут.Лаунчер:
В предверии тестирования В кратчайшие сроки клиент был доведен до презентабельного состояния, а во время этого началась запись на тестирование игры. Мы не ожидали большого ажиотажа, но мы несколько просчитались, рассчитывая на 30 — 40 заявок, вышло же примерно 250. Для нас это было приличное число, так как игра не очень рекламировалась. Мы отсеяли приличное количество заявлений и вот наступила пора альфа-теста.Альфа-Тест Мы запустили альфу в конце февраля и старт был весьма и весьма успешен. В первый день количество людей в игре перевалило за несколько десятков и сразу посыпались кучи баг репортов и рекомендаций.Сразу выяснилось, что мы все равно не смогли учесть все соотношения экранов и не везде стандартный GUI выглядел одинаково, это игроков очень огорчило и тут стало ясно, что сразу после теста будет полная переработка интерфейса под NGUI. Основная часть багов была в механике игры, как мы собственно и ожидали. Конечно, были жалобы насчет проблемы, которую я описал выше. Так же благодаря тестерам был поправлен баланс и улучшены некоторые аспекты игры. Одного нашего персонажа очень сильно раскритиковали по причине его практической неуязвимости.
Злополучный персонаж:
После нескольких дней тестирования активность начала спадать, но работы нам уже хватало минимум на несколько недель. К концу марта мы закрыли альфа-тест и остались им довольны, так как он помог нам найти многие огрехи и проблемы в механике игры, с этого момента мы полностью сконцентрировались на дальнейшем развитии проекта и первой была на очереди графическая составляющая, а после нее абсолютно новый сервер, написанный с нуля.
В следующей части я расскажу о том, как игра преобразилась с новым интерфейсом и о первых тестах проекта на мобильных платформах.