Обновление Форума  
Привет, сталкер! Добро пожаловать на форум STALKER-WORLD — место общения, помощи и обмена опытом. Здесь всегда подскажут, поддержат и помогут разобраться в любой ситуации. Новички найдут советы от ветеранов, а опытные сталкеры — интересные обсуждения. Чувствуй себя как дома.


  • Страница 1 из 1
  • 1
Подключение новых локаций к моду S.T.A.L.K.E.R.
Anubis

Anubis  

Онлайн  

Титул: Хранитель Зоны

 

1277

74

308


Сообщение 1 15:50:26, 2026-10-17
Сталкерское уважение +1 Сталкерское уважение +2 Сталкерское уважение +3 Постоянный житель портала Постоянный житель портала + Постоянный житель портала +2 Постоянный житель портала +2 Постоянный житель портала +2
Подключение новых локаций к моду 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 и идентификаторы объектов.
- Собрать полный пакет обновления с необходимыми файлами.

Главное правило: перед объединением всегда сохраняйте резервные копии графа, спавна и конфигов. Ошибка в идентификаторах или связях может нарушить работу существующих локаций мода.


  • Страница 1 из 1
  • 1
Поиск:

Совет по выживанию
Загрузка…
Совет № 1




Заходили сегодня: | Anubis, stalkercom, valiksuper12, Владимир61, donhenaro2009, arengard, Hog_raider, yur4ik, javoronokmedvejov2015, dmitrijkaslev, Гудвин, Spic3, danilakorneev68, UR5TNG, СергейПахомов1999, tutmas82, akibitkin965, aldi7, smirkin1970, masterkenedy12, andrejresetov79714, ENEWAY, med406083, srzmelnik, samsitovmarat, EXELENT, gg0931815, andrey780102, petroviccingiz43, Ganpzz, max32max1978, fateev20000, штурм, i4494vovanga, egoravdeev389, dk197578, dima1987sumy, danielaladnan, erry64, angrykazaki, blackvoyager2, voron_zl, ksmsasha1973, -=KiLlErMaN=-, gille1970, PIGON71, trofivomitch, Makar0627, stslker31RUS, matvejzakutaev1, Alex3867, [Полный список]