Banished Ventures

Олени и оленеводы

Lucy Bextor, 23 октября 2017

Пусть вас ни в коем случае не смущает столь странное название, поскольку речь в этом тексте, на самом-то деле, пойдёт об особенностях оленей, охотников и охотничьего домика – описание механики, констатация некоторых фактов, сопровождающиеся примерами из кода игры, взятого в Mod Kit. Но уж больно мне нравится звучание – олени и оленеводы. :)

Олени – эстетический рудимент?

Многие игроки в Banished думают, что невинно пасущиеся поодаль парнокопытные несут исключительно декоративный характер и на добычу никоим образом не влияют. На самом же деле, это далеко не так. Любой (даже самый маленький оленёнок) – отличный источник мяса для ваших жителей. Чуть более опытные (или более наблюдательные) игроки знают, как смешно жители убивают оленей, подходя к ним на неприлично близкое расстояние и производя в воздухе загадочные манипуляции, после которых олень исчезает, а на его месте остаётся здоровенный кусок мяса (даже если это был оленёнок с напёрсток) и шкура, которую я постоянно переименовываю то в шкуру, то в кожу, чем безумно достала русских игроков. Каюсь.

Но вернёмся к нашим… оленям. Количество мяса, которое остаётся после оленя, указывается в TemplateRawMaterialVenison.rsc, а конкретно в объекте RawMaterialDescription rawmaterial:

int _lowCreateCount = 160;
int _highCreateCount = 200;

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

Если количество мяса на выходе напрямую зависит от числа убитых охотниками оленей (и строчки о количестве мяса с одного оленя в RawMaterialVenison.rsc), то почему же они (охотники) не перебивают всех несчастных, которых видят на своём пути? И можно ли вообще истребить всех оленей на карте?

Для ответа на первый вопрос обратимся к коду охотничьего домика (Template/HunterLodge.rsc). Самая важная для игроков информация содержится в объекте HuntDescription hunt:

float _killTimeInMonths = 2.0;

Данный параметр влияет на период убийства оленей охотниками, а выставленное значение «2» значит «один олень раз в два месяца». Таким образом, количество работников никоим образом не влияет на эффективность здания – убив одного оленя, охотники будут ждать два месяца, чтобы поохотиться на другого. Но на работу будут являться исправно, бесцельно обхаживая угодья вдоль и поперёк.

Ещё один важный параметр (почему важный – станет ясно в следующем параграфе) находится в объекте RadiusDescription radius:

int _radius = 34;

Данный параметр, как понятно из названия, отвечает за радиус вокруг домика, в котором охотники выискивают дичь. Для того, чтобы охотник убил оленя, последний не должен находиться в этом радиусе – лишь попасть в обзор охотнику. Радиус обзора, по всей видимости, находится в ядре игры и не может быть изменён в Mod Kit-е.

Как устроено стадо

На этот раз искать информацию будем в коде файла, отвечающего за популяцию оленей (Template/PopulationDeer.rsc). Здесь важно отметить сразу несколько строк. Начнём с объекта HerdDescription herd, в котором содержится основная информация о стаде.

int _maxAnimals = 10;
int _minAnimals = 5;
float _timeInAreaMonths = 1.0;
float _timeInAreaTolerance = 0.75;
int _grazeAreaSize = 8;
float _reproduceTimeInMonths = 12.0;

Здесь параметры довольно простые: maxAnimals – максимальное количество животных в стаде; minAnimals – соответственно, минимальное; grazeAreaSize – размер области, в которой могут пастись олени – стоять и щипать траву, пока Вы их не спугнёте, и они не уйдут в другую область, размер которой будет таким же; timeInAreaMonths и timeInAreaTolerance в сумме дают то количество месяцев, на которое олени остаются пастись на одном месте; reproduceTimeInMonths – периодичность появления потомства в месяцах. Игра начинается ранней весной (в марте), поэтому оленята появятся следующей ранней весной, причём в таком количестве, сколько уже есть оленей в стаде (но не больше, чем maxAnimals). Вот такой вот партеногенез.

Если же Вы истребите всех оленей в стаде, в начале весны новые всё равно появятся — в количестве minAnimals. Для этого у меня уже подходящего названия нет, разве что чудо, не иначе.

Пока всё просто. Но прежде, чем переходить к следующему объекту, я вкратце расскажу об особенностях формирования зон, в которых олени могут и не могут пастись. В меню отладки (debug menu) есть замечательная функция, которая подсвечивает зелёным цветом зоны, в которых олени не прочь пощипать травку. Зоны без цвета олени игнорируют, минуя их быстрым бодрым шагом – такими зоны становятся после строительства в них зданий, например. Ещё зоны бывают красными и жёлтыми, рано или поздно превращающиеся в зелёные – после сноса зданий они находятся на пути восстановления.

Слой в меню отладки с популяцией оленей: красный и жёлтый цвет олени игнорируют, зелёную область – используют для пастбища.

А вот теперь начинается самая интересная часть. И расположена эта интересная часть в объекте PopulationDescription population.

int _cellSize = 8;
int _largeCellSize = 64;
PathBits _allowedPathing = Fast | Faster | Normal | Obstacle;
PathBits _disallowedPathing = Immovable | Unusable | Occasional;
int _maxPopulationPerCell = 2;
bool _updateCells = true;

Сначала акцентируем своё внимание на зонах. Вся карта поделена на зоны дважды. Первое разделение происходит параметром largeCellSize – карта делится на множество квадратов 64×64. Данный параметр определяет размер квадрата (зоны), в котором могут мигрировать олени в поисках нового пастбища. Второй способ разделения описывается значением параметра cellSize – здесь карта уже делится квадратами 8 на 8. Эти квадраты (зоны) отвечают за «отчуждение» земли – при, например, строительстве в зоне 8 на 8, она теряет зелёный цвет. Если же здание попало в две зоны (находится на их стыке), то сразу две зоны потеряют свой цвет и олени будут их упорно игнорировать. Чтобы понять то, как квадраты теряют цвет, разберёмся во влияющих на это типах земель.

Слой популяции оленей при cellSize = 2.

Олени могут проходить через такие типы земли (и зоны с такой землёй не будут терять цвет), которые перечислены в allowedPathing (Fast – грунтовая дорога, Faster – каменная дорога, Normal – обычная земля, Obstacle – ресурсы, лежащие на земле). Типы земли в disallowedPathing (Immovable – здания, Unusable – горы, Occasional – поля, сады и пастбища) напротив обесцвечивают зоны. Есть ещё другие типы, но они нам не понадобятся. У инструментов сбора и удаления, что интересно, тип Immovable.

Отображение типов земли через меню отладки.

Когда земля в зоне меняет свой тип на один из перечисленных в disallowedPathing, зона теряет зелёный цвет и привлекательность для оленей. При смене типа земли на разрешающий, квадрат восстанавливает свой цвет.

Изменение цвета слоя популяции оленей при вырубке деревьев.

Параметр maxPopulationPerCell довольно простой – максимальное количество популяций в зоне размером largeCellSize (64×64). Параметр логического типа updateCells тоже не сложный – он отвечает за обновление зон 8×8 – но вот результат поразительный: значение false отключает обновление цвета. Сколько не построй зданий – а олени всё равно будут блуждать по городу.

Слой популяции оленей при значении «false» в updateCells.

К сожалению, остался открытым вопрос о значении параметров populationIncreasePerMonth и populationDecreasePerHarvest: сколько не тестировала, так и не нашла, за что они отвечают.

Количество добытой оленины тремя охотниками в одном домике (слева), двумя охотниками в двух домиках (посередине), одним охотником в одном домике (справа).

Резюме

Вместо выводов по тексту приведу только самые значимые для игрока факты:

  • Олени не являются бесполезной декоративной текстурой на карте. Любой олень (даже маленький) даёт 160/200 оленины.
  • Охотники вокруг домика убивают оленей с периодичностью в 2 месяца.
  • Назначать 4 охотников бесполезно, поскольку эффективность здания зависит от времени последнего убитого оленя и количества оленей вокруг домика.
  • Если оленей в области много, то вместо того, чтобы назначать ещё одного охотника (который будет бесполезен), лучше построить ещё один охотничий домик рядом.
  • Потомство появляется ранней весной в количестве 100% от текущего числа оленей в стаде, но максимальное количество животных не может быть больше 10.
  • Если всё стадо было истреблено, ранней весной всё равно появятся олени: их будет минимально возможное число животных в стаде – 5.
  • Олени пасутся в клетках 8×8, мигрируют – в клетках 64x
  • Строительство зданий, определение области под поля, сады и пастбища, а также добыча ресурсов на карте сужают область миграции оленей, из-за чего стадо в этой области может исчезнуть.

Примечание: актуально только для оригинальной версии игры без модификаций!

Добавить комментарий