Анимации · bei.pm

Опубликовано 19.11.2015·Обновлено 13.02.2025·Русский
Этот текст был автоматизированно переведен с помощью OpenAI GPT-4o Mini.

Форматы файлов, описанные на этой странице, основаны на техническом анализе интеллектуальной собственности Dynamix, Inc. и Sierra Entertainment.
Интеллектуальная собственность сегодня является частью активов Activision Publishing, Inc. / Activision Blizzard, Inc. и в настоящее время находится в собственности Microsoft Corp..

Информация была собрана с помощью обратного проектирования и анализа данных с целью архивирования и обеспечения совместимости с историческими данными.
Не использовались никакие собственнические или конфиденциальные спецификации.

Игра в настоящее время доступна для покупки в виде загрузки на gog.com.

Теперь мы переходим к королевскому классу дисциплин внутри форматов данных Outpost 2:
К анимациям.

Списки анимаций начинаются с глобального заголовка, который служит в основном для верификации данных. После этого следуют конкретные определения анимаций, которые делятся на 3 уровня:

  1. Анимация
    Анимация является верхней инстанцией; она представляет собой анимацию юнита, здания или 'частичной анимации' (удар кометы, погода, взрыв) в определенной начальной позиции.
  2. Кадр
    Кадр — это одно изображение в рамках анимации. Анимация может содержать один или несколько кадров.
  3. Субкадр
    Субкадр — это информация о том, что определенная битмап должна быть нарисована в определенном месте кадра по определенным критериям. Один кадр может содержать один или несколько субкадров.

После этого сразу следуют отдельные определения анимаций.

Адр x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF симв.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Смещение Тип данных Наименование Объяснение
0x0000 uint(32) Количество анимаций

Сколько анимационных наборов данных доступно

0x0004 uint(32) Количество кадров

Сколько всего кадров должно быть

0x0008 uint(32) Количество субкадров

Сколько всего субфреймов должно быть

0x000c uint(32) Количество дополнительных записей

Сколько имеется "дополнительных записей".

Анимация

Адр x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF симв.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Смещение Тип данных Наименование Объяснение
0x0000 uint(32) Неизвестно 1

Неизвестная информация

0x0004 uint(32) Ограничивающий прямоугольник: Слева

Указывает левый край (в пикселях) ограничивающего прямоугольника.

0x0008 uint(32) Ограничивающий прямоугольник: Вверх

Указывает верхнее начало (в пикселях) ограничивающей рамки.

0x000c uint(32) Границы: Ширина

Указывает ширину (в пикселях) ограничивающей рамки.

0x0010 uint(32) Границы: Высота

Указывает высоту (в пикселях) ограничивающего прямоугольника.

0x0014 uint(32) Смещение: X

Указывает горизонтальный центр анимации

0x0018 uint(32) Смещение: Y

Указывает вертикальный центр анимации

0x001c uint(32) Неизвестно 2

Неизвестная информация

0x0020 uint(32) Количество кадров

Указывает, сколько кадров анимации содержится в этой анимации

0x0024 uint(32) Количество окон

Указывает, сколько окон следует использовать при рисовании

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

Смещение в первую очередь определяет "нулевую точку"; точку, к которой нужно прибавить или вычесть игровые координаты. Можно также сказать математически: смещение здесь обозначает начало координат.

В окнах, так же как и в случае со смещением, содержится по 4 значения uint(32) для каждого окна, которые указывают область, пригодную для отдельных подрамок. За пределами окон не должно быть рисования, если это не предусмотрено для битовой карты.

Рамка

Адр x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF симв.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Смещение Тип данных Наименование Объяснение
0x0000 uint(8) Количество подсистем и переключатель для Опционального 1, 2

Это значение содержит:

  • 0x7F (битовая маска): Количество подсетей, используемых в этом кадре
  • 0x80: Информация о том, присутствуют ли Опциональные 1 и 2
0x0001 uint(8) Неизвестно 1 и переключатель для Опционально 3, 4

Это значение содержит:

  • 0x7F (Битовая маска): Неизвестно - Я сильно подозреваю, что это количество игровых тиков, которые проходят до следующего отображения кадра
  • 0x80: Информация о том, присутствуют ли Опциональные 3 и 4
0x0002 uint(8) Опционально 1

Неизвестно

0x0003 uint(8) Необязательный 2

Неизвестно

0x0004 uint(8) Необязательный 3

Неизвестно

0x0005 uint(8) Опционально 4

Неизвестно

Субрамка

Адр x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF симв.
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Смещение Тип данных Наименование Объяснение
0x0000 uint(16) Идентификатор битмапа

Указывает, какая битмапа должна использоваться для этого подфрейма

0x0002 uint(8) Неизвестно 1

Неизвестно - однако я сильно подозреваю, что это связано с приоритетом рендеринга (Z-слой).

0x0003 uint(8) Идентификатор подрамника

Указывает, в каком подфрейме мы находимся

0x0004 sint(16) Смещение - Горизонтальное

Указывает, где внутри фрейма должно быть расположено подфрейм, или на сколько пикселей битмап должен быть смещён по горизонтали.

0x0006 sint(16) Смещение - вертикальное

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

Теперь мы можем собирать отдельные кадры, а также целые анимации, как это демонстрируется на более сложной анимации с индексом 500

Анимация 500

Анимация 500 показывает, как грузовик Plymouth, загруженный обычным рудами, разгружается. Это одна из немногих анимаций, использующих функцию окон.

Таким образом, можно собрать всю анимацию вместе.
К сожалению, есть еще одна проблема с верхним люком, так как соответствующий бит в информации о типе графики не установлен.

Вот еще несколько прекрасно анимированных спрайтов из игры:

Рендеринг анимации 500 иллюстрирует

Анимация 500 полностью собрана

Здание завода Плимут

Космопорт Эден

Медицинский центр Эден

SCAT

Космопорт Плимут

Яйцо Пасхи:
Дед Мороз

Яйцо Пасхи:
Собака Дэна