Моддинг Сталкер: Часть 4 / Информационно-развлекательный портал постапокалиптической тематики

Мини-профиль
Приветствуем, гость!
-Приветствую тебя, гость!
Если ты здесь впервой, то зарегистрируйся. А если уже бывал здесь, то входи, не стесняйся!

Связь

Онлайн
Онлайн всего: 3
Заглянувших: 3
Сталкеров: 0

Посетители | Подробно..

Моддинг Сталкер: Часть 4

Главная » Статьи » Моддинг » Другое


Моддинг Сталкер: Часть 4

1. Добавление звуков в игру

Как правильно вставить свои звуки в игру: 
Во первых требуется звуковой редактор, можно любой ( я использую TotalAudioConverter). 
Нужно перевести ваши mp3 файлы в WAV формат 44100Гц, Моно, 16 бит, желательно сохранить в отдельную папку,(для последующих экспериментов). 
Почему сразу нельзя сохранить звук в формате ogg 44100Гц, Моно, 16 бит, в принципе 
можно, вот только в комментах Ogg файла должны прописываться параметры распространения звука по игровому миру. Именно по этой причине собственные звуки в игре практически не слышно на определенных расстояниях. 
Теперь нам понадобится X-Ray SDK – официальный пакет разработчика для игры S.T.A.L.K.E.R. 
Открываем меню Пуск/программы/X-Ray SDK жмём Map X-Drave для создания диска X. 
Заходим на диск Х и в папку rawdata/sounds копируем наши файлы в формате Wav( советую сразу переименовать файлы на те которые хотите заменить, геммороя будет меньше, если что-то не получится) 
Потом запускаем Level Editor, справа вверху находим меню Звуки (или Sounds, у кого английская версия) жмём и выбираем Звуковой редактор 
Там увидим наши файлы, выбираем файл и изменяем следующие параметры: 
Quality -0,00 изменяет битрейт файла,игра поддерживает до 80Kбит/c (ставьте не больше 0,4) 
MinDist = 1.00 - расстояние, с которого звук начнет затухать (практически это и есть громкость звука) 
MaxDist = 300.0 - максимальное расстояние, на котором звук будет слышен ГГ 
MaxAIDist = 300.0 - максимальное расстояние, на котором звук будут слышать NPC 
BaseVolume = 1.0 - громкость 
Дальше надо выбрать к какому типу отнести звук: приведу только нужные 
Game Type: 
- undefined – неопределенный, на них NPC не реагируют 
- Weapon shooting – выстрел оружия 
- NPC dying - смерть NPC (Здесь значение MaxAIDist надо поставить поменьше,в игре 
стоит 40м, из-за этого нельзя втихую перебить тех-же бандитов не поднимая шума) 
- NPC injuring - ранение NPC 
- NPC talking - разговор NPC 
- Anomaly idle – звуки аномалий 
- World ambient - звуки окружающего мира 
Теперь жмём ОК и ждём пока закончится синхронизация. Если всё получилось правильно 
идём на диск Х в папку gamedata\sounds там забираем готовые ogg файлы и вставляем их 
в игру. 
Удачного модинга!

2. Новые диалоги


Создание новых веток диалогов
Теория

1) Списки веток диалогов содержатся в файлах вида gamedata/config/gameplay/character_desc_*.xml 

Это, например: 

character_desc_zombied.xml character_desc_stalker.xml character_desc_garbage.xml ... 

Файлы character_desc_*.xml можно сравнить со стволом дерева диалогов. В них перечисляется названия прикрепляемых веток диалогов 

Например вот список веток диалога с Сидоровичем взятый из файла character_desc_escape.xml 
<start_dialog>escape_trader_start_dialog</start_dialog>
<actor_dialog>escape_trader_talk_info</actor_dialog>
<actor_dialog>escape_trader_jobs</actor_dialog>
<actor_dialog>tm_trader_dialog</actor_dialog>
<actor_dialog>tm_trader_reward</actor_dialog>
<actor_dialog>escape_trader_done_blockpost_box</actor_dialog>

В свою очередь каждая ветка диалога также может ветвится. 

2) Ветвление диалогов прописывается уже в других файлах. 

Например, ветвление диалога с Сидоровичем содержится в файле gamedata/config/gameplay/dialogs_escape.xml Возьмем оттуда, например, ветвление escape_trader_jobs. 

Ветвление имеет довольно большие масштабы, поэтому приведу только часть: 
<dialog id="escape_trader_talk_info">
<precondition>escape_dialog.trader_has_talk_info_wr</precondition>
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id="1">
<text>escape_trader_talk_info_1</text>
<next>100</next>
<next>99</next>
<next>9995</next>
</phrase>
...
<phrase id="0">
<text>escape_trader_talk_info_0</text>
<next>1</next>
</phrase>
</phrase_list>
</dialog>

Здесь <precondition>…</precondition> - это проверка выполнения условия. Ветка появится в диалоге, только если условие выполняется. Конкретно <precondition>escape_dialog.trader_has_talk_info_wr</precondition> из ветки escape_trader_talk_info - это обращение к функции trader_has_talk_info_wr, находящейся в файле скрипте gamedata/scripts/escape_dialog.script 

Функция выглядит так: 
function trader_has_talk_info_wr( trader, actor )
return true
end

То есть, судя по его структуре, <precondition>escape_dialog.trader_has_talk_info_wr</precondition> выполняется всегда, т.к. функция всегда возвращает истину и <dialog id="escape_trader_talk_info"> пропускается в списк реплик. 

Но для конкретной ветки может быть несколько precondition и других условий. 

Далее, <has_info>tutorial_end</has_info> - это еще одна проверка, на этот раз на наличие у игрока так называемых infoportions, выдаваемы в процессе ключевых диалогов. В данном случае это проверка на то, закончена ли определенная стадия туториала, или нет. Т.е. ветка допустится в список реплик если стадия туториала закончена. 

Более детально мы это разберем в конце статьи. 

А далее идут конкретные фразы, содержащие ссылки на вытекающие фразы, например: 
<phrase id="0">
<text>escape_trader_talk_info_0</text>
<next>1</next>
</phrase>

Это основа ветки escape_trader_talk_info. 

Важно! В любой основной ветке любого диалога фраза <phrase id="0"> будет основой, из которой далее будет все вытекать. Она должна обязательно присутствовать и в вашем диалоге. 

<next>1</next> - это ссылка на вытекающую фразу <phrase id="1">: 
<phrase id="1">
<text>escape_trader_talk_info_1</text>
<next>100</next>
<next>99</next>
<next>9995</next>
</phrase>

В свою очередь <next>100</next>, <next>99</next>, <next>9995</next> это ссылки на фразы веточки растущие из фразы <phrase id="1">. 

3) Текст каждой фразы содержится в третьем файле. Для диалога с Сидоровичем тексты лежат в файле gamedata/config/text/rus/stable_dialogs_escape.xml 
<string id="escape_trader_talk_info_0">
<text>Есть несколько вопросов.</text>
</string>
<string id="escape_trader_talk_info_1">
<text>Спрашивай, только я ведь всего не знаю. Сам понимаешь, сижу тут 
целыми днями, а жизнь - она вся там, снаружи, в Зоне. Могу рассказать о Зоне вообще, а немного 
могу о ближайших окрестностях, где сам ходил.</text>
</string>
...

Эти строки содержат тексты для фраз <phrase id="0"> и <phrase id="1"> 

Итого диалоги разложены по трем, а то и более файлам. 

Да кстати, путь по веткам может быть зацикленным, если того требует диалог. Например так: 
<phrase id="0">
<text>...</text>
<next>1</next>
<next>2</next>
</phrase>
<phrase id="1">
<text>...</text>
<next>11</next>
<next>12</next>
</phrase>
<phrase id="11">
<text>...</text>
<next>1</next> - Это возврат к фразе №1 (зацикливание) 
<next>111</next>
</phrase>
Практика

Добавим в диалог с Сидоровичем ветку своего собственного изготовления.Например такую: 
Меченый: Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые? 
Сидорович: Чего?!
Меченый: Ты их совсем, совсем не кормишь?
Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то 
мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.

Для этого: 

1) В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для trader припишем свою ветку с произвольным названием. Это будет, например, <actor_dialog>escape_trader_letat_gusi</actor_dialog>. 

Т.е у нас получится так: 
<specific_character id="escape_trader" no_random = "1">
...
<start_dialog>escape_trader_start_dialog</start_dialog>
<actor_dialog>escape_trader_talk_info</actor_dialog>
<actor_dialog>escape_trader_jobs</actor_dialog>
<actor_dialog>tm_trader_dialog</actor_dialog>
<actor_dialog>tm_trader_reward</actor_dialog>
<actor_dialog>escape_trader_done_blockpost_box</actor_dialog>
<actor_dialog>escape_trader_letat_gusi</actor_dialog>
</specific_character>


Записываем изменения, с этим файлом пока всё. 

2) Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml 

Диалогу: 
Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые? 
Сидорович: Чего?!!
Меченый: Ты их совсем, совсем не кормишь?
Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то 
мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.

Будет соответствовать такая структура: 
<phrase id="0">
<text>escape_trader_letat_gusi_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_letat_gusi_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text> escape_trader_letat_gusi_2</text>
<next>3</next>
</phrase>
<phrase id="3">
<text> escape_trader_letat_gusi_3</text>
</phrase>

Условия наличия ветки в диалоге можно взять из ветки <dialog id="escape_trader_talk_info">. 

Т.е берем условия <precondition>escape_dialog.trader_has_talk_info_wr</precondition> и <has_info>tutorial_end</has_info>. Можно было, конечно, прописать в скрипте еще одно условие для ветки, чтобы она появилась только один раз, а потом больше не возникала. Но об этом как-нибудь позже. 

В итоге у нас получилась такая структура: 
<dialog id="escape_trader_letat_gusi">
<precondition>escape_dialog.trader_has_talk_info_wr</precondition>
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id="0">
<text>escape_trader_letat_gusi_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_letat_gusi_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text> escape_trader_letat_gusi_2</text>
<next>3</next>
</phrase>
<phrase id="3">
<text> escape_trader_letat_gusi_3</text>
</phrase>
</phrase_list>
</dialog>

Её нужно вставить в любом месте между dialog id'ами других веток в файле dialogs_escape.xml. Главное - не промахнутся и засунуть именно между, а не внутрь одного из dialog id. 

После сохранения внесенных изменений с файлом dialogs_escape.xml все. 

3) Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml 

Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию: 
<string id="escape_trader_letat_gusi_0">
<text>Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые?</text>
</string>
<string id="escape_trader_letat_gusi_1">
<text>Чего?!</text>
</string>
<string id="escape_trader_letat_gusi_2">
<text>Ты их совсем, совсем не кормишь?</text>
</string>
<string id="escape_trader_letat_gusi_3">
<text>В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше 
антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился... 
Шутник.</text>
</string>


В любом месте между уже существующими string id. После сохранения изменений, у нас все готово. Можно загружать игру и смотреть что получилось. 
Дополнительно

Внимание! После патча 1.002 данный урок перестал работать. Причина - со вторым патчем несовместимо это условие: 
<precondition>escape_dialog.trader_has_talk_info_wr</precondition>

Дело в том, что во втором патче из файла escape_dialog.script была удалена функция: 
function trader_has_talk_info_wr( trader, actor ) 
return true 
end

Можно либо записать эту функцию обратно в escape_dialog.script, либо использовать другие более-менее подходящие условия, например: 
<precondition>escape_dialog.trader_alredy_give_job</precondition>

Всё. Мы научились писать простые диалоги.

Категория: Другое | Добавил: Alive (15.01.2011)
Просмотров: 2746 | Теги: Моддинг Ч.4 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email:
Код *:

Все материалы из игры, использованные для сайта принадлежат GSC Game World.
Все материалы и графическая составляющая сайта являются собственностью их владельцев, любое копирование
материалов и графики без разрешения на то администрации Запрещено!
Stalker: Shadow of Chernobyl · Stalker: Clear Sky · Stalker: Call of Pripyat · Stalker 2 · Survarium · Fallout 3/NV · Fallout 4
2010-2016 | Хостинг от uCoz | Powered by Math_Thunderpick and Alive


Яндекс.Метрика Тиц и pr сайта
Хостинг от uCoz