Gelände – Mappedia

Gelände

Aus Mappedia
(Weitergeleitet von Terrain)
Wechseln zu: Navigation, Suche

Als Gelände bzw. Terrain bezeichnet man die Landschaft einer Karte mit ihren Bodentexturen, ihrem Verlauf, ihren Klippen, Plateaus und Hügeln. Das Gelände einer Karte kann mit dem im Welt-Editor enthaltenen Gelände-Editor bearbeitet werden. Es gibt dabei jedoch einige Einschränkungen wie z. B. der manuellen Pinselleinstellung des Verlaufs oder der exakten Höhe usw. Auch die Höhe von Hügeln ist begrenzt, kann aber manuell durch die Bearbeitung bzw. den Austausch der Datei "UI/MiscData.txt", welche sich in den MPQ-Archiven von Warcraft 3 findet, geändert werden.

Format

Jede Karte enthält in der Regel eine Datei namens "war3map.w3e", die wiederum die Geländedaten in binärer Form enthält.

Kopfdaten

Die Datei enthält zunächst eine Kopfdatenstruktur, hier als C-Struktur veranschaulicht: struct Environment { uint32_t fileId; uint32_t formatVersion; uint8_t mainTileset; uint32_t customTilesetsFlag; uint32_t groundTilesets; uint32_t *groundTilesetsIds; uint32_t cliffTilesets; uint32_t *cliffTilesetsIds; uint32_t mapWidthEx; uint32_t mapHeightEx; float centerOffsetX; // 32 bit! float centerOffsetY; // 32 bit! }; Es gilt zu beachten, dass diese Struktur nicht einfach am Stück eingelesen werden kann. Die Größen der Array-Eigenschaften "groundTilesetsIds" und "cliffTilesetsIds" entsprechen den vorangehenden jeweiligen Ganzzahlwerten. Die Arrays müssen also dynamisch alloziert werden. Die Eigenschaft "fileId" enthält normalerweise den Wert "W3E!", welcher die Datei als eine Geländedatei identifiziert. Die Eigenschaft "formatVersion" trägt in der aktuellen Version von Warcraft 3 für gewöhnlich den Wert 11 (hexadezimal: 0B 00 00 00 h). Danach folgt der Wert des Haupt-Grafiksets, welcher nur Auswirkungen auf das Gelände hat, falls kein eigenes Grafikset zusammengestellt wurde. Ist der Wert der Eigenschaft "customTilesetsFlag" 1, so wird ein angepasstes Grafikset und nicht das Hauptgrafikset verwendet. Nun folgt die Anzahl der verwendeten Bodentexturtypen. Danach folgt das Array, welches die vierstelligen, hexadezimalen Ids der Bodentexturtypen enthält. Es besitzt die Größe der Anzahl der verwendeten Bodentexturtypen. Danach folgen die gleichen Eigenschaften für die Klippentexturtypen. Zu guter Letzt kommen noch die Eigenschaften "mapWidthEx" und "mapHeightEx", die die Kartenbreite und -höhe plus 1 enthalten, da das Gelände auf eine spezielle Art gespeichert wird (siehe weiter unten). Multipliziert man diese Werte miteinander, so erhält man die Anzahl der Geländepunkte. Danach wird noch der Abstand zur Mitte der Karte als X- und Y-Wert, welcher in Skripts und von Doodads verwendet wird, gespeichert.

Geländepunkte

Das Gelände an sich besteht aus vielen einzelnen Punkten, die immer in Vierergruppen zusammen eine Fläche ergeben. Jeder dieser Punkte besteht im binären Format aus einer 7 Bit großen Datenstruktur, die Informationen über seine Höhe, seine Textur und verschiedene besondere Eigenschaften wie z. B. eine Verseuchung enthält. Dabei kann jeder der vier Punkte eine unterschiedliche Bodentextur enthalten, die auf bestimmte Weise ineinander übergehen. Eine Karte der Größe 256x256 besitzt also 257x257 dieser Geländepunkte. Im Folgenden wird auch die Struktur eines Geländepunkts in der Programmiersprache C veranschaulicht: struct EnviornmentPoint { int16_t groundHeight; int16_t waterLevelAndFlag; unsigned flags:4; unsigned groundTextureType:4; unsigned details:4; unsigned cliffTextureType:4; signed layer:4; }; Anmerkung für Leser, die mit C nicht vertraut sind: Die Ganzzahlausdrücke mit Doppelpunkten geben die Anzahl von Bits an, die die Struktureigenschaft belegt. Dies ist notwendig, da die Eigenschaft weniger Platz verbraucht als der kleinste verfügbare Datentyp "char".


Die im Karten-Editor angezeigte Höhe eines Geländepunkts berechnet sich folgendermaßen: (Bodenhöhe - 0x2000 + (Ebene - 2) * 0x0200)/4


Dabei ist die Eigenschaft "groundHeight" die Bodenhöhe und "layer" die Ebene. 0x0200 ist die Höhe einer Ebene.


Die im Karten-Editor und Spiel angezeigte Wasserhöhe berechnet sich folgendermaßen: (Wasserstufe - 0x2000) / 4 - 89,6

Dabei ist der Wert -89,6 die Wasserstartstufe, die sie aus dem Wert -0,7 (aus der Datei "Terrain/Water.slk") und dem Wert 128, der Höhe einer Klippenstufe, berechnet: -0,7 * 128.


Die Wasserstufe errechnet sich aus den ersten 15 Bits der Eigenschaft "waterLevelAndFlag".


Bei beiden Berechnungen ist der Wert 0x2000 die Bodenstartstufe.


Das letzte (fünfzehnte) Bit der Eigenschaft "waterLevelAndFlag" gibt an, on der Punkt ein Eckpunkt der Karte ist (falls es gesetzt ist, handelt es sich um einen Eckpunkt).


Die möglichen Werte der Eigenschaft "flags" haben folgende Bedeutungen:

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Warcraft-Mapping
Werkzeuge