Ich glaube das Format der Heightmaps verstanden zu haben:
Die große besteht aus 2 byte langen Ganzzahlen mit Vorzeichen.
Die 17*17 Quadrate bestehen aus 4 byte langen Gleitkommazahlen .
Dabei steht in der großen 1024 mal der Wert aus den kleinen Quadraten. Zum Beispiel: Meeresboden ist bei -4096 in der großen, -4 in der kleinen. Bauhöhe ist bei 716 in der großen, 0,7 in der kleinen. So weit ich's verstanden hab bestimmt die große Map die Höhe auf der Gebäude platziert werden und die kleine die Form des Geländes. Da scheints noch mehr Einschränkungen zu geben, aber damit hab ich mich nicht so genauer beschäftigt.
Ein Wert von 100 auf der kleinen Map ist gerade noch in der weitesten Kamera zu sehen. Die höchsten Berge sind irgendwo zwischen 10 und 15. Ich hab ein Bild angehängt, auf dem die Höhen zu sehen sind. Links ist 5, die mitte ist 10, rechts ist 15.
Zur Umrechnung gibt es teilweise tools im Netz (hier für Ganzzahlen(ohne Vorzeichen), hier für Gleitkommazahlen), allerdings ist das nicht das Optimum, wenn man z.B. einen schönen Übergang möchte. Außerdem muss man dabei beachten, dass die Zahlen verdreht in den Dateien liegen: Bauhöhe ist CC 02, allerdings muss man 02 CC im Umrechner eingeben, um die korrekte Antwort, 716, zu bekommen. Genauso ists mit den Gleitkommazahlen, 30 33 33 3F aus der Datei wird zu 3F 33 33 30.
Ich werd versuchen ein Programm zu schreiben, das ein Bild in Graustufen einliest, und daraus eine Inseldatei mit ausgefüllten Heightmaps erzeugt. Damit sind maximal 256 Abstufungen möglich, da ist die Frage was ist die maximale höhe, die man realistischerweise verwenden wird? Mit allem höher als 15 stößt man in der nahen Kamera zusammen. Man könnte zwar ein Plateu auf der Höhe 100 erstellen, aber das dann nur aus der fernen Kamera zu bebauen stell ich mir schlimm vor. Mein Vorschlag wäre ein Bereich von -4 (Meeresboden) bis ~20, damit hat man eine Abstufung von ca 0,1.