Neue Maps für Hubschrauber

Ich bin gerade aus einem einwöchigen Lehrgang aus Bad Oeynhausen zurück. Ich wollte darüber was schreiben, aber letztlich ist es doch nicht so entscheidend. Viel wichtiger ist etwas anderes:

Björn hat eigene Maps für Hubschrauber erstellt. Darüber bin ich sehr erfreut, aber auch verblüfft, denn ich hätte nicht erwartet, dass jemand jetzt schon so etwas tut. Wie auch immer, es ist verdammt cool.

Neue Maps machen

Ich möchte dies als Anlass nehmen, um hier ein wenig zu beschreiben, wie man für Hubschrauber neue Maps erstellt. Allerdigns ist zu beachten, dass es von mir eigentlich nicht vorgesehen war, neue Maps zu machen, zumindest in dieser Version, so dass einiges etwas umständlich ist.

Die Grundlagen

Zuerst einmal braucht man die Björn-LAN-Edition von Hubschrauber. Wer nicht auf der LAN war erhält sie nicht. Wer dort war, aber sie nicht mehr auf dem Rechner hat, hat ein kleines Problem: Die Datei liegt auf der Festplatte meines Computers, der seit letztem Wochenende nicht mehr hochfahren will. Ich plane, dass an diesem Wochenende zu beheben, aber wenn es schnell gehen soll, fragt am besten Björn.

Es gibt in Hubschrauber einen Ordner, der alles interessante beinhält. Unter Mac OS X findet man ihn, in dem man auf das Programm rechtsklickt und dann “Paketinhalt anzeigen” auswählt. Hier gibt es “Contents”, darunter “Resources”. Unter Windows ist der Ordner im selben Verzeichnis wie das Programm und heißt “Ressources” (wer sich wundert: Die Schreibweise unter Mac OS X ist richtig, die unter Windows werde ich in der nächsten Version anpassen). Alle Dateien, über die ich jetzt reden werde, befinden sich dort.

Die Landschaft verändern

Am einfachsten ist es, die Landschaft zu verändern. Dazu gibt es zwei wichtige Dateien: heightmap.png und terraintypemap.png. Diese Dateinamen kann man übrigens auch ändern. Wie beschreibe ich weiter unten. Wichtig ist aber, dass beide Dateien nur Graustufen enthalten, dass sie immer quadratisch sind und ein Format wie 128x128, 256x256 und so weiter haben. Größer als 128x128 oder vielleicht noch 256x256 empfehle ich nicht, denn die Anzahl der Polygone auf dem Bildschirm hängt direkt davon ab.

Die Regeln für beide Dateien sind sehr einfach: heightmap.png beinhält eine einfache Höhenkarte. Man kann sie einfach mit einem Bildbearbeitungsprogramm verändern. Weiß bedeutet oben, Schwarz bedeutet unten, und Graustufen liegen dazwischen. Andere Farben führen nur zur Verwirrung, also bitte nicht nehmen. Rampen kann man mit Farbverläufen erstellen. Diese einfache Methode verwendet übrigens auch z.B. die Battlefield-Serie, um ihre Karten darzustellen.

Terrainfarben sind schon etwas schwieriger. Auch die dafür zuständige Datei, terraintypemap.png, enthält nur Graustufen. Jeder Graustufe wird eine bestimmte Farbe zugeordnet. Um dies genau zu verstehen, sollte man weiter unten nachlesen. Für erste Versuche reicht es, die Farben aus meiner Map zu kopieren und damit herumzuspielen.

Map-Eigenschaften ändern

Um die Eigenschaften der Map zu ändern, muss man map1.map verändern. Auch diesen Dateinamen kann man übrigens ändern, wie, steht weiter unten. Dabei handelt es sich um eine einfache XML-Datei, die zum Beispiel mit Wordpad, Notepad oder TextEdit bearbeitet werden kann. Hier stehen alle wesentlichen Informationen. Ich habe hier als Beispiel einfach mal die normale Datei:

<?xml version="1.0" ?>
<map version="2">
    <images height="heightmap.png" terrain="terraintypemap.png" />
    <texture src="rock.png" />
    <scale x="10" y="200" z="10" />
    <layer>
        <texture src="road.png" />
        <colorrange min="100" max="150" />
    </layer>
    <layer>
        <texture src="gras2.png" />
        <colorrange min="0" max="10" />
        <effects fur="yes" />
    </layer>
</map>

Wer HTML kennt, sollte sich auch hiermit zurechtfinden. Die wesentlichen Unterschiede: Alles klein schreiben, Attributwerte immer in Anführungszeichen und leere Elemente müssen ein Slash (/) am Ende haben.

Die ersten beiden Zeilen, wie auch die letzte, sind völlig uninteressant, müssen aber immer vorhanden sein. Ich würde davon abraten, sie zu verändern. Zuerst interessant ist <images>. Die Werte für height und terrain geben die Dateinamen für die Höhen- und Farbkarte an, jeweils entsprechend. Damit kann man etwas anderes als heightmap.png und terraintypemap.png nehmen, was ich übrigens sehr empfehlen würde. Unterordner funktionieren vermutlich nicht, vielleicht aber auch doch. Man müsste experimentieren. Volle URLs gehen auf jeden Fall nicht.

<scale> ist auch cool. Bekanntermaßen legt die Farbe eines jeden Pixels die Höhe an einer Stelle der Map fest. Dieses Element legt fest, wie viel Platz zwischen den Pixeln sind, in Metern. Der Wert für y ist etwas anders: Er gibt die Höhen an. Schwarz wird hier als 0 angesehen, weiß als 1. Das wird dann mit dem Wert für y multipliziert, um die echte Höhe zu erhalten.

Die Texturen sind nun wiklich schwierig. Sie sind nämlich in Ebenen geordnet. Jede Ebene hat ihre eigene Textur, und einen Farbwert, bei dem sie angewandt wird. Die erste Textur, die hier direkt unter <images> steht, wird dort angewendet, wo keine andere Textur ist. Alle anderen stecken in <layer>-Elementen. Diese beinhalten jeweils ein <texture>-Element, welches die Texturdatei festlegt, und ein <colorrange>-Element. Dieses legt fest, für welche Grauwerte diese Textur angewandt wird. 0 bedeutet schwarz, 255 ist weiß. Das <effects>-Element letztendlich besagt, wenn das fur-Attribut auf yes steht, dass auf diese Ebene der “Verbessertes Gras”-Effekt angewandt wird. Es darf nur bei einer Ebene vorhanden sein.

Objekte auf der Map

Hier sind wir jetzt bei der einzigen Datei angelagt, deren Name nicht verändert werden kann: map1.objects. Wie auch die Eigenschaftendatei handelt es sich hier um eine XML-Datei, und ihr Inhalt sollte so aussehen:

<?xml version="1.0" ?>
<map_objects version="1">
    <map src="map1.map" />
    <positions>
        <pos src="heliport.hbsc" rotation="0 0 0" position="-320 122.5 -240" />
    </positions>
</map_objects>

Tut er aber nicht. Er enhält viele Elemente, die irgend etwas mit “schiene” zu tun haben. Wie der kluge Mensch sich wohl schon gedacht hat, hat das etwas mit Eisenbahnen zu tun. Leider funktioniert das alles aber überhaupt nicht, also kann man es ignorieren und löschen. Für neue Maps empfehle ich, es gleich zu löschen.

Das <map>-Element beinhält den Namen der Datei, die die Eigenschaften für die Landschaft speichert.

Interessant sind die <positions>: In ihnen sind die Elemente, die statische Objekte auf der Map beschreiben. Wie man oben sieht, gibt es nur sehr wenig statische Objekte auf meiner Map, aber man kann durchaus mehr drauf machen. Das Problem: Das Objekt muss im HBSC-Format vorliegen, eines, welches ich selbst erdacht habe und für das die Tools nicht öffentlich zur Verfügung stehen. Ich werde dies ändern, aber da ich vorhabe das Format demnächst stark zu modifizieren, kann ich die nötigen Tools derzeit nicht veröffentlichen. Bis dahin muss man sich also mit den Dateien begnügen, die im Ordner liegen. Nicht alle davon sind auch im Spiel verwendet. Außerdem kann man durch viele einfach durchfliegen. Probiert es am besten aus.

Die Elemente, die festlegen, was sich wo befindet, sind die <pos>-Elemente. Ich möchte gleich zu Anfang klarstellen: Das Element mit heliport.hbsc verlegen ändert nicht, wo der Hubschrauber am Anfang startet. Das kann man derzeit leider überhaupt nicht ändern. Das src-Attribut gibt die Datei an, die es zu platzieren gilt. Das position-Attribut gibt an, wo es ist: Zuerst X, dann Y und dann Z-Koordinate. In meiner grenzenlosen Doofheit habe ich den Ursprung des Koordinatensystems in den Mittelpunkt der Map verlegt, so dass ich jetzt immer lange am Taschenrechner rumrudern muss, wenn ich etwas exakt platzieren will, ohne, dass das Programm einen echten Vorteil daraus hab. In späteren Versionen des Programms wird man den Ursprung vielleicht manuell festlegen können.

rotation gibt an, wie weit das Objekt gedreht wurde, zuerst um die X-, dann die Y- und zuletzt die Z-Achse. Ich hatte es bisher noch nie nötig, etwas um eine andere als die Y-Achse zu drehen. Maßeinheit sind übrigens Grad, Dezimaltrennzeichen ist nicht das Komma, sondernd der Punkt, weil ich zum Einlesen der Zahlen Funktionen verwende, die von Amerikanern geschrieben wurden.

Abschließendes

Ich gebe keine Garantie für jarnischt. Erstellt zuerst eine Sicherheitskopie eures Hubschrauber-Ordners. Wenn etwas nicht läuft, schaut nach, ob ihr in den stdout.txt und stderr.txt-Dateien der Windowsversion, oder im “Konsole”-Programm in console.log unter Mac OS X, etwas findet, was auf euer Problem zutreffen könnte. Es ist zumindest denkbar, dass ich Änderungen einführe, die es erfordern, dass ihr eure selbsterstellten Maps überarbeitet, damit sie auf der nächsten Version laufen. Dieser Beitrag ist recht schnell entstanden, es können also Fehler und Unklarheiten drin sein. Weist mich bitte darauf hin, damit ich sie korrigieren kann.

Tricks

Noch Lust auf ein paar kleine Hacks?

Geschrieben am 16. Februar 2007 um 17:19

0 Kommentare

    New comments can no longer be posted because it got to annoying to fight all the spam.