Глоссарий
Источник: coreprime/kbot @ 0ab97bf · Редактировать на GitHub
Сквозной справочник по терминам, которые постоянно встречаются в моддинге Total Annihilation. Каждый термин ссылается на страницу, где он разобран подробнее всего.
Опорный объект (anchor object)
Деталь 3DO с одной вершиной и без примитивов. Во время игры
невидима; она нужна как именованная точка координат для команд скриптов
COB (emit-sfx from <anchor>;).
Архив (archive)
Файл HPI / UFO / CCX / GP3. Все четыре расширения обозначают один и тот же формат на диске и различаются только порядком загрузки.
ARGB4444 / ARGB1555
Две 16-битные кодировки пикселей, которые использует полноцветный
TAF. ARGB4444 упаковывает по 4 бита альфы, красного, зелёного
и синего (16 уровней мягкой альфы); ARGB1555 — 1 бит альфы и по 5 бит
на каждый канал RGB (резкая маска). Какая из них используется, задаёт
байт Format кадра (4 или 5).
Ячейка атрибутов (attribute cell)
Ячейка 16×16 пикселей карты TNT (или SCT). Каждый тайл имеет размер 32×32 пикселя и поэтому содержит 4 ячейки атрибутов. Высоты, расстановка объектов и допустимость прохода и строительства хранятся для каждой ячейки атрибутов.
Ось (axis)
В COB/3DO — числовой идентификатор одной из трёх осей вращения: 0 = X,
1 = Y, 2 = Z. Опкоды COB для MOVE/TURN/SPIN получают
ось как встроенный операнд. В файлах 3DO ось Y направлена вверх.
BOS
«Basic Object Script» — похожий на C исходный язык скриптов анимации и
поведения юнитов. Компилируется в COB. Моддеры пишут его
вручную; из COB его восстанавливает kbot cob decompile.
COB
«Cobble» — стековый байткод, который на самом деле исполняет движок. См. COB / BOS.
Фрагмент сжатия (compression chunk)
Блок внутри файла HPI, который после распаковки занимает не больше 64 КиБ. У каждого фрагмента свой заголовок SQSH, метод сжатия (LZ77 / ZLib / без сжатия), пара размеров и необязательный второй проход XOR.
Встроенная палитра (embedded palette)
PAL, дописанная в файл PCX сразу после пиксельных
данных RLE, с байтом-маркером 0x0C перед ней. Всего 769 байт.
Объект (feature)
Статичный объект на карте TNT, не являющийся юнитом: дерево,
камень, месторождение металла, геотермальный источник, поле гидратации и
т. д. Определяется в файле features/**/*.tdf (см. TDF), и TNT
ссылается на него по имени.
Фиксированная точка (fixed-point)
Система координат моделей 3DO. Каждая координата int32 означает
value / 65536.0 единиц мирового пространства. Так, 0x00010000 — ровно
1 единица мира, 0x00018000 — 1,5 единицы.
Площадь основания (footprint)
Ограничивающий прямоугольник юнита или объекта на сетке, выраженный в
16-пиксельных ячейках атрибутов (FootprintX × FootprintZ). Движок
использует его при размещении построек и поиске пути.
Игровой тик (game tick)
Основная единица времени. 30 тиков в секунду. Большинство полей, связанных со временем, в COB и GAF задаются в тиках.
HPI
Архив «HAPI». См. HPI / UFO / CCX / GP3.
Наложение слоёв (layering)
Способ, которым движок при запуске объединяет несколько архивов
HPI. Файлы из архива, загруженного позже, перекрывают файлы с
тем же путём из более ранних архивов. Порядок загрузки (от низшего
приоритета к высшему): .hpi → .ufo → .ccx → .gp3.
Таблица поиска (lookup table)
Файл .alp, .lht или .shd: строки из 256 индексов палитры (не
RGB), по одному столбцу на исходный цвет. .alp занимает 65 536 байт
(256 строк, по одной на каждый цвет, с которым идёт смешивание); .shd
или .lht — 8 192 байта (32 строки, по одной на уровень тени или
освещения). Движок находит текущий цвет в нужной строке и получает
другой индекс палитры, который можно нарисовать через обычный
8-битный конвейер. Игра использует таблицу, только если её размер
точно совпадает; отсутствующая таблица или таблица любого другого
размера строится заново по палитре. См. PAL.
LZ77
Сжатие со скользящим окном, которое используется во фрагментах
HPI при CompMethod == 1. Окно 4 КиБ, совпадения длиной 2–17
байт, биты-теги начиная с младшего.
«Волшебный розовый» (magic pink)
Индекс палитры 9 в канонической палитре TA (#5454FC). Инструменты
редакторов используют его как цвет заливки прозрачных областей в
исходных файлах PCX/GAF, и он записан как ключевой цвет во многих кадрах
GAF, поэтому в этих кадрах он прозрачен. В остальных случаях это
обычный цвет. См. Ключевой цвет прозрачности.
Имя объекта (object name)
Базовое имя в нижнем регистре, общее для файлов 3DO,
COB и PCX юнита. Объявляется в FBI в поле
Objectname. Не путать с UnitName — внешним идентификатором, который
используют другие конфигурации.
OTA
«Online Total Annihilation» — сопутствующий файл метаданных карты TNT. Обычный текст в формате TDF (TDF). Содержит название миссии, описание, задание для ИИ, стартовые позиции и сведения об окружении.
Палитровое изображение (paletted image)
Растр, значения пикселей которого — 8-битные индексы в отдельной PAL на 256 записей, а не прямые тройки RGB. Все видимые ресурсы, поставляемые с TA, используют палитру: PCX, GAF, SCT, пиксели тайлов TNT и встроенные миникарты. Заметное исключение — полноцветные анимации TAF в TA: Kingdoms.
Деталь (piece)
Именованный подобъект в 3DO. Скрипты COB управляют
деталями по имени (turn turret1 to y-axis [90] speed [60];).
Схема (schema)
Именованный вариант настройки игры внутри парного файла OTA карты TNT. Разные схемы обычно содержат разные раскладки стартовых позиций для разного числа игроков.
Уровень моря (sea level)
Поле SeaLevel в заголовке TNT. Любая ячейка атрибутов, у
которой байт Height меньше уровня моря, считается подводной. На
карте с SeaLevel == 0 под водой нет ничего, а на карте с
SeaLevel == 255 под водой всё.
Секция (section)
Файл SCT. Многоразовые фрагменты из тайлов, которые редактор Cavedog TAE сшивал в готовые карты TNT.
Маска сигналов (signal mask)
Битовая маска, объявляемая в скрипте COB
(set-signal-mask <n>), которая определяет, какие сообщения signal
вытеснят текущий экземпляр скрипта. Используется, чтобы аккуратно
прерывать анимации Walk/Aim/Idle при смене состояния.
Сторона (side)
ARM или CORE в TA; Aramon, Taros, Veruna или Zhon в TA: Kingdoms.
Задаётся для каждого юнита в поле Side в FBI; в
TA: Kingdoms также определяет, с палитрой какой стороны будет
отрисовываться анимация GAF.
SQSH
Маркер (0x48535153 LE) в начале каждого сжатого фрагмента в
HPI. Шутливый намёк на то, что данные во фрагментах «сплющены»
(squashed).
Подкадр (sub-frame)
Вложенный кадр GAF. Один видимый кадр анимации может быть составлен из нескольких подкадров, выводимых по порядку, у каждого из которых своё смещение точки привязки и свои пиксельные данные.
TAF
Полноцветная анимация TA: Kingdoms. Использует структуру
контейнера GAF, но вместо индексов палитры хранит 16-битные
пиксели ARGB4444 / ARGB1555, поэтому несёт
собственный цвет и альфу. Расширение .taf общее с палитровыми файлами
в стиле GAF — различить их позволяет байт формата в каждом кадре.
Тик (tick)
См. игровой тик.
Тайл (tile)
Фрагмент графики карты размером 32×32 пикселя. Основная единица
отображения для TNT и SCT. Сетка тайлов индексируется
значениями uint16, что теоретически допускает до 65 536 уникальных
тайлов на карту.
Ключевой цвет прозрачности (transparency key)
Индекс палитры, который кадр GAF хранит как прозрачный. В кадре без сжатия игра не рисует пиксели с этим значением; в сжатом кадре прозрачны пиксели, пропущенные сериями пропуска, а остальные пиксели рисуются, даже если равны ключевому цвету. Общего для всей палитры прозрачного индекса нет: рельеф, миникарты, фоны PCX и текстуры моделей рисуют все индексы, включая индекс палитры 0 (чёрный). У полноцветных кадров TAF ключевого цвета нет — прозрачность задаёт альфа-канал каждого пикселя.
Полноцветное изображение (truecolor)
Растр, который хранит для каждого пикселя сам цвет (и альфу), а не индекс в палитре. Исключение из правила, по которому вся графика TA палитровая: анимации TAF в TA: Kingdoms используют 16-битные пиксели ARGB4444 / ARGB1555.
TSF
«TAF Source Format» — читаемая текстовая форма TAF с фигурными
скобками. Загрузчик интерфейса TA: Kingdoms читает .tsf напрямую для
фонов меню; kbot taf decompile выдаёт этот формат, а kbot taf compile
читает его обратно. См. TAF / TSF.
Виртуальная файловая система (VFS)
Объединённое дерево файлов, которое видит движок (а также
kbot mount / kbot mcp) после наложения слоями всех архивов семейства
HPI в корне установки. Позволяет ссылаться на файл вроде
units/ARMCOM.fbi, не думая, лежит ли он в totala1.hpi, ccdata.ccx
или в распакованном каталоге.
Пустая ячейка (void cell)
Ячейка атрибутов TNT с Feature == 0xFFFC. Помечает
непроходимый рельеф (стены каньонов, границы глубокой воды), который сам
не является объектом, но должен обрабатываться так, будто объект там
есть.
Yardmap
Многострочная ASCII-сетка в FBI, описывающая ограничения для
каждой ячейки площади основания здания. Распространённые буквы: o —
открытая земля, c — закрыто (застроено), w — только вода.