История про то как я делал игру. Год 0.

Оглавление

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

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

Фабула

Тут немного смешных слов про прототипы, их важную роль бла-бла-бла. Есть куча игровых жанров, которые продолжают упорно тиражироваться по лекалам позапрошлого века (по меркам темпов современного развития игр). Вон сколько лет прошло прежде чем Плариум тоже вставил захват земель в свой новый травиан с момента появления этой механики? Два или три. Ну ок, там еще год-полтора нужны на анализ и разработку.

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

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

Ну посудите сами. Выбор игр у мужиков очень ограничен. Есть всего три игры в которые можно играть не рискуя прослыть чмошником: WoT, Clash of Clans и Fallout Shelter. Скажу честно, тут результаты исследования подогнаны под нужную мне картину мира. Просто у меня есть группа старших товарищей, с которыми я встречаюсь дай бог раз в 3 года и… последний раз самый старший хвастался тем, что уже который год играет в GIшных Туземцев. А в предыдущий раз один хвастался что который год играет в Shelter. Ну и конечно все они играют в Танки.

Летом 2017 года (я не надеюсь что эта статья выйдет хоть когда-нибудь) Мейл выпустил игру Hastle Castle, которая внешне была Шелтером, а внутренне очень плохим CoCом. Тем не менее, есть некоторые подозрения, что игра не плохо пошла. У всех свои, конечно, представления о «неплохо». Проблема Hastle Castle заключается в том, что она вбрала в себя слишком много недостатков Шелтера и слишком мало достоинств СоСа. Система персонажей накладывает определенные ограничения на игровую экономику и понимание ценности (истиную ценность представляют собой шмотки, но персонажи их затмевают: покупать пак со шмотками пока персонажи качаются и получать шмотки, устаревающие за неделю — это оооочень плохо). Интересный для всех, но при этом совершенно беззубый и бесполезный и даже вредный для экономики игровой рейтинг.

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

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

Год нулевой (август 3 — сентябрь 1): Шевеление всего, магазин, конфиги, сохранение, логика.

Итак, я преступил к работе.

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

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

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

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

***

Следующим шагом появилась логика построек. Я догадался вынести логику в отдельный элемент игры как проекта. Сейчас это не важно, но станет очень важно в будущем. Логика почти всех игровых элементов состоит из двух частей: конфига и инстанса. Конфиг — это (в тот момент, сейчас неделя 10, если вы забыли) текстовый файл с JSONом который должен читаться на старте. Когда конфиг будет прочтен, то из сейва загружается сохраненное состояние инстансов, либо создается закодированное базовое состояние. Это базовое состояние максимально нулевое. По-хорошему его вообще быть не должно.

Для сохранения я использую плагин Easy Save 3. Я его купил черт знает сколько лет назад, так что почему бы и нет. Создавать свою систему сохранения на основе префсов было впадлу, тем более что Easy Save позволяет сохранять очень сложные объекты без необходимости конвертации их в более простые. Плагин конвертирует сохраняющиеся объекты в JSON так что файл сохранения можно найти и подредактировать при необходимости.

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

***

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

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

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

Оглавление