В сегодняшнем уроке я расскажу вам, как подключить новые локации к игре, что нам для этого нужно:
Теперь немного описания к этим программам, какая за что отвечает:
- ActivePerl - нужен для работы скриптовых приложения ACDС и ggTool от Bardak'a
- ACDC CS - скрипт на основе Perl позволяющий декомпелировать и компелировать игровой ресурс all.spawn. (ЧН)
- ACDC SoC - скрипт на основе Perl позволяющий декомпелировать и компелировать игровой ресурс all.spawn (ТЧ)
- ggEditor v.0.1 - программа от АМК позволяющая работать с игровым ресурсом game.graph
- ggTool - скриптовое дополнение на основе Perl выщитывающее vertex'ы уровней.
И так приступим. Для начала нам надо определится от куда мы будем брать локации, то есть, будем брать из модов для ТЧ, либо же, возьмём стандартные локации от (ТЧ). Лично я в этом уроке буду подключать из оригинального ТЧ, и в качестве примера остановлюсь на "Баре 100 - Рентген", принцип подключения с другими уровнями идентичен.
1-я часть:
Приступим. Для начала надо распаковать db архивы (ТЧ), для того чтобы мы могли взять от туда всё необходимое, для подключения. Ниже прикреплена ссылка к универсальному декомпелятору игровых ресурсов серии игры S.T.A.L.K.E.R.
- Универсальный unpacker от Dordex'a - Скачать
2-я часть
Распаковываем в любое удобное для нас место ggEditor 01.
Далее заходим в папку с программой, и создаём две новые дополнительные папки CS и SoC. После в созданную папку CS распаковываем ACDC для Чистого Неба, тоже самое мы проделываем и с папкой SoC, только туда мы распаковываем ACDC для ТЧ, и в этой же папке (SoC) создаём ещё одну папку gamedata, в которой далее создаём папку levels и кладём из распакованных ресурсов ТЧ наш уровень, то есть (l05_bar). Далее из распакованных ресурсов ТЧ копируем файл game.graph в созданную папку gamedata ту что мы создали в папке (SoC). Теперь, в папку с acdc (CS) кладём all.spawn из распакованных ресурсов Чистого Неба, а в папку acdс (SoC) кидаем all.spawn из распакованных ресурсов ТЧ.
3-я часть
Декомпелируем оба файла all.spawn. После чего открываем ggEditor и видим там два окошка. В левом открываем game.graph от ТЧ, который мы скопировали в папку (SoC/gamedata), в правом окошке граф вшит в распакованном all.spawn от ЧН (CS/acdc) ищите его там, чтобы открыть граф нужно выбрать тип файлов, для ЧН это — graph.bin. Если вы всё правильно сделали, в левом и в правом окошке появится список графов уровней, выбираем в левом окошке наш уровень (l05_bar) и с помощью соответствующей стрелки переносим его в правое окно, после чего сохраняем (Правое окно). Всё, можете закрыть программу, она больше не нужна.
4-я часть
Если вы всё сделали правильно, то в папке с распаковочный acdc (CS) появится новый graph.bin.new, удаляем старый graph.bin а новый переименовываем. Теперь, идём в распаковочный acdc (SoC) и копируем alife файл нашего уровня (alife_l05_bar.ltx) в acds (CS). Далее в acdc (CS) распаковываем ранее скаченный ggTool и запускаем ggTool.bat, ждём окончания операции, после окончания ниже появится файл/список вертексов под каждый уровень (parse_lvids.ltx) - открываем его, у меня получилось вот:
У вас может и по другому быть. С каждым добавленным новым уровнем вертекс увеличивается. Но не в этом суть. Открываем наш скопированный alife_l05_bar.ltx, оставляем только одну секцию, лучше чтобы это был какой нибудь объект - присваиваем ей номер не меньше [20000], а остальные секции удаляем. Меняем в нашей секции game_vertex на тот что мы получили от ggTool, у меня (1620), сохраняем и сворачиваем. Далее открываем alife_marsh.ltx (в распакованном acdc CS) и ищем в нём секцию
Цитата
section_name = actor
Это секция главного героя, изменяем в ней (position = , upd:position = , game_vertex_id = , level_vertex = ) на те что указаны в секции нашего объекта в alife_05_bar.ltx. (Важно: в upd:position = указываются те же координаты что и в position = ). Всё, сохраняем всё, и в самом acdc открываем папку stkutils, в ней находим файл level.pm, открываем его обычным блокнотом, и в функции
Цитата
use constant levels_info => (
Добавляем наш уровень:
Цитата
{ gvid0 => 1620, name => 'l05_bar' },
Код
gvid0 => 1620 - game_vertex нашего уровня (ggTool)
name => l05_bar - Название уровня
Сохраняем, и после компилируем наш all.spawn, и если всё сделали правильно, то в дальнейшем при загрузке игры наш главный герой появится сразу же на нашем новом подключенном уровне.
5-я часть
Так, в принципе всё готово, осталось уже не много. И так, создаём gamedata папку в корневой папке с игрой ЧН, туда копируем из папки (ggEditor_01/SoC/gamedata) наш уровень (levels/05_bar), после заходим в папку с нашем уровнем и удаляем старый файл level.ai, а новый level.ai10 переименовываем в (level.ai). После создаём папку spawns (gamedata/spawns) и копируем туда наш скомпилированный в acdc CS all.spawn.new и переименовываем его в all.spawn. Далее создаём папку configs в (gamedata) и копируем туда 3 файла (game_graphs.ltx, game_levels.ltx, game_maps_single.ltx)
6-я часть
Открываем 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 = "l05_bar" ;Наш уровень
[location_1]
000 = "..."
001 = "ограниченный доступ"
002 = "запрещенный доступ"
[location_2]
000 = "..."
001 = "не для игрока"
[location_3]
000 = "..."
001 = "l05_bar" ;Наш уровень
Далее открываем game_levels.ltx и в самом конце функции [levels] добавляем:
Далее в самом конце ещё вот это добавляем:
Код
[level183]
name = l05_bar
caption = "l05_bar"
offset = 12000.0, 1000.0, 10000.0
weathers = [default]
id = 183
И последнее, открываем game_maps_single.ltx и ищем функцию [level_maps_single], в конце неё добавляем наш уровень:
И в самом конце это:
Код
[l05_bar]
global_rect = 101.0, 1572.0, 249.0, 1720.000000
music_tracks = yantar_musics
weathers = dynamic_default
Ну вроде всё, тестируйте, если будет что не понятно задавайте вопросы, ну а подробно о настройке уровней, я напишу в следующей теме, как и с помощью чего выводить уровень на глобальную карту, как исправить косяки освещения и прочее. :)