Village & Monsters: получилось?

Пока память свежа, расскажу о том, как сделал Village & Monsters. Постараюсь поведать о всех этапах разработки, начиная с придумывания идеи. А в конце поста подведу небольшой вывод о том, получилась ли Village & Monsters и какие проблемы у нее есть.

Rafb68w
Обложка игры. Сгенерировано нейросетью.

В этом посте вы узнаете:

  1. КАК РОЖДАЛАСЬ ИДЕЯ
  2. РАЗРАБОТКА
  3. НЕЙРОСЕТИ
  4. ПОСЛЕДНИЕ ДНИ
  5. ВЫВОД

КАК РОЖДАЛАСЬ ИДЕЯ

Еще до конкурса, я хотел сделать какую-нибудь простенькую игру, в которой игроку не требовалось никаких больших усилий, просто играй и получай удовольствие. Заглядывая в будущее, блин, понял, что я обманул себя дважды. Но вернемся к тому, как рождалась идея. Вот Лиса объявила тему, много конечно вопросов возникло, но благо, Лиса, как хороший организатор, дала ответы довольно подробно и понятно. Все, начинается мозговой штурм. Но хорошие идеи никак не рождались. Были там идеи, конечно, чтобы ГГ телепортировался из своего процветающего города в параллельную вселенную, где город весь в руинах, а по улицам ходят монстры. Или даже путешествия по метавселенной. Но это все не годилось для простой игры. Скажу про себя, что я люблю стратегии, песочницы и поэтому хотелось почерпнуть что-то из этого жанра. В цивилизации есть система карточек, которые дают тот или иной эффект, а также система социальных институтов и технологии, которые тоже дают определенный эффект. Мне захотелось взять эту механику. Да и вообще, карточная игра это круто — подумал я. Это что-то новое для меня, так как карточных игр я никогда не делал. И принялся описывать идею игры, сначала в общих словах. Вот самое первое описание игры:

Игрок должен развивать свое поселение, чтобы достичь численности населения 100 человек условно. Геймплей строится на сочетании разных карточек (например, «дерево + камень = каменный топор», «каменный топор + склад = лесопилка»), также при помощи карточек можно выбирать варианты действия на те или иные события (например, «восстание + подавить = подавленное восстание» или «восстание + поддержка = революция»), а еще можно получать постоянные карточки, которые дают постоянный какой-либо эффект (например, «демократия» дает +15% прироста численности населения и золота). Карточки открываются либо из сочетаний других карточек, либо накопив некоторые ресурсы. Но также в игре есть второй геймплей, состоящий также из карточек, но играем мы за вирусы, которые тоже выживают в этом мире, и мы должны помочь им выживать, но для выживания им нужно заражать людей из нашего поселения или монстров (о них ниже), если мы не будем помогать вирусам выживать, то игра будет проиграна. Для победы нужно, чтобы поселение достигло 100 человек и вирусы не погибли. В игре будут ходить монстры, которые иногда совершают набеги на поселение людей. Но монстров убивают эти вирусы, и если вирусов будет слишком мало или вообще исчезнут, то монстры расплодятся и уничтожат поселение людей. Но монстры также будут адаптироваться к вирусу. Поэтому игрок постоянно развивает вирус. Люди изначально имеют иммунитет к вирусу. Но может случиться такое, что в процессе развития вирусы люди потеряют иммунитет к нему. И если за это время игрок не развил медицину в поселении людей, то люди могут вымереть.

Да, изначально я хотел больше различных ресурсов, которые влияли бы на получения результата сочетания карточек. После старта конкурса, на придумывание идеи ушло дня 2−3. Итоговое описание идеи до старта разработки ниже:

Накапливаемые карточки: жёлтые — материалы, красные — оружия, зелёные — технологии.
Здания: ратуша, лесопилка, шахта, ферма, медпункт, плавильня, завод.
Технологии: каменная кладка, колесо, книгопечатание, обработка древесины и т. д.
Материалы: кирпичи, каменные блоки, гранит, мрамор, доски, уголь, палки, железо, пшеница, порох и т. д.
Материалы прибавляются от зданий (максимум могут от 10 зданий) раз в несколько ходов. Каждое здание производит свой материал, а шахта и лесопилка ещё и прибавляют ресурсов камня и дерева. А ферма еду. Ресурсы нужны для получения результатов сочетания карточек, то есть нужны не только нужные карточки, но и ресурсы. Это оправдывает улучшение зданий. Улучшенные здания чаще производят новые карточки и больше за ход производят ресурсов (если они производят ресурсы) (Но потом я передумал, потому что ресурсы лишний элемент геймплея, так как карточки, производимые зданиями раз в несколько ходов и так являются хорошим аналогом ресурсов)
Сочетания карточек идут к укрупнению и в итоге удалению с игрового поля (преобразовываются либо в здания, либо в постоянные карточки либо тратятся на событийные карточки.
Сочетать между собой можно только карточки одинаково цвета (материалы с материалами, технологии с технологиями), но от сочетания материалов может появиться технология и наоборот, а также может появиться оружие или постоянная карточка. Если для появления новых карточек от зданий нет места в игровом поле, то на свободных появляется от случайного здания, а от остальных задерживается до освобождения места и появятся на следующем ходу. Постоянные карточки на накапливаемом поле задерживаются только на 3 хода, если их не выставить в поле постоянных карточек.
Результатом сочетания карточек с событийными карточками может быть событие, которые повлияет положительно или отрицательно. Или же какая-нибудь уникальная карточка любой другой масти (материал, технология, оружие, постоянная). Событийные карточки живут только 1 ход, далее, если никак не взаимодействовать с ними, они всегда принесут какой-либо эффект. А сочетание с ними меняют этот эффект. Например, нападение монстров: если не сочетать ее с мечом, то отнимется большая численность населения.

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

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

Для вируса все то же самое, только заместо зданий — тела, материала — ДНК, технологий — адаптация. Тела — это возможность заражения существ определенного вида. Тела производят карточки ДНК существ, при сочетании которых возникают новые карточки ДНК (приспособление к холоду, теплу, воде, воздуху, повышение живучести), а потом из них можно получить улучшения для тел, увеличивая рост вирусов. То есть, у вирусов будет 1 ресурс: количество ДНК, которые добываются от тел, а вместо населения количество вирусов. Также, у вирусов будут постоянные карточки, увеличивающие получаемые ДНК за ход и количество вирусов. И также будет происходить разные события. Могут произойти события адаптации существ к вирусу, в результате прирост вирусов и ДНК от тела снизится, а количество вирусов может уйти в минус. Чем меньше прирост вирусов у монстров, чем чаще они будут совершать набеги на последние людей.

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

А также я нарисовал прототип интерфейса:

WN1CQwh
Прототип интерфейса № 1

Да, мне хотелось добавить человечков, которые будут ходить по деревне, и чем больше население, тем больше человечков. А если происходит нападение монстров, то должны прибегать монстры. Если карта нападения монстров была побита каким-либо оружием, то человечки тоже должны были взять это оружие и атаковать монстров.
После продумывания идеи, я приступил, соответственно, к разработке.

РАЗРАБОТКА

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

Здания и тела можно только новые создавать и увеличивать количество текущих. Увеличивая количество текущих зданий, уменьшается количество ходов на получение карточки. А для зданий (или тел), которые еще и еду (или днк) могут производить, увеличивается количество еды (или днк) за ход.

Еда (и днк) прибавляются каждый ход, а карточки только через несколько ходов. Увеличение количества текущих зданий (или тел) увеличивают прибавление еды (или днк) каждый ход и уменьшают количество ходов до получения карточки.

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

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

08.04.2023−09.04.2023 сделать:
1 — строительство зданий при помощи карточек (сделано)
2 — производство карточек зданиями (не только новые, но и количественно) (сделано)
3 — изменение зданиями еды и население (сделано)
4 — для вирусов тоже самое, только вместо еды и населения днк и вирусы (сделано)
5 — у вирусов каждое здание (тело) производит не только карточки, но и днк, которые нужны для роста числа вирусов (сделано)
6 — каждое здание (тело) может уменьшить количество производимых днк за ход из-за событийных карточек (но благодаря адаптивным карточкам — аналог оружия — можно снизить отрицательный эффект) (сделано)
10.04.2023:
7 — оружие и постоянные карточки

проблемы:
изменить получение новые карт с чисел на что-то другое, что может быть уникальным (сделано)
сделать так, чтобы здания ожидали добавление карточки, если все поля заняты (сделано)
добавить отрицательное количество людей и еды (сделано)

когда буду добавлять информацию об оставшихся ходов до получения карточки, нужно прописать например: global.hodov=global.bonus_mine-global.hod_mine, if global.hodov<0{global.hodov=0} (сделано)

новое:
1. уменьшать пищу и днк только на определенное количество ходов (создать временные объекты, которые при создании меняют переменную эффекта и при удалении обратно меняют) (сделано)
2. сделать текст для карточек событий (через проверки на ноль добавлять нужный текст, который показывает эффекты) (по другому сделано. нужно потом заменить переменную на переменную из объекта всех текстов) (сделано)
3. придумать все карточки и здания (сделано только для людей и наполовину для вирусов)
4. сделать заявку (необязательно сегодня)
5. Удаление колоды, если она заполнена одинаковыми карточками (сделано)
6. Удаление постоянной карточки, если она находится определенное количество ходов в накапливаемой колоде. (сделано)

19.04.2023:
добавить карточки в функцию если игрок провзаимодействовал с событиями (сделано)
добавить добавление своей карточки при крафтах (сделано)
добавить в карта-итог событийные карты (по примеру первой добавленной) (сделано)
прописать эффекты для всех типов карт (сделано)

27.04.2023:
1. сделать главное меню и меню паузы (сделано)
2. сделать настройки звука (сделано)
3. сделать обучение (сделано)
4. сделать авторы (сделано)
5. сделать сохранение и продолжение (сделано)

29.04.2023:
резистентность проверить (исправлено)
лесопилку увеличить до 5 (исправлено)
кнопка проигрывания звука (исправлено)
и сам звук (в конце затухание получше) (исправлено)
баг с картой оружия и событием (там, где появилась карта события, с ней нельзя взаимодействовать пока не перенести на другую ячейку) (исправлено)

Вот так выглядела игра по состоянию на 9 апреля:

Q6TGbXx

VHvT2c5
Скрины игры во время разработки.

Когда реализовал функционал всех типов карточек и зданий, то перед добавлением самих карточек я дополнил свой документ пояснениями:

Итого можно добавлять карты с такими характеристиками:

Добавлять накапливаемые, постоянные и событийные карты

Событийные карты делятся на 2 вида: случайные и частота которых зависит от действий игрока (частота атаки монстров, частота заболеваний для людей, адаптация тел для вирусов)

Событийные карты оказывают негативный эффект на какой-либо ресурс (одноразовый для населения и вирусов, на несколько ходов для еды и днк)

Накапливаемые карты подразделяются на 3 вида: материалы, оружия и технологии.

Материалы получаются от зданий, а оружия и технологии от сочетаний накапливаемых карт.

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

Технологии — карточки, получаемые от сочетаний материалов и/или технологий.

Сочетать можно такие карточки: материалы-материалы, технологии-материалы, технологии-технологии. Оружия ни с чем не сочетаются, кроме событий.

Постоянные карточки дают постоянный эффект если они находятся в своей колоде, так как получаются постоянные карточки от сочетаний карточек в накапливаемой колоде. Постоянные эффекты: увеличивают (в разах, а не в единицах) или уменьшают прирост населения, еды, вирусов или днк. ЭФФЕКТ ЕДЫ МЕНЯЕТ ПРОИЗВОДСТВО ЕДЫ У ВСЕХ ЗДАНИЙ

Здания получаются только от сочетаний материалов и/или технологий. При повторном сочетании количество зданий увеличивается и, соответственно, быстрее получаются материалы от них.

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

ЛЮДИ:

Материалы:

камень (от каменоломни) — 11

бревна (от лесопилки) — 12

лечебные травы (от лечебницы) — 13

виноград (от плантации) — 14

доски (от мастерской) — 15

железо и медь (от кузницы) — 16

олово (от рудника) — 17

бронза — 18

сталь — 19

углерод (от горна) — 20

книги (от библиотеки) — 21

сено (от фермы) — 22

ограда — 23

Технологии:

лечебное дело — 31

письменность — 32

каменная кладка — 33

ремесло — 34

драма и поэзия — 35

растениеводство — 36

горное дело — 37

животноводство — 38

стены — 39

военное дело — 40

строительство — 41

охота — 42

тактика — 43

инженерия — 44

Оружия и инструменты:

бронзовый меч — 51

стальной меч — 52

копье — 53

лечебный отвар — 54

спирт — 55

ловушки — 56

Постоянные:

безопасность — 1161

театральные представления — 1162

искусство — 1163

кулинария — 1164

санитария — 1165

События:

заболевание — 71

атака монстров — 72

дикие животные — 73

грызуны — 74

птицы — 75

ядовитые змеи — 76

насекомые — 77

ВИРУСЫ:

Материалы:

ДНК монстров — 111

ДНК людей — 112

ДНК кабанов — 113

ДНК грызунов — 114

ДНК оленей — 115

ДНК блох — 116

ДНК змей — 117

Технологии:

Распространение по земле — 131

Адаптация к воде — 132

Устойчивость к жаре — 133

Устойчивость к холоду — 134

Перенос по воздуху — 135

Резистентность к лекарствам — 136

Оружия и инструменты:

Мутация — 151

Разрушение клеток — 152

Сопротивляемость — 153

Постоянные:

Быстрая адаптация — 1261

Быстрая репликация — 1262

Повышение живучести — 1263

Защитная оболочка — 1264

Высокая заразность — 1265

События:

Адаптация существ — 171

Вредная мутация — 172

Иммунный ответ — 173

Почему постоянные карты имеют такой числовой разрыв? Дело все в коде, так как карты, чье число имеет значение >1000 игра считает за постоянные. Система далеко не идеальная, но зато получил ценный опыт.

В итоге на кодинг у меня ушло куда больше запланированного — 3 недели. В игре сложная механика взаимодействия различных карточек и зданий на получение ресурсов (населения и еды, вирусов и днк). Например, на население влияет количество производимой еды, количество домов для проживания, значение положительных эффектов от постоянных карт и отрицательных эффектов от событийных карт. На еду влияет количество зданий, производящих еду, количество положительных и отрицательных эффектов, а также количество населения, которые эту еду пожирают. И также с вирусами. По сути, чем больше днк добываешь, тем больше прирост вирусов. Именно поэтому событийная карточка адаптации к вирусу, которая чаще всего появляется, когда большое количество вирусов, отнимает днк, но в отличии от людей, когда прирост еды отнимается на 10 ходов, прирост днк отнимается навсегда, это должно подтолкнуть игрока заражать все большее количество существ. И вот так со всеми элементами игры. Но не так важно вникать в суть механики игры, если, конечно, не хочешь добиться наилучших результатов за наименьшее количество ходов. Достаточно интуитивного ощущения, что надо делать, а что не надо. Даже необязательно запоминать всю книгу рецептов, которую у меня не получилось нормально реализовать, на мой взгляд комбинации карточек легко запоминаются, и через несколько попыток ты уже будешь знать, куда тебе двигаться и какой тактики придерживаться. Я сравниваю это с цивилизацией: вот когда играешь не вдумчиво, не зная всех правил, и что-то у тебя даже получается, это уже весело, а вот когда познал всю механику то у тебя все очень хорошо начинает получаться, начинаешь просчитывать ходы, выстраивать тактику. Обучение в игре также максимально упрощено, чтобы не вдаваться в подробности механик, так как все познается в процессе игры, к тому же предоставляется вся информация о том, какие эффекты и что сколько производит.

Ну ладно, немного отступили. Лиса вот хитрая, она была права, что тема подразумевает долгую разработку, так как я по сути делал 2 игры в одной. Но на что же я потратил последнюю неделю? На графику, музыку и звуки, баланс, меню и система сохранения.

Новый прототип интерфейса перед добавлением графики у меня выглядел так:

qDKeoNo

Прототип интерфейса № 2

НЕЙРОСЕТИ

С самого начала я планировал использовать нейросети для генерации графики и музыки. Для генерации графики я попробовал много разных сервисов, но остановился на PlaygroundAI.com. Дня 2−3 я генерировал графику для игры. Но не всегда графика получалась такой, какой я представлял в голове, пробовал писать разный промт, в итоге сдался и пошел на компромисс с нейросетью. Все же я не художник и времени остается мало.

mImk3jX
Иконка игры. Сгенерировано нейросетью.

Для музыки мне давно приглянулся Riffusion.com. По мне, довольно неплохо генерирует музыку в разных жанрах. Неудобство только в том, что он генерирует музыку кусками по 5 секунд, которые надо скачивать, чтобы потом соединить воедино.

А вот кого я не упомянул, так это ChatGPT. Его доля очень маленькая, но все же есть. Нет, не в коде. Код быстрее я напишу, чем буду объяснять ему о чем проект, что уже есть в проекте, а чего нет. Потому что проект — это комплексная и сложная задача, даже сам бот говорит, что он не может написать игру. Он очень хорошо пригодился для мелких, рутинных задач, для которых не нужно много объяснений. Например, для генерации коротких описаний для всех карточек, или прописывании нужных переменных всем карточкам. Также, он может помочь в разрешении сложных вопросов и направить в нужное русло, но тут, буду честным, от документации по GameMaker больше пользы, чем от бота.

iiYJj4L
Победная картинка. Сгенерировано нейросетью.

Почему нейросети, а не сток? Потому что поджимало время и не надо задумываться об авторском праве. Но все имеет свои плюсы и минусы. Нейросеть не всегда генерирует то, что ты хочешь и не всегда качественно. Приходится перебирать кучу вариантов. На стоке нужного варианта ты можешь так и не найти, плюс надо проверять лицензию. Нейросеть полезна для генерации за короткий срок хоть какой-то графики. Идеальный вариант комбинировать сток и нейросеть для тех случаев, когда не можешь найти нужную графику. А еще лучше иметь в команде художника, это самый быстрый и лучший вариант, так как, если это хороший художник, вся графика будет в одном стиле, более качественной и с душой (единой идеей). То же самое касается и музыки. Качество музыки, как по мне, не самое лучшее, но для такой игры лучшее качество не требуется. Такую нейросеть можно использовать для создания сэмплов для своих композиций, которые потом еще будут 100 раз обработаны. Идеальный вариант, как и с графикой, обращаться к композиторам. Но у меня таких знакомых не было. Поэтому пришлось обратиться к роботам (СЛАВА РОБОТАМ). Это хоть на немножко, но улучшило качество игры, чем если бы я без них обошелся и обратился к стоковым изображениям и музыке, на поиск и обработку которой я потратил большее время. В будущем я всегда смогу обратиться к людям за улучшением графики и музыки, а не к нейросетям. Это смешно сравнивать творчество людей и нейросетей.

ПОСЛЕДНИЕ ДНИ

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

jxf7V1Q
Итоговый вид игры

ВЫВОД

Получилась Village & Monsters? Нет. Во-первых, баланс, при котором оружия не имеют такой роли, какая им задумывалась. Во-вторых, обвинения в том, что я использовал нейросети. Хотя я считаю, что это просто полезный инструмент, как фотошоп, игровой движок и т. д. Ни о какой замене людей речи не идет, если были бы знакомые художники и композиторы, то я бы обратился к ним. В-третьих, как потом выяснилось, игра очень сложная и непонятная, даже обучение непонятное. Конечно, я ожидал худшего, но чтоб настолько. Мне вспоминается один мой проект про роботов, там, конечно, было все очень плохо. Думал, что тут исправил все свои ошибки, но нет. Хотя удивительно, хотел сделать максимально простую игру, а получилась максимально сложная. В общем, буду думать, что делать с этой игрой. Но результатом я не совсем доволен, но это тоже опыт.