Неделя 24 (март 4): Второй пак контента, магазин построек и механизм заказов.

Я немного подумал, и решил признать первый эксперимент удачным. Спасибо братику, который зачем-то играл в мою игру целых два дня. И тому, пожелавшему остаться неизвестным, третьему человеку, который скачал первый билд и даже запустил его.

А вы думали я выложу билд не подключив хоть какую-нибудь аналитику?

Итак, в конце прошлой недели я решил что мне нужно расширить петлю, вернув на места все элементы, занимавшиеся не своим делом. Не хватало только одного очень важного объекта, но о нем немного позже.

***

Игровой цикл прошлой недели работал не очень хорошо в том числе потому, что мое дерево крафта — зависимостей одних действий от других — не показывало реальной зависимости. Ну не были никак связаны лопаты и мечи кроме того что делались из одного и того же железа. Плюс на эти рецепты очень плохо ложилось развитие построек, очень нужное мне для раскручивания цикла.

На помощь мне пришел Hay Day, дерево крафта которого я вместе с иконками радостно стырил с хейдейной вики. Слава тем прекрасным людям, что наполняют игровые вики. После небольшой адаптации я получил что-то типа такой вот таблички.

Название Уровень Постройка Рецепт Что происходит в игре
Зерно 1 Ферма Сам Холл 1 уровня.
Игрок может построить ферму.
Яйца 1 Ферма Сам (Редко)
Куриный корм (Ручками)
Кукуруза 2 Ферма Сам (Редко)
Кукуруза (Ручкам)
Продавая зерно и яйца игрок накапливает на Холл 2 уровня.
Игрок может построить кухню и апгрейднуть ферму до 2 уровня.
Хлеб 2 Кухня Зерно
Куриный корм 3 Кухня Зерно, кукуруза Холл 3 уровня (?) холл не открывает новых построек, смысла в апгрейде нет.
Кухня 2 уроня
Ферма 3 уровня
Соя 3 Ферма Сам (Редко)
Соя (Ручками)
Коровий корм 4 Кухня Кукуруза, соя Кухня 3.
Ферма 4.
Молоко 4 Ферма Коровий корм

8 рецептов оригинального хейдея, занимавшие 6 уровней игры и 5 построек я упихнул в 3 уровня и 2 постройки. Так у меня в игре появилась Кухня и Холодильник, который должен был бы выполнять функцию склада, но пока я его не настраивал.

Кухня

Холодильник (ЗИЛ)

***

И сразу оказалось что кое-чего очень сильно не хватает.

  • Во-первых, сама возможность купить постройки должна уже начать зависеть от… ну в данный момент от уровня Холла. Оказалось что моя система рестрикшенов не очень-то и готова к тому, что может быть необходимо проверять на доступность что-то кроме рецептов.

Дело в том, что когда я проверяю на доступность рецепт, я точно знаю в какой постройке я нахожусь в данный момент. Более того, информация об этой постройке уже хранится в глобальной переменной — она нужна чтобы контроллер интерфейса знал что именно выводить на экран. И вот из этой глобальной переменной я брал информацию о постройке с которой сравнивал условия ограничения рецепта. В общем в конфиге рестрикшенов рецепта даже не обязательно указывать тип постройки, уровень которой надо например проверять — ведь рецепт и так привязан к определенному типу постройки и в другой отобразиться не может.

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

  • Во-вторых, наверное пришло время сделать лоты магазина стоящими какую-нибудь валюту. Это оказалось не сложно. Не считая того, что я совершенно позорно прописал логику покупки постройки прям в кнопке магазина. Не порядок: интерфейс отдельно, логика отдельно.

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

  • В-третьих, обнаружилась одна довольно странная вещь: откуда брать ингредиенты для рецептов типа кукурузы или сои? Продавать их в магазине нельзя. По крайней мере пока у меня нет понятия какой-нибудь голды/харды — игровой валюты покупающейся игроком за реальные деньги. Иначе какой смысл их вообще выращивать если можно просто взять из магазина.

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

И почти сразу выяснилось что этот механизм не работает тем образом, который я от него ожидал. Дело в том, что я настроил ферму так чтобы она имела и дефолтные рецепты, и возможность получить те же ресурсы нормальными, ручными рецептами. И оказалось что дожидаться случайного получения какой-нибудь сои, при наличии возможности ее вырастить собственноручно, нет никакого желания, а очередь производства всегда забита чем-нибудь нужным, а не случайным.

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

***

Все это просто маленькие шаги на пути к главному: к доске заказов. Вообще никак не связанные с целью шаги.

В общем, я решил что делать доску заказов через рецепты я не хочу. Плюс к тому я решил так вспомнить как выглядит доска заказов в моем любимом Hay Day. Все оказалось несколько интереснее чем я думал. Например, я почему-то был уверен в том, что каждый заказ содержит только по одному артикулу в разных количествах. Оказалось же что заказ может содержать очень много разных артикулов в разных количествах. Ну тем интереснее.

В результате я решил все-таки делать отдельный механизм генерации заказов. Пришлось добавить в разные таблички различных данных чтобы как-то свести воедино идею генератора. А идея у него такая:

  • Уровень Холла отвечает за уровень сложности генератора.
  • Соответственно есть конфиг уровней сложности.
  • Каждый уровень содержит две пары чисел: минимальные и максимальные значения уровней предметов и ценности, которую может содержать заказ.
  • Соответственно у предметов появились параметры уровня и ценности.
  • При генерации заказа игра сначала с помощью рандома определяет на какую ценность будет заказ.
  • А потом таким же случайным образом наполняет эту ценность предметами из списка подходящих по уровню предметов.

Например на первом уровне сложности игроку и генератору доступна только пшеница ценностью 2. А максимальная ценность заказа 10. Значит игра может сформировать заказ на 1-5 единиц пшеницы. Пока выглядит хорошо.

В конфиге артикулов появились два столбца (orderLevel и orderValue) связывающие артикулы с заказами.

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

Система получилась довольно любопытная, хотя даже на первый взгляд у нее есть одна проблема (а может и не проблема вовсе): сейчас я очень быстро выдаю игроку новые рецепты (8 штук за 3 уровня Холла), и соответственно мне так же быстро надо наращивать и сложность заказов (каждому уровню Холла, соответствует своя строка сложности), и их количество. Так как доска заказов у меня получилась постройкой, то количество заказов у меня будет регулироваться уровнем этой постройки. Хоть что-то простое и приятное.

К сожалению я не успел сделать интерфейс заказов — слишком долго над ним тупил. Так что в этот раз не будет ни видео, ни нового билда.

Оглавление