Долго ломать голову над заменой я не стал. Пробежавшись глазами по списку запланированных игр, я тут же поднял чейн-пазл со скамейки запасных и выпустил его на поле разработки вне очереди. Те самые три в ряд — кристаллики, которые захватили мой мир в 2007-м. Очень скоро обретут жизнь и в этом мире. Даже хорошо, наверное, что я выпущу их сейчас, а не через пару недель. Мало ли кто-то тоже додумается до этой механики.
На этот раз пайплайн получился куда более гуманным по срокам. Основная сложность теперь заключалась именно в грамотном написании кода и опять в математике. Только теперь вместо функций придется возиться с матрицами и их проверкой.
Закончив с планированием технической части, я перешел к визуалу — который должен был стать главной фишкой игры. Рубины, изумруды, бриллианты, сапфиры, аметисты — эти камни в совокупности с простыми механиками игры, сделают ее невероятно привлекательной. Почему? Из-за пропаганды конечно же! Потому, что драгоценные камни испокон веков являются символом богатства.
***
— Бред какой-то… — Фыркнула Аврора, изучая техническое задание. — Почему именно кристалики? Я понимаю, что это символ богатства. Но мы же головоломку делаем, а не симулятор банкира.
— Потому что наш мозг не видит разницы между реальным и нарисованным. — Спокойно пояснил я. — Люди будут видеть драгоценные камни и ощущать их своей собственностью. Подсознательно конечно, но все же этого хватит, чтобы в неокрепших к таким ментальным атакам умах, сформировалась стойкая связь «Я играю в игру — у меня много бриллиантов — я богат».
— Звучит сомнительно, на грани эзотерики. — Скептически заметила Аврора, опасливо поглядывая на прикрепленный референс ограненного изумруда.
— Это психология. — Я усмехнулся, подняв палец к потолку. — Там какую тему ни возьми, все на эзотерику похоже.
— То есть по такой логике, если просто показывать игрокам монетку и растущие цифры дохода, то они будут сидеть в таком приложении до усрачки?
— Ты даже не представляешь, насколько популярным будет такое приложение. — Прохрюкал я, едва сдерживая смех. Но все же говорить ей о Ноткоине, который она в точности описала, я не стал. Мало ли — эффект бабочки запущу.
— Бред какой-то… — Повторила Аврора. — Но раз надо — значит, сделаю.
Зарядив арт-директора рисовать кристаллы и простенький дизайн сопутствующих ассетов, сам я принялся за техническую часть игры. Снова проект в Юнити, снова структуризация папок, снова возня со скриптами.
Для начала создал стабильное хранилище состояния поля — грубо говоря, место, где будет отслеживаться состояние клеток.
int[,] grid = new int[8, 8];
// где 0 = пусто, а 1–6 = типы кристаллов
Прописал псевдорандомное заполнение ячеек кристаллами — так, чтобы игра постоянно стремилась оставить игроку хотя бы один гарантированный ход. Но при этом не подыгрывала ему в случае линейки неправильных решений.
К полуночи я получил заполненную сетку с разными типами кристаллов. А Аврора тем временем проработала 2D-ассеты первых кристалликов.
— Воть… Бриллиант, изумруд и аметист. — Похрустывая салатом, она гордо показывала поблескивающие 2D-шные кристаллики. Затем переключилась в Афтер Эффектс и кликнула кнопку воспроизведения анимации. По кристаллику тут же пробежал весьма реалистичный блик. Свои навыки Аврора прокачивала с завидной скоростью.
— Зашибись. — Показал я большой палец и ловким движением своровал лист айсберга из ее тарелки. — Завтра надо доделать остальные кристаллики и бонусы.
На следующий день я занялся тем, что дал будущим игрокам возможность выбирать и менять кристаллики местами. Логика тут тоже была до одури простая. Или это я просто за время единоличной работы над кодом так прокачался?
В первую очередь нужно было определить точку касания экрана и конвертировать ее в координаты матрицы, где хранились сами кристаллики.
== Began
И теперь Юнити понимал, какой кристаллик выбран. Дополнив код еще парой строчек, добился того, чтобы выбранный кристаллик еще и подсвечивался — цветом, подтянутым из индивидуальной настройки ассета. Рубин — красным, изумруд — зеленым. Мелочь, а игроку будет приятно. Да и не потеряется выбранный кристаллик, если будет подсвечен.
Дальше опять пошла математика…
Δx + Δy == 1
Теперь второй клик по экрану позволял выбирать, с каким кристалликом нужно поменять выбранный. И если замена была возможна, то она происходила с приятной круговой анимацией. Если же нет — кристаллик просто возвращался обратно.
Оставшаяся половина дня ушла на разборки с детекцией матчей. Нет, не тех, что бывают в Тиндере — а тех, когда кристаллики создают непрерывную цепочку из трех и более штук.
Еще день понадобился, чтобы запихнуть все необходимые ассеты в префабы, прописать верное обновление сетки с кристаллами. Привязать к процессу разбития кристалликов систему очков и систему накопления этих очков — чтобы игрок постоянно ощущал прогрессию от своих действий.