Анімації · 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) Обмежувальний прямокутник: Ліворуч

Вказує лівий початок (в пікселях) Bounding Box.

0x0008 uint(32) Обмежуючий прямокутник: Верхній

Вказує верхній початок (в пікселях) Bounding Box.

0x000c uint(32) Обмежувальна рамка: Ширина

Вказує ширину (в пікселях) обмежувальної рамки.

0x0010 uint(32) Обмежувальний прямокутник: висота

Вказує висоту (в пікселях) Bounding Box.

0x0014 uint(32) Зсув: X

Вказує на горизонтальний центр анімації

0x0018 uint(32) Зсув: Y

Вказує вертикальний центр анімації

0x001c uint(32) Невідомо 2

Невідома інформація

0x0020 uint(32) Кількість кадрів

Вказує, скільки анімаційних кадрів міститься в цій анімації

0x0024 uint(32) Кількість вікон

Вказує, скільки вікон потрібно використовувати при малюванні

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

Зміщення (offset) в основному визначає "нулеву точку"; точку, яку потрібно враховувати або віднімати для внутрішніх координат гри. Можна також сказати більш математично: зміщення тут позначає координатний початок.

Вікна аналогічно до зміщення складаються з 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) Bitmap-Id

Вказує, яка растрова графіка має використовуватися для цього підфрейму

0x0002 uint(8) Невідомий 1

Невідомо - проте я сильно підозрюю, що йдеться про пріоритет рендерингу (Z-слой).

0x0003 uint(8) Субрамка-Ід

Вказує, в якому підрамці ми знаходимося

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

Вказує, де всередині фрейму має бути розташоване підфрейм, або на скільки пікселів бітмап має бути горизонтально зсунутим

0x0006 sint(16) Зсув - Вертикальний

Вказує, де всередині фрейму має бути розміщене підфрейм, або на скільки пікселів бітмап має бути вертикально зсунутою

Тепер ми можемо складати окремі кадри, а також цілі анімації відповідно, на прикладі більш складної анімації з індексом 500, продемонстровано

Анімація 500

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

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

Ось ще кілька інших, чудово анімованих спрайтів з гри:

Візуалізація анімації 500 ілюструє

Анімація 500 завершена

Фабрика будівель Plymouth

Космопорт Eden

Медичний центр Eden

SCAT

Космопорт Plymouth

Секрет:
Дід Мороз

Секрет:
Собака Дена