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

Запускаем программу 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' },
{ gvid0 => 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 => 1524, name => 'l10_limansk' },
{ gvid0 => 1511, name => 'l09_agroprom_undeground' },
{ gvid0 => 1313, name => 'l08_military' },
{ gvid0 => 1212, name => 'l07_yantar' },
{ gvid0 => 1057, name => 'l06_agroprom' },
{ gvid0 => 961,  name => 'l05_red_forest' },
{ gvid0 => 743,  name => 'l04_darkvalley' },
{ gvid0 => 472,  name => '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' },
{ gvid0 => 1524, name => 'l10_limansk' },
{ gvid0 => 1511, name => 'l09_agroprom_undeground' },
{ gvid0 => 1313, name => 'l08_military' },
{ gvid0 => 1212, name => 'l07_yantar' },
{ gvid0 => 1057, name => 'l06_agroprom' },
{ gvid0 => 961,  name => 'l05_red_forest' },
{ gvid0 => 743,  name => 'l04_darkvalley' },
{ gvid0 => 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_7"
  008 = "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"
  118 = "pri_a28_school"
  119 = "pri_a28_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 = "pri_b35_military"
  129 = "pri_b36_smart_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"
  140 = "pri_sim_11"
  141 = "pri_sim_12"
  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.80151367188 ;координаты перехода
direction = 0,0,0
cse_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
shape0:axis_z = 0,0,1.25219917297363
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.396331787109,0.48722490668297,-299.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.

Автор статьи: БАТЯ-STALKER

О способе подключения поведал: джЭдай (ака Panisher)

Метод исправления лайтмапов открыт Push85

Дополнительные ссылки:
Регистрация локации
Разбор файлов: game_maps_single.ltx и game_levels_music.ltx