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?
- Benennt
colibri.xml
in etwas anderes um, dann benenntjetranger.xml
in etwas anderes um, dann startet das Programm. - Die Datei
colibri.xml
(sowie auchjetranger.xml
) beinhält alle Informationen, die den Hubschrauber betreffen. Ich würde vorsichtig sein, aber man kann hiermit sehr viel Spaß haben. - Alle Texte der deutschen Version stehen in
strings.de
. Achtung: Nur der Text auf der rechten Seite des Gleichheitszeichens darf verändert werden, und Notepad kann UTF16-Dateien nicht korrekt öffnen, nehmt also Wordpad. - Man kann ein geheimes Debug-Menü öffnen. Unter Windows muss man in die Registry, Pfad
HKEY_CURRENT_USER\Software\Ferroequinologist\Hubschrauber
und dort den Wert vonuse_debug_menu
von 0x0 auf 0x1 oder einfach nur 1 ändern. Unter Mac OS X gibt man im Terminaldefaults write de.ferroequinologist.Hubschrauber use_debug_menu -bool yes
ein. Viel zu sehen gibt es nicht, aber immerhin etwas.
Geschrieben am 16. Februar 2007 um 17:19