Компилятор работает в командной строке и более сложен в освоении. Предназначен для 1.0004/1.0005. [Назначение файлов и каталогов] 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 gamedata\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 Сборка all.spawn > aiwrapper -s На выходе: gamedata\spawns\all.spawn 9) Добавление level_changer'а на новую карту с помощью acdc.pl. Здесь не рассматривается. 10) Регистрация уровня в gamedata\config\game_maps_single.ltx. Здесь не рассматривается. [Нюансы] - Не нужно пересобирать сетку ИИ и особенно ИИ-граф для оригинальных уровней от GSC. - Похоже, xrAI от 2215 немного иначе считает длины рёбер ИИ-графов, в том числе межуровневые в глобальном графе. Это может повлиять на скорость перемещения новых ботов между картами. |