Привязка звуков к оружию

Итак, допустим все мы хорошо знаем как в Fallout 2 создавать предметы. В частности, оружие. Но давайте говорить откровенно, создание нового оружия - это не только создание новой графики. В лучшем случае это ещё и его озвучивание. Ведь каждому виду оружия должен соответствовать его уникальный звук (выстрела, перезарядки и т.д.) Об том как это сделать и пойдёт речь в данной статье.

Автор: Ray (alrays@yandex.ru)

Практическая часть

Что нам для этого понадобится:
1. Программа "acm2wav" (на сайте в разделе файлы)
2. Программа "regsnd" (на сайте в разделе файлы)
3. Любой распаковщик Dat файлов
4. Любой 16-ый редактор (к примеру WinHex или любой другой)

Для начала немного теории:
Поговорим о самых важных звуках применимых к оружию в Fallout2. Это два звука одиночных выстрела, два звука выстрела очередью и два звука перезарядки что в целом составляют единый набор звуков для конкретного оружия (есть и другие звуки - к примеру, звук при попытке выстрела при пустом магазине). Для одного оружия набор звуков (6 штук - 2 одиночный, 2 очередь и 2 перезарядка) может быть только один. Другое дело, что этот набор звуков может применяться к разному оружию. Для конкретной идентификации набора звуков ему присваивается Sound ID, который потом и применяется. Следует отметить, что в определённом наборе может отсутствовать какой-нибудь вид звука (выстрел очередью, перезарядка)
Все звуки находятся в папке "sound\sfx\". Имя же файла со звуком зависит от его типа (выстрел, перезарядка). Структура имени такова:
Первые два символа в имени означают тип звука.
WA - выстрел
WR - перезарядка
Третий символ означает Sound ID набора звуков применяемый в протофайле оружия (идентификатор звука, представляющий собой однобайтовое число, которое в записи имени файла выглядит как один символ из таблицы ASCII) В игре уже задействованы значения, представленные символами: '0-9', 'a-z', а также '!', '#', '$', '@'
Четвёртый символ зависит от типа звука. Для выстрела справедливо:
1 - одиночный выстрел
2 - очередь
для перезарядки возможны x или 1. Мы будем рассматривать стандартный вариант с 1 в имени.
Далее в имени идут три икса (xxx) за ними номер звука (в начале говорилось, что всех звуков всегда по два)

С теорией всё. Приступаем к практике.
Допустим, мы захотели перенести определённое оружие из Fallout Tactics. Мы успешно создали в Fallout2 нужный предмет с нужной графикой и теперь нам предстоит перенести его озвучку. Допустим это оружие - Spasm Neuro-Disruptor. Соответственно мы взяли из Fallout Tactics следующие файлы:
1.spasmreload.wav
2.spasmsingle1.wav
3.spasmsingle2.wav
4.выстрел очередью отсутствует
Договоримся, что мы решили добавить полностью новый набор звуков в Fallout2 (с новым Sound ID).

Этап 1

Берём любой Sound ID, который не используется в Фолле. Исключая уже задействованные возмём к примеру значение 0x25 - символ %
При помощи программы SND2ACM создаём из wav файлы формата acm (для каждого файла программа SND2ACM показывает количество сэмплов (Input type: WAV "XXXXX" samples) Запомните это значение). Далее переименовываем полученные:
spasmsingle1.acm в wa%1xxx1.acm (т.к. одиночный выстрел это WA; Sound ID - %)
spasmsingle2.acm в wa%1xxx2.acm (т.к. одиночный выстрел это WA; Sound ID - %)
spasmreload.acm в wr%1xxx1.acm (т.к. перезарядка это WR; Sound ID - %)

Этап 2

Поместим созданные acm файлы в нужную папку (sound\sfx\) Туда же при помощи любого распаковщика dat поместим файл SNDLIST.LST
Теперь нам нужно прописать наши файлы со звуками в SNDLIST.LST
Каждый файл сдесь имеет следующий вид:
-------------------------------------------------------------
Имя acm
Размер блока распакованных данных
реальный размер файла acm
номер (с шагом 2)
-------------------------------------------------------------

!!!Важно!!! Описание файлов в SNDLIST.LST отсортировано в порядке возрастания. Если вы не соблюдёте последовательность звук в игре не будет проигрываться!!!

Итак, учитывая предыдущее замечание начинаем прописывать все три файла. Это можно сделать как ручным способом так и автоматически (рекомендуется). Для автоматической регистрации всех файлов в SNDLIST.LST необходимо поместить созданные файлы acm в папку со звуками (sound\sfx\), туда же нужно скопировать программу regsnd (regsnd.exe).Теперь остаётся только запустить её. С регистрацией всё. Можно переходить к этапу 3. Ну а для параноиков вроде меня :) рассмотрим вариант ручной регистрации файлов. Рассмотрим на одном примере.
Пропишем файл wa%1xxx1.acm
Найдём место куда следует вписать нужный файл. Очевидно, что это после WA$2XXX2.ACM и перед WA01XXX1.ACM
Приведём кусок файла:
--------------------------------------------------------------
WA$2XXX1.ACM
69220
16661
1912
WA$2XXX2.ACM
67372
16324
1914
WA01XXX1.ACM
39988
8476
1916
WA01XXX2.ACM
36170
8051
1918
--------------------------------------------------------------

В результате внесения нашего файла мы получим следующее:
--------------------------------------------------------------
WA$2XXX1.ACM
69220
16661
1912
WA$2XXX2.ACM
67372
16324
1914

wa%1xxx1.acm
64516
15988
1916

WA01XXX1.ACM
39988
8476
1916
WA01XXX2.ACM
36170
8051
1918
--------------------------------------------------------------
Пустых строк в файле нет. Сделано для наглядности!!!

Рассмотрим подробнее. Ну wa%1xxx1.acm - понятно, это имя файла.
15988 - это размер acm файла(wa%1xxx1.acm).
Чтобы получить 64516 (Размер блока распакованных данных) необходимо выполнить следующее:
Полученное для каждого файла количество сэмплов умножте на 2(т.к. 1 сэмпл - 16 бит) Для файла wa%1xxx1.acm количество сэмплов 32258, а значит Размер блока распакованных данных равен 64516
А дальше заметим, что т.к. мы вставили наш файл в середину SNDLIST.LST мы тем самым сбили последовательность номеров (последнее поле). Теперь нам вручную необходимо это исправить, а именно увеличить номера всех записей, которые следуют после созданной нами на 2 (т.к. нумерация идёт с "шагом 2" :)
Т.е. наш файл станет 1916, следующий 1918 и т.д.
И последнее. В самом начале SNDLIST.LST идёт число, соответствующее количеству acm файлов. При каждом новом добавлении это число надо увеличивать. Ну вот теперь наш файл прописан. Тоже самое надо проделать с оставшимися двумя файлами.

Этап 3

Итак, все файлы уже подготовлены (присутствуют в фолле и определяются им). Теперь нам следует привязать полученный звук к конкретном оружию. Открываем маппер от BIS скажите вы... и будете глубоко неправы. Дело в том, что маппер не будет видеть вновь созданный нами новый набор звуков. Вернее не будет видеть нового имени в списке. Но будет всё видеть, если мы пропишем имя вручную.
Для этого откроем любым 16-ым редактором нужный нам прототип оружия. Допустим 00000011.pro
По смещению 0x79 укажем SoundID нашего оружия - 0x25 (т.е. '%' в шестнадцатеричном представлении).

На этом всё. Смотрите, пробуйте. В случае неприятностей - пишите. Основная проблема, при которой звуковые файлы не будут проигрываться - это ошибки при ручном прописывании файлов (неверный размер или неверная последовательность (сортировка))