Animationen · bei.pm
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:
-
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. -
Frame
Ein Frame ist ein einzelnes Bild innerhalb einer Animation. Eine Animation kann ein oder mehrere Frames beinhalten. -
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:
|
0x0001 | uint(8) | Unbekannt 1 und Toggle für Optional 3, 4 | Dieser Wert enthält:
|
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: