GM 6: Подготовка перед заселением

Продумаем логику и алгоритмы работы фракций и их отрядов на карте.

Для тех кто не понимает что происходит ссылка на первую статью из цикла.

Про ощущения

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

Логика работы фракций

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

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

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

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

Логика работы отрядов

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

Примерно такая вырисовывается схема иерархии объектов, их составляющих и обращений к этим составляющим.
Примерно такая вырисовывается схема иерархии объектов, их составляющих и обращений к этим составляющим.

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

Логику работы отряда нужно разделить на стадии: стадия движения к цели, стадия выполнения задания, стадия возвращения на базу. По возвращении отряд сдает задание, продает лут, закупает снаряжение, пополняет свою численность.

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

Как все это организовать алгоритмами

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

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

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

Также нужно проработать объекты-отряды, которые будут существовать на карте и выполнять задания. В них создадим переменную, отслеживающую текущее состояние (отдыхает, идет на миссию, возвращается, сражается, спасается бегством и так далее) и прописать сами состояния с условиями перехода между ними.

У меня возник вопрос, как организовать раздачу поручений и занятий для отрядов.

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

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

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

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

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

GM 6: Подготовка перед заселением
Повернуть карту пока не поздно? 
поворачивай, так будет удобнее
оставь ее как есть, так нам привычнее на нее смотреть
да пофиг, делай че хочешь
43
47 комментариев