|
| Форум сталкер S.T.A.L.K.E.R.: Школа моддинга Работа с SDK, Скрипты, конфиги, движок Подключение новых локаций к моду S.T.A.L.K.E.R. (Объединение графа и спавна) |
| Подключение новых локаций к моду S.T.A.L.K.E.R. |
|
Подключение новых локаций к моду S.T.A.L.K.E.R. — объединение графа и спавна
Руководство по SDK и подключению пользовательских локаций В этом руководстве рассмотрим, как подключить новую локацию к существующему моду S.T.A.L.K.E.R., объединить игровые графы, подготовить общий файл спавна и собрать пакет обновления. Материал предназначен для моддеров, которые уже умеют компилировать собственные уровни и хотят добавить их в готовую сборку, сохранив существующие локации, переходы и игровые объекты. Содержание 1. Предварительная настройка конфигов 2. Компиляция локации 3. Объединение игрового графа и спавна 4. Сборка общего пакета обновления 5. Замена геометрии без изменения сетки 1. Предварительная настройка конфигов Самое главное — правильно настроить конфигурационные файлы ещё на этапе подготовки локации в редакторе. Файл game_graphs.ltx В конец секции [location_0] добавляем новую локацию по аналогии с уже существующими записями. Пример из исходного руководства: Код [location_0] 000 = "..." 001 = "эскейп" 002 = "свалка" 003 = "агропром" 004 = "агропром-подземка" 005 = "темная долина" 006 = "лаборатория X-18" 008 = "Бар" 009 = "Росток" 010 = "Янтарь" 011 = "лаборатория X-16" 012 = "Милитари" 013 = "Мертвый город" 014 = "Радар" 015 = "Радар бункер" 016 = "Припять" 017 = "станция АЭС" 018 = "ЧАЭС-2" 019 = "бункер выжигателя" 021 = "даркскейп" Важно! Новой локации необходимо назначить новый ID, чтобы она не вклинилась в существующую последовательность игрового графа. В примере используется ID 21. Запомните этот номер: он должен согласовываться с остальными конфигурационными файлами. Файл game_levels.ltx В конец секции [levels] добавляем новый уровень, а затем создаём соответствующую подсекцию. Пример: Код [level21] name = k01_darkscape_ogse caption = "k01_darkscape_ogse" offset = 3000.0,1000.0,0.0 id = 21 Здесь: - name — внутреннее имя локации, соответствующее имени её папки. - caption — имя, отображаемое на карте. - offset — смещение на глобальной карте. - id — идентификатор локации. В примере используется level21 и ID 21. Согласно исходному руководству, новая локация должна иметь самый большой ID, иначе существующая структура игрового графа может нарушиться. Файл game_maps_single.ltx В конец секции [level_maps_single] добавляем имя новой локации: Код [level_maps_single] k01_darkscape_ogse Затем создаём секцию с настройками карты: Код [k01_darkscape_ogse] texture = map\map_darkscape bound_rect = -702.00,-704.090,708.500,716.7780 global_rect = 701.0,2072.0,1020.0,2393.0 weathers = default ; music_tracks = l04_darkvalley_musics Параметры определяют текстуру карты, границы локации, её отображение на карте КПК и используемую погоду. В исходном руководстве значения global_rect описаны следующим образом: - Первое значение — ширина текстуры; увеличение сдвигает левый край относительно неподвижного правого. - Второе значение — длина текстуры; увеличение сдвигает верхний край относительно неподвижного нижнего. - Третье значение — ширина текстуры; увеличение сдвигает правый край относительно неподвижного левого. - Четвёртое значение — длина текстуры; увеличение сдвигает нижний край относительно неподвижного верхнего. 2. Компиляция локации Если геометрия уже компилировалась ранее, можно выполнить сборку в режиме Draft, а затем пересчитать только сетку и перенести файлы *.ai и *.gct в папку готовой локации. Перед компиляцией необходимо проверить несколько моментов. Подготовка уровня - На новой локации не должно быть точки спавна ACTOR. В исходном руководстве указывается, что такая точка должна быть только одна на всю игру. - Локация должна быть равномерно покрыта Graph Point. - Желательно заранее создать Graph Point для переходов, чтобы не пришлось позже использовать для этого свободные точки. После проверки запускаем необходимые BAT-файлы xrAI и последовательно выполняем построение сетки, level graph, game graph и all.spawn. 3. Объединение игрового графа и спавна Для объединения новой локации с существующим модом понадобятся следующие файлы и инструменты: Необходимые файлы: - Старый game.graph мода. - Game.graph, полученный при компиляции новой локации. - Старый all.spawn мода. - All.spawn, полученный при компиляции новой локации. - Файлы level.ai и level.gct всех локаций, уже присутствующих в моде. - Полностью подготовленная папка новой локации. Необходимые утилиты: - ACDC. - gg_cdc_x. - game.graph_recompiler. Шаг 1. Проверяем положение новой локации в графе Копируем game.graph, сформированный при компиляции новой локации, в папку с ACDC и выполняем: Код ggtool.pl game.graph Утилита выведет информацию о переходах и игровых вершинах локаций. В исходном руководстве приводится следующий пример: Код l01_escape => 0 l02_garbage => 252 l03_agroprom => 416 l03u_agr_underground => 703 l04_darkvalley => 811 l04u_labx18 => 1109 l05_bar => 1168 l06_rostok => 1308 l08_yantar => 1438 l08u_brainlab => 1529 l07_military => 1545 l10_radar => 1862 l11_pripyat => 2117 l12_stancia => 2273 l12u_sarcofag => 2402 l12u_control_monolith => 2467 l12_stancia_2 => 2517 l10u_bunker => 2661 k01_darkscape_ogse => 2792 Критически важный момент! Новая локация должна находиться в самом конце списка, после неё не должно быть других локаций. В данном примере стартовый game vertex новой локации равен 2792. Запишите это значение: оно понадобится при дальнейшей настройке графа. Если новая локация оказалась в середине списка, необходимо вернуться к настройке конфигов и проверить её ID. В противном случае могут измениться существующие игровые графы и спавн. Шаг 2. Настраиваем ACDC Открываем acdc.pl и находим структуру levels_info по тексту constant levels_inf. Проверяем границы игровых графов, удаляем ненужные записи и добавляем новую локацию в начало списка. Пример: Код use constant levels_info => ( { gvid0 => 3700, }, { gvid0 => 2792, name => 'k01_darkscape_ogse' }, { gvid0 => 2661, name => 'l10u_bunker' }, { gvid0 => 2517, name => 'l12_stancia_2' }, { gvid0 => 2467, name => 'l12u_control_monolith' }, { gvid0 => 2402, name => 'l12u_sarcofag' }, { gvid0 => 2273, name => 'l12_stancia' }, { gvid0 => 2117, name => 'l11_pripyat' }, { gvid0 => 1862, name => 'l10_radar' }, { gvid0 => 1545, name => 'l07_military' }, { gvid0 => 1529, name => 'l08u_brainlab' }, { gvid0 => 1438, name => 'l08_yantar' }, { gvid0 => 1308, name => 'l06_rostok' }, { gvid0 => 1168, name => 'l05_bar' }, { gvid0 => 1109, name => 'l04u_labx18' }, { gvid0 => 811, name => 'l04_darkvalley' }, { gvid0 => 703, name => 'l03u_agr_underground' }, { gvid0 => 416, name => 'l03_agroprom' }, { gvid0 => 252, name => 'l02_garbage' }, { gvid0 => 0, name => 'l01_escape' }, ); Сохраняем изменения в acdc.pl. Этот файл понадобится при объединении спавна. Шаг 3. Объединяем игровые графы Подготавливаем папку game.graph_recompiler. В папке levels создаём каталоги всех локаций, которые уже присутствуют в моде, и копируем туда их файлы level.ai и level.gct. Также помещаем туда папку новой локации целиком. В корень инструмента копируем старый game.graph мода, а новый граф переименовываем в game2.graph. Теперь необходимо настроить BAT-файл, указав, какие локации брать из первого и второго графа. Пример из исходного руководства: Код ggrc.pl -g1 game.graph,soc -l1 l01_escape,l02_garbage,l03_agroprom,l03u_agr_underground,l04_darkvalley,l04u_labx18,l05_bar,l06_rostok,l08_yantar,l08u_brainlab,l07_military,l10_radar,l11_pripyat,l12_stancia,l12u_sarcofag,l12u_control_monolith,l12_stancia_2,l10u_bunker -g2 game2.graph,soc -l2 k01_darkscape_ogse pause Запускаем BAT-файл и дожидаемся завершения обработки. Если всё прошло успешно, появится файл game.graph.new — объединённый игровой граф. Проверяем результат Распаковываем полученный граф с помощью gg_cdc_x и проверяем файлы: - game.graph.info.cross_edges.ltx — должны сохраниться все существующие переходы. - game.graph.levels.ltx — новая локация должна находиться в конце и иметь самый большой level_id. - game.graph.levels_info.ltx — новая локация должна быть последней, здесь также можно проверить минимальный и максимальный game vertex. Минимальная вершина новой локации должна совпадать с той, которую получили при проверке графа до объединения. В приведённом примере это 2792. Не пропускайте проверку! После объединения могут измениться идентификаторы локаций. Сравните значения в game.graph.levels.ltx с идентификаторами из game_graphs.ltx и game_levels.ltx. Если они отличаются, необходимо скорректировать конфиги в соответствии с итоговым игровым графом. Шаг 4. Настраиваем переходы между локациями Желательно создавать crosslevel edge ещё при подготовке новой локации. После объединения графа необходимо проверить и при необходимости восстановить связи между новой локацией и существующими уровнями. Общий порядок действий: 1. Распаковываем game.graph, полученный при компиляции новой локации. 2. Находим файл game.graph.edges с идентификатором новой локации. 3. Ищем созданные переходы, помеченные как crosslevel edge. Их можно определить по параметру target_level_id. 4. Копируем записи переходов в отдельный файл. 5. Открываем конфигурацию новой локации в объединённом графе. 6. Находим соответствующие Graph Point по параметру parent_level_vertex_id. 7. Сохраняем исходные записи перед изменением. 8. Обновляем параметры target_level_id, target_level_vertex_id и game_vertex_id согласно данным подготовленных переходов. 9. Проверяем дистанцию между точками перехода. Для обратных переходов аналогично редактируем графы тех локаций, с которыми связывается новая карта. Необходимо сопоставить соответствующие Graph Point и правильно указать целевые вершины. После изменений сохраняем конфиги и компилируем граф заново. Проверить результат можно через: Код ggtool.pl game.graph В списке должны отображаться новые переходы. Важно: перед редактированием сохраняйте исходные записи Graph Point в отдельные файлы. Это позволит восстановить параметры, если при настройке связей возникнет ошибка. Шаг 5. Переносим обновлённые файлы графа После успешной проверки копируем итоговый game.graph в мод. Также необходимо перенести в пакет новой локации обновлённые файлы: Код level.gct level.graph level.ai Дополнительно проверяем, изменились ли файлы level.ai и level.gct уже существующих локаций. Если изменения есть, их тоже нужно включить в итоговый пакет. 4. Объединение all.spawn Теперь подготовим общий файл спавна мода. Шаг 1. Подготавливаем конфиги спавна Берём изменённый ACDC и распаковываем all.spawn, полученный при компиляции новой локации. Из полученных файлов забираем конфиг новой локации. Затем распаковываем all.spawn существующего мода и переносим конфиг новой локации в соответствующую папку. Шаг 2. Обновляем all.ltx В all.ltx существующего мода прописываем конфиг новой локации и увеличиваем значение level_count на единицу. Внимание! В исходном руководстве отдельно подчёркивается: остальные параметры all.ltx изменять не нужно. Шаг 3. Проверяем нумерацию объектов Проверяем количество объектов в спавне новой локации. Затем перенумеровываем объекты в её конфиге так, чтобы они шли после объектов существующего мода и не пересекались с их идентификаторами. Также проверяем game vertex объектов: они должны находиться в диапазоне вершин, соответствующих новой локации в game.graph.levels_info.ltx. Шаг 4. Добавляем переходы и собираем спавн Если все параметры настроены правильно, добавляем в общий спавн точки переходов для главного героя. После этого собираем all.spawn обратно с помощью используемого инструмента ACDC. Готовый файл переносим в итоговый пакет обновления. 5. Собираем общий пакет обновления После объединения графа и спавна необходимо подготовить пакет с обновлёнными файлами. Конфигурационные файлы: Код game_graphs.ltx game_levels.ltx game_maps_single.ltx Файлы новой локации: Код level.gct level.graph level.ai Эти файлы должны быть обновлены версиями, полученными после объединения графа. Также в пакет включаются: - Папка новой локации. - Изменённые файлы level.ai и level.gct существующих локаций, если они обновлялись. - Объединённый game.graph. - Объединённый all.spawn. - Необходимые шейдеры. - Необходимые текстуры. Перед публикацией рекомендуется проверить целостность пакета и убедиться, что в нём присутствуют все изменённые файлы. 6. Замена геометрии локации без изменения сетки Если требуется заменить только геометрию уровня, не затрагивая существующую AI-сетку, в исходном руководстве предлагается заменить только перечисленные файлы. Код level level.cform build_details.dds level_lods.dds level_lods_nm.dds level.details level.game level.geom level.geomx build.prj level.wallmarks Важно! Этот список приведён по исходному руководству. Перед заменой файлов сделайте резервную копию папки локации и проверьте совместимость файлов с используемой версией SDK и движка. Заключение Подключение новой локации к готовому моду требует согласованной настройки конфигов, объединения игровых графов и корректного сведения файлов спавна. Основные этапы работы: - Назначить новый ID и прописать локацию в конфигурационных файлах. - Скомпилировать уровень и проверить его игровые вершины. - Объединить game.graph с существующим графом мода. - Проверить и настроить межуровневые переходы. - Обновить all.spawn и идентификаторы объектов. - Собрать полный пакет обновления с необходимыми файлами. Главное правило: перед объединением всегда сохраняйте резервные копии графа, спавна и конфигов. Ошибка в идентификаторах или связях может нарушить работу существующих локаций мода.
|
| |||
| |||