В связи с появлением простой проги от АМК в сети,подключение локации перестало быть чем-то сложным. Для меня, как новичка в переносе локаций, попервой данный метод оказался очень простым в исполнении. Итак, всем желающим перетащить локацию из ЧН в ЗП смотреть сюда.
При помощи распаковщика распакуем ресурсы ЧН и ЗП (прога имеет интуитивно понятный интерфейс,думаю проблем тут не возникнет) Устанавливаем active perl. Создаём папку с программой ggEditor_01.Создаем там папки Cs и Cop.В папке CS создаем папку gamedata.В папке gamedata создаем папку levels и кидаем туда папку с уровнем, который мы хотим портировать. Далее возвращаемся в папку CS и туда кидаем папку с ACDC для CS, туда же кладём all.spawn.Запускаем соответствующий батник для распаковки all.spawn`а. Далее в папку ggEditor_01\ Cop,распаковываем соответствующий ACDC, опять-же кладем туда all.spawn, распаковываем. В итоге у нас должно получиться 2 распакованных all.spawn`а и папка с переносимым уровнем. С приготовлениями всё.
Основная работа.
Запускаем программу ggEditor.Видим там два окошка. В левом открываем graph.bin от ЧН (в низу вместо bin.graph выбираем тип файла graph.bin), а в правом — section4.bin от ЗП(они появятся после распаковки all.spawn`а) Нужно выбрать тип файлов для ЧН — graph.bin, а для ЗП — все файлы и открыть в папке с ACDC файл . В окошках мы видим список уровней. В левом окошке находим нужный нам уровень и нажимаем на соответствующую стрелку для переноса уровня в нужный нам граф. Нажимаем в правом окошке «сохранить».После того, как граф сохранился, можно закрыть программу, она нам больше не понадобится. Потом этого шагаем в папку с ACDC для ЗП и удаляем старые файлы section4.bin.Затем переименовываем файл section4.bin.new в section4.bin .
Далее идем в папку с ACDC от ЧН, находим там файл alife_наша_локация и копируем его. Затем шуруем в папку с ACDC от ЗП, вставляем скопированный нами файл. Открываем этот файл, сносим все, оставляем только одну секцию спавна(Лучше всего если это будет какой-нибудь объект,я например всегда оставляю Campfire, костёр.), присваиваем секции номер не меньше 20000, сворачиваем на время этот файл. Далее нужно подогнать вертексы. Для этого запускаем батник ggtool (распаковываем архив с программой в папку с ACDC для ЗП, затем кликаем правой кнопкой иыши по батнику ggtool, изменить, и вставляем туда следущее: Код ggtool.pl section4.bin pause ), ждем некоторое время, после чего появляются имена локаций, а рядом с ними числа. Смотрим это число рядом с нашей локацией(в ЗП это скорее всего будет 934).Далее разворачиваем alife_ файл с нашей локацией, ищем там строку «game_vertex_id» и пишем там число которое появилось рядом с нашей локацией при запуске батника ggtool. Далее, в добавляемых потом секциях спавна нужно писать эти числа. Мы подогнали вертексы.
Затем открываем файл all.ltx.Вписываем туда свой alife_ файл локации, way_ файлы не трогаем. Меняем на соответствующее число локации строку level_count.
После этого открываем файл alife_zaton(для ЗП) и ищем там гг по строке «section_name = actor».Нашли?Отлично. Теперь присваиваем этой секции спавна позицию(новую позицию прописываем также в строке "upd:position = ") и вертексы как у единственного предмета в файле alife_новая_локация. При следующей распаковке, если вы все сделали правильно, наш актор окажется в файле alife_новая_лока.
Мы почти закончили с пробной сборкой новой локации(пока без перехода).
Осталось только прописать наш новый уровень в файл ACDC Cop\acdccop.pl(для ЗП). Открываем его с помощью блокнота. В этом файле ищем такие строки(для ЗП): Код 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' },
Всё.Собираем all.spawn.
Теперь соберем геймдату
Осталось собрать gamedat`у для игры и смотреть что получилось. Итак, приступим: В папке с игрой создаем папку gamedata, а в ней папки configs, levels, spawns.В папку spawns ложим получившийся при сборке all.spawn.new(или new.spawn), не забывая переименовать его в all.spawn.В папку levels ложим уровень из ggEditor_01\Soc\gamedata\levels\ваша_локация. Теперь осталось только прописать уровень в конфигах.Из распакованной геймдаты игры берем файлы configs\game_graphs.ltx, game_levels.ltx, game_maps_single.ltx. 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"
Далее лезем в 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
Всё. Запускайте игру и пробуйте, что получилось.
(!) Если у вас произошёл вылет с таким логом: Код [error]Expression : fs [error]Function : CResourceManager::_CreateVS [error]File : D:\prog_repository\sources\trunk\Layers\xrRender\ResourceManager_Resources. cpp [error]Line : 166 [error]Description : shader file doesnt exist [error]Arguments : c:\program files (x86)\gsc world publishing\s.t.a.l.k.e.r. - Зов Припяти\gamedata\shaders\r2\deffer_impl_flat.vs
НЕОБХОДИМО В папке gamedata создать папки shaders\r2 переносите из ЧН файл deffer_impl_flat_d.vs переименовываете его в deffer_impl_flat.vs
Соединение с остальными уровнями.
Итак, если у вас получилось подключить новую локацию, предлагаю не терять времени зря просто бегая по пустой карте, а попытаться создать переходы на другие уровни. Итак, начнём!
1. Снимаем координаты любым удобным способом (можно и тем, который я описывал выше).
2. Распаковываем сделанный нами ранее all.spawn.Теперь в нужных нам локациях, в alife_ файлах добавляем следующую секцию спавна:
Код [1] ; 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
Удаляем все пояснения.
3. Собираем all.spawn и запихиваем в игру. Бежим на место, где судя по координатам должен быть переход, и проверяем.