Предисловие
Мое хобби — разработка игр для iOS. Создаю игры с помощью фреймворка SpriteKit на языке Swift. В основном, в жанре «Словесные». Почти все основные паттерны таких игр я уже испробовал и настало время поэкспериментировать с форматом.
Эта статья — описание разработки самой масштабной игры, которую я делал.
Идея и базовая концепция
Совмещение механик из разных жанров является хорошим примером, как можно выгодно отличаться от конкурентов. Как в лучшую, так и в худшую сторону.
Для начала надо определится с основной механикой и проверить ее в действии. Основная механики моей игры — перемещение рядов и столбцов с фишками (блоки с буквами) на игровом поле.
Перемещать нужно таким образом, чтобы получались слова длинней 3 букв (у нас матч-3 же!). Каждое перемещение = 1 ход.
Чтобы пройти уровень, необходимо набрать определенное кол-во очков. Игрок ограничен по числу ходов на уровень.
Я не эксперт в играх жанра три-в-ряд, поэтому взял за основу популярные игры этого жанра, сильно не углубляясь в поиски. Из тех игр, что я анализировал, обычно, пользователь меняет две рядом стоящих фишки.
Но я решил сделать немного по-другому и реализовать концепцию перемещения столбцов и строк. После перемещения один блок в столбце/строке исчезает и на другой стороне появляется новый. На месте собранных слов появляются новые блоки с буквами.
Правильнее всего было бы сделать полный ресерч рынка и найти матч-3 игры с похожей механикой, но легкие пути не для меня. Из словесного жанра, что я мониторю, похожих механик я не находил.
Главный плюс выбранной концепции — из-за перемещения целого столбца/строки можно собрать сразу несколько слов. В играх, где меняют два фишки местами, такого эффекта можно добиться, если грамотно подходить к дропу фишек на поле.
Разработка
Реализовал базовое перемещение. Проверки на состояние поля пока еще нет. Слова собираются автоматически во все стороны (слева-направо, справа-налево, сверху-вниз, снизу-вверх).
На этом этапе становится понятно, что сбор слов нужно осуществлять только слева-направо и сверху-вниз. Ибо, если сбор идет во все стороны, получается каша, за которой очень сложно уследить и концентрировать внимание. Много слов собирается в тех местах, где ты этого не ждешь.
Попытался создать первого врага-монстра. Но все мои попытки были безуспешны, поэтому иллюстрация первого монстра была приобретена в магазине Adobe. Остальных монстров, их анимации и фоны делал сам.
Так же добавил стандартную для жанра механику вычитания и добавления ходов — за сбор специальных блоков. При сборе блоков с бомбами кол-во ходов уменьшается, при сборе блоков с часами, ходы добавляются.
Добавил прогресс бар, чтобы можно было отслеживать как много очков до завершения уровня. Пустоту снизу заполнил фоном. Сверху экрана пустил анимированные облака.
Переделал сбор слов. Теперь только слева-направо и сверху-вниз. Добавил партиклы и наглядное начисление очков при сборе. Блок с часами (+ ходы) заменил на блок с медалькой.
Немного технической части. После добавления анимации проверил производительность. Игра в тот момент отъедала 40% процессора на старших моделях и 100% на младших.
Анимация съедала «всего» 10 процентов, тогда как все блоки на поле (более 100 штук) ели все остальное. Решение оказалось простое — нужно внимательно читать документацию и использовать правильный тип нодов. В моем случае мне нужно было использовать SKEffectNode для самих фишек.
Добавил экран проигрыша и выигрыша. Сделал главное меню. Начал делать систему уровней и рисовать остальных монстров.
Из-за того, что раньше все мои игры использовали стандартные примитивы, этот процесс занял очень много времени. Но за пару уроков по Illustrator`у и After Effects`у можно научиться делать простую, но приятную графику и базово ее анимировать.
Всю графику я не рисовал с абсолютного нуля, а брал для примера готовые работы в качестве референсов и пытался повторять с учетом моих потребностей.
Любую игру можно улучшать бесконечно, но нужно вовремя остановится, чтобы игра не превратилась в долгострой. Поэтому туториалы по механикам подаю в виде текста в начале уровня. Не самая лучшая практика, ибо текст появляется очень долго, но более наглядная демонстрация новых механик требует больше времени на разработку.
Изначально планировал сделать 40 уровней, разделенных на 4 темы. В итоге получилось 32 уровня по 3 темы. 32 уровень бесконечный — после него не появляются новые механики.
Начиная с 9 уровня поле меняет свой размер каждый раз — от 3х3 до 5х5 с разными вариациями (4х3, 4х5 и т.д.).
На 11 уровне появляется новая механика — каждый уровень происходит блокировка одной из букв. Эта буква больше не появляется на поле в течении этого уровня. Вместо нее дропается блок с замком. При сборе (3 и более блоков) ничего не происходит, блоки просто остаются на поле.
Сначала блокируются менее встречающиеся буквы, по мере продвижения игрока к 32 уровню блокируются более распространенные. Буква, которая блокируется на уровне выводится в окно слева вверху экрана.
На 21 уровне открывается последняя механика. При сборе слова/бомб/медалек ряды/столбцы с краю поля перемешаются против часовой стрелки. Из-за этого возникает классный лавинный эффект как в классических матч-3 играх. Т.е. собирается одно слово => поле крутится => из-за этого собирается еще одно слово => поле крутится…
Экспериментировал с этой механикой — делал перемещение каждый раз, когда пользователь двигает столбец/строку, но получается чересчур сумбурно.
В конце, как и в любом своей проекте, сделал локализацию на английский язык, добавил AdMob для показа рекламы, Flurry для отслеживания действий игрока. И таблицу лидеров, которая реализована через Firebase Database.
Итого
Всего разработка игры заняла 90 часов. У игры существует проблема с балансом, который будет исправлен после сбора статистических показателей. Поворотная механика вносит существенное разнообразие в игру и игроки могут играть бесконечно.
Если в игре будет хороший прирост пользователей в совокупности с длинной сессии/ретеншеном, то можно будет реализовывать дополнительные механики (коих великое множество) и еще больше уровней. Существующего геймплея должно хватит чтобы понять, нужно ли развивать игру дальше. Но уже сейчас 32-ой бесконечный уровень играется очень бодро.
Игру можно скачать по ссылке в AppStore.
А как думаете вы? Приветствую любые предложения и пожелания, отвечу на все вопросы.