Подключение локаций к моду — S.T.A.L.K.E.R. Inside Wiki

Подключение локаций к моду

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск


Предварительная настройка конфигов

Самое главное - правильно настроенные конфиги ЗАРАНЕЕ, маппером при сборке локации. Что нужно сделать с конфигами:

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 - тут у нас он 21. Запомним его, он должен совпадать во всех конфигах.

game_levels.ltx - добавить в конец секции [levels], и создать новую подсекцию локации с тем же именем. У меня получилась level21. Создаём для неё в конце конфига пропись:

[level21]
name = k01_darkscape_ogse -- имя локации - задаётся по имени папки
caption = "k01_darkscape_ogse" -- имя на карте, можно потом в строки добавить для подстановки
offset = 3000.0, 1000.0, 0.0 -- смещение (на глобальной картие видимо)
id = 21 -- новый id, должен быть равен указанному в game_graphs.ltx, и быть самым большим, иначе локация вклинится в середину геймграфа

game_maps_single.ltx - дописать в конец [level_maps_single] текстовое имя локации - k01_darkscape_ogse, затем создать новую подсекцию локации - [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 ;касается только карты в КПК
;1 значение - ширина текстуры (чем значение больше, тем карта уже. правый край неподвижен)
;2 значение - длина текстуры (чем значение больше, тем карта короче. нижний край неподвижен)
;3 значение - ширина текстуры (чем значение больше, тем карта шире. левый край неподвижен)
;4 значение - длина текстуры (чем значение больше, тем карта длиннее. верхний край неподвижен)
weathers = default
;music_tracks = l04_darkvalley_musics

Компиляция локации

Если раньше геометрию уже компилировали, можно сделать на драфте, потом обсчитать только сетку, затем забросить её файлы *.ai, *.gct в папку уже готовой карты). Убедитесь что на локации НЕТ точки спавна актора (она должна быть только одна на игру), а так же что локация равномерно покрыта графпоинтами. Кроме того можете сразу сделать графпоинты переходов, чтобы потом не выделять под это один из свободных графпоинтов.

Как положено прогоняем все батники xrAI - строим сетку, левелграф, геймграф, аллспавн.

Сведение единого спавна и графа

Нам понадобятся файлы:

  • Старый геймграф мода
  • Геймграф сформированный при компиляции локации
  • Старый аллспавн мода
  • Аллспавн сформированный при компиляции локации
  • Файлы level.ai и level.gct ВСЕХ локаций, которые уже есть в моде - если новых нету то все оригинала
  • Папка с полностью готовой локацией
  • Утилиты ACDC, gg_cdc_x, game.graph_recompiler

Сначала надо выяснить, правильно ли у нас по геймвертексам села локация. Для этого кидаем геймграф сформированный при компиляции локации в папку с 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

Обратите внимание - новая локация должна быть САМОЙ последней, и за ней не должно больше идти никаких локаций. Запишите себе её стартовый вертекс - в данном случае 2792. Если локация вклинилась в середину списка значит вы ей дали не самый последний Id - это не годится, так как переколбасит весь игровой граф, спавн и вы вручную замордуетесь это сводить. Поэтому возвращаемся к шагу 1. Если же локация как положено в конце, всё отлично, можно работать дальше.

Теперь надо поправить АСДС - открываем acdc.pl, находим по тексту "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, она нам чуть позже понадобится для спавна. Теперь надо свести единый граф с нашей новой локацией. Для этого берём game.graph_recompiler. Копируем в его папку в папку levels целиком нашу папку с новой локацией, а так же создаём папки всех локаций что уже есть в игре, и копируем туда файлы level.ai и level.gct ВСЕХ локаций, которые уже есть. В корень копируем старый граф мода, и туда же рядом - новый граф, переименовав его в game2.graph Теперь правим батник для подключения локации - в нём надо указать какие локации брать из первого графа, и какие из второго, а так же типы графов. У меня получился вот такой батник:

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

Запускаем, ждём пока обработается. Если всё прокатило, тогда мы получим новый файл game.graph.new - в который вписана локация. Нужно тут же его утащить и распаковать с помощью gg_cdc_x - проверить game.graph.info.cross_edges.ltx - все ли переходы остались на месте (должны быть все), а так же как вписалась локация - в game.graph.levels.ltx наша локация должна быть конечной и с самым большим level_id. В game.graph.levels_info.ltx она тоже должна быть последней, там же можно увидеть её минимальный и максимальный вертексы. Минимальный вертекс должен быть тот же что был когда проверяли граф, сделанный компилятором - у нас это был вертекс 2792.

Теперь необходимо проверить, не сдвинулись ли идентификаторы локаций в графе. Почти наверняка - сдвинулись, так как в оригинале там есть груда ссылок на тестовые локации разработчиков. Проверить это можно в game.graph.levels.ltx, сравнив идентификаторы локаций там с идентификаторами в конфигах game_graphs.ltx и game_levels.ltx - если они отличаются, то обязательно поправляем идентификаторы в конфигах на те, что в геймграфе!

По добавлению переходов - чтобы их добавить вам желательно было заранее создать кроссграфы на локации. Если вы это сделали, тогда вам нужно сделать вот что - распаковать геймграф, сформированный при компиляции локации. Найти там в конфиге графов новой локации - game.graph.edges.<id_вашей_локации> сделанные вами переходы - они будут помечены как "crosslevel edge". Ещё их легко найти по параметру target_level_id - он у них отличается от исходного для этой локации. После того как нашли - скопируйте их прописи в отдельный файл. Затем откройте конфиг новой локации в сведённом вместе графе. При сведении переходы прибились, поэтому надо теперь в новом конфиге найти те же самые графпоинты на которых висели переходы. Ищите их по параметру parent_level_vertex_id. Как только найдете - перед тем как править - скопируйте в отдельный файл. Затем замените им параметры target_level_id, target_level_vertex_id и game_vertex_id на те, которые были у сделанных вами переходов. Не забудьте выставить дистанцию - это будет расстояние перехода. Сохранитесь. Теперь откройте конфиги game.graph.edges.<id_вашей_локации> тех локаций на которые создали переходы - нужно же сделать ещё переходы в обратную сторону. Открыв, найдите там те графы, с которыми только что сделали соединения с новой локации. Ищите по параметру parent_level_vertex_id - у наиболее подходящего графпоинта он будет равен target_level_vertex_id перехода с новой локации. После того как нашли, откройте файл в который сохранили не изменённые ещё графпоинты новой локации, на которые были сделаны переходы. Теперь аналогично - затем замените им параметры target_level_id, target_level_vertex_id и game_vertex_id на те, которые были у графпоинтов новой локации до изменения. Так мы добьемся того, чтобы входы и выходы с локации были примерно на одном месте. Не забудьте выставить дистанцию! Теперь всё сохраняем, и компилируем граф. Если всё сделано правильно граф сохранится, и при проверке его ggtool.pl вы увидите в списке сделанные вами переходы.

Если всё нормально, то можно скопировать граф обратно. Теперь важно - нужно так же не забыть скопировать в итоговый пакет файлы, которые при слиянии были поправлены в папке нашей локации. Это:

level.gct level.graph level.ai

А так же проверить - были ли внесены изменения в файлы level.ai и level.gct уже существующих локаций. Если да, то изменённые файлы тоже надо будет скопировать в итоговый пакет. Теперь займёмся спавном. Берём наш поправленный АСДС и распаковываем спавн, полученный при компиляции локации. Забираем оттуда конфиг нашей новой локации. Затем распаковываем аллспавн мода и кидаем в его папку конфиг нашей новой локации. Прописываем его в all.ltx аллспавна мода, и увеличиваем в all.ltx индекс локаций level_count на единицу. Больше в all.ltx ничего не трогаем. Далее проверяем число объектов в нашем спавне, и перенумеровываем объекты в конфиге нашей новой локации так, чтобы они были добавлены в конец нумерации. Проверяем прописанные в конфиге нашей новой локации геймвертексы объектов - они должны лежать в пределах вертексов, которые мы получили при проверке геймграфа в файле game.graph.levels_info.ltx

Если всё получилось, то добавляем в аллспавн точки переходов для ГГ и запаковываем спавн обратно. Он готов к работе, можно его скопировать в итоговый пакет.

Cобираем общий пакет обновления

В пакет у нас попадут:

  • Конфиги

game_graphs.ltx game_levels.ltx game_maps_single.ltx

  • Папка с самой локацией, при этом в ней должны быть обновлены файлы

level.gct level.graph level.ai

- теми, которые получили при слиянии графа

  • Изменённые при слиянии графа файлы level.ai и level.gct уже существующих локаций (если локация добавлена нормально, то изменённых может и не быть вообще)
  • Слитый game.graph
  • Слитый all.spawn
  • Необходимые для локации шейдеры
  • Необходимые для локации текстуры

Если нам нужно заменить только геометрию локации не трогая сетку

Тогда надо заменить в папке локации только вот эти файлы:

  • 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

--KamikaZze (OGSE Team) 11:46, 16 июля 2012 (UTC)

Авторы

Статья создана: Kamikazze

Другие места
LANGUAGE