Ich habe nun ausreichend getestet und denke, die Geländemodellierung weitestgehend verstanden zu haben. Alle meine Beobachtungen und Tests wurden in 2070 gemacht. Ob sie 1 zu 1 auf 1404 übertragbar sind, kann ich nicht gewährleisten. Die zu Grunde liegende Mechanik sollte jedoch ähnlich sein.
Also dann: Öffnet man eines der 17x17-Elemente, welches für die Geländedarstellung des entsprechenden Quadrats verantwortlich ist, begegnet man einem Farbwirrwarr, das zunächst für große Fragezeichen sorgt; so leicht ist kein System zu erkennen, dass bestimmten Farben bestimmte Geländehöhen zuweist.
Tatsächlich scheint die Kombination der Farbkanäle ausschlaggebend zu sein. Dabei gibt es wohl eine Reihenfolge; die stärkste Auswirkung hat der Rotkanal, ihm untergeordnet ist der Grünkanal; ob diesem der Blaukanal untergeordnet ist, ist schwer zu sagen. Sollte dem so sein, ist die Auswirkung so gering, dass sie im Spiel nicht mehr sichtbar ist. Ich habe testweise den Blaukanal komplett entfernt, ohne eine sichtbare Änderung des Geländes festzustellen; wenn überhaupt modelliert er das Gelände nur in vernachlässigbarem Maße.
Wie kann ich nun mein Gelände verändern? Ausschlaggebend ist die Farbe, die ich mische und an die gewünschte Koordinate setze. Wie bereits gesagt schauen wir uns zunächst den Rotkanal an. Für unsere Zwecke müssen wir ihn in zwei Hälften "teilen"; 0-127 und 128-255.
0-127 ist für die Gestaltung des Geländes über dem Nullpunkt, also dem Meeresspiegel, verantwortlich, 128-255 für die Gestaltung des Geländes unter dem Nullpunkt. Dabei ist zu beachten, dass 0 und 128 (als Rotwert) genau die selbe Geländehöhe haben. Die "Reihenfolge" unserer Werte sieht also so aus: 255 (Maximale Geländetiefe) bis 128 (Nullpunkt), gleichwertig mit 0 (ebenfalls Nullpunkt), weiter bis 127 (Maximale Geländehöhe).
Tatsächlich wird man die Werte 255 oder 127 nie gebrauchen. Der Wert 67 hebt das Gelände bereits auf eine Höhe, die selbst bei weitestem Rauszoomen nicht mehr ins Bild passt (es sei denn man hat Änderungen in der engine.ini gemacht, um weiter rauszoomen zu können).
Für uns relevant sind die Rotwerte 194-128 und 0-66. 194 entspricht ungefähr der Höhe des Geländes am Meeresboden in 2070 (dem Meeresboden zwischen Inseln, nicht dem der Unterwasserinseln). Zur Modellierung der Küstenbereiche sind desweiteren die Werte 193, 192 und 191 anzuwenden. Dabei entspricht 191 nur noch einem Abstand von 0,5 Tile (also einem halben Feld) zum Nullpunkt; die Werte 190-129 sind demnach alle innerhalb dieses engen Bereiches von 0,5 Tile bis 128=Nullpunkt.
Überirdisch verhält es sich ähnlich; Nullniveau ist bei Rotwert 0 (wer hätte es gedacht!), von 1-62 ist alles innerhalb des darüberliegenden halben Tiles, Rotwert 63 ist exakt 0,5 Tile. Weitere nutzbare Rotwerte sind 64, 65 und 66. 67 ist wie erwähnt bereits zu hoch.
Was die Sache erschwert, ist der parabolische/hyperbolische (bin mit den Begriffen nicht so fit) Charakter der "Kurve"; Während die Werte 190-62 alle in dem 1 Tile um den Nullpunkt liegen, entspricht 194 etwa 20 Tile Tiefe (geschätzt) und 66 analog dazu 20 Tile Höhe. Die Abstände zwischen den Rotwerten sind also nicht äquidistant; 193 hat zum Beispiel nur noch eine Tiefe von geschätzt 5 Tile.
Wie überbrücke ich nun diesen Abstand von 15 Tile, wenn ich nicht nur steile Wände oder Klippen haben möchte? Hier kommt der Grünkanal ins Spiel, der etwas einfacher funktioniert. Die Werte 0-255 ermöglichen Abstufungen zwischen zwei nebeneinander liegenden Rotwerten (z.B. 194 und 193). Auch hier sind die Abstände nicht linear; hätte ich beispielweise R194 G0 B0, R193 G128 B0 und R193 G0 B0 als Farben an nebeneinander liegenden Koordinaten, wäre die Höhe der mittleren Koordinate nicht exakt auf der Hälfte zwischen den anderen beiden Höhen. Ein zweites Beispiel: Ich habe R64 G0 B0 und R65 G0 B0; mögliche Zwischenwerte wären R64 G100 B0 oder R64 G140 B0; bei dem Grünkanal muss man eben nicht auf die Halbierung achten.
Ich vermute, dass der Blaukanal nochmal auf dieselbe Weise abstufen kann, also zum Beispiel zwischen R64 G100 B0 und R64 G101 B0 als R64 G100 B50. Wie gesagt, ich würde den Blaukanal vernachlässigen, da der Effekt im Spiel nicht mehr wahrnehmbar ist.
Ideal wäre es, eine Funktion herzuleiten, in die man die gewünschte Höhe eingibt (in Tile oder als 4096, wie das oft in den Spieldateien ist) und die den benötigten Farbwert ausgibt (oder umgekehrt). Wie ich mit der Gauss-Funktion aus 3 Punkten eine Parabel herleite, weiß ich, es handelt sich nur nicht um eine Parabel, sondern um irgendwas anderes absonderliches
Bei der Geländegestaltung muss man also aufs Auge vertrauen. Die beiden einzigen sicheren Verbindungen zwischen Farbe und exakter Höhe sind R0 G0 B0 (bzw. R128 G0 B0) für Nullniveau und R63 G51 B51 für Bauniveau, was exakt 0,7 Tile entspricht bzw. 2867 (2867/4096=0,69999...).
Das sind also die Erkenntnisse zur Geländegestaltung. Wie man seine Grafikprogramme nutzt, um die gewünschten Ergebnisse zu erzielen, bleibt jedem selbst überlassen. Mit dem beschriebenen Wissen lässt sich aber alles anstellen, was die Entwickler auch konnten, nur eben zeitaufwendiger.
Transparenz der Texturen, wie gesagt, weiter direkt im Code bearbeiten.
Die Farbzusammenhänge des GOP-Managers schaue ich mir als Nächstes an; zwar kann man jetzt schon neu gestaltete Inseln erstellen, indem man unwegsames Gelände noch komplett blockt; darin Wege und Baufläche zu schaffen, wäre ja aber noch toller
Ich werde das ganze Prozedere abschließend nochmal von A bis Z zusammenfassen. Einige Seiten zuvor ist ja aber schon mal erklärt, wie man den Code in die Grafikdateien bekommt, daher verzichte ich nun auf eine Wiederholung.
Liebe Grüße, Judekw