Подключение локаций к ЧН и ЗП с помощью программы от AMK Team
Материал из S.T.A.L.K.E.R. Inside Wiki
На днях пообщался с одним человеком, узнал как подключать локации к ЗП/ЧН через программу от AMK Team.В данном уроке мы полностью подключим локацию к игре.
Содержание
Инструменты и ресурсы
ActivePerl
ACDC for SoC v.1.0004
ACDC for CS v.1.5.04
ACDC for CoP
ggTool
ggEditor v.0.1
Распакованные ресурсы ТЧ или мода, из которого взят уровень (если вы берете уровень из мода, то вам наверняка не подойдет простой ACDC).
Подготовка.
Устанавливаем интерпретатор ActivePerl.
Заходим в папку с программой ggEditor. Создаем там папки CS или CoP (смотря на какую игру делаете) и папку SoC.В папке SoC создаем папку gamedata и кидаем в нее файл game.graph (важно, чтобы game.graph лежал там, иначе программа не прочитает!) из мода, или от ТЧ. В папке gamedata создаем папку levels и кидаем туда папку с уровнем, который мы хотим портировать. Далее возвращаемся в папку SoC и туда кидаем папку с ACDC для ТЧ, туда же кладём all.spawn.Запускаем соответствующий батник для распаковки all.spawn`а.
Далее в папку ggEditor_01\CS или 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' }, { 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 и запихиваем в игру.
Убедительная просьба к начинающим модмейкерам. Пожалуйста, если вы только начали заниматься модами, то я вам настоятельно не советую заниматься подключением локаций. Наберитесь опыта, подучитесь элементарному. Я вас учить этому не подписывался.
Да, и еще. Если будете переносить секции спавна, то для массовой замены геймвертексов и левелвертексов можно использовать блокнот: открываем наш файл в блокноте=>правка=>заменить, и пишем, что на что заменять. Также можно использовать Vertex Parser или Spawn Parser 2.0 beta.
Автор статьи: БАТЯ-STALKER
О способе подключения поведал: джЭдай (ака Panisher)
Если у вас что-то не получается или появились вопросы, есть тема на форуме.