Данный номер нашего журнала начинает небольшой цикл, посвященный изменению звуков Fallout 2. Для более полного понимания дальнейшего материала советую ознакомиться со следующими статьями, имеющимися на сайте Fallout.ru (если Вы до сих пор не прочитали этих фундаментальных трудов, то сейчас - самое время это сделать):
Кроме того, нехило было прочитать доку под названием "Формат файла CRITTER.DAT".
(эти документы будут весьма полезны как при изменении существующих, так и при
добавлении новых звуков в Fallout 2).
Некоторая часть информации, приводимой ниже, по ряду причин не проверена до конца. Спорные или непроверенные места будут специально обозначены, но, в любом случае,
Обо всех найденных ошибках и несоответствиях сообщайте куда следует :)
В наших разборках со звуковым наследием Великой Игры нам потребуются следующие инструменты:
Да, при использовании утилок командной строки настоятельно рекомендую использовать соответствующие файл-менеджеры (FAR, WC и т.д) - не надо будет потом разыскивать результаты работы по всему диску :)
Если не сказано обратного, пути к файлам Fallout 2 в данном документе указываются относительно каталога с данными Fallout или соответствующего ресурсного архива.
То же самое, но по-русски: если написано имя файла 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К аудио здесь имеют отношение только два параметра, а именно:
В качестве названий фоновых мелодий можно использовать длинные имена (поверялось название длиной 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, соответственно имеются два варианта их изменения:
Первый вариант плох тем, что в ходу имеется довольно-таки много версий Fallout'а, и для изменения музыки придется писать шибко умный инсталлятор, находящий и изменяющий соответствующий названия. Кроме того, есть еще вопрос с авторскими правами.
Второй вариант более прост для реализации, но необходимо учитывать, что дорожка 07desert используется не только в меню, но и в некоторых локациях. То есть для изменения музыки ТОЛЬКО в меню придётся сделать копию этого файла и соответствующим образом подправить параметры в data\maps.txt.
Перейдем к рассмотрению каталога sound\sfx. Тут находятся все звуковые эффекты, воспроизводимые Fallout'ом (включая только что рассмотренные атмосферные) - это файлы *.acm, а также файл-список sndlist.lst, индексирующий имеющиеся ACM-файлы. Именно в этот каталог следует добавлять новые или измененные звуки (точнее говоря, в один из прообразов этого каталога - в Fallout2\data\sound\sfx).
Про сами ACM-файлы особо говорить нечего. Отмечу лишь, что вне зависимости от того, чего указано в их заголовке, все они трактуются, как одноканальные (моно, по-нашему :)
Список sndlist.lst представляет собой текстовый файл с весьма оригинальной структурой:
Если описание звука неточно, Fallout может вообще отказаться воспроизводить этот звук. Путем антигуманных экспериментов было установлено, что критичными в смысле воспроизведения являются следующие моменты:
Для того, чтобы лишний раз не думать там, где и думать-то не нужно, была написана программка, регистрирующая новые 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 | ![]() |