Независимо друг от друга, Neo][ и bardak, выпустили компиляторы AI для финальной версии игры. Это был последний компонент, которого в MP-SDK не хватало для создания синглплеерных карт. Теперь это стало возможным. _________________________________
Компилятор от Neo][
Вот так выглядит UI:
Теперь по работе с ним. Распаковываем архив, папку ai кидаем в {папка SDK}\bins, остальные компоненты (собственно UI) в любое удобное место.
Запускаем UI, указываем путь до папки с SDK. Далее выбираем карту, на которой будем ставить опыты, и последовательно проходим все шаги компиляции.
Теперь же немного точнее о шагах. После 2-го шага, а именно финальной компиляции сетки, нам необходимо "показать" уровень движку, для этого в файле gamedata\config\game_levels.ltx:
- добавить свой уровень в секцию "levels"
- создать секцию с добавленным названием и заполнить её соответствующими значениями
- присвоить уникальный идентификационный номер
Далее прописаться в gamedata\config\game_graphs.ltx и gamedata\config\game_maps_single.ltx.
Дополнительно: если версия игры выше 1.0000, надо переименовать получившийся test_ai_1.spawn в all.spawn.
Ссылки:
Тестовая карта
Компилятор
Обсуждение, вопросы
_________________________________
Компилятор от bardak
Предназначен для 1.0004/1.0005.
Внимательно прочитать readme.txt перед использованием.
Необходимые программы
- распакованный S.T.A.L.K.E.R. версии 1.0005
- X-Ray MP SDK
- ActivePerl 5.8.8
Назначение файлов и каталогов
aiwrapper.exe - оболочка-сборщик
fsaiwrapper.ltx - файл спецификации путей для aiwrapper
utils\acdc.pl - утилита для редактирования all.spawn
utils\ggtool.pl - утилита для показа межуровневых связей в game.graph
utils\stkutils\ - библиотеки для acdc.pl/ggtool.pl
2215\ - теневое дерево, которое использует xrAI от сборки
2215 (все обновления в нём производятся утилитой
aiwrapper автоматически)
links.sample - пример задания новых и удаления старых рёбер ИИ-графа
Установка
По умолчанию предполагается, что данный архив распакован в c:\temp\aiwrapper_07jan2007\, файлы игры находятся в в c:\program files\gsc world publishing\s.t.a.l.k.e.r\, а MP SDK установлен в c:\program files\x-ray sdk\.
Но вообще игра может быть совмещена с SDK.
Каталог с распакованной игрой должен содержать такие файлы:
gamedata\config\*
gamedata\game.graph
gamedata\spawns\all.spawn
gamedata\levels\*\level.ai
gamedata\levels\*\level.game
gamed ata\levels\*\level.gct
gamedata\levels\*\level.graph
gamedata\levels\*\level.spawn
После этого один раз выполнить:
> aiwrapper -extract_spawns
Эта команда разобьёт all.spawn на оригинальные level.spawn. Обновления
игры не затрагивали данные файлы и поэтому необходимо их освежить.
В случае установки в другое место необходимо модифицировать
следующие файлы:
fsaiwrapper.ltx - задать правильные абсолютные пути для $2215_fs_root$ и $debug_root$
2215\fsgame.ltx - задать правильные абсолютные пути для $sdk_root$
utils\acdc.pl - задать правильный путь либо скопировать stkutils в каталог библиотек Perl.
utils\ggtool.pl - аналогично.
Параметры командной строки aiwrapper
Унаследованные от xrAI параметры:
-h or -? - вывести короткую справку (на английском)
-verify <имя_карты> - проверить связность сетки ИИ для карты в gamedata\levels\<имя_карты>\
-f <имя_карты> - собрать сетку ИИ для карты в gamedata\levels\<имя_карты>\
-draft - черновая сборка сетки ИИ (без просчёта укрытий)
-g <имя_карты> - построить ИИ-граф и таблицу соответствия с сеткой ИИ для карты в gamedata\levels\<имя_карты>\
-m - склеить ИИ-графы карт в глобальный игровой граф
-s - сборка all.spawn
Собственные параметры
-fs <файл> - использовать указанный файл для задания путей (по умолчанию берётся fsaiwrapper.ltx)
-force - обновить теневое дерево независимо от временных меток
-m2 <файл> - склеить ИИ-графы карт в глобальный игровой граф с учётом поправок для связей из указанного файла
-extract_spawns- разбить all.spawn на оригинальные level.spawn
-extract_ways - разбить all.spawn на оригинальные level.game (не реализована на данный момент)
-dump_graph <файл> - вывести список исходных вершин ИИ-графа в указанный файл
Введение в ИИ-граф
Новый уровень должен содержать хотя бы один graph_point и иметь
переход(ы) на другие карты. Существует два типа переходов. Первые
используются только игроком, могут добавляться в LE, с помощью acdc.pl
или даже на лету и далее здесь не обсуждаются. Вторые нужны для
перемещения ИИ-объектов. ИИ-переходы для карт с доступными исходниками
задаются в LE, но для создания обратных связей с оригинальных карт от
GSC нужно собирать game.graph командой:
> aiwrapper -m2 <файл_с_описанием_доп_связей>
Список целевых вершин для ИИ-переходов можно получить с помощью:
> aiwrapper -dump_graph <имя_файла>
Посмотреть получившиеся после склейки ИИ-графов связи можно так:
> utils\ggtool.pl game.graph
Обычно одной вершины ИИ-графа (graph_point) совершенно недостаточно.
Оценить необходимую плотность можно такой функцией на LUA:
function show_game_graph()
local gg = game_graph()
for gvid=0,2791 do
if gg:valid_vertex_id(gvid) then
local vertex = gg:vertex(gvid)
local level_name = alife():level_name(vertex:level_id())
local lvid = vertex:level_vertex_id()
local pos = vertex:level_point()
local obj = alife():create("medkit", pos, lvid, gvid)
level.map_add_object_spot_ser(obj.id, "alife_presentation_monstr", level_name..":"..gvid)
end
end
end
Сборка ИИ-компонентов карты
1) Добавление уровня в список в gamedata\config\game_levels.ltx
2) LevelEditor -> Compile -> Make Game, там же Make AI-Map и Build.
3) Сборка черновой сетки ИИ:
> aiwrapper -draft -f <имя_уровня>
На выходе: gamedata\levels\<имя_уровня>\level.ai.
4) Проверка связности сетки ИИ:
> aiwrapper -verify <имя_уровня>
В случае ошибки поправить ячейки в LE и повторить с п.2.
5) Просчёт укрытий для сетки ИИ. Предварительно необходимо произвести
сборку геометрии для получения build.cform (xrLC, здесь это не
рассматривается). Команда:
> aiwrapper -f <имя_уровня>
Вообще, этот шаг необязателен на ранних этапах тестирования карты.
6) Сборка ИИ-графа:
> aiwrapper -g <имя_уровня>
На выходе: gamedata\levels\<имя_уровня>\level.{graph|gct.raw}
7) Склейка ИИ-графов карт в глобальный игровой граф:
> aiwrapper -m
На практике чаще придётся использовать особый вариант (см. выше):
> aiwrapper -m2 <файл_с_описанием_доп_связей>
Пример такого файла имеется в архиве (links_sample.ltx).
На выходе: gamedata\game.graph и gamedata\levels\*\level.gct
8) Сборка all.spawn
> aiwrapper -s
На выходе: gamedata\spawns\all.spawn
9) Добавление level_changer'а на новую карту с помощью acdc.pl.
Здесь не рассматривается.
10) Регистрация уровня в gamedata\config\game_maps_single.ltx.
Здесь не рассматривается.
Нюансы
- Не нужно пересобирать сетку ИИ и особенно ИИ-граф для оригинальных
уровней от GSC.
- Похоже, xrAI от 2215 немного иначе считает длины рёбер ИИ-графов,
в том числе межуровневые в глобальном графе. Это может повлиять на
скорость перемещения новых ботов между картами.
Ссылки:
Тестовая карта (выпущенная несколько ранее)
Компилятор
_________________________________
Надеюсь, вас это заинтересует.
Даже если вы не заинтересованы в разработке SP-карт, эти инструменты делают возможным внесения в MP разнообразия и новых игровых режимов, например, обороны от нападающих волн мутантов.