Концепция объектов в Fallout2

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

Прежде чем приступить к изучению этого документа, рекомендуется ознакомится с "Файловой структурой Fallout 2".

Авторы:
Автор первоначальной версии: Serge (w_master@softhome.net).
Автор дополнений: Perceptron (perceptron@pisem.net).

1. Введение

1.1. Игровые объекты

Игровые объекты мы разделим на три группы (см. рисунок).

Global

Описывая первую группу, удобнее начать с карты мира. Двигаясь по ней, игрок заходит в города и натыкается на случайные встречи в пустыне. При этом загружается карта местности, на которой и находятся игровые объекты.

Вторая группа - игрок и связанные с ним объекты - его команда (сопартийцы) и машина. Куда игрок, туда и они.

Третья группа - объекты интерфейса. Такие, как видеоролики.

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

1.2. Обращение к объектам

Обращение к информации, связанной с объектами, происходит посредством указателей, а именно:

      для файла:
    1. По имени файла.
    2. Посредством идентификатора.
      для записи в текстовом файле:
    3. По номеру записи.
    4. По имени записи.

Указатели по большей части содержатся в файлах игры (в текстовом или двоичном виде), но они могут быть в некоторых случаях жестко прошиты в движке (чаще всего это имена файлов).

Идентификатор (ID) - это число (DWORD), в котором указывается тип объекта, иногда некоторые параметры, а также номер (индекс) строки в файле-списке, в которой записано имя файла. Здесь, как видите, для получения имени файла используется промежуточный объект - файл-список (LST файл). Иногда используется не весь ID, а просто лист-индекс.

Номер записи - число, которое соответствует блоку данных (иногда просто строке) в текстовом файле.

Имя записи - название, соответсвующее блоку данных в текстовом файле.

Проще говоря, обращение происходит к файлу или к записи в текстовом файле посредством либо имени, либо номера.

Список указателей:

    FL NAME - file name, имя файла
      лист-индексы и идентификаторы:
    MVE IDX - mve index, номер видеоролика
    LST IDX - list index, номер в файле-списке (LST файл)
    PID - Proto ID, идентификатор прототипа
    FID - Frame ID, идентификатор картинки
    SID - Script ID, идентификатор скрипта
    Sound ID, идентификатор звукового файла
      номера записей в текстовых файлах
    MSG IDX - номер записи в MSG файле
    MAP IDX - идентификатор карты (номер секции в MAPS.TXT)
    AI IDX - номер пакета AI (в AI.TXT)
    GVAR IDX - номер GVAR (глобальной переменной игры)
      имена записей в текстовых файлах
    MAP NAME - имя секции описания карты в MAPS.TXT
    NAME - имя секции в текстовом файле

2. Объекты карты мира

Объекты карты мира - это сама карта мира, а также города и случайные встречи (random encounter) в пустыне. Отдельным видом случайной встречи является специальная встреча (special encounter).

2.1. Карта мира

Карта мира состоит из отдельных тайлов (FRM файл с изображением куска карты) - 4 по горизонтали, 5 по вертикали, всего 20. Каждый тайл содержит 42 (7х6) квадрата карты мира. Квадраты отделены желтыми полосками.

Для определения, по какой местности игрок может ходить, а по какой - не может, используются маски карты мира. Для каждого тайла может существовать своя маска.

Не забудьте также, что для такого объекта, как карта мира, существует свой музыкальный трек. Он жестко прописан в движке игры.

2.2. Случайные встречи

Случайные встречи прописаны в WORLDMAP.TXT. Следующий рисунок пояснит структуру WORLDMAP.TXT и связи объектов "карта мира" и "случайная встреча".

Worldmap and encounters

Как вы видите, движок читает из 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 (для описаний встреч).

2.3. Города

Города, если кто забыл - это зеленые кружки на карте мира. Информацию о них движок извлекает из файла CITY.TXT. См. рисунок.

City

Как вы видите, в CITY.TXT указываются лист-индексы картинки с картой города (показывается, когда вы заходите в город - для выбора той части города, куда вы хотите отправиться) и картинки с названием города (плашки - рисуется рядом с кнопкой путешествия в город). Там же, в CITY.TXT, указывается имя локации в MAPS.TXT.

Локация - это какая-то часть города (например, Траппер таун в Клемате). См. в CITY.TXT параметры entrance и все поймете.

В MAPS.TXT указываются имя файла карты местности и GAM-файла для нее, а также имена файлов музыки и звуков окружения для карты.

Имена города, локации и карты извлекаются движком из файлов WORLDMAP.MSG и MAP.MSG. Номера записей в этих файлах нигде прямо не указаны, известно лишь, что порядок расположения имен соответствует порядку расположения объектов в файлах CITY.TXT, WORLDMAP.TXT и MAPS.TXT (см. рисунок).

3. Карта местности

Когда игрок заходит в город или встречается с кем-либо в пустыне, загружается карта местности. Карта состоит из тайлов, на ней расположены различные объекты. Все это указывается в файле MAP.

Map

При загрузке карты движок сразу же считывает и одноименный файл GAM, содержащий переменные карты (MVAR). Некоторые параметры карты (в т.ч. имена файлов музыки и звуков окружения) находятся в MAPS.TXT (MAP IDX - номер секции описания карты в этом файле). SID скрипта карты указывается непосредственно в файле MAP.

Для сохраняемых карт файл MAP считывается только при первом заходе игрока на карту. После сохранения игры, карта местности загружается уже из файла SAV в сохраненках. Правда формат SAV это по сути тот же MAP.

В массиве тайлов пола и потолка указывается только лист-индекс PRO-файла тайла. А в области объектов для каждого объекта на карте (кроме тайлов) указывается его PID, Script ID, FRM ID, а также другие параметры (см. описание формата MAP).

В файле карты прописываются также т.н. spatial-скрипты. Они привязываются к отдельным хексам на карте.

4. Объекты на карте

У каждого объекта в игре есть свой прототип (PRO-файл), в котором указываются параметры объекта (см. описание файлов PRO).

Всего на карте может находится 6 типов объектов:

Тип объекта Описание
items предметы
critters существа
scenery объекты окружения, "декорации"
walls стены
tiles плитки пола и потолка
misc прочее

Prototype

Белый цвет на рисунке означает, что этот параметр есть у каждого объекта, зеленый - только у некоторых, красный цвет - только у криттеров, голубой - только у предметов.

У каждого объекта есть его изображение на карте (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.

5. "Говорящие головы"

Диалоги с некоторыми персонажами анимированы и озвучены. Это так называемые "говорящие головы". Начинается все с их скрипта.

Talking heads

Script ID берется из параметров объекта на карте, а не из PRO-файла. В самом скрипте при вызове диалога указываются лист-индекс картинки фона (зависит от локации, на которой происходит разговор), лист-индекс файла MSG с репликами диалога, лист-индекс анимации мимики "говорящей головы" и отношение персонажа к игроку (reaction).

В файле диалога (MSG) указываются имена файлов синхронизации озвучки и мимики (LIP), в которых, в свою очередь, указываются имена файлов озвучки (ACM).

Исходя из отношения криттера к игроку, лицо у персонажа может быть довольным, сердитым или нейтральным. В соответствии с файлом LIP движок проигрывает анимацию речи во время звучания фразы персонажа. Обращение к конкретной картинке происходит по FRM ID.

6. Игрок

6.1. Стартовые персонажи

Файлы стартовых персонажей или premade PC (выбираемые в самом начале игровые персонажи), находятся в master.dat\premade\.

Premade

"Готовых" героев всего 3, с каждым героем связаны три файла: портрет (FRM), биография (BIO) и характеристики (GCD). Файлы имеют разные расширения, но называются соответственно (имена файлов жестко прошиты в движке):

    combat.* - для Нарга (Narg)
    stealth.* - для Мингана (Mingan)
    diplomat.* - для Читсы (Chitsa)

6.2. Игрок

Управляет объектом "игрок", конечно же, движок, и очень многое прошито именно в нем. Все, что не прошито в движке, находится в следующих файлах.

Dude

Во-первых, у игрока есть свой собственный скрипт, работающий на любой карте, кроме карты мира.

В файле VAULT13.GAM хранятся глобальные переменные (GVAR'ы) игры, относящиеся по большей части к игроку (привыкания, звания, кармические звания, репутации в городах, стадии выполнения квестов).

В файле ENDDEATH.TXT находятся настройки описаний смертей игрока.

В файле GENREP.TXT содержатся настройки кармических званий (Спаситель Проклятых, Дьявольское Отродье) игрока.

В файле KARMAVAR.TXT описываются настройки званий игрока (Берсеркер, Чемпион, Убийца детей).

В файле EDITOR.MSG содержатся названия и описания званий игрока (в т.ч. кармических).

В файлах STAT.MSG, TRAIT.MSG, SKILL.MSG и PERK.MSG содержатся описания соответственно характеристик, черт, умений и навыков игрока.

Текущие параметры (инвентарь, GVAR'ы, карма, характеристики, умения, навыки, уровень, опыт и т.д.) игрока содержатся в сохраненных играх в файле SAVE.DAT.

6.3. Пип-бой

С игроком связан один интересный объект - его портативный лэптоп, известный в народе как пип-бой. Управляется он также движком. На нем хранится информация с голодисков, видеоролики, записи о квестах и карты локаций.

6.3.1. Голодиски

С голодисками связано три файла.

Pipboy

В файле HOLODISK.TXT находятся настройки голодисков для пип-боя.

В файле VAULT13.GAM находится GVAR, показывающая, прочитан голодиск или нет.

В файле PIPBOY.MSG находятся названия и содержимое голодисков.

6.3.2. Квесты

Описания квестов показываются в пип-бое в разделе "Статус". Они разделены на группы по городам, в которых эти квесты были получены.

Quest

В файле QUESTS.TXT находятся настройки описаний квестов для пип-боя.

В файле VAULT13.GAM находится GVAR, показывающая прогресс выполнения квеста.

В файле QUESTS.MSG находятся описания квестов для пип-боя.

В файле MAP.MSG находятся названия городов.

7. Партия

7.1. Команда

Список параметров (поведение в бою и повышение уровня), а также PID'ы партийцев указываются в PARTY.TXT.

Party

Само присоединение партийца к игроку производится в его скрипте. Первоначально Script ID скрипта берется не из PRO, как вы понимаете, а из параметров объекта на карте. Но при присоединении и повышении уровня партийца, SID, вероятно, берется из PRO-файла. На рисунке для простоты указана связь через PRO. PRO-файлы партийцев сохраняются в сейвах.

Текст, используемый в режиме "отдачи команд" партийцам находится в файле CUSTOM.MSG.

Текст сообщений о повышении партийцем уровня находится в MISC.MSG.

7.2. Машина

Машина, как видите, относится к партийцам, и ее PID указывается в PARTY.TXT.

Car

В режиме карты мира управление машиной осуществляется движком (как бы нелепо это ни звучало). Имеется в виду изменение скорости передвижения по карте мира при покупке и апгрейде машины, слежение за уровнем топлива, остановка при отсутствии топлива. Картинка машины, появляющаяся справа в режиме карты мира, прописана, сами понимаете, в движке. Ее FRM: art\intrface\WMCARMVE.FRM.

Созданием машины на карте местности занимается скрипт карты. Машина состоит из двух частей: багажника, являющегося контейнером (item) и основной части (scenery).

8. Интерфейс

8.1. Видеоролики

Видеоролики - файлы MVE. Вызываться они могут из скриптов, либо непосредственно движком при наступлении определенных событий. При этом используется просто номер видеролика (MVE IDX). Номера эти жестко прописаны в движке (также как и имена файлов видеороликов). У каждого видеролика (или какой-то его части) может быть своя собственная палитра (PAL), которая тоже жестко прописана в движке.

Video

С каждым видеороликом связаны файлы настроек (CFG), в которых прописываются эффекты затемнения в ролике и файлы субтитров (SVE). Они имеют такие же имена файлов, как и файл MVE.

Названия видеороликов (показываются в пип-бое) находятся в файле PIPBOY.MSG.

8.2. Слайд-шоу

Слайд-шоу показывают в конце игры. Оно повествует о судьбе городов и персонажей игры.

Slides

Настройки слайд-шоу находятся в файле ENDGAME.TXT.

В файле VAULT13.GAM находятся GVAR, в которых указано, что случилось с тем или иным городом.

Сам слайд находится в art\intrface\. Обращение к нему - по лист-индексу.

Субтитры для слайда находятся в текстовых файлах (text\english\game\nar_*.txt).