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

Підключення локацій до ЧН та ЗП за допомогою програми від AMK Team


Infernis
Ранг:
Майстер
Роль:
Модмейкер
Угруповання:
Воля
Записи:
905
Приєднався:
7 місяців тому
 

Підготовка.

Встановлюємо інтерпретатор ActivePerl .

Заходимо до папки з програмою ggEditor. Створюємо там папки CS або CoP ( дивлячись на яку гру робите ) і папку SoC . або від ТЧ. У папці Gamedata створюємо папку levels і кидаємо туди папку з рівнем, який ми хочемо портувати. Далі повертаємося в папку SoC і туди кидаємо папку з ACDC для ТЧ, туди ж кладемо all.spawn . Запускаємо відповідний батник для розпакування all.spawn`а .

Далі в папку ggEditor_01\CoP або ggEditor_01\CS , кидаємо папку з відповідним ACDC, знову ж таки кладемо туди all.spawn , розпаковуємо.

У результаті у нас має вийти 2 розпакованих all.spawn `а, game.graph від ТЧ і папка з рівнем, що переноситься.

З приготуванням все.

Основна робота.

Запускаємо програму ggEditor. Бачимо там два віконця. У лівому відкриваємо game.graph від ТЧ, а в правому - від ЗП або ЧН (в ЗП і ЧН граф вшитий в all.spawn , шукайте його там. Потрібно вибрати тип файлів для ЧН - graph.bin , а для ЗП - всі файли і відкрити в папці з файлом ACDC section4.bin ). У віконцях ми бачимо перелік рівнів. У лівому віконці знаходимо потрібний нам рівень та натискаємо на відповідну стрілку для перенесення рівня у потрібний нам граф. Натискаємо у правому вікні «зберегти». Після того, як граф зберігся, можна закрити програму, вона нам більше не знадобиться. Потім крокуємо до папки з ACDC для ЧН/ЗП і видаляємо старі файли section4.bin або graph.bin . Потім перейменовуємо файли graph.bin.new або section4.bin.new у graph.bin і відповідно section4.bin .

Далі йдемо в папку з ACDC від ТЧ, знаходимо там файл alife_наша_локація та копіюємо його. Потім шуруємо в папку з ACDC від ЧН/ЗП, вставляємо скопійований нами файл. Відкриваємо цей файл, зносимо все, залишаємо тільки одну секцію спавна (найкраще, якщо це буде якийсь об'єкт), присвоюємо секції номер не менше 20000, згортаємо на якийсь час цей файл. Далі потрібно підігнати вертекси. Для цього запускаємо ggTool.bat , чекаємо деякий час, після чого в parse_lvids.ltx з'являються імена локацій, а поряд з ними числа. Дивимося це число поряд з нашою локацією (в ЧН це швидше за все буде 1620, а ЗП 934). Далі розгортаємо alife_ файл з нашою локацією, шукаємо там рядок game_vertex_id і пишемо там число, яке з'явилося поруч із нашою локацією при запуску батника ggTool. А ось рядок level_vertex_id чіпати не слід, тому що. вершини рівня нашому випадку залишаються незмінними. RedPython 10:04, 21 листопада 2010 (UTC) Ми підігнали вертекси.

Потім відкриваємо файл all.ltx . Вписуємо туди свій alife_ файл локації, way_ файли не чіпаємо. Змінюємо на відповідну кількість локацій рядок level_count .

Після цього відкриваємо файл alife_zaton (для ЗП) або alife_marsh (для ЧН) і шукаємо там РР по рядку section_name = actor . Знайшли? Чудово. Тепер присвоюємо цій секції спавна позицію (нову позицію прописуємо також у рядку upd:position = ) і вертекс як у єдиного предмета у файлі alife_нова_локація . При наступному розпакуванні, якщо ви все зробили правильно, наш актор опиниться у файлі alife_нова_локація .

Ми майже закінчили із пробним складанням нової локації (поки що без переходів на інші рівні).

Залишилося тільки прописати наш новий рівень у файл ACDC_CoP\acdccop.pl (для ЗП) або у файлі ACDC_CS\stkutils\level.pm .

У цих файлах шукаємо такі рядки (для ЗП):

 
use constant levels_info => ( 
	{ gvid0 => 934 , } ,
	 { gvid0 => 883 , name => 'jupiter_underground'  } ,
	 { gvid0 => 857 , name => 'labx8'  } ,
	 { gvid0 => 666 , name > 'pripyat'  } ,
	 { gvid0 => 317 , name => 'jupiter'  } ,
	 { gvid0 => 0 , name => 'zaton'  } ,
 

І якщо у вас число, коли ми запускали батник ggTool , теж 934, то прописуємо так:

 
use constant levels_info => ( 
	{ gvid0 => 934 , name => 'ваша_локація'  } ,
	 { gvid0 => 883 , name => 'jupiter_underground'  } ,
	 { gvid0 => 857 , name => 'labx8'  } ,
	 { => 666 , name => 'pripyat'  } ,
	 { gvid0 => 317 , name => 'jupiter'  } ,
	 { gvid0 => 0 , name => 'zaton'  } ,
 

А у файлі level.pm від ACDC ЧН ви побачите такий текст:

 
use constant levels_info => ( 
	{ gvid0 => 1620 , } ,
	 { gvid0 => 1573 , name => 'l12_hospital'  } ,
	 { gvid0 => 1565 , name => 'l11_stancia2'  } ,
	 { gvid0 = > 15 > 'l10_limansk'  } ,
	 { gvid0 => 1511 , name => 'l09_agroprom_undeground'  } ,
	 { gvid0 => 1313 , name => ' l08_military '  } ,
	 { gvid0 => 1212 ,
	 name = => 1057 , name => 'l06_agroprom' } , {
	 gvid0 => 961 , name => 'l05_red_forest' } ,
	 { gvid0 => 743 , name => 'l04_darkvalley' } ,
	 { gvid0 => 47 l03_escape' } ,
	 { gvid0 => 245 , name => 'l02_garbage' } ,
	 { gvid0 => 0 , name => 'l01_marsh' } ,
        

Прописати там свій рівень потрібно точно так само, як у файлі від ACDC ЗП:

 
use constant levels_info => ( 
	{ gvid0 => 1620 , name => 'ваша_локація'  } ,
	 { gvid0 => 1573 , name => '
	 l12_hospital '  } ,
	 { gvid0 => 1565 , name => 'l11_stancia2'  } => 1524 , name => 'l10_limansk' } ,
	 { gvid0 => 1511 , name => ' l09_agroprom_undeground' } ,
	 { gvid0 => 1313
	 , name => ' l08_military ' } , { g0 l07_yantar' } ,
	 { gvid0 => 1057 , name => 'l06_agroprom' } ,
	 { gvid0 => 961 , name => ' l05_red_forest' } ,
	 { gvid0 => 743 , name = >
	 ' l04_dark 472 , name => 'l03_escape' } ,
	 { gvid0 => 245 , name => 'l02_garbage' } ,
	 { gvid0 => 0 , name => 'l01_marsh' } ,
           

За ідеєю, в levels_info слід прописати також верхню вершину останнього рівня. RedPython 10:04, 21 листопада 2010 (UTC)

Всі. Збираємо all.spawn .

 

Складання геймдати.

Залишилося зібрати gamedata`у для гри та подивитися, що вийшло. Отже, почнемо.

У папці з грою створюємо папку gamedata , а в ній папки configs , levels , spawns . У папку spawns кладемо той, що вийшов при складанні all.spawn.new (або new.spawn ), не забуваючи перейменувати його в all.spawn . У папку levels кладемо рівень з ggEditor_01 \ SoC \ gamedata \ levels \ ваша локація \ . Потім заходимо в папку з рівнем, видаляємо старий файл level.ai та перейменовуємо файл level.ai10 у level.ai .

Тепер залишилося лише прописати рівень у конфігах. З розпакованої геймдати гри беремо файли configs \ game_graphs.ltx , \ game_levels.ltx , \ game_maps_single.ltx .

game_graphs.ltx для ЧН повинен виглядати так:

 
[ location_0 ] 
  000  = "..." 
  001  = "ескейп" 
  002  = "сміттєзвалище" 
  003  = "агропром" 
  004  = "агропром-підземка" 
  005  = "темна долина" 
  006  = "лабораторія X-18" 
  007  = "даркейп 008
   = Бар 009 = Росток 010 = Янтар 011 = лабораторія X-16 012  = Мілітарі 013 = Мертве місто 014 = Радар 015 = Радар бункер 016 = Прі 017 = " станція АЕС" 018 = "ваша_локація"
   
   
   
   
   
   
   
   
   
   
 
[ location_1 ] 
  000  = "..." 
  001  = "обмежений доступ" 
  002  = "заборонений доступ"
 
[ location_2 ] 
  000  = "..." 
  001  = "не для гравця"
 
[ location_3 ] 
  000  = "..." 
  001  = "ваша_локація"
 

game_graphs.ltx для ЗП має виглядати так:

 
[ location_0 ] 
  000  = "..." 
  001  = "ваша_локація" 
  002  = "sim_smart_2" 
  003  = "sim_smart_3" 
  004 =  " sim_smart_4 
  " 005  = "sim_smart_5" 006 = "sim_smart_6" 007 = " sim_smart_8 009 = "sim_smart_base"
   
   
   
   
 
[ location_1 ] 
  000  = "..." 
  001  = "обмежений доступ" 
  002  = "заборонений доступ"
 
[ location_2 ] 
  000  = "..." 
  001  = "не для гравця"
 
[ location_3 ] 
  000  = "..."
  ....
  ....
  ....
  112  = "pri_a22_smart_terrain" 
  113  = "pri_a25_smart_terrain"
   114 =  " pri_a28_arch" 
  115 =  " pri_a28_base" 
  116 =  "pri_b28_evac " 
  117 =  " pri_a28_heli " 2 shop" 
  120  = " 
  pri_b301" 121 = "pri_b302" 122 = "pri_b303" 123 = "pri_b304_monsters_smart_terrain" 124 = "pri_b305_dogs" 125 = " pri_b306" 126 = " pri_b307" 127 = " pri_b35_mercs " 128 = _terrain" 130 = " pri_sim_1 " 131 = "pri_sim_2" 132 = "pri_sim_3" 133 = "pri_sim_4" 134 = " pri_sim_5" 135 = " pri_sim_6" 136 = "pri_sim_7 " 137 = " pri_sim_8 " 138 =" pri_sim_9 " 139 =" pri_sim_10" " 142 = "ваша_локація" 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 
[ graph_points_draw_color_palette ]
   default				 = 0x6000ffff 
  000_000_000_000		 = 0x60ff00ff
 

Далі ліземо в game_levels.ltx . Там на самому початку, де список рівнів, вписуємо level183 (число не менше 183). Гартуємо файл до самого кінця і в кінці пишемо наступне:

 
[ level183 ]
 name    = ваша_локація 
caption = "ваша_локація" 
offset   = 700.0 ,      1000.0 ,     -840.0 weathers = [ default ] id   = 183 
 
 
 

Потім відкриваємо файл game_maps_single.ltx і прописуємо свій рівень у секції [level_maps_single] . Потім створюємо приблизно таку секцію нашого рівня:

 
[ ваша_локація ]
   global_rect = 307.0 , 90.0 , 717.0 , 500.000000 weathers     = dynamic_default 
  
 

Всі. Запускайте гру та спробуйте, що вийшло.

 

З'єднання з іншими рівнями.

Пропоную вам не марнувати часу, просто бігаючи по підключеній локації, а заміряти координати для створення переходу. Координати зніматимемо на 2-х локаціях: на підключеній і на тій, на яку ви хочете зробити перехід відповідно. На кожній локації нам потрібно зняти по дві координати (координата самого переходу та координата місця, в яке кидатиме при переході з другої локації, другу координату робимо на пару метрів далі, бо якщо зробити близько, то відразу ж кидатиме назад, на локацію з якої переходимо). Як зняти координати, я думаю, всі знають, тому пояснювати тут не буду.

Ми відміряли всі необхідні нам координати.

Потім розпаковуємо зроблений нами раніше all.spawn . Тепер у потрібних нам локаціях, в alife_ файлах додаємо наступну секцію спавна:

 
[ 40000 ]  ; вільний номер секції 
; cse_abstract
 properties section_name = level_changer 
name = escgar_level_changer ; унікальне 
ім'я для секції переходу position = 28.060224533081 , 16.556184768677 , 685.8015130 ; se_abstract__unk1_h16 = 0x1 _  
  

 
; cse_alife_object properties 
game_vertex_id = 1142 ;геймвертекси distance = 0 level_vertex_id = 308110 ;левелвертекси object_flags = 0xffffff3e  
 
  

 
; cse_shape
 properties shapes = shape0 shape0 
: type = box 
shape0 : axis_x = 1.25219917297363 , 0 , 0 shape0 
: axis_y = 0 , 3.09340000152588 , 0 . 219917297363 
shape0 
: offset = 0 , 0 , 0 _        
 
; cse_alife_space_restrictor properties 
restrictor_type = 3  
 
; cse_alife_level_changer properties 
dest_game_vertex_id = 1187 ;вертекси локи, на яку веде перехід dest_level_vertex_id = 212769 ; вертекси локи, на яку веде перехід dest_position = 39.3963317829 99.7674505469 ; позиція , куди кидає dest_direction = 0 , 0 , 0 ; напрямок погляду гравця при появі dest_level_name = l02_garbage ;ім'я локації, на яку веде перехід dest_graph_point = start_actor_01 silent_mode = 1 ;режим "тихого" переходу  
  
  
  


  
 
; se_level_changer properties
 

Пояснення після знаків; бажано видалити. RedPython 10:04, 21 листопада 2010 (UTC)
Все готово. Збираємо all.spawn і запихаємо в гру.

 

Метод виправлення лайтмапів

Після перенесення лок з ТЧ в ЧН/ЗП освітлення локації поводилося дивним чином, тіні були чорні, тіні від дерев на будинках мали дивну форму, деякі об'єкти взагалі світилися в темряві. А вся справа полягала в картах освітлення, принцип їх побудови в ТЧ відрізняється від ЧН/ЗП, тому для отримання якіснішої картинки потрібно зробити деякі маніпуляції з ними. Карти освітлення зберігаються у файлах

  • lmap#1_1.dds
  • lmap#1_2.dds
  • lmap#2_1.dds
  • lmap#2_2.dds
  • lmap#3_1.dds
  • lmap#3_2.dds
  • ...

у папці з локацією. Карти з ім'ям, що закінчуються на _1, міняти не потрібно, а ось, що закінчується на _2 , потрібно змінити. Значить так, відкриваємо у фотошопі (ну, або в іншому редакторі, не має значення) карти:

  • lmap#1_2.dds
  • lmap#2_2.dds
  • lmap#3_2.dds

... і міняємо місцями альфа канал та RGB. Зберігаємо. Тепер косяків із освітленням не буде. Але в деяких картах у файлах lmap#*.dds немає альфа каналу, тому потрібно в lmap#*_1.dds додати чорний альфа канал, а lmap#*_2.dds канал rgb перенести в альфу, і залити rgb чорним кольором.

 


Переконливе прохання до модмейкерів-початківців. Будь ласка, якщо ви тільки почали займатися модами, то я вам не раджу займатися підключенням локацій. Наберіться досвіду, навчитеся елементарному. Ніхто вас цього не підписувався.

Так, і ще. Якщо переноситимете секції спавна, то для масової заміни геймвертексів і левелвертексів можна використовувати блокнот: відкриваємо наш файл у блокноті=>правка=>замінити, і пишемо, що на що замінювати. Також можна використовувати Vertex Parser або Spawn Parser 2.0 beta .


   
Цитата