Build 749/Искусственный интеллект

*"XRAY Engine" demo build 749* предназначался для тестирования различных аспектов движка, в том числе и отладки искусственного интеллекта. Было создано три типа поведения ИИ с разной логикой и моделями: **alien**, **mover** и **jumper**.

## Описание

Все 3 монстра не являются NPC как таковыми — это внешнее представление первого вида ИИ, написанного Олесем Шишковцовым для движка *X-Ray*. Модели для них создавались для более наглядного отображения поведения ИИ и наблюдения за ним, на что также косвенно указывает качество моделей *mover* и *jumper*.

* **alien** — отдаленно похожая на мифического Кецалькоатля змееподобная модель, имеющая иерархическую структуру, разделённую по признаку материалов.
* **mover** — сферическая однородная модель с приведёнными и вытянутыми вершинами, образующими шип.
* **jumper** — уменьшенный и сдавленный по высоте вариант модели *mover*.

## Способности и поведение

Все три модели отражали различные варианты поведения, но не были привязаны к ним (им может быть подставлена почти любая ogf-модель и написан свой отдельный ИИ с совсем другим поведением):

* **Alien** — самые первые тесты поведения проверялись на модели *alien*, которая осталась в достаточно проработанном виде, но в сборке не используется. Модель поведения строила сплайновый путь на основе данных из игровой коллизии геометрии сцены и просто перемещалась по уровню. Сам программный объект монстра был написан во внешней динамической библиотеке *object\_alien.dll* (в составе сборки отсутствует). В течение месяца (конец января — февраль 2001) модель поведения и просчёты улучшались, что позже легло в основу двух последующих моделей поведения.
* **Mover** — движется по прямой, в спокойном состоянии крутится из стороны в сторону. Из-за постоянного ускорения может достигать очень большой скорости и бесконечно преследовать игрока без потери его из вида на любой дистанции.
* **Jumper** — передвигается прыжками с задержкой примерно в 2 секунды, атака происходит во время прыжка (при попадании в стену может от неё отскочить; сила и расстояние отскока могут быть разными). В спокойном состоянии крутится из стороны в сторону, суммарно примерно на 270 градусов (иногда происходит баг, когда при атаке в прыжке он продолжает крутиться).

## Отношение к игроку

Целью монстров Mover и Jumper является обнаружение игрока, построение к нему пути и достижение конечной точки. Поэтому они всегда движутся в его сторону и своими моделями «налезают» на коллизию модели игрока, из-за чего происходят повреждения с последующей потерей управления.

## История создания

### Программирование

В конце января 2001 года Олесь Шишковцов начал писать первый исходный код, связанный с работой искусственного интеллекта. Для тестов использовалась модель *alien.ogf*, которая должна была, исходя из наличия окклюзии, просто передвигаться по уровню. Были созданы функции, отвечающие за зрение и передвижение монстра. В последующие дни происходили работы над написанием кода, связанным с искусственным интеллектом, но позже было решено реализовывать поведение на встроенном в *X-Ray* скриптовом языке программирования *C-Scripting Engine*, а основа работы ИИ оставалась в движке.

### Конфиги

В начале 2001 года в файле *system.ltx* была создана секция `[m_alien]`, в которой были прописаны переменные `eye_fov` и `eye_distance` с определёнными значениями.

### Скрипты

Начиная с февраля, были созданы скрипты *iq\_alien.c* и *iq\_jumper.c*, которые также были скомпилированы в бинарный вид для чтения движком. В апреле на уровне L1 day были продолжены тесты поведения монстров и скрипты менялись: в последний раз *iq\_jumper.c* правился 17 апреля, а *iq\_alien.c* — 24-го.

## Галерея

* *alien* (с использованием ИИ *mover*)
* *mover* и *jumper*, использующие только ИИ *mover*
* *jumper*, использующие только ИИ *mover*
* *jumper*, с использованием модели игрока
* *mover* за счёт постоянного ускорения может бесконечно подниматься вверх и преследовать игрока

## Примечания

Комментарии
1. ^ Mover.
2. ^ Jumper.
3. ^ Парсинг и компиляция происходят во время запуска игры.
4. ^ *iq\_alien.cs* и *iq\_jumper.cs* соответственно.
5. ^ Стандартная модель *mover* заменена моделью *alien*.
6. ^ Стандартная модель *mover* заменена моделью игрока.

Источники
1. \\game\XR\_3DA.exe\.data
2. \\game\data\meshes\alien.ogf *(ревизия 23.01.2001)*
3. \\game\data\meshes\alien1.ogf *(ревизия 10.04.2001)*
4. \\game\data\meshes\alien2.ogf *(ревизия 11.04.2001)*
5. \\game\data\scripts\iq\_jumper.c *(ревизия 17.04.2001)*
6. \\game\data\scripts\iq\_alien.c *(ревизия 18.04.2001)*
7. \\game\data\scripts\iq\_jumper.c *(ревизия 18.04.2001)*
8. \\game\data\scripts\iq\_alien.c *(ревизия 24.04.2001)*