Tiles · 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.
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | char | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 50 | 42 | 4d | 50 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | P | B | M | P | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datentyp | Bezeichnung | Erklärung |
---|---|---|---|
0x0000 | uint(32) | Magic Bytes | |
0x0004 | uint(24) | Block-Länge | |
0x0007 | uint(8) | Flags |
Bei den Tiles handelt es sich um ein Outpost-2-Spezifisches
Bitmap-Grafikformat. Sie erstrecken sich über 13 Tilesets,
"wells" genannt (well0000.bmp
bis well0012.bmp
),
die sich innerhalb des Volumes maps.vol befinden.
Dabei enthalten die Tilesets / Wells folgendes:
Dateiname | Inhalt |
---|---|
well0000.bmp | Eine 32x32px große, blaue Grafik - ideal als Test, ob der eigene Image-Loader funktioniert |
well0001.bmp | Enthält helles Gestein, Gebirgszüge auf hellem Gestein und unzählige Varianten von Einschlagskratern in helles Gestein |
well0002.bmp | Enthält helles-Gestein-'Doodads' - also Elemente, die zur Auflockerung (oder bewusst als Struktur, wie zB Mauern) auf hellem Gestein platziert werden können, darunter auch Vegetation |
well0003.bmp | Enthält eine krustenartige Struktur auf hellem Gestein |
well0004.bmp | Enthält dunkles Gestein, Gebirgszüge auf dunklem Gestein und unzählige Varianten von Einschlagskratern in dunkles Gestein |
well0005.bmp | Enthält dunkles-Gestein-'Doodads' - also Elemente, die zur Auflockerung (oder bewusst als Struktur, wie zB Mauern) auf dunklem Gestein platziert werden können |
well0006.bmp | Enthält eine Krustenartige Struktur auf dunklem Gestein, sowie Übergänge zwischen hellem und dunklem Gestein |
well0007.bmp | Enthält Lava inklusive jeweils 4-5 Frames Animation der selbigen |
well0008.bmp | Enthält Sand und unzählige Varianten von Einschlagskratern in Sand |
well0009.bmp | Enthält Sand-'Doodads' - also Elemente, die zur Auflockerung (oder bewusst als Struktur, wie zB Mauern) auf Sand platziert werden können |
well0010.bmp | Enthält je 48 Übergänge von Sand zu hellem und dunklem Gestein |
well0011.bmp | Enthält die Polarkappen der Map, mit dunklem Gestein als Untergrund |
well0012.bmp | Enthält die Polarkappen der Map, mit hellem Gestein als Untergrund |
Es erschreit ratsam für eine akkurate Umsetzung, die Tiles nicht im Vorraus zu rendern um diese zu cachen, da die Daten für den Tag/Nacht-Zyklus noch bearbeitet werden müssen - und sehr sehr viele Daten anfallen würden.
Die Tiles sind 8bpp-Grafiken mit indexierter Palette zu je 32x32 Pixel Auflösung, welche untereinander angeordnet sind. In einem so entstandenen Tileset können allerdings weitaus mehr
Der Haupt-Container besteht aus 2 Sektionen: head
und data
.
Tiles Header
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | char | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 68 | 65 | 61 | 64 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | h | e | a | d | . | . | . | . | . | . | . | . | . | . | . | . |
0x0010 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datentyp | Bezeichnung | Erklärung |
---|---|---|---|
0x0000 | uint(32) | Magic Bytes | |
0x0004 | uint(24) | Block-Länge | |
0x0007 | uint(8) | Flags | |
0x0008 | uint(32) | Version / Flags? | Hierbei könnte es sich um eine Versionsangabe des Dateiformates handeln; in allen mir vorliegenden Dateien stand hier der Wert |
0x000c | uint(32) | Breite (Horizontale Auflösung) | Gibt an, wie breit die Bilddatei ist (in Pixel). Bei allen Wells von Outpost 2 wird hier der Wert |
0x0010 | uint(32) | Höhe (Vertikale Auflösung) | Gibt an, wie hoch die Bilddatei ist (in Pixel). Bei allen Wells von Outpost 2 wird hier der Wert |
0x0014 | uint(32) | Farbtiefe? | Die Bedeutung dieses Wertes ist unbekannt. Da er in allen geprüften Dateien den Wert |
0x0018 | uint(32) | Farbtiefe 2? | Die Bedeutung dieses Wertes ist unbekannt. Möglicherweise handelt es sich um eine 'Ziel'-Farbtiefe. |
Nach diesen Angaben erfolgt noch eine im standardisierten RIFF-Format vorliegende Palettendatei. Die genaue Spezifikation findet sich - da die Paletten auch anderswo auftauchen - unter Paletten.
Tiles Daten
Adr | x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | char | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000 | 64 | 61 | 74 | 61 | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | d | a | t | a | . | . | . | . | . | . | . | . | . | . | . | . |
Offset | Datentyp | Bezeichnung | Erklärung |
---|---|---|---|
0x0000 | uint(32) | Magic Bytes | |
0x0004 | uint(24) | Block-Länge | |
0x0007 | uint(8) | Flags |
Schließlich folgen bereits die blanken Pixeldaten, von links-oben zeilenweise nach rechtsunten.
Der Datenwert bei den in aller Regel als 8bpp-Bitmaps vorliegenden Grafiken entspricht dabei dem Index der Farbe in der Farbpalette.
Die Spiel-Engine zeichnet die Tiles dabei *wahrscheinlich* on-demand.
Dies scheint unter anderem dem Tag-Nacht-Zyklus geschuldet zu sein, der 32 Abstufungen einzelner Tiles kennt. Dabei wird offenbar vom Helligkeitswert jeweils 'ein wenig' abgezogen. Genaue Werte ließen sich noch nicht ermitteln, ich arbeite auf der Berechnungsgrundlage
v *= (daylight / 48) + 0.25;
mit den HSV-Daten der Pixel, wobei daylight ein Wert von 0-31 ist und v ein Wert zwischen 0-1. Darüber hinaus ist zu berücksichtigen, dass auf der Map jeweils noch ein Rand von 16 Tiles nach links und rechts (der dient dem unsichtbaren Spawnen von Einheiten) existiert.
Zusätzlich scheint der Tag-Nacht-Zyklus pro Gamecycle jeweils nur eine Spalte der Map zu aktualisieren.
Ein beschleunigter Tag-Nacht-Zyklus sieht daher wie folgt aus: