В этом документе сделана попытка как-то упорядочить накопившиеся знания по внутренней структуре Fallout 2. Этот документ не претендует на полноту изложения, тем не менее одну из основополагающих концепций Falloutостроения он излагает.
Прежде чем приступить к изучению этого документа, рекомендуется ознакомится с "Файловой структурой Fallout 2".
Авторы:
Автор первоначальной версии: Serge (w_master@softhome.net).
Автор дополнений: Perceptron (perceptron@pisem.net).
Игровые объекты мы разделим на три группы (см. рисунок).
Описывая первую группу, удобнее начать с карты мира. Двигаясь по ней, игрок заходит в города и натыкается на случайные встречи в пустыне. При этом загружается карта местности, на которой и находятся игровые объекты.
Вторая группа - игрок и связанные с ним объекты - его команда (сопартийцы) и машина. Куда игрок, туда и они.
Третья группа - объекты интерфейса. Такие, как видеоролики.
(В тексте будет встречаться много рисунков, поэтому запомните следующее: квадраты - это объекты, стрелки - связи между объектами, подписи к стрелкам - идентификаторы, посредством которых происходит обращение к объектам. Штриховой линией обозначены сложные объекты, состоящие из набора других объектов. Пунктирной линией показаны косвенные связи.)
Обращение к информации, связанной с объектами, происходит посредством указателей, а именно:
Указатели по большей части содержатся в файлах игры (в текстовом или двоичном виде), но они могут быть в некоторых случаях жестко прошиты в движке (чаще всего это имена файлов).
Идентификатор (ID) - это число (DWORD), в котором указывается тип объекта, иногда некоторые параметры, а также номер (индекс) строки в файле-списке, в которой записано имя файла. Здесь, как видите, для получения имени файла используется промежуточный объект - файл-список (LST файл). Иногда используется не весь ID, а просто лист-индекс.
Номер записи - число, которое соответствует блоку данных (иногда просто строке) в текстовом файле.
Имя записи - название, соответсвующее блоку данных в текстовом файле.
Проще говоря, обращение происходит к файлу или к записи в текстовом файле посредством либо имени, либо номера.
Список указателей:
Объекты карты мира - это сама карта мира, а также города и случайные встречи (random encounter) в пустыне. Отдельным видом случайной встречи является специальная встреча (special encounter).
Карта мира состоит из отдельных тайлов (FRM файл с изображением куска карты) - 4 по горизонтали, 5 по вертикали, всего 20. Каждый тайл содержит 42 (7х6) квадрата карты мира. Квадраты отделены желтыми полосками.
Для определения, по какой местности игрок может ходить, а по какой - не может, используются маски карты мира. Для каждого тайла может существовать своя маска.
Не забудьте также, что для такого объекта, как карта мира, существует свой музыкальный трек. Он жестко прописан в движке игры.
Случайные встречи прописаны в WORLDMAP.TXT. Следующий рисунок пояснит структуру WORLDMAP.TXT и связи объектов "карта мира" и "случайная встреча".
Как вы видите, движок читает из WORLDMAP.TXT секции описания тайлов [Tile], в которых прописаны лист-индекс картинки тайла и имя файла маски. Для каждого квадрата карты мира в секции [Tile] прописано имя секции [Encounter Table], в которой описываются типы случайных встреч этого квадрата.
Для каждой случайной встречи в [Encounter Table] хранится имя локации в MAPS.TXT и имя секции [Encounter], описывающей случайную встречу. Для специальной встречи указывается только имя локации в MAPS.TXT.
В секции [Encounter] хранятся PID'ы криттеров, с которыми происходит встреча, лист-индексы скриптов криттеров и вещей в их инвентаре, лист-индексы предметов на земле.
В MAPS.TXT содержится имя файла карты местности и GAM-файла для нее.
Имя и описание случайной встречи движок находит в файле WORLDMAP.MSG. Т.к. никаких номеров текстовых записей в описании встреч не содержится, то как он их находит - известно одному ему. Ясно только, что порядок записей в WORLDMAP.MSG соответствует порядку записей в MAPS.TXT (для имен локаций) и в секциях [Encounter Table] файла WORLDMAP.TXT (для описаний встреч).
Города, если кто забыл - это зеленые кружки на карте мира. Информацию о них движок извлекает из файла CITY.TXT. См. рисунок.
Как вы видите, в CITY.TXT указываются лист-индексы картинки с картой города (показывается, когда вы заходите в город - для выбора той части города, куда вы хотите отправиться) и картинки с названием города (плашки - рисуется рядом с кнопкой путешествия в город). Там же, в CITY.TXT, указывается имя локации в MAPS.TXT.
Локация - это какая-то часть города (например, Траппер таун в Клемате). См. в CITY.TXT параметры entrance и все поймете.
В MAPS.TXT указываются имя файла карты местности и GAM-файла для нее, а также имена файлов музыки и звуков окружения для карты.
Имена города, локации и карты извлекаются движком из файлов WORLDMAP.MSG и MAP.MSG. Номера записей в этих файлах нигде прямо не указаны, известно лишь, что порядок расположения имен соответствует порядку расположения объектов в файлах CITY.TXT, WORLDMAP.TXT и MAPS.TXT (см. рисунок).
Когда игрок заходит в город или встречается с кем-либо в пустыне, загружается карта местности. Карта состоит из тайлов, на ней расположены различные объекты. Все это указывается в файле MAP.
При загрузке карты движок сразу же считывает и одноименный файл GAM, содержащий переменные карты (MVAR). Некоторые параметры карты (в т.ч. имена файлов музыки и звуков окружения) находятся в MAPS.TXT (MAP IDX - номер секции описания карты в этом файле). SID скрипта карты указывается непосредственно в файле MAP.
Для сохраняемых карт файл MAP считывается только при первом заходе игрока на карту. После сохранения игры, карта местности загружается уже из файла SAV в сохраненках. Правда формат SAV это по сути тот же MAP.
В массиве тайлов пола и потолка указывается только лист-индекс PRO-файла тайла. А в области объектов для каждого объекта на карте (кроме тайлов) указывается его PID, Script ID, FRM ID, а также другие параметры (см. описание формата MAP).
В файле карты прописываются также т.н. spatial-скрипты. Они привязываются к отдельным хексам на карте.
У каждого объекта в игре есть свой прототип (PRO-файл), в котором указываются параметры объекта (см. описание файлов PRO).
Всего на карте может находится 6 типов объектов:
Тип объекта | Описание |
---|---|
items | предметы |
critters | существа |
scenery | объекты окружения, "декорации" |
walls | стены |
tiles | плитки пола и потолка |
misc | прочее |
Белый цвет на рисунке означает, что этот параметр есть у каждого объекта, зеленый - только у некоторых, красный цвет - только у криттеров, голубой - только у предметов.
У каждого объекта есть его изображение на карте (FRM файл - обращение по FID), а также имя и описание (обращение к нужной строке - по индексу в соответсвующем MSG файле (pro_crit.msg, pro_item.msg и т.д.)).
У предметов есть также изображение их в инвентаре (INVEN FRM), а у криттеров может быть изображение "говорящей головы" (HEAD FRM), т.е. изображение лица в режиме диалога.
У большинства объектов также указывается скрипт (обращение - по Script ID) и звук (файл ACM, обращение - по Sound ID). Имя MSG-файла сообщений скрипта (обычно это фразы для диалога) совпадает с именем файла скрипта, поэтому считается, что обращение к нему осуществляется также по Script ID.
В PROTO.MSG хранятся некоторые названия и описания, относящиеся к параметрам объекта.
Сообщения о ранениях и повреждениях различных частей тел криттеров находятся в файле COMBAT.MSG.
Номера (MSG IDX) тех сообщений, которые не зависят от типа криттера или относятся игроку, прописаны в движке.
MSG
IDX сообщений, называющих части тела криттеров (с записи 1110),
соответствуют base_art_num (второй параметр в art\critters\critters.lst)
MSG IDX сообщений о критических попаданиях (с записи 1450), соответствуют Kill type криттера (см. формат PRO-файлов).
Фразы персонажей во время боя (боевые крики) находятся в файлах
COMBATAI.MSG, CMBATAI2.msg (хотя второй скорее всего не используется).
MSG IDX боевых криков прописаны в AI.TXT.
Диалоги с некоторыми персонажами анимированы и озвучены. Это так называемые "говорящие головы". Начинается все с их скрипта.
Script ID берется из параметров объекта на карте, а не из PRO-файла. В самом скрипте при вызове диалога указываются лист-индекс картинки фона (зависит от локации, на которой происходит разговор), лист-индекс файла MSG с репликами диалога, лист-индекс анимации мимики "говорящей головы" и отношение персонажа к игроку (reaction).
В файле диалога (MSG) указываются имена файлов синхронизации озвучки и мимики (LIP), в которых, в свою очередь, указываются имена файлов озвучки (ACM).
Исходя из отношения криттера к игроку, лицо у персонажа может быть довольным, сердитым или нейтральным. В соответствии с файлом LIP движок проигрывает анимацию речи во время звучания фразы персонажа. Обращение к конкретной картинке происходит по FRM ID.
Файлы стартовых персонажей или premade PC (выбираемые в самом начале игровые персонажи), находятся в master.dat\premade\.
"Готовых" героев всего 3, с каждым героем связаны три файла: портрет (FRM), биография (BIO) и характеристики (GCD). Файлы имеют разные расширения, но называются соответственно (имена файлов жестко прошиты в движке):
Управляет объектом "игрок", конечно же, движок, и очень многое прошито именно в нем. Все, что не прошито в движке, находится в следующих файлах.
Во-первых, у игрока есть свой собственный скрипт, работающий на любой карте, кроме карты мира.
В файле VAULT13.GAM хранятся глобальные переменные (GVAR'ы) игры, относящиеся по большей части к игроку (привыкания, звания, кармические звания, репутации в городах, стадии выполнения квестов).
В файле ENDDEATH.TXT находятся настройки описаний смертей игрока.
В файле GENREP.TXT содержатся настройки кармических званий (Спаситель Проклятых, Дьявольское Отродье) игрока.
В файле KARMAVAR.TXT описываются настройки званий игрока (Берсеркер, Чемпион, Убийца детей).
В файле EDITOR.MSG содержатся названия и описания званий игрока (в т.ч. кармических).
В файлах STAT.MSG, TRAIT.MSG, SKILL.MSG и PERK.MSG содержатся описания соответственно характеристик, черт, умений и навыков игрока.
Текущие параметры (инвентарь, GVAR'ы, карма, характеристики, умения, навыки, уровень, опыт и т.д.) игрока содержатся в сохраненных играх в файле SAVE.DAT.
С игроком связан один интересный объект - его портативный лэптоп, известный в народе как пип-бой. Управляется он также движком. На нем хранится информация с голодисков, видеоролики, записи о квестах и карты локаций.
С голодисками связано три файла.
В файле HOLODISK.TXT находятся настройки голодисков для пип-боя.
В файле VAULT13.GAM находится GVAR, показывающая, прочитан голодиск или нет.
В файле PIPBOY.MSG находятся названия и содержимое голодисков.
Описания квестов показываются в пип-бое в разделе "Статус". Они разделены на группы по городам, в которых эти квесты были получены.
В файле QUESTS.TXT находятся настройки описаний квестов для пип-боя.
В файле VAULT13.GAM находится GVAR, показывающая прогресс выполнения квеста.
В файле QUESTS.MSG находятся описания квестов для пип-боя.
В файле MAP.MSG находятся названия городов.
Список параметров (поведение в бою и повышение уровня), а также PID'ы партийцев указываются в PARTY.TXT.
Само присоединение партийца к игроку производится в его скрипте. Первоначально Script ID скрипта берется не из PRO, как вы понимаете, а из параметров объекта на карте. Но при присоединении и повышении уровня партийца, SID, вероятно, берется из PRO-файла. На рисунке для простоты указана связь через PRO. PRO-файлы партийцев сохраняются в сейвах.
Текст, используемый в режиме "отдачи команд" партийцам находится в файле CUSTOM.MSG.
Текст сообщений о повышении партийцем уровня находится в MISC.MSG.
Машина, как видите, относится к партийцам, и ее PID указывается в PARTY.TXT.
В режиме карты мира управление машиной осуществляется движком (как бы нелепо это ни звучало). Имеется в виду изменение скорости передвижения по карте мира при покупке и апгрейде машины, слежение за уровнем топлива, остановка при отсутствии топлива. Картинка машины, появляющаяся справа в режиме карты мира, прописана, сами понимаете, в движке. Ее FRM: art\intrface\WMCARMVE.FRM.
Созданием машины на карте местности занимается скрипт карты. Машина состоит из двух частей: багажника, являющегося контейнером (item) и основной части (scenery).
Видеоролики - файлы MVE. Вызываться они могут из скриптов, либо непосредственно движком при наступлении определенных событий. При этом используется просто номер видеролика (MVE IDX). Номера эти жестко прописаны в движке (также как и имена файлов видеороликов). У каждого видеролика (или какой-то его части) может быть своя собственная палитра (PAL), которая тоже жестко прописана в движке.
С каждым видеороликом связаны файлы настроек (CFG), в которых прописываются эффекты затемнения в ролике и файлы субтитров (SVE). Они имеют такие же имена файлов, как и файл MVE.
Названия видеороликов (показываются в пип-бое) находятся в файле PIPBOY.MSG.
Слайд-шоу показывают в конце игры. Оно повествует о судьбе городов и персонажей игры.
Настройки слайд-шоу находятся в файле ENDGAME.TXT.
В файле VAULT13.GAM находятся GVAR, в которых указано, что случилось с тем или иным городом.
Сам слайд находится в art\intrface\. Обращение к нему - по лист-индексу.
Субтитры для слайда находятся в текстовых файлах (text\english\game\nar_*.txt).