|
| Форум сталкер S.T.A.L.K.E.R.: Школа моддинга Работа с SDK, Скрипты, конфиги, движок Компиляция AI в S.T.A.L.K.E.R. — создание ИИ-сетки (Создание ИИ-сетки и переходов между локациями) |
| Компиляция AI в S.T.A.L.K.E.R. — создание ИИ-сетки |
|
Компиляция AI в S.T.A.L.K.E.R. — создание ИИ-сетки и переходов между локациями
ВНИМАНИЕ! Данная статья в значительной степени устарела. Информация предназначена для ознакомления с принципами компиляции AI, настройки графов и подключения пользовательских уровней в S.T.A.L.K.E.R. КАТЕГОРИЧЕСКИ ПРЕДУПРЕЖДАЕМ! Использование устаревших и содержащих ошибки утилит AiCompiler и AiWrapper строго не рекомендуется автором исходного руководства. Рекомендация: используйте официальный xrAI для SDK 0.4 от разработчиков игры. За дополнительной информацией обращайтесь к материалам AMK Forum. Содержание 1. Основы компиляции AI 2. Создание ИИ-сетки 3. Настройка конфигурационных файлов 4. Компиляция нескольких уровней 5. Добавление собственного уровня в одиночную игру 6. Настройка переходов через ACDC 7. Отображение перехода на карте 8. Список необходимых программ 1. Основы компиляции AI Итак, приступим! Если вы открыли это руководство, значит, у вас есть причина разобраться с компиляцией AI: вы начинающий моддер, хотите освежить старые знания или уже работаете с собственными уровнями и хотите расширить свои возможности. Для начала скомпилируем уровень с AI и монстрами на карте mp_atp. Шаг 1. Подготовка уровня Открываем уровень в редакторе. Первым делом удаляем все rpoint — мультиплеерные точки появления игроков. Шаг 2. Добавление актёра Создаём объект Spawn elements → actor. При необходимости в свойствах объекта, в поле Custom Data, прописываем стартовое оружие: Код [spawn] wpn_ak74 Теперь при появлении игрок будет вооружён АК-74. Шаг 3. Добавление монстра Добавляем на уровень любого монстра, например кровососа, и размещаем его в нужной точке карты. Шаг 4. Создание AI Map ИИ-сетка необходима для того, чтобы NPC и монстры могли ориентироваться на уровне. 1. Нажимаем Object и выбираем поверхность земли. 2. Переходим в AI Map → Commands → Make list from selected. 3. В разделе AI Map Nodes нажимаем Add. 4. Добавляем узлы с помощью кнопки в левом верхнем углу редактора. 5. Расставляем ноды в нужном порядке. 6. Нажимаем Generate Full. После этого AI-сетка будет сгенерирована. Шаг 5. Добавление Graph Point На уровне обязательно должен присутствовать хотя бы один Graph Point: Spawns → AI → Graph Point В простом примере имя можно не указывать, если оно не требуется для дальнейшей настройки. Сохраняем уровень и выполняем Build. После этого необходимо скомпилировать карту. В исходном руководстве для этого используется отдельная утилита и предварительно созданный диск X:. 2. Настройка конфигурационных файлов После компиляции необходимо настроить конфиги. В исходном руководстве они находятся в папке gamedata\configs SDK. После настройки необходимые файлы переносятся в соответствующую папку игры. Файл game_maps_single.ltx Добавляем название уровня в секцию [level_maps_single]: Код [level_maps_single] testing_ai [testing_ai] global_rect = -6,1220.0,248.0,1481.0 texture = map\map_escape bound_rect = -502.148,-412.284,379.976,474.479 weathers = default Здесь testing_ai — название пользовательского уровня, texture — текстура карты загрузки, а weathers — используемая погода. Файл game_levels.ltx Добавляем уровень и назначаем ему уникальный идентификатор: Код [levels] level190 [level190] name = testing_ai caption = "testing_ai" offset = 2000.0,800.0,1000.0 id = 190 Параметр offset определяет положение уровня на глобальной карте. Значение id должно быть уникальным. Файл game_graphs.ltx Добавляем запись уровня: Код 018 = "testing_ai" Номер необходимо согласовать с используемой конфигурацией игры. Компиляция уровня В исходном руководстве используется AI Compiler. Необходимо указать папку SDK или Level Editor и выбрать подготовленный уровень. Далее выполняются этапы компиляции: 1. Предварительный расчёт AI-сетки. 2. При необходимости — расчёт укрытий NPC. 3. Построение графа и кросс-таблицы уровня. 4. Построение игрового графа. 5. Создание файла спавна. После завершения компиляции в папке gamedata\spawns файл test.spawn в примере переименовывается в all.spawn. Важно! Если SDK не объединён с игрой, необходимо перенести следующие файлы: Код gamedata\config\game_maps_single.ltx Код gamedata\config\game_graphs.ltx Код gamedata\config\game_levels.ltx Код gamedata\levels\папка_вашего_уровня Код gamedata\spawns\all.spawn Код gamedata\game.graph Отсутствие game.graph может приводить к вылету при запуске игры. Также проверьте, что в конфигурации указаны существующая погода и корректная текстура загрузки. Пример BAT-файла из исходного руководства Код @start bin\XR_3DA.exe -start server(%1/single/alife) client(localhost) При использовании такого способа запуска имя файла спавна должно соответствовать имени уровня. Проверьте совместимость команды с используемой версией движка. 3. Компиляция нескольких уровней и настройка переходов Теперь рассмотрим создание переходов между двумя уровнями: atp_1 и atp_2. Настройка первого уровня — atp_1 Создаём объект AI → Level Changer, затем добавляем Shape → Sphere и увеличиваем сферу с помощью Scale до необходимого размера. Переключаемся в режим редактирования Spawn Elements, выделяем Level Changer и выбираем Commands → Attach Object. После этого привязываем к нему сферу. В свойствах Level Changer указываем название, например to_atp_2. В поле Custom Data прописываем путь возврата на случай отказа игрока от перехода: Код [pt_move_if_reject] path = atp_1_way_if_reject В поле Level to change указываем atp_2. В поле Level Point to change задаём точку появления игрока на втором уровне — start_actor_01. Параметр Restrictor Type зависит от версии движка. Старые рекомендации по его настройке необходимо проверять на используемой версии игры. Создание Graph Point Создаём Graph Point с именем: Код start_actor_01 Затем создаём точку связи между уровнями: Код Name: exit_atp_1_01 Location: "экскейп" Connection: Level name: atp_2 Point name: exit_atp_2_01 Точка exit_atp_1_01 связывает первый уровень со вторым. Создание Way Points Создаём путь из двух Way Point рядом с Level Changer. 1. Открываем Way Points. 2. Добавляем первую точку. 3. Включаем Point Mode и создаём вторую точку. 4. Если точки не связались автоматически, используем Create 1-link. 5. В свойствах пути указываем имя atp_1_way_if_reject. Имя пути должно совпадать с указанным в Custom Data объекта Level Changer. Настройка второго уровня — atp_2 Повторяем создание пути и называем его atp_2_way_if_reject. Создаём Level Changer с именем to_atp_1 и прописываем: Код [pt_move_if_reject] path = atp_2_way_if_reject В Level to change указываем atp_1, а в Level Point to change — start_actor_01. Создаём Graph Point start_actor_01, затем точку связи: Код Name: exit_atp_2_01 Location: "свалка" Connection: Level name: atp_1 Point name: exit_atp_1_01 Важно! Согласно исходному руководству, ACTOR должен находиться только на одной локации во время подготовки и компиляции. В противном случае компилятор может выдать ошибку. Компиляция двух уровней Сохраняем и предварительно компилируем оба уровня. В примере используются следующие команды: Код @start /wait bins\ai\1.exe -g atp_1 Код @start /wait bins\ai\1.exe -g atp_2 После построения графов создаём общий игровой граф: Код @start /wait bins\ai\1.exe -m Затем собираем all.spawn: Код bins\ai\1.exe -s Полученный файл помещаем в gamedata\spawns\ и при необходимости переименовываем в all.spawn. Перед компиляцией рекомендуется временно переместить остальные уровни из папки levels, включая мультиплеерные, чтобы избежать ошибок при построении графов. 4. Добавление пользовательского уровня в одиночную игру Теперь рассмотрим подключение собственного уровня к оригинальным локациям игры. В примере используется пользовательский уровень test_level_x и оригинальная локация L01_Escape. Подготовка Graph Point На пользовательском уровне создаём точку связи: Код Name: point_test_location_escape Connection: Level Name: L01_Escape Point Name: esc_graph_point_0034 Затем создаём точку появления игрока: Код Name: start_actor_01 В исходном руководстве рекомендуется не размещать ACTOR на пользовательском уровне на этом этапе. Добавляем на карту уникальный объект, например машину. Его параметры понадобятся для последующей настройки перехода. Сохраняем уровень, выполняем предварительную компиляцию и необходимые этапы построения AI-графа. Получение параметров уровня Для дальнейшей настройки понадобятся: - level_vertex_id; - game_vertex_id; - position — координаты объекта; - direction — направление взгляда игрока. В исходной статье для получения этих значений используется скрипт Info_LVID_GVID от bardak. Полученные параметры необходимо записать и использовать при настройке level changer. Подготовка графов оригинальных уровней После распаковки игры и подготовки инструментов выполняем команду: Код aiwrapper -extract_spawns В исходном руководстве она используется для обновления файлов спавна оригинальных уровней. Затем создаём список графов: Код aiwrapper -dump_graph graphs.txt В файле graphs.txt находим esc_graph_point_0034 и проверяем, можно ли использовать эту точку для подключения пользовательского уровня. Создаём текстовый файл links_fixed.txt со следующим содержимым: Код [l01_escape] ; Добавляем переход с Кордона на тестовый уровень esc_graph_point_0034 = test_level_x, point_test_location_escape test_level_x — название пользовательского уровня, а point_test_location_escape — имя точки связи на нём. Выполняем команду: Код aiwrapper -m2 links_fixed.txt Она используется в исходном руководстве для построения глобального игрового графа с учётом дополнительных связей. Проверка game_vertex_id Для проверки межуровневых связей в исходной статье предлагается использовать утилиту ggtool.pl. Код ggtool.pl game.graph >svyazi.txt В файле svyazi.txt можно увидеть связи между уровнями и значения game_vertex_id. Пример: Код l01_escape (0) --1206.29--> l02_garbage (415) Здесь 0 и 415 — идентификаторы игровых вершин, а 1206.29 — расстояние между точками связи. 5. Настройка level changer через ACDC После построения игрового графа создаём all.spawn: Код aiwrapper -s Полученный файл копируем в папку utils инструмента ACDC и разбираем его на LTX-файлы: Код acdc.pl -d all.spawn Нас интересует файл alife_l01_escape.ltx. В него добавляем новую секцию level_changer. Пример ниже демонстрирует структуру объекта из исходного руководства. Значения необходимо заменить на параметры своей карты. Код [не_занятый_номер] section_name = level_changer name = exit_to_new_location_from_esc position = direction = 0,0,0 game_vertex_id = distance = 14.6999998092651 level_vertex_id = -1 object_flags = 0xffffff3e custom_data = <<END [pt_move_if_reject] path = esc_way_test_if_reject END story_id = shapes = shape0 shape0:type = box shape0:axis_x = 5.8284006118774,0,0 shape0:axis_y = 0,5.0005970001221,0 shape0:axis_z = 0,0,5.3902206420898 shape0:offset = 0,0,0 restrictor_type = 3 dest_game_vertex_id = dest_level_vertex_id = dest_position = dest_direction = 0,-1.12671363353729,0 dest_level_name = test_level_x dest_graph_point = start_actor_01 Основные параметры - position — координаты перехода на исходном уровне. - direction — направление объекта. - game_vertex_id — идентификатор игровой вершины исходного уровня. - level_vertex_id — идентификатор вершины ИИ-графа. - story_id — уникальный идентификатор объекта. - dest_game_vertex_id — игровая вершина целевого уровня. - dest_level_vertex_id — вершина ИИ-графа целевого уровня. - dest_position — координаты появления игрока. - dest_level_name — название целевого уровня. - dest_graph_point — имя точки появления игрока. Все параметры необходимо сверить с данными скомпилированных уровней. Неправильные идентификаторы могут привести к ошибкам и вылетам. Создание Way Points в LTX Открываем way_l01_escape.ltx и добавляем путь, имя которого указано в Custom Data. Код [esc_way_test_if_reject] points = p0,p1 p0:name = name_test1 p0:position = -243.491257,-19.758562,-140.328583 p0:game_vertex_id = 8 p0:level_vertex_id = -1 p0:links = p1(1) p1:name = name_test2 p1:position = -255.491257,-19.758562,-140.328583 p1:game_vertex_id = 9 p1:level_vertex_id = -1 Координаты в этом примере приведены только для демонстрации структуры. Для своей карты используйте реальные координаты. Финальная сборка После внесения изменений выполняем: Код acdc.pl -c all.ltx Полученный файл all.spawn.new копируем в gamedata\spawns\ и переименовываем в all.spawn. После этого запускаем новую игру и проверяем работу перехода. 6. Отображение перехода на карте Если необходимо, чтобы переход отображался на карте игрока, исходное руководство предлагает внести изменения в level_tasks.script, в функцию add_lchanger_location(). Пример: Код -- test_level_x local obj = sim:story_object(8435) if obj then level.map_add_object_spot(obj.id, "level_changer", "exit_to_new_location_from_esc") end В примере используются story_id 8435 и имя перехода exit_to_new_location_from_esc. Они должны совпадать с параметрами вашего level changer. В исходной статье рекомендуется использовать уникальный story_id, не занятый другими объектами. 7. Список необходимых программ - AiCompiler 0.1 от Neo. - AiWrapper от bardak. - Info_LVID_GVID — скрипт от bardak. - SDK 0.4 от GSC. - SDK Update от Neo и GSC. - Fixed Shaders от Haron. - Патч для SDK 0.3 от Haron. Заключение Компиляция AI в S.T.A.L.K.E.R. включает подготовку ИИ-сетки, создание графов уровня, настройку межуровневых связей и сборку файлов спавна. Для подключения собственной локации к оригинальной игре необходимо правильно настроить Graph Point, параметры level changer, координаты и точки появления игрока. Важно: руководство основано на старых инструментах и примерах. Перед использованием проверяйте совместимость со своей версией SDK и движка. Перед изменением игровых файлов обязательно создавайте резервные копии.
|
| |||
| |||