Подключение локаций к ЧН и ЗП с помощью программы от AMK Team — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Подключение локаций к ЧН и ЗП с помощью программы от AMK Team — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(оформление, дополнение, исправление)
Строка 1: Строка 1:
 +
На днях пообщался с одним человеком, узнал как подключать локации к ЗП/ЧН через программу от AMK Team.В данном уроке мы полностью подключим локацию к игре.
  
 +
 +
== Инструменты и ресурсы ==
 +
 +
[http://www.activestate.com/activeperl/downloads ActivePerl]<br />
 +
[http://stalkerin.gameru.net/downloads/stutils/acdc_40109.rar ACDC for SoC v.1.0004]<br />
 +
[http://stalkerin.gameru.net/downloads/stutils/acdc_for_clear_sky_4.rar ACDC for CS v.1.5.04]<br />
 +
[http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=getit&lid=363 ACDC for CoP]<br />
 +
[http://narod.ru/disk/95309001/ggTool.rar.html ggTool]<br />
 +
[http://stalkerin.gameru.net/downloads/stutils/soc-cop-maps_soft.7z ggEditor v.0.1]<br />
 +
 +
Распакованные ресурсы ТЧ или мода, из которого взят уровень (если вы берете уровень из мода, то вам наверняка не подойдет простой ACDC).
  
  
 
== Подготовка. ==
 
== Подготовка. ==
Устанавливаем active perl.
 
  
Заходим в папку с программой ggEditor_01.Создаем там папки Cs или Cop(Смотря на какую игру делаете) и папку Soc.В папке Soc создаем папку gamedata и кидаем в нее файл game.graph(Важно чтобы game.graph лежал там, иначе программа не прочитает.) из мода, или от ТЧ.В папке gamedata создаем папку levels и кидаем туда папку с уровнем, который мы хотим портировать. Далее возвращаемся в папку Soc и туда кидаем папку с ACDC для ТЧ, туда же кладём all.spawn.Запускаем соответствующий батник для распаковки all.spawn`а.
+
Устанавливаем интерпретатор '''ActivePerl'''.
  
Далее в папку ggEditor_01\Cs или Cop, кидаем папку с соответствующим ACDC, опять-же кладем туда all.spawn, распаковываем.
+
Заходим в папку с программой ggEditor. Создаем там папки ''CS'' или ''CoP'' (смотря на какую игру делаете) и папку ''SoC''.В папке ''SoC'' создаем папку ''gamedata'' и кидаем в нее файл '''game.graph''' (важно, чтобы '''game.graph''' лежал там, иначе программа не прочитает!) из мода, или от ТЧ. В папке ''gamedata'' создаем папку ''levels'' и кидаем туда папку с уровнем, который мы хотим портировать. Далее возвращаемся в папку ''SoC'' и туда кидаем папку с ACDC для ТЧ, туда же кладём '''all.spawn'''.Запускаем соответствующий батник для распаковки '''all.spawn'''`а.
  
В итоге у нас должно получиться 2 распакованных all.spawn`а, game.graph от ТЧ и папка с переносимым уровнем.
+
Далее в папку ''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, ждем некоторое время, после чего появляются имена локаций, а рядом с ними числа. Смотрим это число рядом с нашей локацией(в ЧН это скорее всего будет 1620, а в ЗП 934).Далее разворачиваем alife_ файл с нашей локацией, ищем там строку «game_vertex_id» и пишем там число которое появилось рядом с нашей локацией при запуске батника ggtool.Затем обращаем свой взор на строку «level_vertex_id».К исходному значению строки прибавляем число, которое мы записали в строку «game_vertex_id», полученное число записываем. Далее, в добавляемых потом секциях спавна нужно писать эти числа. Мы подогнали вертексы.
+
Запускаем программу 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'''.
  
Затем открываем файл all.ltx.Вписываем туда свой alife_ файл локации, way_ файлы не трогаем. Меняем на соответствующее число локации строку level_count.
+
Далее идем в папку с ACDC от ТЧ, находим там файл '''alife_наша_локация''' и копируем его. Затем шуруем в папку с ACDC от ЧН/ЗП, вставляем скопированный нами файл. Открываем этот файл, сносим все, оставляем только одну секцию спавна (лучше всего, если это будет какой-нибудь объект), присваиваем секции номер не меньше 20000, сворачиваем на время этот файл. Далее нужно подогнать вертексы. Для этого запускаем '''ggTool.bat''', ждем некоторое время, после чего в '''parse_lvids.ltx''' появляются имена локаций, а рядом с ними числа. Смотрим это число рядом с нашей локацией (в ЧН это скорее всего будет 1620, а в ЗП 934). Далее разворачиваем '''alife_''' файл с нашей локацией, ищем там строку ''game_vertex_id'' и пишем там число, которое появилось рядом с нашей локацией при запуске батника ggTool. <span style="color: gray">А вот строку ''level_vertex_id'' трогать не следует, т.к. вершины уровня в нашем случае остаются неизменными. [[Участник:RedPython|RedPython]] 10:04, 21 ноября 2010 (UTC) </span> Мы подогнали вертексы.
  
После этого открываем файл alife_zaton(для ЗП) или alife_marsh(для ЧН)и ищем там гг по строке «section_name = actor».Нашли?Отлично. Теперь присваиваем этой секции спавна позицию(новую позицию прописываем также в строке "upd:position = ") и вертексы как у единственного предмета в файле alife_новая_локация. При следующей распаковке, если вы все сделали правильно, наш актор окажется в файле alife_новая_лока.
+
Затем открываем файл '''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.
+
Мы почти закончили с пробной сборкой новой локации (пока без переходов на другие уровни).
  
В этих файлах ищем такие строки(для ЗП):
+
Осталось только прописать наш новый уровень в файл ''ACDC_CoP\acdccop.pl'' (для ЗП), либо в файле ''ACDC_CS\stkutils\level.pm''.
  
<code>
+
В этих файлах ищем такие строки (для ЗП):
  
 +
<perl>
 
use constant levels_info => (
 
use constant levels_info => (
{ gvid0 => 934,   },
+
{ gvid0 => 934, },
{ gvid0 => 883, name => 'jupiter_underground' },
+
{ gvid0 => 883, name => 'jupiter_underground' },
{ gvid0 => 857, name => 'labx8' },
+
{ gvid0 => 857, name => 'labx8' },
{ gvid0 => 666, name => 'pripyat' },
+
{ gvid0 => 666, name => 'pripyat' },
{ gvid0 => 317, name => 'jupiter' },
+
{ gvid0 => 317, name => 'jupiter' },
{ gvid0 => 0, name => 'zaton' },
+
{ gvid0 => 0,   name => 'zaton' },
 +
</perl>
  
</code>
+
И если у вас число, когда мы запускали батник '''ggTool''', тоже 934, то прописываем так:
 
+
И если у вас число когда мы запускали батник ggtool тоже 934 то прописываем так:
+
 
+
<code>
+
  
 +
<perl>
 
use constant levels_info => (
 
use constant levels_info => (
{ gvid0 => 934,         name => 'ваша_локация' },
+
{ gvid0 => 934, name => 'ваша_локация' },
{ gvid0 => 883, name => 'jupiter_underground' },
+
{ gvid0 => 883, name => 'jupiter_underground' },
{ gvid0 => 857, name => 'labx8' },
+
{ gvid0 => 857, name => 'labx8' },
{ gvid0 => 666, name => 'pripyat' },
+
{ gvid0 => 666, name => 'pripyat' },
{ gvid0 => 317, name => 'jupiter' },
+
{ gvid0 => 317, name => 'jupiter' },
{ gvid0 => 0, name => 'zaton' },
+
{ gvid0 => 0,   name => 'zaton' },
 +
</perl>
  
</code>
+
А в файле '''level.pm''' от ACDC ЧН вы увидите такой текст:
 
+
А в файле level.pm от ACDC ЧН вы увидите такой текст:
+
 
+
<code>
+
  
 +
<perl>
 
use constant levels_info => (
 
use constant levels_info => (
{ gvid0 => 1620,   },
+
{ gvid0 => 1620, },
{ gvid0 => 1573, name => 'l12_hospital' },
+
{ gvid0 => 1573, name => 'l12_hospital' },
{ gvid0 => 1565, name => 'l11_stancia2' },
+
{ gvid0 => 1565, name => 'l11_stancia2' },
{ gvid0 => 1524, name => 'l10_limansk' },
+
{ gvid0 => 1524, name => 'l10_limansk' },
{ gvid0 => 1511, name => 'l09_agroprom_undeground' },
+
{ gvid0 => 1511, name => 'l09_agroprom_undeground' },
{ gvid0 => 1313, name => 'l08_military' },
+
{ gvid0 => 1313, name => 'l08_military' },
{ gvid0 => 1212, name => 'l07_yantar' },
+
{ gvid0 => 1212, name => 'l07_yantar' },
{ gvid0 => 1057, name => 'l06_agroprom' },
+
{ gvid0 => 1057, name => 'l06_agroprom' },
{ gvid0 => 961, name => 'l05_red_forest' },
+
{ gvid0 => 961, name => 'l05_red_forest' },
{ gvid0 => 743, name => 'l04_darkvalley' },
+
{ gvid0 => 743, name => 'l04_darkvalley' },
{ gvid0 => 472, name => 'l03_escape' },
+
{ gvid0 => 472, name => 'l03_escape' },
{ gvid0 => 245, name => 'l02_garbage' },
+
{ gvid0 => 245, name => 'l02_garbage' },
{ gvid0 => 0, name => 'l01_marsh' },
+
{ gvid0 => 0,   name => 'l01_marsh' },
 
+
</perl>
</code>
+
  
 
Прописать там свой уровень нужно точно так-же как в файле от ACDC ЗП:
 
Прописать там свой уровень нужно точно так-же как в файле от ACDC ЗП:
  
<code>
+
<perl>
 +
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' },
 +
</perl>
  
use constant levels_info => (
+
<span style="color: gray">По идее, в levels_info следует прописать также верхний вертекс последнего уровня. [[Участник:RedPython|RedPython]] 10:04, 21 ноября 2010 (UTC) </span>
{ 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' },
+
  
</code>
+
Всё. Собираем '''all.spawn'''.
  
Всё.Собираем all.spawn.
 
  
 
== Сборка геймдаты. ==
 
== Сборка геймдаты. ==
Осталось собрать gamedat`у для игры и смотреть что получилось.
 
Итак, приступим:
 
  
В папке с игрой создаем папку gamedata, а в ней папки configs, levels, spawns.В папку spawns ложим получившийся при сборке all.spawn.new(или new.spawn), не забывая переименовать его в all.spawn.В папку levels ложим уровень из ggEditor_01\Soc\gamedata\levels\ваша_локация.Затем заходим в папку с уровнем, удаляем файл level.ai и переименовываем файл level.ai10 в level.ai.
+
Осталось собрать gamedata`у для игры и посмотреть, что получилось.
 +
Итак, приступим.
  
Теперь осталось только прописать уровень в конфигах.Из распакованной геймдаты игры берем файлы configs\game_graphs.ltx, game_levels.ltx, game_maps_single.ltx.
+
В папке с игрой создаем папку ''gamedata'', а в ней папки ''configs'', ''levels'', ''spawns''. В папку ''spawns'' кладем получившийся при сборке '''all.spawn.new''' (или '''new.spawn'''), не забывая переименовать его в '''all.spawn'''. В папку ''levels'' кладем уровень из ''ggEditor_01\SoC\gamedata\levels\ваша_локация\''. Затем заходим в папку с уровнем, удаляем старый файл '''level.ai''' и переименовываем файл '''level.ai10''' в '''level.ai'''.
  
game_graphs.ltx для ЧН должен выглядеть так:
+
Теперь осталось только прописать уровень в конфигах. Из распакованной геймдаты игры берем файлы '''configs\game_graphs.ltx''', '''\game_levels.ltx''', '''\game_maps_single.ltx'''.
  
<code>
+
'''game_graphs.ltx''' для ЧН должен выглядеть так:
  
 +
<ini>
 
[location_0]
 
[location_0]
   000         = "..."
+
   000 = "..."
   001         = "эскейп"
+
   001 = "эскейп"
   002         = "свалка"
+
   002 = "свалка"
   003         = "агропром"
+
   003 = "агропром"
   004         = "агропром-подземка"
+
   004 = "агропром-подземка"
   005         = "темная долина"
+
   005 = "темная долина"
   006         = "лаборатория X-18"
+
   006 = "лаборатория X-18"
   007         = "даркскейп"
+
   007 = "даркскейп"
   008         = "Бар"
+
   008 = "Бар"
   009         = "Росток"
+
   009 = "Росток"
   010   = "Янтарь"
+
   010 = "Янтарь"
   011   = "лаборатория X-16"
+
   011 = "лаборатория X-16"
   012   = "Милитари"
+
   012 = "Милитари"
   013   = "Мертвый город"
+
   013 = "Мертвый город"
   014   = "Радар"
+
   014 = "Радар"
   015   = "Радар бункер"
+
   015 = "Радар бункер"
   016   = "Припять"
+
   016 = "Припять"
   017   = "станция АЭС"
+
   017 = "станция АЭС"
   018         = "ваша_локация"
+
   018 = "ваша_локация"
 
+
  
 
[location_1]
 
[location_1]
   000         = "..."
+
   000 = "..."
   001         = "ограниченный доступ"
+
   001 = "ограниченный доступ"
   002   = "запрещенный доступ"
+
   002 = "запрещенный доступ"
 
    
 
    
 
[location_2]
 
[location_2]
   000         = "..."
+
   000 = "..."
   001   = "не для игрока"
+
   001 = "не для игрока"
  
 
[location_3]
 
[location_3]
   000         = "..."
+
   000 = "..."
   001         = "ваша_локация"
+
   001 = "ваша_локация"
 
+
</ini>
</code>
+
 
+
game_graphs для ЗП должен выглядеть так:
+
  
<code>
+
'''game_graphs.ltx''' для ЗП должен выглядеть так:
  
 +
<ini>
 
[location_0]
 
[location_0]
   000         = "..."
+
   000 = "..."
   001         = "ваша_локация"
+
   001 = "ваша_локация"
   002         = "sim_smart_2"
+
   002 = "sim_smart_2"
   003         = "sim_smart_3"
+
   003 = "sim_smart_3"
   004         = "sim_smart_4"
+
   004 = "sim_smart_4"
   005         = "sim_smart_5"
+
   005 = "sim_smart_5"
   006         = "sim_smart_6"
+
   006 = "sim_smart_6"
   007         = "sim_smart_7"
+
   007 = "sim_smart_7"
   008         = "sim_smart_8"
+
   008 = "sim_smart_8"
   009         = "sim_smart_base"
+
   009 = "sim_smart_base"
 
    
 
    
 
 
 
 
[location_1]
 
[location_1]
   000         = "..."
+
   000 = "..."
   001         = "ограниченный доступ"
+
   001 = "ограниченный доступ"
   002   = "запрещенный доступ"
+
   002 = "запрещенный доступ"
 
    
 
    
 
[location_2]
 
[location_2]
   000         = "..."
+
   000 = "..."
   001   = "не для игрока"
+
   001 = "не для игрока"
  
 
[location_3]
 
[location_3]
   000         = "..."
+
   000 = "..."
   ...          . .......................
+
   ....
   112         = "pri_a22_smart_terrain"
+
  ....
   113         = "pri_a25_smart_terrain"
+
  ....
   114         = "pri_a28_arch"
+
   112 = "pri_a22_smart_terrain"
   115         = "pri_a28_base"
+
   113 = "pri_a25_smart_terrain"
   116         = "pri_b28_evac"
+
   114 = "pri_a28_arch"
   117         = "pri_a28_heli"
+
   115 = "pri_a28_base"
   118         = "pri_a28_school"
+
   116 = "pri_b28_evac"
   119         = "pri_a28_shop"
+
   117 = "pri_a28_heli"
   120         = "pri_b301"
+
   118 = "pri_a28_school"
   121         = "pri_b302"
+
   119 = "pri_a28_shop"
   122         = "pri_b303"
+
   120 = "pri_b301"
   123         = "pri_b304_monsters_smart_terrain"
+
   121 = "pri_b302"
   124         = "pri_b305_dogs"
+
   122 = "pri_b303"
   125         = "pri_b306"
+
   123 = "pri_b304_monsters_smart_terrain"
   126         = "pri_b307"
+
   124 = "pri_b305_dogs"
   127         = "pri_b35_mercs"
+
   125 = "pri_b306"
   128         = "pri_b35_military"
+
   126 = "pri_b307"
   129         = "pri_b36_smart_terrain"
+
   127 = "pri_b35_mercs"
   130         = "pri_sim_1"
+
   128 = "pri_b35_military"
   131         = "pri_sim_2"
+
   129 = "pri_b36_smart_terrain"
   132         = "pri_sim_3"
+
   130 = "pri_sim_1"
   133         = "pri_sim_4"
+
   131 = "pri_sim_2"
   134         = "pri_sim_5"
+
   132 = "pri_sim_3"
   135         = "pri_sim_6"
+
   133 = "pri_sim_4"
   136         = "pri_sim_7"
+
   134 = "pri_sim_5"
   137         = "pri_sim_8"
+
   135 = "pri_sim_6"
   138         = "pri_sim_9"
+
   136 = "pri_sim_7"
   139         = "pri_sim_10"
+
   137 = "pri_sim_8"
   140         = "pri_sim_11"
+
   138 = "pri_sim_9"
   141         = "pri_sim_12"
+
   139 = "pri_sim_10"
   142         = "ваша_локация"
+
   140 = "pri_sim_11"
 +
   141 = "pri_sim_12"
 +
   142 = "ваша_локация"
  
     
 
 
[graph_points_draw_color_palette]
 
[graph_points_draw_color_palette]
default = 0x6000ffff  
+
  default = 0x6000ffff  
000_000_000_000 = 0x60ff00ff
+
  000_000_000_000 = 0x60ff00ff
 +
</ini>
  
 
+
Далее лезем в '''game_levels.ltx'''.
</code>
+
Там в самом начале, где список уровней, вписываем ''level183'' (число не менее 183.)
 
+
Далее лезем в game_levels.ltx.
+
Там в самом начале, где список уровней, вписываем "level183"(число не менее 183.)
+
 
Листаем файл до самого конца и в конце пишем следующее:
 
Листаем файл до самого конца и в конце пишем следующее:
  
<code>
+
<ini>
 
+
 
[level183]
 
[level183]
 
name  = ваша_локация
 
name  = ваша_локация
Строка 230: Строка 232:
 
weathers = [default]
 
weathers = [default]
 
id  = 183
 
id  = 183
 +
</ini>
  
</code>
+
Затем открываем файл '''game_maps_single.ltx''' и прописываем свой уровень в секции ''[level_maps_single]''.
 
+
Затем создаем примерно такую секцию для нашего уровня:
Затем открываем файл game_maps_single.ltx и прописываем свой уровень в секции "[level_maps_single]", а затем создаем примерно такую секцию для нашего уровня:
+
 
+
<code>
+
  
 +
<ini>
 
[ваша_локация]
 
[ваша_локация]
        global_rect                     = 307.0, 90.0, 717.0, 500.000000
+
  global_rect = 307.0, 90.0, 717.0, 500.000000
        weathers                         = dynamic_default
+
  weathers   = dynamic_default
 
+
</ini>
</code>
+
  
 
----
 
----
  
Всё.Запускайте игру и пробуйте, что получилось.
+
Всё. Запускайте игру и пробуйте, что получилось.
  
  
 
== Соединение с остальными уровнями. ==
 
== Соединение с остальными уровнями. ==
Предлагаю вам не терять зря времени просто бегая по подключенной локации, а замерить координаты для создания перехода.Координаты будем снимать на 2-х локациях:на подключенной и на той на которую вы хотите сделать переход соответственно.На каждой локации нам нужно снять по две координаты(координата самого перехода и координата места в которое будет бросать при переходе с второй локации, вторую координату делаем на пару метров дальше, потому как если сделать близко, то сразу же будет кидать обратно, на локацию с которой переходим.).Как снять координаты, я думаю все знают, поэтому объяснять здесь не буду.
+
 
 +
Предлагаю вам не терять зря времени, просто бегая по подключенной локации, а замерить координаты для создания перехода.Координаты будем снимать на 2-х локациях: на подключенной и на той, на которую вы хотите сделать переход соответственно. На каждой локации нам нужно снять по две координаты (координата самого перехода и координата места, в которое будет бросать при переходе с второй локации, вторую координату делаем на пару метров дальше, потому как если сделать близко, то сразу же будет кидать обратно, на локацию с которой переходим). Как снять координаты, я думаю все знают, поэтому объяснять здесь не буду.
  
 
Мы отмерили все необходимые нам координаты.
 
Мы отмерили все необходимые нам координаты.
  
Затем распаковываем сделанный нами ранее all.spawn.Теперь в нужных нам локациях, в alife_ файлах добавляем следующую секцию спавна:
+
Затем распаковываем сделанный нами ранее '''all.spawn'''. Теперь в нужных нам локациях, в '''alife_''' файлах добавляем следующую секцию спавна:
  
<code>
+
<ini>
 
+
[40000] ;свободный номер секции
[1]  
+
; cse_abstract properties
; cse_abstract properties  
+
section_name = level_changer
section_name = level_changer  
+
name = escgar_level_changer ;уникальное имя для секции перехода
name = escgar_level_changer - уникальное имя
+
position = 28.060224533081,16.556184768677,685.80151367188 ;координаты перехода
position = 28.060224533081,16.556184768677,685.80151367188 - координаты перехода
+
 
direction = 0,0,0  
 
direction = 0,0,0  
cse_abstract__unk1_h16 = 0x1  
+
cse_abstract__unk1_h16 = 0x1
; cse_alife_object properties  
+
 
game_vertex_id = 1142 - геймвертексы
+
; cse_alife_object properties
 +
game_vertex_id = 1142 ;геймвертексы
 
distance = 0
 
distance = 0
level_vertex_id = 308110 - геймвертексы
+
level_vertex_id = 308110 ;левелвертексы
 
object_flags = 0xffffff3e
 
object_flags = 0xffffff3e
 +
 
; cse_shape properties  
 
; cse_shape properties  
 
shapes = shape0  
 
shapes = shape0  
Строка 276: Строка 278:
 
shape0:axis_z = 0,0,1.25219917297363  
 
shape0:axis_z = 0,0,1.25219917297363  
 
shape0:offset = 0,0,0  
 
shape0:offset = 0,0,0  
 +
 
; cse_alife_space_restrictor properties  
 
; cse_alife_space_restrictor properties  
 
restrictor_type = 3  
 
restrictor_type = 3  
 +
 
; cse_alife_level_changer properties  
 
; cse_alife_level_changer properties  
dest_game_vertex_id = 1187 - вертексы локи на которую ведет переход
+
dest_game_vertex_id = 1187 ;вертексы локи, на которую ведет переход
dest_level_vertex_id = 212769 - вертексы локи на которую ведет переход
+
dest_level_vertex_id = 212769 ;вертексы локи, на которую ведет переход
dest_position = 39.396331787109,0.48722490668297,-299.7674505469 - позиция куда кидает
+
dest_position = 39.396331787109,0.48722490668297,-299.7674505469 ;позиция, куда кидает
dest_direction = 0,0,0 - поворот гг
+
dest_direction = 0,0,0 ;направление взгляда игрока при появлении
dest_level_name = l02_garbage - на какую локу кидает
+
dest_level_name = l02_garbage ;имя локации, на которую ведет переход
 
dest_graph_point = start_actor_01
 
dest_graph_point = start_actor_01
silent_mode = 1  
+
silent_mode = 1 ;режим "тихого" перехода
; se_level_changer properties
+
  
</code>
+
; se_level_changer properties
 +
</ini>
  
Изменяем только те места, которые я прокомментировал, комментарии соответственно, удаляем.
+
<span style="color: gray"> Пояснения после знаков ; можно не удалять, движок воспримет их именно как комментарии. [[Участник:RedPython|RedPython]] 10:04, 21 ноября 2010 (UTC) </span>
Всё готово.Собираем all.spawn и запихиваем в игру.
+
<br />
 +
Всё готово. Собираем '''all.spawn''' и запихиваем в игру.
  
 
----
 
----
'''Убедительная просьба к начинающим модмейкерам.Пожалуйста, если вы только начали заниматься модами, то я вам настоятельно не советую заниматься подключением локаций.Наберитесь опыта, подучитесь элементарному.Я вас учить этому не подписывался.'''
+
'''Убедительная просьба к начинающим модмейкерам. Пожалуйста, если вы только начали заниматься модами, то я вам настоятельно не советую заниматься подключением локаций. Наберитесь опыта, подучитесь элементарному. Я вас учить этому не подписывался.'''
  
Да и еще.Если будете переносить секции спавна, то для массовой замены гейм вертексов и левел вертексов можно использовать блокнот: открываем наш файл в блокноте=> правка=> заменить, и пишем что на что заменять.
+
Да, и еще. Если будете переносить секции спавна, то для массовой замены геймвертексов и левелвертексов можно использовать блокнот: открываем наш файл в блокноте=>правка=>заменить, и пишем, что на что заменять. Также можно использовать '''Vertex Parser''' или '''Spawn Parser 2.0 beta'''.
 
----
 
----
  

Версия 10:04, 21 ноября 2010

На днях пообщался с одним человеком, узнал как подключать локации к ЗП/ЧН через программу от 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)

Если у вас что-то не получается или появились вопросы, есть тема на форуме.

Другие места
LANGUAGE