Попереднє налаштування конфігів
Найголовніше - правильно налаштовані конфіги заздалегідь, мапером при складанні локації. Що потрібно зробити з конфігами:
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