Перейти к содержанию
Авторизация  
  • записей
    5
  • комментариев
    30
  • просмотра
    1 244

Тот самый сталкер, сборка 1865 и голодные спазмы..

Авторизация  
NZ+

1 876 просмотров

Для начала залезем в конфиги 1865 билда. В настройках ботов мы видим такие параметры …

 

Min_Satiety = 0.000055 (минимальная норма сытости, ниже которой бот считается голодным)

 

Max_Satiety = 1.0 (максимальная норма сытости)

 

satiety_v = 0.001 (скорость уменьшения сытости со временем [0...1])

 

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

 

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

 

satiety_critical = 0.25 (критическое значение сытости (в процентах от 0..1) когда здоровье начинает уменьшаться)

 

Описание говорит само за себя, это порог сытости. Точно такой же параметр есть и у других ботов. И для последних получается, что параметры satiety_critical и Min_Satiety/Max_Satiety дублируют друг друга. А значит какие-то параметры уже не работают, просто их забыли зачистить из конфигурации. И если отталкиваться, что satiety_critical есть у всех ботов, а без порогового значения параметры скорости убывания сытости просто не имеют смысла, то «лишними» здесь являются Min_Satiety/Max_Satiety. Забавно, но эти «лишние» и давно не рабочие параметры есть даже в конфигах Аномалии.

 

И остался еще один параметр …

 

satiety_health_v = 0.03 (увеличение здоровья при уменьшении сытости)

 

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

 

В целом, получается такая картина. Боты каждый имеют уникальный параметр сытости, который убывает со временем на неуказанную в конфигах величину (предположу, что на единицу, или около того). И есть некое пороговое значение сытости, после пересечения которой (в процентах от общего объема «желудка») убывать начинает уже здоровье на величину satiety_health_v. Раз сытость убывает со временем, то логично предположить и механизм, который увеличивает значение сытности. Иначе все боты на локации рано или поздно попросту вымрут от голода.

 

Далее выводы и предположения. Боты имеют параметр сытости, который убывает. Увеличить его (наесться) можно, если охотиться за другими ботами. Поэтому все боты имеют свободное рандомное передвижение — это симуляция охоты друг на друга, чтобы набить желудок (увеличить параметр сытости). Значит в движке должна быть пачка соответствующих процедур (мы этого не видим), соответствующие анимации (вот они есть), ну и так далее. Если сытость бота уже равна нулю (или ниже порогового значения), а он так никого и не зажевал, то начинается финальный отсчет убывающего в ноль здоровья, пора отыграть анимацию смерти и выгрузиться из памяти. Но для сталкеров все немного иначе. Они охотятся не за ботами, а за артефактами. Предположу, что теоретически сталкер, найдя артефакт, должен был тащить его торговцу, чтобы купить еду, и тем самым увеличить свое уникальное значение сытости. Ну или сдохнуть, если ничего не нашлось.

 

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

 

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

 

-

 

Это делается приблизительно так. В движке объявляются переменные..

 

Текущее_значение_сытости, максимальное_значение_сытости, минимальное_значение_сытости, и так далее (условно и для примера) = Integer (мы хотим целочисленные).

 

Отдельно задается проверка …

 

Если текущее_значение_сытости < минимальное_значение_сытости, то …

 

Дальше для бота начинается обратный отсчет, потому что значение сытности преодолело порог. Значит теперь у него уменьшается здоровье …

 

Текущее_значение_здоровья = текущее_значение_здоровья + satiety_health_v

 

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

 

Текущее_значение_сытости = текущее_значение_сытости - 1

 

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

 

Если из примера закомментировать объявление, то движок даже не скомпилируется, потому что в нем есть операторы, которые нигде не объявлены, он не знает их типа. Но если в движке снести все остальное, то даже игра не скрошится. Если снести проверку, то движок никогда не будет проверять, проголодался ли бот (уменьшилось ли его значение сытости ниже порога), даже если он честно уменьшает величину сытности, хоть до отрицательных значений. А значит и не будет уменьшать здоровье боту, если тот «проголодался». Можно и по-другому, снести только уменьшение здоровья. Движок проверил, что сытость бота упала ниже критического значения, и ничего дальше. 

 

-

 

Теперь вернемся к 1865 билду. В нем есть параметры satiety_v (скорость уменьшения сытости со временем) и satiety_health_v (величина, на которую будет увеличиваться здоровье при наличии «голода»).

 

В 1865 билде оба параметра работают. Если выставить значение satiety_v = 1000 (чтобы бот побыстрее оголодал) и satiety_health_v = -1000 (минус, потому что у разработчика руки такие были, а тысяча — чтобы бот гарантировано умер, стандартная величина их здоровья 100 .. 200), то боты будут умирать от голода ваншотом, как только загрузятся онлайн (в офлайне живут). Любые, хоть сталкеры, хоть собаки, хоть плоти, хоть кто.

 

У меня нет оригинальной игры, поэтому я взял ОЛР, который пользуется версией движка Теней. Выставление такого же значения здесь не приводит ни к чему, боты это просто игнорируют. Следовательно, проверка в Тенях закомментирована, либо удалена вовсе. Можно было бы предположить, что это произошло где-то с августа 2004 по март 2007. Но можно поступить иначе, взяв билд 1935, датированный октябрем 2004 года. То есть, прошло всего два месяца. Именно эту сборку, кстати, считают наиболее полной того самого.

 

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

 

-

 

Пора подводить итог. Что же пошло не так?

 

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

 

Но в том же билде на свалке возле домика уже сидят бандиты. Они уже никуда не ходят, и в эту игру не играют. У них «своя игра», с которой другие познакомятся в 2007 году. Лагерь (смарт, гулаг, и так далее) здесь тоже не фишка и не самоцель, а необходимость и способ игры. И две игры оказались несовместимы между собой.

 

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

  • Мастер! 2
  • Аплодисменты 1
  • Хабар 1
Авторизация  


4 Комментария


Рекомендуемые комментарии

Главный вопрос как это все со стороны выглядит для игрока идущего мимо?

Думая об этом я понял, что многое надо показывать как в ЗП

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

 

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

В Lost Alpha если убить военных под мостом новый отряд не заспаунится и не пойдет до моста от блокпоста.

В версии ТЧ 1.0000 мне удавалось натравить военных на деревню новичков....

Не в одном моде ТСС я не могу вспомнить поиск артефактов сталкерами регулярно, хотябы упрощенно как в ЗП.

Что касается А-лайва для боёв, то он достаточный почти везде.

 

 


Дополнено 25 минуты спустя

Предлагаю ввести пункты по которым следует оценивать или разрабатывать A-life.

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

3) Задача военных патрулировать зону и отстреливать по идее всех, кроме ученых.

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

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

6) пересечение путей враждующих фракций и мутантов

Поделиться этим комментарием


Ссылка на комментарий

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

11 часов назад, Ruwar сказал:

В версии ТЧ 1.0000

Плохо знаешь ТЧ. На четвёртом патче это тоже реально и, прямо скажем, достаточно просто. Убиваешь троих вояк - и весь блокпост идёт прочёсывать местность, попутно заходя в Деревню Новичков, если увидит тебя там. Я так от наёмников отбивался, но нужно было подгадать момент.

12 часов назад, Ruwar сказал:

Не в одном моде ТСС я не могу вспомнить поиск артефактов сталкерами регулярно, хотябы упрощенно как в ЗП.

Бессмысленно, хотя и красиво. Вот если бы они эти артефакты сбывали на Скадовске и, скажем, меняли свой ранг или снаряжение... Я такое только в Тайных Тропах видел, очень давно. Давно настолько, что неправда, наверно. Потом гуглил, но всё без толку.


Дополнено 11 минуты спустя
12 часов назад, Ruwar сказал:

Думая об этом я понял, что многое надо показывать как в ЗП

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

Или это уже я проглядел?

Поделиться этим комментарием


Ссылка на комментарий
21 час назад, Ruwar сказал:

Предлагаю 

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

 

В КоК и Аномалии реализован именно этот вариант (захват ресурсных точек). В Аномалии вроде как даже можно настраивать. Численность отрядов, время между спаунами, приоритетные точки, и так далее. И довольно живо получается. Если уж совсем раздражает спаун, можно настроить на один отряд в сутки. Артефакты, да и вообще внутриигровые вещи, там не используются как ресурс, они там просто декорация, и для игрока, а не для ботов.

 

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

21 час назад, Ruwar сказал:

Что касается А-лайва для боёв, то ..

A-life не используется в боях. Это навигация ботов вне боя. В бою они пользуются AI с другой навигацией, которая в клеточку..

 

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

 

Поделиться этим комментарием


Ссылка на комментарий
Цитата

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

По твоему группировки вечно должны сидеть на одной  точке?

И проявлять себя в заскриптованном квесте на военных складах?

 

Или ты думаешь все члены группировки должны разбредаться по зоне в силу голода и остальных необходимостях где-то погибая в аномалиях и т.д

ТСС алайф был сильно заточен на зону с радомными сталкерами одиночками, без группировок. (100 человек в зоне)

Изменено пользователем Ruwar

Поделиться этим комментарием


Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти