С последней версии добавили много интересных нововведений: программная анимация персонажей вместо покадровой, отрывание частей тела, режим выживания, стационарные пушки, задания в режиме квестов, новое оружие, перки и бонусы, а также изменили механику получения оружия.
Все части дневника
- Часть 1: Идея
- Часть 2: Художник найден
- Часть 3: Техно-демо (читаете сейчас)
- Часть 4: Релиз
Программная анимация персонажей
Раньше мы использовали покадровую анимацию для главного героя. В результате у нас был один большой набор спрайтов в одном файле для ходьбы и смерти. Аналогично для каждого монстра существовали отдельные наборы. Некоторые были достаточно большими, например, для гнезда. В будущем внешность персонажей будет изменяться (эмоции героя, одежда и т.д.) и делать для каждого внешнего вида анимацию непозволительно затратно. Поэтому было решено перейти на программную анимацию. К примеру, походка реализована поочередным перемещением спрайтов ног в вертикальной плоскости. Также синхронно двигаются торс и голова, имитируя покачивание. Все это реализовано с помощью кода, что экономит кучу памяти. Чтобы это осуществить, пришлось нарезать всех персонажей на составные части, для каждой из которых существуют силуэты разных цветов. Эти цветные заливки используются, когда персонажи поддаются различным воздействиям. К примеру, главный герой взял бонус — весь персонаж заливается на мгновенье желтым цветом, пуля попадает в монстра — красным.
Отрывание частей тела
Все части тела реализованы через отдельные сущности и делать с ними можем все, что угодно. Первая идея — разрывать монстров на куски от гранат и дробовика. Понравилось, дальше больше: отрываем руки и голову случайным образом по мере приближение здоровья к нулю. Позже начали «взрывать» и главного героя. Обильно приправили все это кровью и получили уникальную фичу для такого рода 2d шутера.
Режим выживания
Изначально планировали добавить этот режим как можно быстрее, но все руки не доходили. Когда система волн устаканилась и набралось несколько действительно больших монстров, мы перешли к реализации. Получился очень динамичный игровой процесс. Каждую волну увеличиваем количество монстров на одного. С четвертой волны через две добавляем боссов и крупных монстров. Так как из режима выживания нет доступа к магазину оружия мы выбрасываем его из убитых монстров, как бонусы. У оружия ограничили боезапас до нескольких обойм. Если патроны заканчиваются, в руках появляется пистолет. Режим выживания позволяет быстро опробывать все виды оружия. Эта механика понравилась, реализовали ее в режиме квестов с несколькими оговорками (новые пушки выпадают после их покупки). В дальнейшем добавим доску рекордов.
Новые монстры и стационарные пушки
Кроме обычных гнезд добавили две огромные модификации. Сейчас они порождают зомби, но в дальнейшем это будут маленькие паукоподобные твари. Для сравнения:
Стационарные пушки по сюжету представляют собой оборонительные сооружения, построенные высокоразвитой цивилизацией, которые защищаются от нашествия монстров. Они оснащаются тремя видами оружия: пулеметы, лазеры и ракетницы. На первых этапах пушки стреляют по нам, но в дальнейшем они становятся нашими союзниками. Пули, ракеты и пучки плазмы повреждают не только нас, но и монстров и, конечно, пушки могут повредить друг друга.
Задания в режиме квестов
Чтобы разнообразить игровой процесс мы придумали различные задания и условия прохождения уровня в режиме квестов:
- Убить всех — пройти все волны.
- Продержаться определенное количество времени — монстров на таких уровнях будет особенно много.
- Защитить союзников — по мере прохождения игры мы будем помогать отбиваться от монстров высокоразвитой расе.
- Перемещение грузов из точки А в точку Б — наша помощь также будет выражаться в доставке различных грузов
- Добраться до определенной точки — у нас будет уровень-лабиринт, из которого нужно будет выбраться за отведенное время.
Новое оружие
Уже реализовано 6 видов оружия + еще 2 пушки запланировано:
- Пистолет — неограниченный боезапас, самое слабое оружие.
- Дробовик — большой радиус действия, 4 дроби за выстрел.
- Узи — очень большая скорострельность как.
- Граната — эффективна против толп зомби, гнезд и пушек.
- Гранатомет — снаряды лишь немного уступают по силе гранатам.
- Лазерный пистолет — простреливает монстров насквозь, большой урон.
- Огнемет — поджигаем монстров, очень эффективна против пауков.
- BFG — самая большая пушка в игре и, пожалуй, самая мощная.
Перки и бонусы
Добавили несколько интересных бонусов:
- Бонус невидимости — монстры стремятся в точку, где видели вас последний раз.
- Бонус заморозки — монстры вокруг замораживаются и замирают на месте.
- Бонус страха — монстры в панике убегают от вас.
Привели названия перков в порядок, улучшили выпадение.
Новая механика получения оружия
Раньше в режиме квестов пушки покупались в магазине. При прохождении уровня вы использовали только один вид оружия, который заранее выбрали. Похожий подход, но с возможностью выбирать между двумя видами оружия использует Monster Shooter.
Напротив, в режиме выживания пушки выпадают случайным образом и имеют несколько обойм. Как только патроны кончаются, у нас опять в руках пистолет. Так сделано в Age of Zombies. За один такой уровень можно успеть сменить уйму оружия. Игра становится динамичной, стиль прохождения изменяется вместе со сменой оружия.
Поиграв в режим выживания, мы поняли, что пушки должны именно выпадать, а не покупаться. Игровой процесс значительно интереснее, когда за один уровень игрок использует разное оружие.
Поэтому в режиме квестов мы реализовали выпадение оружия аналогично режиму выживания. Суть покупки новой пушки в магазине заключается в том, что оно будет доступно в начале уровня с ограниченным количеством патронов. Дальше оружие выпадает случайным образом из списка купленных пушек.
Проблемы быстродействия
С увеличением количества монстров в режиме выживания мы столкнулись с проблемой резкого падения FPS даже на мощных смартфонах. Хороший прирост производительности давало включение выбраковки — setCulling(true) для каждого спрайта. Но появилась серьезная проблема: монстры начинали отрисовываться только если полностью влазили в область камеры, иначе их вообще не видно. Поэтому был написан отдельный метод, который определяет, нужно показывать спрайт или нет с учетом того, что он может не полностью вмещаться в границы видимости камеры.
private void optimize() { if (RectangularShapeCollisionChecker.isVisible(new Camera(ResourcesManager.getInstance().camera.getXMin() - mFullWidth, ResourcesManager.getInstance().camera.getYMin() - mFullHeight, ResourcesManager.getInstance().camera.getWidth() + mFullWidth, ResourcesManager.getInstance().camera.getHeight() + mFullHeight), this)) { setVisible(true); } else { setVisible(false); } }
Эта небольшая оптимизация значительно улучшила производительность игры в целом.
На сегодня все. Следите за нами на официальной страничке студии в Facebook, я буду периодически выкладывать интересные заметки и картинки из игры.
UPD: игра Galaxy Recon уже доступна на Google Play — присоединяйтесь!