Привет, Мир! Мы два новоиспеченных разработчика мобильных игр, бывшие одноклассники, выпускники Казанского федерального университета, Айдар и Эд, продолжаем рассказ о разработке нашей первой игры «Syncomania» на Android.
Для тех, кто только что присоединился, вкратце напомним содержание первой части:
В этой статье мы расскажем о работе над уровнями игры и о некоторых принципах, которых мы придерживались. Возможно, они будут полезны и вам.
Как писал Терри Пратчетт: «Жизненно важный ингредиент успеха — это не знать, что задуманное вами невозможно выполнить». Вероятно, благодаря нашему наивному и романтическому подходу мы и добились результата.
История первого уровня: «Личная жилплощадь должна быть у всех, даже самых маленьких, поэтому каждому герою досталась отдельная комната. И одному из героев повезло — единственный выход находится прямо в его комнате. Поначалу счастливчик ведет себя эгоистично и стремится покинуть уровень поскорее. Но с опытом он осознает, что такое поведение не самое эффективное. Для оптимального прохождения надо работать в команде и сперва думать о других героях».
Вариативность прохождения — это особенность игры, которой мы искренне гордимся. Все наши уровни имеют альтернативные решения: короткие или длинные, очевидные или изящные. На каждом есть свой мировой рекорд — минимальное количество ходов, известное на данный момент. Поиски кратчайшего решения мы поощряем с помощью общепринятых звездочек, как, например, в «Angry Birds». Но, по нашему мнению, непрозрачный метод оценивания вызывает недоумение и раздражение. В «Syncomania» мы постарались сделать его наглядным: игрок получает три звезды, если проходит уровень за минимальное число ходов. С одной звездой тоже все очевидно: просто спаси всех героев, не обращая внимания на рекорды. Но за какие заслуги давать две звезды? Нам нужно было пороговое значение. Чтобы не задавать его для каждого уровня отдельно, мы ввели простую формулу:
порог = 1,5 * минимальное число ходов.
Таким образом, если мировой рекорд составляет 20 ходов, то за 29 игрок получает две звезды, а за 30 — только одну. Последующие тесты показали, что многим порой не хватает пары ходов до идеального прохождения. Мы решили, что их надо мотивировать, и ввели еще одну градацию: если игрок прошел уровень на 1–4 хода хуже мирового рекорда, то он получает 2½ звезды.
Так как количество уровней ограничено (на данный момент их 96), мы замедлили скорость потребления контента с помощью механики завершения. Новая глава, состоящая из 12 уровней, открывается после того, как игрок соберет заданное количество звезд. Таким образом мы повышаем реиграбельность, вручая дополнительные часы наслаждения (и бессовестно надеясь на появление внутриигровых покупок и кликов по рекламе).
Вариативность не имеет смысла, если решение на три звезды можно найти с первого взгляда. Поэтому мы стараемся придумывать наживки для игроков: одно или несколько прохождений кажутся очевидными, но приводят к неэффективным или проигрышным состояниям. К примеру, уровень «Угол» — визуально очень простой, но практически никто не проходит его с первого раза. Большинство стремится по пути наименьшего сопротивления — сразу к выходу в правый верхний угол. Съедая нашу наживку, игрок попадает в патовую ситуацию:
Испытывая начальные уровни, мы заметили, что симметричное расположение объектов выглядит гармонично, а хаотично разбросанные ловушки и стены создают визуальный мусор. Тогда мы решили использовать симметрию повсеместно. Но, как известно, нет правил без исключений. Например, на уровне «Свеча» мы намеренно отклонились от симметрии и поставили одинокую стенку, намекая на то, что ей следует воспользоваться при прохождении (хотя, возможно, это и наживка).
На раннем этапе разработки мы пытались выяснить, как небольшие изменения в расстановке объектов влияют на метод прохождения. Например, у нас есть около 10 модификаций конструкции «Четыре комнаты», и в каждой из них применяются разные приемы. На уровне «Сжатие» игрок учится сближать героев, чтобы проходить между ловушками.
В «Имитаторах» придется приспособиться к поведению врагов.
А на уровне «Замок» нужно помочь запертому герою выбраться из комнаты.
Принцип подобия мы применяем на уровнях с новыми механиками, чтобы игроку было легче ориентироваться в знакомой обстановке.
Поначалу мы давали уровням причудливые имена, такие как «Бесаме мучо» или «Имитация крабового мяса». Но, когда начались тесты мобильной версии, оказалось, что длинным названиям не хватает места на экране. Нужно было поменять слова или вообще от них отказаться. Мы решили, что уровни будут лучше запоминаться, если у них будет «говорящее» название. Например, уровень, в котором ловушки похожи на морду обезьяны, мы назвали «Макака».
Кстати, рабочим названием нашей игры было «One 4 all» — «один за всех» (с намеком на четверку), а текущее «Syncomania» (влечение к синхронизации) мы придумали уже перед запуском.
Нам кажется, что человек лучше усваивает материал, если приходит к решению самостоятельно. Мы не рассказываем игроку, как взаимодействовать с новой механикой, а побуждаем его находить свои приемы на простых примерах. В частности, на уровне «Раздел» игрок сталкивается с, казалось бы, безвыходной ситуацией. Точнее, выход здесь есть, но он окружен ловушками: выведешь одного героя — убьешь другого. Игра заставляет задуматься: «Разработчики наверняка что-то напутали — этот уровень непроходим. Но ведь до этого все было логично». И тут игрок обращает внимание на расставленные стены, самостоятельно открывая для себя один из основных приемов: изменение дистанции между героями. Радость — в открытии.
Эд: «Пока мы писали эту статью, моя жена прошла этот самый уровень за 24 хода и побила рекорд, который держался больше года! Во время разработки я тоже любил устанавливать рекорды на новых уровнях (ведь первое прохождение по умолчанию было лучшим)».
В прошлой статье мы рассказали, что у нас нет стабильного автоматизированного способа для выявления кратчайшего прохождения. Поэтому большинство мировых рекордов мы поставили сами или с помощью наших первых тестеров. Обычно, набрав три звезды, игроки успокаиваются и переходят к следующему уровню, но некоторые проявляют нестандартное мышление и открывают непредвиденные нами решения. Все новые рекорды с прохождениями пересылаются нам через Google Analytics, и мы меняем их со следующим обновлением (и рекордсмены мотивированы, и игра развивается). Так, наш самый преданный игрок Андрей Владимирович поставил уже с десяток рекордов. Вдобавок, мы решили, что рекордсменам будет приятно, если уровни, на которых они поставили мировые рекорды, будут отмечаться особенным золотым цветом в меню. Но если кто-то другой улучшит их рекорд, то эта привилегия как переходящий кубок достанется новому чемпиону.
Разработав большую часть уровней, мы столкнулись с проблемой упорядочивания их по возрастанию сложности. Это нетривиальная задача — хотя бы потому, что поиск решения субъективен для разных игроков. Кроме того, один и тот же уровень легко завершить в лоб, но чертовски сложно пройти оптимально. В итоге мы решили упорядочивать их по поиску очевидного решения, чтобы игроки не спотыкались на первом прохождении, но при желании могли бы погрузиться в оптимизацию уже на начальном этапе. Чтобы знакомить людей с новыми механиками постепенно, мы разделили уровни на тематические главы: Ловушки, Потоки, Враги и т.д. В начале каждой главы мы размещаем уровни попроще, а к концу проверяем игрока на прочность. Так у нас образовалась кривая сложности с колебаниями.
На этапе упорядочивания мы выкинули много скучных уровней, однако тестирование показало, что добавить тоже кое-что нужно. Например, первую главу мы добавили в последнюю очередь по совету наших тестеров. Оказалось, что новички не успевали осваивать приемы игры, и им требовалось больше простых уровней для раскачки. Стало понятно, что мы слишком погрузились в игру, и наш игровой опыт нельзя использовать для оценки сложности. Тогда мы попытались представить себя на месте новичков, впервые запустивших нашу игру, и создали лаконичные вводные уровни, используя одни лишь стены.
Айдар: «Работа над первой главой принесла мне большое удовольствие, так как жесткие ограничения открывали простор для творчества. Но все же это введение, а самая интересная часть заключалась в разработке последних глав для опытных игроков».
Создавая уровни, мы не продумывали новые механики и загадки заранее. Во время программирования и тестирования они проявляли себя сами. Например, однажды ради тестов мы поместили ящик на конвейер из потоков. По законам игрового мира ящик продвигался вдоль течения и, сойдя с конвейера, закупорил нам узкий коридор. «Хм, какая неприятность — это надо использовать», — подумали мы. Так в нашей пошаговой игре появился своеобразный таймер: нужно успеть решить загадку за N ходов, иначе выход будет замурован ящиками.
Экспериментируя с двумя таймерами, мы направили их потоки на свободную клетку. Ящики дошли до конца и взаимно уничтожились при столкновении. Это стало для нас неожиданностью, так как в иных случаях механика игры не позволяла сталкивать ящики между собой. Немного посовещавшись, мы решили, что это не баг, а фича. Как следствие, был создан уровень «Череп», где можно уничтожать ящики таким способом.
Перепробовав многочисленные виды взаимодействий, мы пришли к мысли, на протяжении многих веков служившей двигателем науки и прогресса: «А почему бы нам не смешать все это и не посмотреть, что получится?» В результате у нас появился самый запутанный на первый (и на второй) взгляд уровень — «Водоворот». Впрочем, несмотря на пугающий вид, это отнюдь не самая сложная головоломка в игре. Учитывая малое число шагов, не приводящих к проигрышу, этот уровень можно пройти простым перебором. С ним справился даже наш автоматизированный решатель — всего за 16 ходов.
Однако в большинстве случаев найти решение полным перебором не выйдет — с каждым ходом количество состояний растет экспоненциально. В игре следует использовать творческий подход, и в полной мере его придется проявить на самом сложном по версии тестеров уровне — «Узники».
История последнего уровня: «Террористы удерживают заложников в двух маленьких камерах. У героев нет иного выхода, как продвигаться вверх: шаг вниз — и заложники будут убиты. Ко всему прочему, коварные злодеи (да, это мы) заминировали всю верхнюю границу уровня. Казалось бы, игрок стоит перед дилеммой: пожертвовать заложниками или погубить героев. Но даже если каким-то чудом (спойлер: ящики) игроку удастся устранить врагов, он заметит, что комната с выходом окружена потоками, направленными наружу. И именно эта часть является коварной изюминкой уровня».
Продолжение следует...
В следующей части мы расскажем о разработке интерфейса игры.
Для тех, кто только что присоединился, вкратце напомним содержание первой части:
- мы придумали пошаговую головоломку о четырех героях (изображенных в виде роскошных белых кружочков);
- все герои (и их враги, выполненные в богатом красном цвете) управляются и двигаются синхронно;
- герои могут погибнуть, столкнувшись друг с другом, наступив на ловушку, наткнувшись на врага или попав под ящик;
- цель игры — доставить всех героев живыми к единственному выходу (зеленый квадратик);
- желательно найти короткое решение.
В этой статье мы расскажем о работе над уровнями игры и о некоторых принципах, которых мы придерживались. Возможно, они будут полезны и вам.
Как писал Терри Пратчетт: «Жизненно важный ингредиент успеха — это не знать, что задуманное вами невозможно выполнить». Вероятно, благодаря нашему наивному и романтическому подходу мы и добились результата.
Вознаграждение
История первого уровня: «Личная жилплощадь должна быть у всех, даже самых маленьких, поэтому каждому герою досталась отдельная комната. И одному из героев повезло — единственный выход находится прямо в его комнате. Поначалу счастливчик ведет себя эгоистично и стремится покинуть уровень поскорее. Но с опытом он осознает, что такое поведение не самое эффективное. Для оптимального прохождения надо работать в команде и сперва думать о других героях».
Вариативность прохождения — это особенность игры, которой мы искренне гордимся. Все наши уровни имеют альтернативные решения: короткие или длинные, очевидные или изящные. На каждом есть свой мировой рекорд — минимальное количество ходов, известное на данный момент. Поиски кратчайшего решения мы поощряем с помощью общепринятых звездочек, как, например, в «Angry Birds». Но, по нашему мнению, непрозрачный метод оценивания вызывает недоумение и раздражение. В «Syncomania» мы постарались сделать его наглядным: игрок получает три звезды, если проходит уровень за минимальное число ходов. С одной звездой тоже все очевидно: просто спаси всех героев, не обращая внимания на рекорды. Но за какие заслуги давать две звезды? Нам нужно было пороговое значение. Чтобы не задавать его для каждого уровня отдельно, мы ввели простую формулу:
порог = 1,5 * минимальное число ходов.
Таким образом, если мировой рекорд составляет 20 ходов, то за 29 игрок получает две звезды, а за 30 — только одну. Последующие тесты показали, что многим порой не хватает пары ходов до идеального прохождения. Мы решили, что их надо мотивировать, и ввели еще одну градацию: если игрок прошел уровень на 1–4 хода хуже мирового рекорда, то он получает 2½ звезды.
Так как количество уровней ограничено (на данный момент их 96), мы замедлили скорость потребления контента с помощью механики завершения. Новая глава, состоящая из 12 уровней, открывается после того, как игрок соберет заданное количество звезд. Таким образом мы повышаем реиграбельность, вручая дополнительные часы наслаждения (и бессовестно надеясь на появление внутриигровых покупок и кликов по рекламе).
Обманчивая внешность
Вариативность не имеет смысла, если решение на три звезды можно найти с первого взгляда. Поэтому мы стараемся придумывать наживки для игроков: одно или несколько прохождений кажутся очевидными, но приводят к неэффективным или проигрышным состояниям. К примеру, уровень «Угол» — визуально очень простой, но практически никто не проходит его с первого раза. Большинство стремится по пути наименьшего сопротивления — сразу к выходу в правый верхний угол. Съедая нашу наживку, игрок попадает в патовую ситуацию:
Испытывая начальные уровни, мы заметили, что симметричное расположение объектов выглядит гармонично, а хаотично разбросанные ловушки и стены создают визуальный мусор. Тогда мы решили использовать симметрию повсеместно. Но, как известно, нет правил без исключений. Например, на уровне «Свеча» мы намеренно отклонились от симметрии и поставили одинокую стенку, намекая на то, что ей следует воспользоваться при прохождении (хотя, возможно, это и наживка).
На раннем этапе разработки мы пытались выяснить, как небольшие изменения в расстановке объектов влияют на метод прохождения. Например, у нас есть около 10 модификаций конструкции «Четыре комнаты», и в каждой из них применяются разные приемы. На уровне «Сжатие» игрок учится сближать героев, чтобы проходить между ловушками.
В «Имитаторах» придется приспособиться к поведению врагов.
А на уровне «Замок» нужно помочь запертому герою выбраться из комнаты.
Принцип подобия мы применяем на уровнях с новыми механиками, чтобы игроку было легче ориентироваться в знакомой обстановке.
Названия
Поначалу мы давали уровням причудливые имена, такие как «Бесаме мучо» или «Имитация крабового мяса». Но, когда начались тесты мобильной версии, оказалось, что длинным названиям не хватает места на экране. Нужно было поменять слова или вообще от них отказаться. Мы решили, что уровни будут лучше запоминаться, если у них будет «говорящее» название. Например, уровень, в котором ловушки похожи на морду обезьяны, мы назвали «Макака».
Кстати, рабочим названием нашей игры было «One 4 all» — «один за всех» (с намеком на четверку), а текущее «Syncomania» (влечение к синхронизации) мы придумали уже перед запуском.
Самообучение
Нам кажется, что человек лучше усваивает материал, если приходит к решению самостоятельно. Мы не рассказываем игроку, как взаимодействовать с новой механикой, а побуждаем его находить свои приемы на простых примерах. В частности, на уровне «Раздел» игрок сталкивается с, казалось бы, безвыходной ситуацией. Точнее, выход здесь есть, но он окружен ловушками: выведешь одного героя — убьешь другого. Игра заставляет задуматься: «Разработчики наверняка что-то напутали — этот уровень непроходим. Но ведь до этого все было логично». И тут игрок обращает внимание на расставленные стены, самостоятельно открывая для себя один из основных приемов: изменение дистанции между героями. Радость — в открытии.
Эд: «Пока мы писали эту статью, моя жена прошла этот самый уровень за 24 хода и побила рекорд, который держался больше года! Во время разработки я тоже любил устанавливать рекорды на новых уровнях (ведь первое прохождение по умолчанию было лучшим)».
Рекорды
В прошлой статье мы рассказали, что у нас нет стабильного автоматизированного способа для выявления кратчайшего прохождения. Поэтому большинство мировых рекордов мы поставили сами или с помощью наших первых тестеров. Обычно, набрав три звезды, игроки успокаиваются и переходят к следующему уровню, но некоторые проявляют нестандартное мышление и открывают непредвиденные нами решения. Все новые рекорды с прохождениями пересылаются нам через Google Analytics, и мы меняем их со следующим обновлением (и рекордсмены мотивированы, и игра развивается). Так, наш самый преданный игрок Андрей Владимирович поставил уже с десяток рекордов. Вдобавок, мы решили, что рекордсменам будет приятно, если уровни, на которых они поставили мировые рекорды, будут отмечаться особенным золотым цветом в меню. Но если кто-то другой улучшит их рекорд, то эта привилегия как переходящий кубок достанется новому чемпиону.
Кривая сложности
Разработав большую часть уровней, мы столкнулись с проблемой упорядочивания их по возрастанию сложности. Это нетривиальная задача — хотя бы потому, что поиск решения субъективен для разных игроков. Кроме того, один и тот же уровень легко завершить в лоб, но чертовски сложно пройти оптимально. В итоге мы решили упорядочивать их по поиску очевидного решения, чтобы игроки не спотыкались на первом прохождении, но при желании могли бы погрузиться в оптимизацию уже на начальном этапе. Чтобы знакомить людей с новыми механиками постепенно, мы разделили уровни на тематические главы: Ловушки, Потоки, Враги и т.д. В начале каждой главы мы размещаем уровни попроще, а к концу проверяем игрока на прочность. Так у нас образовалась кривая сложности с колебаниями.
На этапе упорядочивания мы выкинули много скучных уровней, однако тестирование показало, что добавить тоже кое-что нужно. Например, первую главу мы добавили в последнюю очередь по совету наших тестеров. Оказалось, что новички не успевали осваивать приемы игры, и им требовалось больше простых уровней для раскачки. Стало понятно, что мы слишком погрузились в игру, и наш игровой опыт нельзя использовать для оценки сложности. Тогда мы попытались представить себя на месте новичков, впервые запустивших нашу игру, и создали лаконичные вводные уровни, используя одни лишь стены.
Айдар: «Работа над первой главой принесла мне большое удовольствие, так как жесткие ограничения открывали простор для творчества. Но все же это введение, а самая интересная часть заключалась в разработке последних глав для опытных игроков».
Примеры
Создавая уровни, мы не продумывали новые механики и загадки заранее. Во время программирования и тестирования они проявляли себя сами. Например, однажды ради тестов мы поместили ящик на конвейер из потоков. По законам игрового мира ящик продвигался вдоль течения и, сойдя с конвейера, закупорил нам узкий коридор. «Хм, какая неприятность — это надо использовать», — подумали мы. Так в нашей пошаговой игре появился своеобразный таймер: нужно успеть решить загадку за N ходов, иначе выход будет замурован ящиками.
Экспериментируя с двумя таймерами, мы направили их потоки на свободную клетку. Ящики дошли до конца и взаимно уничтожились при столкновении. Это стало для нас неожиданностью, так как в иных случаях механика игры не позволяла сталкивать ящики между собой. Немного посовещавшись, мы решили, что это не баг, а фича. Как следствие, был создан уровень «Череп», где можно уничтожать ящики таким способом.
Перепробовав многочисленные виды взаимодействий, мы пришли к мысли, на протяжении многих веков служившей двигателем науки и прогресса: «А почему бы нам не смешать все это и не посмотреть, что получится?» В результате у нас появился самый запутанный на первый (и на второй) взгляд уровень — «Водоворот». Впрочем, несмотря на пугающий вид, это отнюдь не самая сложная головоломка в игре. Учитывая малое число шагов, не приводящих к проигрышу, этот уровень можно пройти простым перебором. С ним справился даже наш автоматизированный решатель — всего за 16 ходов.
Однако в большинстве случаев найти решение полным перебором не выйдет — с каждым ходом количество состояний растет экспоненциально. В игре следует использовать творческий подход, и в полной мере его придется проявить на самом сложном по версии тестеров уровне — «Узники».
История последнего уровня: «Террористы удерживают заложников в двух маленьких камерах. У героев нет иного выхода, как продвигаться вверх: шаг вниз — и заложники будут убиты. Ко всему прочему, коварные злодеи (да, это мы) заминировали всю верхнюю границу уровня. Казалось бы, игрок стоит перед дилеммой: пожертвовать заложниками или погубить героев. Но даже если каким-то чудом (спойлер: ящики) игроку удастся устранить врагов, он заметит, что комната с выходом окружена потоками, направленными наружу. И именно эта часть является коварной изюминкой уровня».
Продолжение следует...
В следующей части мы расскажем о разработке интерфейса игры.