Неделя 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 единиц пшеницы. Пока выглядит хорошо.
Система получилась довольно любопытная, хотя даже на первый взгляд у нее есть одна проблема (а может и не проблема вовсе): сейчас я очень быстро выдаю игроку новые рецепты (8 штук за 3 уровня Холла), и соответственно мне так же быстро надо наращивать и сложность заказов (каждому уровню Холла, соответствует своя строка сложности), и их количество. Так как доска заказов у меня получилась постройкой, то количество заказов у меня будет регулироваться уровнем этой постройки. Хоть что-то простое и приятное.
К сожалению я не успел сделать интерфейс заказов — слишком долго над ним тупил. Так что в этот раз не будет ни видео, ни нового билда.
Pingback: Неделя 25 (март 5): Новое дерево крафта и реально много разных мелочей. – gloomy games