Tiles

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.

Veröffentlicht am 10.06.2018, aktualisiert am 18.03.2019

ADR x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0000 0000 50 42 4D 50 xx xx xx xx  

Dabei enthalten die Tilesets / Wells folgendes:

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 empfielt sich 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
0000 0000 68 65 61 64 xx xx xx xx xx xx xx xx xx xx xx xx
0000 0010 xx xx xx xx xx xx xx xx xx xx xx xx  
Version? Datentyp: uint32
Hierbei könnte es sich um eine Versionsangabe des Dateiformates handeln; in allen mir vorliegenden Dateien stand hier der Wert 0x02
Horizontale Auflösung Datentyp: uint32
Gibt an, wie breit die Bilddatei ist (in Pixel).
Bei allen Wells von Outpost 2 wird hier der Wert 0x20 bzw 32 zu erwarten sein.
Vertikale Auflösung Datentyp: uint32
Gibt an, wie hoch die Bilddatei ist (in Pixel)
Farbtiefe? Datentyp: uint32
Die Bedeutung dieses Wertes ist unbekannt.
Da er in allen geprüften Dateien den Wert 8 enthält, könnte es sich um eine Farbtiefenangabe handeln.
Farbtiefe? Datentyp: uint32
Die Bedeutung dieses Wertes ist unbekannt.
Da er in allen geprüften Dateien den Wert 8 enthält, könnte es sich um eine Farbtiefenangabe handeln.

Nach diesen Angaben erfolgt noch eine im standardisierten RIFF-Format vorliegende Palettendatei. Die genaue Spezifikation findet sich - da die Paletten auch anderswo auftauchen - unter "Palette".

Tiles Daten

ADR x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0000 0000 64 61 74 61 xx xx xx xx  

Schließlich folgen bereits die blanken Pixeldaten, von links-oben zeilenweise nach rechtsunten. Der Datenwert 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 mit dieser Annäherung wie folgt aus:

Kommentare

Kommentar hinzufügen

Dein Kommentar wird möglicherweise nicht sofort dargestellt werden. Kommentare werden aus Spamschutzgründen moderiert.