GM 7: Заселяем карту травоядными

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

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

Правки концепта и устройство биосферы

Для начала заселим карту монстрятиной. Ее логика поведения самая простая, а значит, с нее лучше и начинать писать ИИ фракций и отрядов.

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

Но я тут подумала, а нафига это надо? Трава есть практически везде, еще думать, как объяснять места прокорма. Лучше вернусь к первоначальной идее, где вместо травы были тушканы и крысы.

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

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

Закодим первых травоядных

В каком-то количестве на локации всегда будут простейшие травоядные — крысы (и условно другие грызуны). Добавим объект отряда крысы и нарисуем для него спрайт метки отряда, чтобы его было видно на карте. Затем в Кардоне вместо спавна травы зададим спавн крыс.

Теперь у нас на карте метки крыс. Ну и жирнючие же.
Теперь у нас на карте метки крыс. Ну и жирнючие же.

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

Скрипт срабатывает под конец выброса.
Скрипт срабатывает под конец выброса.

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

Собственно, пропишем это крысам. Добавим начальную численность в 10 особей, а также уменьшим размер отрисовки спрайта отряда вдвое. Все же повысим ограничение на спавн для Кардона до 20, тогда должно появиться лишь два отряда крыс. Чтобы они при появлении не налегали друг на друга, добавим небольшой рандом в координаты их появления.

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

Распишем состояния для крыс. Они могут находиться на лужайке и плодиться (выполнять работу) или перемещаться на другую лужайку. Первое состояние назовем 1, а второе — 2. Изначально они будут находиться в состоянии 1. Еще нам потребуется служебное состояние 1.5, длящееся 1 шаг игры для определения точки назначения. Также в событии рисования выведем на экран основные параметры, которые потребуются для отлова возможных багов.

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

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

В состоянии 2 отряд тупо движется к месту назначения с заданной скоростью. Для движения применяю встроенную функцию перемещения напрямую в заданное направление (для него в начале шага я поставила строчку "speed=0", иначе отряд не остановится на месте, подробнее о функциях перемещения и их особенностях в будущем). Условия отслеживают абсолютную разницу координат отряда и точки назначения, по достижении которой первый переходит в состояние 1, и цикл повторяется.

Раз вы так решили, оставлю карту вертикальной.

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

2424
37 комментариев

Требую добавить в игру существ с рандомными именами селеб ДТФа!

4
Ответить

была мысль в пул прозвищ их добавить)) надо только решить, кто бандит, а кто зомби

2
Ответить

Нанял бы тебя в геймдизайнеры!

1
Ответить

и да, закодила крыс, а бабочку не вижу шото, подозрительно🤨

1
Ответить

бабочки в животе)

2
Ответить

опять кардоны)

1
Ответить

вижу имена переменных читаемые подбираешь , единственно лучше их местами сокращать например вместо number - num, resource вобще можно удалить, а предлоги for и тд - тоже лишние
Потом замучаешься все это ручками набирать и запоминать

1
Ответить