А может и в ту сторону, при движении в которую будет сокращаться расстояние между целью(плеер, другой монстр) и монстром.
Почему тогда в узком коридоре тот же пинки получив выстрел в морду может вообще уйти от игрока довольно далеко, за пару углов? Но затем обязательно вернется.
Мнение таково: монстры в Думе получив контакт с игроком идут к нему рандомно, но используя все возможные пути. У летающих монстров путей соответственно больше, они используют всякие окна и проемы для прохода на линию атаки. Имеет значение так же количество одновременно ищущих игрока зверей и количество путей к нему.
Почему тогда в узком коридоре тот же пинки получив выстрел в морду может вообще уйти от игрока довольно далеко, за пару углов? Но затем обязательно вернется.
http://doom.wikia.com/wiki/Monsters_fleeing
Как я понял, если монстр кучу раз на что-то натыкается, то он в конце концов полностью разворачивается. Пинки еле помещается в узкий коридор, поэтому необходимое количество "натыканий" набирается очень быстро. (мгновенно?)
Yak-9U :
Так вот, как узнать, в какую именно сторону побежит монстр? И можно ли "заставить" его бежать в определенную сторону, если препятствием будет являться сам игрок?
Абсолютно невозможно. Для этого надо держать в голове думовский генератор случайных чисел, какие-то там thinker'ы для каждого объекта, и всё это перевычислять каждый тик.
Единственный промежуток времени, когда это в какой-то степени возможно - это начало уровня, несколько первых секунд после того как монстры начинают двигаться. Тут ещё можно с терпимой вероятностью успеха повторить одни и те же действия. Например, когда кто-то (вроде Looper) пытался пройти мап30 тайсоном, он нашёл какую-то последовательность движений, которая увеличивала шансы появления арчвайла по сравнению с тем, если просто случайно слоняться. Это было совсем ненадёжно, но всё же помогало. Более простой случай - записывая пацифист на Реквием мап22, я заметил, что если в начале не двигаться, то импы всегда убивают чейнганнера. Если я сразу начинал двигаться, то обычно он их всех расстреливал и потом ещё некоторое время досаждал мне.
Хорошо, что Дум - не пошаговая игра, как Космические Рейнджеры. А то там тоже генератор случайности повязан на действия игрока.
Боже мой, что эти задроты делали, чтобы заставить Удачу повернуться к ним лицом. "Подождать n дней, взлететь с планеты, прыгнуть в другую систему..." и все для того, чтобы нужная пушка появилась в магазине.
>> Так вот, как узнать, в какую именно сторону побежит монстр?
>> Абсолютно невозможно.
Кстати, было интересно узнать, отрыл исходники. Если монстр не нашел очевидного пути (напрямую), то есть он просто заблокирован, то функция P_NewChaseDir дойдет до следующего участка кода:
Скрытый текст:
// randomly determine direction of search
if (P_Random()&1)
{
for ( tdir=DI_EAST;
tdir<DI_SOUTHEAST>movedir =tdir;
if ( P_TryWalk(actor) )
return;
}
}
}
else
{
for ( tdir=DI_SOUTHEAST;
tdir != (DI_EAST-1);
tdir-- )
{
if (tdir!=turnaround)
{
actor->movedir =tdir;
if ( P_TryWalk(actor) )
return;
}
}
}
Таким образом, P_Random()&1 выбирает направление передвижения обхода наиболее вероятных направлений против часовой и по часовой стрелке соответственно, но начинает-то с восточного и юго-восточного направления! Поэтому они всегда будут наиболее вероятными, если не направленны в сторону, противоположную предыдущему перемещению.
К слову, что-то в блоке code сильно странное. Он съедает скобки и некоторые символы.
nor can pain elementals, as the lost souls launched by a pain elemental are targeted instead
А вот эти самые лостсоулы могут атаковать пейна запросто. Не знаю как в оригинале, в ZDoom однозначно видел.
Зы, почему лостсоулы ОЧЕНЬ часто атакуют друг друга?
Скорее всего потому, что их относительно большое количество ищут цель (игрока) в сравнительно небольшом объеме пространства, а так как лостсоулы двигаются в атаке быстро и по прямолинейной траектории, то часто натыкаются друг на друга.
siealex : почему лостсоулы ОЧЕНЬ часто атакуют друг друга?
Скорее всего потому, что их относительно большое количество ищут цель (игрока) в сравнительно небольшом объеме пространства, а так как лостсоулы двигаются в атаке быстро и по прямолинейной траектории, то часто натыкаются друг на друга.
Еще по одной причине.
После взрыва пэйна образующаяся тройка соулов часто бывает ограничена узким объемом, из-за чего грызня между соулами начинается еще ДО ТОГО, как они УВИДЯТ ИГРОКА.
То есть они сталкиваются между собой уже во время взрыва. Не замечали разве?
Я обычно при убийстве пэйна в последний момент прячусь за угол, чтобы "осколками не зацепило", и часто слышу, как там уже грызутся