В этой статье я не буду писать тупые и неинтересные уроки, которые есть в любом факе по модмейкерству, а буду помещать лишь интересные (на мой взгляд) уроки и небольшие статьи
Добавим в файл config\gameplay\encyclopedia_zone.xml новую статью:
<!-------------------------------- Activation - Basic ----------------------------->
<article id="zone_anomalies_activation_basic" name="zone_anomalies_activation-basic" group="Anomalies">
<texture x="500" y="150" width="100" height="100">ui_icon_photo</texture>
<text>enc_zone_anomalies_activation_basic</text>
</article>
Здесь:
article id - внутреннее имя статьи, именно на него ссылаются в файлах игры name - имя статьи, отображаемое в игре, подгружается из строкового массива texture - картинка и её позиция в статье, в данном случае мы использовали обычный белый шум text - текст статьи, отображаемый в игре, подгружается из строкового массива
Добавим например в config\gameplay\info_l01escape.xml (инфопорции уровня "Кордон") ссылку на получение статьи - скажем, к трупу у туннеля, при обыске которого выдается информация о аномалиях в туннеле (вы его обнаруживаете, проходя второе спецзадание от Сидоровича). Найдем эти строки и дополним их:
Так как в статье у нас есть такое поле:
<text>enc_zone_anomalies_activation_basic</text>
Да и название тоже не написано прямо, а ссылается на определенную строку, то добавим этот самый text в config\text\rus\string_table_enc_zone.xml, в нашем случае:
<string id="enc_zone_anomalies_activation-basic">
<text>Активация - базис</text>
</string>
<string id="enc_zone_anomalies_activation_basic">
<text>С артефактами связана, помимо всего прочего, ''(ну, и так далее, там большой текст)''...</text>
</string>
Дополнительно.
Чтобы статья добавлялась при получении определенного задания, в ..._task.xml (вместо ... стоит название уровня) нужно прописать конструкцию вида:
<article>название_задания_descr</article>
<!-- труп у аномалии -->
<info_portion id="esc_tutorial_dead_novice">
<article>tutorial_moving_anomaly</article>
<article>zone_anomalies_activation_basic</article>
</info_portion>
Главное - никогда не путайте article id, name и text статьи. Я в данном примере это сделать легко. Лучше называйте их непохожими друг на друга названиями.
В файле gamedata\scripts\xr_kamp.script находим:
-- играть на гармошке
-- if npc:object("harmonica_a") then
-- self.npc[npc_id].states["play_harmonica"] = true
-- self.npc[npc_id].states["wait_harmonica"] = true
-- self.kamp_states["pre_harmonica"] = true
-- self.kamp_states["harmonica"] = true
-- self.kamp_states["post_harmonica"] = true
-- else
Раскомментируем эти строки, для этого удалим --. перед строками, исключения строка "-- играть на гармошке"
Затем нужно добавить музыку. Например сталкерам, открываем папку gamedata\sounds\characters_voice\human_01\stalker\music и добавляем туда свою музыку. Имя файла должно быть harmonica_* (где *, 1, 2, 3 и т.д.). Формат файла должен быть *.ogg. Таким же образом добавляем музыку остальным группировкам.
При заходе на экран главного меня муз. заставка будет выбираться случайно из добавленных вами.
1. В директорию gamedata\sounds\music положить два канальных ogg-файла с нужной музыкой, например: my_music_l.ogg (левый канал) и my_music_r.ogg (правый канал)
2. Открыть файл gamedata\config\ui\ui_mm_main.xml, найти в нем строку:
<menu_sound random="0" >
и заменить на:
<menu_sound random="1" >
3. В этом же файле найти строку:
<menu_music>music\wasteland2</menu_music>
и ниже нее выставить следующую строку:
<menu_music>music\my_music</menu_music>
4. Сохранить файл.
5. Если требуется вставить больше муз. заставок, то в параметре random укажите их количество.
!!! Возьмите на заметку !!!
в строке <menu_sound random="0" >
вместо 0 указывайте не количество композиций, а количество композиций - 1, то есть, если вы добавили скажем еще одну мелодию, к той, что была по дефаулту у вас получится примерно так:
<menu_sound random="1" >
<menu_music>music\wasteland2</menu_music>
<menu_music>music\my_music</menu_music>
1. Кладём ролик в папку gamedata\textures\sleep\. Собственно, в любую папку, лишь бы она была в каталоге textures. Просто в sleep лежат ролики сна в оригинале.
имя файла любое, формат ogm, а разрешение ролика вроде можно сделать любое. Я не стал заморачиваться и просто скопировал существующий ролик сна с монолитом.
2. Озвучку ролика кладем по той-же схеме в папку в корневом каталогу gamedata\sounds\. У меня папка называется my_sleep. Имена файлов для левого и правого канала должны выглядеть так
my_sleep_sound_l.ogg
и
my_sleep_sound_r.ogg
длина звуков может быть разной и вообще говоря не совпадать с длиной ролика.
3. Правим файл gamedata\config\ui\ui_movies.xml. Добавляем туда что-то в этом роде:
<my_dream>
<play_each_item>1</play_each_item>
<global_wnd x="0" y="0" width="1024" height="768">
<auto_static x="0" y="0" width="1024" height="768" stretch="1">
<window_name>back</window_name>
<texture>intro\intro_back</texture>
</auto_static>
</global_wnd>
<item type="video">
<sound>my_sleep\my_sleep_sound</sound>
<pause_state>on</pause_state>
<function_on_stop>sleep_manager.stopper</function_on_stop>
<video_wnd x="0" y="0" width="1024" height="768" stretch="1">
<texture x="0" y="1" width="512" height="286">sleep\dream_sarcofag</texture>
</video_wnd>
</item>
</my_dream>
Название тега my_dream - это моё имя для сна. Если я верно всё понимаю, то вся эта фигня описывает окно, в котором играется видеоролик.
4. Теперь собственно добавляем сон. Правим файл gamedata\config\misc\dream.ltx.
Там есть секции с именами [regular_dream#] где # - это номера снов. Сейчас там есть regular_dream1, regular_dream2 и regular_dream3. Добавляем секцию
[regular_dream4]
dream = my_dream
probability = 40
type = happy
параметры: dream - это ранее заданное имя сна (в нашем случае my_dream). probability - ясное дело, что нужно для вычисления вероятности появления именно этого сна. Но я пока не понял по какому алгоритму она вычисляется на основе этого параметра. Я просто сделал число побольше, дабы протестировать побыстрее. type - может быть nightmare, normal и happy. По названию вроде понятно, что это. Но на что влияет пока не ясно.
5. Ну и завершающий этап. В этом же файле в секцию [dreams] к параметру regular добавляем к списку новый сон regular_dream4. Вроде такого:
regular = regular_dream1, regular_dream2, regular_dream3, regular_dream4
Тестируем... Опа! Новый сон. Поскольку я звуки взял случайно, то при этом в левом ухе у меня орет кот, а в правом играет мрачный эмбиент =)
Ну и естественно работать будет только при установленном АМК. Что там именно сделано, для того чтобы сон вообще был, я пока не разбирался.