Журнал "Вопросы аудио и видео" №2

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

Кроме того, нехило было прочитать доку под названием "Формат файла CRITTER.DAT".
(эти документы будут весьма полезны как при изменении существующих, так и при добавлении новых звуков в Fallout 2).


Универсальная Отмазка

Некоторая часть информации, приводимой ниже, по ряду причин не проверена до конца. Спорные или непроверенные места будут специально обозначены, но, в любом случае,

не принимайте изложенное здесь за правду.
Сомневайтесь и перепроверяйте сами!

Обо всех найденных ошибках и несоответствиях сообщайте куда следует :)


Какие программы нам потребуются

В наших разборках со звуковым наследием Великой Игры нам потребуются следующие инструменты:

Да, при использовании утилок командной строки настоятельно рекомендую использовать соответствующие файл-менеджеры (FAR, WC и т.д) - не надо будет потом разыскивать результаты работы по всему диску :)


Совершенно необходимое примечаньице

Если не сказано обратного, пути к файлам Fallout 2 в данном документе указываются относительно каталога с данными Fallout или соответствующего ресурсного архива.

То же самое, но по-русски: если написано имя файла sound\sfx\ammo.acm, то имеется в виду

  1. либо файл patch000.dat\\sound\sfx\ammo.acm,
  2. либо (если первый файл не существует) Fallout2\data\sound\sfx\ammo.acm,
  3. либо (если и этого файла нет) master.dat\\sound\sfx\ammo.acm.

Кстати говоря, похоже именно по этой схеме Fallout 2 производит поиск всех своих файлов. Таким образом, если некоторая версия файла, который мы решили изменить, уже имеется в патче patch000, то придется либо произвести замену непосредственно в патче, либо подделать заголовок патча таким образом, чтобы Fallout просто не видел соответствующий файл. В рамках данного номера мы будем действовать именно по второй схеме, хоть это и не совсем этично :)

О патчах. По идее, Fallout должен автоматически выбирать файлы из патча с самым большим номером, имеющимся в наличиии. Но вот почему-то все мои попытки заставить его работать с патчем под названием patch001.dat не увенчались успехом. Странно это...


Фоновая музыка и атмосферные шумы локаций (о, как загнул! :)

Сначала разберемся с самыми простыми звуками и звучками Fallout 2. А именно, с теми звуковыми дорожками, что звучат на протяжении практически всей игры, и с различными звуковыми эффектами, которые периодически раздаются в локациях (имеются в виду лай, топот сапог, смех, птичьи трели и т.д. - это так называемые атмосферные (ambient) звуки).
Как фоновая музыка, так и список атмосферных шумов прописываются для каждой локации в файле data\maps.txt.

Для примера рассмотрим нашу общую сверхмалую родину - деревню Арройо. Вот чего о ней говорится в data\maps.txt:

	[Map 004]
	lookup_name=Arroyo Village
	map_name=arvillag
	music=17arroyo
	;ambient_sfx=gntlwin1:20, gntlwind:20, dogbark:20, dogbark1:20, gustwind:10, gustwin1:10
	ambient_sfx=gntlwin1:25, gntlwind:25, dogbark:20, dogbark1:20, gustwind:5, gustwin1:5
	saved=Yes
К аудио здесь имеют отношение только два параметра, а именно:
  1. music. Задаёт название файла с фоновой мелодией без расширения. То есть, music=17arroyo означает, что берется файл
  2. ambient_sfx. Указывает, какие из файлов, находящихся в каталоге sound\sfx (см. следующую часть), используются в качестве случайных атмосферных звуков. Через запятую перечислены имена ACM-файлов, также без расширения. После двоеточия, по всей видимости, указаны вероятности (в процентах), с которыми воспроизводятся конкретные эффекты (сумма этих чисел равняется 100). Например, dogbark:20 указывает Fallout'у воспроизводить звук sound\sfx\dogbark.acm с частотой 20% (под частотой, само-собой, имеется в виду как часто нужно проигрывать звук, а не частота дискретизации звука ;)

В качестве названий фоновых мелодий можно использовать длинные имена (поверялось название длиной 11 символов). Верно ли то же самое для звуков - пока не известно.

Также не известно, что будет делать Fallout, если сумма вероятностей воспроизведения эффектов отличается от 100. Вполне вероятно, что просто-напросто производится нормирование указанных значений.

Таким образом, для изменения звукового фона какой-либо локации нужно все лишь изменить соответствующие параметры в описании этой локации в файле data\maps.txt. И, кроме того, необходимо "устранить" файл patch000.dat\\data\maps.txt (например, можно просто заменить его название в заголовке патча на maps.tx_).

Отмечу, что изменять атрибуты файла Fallout2\data\data\maps.txt на Read-Only (как это рекомендутеся делать в документе "Файловая структура Fallout 2") вовсе не обязательно. Похоже, Fallout удаляет только PRO-файлы.

Есть еще музыка, воспроизводимая в главном меню (07desert), а также при перемещении по карте (23world и 20car). К сожалению, их названия прописаны в бинарнике fallout2.exe, соответственно имеются два варианта их изменения:

  1. поменять бинарник;
  2. изменить соответствующий файл.

Первый вариант плох тем, что в ходу имеется довольно-таки много версий Fallout'а, и для изменения музыки придется писать шибко умный инсталлятор, находящий и изменяющий соответствующий названия. Кроме того, есть еще вопрос с авторскими правами.

Второй вариант более прост для реализации, но необходимо учитывать, что дорожка 07desert используется не только в меню, но и в некоторых локациях. То есть для изменения музыки ТОЛЬКО в меню придётся сделать копию этого файла и соответствующим образом подправить параметры в data\maps.txt.


Введение в звуковые эффекты Fallout 2 и структура файла SNDLIST.LST

Перейдем к рассмотрению каталога sound\sfx. Тут находятся все звуковые эффекты, воспроизводимые Fallout'ом (включая только что рассмотренные атмосферные) - это файлы *.acm, а также файл-список sndlist.lst, индексирующий имеющиеся ACM-файлы. Именно в этот каталог следует добавлять новые или измененные звуки (точнее говоря, в один из прообразов этого каталога - в Fallout2\data\sound\sfx).

Про сами ACM-файлы особо говорить нечего. Отмечу лишь, что вне зависимости от того, чего указано в их заголовке, все они трактуются, как одноканальные (моно, по-нашему :)

Список sndlist.lst представляет собой текстовый файл с весьма оригинальной структурой:

Все описания упорядочены по названию (регистр символов в расчет не берется).

Если описание звука неточно, Fallout может вообще отказаться воспроизводить этот звук. Путем антигуманных экспериментов было установлено, что критичными в смысле воспроизведения являются следующие моменты:

  1. количество файлов в списке, соответствующее первой строчке;
  2. упорядоченность имен файлов;
  3. корректная длина звука.
Похоже, кривой порядковый номер не страшен, также допустимо указывать неправильные длины файлов (во всяком случае, если указанная длина ACM-файла больше реальной, звук будет воспроизводиться).

Для того, чтобы лишний раз не думать там, где и думать-то не нужно, была написана программка, регистрирующая новые ACM-файлы в списке, а также обновляющая описания существующих звуков при изменении их параметров. Называется REGSND и лежит тут и тут. Просто скопируйте её в каталог Fallout2\data\sound\sfx, туда же распакуйте файл-список sndlist.lst. Параметров у этой утилки никаких нет; после запуска она регистрирует изменения всех ACM-файлов, находящихся в каталоге звуковых эффектов. Только вот удаление звуков программка обратывать не умеет, так что для удаления файла из списка придётся немножко поработать ручками ;)

Звуки в скриптах

Теоретически, любой звуковой эффект, прописанный в sndlist.lst, может быть вызван из скрипта. Для этого предназначен опкод 80A3 (PlayACM, или play_sfx по терминологии fallout2.exe), принимающий в качестве параметра название звука без расширения. К примеру, скрипт scripts\zsdrvcar.int вызывает звук заводящейся машины carstart.acm в функции use_p_proc следующим образом:

	function use_p_proc;
	begin
	... поскипано ...
		smitty_obj:=1;
		PlayACM('carstart');
		if CurrentLocation=92 then begin
			GVAR[586]:=0;
		end;
	... тоже поскипано ...
	end;



Планы

В следующих выпусках мы продолжим тему звуковых эффектов. Будут рассмотрены оружейные звуки, а также звуки, издаваемые криттерами и предметами.



© TeamX Press, 2001
Редактор: ABel
Ежи - форева!
если Вы хотите получить от компьютера пользу, ни в коем случае не программируйте!