Animationen · bei.pm

Veröffentlicht am 19.11.2015·Aktualisiert am 13.02.2025·Deutsch

Die auf dieser Seite beschriebenen Dateiformate basieren auf der technischen Analyse geistigem Eigentums von Dynamix, Inc. und Sierra Entertainment.
Das geistige Eigentum ist heute Teil der Activision Publishing, Inc.- / Activision Blizzard, Inc.-Masse und derzeit im Besitz von Microsoft Corp..

Die Informationen wurden durch Reverse Engineering und Datenanalyse zum Zwecke der Archivierung und Interoperabilität mit historischen Daten zusammengetragen.
Es wurden keine proprietären oder vertraulichen Spezifikationen verwendet.

Das Spiel kann derzeit bei gog.com käuflich als Download erworben werden.

Nun kommen wir zur Königsklasse der Disziplinen innerhalb der Outpost 2 Datenformate:
Den Animationen.

Die Animationslisten werden mit einem globalen Header, der primär der Datenverifikation dient, eingeleitet. Daraufhin folgen die konkreten Animationsedefinitionen, die sich in 3 Stufen gliedern:

  1. Animation
    Eine Animation ist die oberste Instanz; sie stellt eine Animation einer Einheit, eines Gebäudes oder einer 'Partikel-Animation' (Kometenschlag, Wetter, Explosion) in einem bestimmten Ausgangslage dar.
  2. Frame
    Ein Frame ist ein einzelnes Bild innerhalb einer Animation. Eine Animation kann ein oder mehrere Frames beinhalten.
  3. Subframe
    Ein Subframe ist die Information darüber, dass eine bestimmte Bitmap unter bestimmten Kriterien an eine bestimmte Position eines Frames gezeichnet werden soll. Ein Frame kann ein oder mehrere Subframes beinhalten.

Anschließend folgen schon direkt die einzelnen Animationsdefinitionen.

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF char
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Datentyp Bezeichnung Erklärung
0x0000 uint(32) Anzahl Animationen

Wieviele Animationsdatensätze vorhanden sind

0x0004 uint(32) Anzahl Frames

Wieviele Frames insgesamt vorhanden sein sollten

0x0008 uint(32) Anzahl Subframes

Wieviele Subframes insgesamt vorhanden sein sollten

0x000c uint(32) Anzahl optionaler Einträge

Wieviele "optionale Einträge" vorhanden sind.

Animation

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF char
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0010 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
0x0020 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Datentyp Bezeichnung Erklärung
0x0000 uint(32) Unbekannt 1

Unbekannte Informationen

0x0004 uint(32) Bounding Box: Links

Gibt den linken Anfang (in Pixel) der Bounding Box an.

0x0008 uint(32) Bounding Box: Oben

Gibt den oberen Anfang (in Pixel) der Bounding Box an.

0x000c uint(32) Bounding Box: Breite

Gibt die Breite (in Pixel) der Bounding Box an.

0x0010 uint(32) Bounding Box: Höhe

Gibt die Höhe (in Pixel) der Bounding Box an.

0x0014 uint(32) Offset: X

Gibt den horizontalen Mittelpunkt der Animation an

0x0018 uint(32) Offset: Y

Gibt den vertikalen Mittelpunkt der Animation an

0x001c uint(32) Unbekannt 2

Unbekannte Information

0x0020 uint(32) Anzahl Frames

Gibt an, wieviele Animationsframes in dieser Animation enthalten sind

0x0024 uint(32) Anzahl Windows

Gibt an, wieviele Fenster beim Zeichnen anzuwenden sind

Die Daten der obersten Schicht, der Animation, sind dabei vorrangig Verwaltungsdaten - die Boundingbox bezeichnet dabei die Koordinaten der Markierung um das Fahrzeug/Gebäude, wenn das selbige ausgewählt ist und gibt auch gleichzeitig an, welcher Bereich anklickbar sein soll.

Das Offset bestimmt vorrangig den "Nullpunkt"; den Punkt, der auf spielinterne Koordinaten aufzurechnen beziehungsweise abzuziehen ist. Man könnte auch mathematischer sagen: das Offset bezeichnet hier den Koordinatenursprung.

Bei den Windows handelt es sich, genauso wie beim Offset, um jeweils (pro Window) 4 uint(32)-Werte, die einen Bereich angeben, der für einzelne Subframes als verwendbar gilt. Ausserhalb der Windows darf, sofern es für die Bitmap entsprechend vorgesehene ist, nicht gezeichnet werden.

Frame

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF char
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Datentyp Bezeichnung Erklärung
0x0000 uint(8) Subframe-Anzahl und Toggle für Optional 1, 2

Dieser Wert enthält:

  • 0x7F (Bitmaske): Die Anzahl an Subframes, die in diesem Frame verwendet werden
  • 0x80: Die Information darüber, ob Optional 1 und 2 vorhanden sind
0x0001 uint(8) Unbekannt 1 und Toggle für Optional 3, 4

Dieser Wert enthält:

  • 0x7F (Bitmaske): Unbekannt - Ich vermute stark, dass es sich hierbei um die Anzahl an Gameticks handelt, die vergehen, bis das nächste Frame angezeigt wird
  • 0x80: Die Information darüber, ob Optional 3 und 4 vorhanden sind
0x0002 uint(8) Optional 1

Unbekannt

0x0003 uint(8) Optional 2

Unbekannt

0x0004 uint(8) Optional 3

Unbekannt

0x0005 uint(8) Optional 4

Unbekannt

Subframe

Adr x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF char
0x0000 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- . . . . . . . . . . . . . . . .
Offset Datentyp Bezeichnung Erklärung
0x0000 uint(16) Bitmap-Id

Gibt an, welche Bitmap für diesen Subframe verwendet werden soll

0x0002 uint(8) Unbekannt 1

Ist unbekannt - ich vermute allerdings stark, das es sich hierbei um eine Render-Priorität (Z-Layer) handelt.

0x0003 uint(8) Subframe-Id

Gibt an, in welchem Subframe wir uns befinden

0x0004 sint(16) Offset - Horizontal

Gibt an, wo innerhalb des Frames das Subframe platziert werden soll, bzw. um wieviele Pixel die Bitmap horizontal verschoben werden soll

0x0006 sint(16) Offset - Vertikal

Gibt an, wo innerhalb des Frames das Subframe platziert werden soll, bzw. um wieviele Pixel die Bitmap vertikal verschoben werden soll

Damit können wir nun einzelne Frames, als auch komplette Animationen entsprechend zusammensetzen, hier einmal exemplarisch an einer komplexeren Animation, der Animation mit dem Index 500, demonstriert

Animation 500

Animation 500 zeigt, wie ein Plymouth-Transporter, der mit gewöhnlichem Erz beladen ist, entladen wird. Dabei handelt es sich um eine der wenigen Animationen, die die Windowing-Funktionalität nutzt.

Und so lässt sich die komplette Animation zusammenfügen.
Leider gibt es noch ein Problem mit der oberen Ladeluke, da hier das entsprechende Bit in der Grafiktyp-Information nicht gesetzt ist.

Hier noch ein paar weitere, wunderschön animierte Sprites aus dem Spiel:

Rendering von Animation 500 illustriiert

Animation 500 fertig zusammengefügt

Plymouth Gebäude-Fabrik

Eden Weltraumhafen

Eden Medizinisches Zentrum

SCAT

Plymouth Weltraumhafen

Easteregg:
Weihnachtsmann

Easteregg:
Dans Dog