FlyBugFly. В поисках фичи

в 7:48, , рубрики: game development, игры, таймкиллеры, метки: ,

FlyBugFly. В поисках фичи

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

В начале этого года мы решили попробовать свои силы в разработке игр для WP7. Вначале нас было всего двое. Выбор жанра – вещь довольно непростая, от этого зависит буквально все. Анализ кучи статей по играм дал только то, что никто не обладает конкретными цифрами по жанрам, либо не хочет их сообщать. В конце концов, после того, как были сломаны все копья и приведены все аргументы и контраргументы, мы выбрали жанр попроще, т.н. «jumper». Причин этому было две – то, что проще всего, отнимает наименьшее количество времени (потом выяснилось, что это не совсем так), и эти игры довольно неплохо продаются (по крайней мере, в соответствии со статистикой по играм Android и IOS).

Основные компоненты

В марте мы начали писать движок. Физика передвижения персонажа достаточно простая – есть сила, действующая вниз, и есть добавки скорости, возникающие от съедания монеток. По акселерометру управляется скорость сползания влево/вправо. Тут нужно сказать, что мы упростили процесс как могли. Акселерометр, строго говоря, дает неровные данные. То ли руки у человека трясутся, то ли датчик сам по себе дает шумы (последнее вернее). В математике есть целое направление по поводу того, как от таких шумов избавляться. Ну, кто грамотный, тот и сам в курсе. А кто неграмотный – главное, теперь знает, что там не все так просто. Так вот, наше управление работает напрямую от датчика. Это дает быструю реакцию на поворот устройства, и, как ни странно, это нисколько не сказывается на поведении перемещаемого объекта. Он, как ни странно, никак не подрагивает.

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

В игре также есть achievement board и система начисления очков. Компонент взят стандартный – Scoreloop. Таким образом, если у игрока на телефоне есть интернет, он может видеть достижения других игроков, и его собственные достижения также будут видны всем. В таблице есть 7 тысяч очков с копейками – это, на самом деле, был один программный баг, который мы успешно вылечили, но есть и вполне реальное достижение – это 3 тысячи очков. Поверьте, это было непросто. Попробуйте сами, и если с первой десятки попыток наберете хотя бы тысячу – нальем пива.

Графика

Отдельного упоминания заслуживает работа художников. Эти же люди в свое время рисовали Alien Shooter (да, да, песок из нас пока еще не сыплется). Вот, к примеру, первые наброски (без участия художников):

FlyBugFly. В поисках фичи

FlyBugFly. В поисках фичи

А вот то, к чему пришли:

FlyBugFly. В поисках фичи

Ощущаете разницу между профессиональной работой и любительской? Все герои были прорисованы в 3d, после чего сделана раскадровка (тоже, кстати, интересная задачка). Монетки сначала вращались, но выглядело это не очень красиво, и тут вдруг осенило – их вообще не нужно вращать (большую часть)! Фон состоит аж из 3-х слоев, все они двигаются с разной скоростью – это придает объема и движения. Ощущение движения создает и еще один эффект – это падающие частицы. Если присмотреться – будет заметно, что это кленовые листья.

В игре используется движок Mercury Particle Engine. В целом, движок удачный. Очень распространенный и бесплатный. С исходниками. Но есть у него и недостатки. Движок привязывается к компоненту GraphicsDeviceManager, причем имеется у него несколько видов (два) рендереров. Один (SpriteBatchRenderer ) – нам не подошел, т.к. преобразования по координатам почему-то не выполнял (может, мы его просто не сумели приготовить), а второй – QuadRenderer. Этот самый QuadRenderer, в общем, предназначен для 3d (по крайней мере, все трансформации он выполняет для видового экрана 3d). А у нас 2d. Целый день был потрачен на то, чтобы найти подходящие коэффициенты для камеры. Чтобы согласовывались координаты у наших 2d-элементов и у частиц. В дальнейшем, наверное, мы напишем свой движок — у нас не слишком большие запросы в этом плане, а добавить эффекты, которых в MPE нет, иногда хочется.

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

Фичи

Мы много думали, что бы такое добавить, чтобы были отличия от аналогов. Т.е. нужна «фича». Иначе игра будет не очень интересной и незапоминающейся. Сначала просто добавили противника. Это оса. Или несколько ос (выбирается случайным образом). Кстати, если вы так и не поняли, что с ней делать – просто бейте ее пальцем (один или несколько раз). За это даются очки. Но противник в такого рода играх – вещь достаточно распространенная. Поэтому нашу осу можно не только «забить», ее еще можно и «загладить». За это дается значительно больше очков, и еще дается одна жизнь. Техника «заглаживания» довольно простая – ставите палец на осу и начинаете быстро-быстро водить по ней, не отрывая палец от экрана. Заодно отрабатываете один нужный в жизни навык. Игры на балалайке.

В самом конце процесса мы добавили еще одну фичу – combo-коды. Практически как в MK. Сами кнопки находятся внизу экрана. У них есть время активации – 1 минута (не в любой момент). Эта фича, мы считаем, самая серьезная – в дальнейшем мы значительно расширим круг возможностей. Добавим «перепрыг», «kill’em all», «unvulnerability» и другие интересные штуки. Обычно в играх на мобильных устройствах этих кнопок нет. Все, что есть – это кнопки со стандартными функциями. Наше решение позволяет добавить нам в игру практически бесконечное количество возможностей.

Распространение

Выходили на Marketplace очень долго и нудно. Вначале оказалось, что приложение должно работать и на 256-Mb устройстве. Зачем??? Непонятно. Введите ограничения – и все. Так ведь нет, есть требование не превышать 90 Mb барьер. Плюс нерабочие стандартные процедуры определения, на каком устройстве запущена игра. Плюс бета-тестеры, которые на самом деле не тестируют, а пишут отписки. Прошло 3 недели(!) тестов. В конце концов пришлось обратиться в техподдержку и немного надавить. Вроде отпустило.. См. вот сюда: FlyBugFly. Ждем откликов.

Работа в команде.

Как подтвердилось, в любом проекте самое сложное – это люди. Все вроде бы просто. Есть четкая задача, есть четкий выполнимый план. Но люди вносят свои коррективы. К маю нас было уже пятеро. Двое – художники, трое – программисты. И – энтузиазм. Разное количество энтузиазма. Потому что у всех есть жены, дети и работа. Фактически, всё можно было сделать за месяц-полтора. Но делали 4(!) месяца. Как говорится, срок, указанный программистом, умножь на Пи.

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

Если кто-то из участников не спешит с обещаниями или не «горит» — подумайте, может быть, его стоит заменить, пока не поздно? Потому что задержки у одного из участников не просто скажутся на общем результате, а могут вообще поставить все под угрозу – вследствие затягивания и у остальных просто угаснет интерес.

Эпилог

Вот так, с грехом пополам, совершая ошибки и набивая шишки, мы все-таки закончили первую версию. Результат, как видите, вполне достойный. Тайм-киллер получился хороший, мы и сами вполне так неплохо убиваем время за этой игрой. По крайней мере, для того, чтобы стоять в очереди/ехать на метро/подарить девушке, она вполне сгодится. В ближайшее время мы добавим туда еще несколько вещей — combo-коды для выполнения «перепрыгов» через большое количество черепов, убийство разом всех пчел и пр… Думаем над тем, чтобы сделать мультиплеер. Скорее всего, он будет по сети. Т.е. вы сможете поиграть в нее с друзьями. Попробуйте посоревноваться — нам это тоже доставило удовольствие.

Автор: Zanoza

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js