• Страница 1 из 1
  • 1
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Скрипты, конфиги, логика, движок » Перенос локации из cs в cop (Как перенести локацию с чистого неба в зов припяти)
Перенос локации из cs в cop
Казахстан  Janel
Понедельник, 06.01.2020, 16:01 | Сообщение # 1
Статус:
Гость:
Сообщений: 40
Награды: 0
Регистрация: 09.10.2019

Перенос локации из сталкер CS в сталкер CoP


Введение:

Решил написать статью о том как правильно перенести локацию из сталкер Clear sky (Чистое Небо) в сталкер Call of pripyat (Зов Припяти). Долго времени не займёт, на первый взгляд покажется тяжёлым но это довольно просто. И так перейдём ближе к делу.


Подготовка:


Для начала скачаем программы, которые нам понадобятся при подключении локации.

1. Универсальный распаковщик ресурсов игр Сталкер
2. ActivePerl
3. ggtool
4. ACDC_Cs
5. ACDC_Cop
6. ggEditor_01

При помощи распаковщика распакуем ресурсы ЧН и ЗП (прога имеет интуитивно понятный интерфейс, думаю проблем тут не возникнет)
Устанавливаем 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 от ЧН, а в правом — section4.bin от ЗП (они появятся после распаковки all.spawn'а) Нужно выбрать тип файлов для ЧН — graph.bin, а для ЗП — все файлы и открыть в папке с ACDC файл. В окошках мы видим список уровней. В левом окошке находим нужный нам уровень и нажимаем на соответствующую стрелку для переноса уровня в нужный нам граф. Нажимаем в правом окошке «сохранить».После того, как граф сохранился, можно закрыть программу, она нам больше не понадобится. Потом этого шагаем в папку с ACDC для ЗП и удаляем старые файлы section4.bin. Затем переименовываем файл section4.bin.new в section4.bin.

Далее идем в папку с ACDC от ЧН, находим там файл alife_наша_локация и копируем его. Затем шуруем в папку с ACDC от ЗП, вставляем скопированный нами файл. Открываем этот файл, сносим все, оставляем только одну секцию спавна (Лучше всего если это будет какой-нибудь объект, я например всегда оставляю Campfire, (костёр) присваиваем секции номер не меньше 20000, сворачиваем на время этот файл. Далее нужно подогнать вертексы. Для этого запускаем батник ggtool, ждем некоторое время, после чего появляются имена локаций, а рядом с ними числа. Смотрим это число рядом с нашей локацией (в ЗП это скорее всего будет 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"

[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


Возможные вылеты:


Код
FATAL ERROR
[error]Expression : cross_table().header().level_guid() == level_graph().header().guid()
[error]Function : CAI_Space::load
[error]File : D:\prog_repository\sources\trunk\xrGame\ai_space.cpp
[error]Line : 113
[error]Description : cross_table doesn't correspond to the AI-map

Данный вылет свидетельствует о том,что вы использовали распаковщик ресурсов игры не из этой темы. У вас при распаковке вашего уровня "съехала АИ-сетка"

Лечение: Использовать распаковщик предложенный выше. Или пересобрать АИ-сетку в SDK Level Editor.

Код
[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

Примечание: На компьютере должен быть обязательно установлен NetFramework версией не ниже 2.0
Это для тех, кто использует старые сборки ХР.
Скачать новейшею версию можно Тут

Готово! Запускайте игру и пробуйте, что получилось. Если есть вопросы отписываемся!
Сообщение отредактировал Janel - Понедельник, 06.01.2020, 16:15
  Злобная реклама
Понедельник, 06.01.2020, 16:01
Статус:
Сообщений: 666
Регистрация: 09.10.2019
Российская Федерация  Аruron
Понедельник, 06.01.2020, 16:24 | Сообщение # 2
Статус:
Гость:
Сообщений: 58
Награды: 4
Регистрация: 08.02.2018

А не проще засунуть локацию в sdk, переделать спавн актора, отредачить источники света,[если потребуется] а после просто скомпилировать спавн не мучая этот ACDC? При этом нам нужна всего одна программа. Зачем костылить всё это? smile Кроме того, даже ai-сетка пойдёт от ЧН версии. wink Да и она все равно будет редачиться уже при редизайне.
Сообщение отредактировал Аruron - Понедельник, 06.01.2020, 16:25
Казахстан  Janel
Понедельник, 06.01.2020, 17:11 | Сообщение # 3
Статус:
Гость:
Сообщений: 40
Награды: 0
Регистрация: 09.10.2019

Цитата Аruron ()
А не проще засунуть локацию в sdk, переделать спавн актора, отредачить источники света,[если потребуется] а после просто скомпилировать спавн не мучая этот ACDC? При этом нам нужна всего одна программа. Зачем костылить всё это? smile Кроме того, даже ai-сетка пойдёт от ЧН версии. wink Да и она все равно будет редачиться уже при редизайне.


Это конечно можно сделать но будут постоянные вылеты из-за спейс рестрикторов или различных граф поинтов прописанных на сталкер чистое небо. Есле хочется перенести через сдк то придется удолять лишнии рестрикторы, графы, спавн элементы а это поверь мне займёт больше времени чем просто перенести чистую локацию без всяких выкрутасов. А там уже и редактировать под себя как хочешь. wink
Сообщение отредактировал Janel - Понедельник, 06.01.2020, 17:19
Российская Федерация  Аruron
Понедельник, 06.01.2020, 19:22 | Сообщение # 4
Статус:
Гость:
Сообщений: 58
Награды: 4
Регистрация: 08.02.2018

Цитата Janel ()
но будут постоянные вылеты из-за спейс рестрикторов или различных граф поинтов прописанных на сталкер чистое небо


В смысле? Я же не говорю оставлять ЧН-овский спавн на месте, тоже можно легко удалить комбинацией клавиш. Я так себе уже пару локаций перенёс и всё в шоколаде
Российская Федерация  Lektorrr
Понедельник, 06.01.2020, 20:00 | Сообщение # 5
Статус:
Новичок:
Сообщений: 213
Награды: 5
Регистрация: 09.01.2013

Вы серьезно? ActivePerl? ggTool? В 2020 году то? Эти утилиты использовались, когда GSC ещё не выложили свой официальный инструментарий. Портировать с их помощью локации сейчас новичку - это самая настоящая пытка и трата времени, ведь можно просто перенести локацию с помощью SDK, причем даже не компилируя её при надобности.
Казахстан  Janel
Вторник, 07.01.2020, 12:13 | Сообщение # 6
Статус:
Гость:
Сообщений: 40
Награды: 0
Регистрация: 09.10.2019

Цитата Lektorrr ()
Вы серьезно? ActivePerl? ggTool? В 2020 году то? Эти утилиты использовались, когда GSC ещё не выложили свой официальный инструментарий. Портировать с их помощью локации сейчас новичку - это самая настоящая пытка и трата времени, ведь можно просто перенести локацию с помощью SDK, причем даже не компилируя её при надобности.


Цитата Аruron ()
В смысле? Я же не говорю оставлять ЧН-овский спавн на месте, тоже можно легко удалить комбинацией клавиш. Я так себе уже пару локаций перенёс и всё в шоколаде


Есть люди которые еще не освоили SDK так хорошо что-бы переводить локации в нём, поэтому таким людям в начале подойдёт и перевод кустарным методом. Чем работать в SDK методом тыка. wink
Казахстан  STRAZH
Пятница, 10.01.2020, 09:00 | Сообщение # 7
Статус:
Зевака:
Сообщений: 21
Награды: 7
Регистрация: 18.07.2014

А это не тот метод, который на Stalker Inside еще в 2010-м публиковали? Если так, то лучше им в наши дни не пользоваться.

Цитата Janel ()
Есть люди которые еще не освоили SDK так хорошо что-бы переводить локации в нём, поэтому таким людям в начале подойдёт и перевод кустарным методом. Чем работать в SDK методом тыка.


Ну да, ведь намного лучше потом методом тыка писать затычки для саунд рендера, сетки bound rect и ловить stack trace на поломанных сейвах.

Если и учиться модострою, то учиться нужно сразу нормально, по актуальной информации, а не использовать архаичные методы, которые сами по себе являлись костылями своих лет. Давай тогда ещё perl-скрипты вспомним, ACDC, правки Колгомора и утилит паки.
Сообщение отредактировал STRAZH - Пятница, 10.01.2020, 09:01
Казахстан  Janel
Пятница, 10.01.2020, 17:58 | Сообщение # 8
Статус:
Гость:
Сообщений: 40
Награды: 0
Регистрация: 09.10.2019

Цитата STRAZH ()
Если и учиться модострою, то учиться нужно сразу нормально, по актуальной информации, а не использовать архаичные методы, которые сами по себе являлись костылями своих лет. Давай тогда ещё perl-скрипты вспомним, ACDC, правки Колгомора и утилит паки.

Каждый выбирает метод который лучше подходит для тебя, хочешь работать в SDK? Работай, хочешь работать с файлами? Работай.
Каждый ищет удобный и подходящий для себя способ! vinsent
Сообщение отредактировал Janel - Пятница, 10.01.2020, 18:02
Форум » S.T.A.L.K.E.R. Модификации » Помощь в моддинге » Скрипты, конфиги, логика, движок » Перенос локации из cs в cop (Как перенести локацию с чистого неба в зов припяти)
  • Страница 1 из 1
  • 1
Поиск: