Такие дела.
Курт Воннегут
Наш журнал посвящен звукам, поэтому в этом выпуске мы займемся ни чем иным, как изучением PRO-файлов и скриптов ;) Но для начала
Для изменения фоновой музыки в процессе игры может быть использован опкод set_map_music:
procedure set_map_music(map_id, music_name);inline; begin int 80E2 end; end;
Опкод принимает два параметра:
Например, для изменения фоновой музыки, звучащей на карте перед Храмом (локация Arroyo Temple, идентификатор 126), можно использовать следующий вызов:
set_map_music (126, 'akiss');
Данный опкод, по сути дела, замещает настройки в файле data\maps.txt. То есть, единожды поменяв фоновую музыку, можно наслаждаться изменениями вплоть до выхода из игры (при следующей загрузке Fallout перечитает настройки из data\maps.txt).
К сожалению, опкод, возвращающий идентификатор текущей загруженной карты пока не известен, а то можно было бы сделать предмет-проигрыватель, позволяющий на ходу выбирать фоновую музыку.
Существует всего два с половиной случая, когда предмет производит некоторый звук:
Звуковой эффект, который издается при поднимании предмета, самым непосредственным
и, можно сказать, наглым образом связан с тем, как этот предмет выглядит. А еще
точнее, действует правило "как пишыца, так и слышыца":
Название звукового файла, используемого при подбирании предмета с земли,
совпадает с названием FRM-файла, содержащего изображение лежащего предмета.
Последовательность действий, необходимая для определения фрейма, которым представляется лежащий предмет, достаточно подробно описана в документе "Концепция объектов в Fallout 2".
В качестве примера рассмотрим Power Armor:
Ну и соответствующим образом можно задать звучание нового предмета (или изменить эффект уже существующего):
Мда, похоже, придётся несколько выйти за пределы тематики журнала. Дело в том, что скрипты, "навешанные" на различные объекты, в том числе, и на предметы, охватывают практически все области Фоллауто-модификации, в частности, картографию и предметостроение. Здесь мы не станем углубляться ни в создание карт, ни в написание скриптов - этим темам посвящены или будут посвящены другие документы.
Если для предмета задан некоторый скрипт, то [почти] все действия, производимые с предметом, вызывают выполнение соответствующей функции-обработчика этого скрипта (если таковая функция определена в скрипте).
Вот далеко не полный список названий этих обработчиков (привожу только те из них, в которые может понадобиться добавить звуки):
| Действие | Функция-обработчик |
|---|---|
| обычное использование предмета | use_p_proc |
| использование предмета на объект | use_obj_on_p_proc |
| предмет выбрасывается | drop_p_proc |
| предмет подбирается | pickup_p_proc |
| требуется короткое описание предмета (при наведении курсора на предмет) |
look_at_p_proc |
| вывод длинного описания предмета (при выборе бинокля из контекстного меню) | description_p_proc |
|
Весьма часто в функциях-обработчиках используется опкод, отменяющий обычную обработку действия игрой. Это опкод 80B9, который называется script_overrides в fallout2.exe (у нас же этот опкод известен под партизанской кличкой Writeln %-\). Пример. Предмет, который нельзя поднять с земли, можно сделать, определив в его скрипте следующий обработчик: procedure pickup_p_proc; begin script_overrides; Say (Sender, 'I''m not going to touch THIS!', 2); end;В результате все попытки взять такой предмет окажутся неудачными, а попытавшийся персонаж гневно (красным цветом) заявит, что он, мол, даже трогать это не станет. |
Действия, которые может осуществлять предмет, прописываются в его PRO-файле по смещению 0x1A. Не все биты этого байта флагов изучены, но вполне достоверно известно, что третий бит (значение 0x08) отвечает за режим "USE", а четвертый (значение 0x10) - за режим "USE ON". Следующая табличка всё прояснит:
| Третий бит=0 | Третий бит=1 | |||||||||||||||||
| 4й бит=0 |
|
| ||||||||||||||||
| 4й бит=1 |
|
| ||||||||||||||||
Существует два способа задания скрипта для предмета:
Рассмотрим второй способ задания скрипта для предмета: через PRO-файл возможно установить скрипт для тех предметов, которые "изготовляются" в процессе игры, то есть создаются при помощи опкода CreateObj (он же create_object по терминологии fallout2.exe; опкод 80B7). Номер скрипта, с которым будет связываться создаваемый предмет, указывается в PRO-файле по смещению 0x1C. Обычно здесь записано значение FF FF FF FF, означающее "скрипта нет"; значение же вида 03 00 NN NN как раз задаёт номер скрипта.
Пример: совершенно бесполезный предмет под названием Fallout 2 Hintbook (ObjectID=483). Соответствующий PRO-файл по смещению 0x1C содержит значение 03 00 04 56. Смотрим 1111-ю строчку (0x0456+1=1111) в файле scripts\scripts.lst и видим ни что иное, как
niF2Hint.int ; New Reno Fallout 2 Hintbook ...
Продолжительные эксперименты над игрой показали, что пропатченная версия пытается удалять следующие файлы:
Таким образом, атрибут ReadOnly достаточно ставить только на новые PRO-файлы предметов и криттеров - все остальные модифицированные файлы Fallout, похоже, не трогает.
| © TeamX Press, 2002 Редактор: ABel | ![]() |