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

Подключение локаций к моду — различия между версиями

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

Перейти к: навигация, поиск
(Компиляция локации: Никаких aiwrapper)
 
Строка 56: Строка 56:
 
можете сразу сделать графпоинты переходов, чтобы потом не выделять под это один из свободных графпоинтов.
 
можете сразу сделать графпоинты переходов, чтобы потом не выделять под это один из свободных графпоинтов.
  
Как положено прогоняем все батники aiwrapper - строим сетку, левелграф, геймграф, аллспавн.
+
Как положено прогоняем все батники xrAI - строим сетку, левелграф, геймграф, аллспавн.
  
 
= Сведение единого спавна и графа =
 
= Сведение единого спавна и графа =

Текущая версия на 10:47, 16 мая 2017


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

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

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