Сповіщення
Очистити все

Під'єднання локацій до модів


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Попереднє налаштування конфігів

Найголовніше - правильно налаштовані конфіги заздалегідь, мапером при складанні локації. Що потрібно зробити з конфігами:

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.0 .
= 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 , 1023.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
l0> 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 => 27









Зверніть увагу - нова локація повинна бути найостаннішою, і за нею не повинно більше йти ніяких локацій. Запишіть собі її стартовий вертекс - в даному випадку 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 ' } , 2 > 'l12_stancia_2' } , { gvid0 => 2467 , name => 'l12u_control_monolith' } , { gvid0 => 2402 , name => ' l12u_sarcofag ' } , { gvid0 => 2273 ' , name => 2117 , name => 'l11_pripyat' } , { gvid0 => 1862 , name => ' l10_radar' } , { gvid0 => 1545 , name => 'l07_military' } , { gvid0 => 15 l08u_brainlab' } , { gvid0 => 1438 , name => 'l08_yantar' } , { gvid0 => 1308 , name => 'l06_rostok' } , { gvid0 => 1168 , name = > ' l05_bar 1109 , name => 'l04u_labx18' } , { gvid0 => 811 , name = > 'l04_darkvalley' } , { gvid0 => 703 , name => ' l03u_agr_underground' } , { gvid0 = } , { 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 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

Якщо все вийшло, то додаємо в алспавн точки переходів для ГГ і запаковуємо спавн назад. Він готовий до роботи, його можна скопіювати в підсумковий пакет.

Збираємо загальний пакет оновлень

У пакет у нас потраплять:

  • Конфігі

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

   
Цитата