Ich habe ein neues Projekt angefangen, einen Karteneditor für Rundenstrategieklassiker Historyline 1914-18.
Historyline ist eines meiner lieblings DOS-Games. In den 90ern habe ich mir regelmäßig erbitterte Schlachten mit Freunden geliefert und entsprechend viele tolle Erinnerungen daran.
Leider ist der Computergegner ziemlich simpel gestrickt und die Karten kennt man mittlerweile natürlich in und auswendig. Hier fehlt doch eindeutig die Möglichkeit, eigene Karten zu erstellen!
Die Editoren, die es für Battle Isle gibt, funktionieren leider für History Line (einen Ableger der Reihe) nicht. Daher habe ich mich vor Jahren schon mal daran versucht, herauszufinden, wie die Karten im Spiel gespeichert sind und möglichst einen Editor zu schreiben. Damals bin ich aber daran gescheitert, dass alle Datendateien des Spiels gepackt sind - mit dem Turbo Packer von Wolfang Meyerle, einem Packer der nur für den Amiga und den Atari ST erschien. Mehr Infos habe ich damals nicht gefunden und die exe-Dateien zu disassemblieren, die Entpackroutine zu finden und mühsam aus dem Code zu erschließen... die Mühe war es mir dann auch nicht wert. Ich habe noch etwas herumprobiert und es dann sein gelassen.
Vor ein paar Tagen habe ich dann in der Mittagspause etwas bei Github herumgestöbert und dabei ein interessantes Projekt gefunden: "Ancient - Modern decompressor for old data compression formats" von Teemu Suutari. Und in der Liste der unterstützten Formate finde ich dann plötzlich "Turbo Packer by Wolfgang Mayerle"! Natürlich erinnerte ich mich sofort an meine vergeblichen Versuche, History Line seine Geheimnisse zu entlocken und war sofort wieder voll dabei
In TPWMDecompressor.cpp steht alles, was ich damals an Info gebraucht hätte. Zudem findet man mittlerweile m Netz sogar Infos vom Autor des Packers!
Der Dateiheader besteht aus der ID "TPWM" gefolgt von vier Byte, die die größe der ungepackten Daten enthalten, dann das erste "Steuerbyte" und damit das, was ich damals selber nich herausgefunden habe.
Hier geben die Bits an, wie die nachfolgenden 8 Byte zu interpretieren sind. 0 = Byte wird einfach übernommen. 1 = es folgt eine Sequenz, die in den bereits entpackten Daten schon vorliegt und an diese Stelle kopiert werden muss. In diesem Fall werden zwei Byte gelesen, die die Länge der Seqenz und den Offset (bzw. den relativen Abstand vom aktuellen Offset in den schon entpackten Daten) enthalten. Nach acht Byte folgt dann das nächste Steuerbyte. Das ist es im Grunde schon.
Muss man nur wissen
Und besonders gut ist, um entpackte und geänderte Daten für das Spiel wieder zu packen, muss man sich nicht den kompletten Pack-algorithmus des Turbo Packer nachbauen. Es reicht ja, den Header und alle acht Byte ein 0-Byte (Steuerbyte, dass die nächsten acht Byte einfach übernommen werden) einzufügen. Die Datei wird dann zwar größer anstatt kleiner, aber die Dekompressionsroutine hat wieder Daten, mit denen sie etwas anfangen kann.
Ich habe es ausprobiert und das Entpacken der Spieldateien funktioniert ganz problemlos!
Und auch zum Aufbau der Karten habe ich dann schon einiges herausgefunden:
Die Karten sind im Unterverzeichnis Maps zu finden. Für jede Karte gibt es eine .fin und eine .shp Datei und für die Kampagnen-Karten auch eine .com (ist aber nicht ausführbar) und dann gibt es noch .hi Dateien mit der Highscore-Liste.
Gestern Abend habe ich damit etwas herumprobiert und schon einiges herausgefunden:
Zuerst kommen die Karten auf deutscher, dann die auf französischer Seite und dann die zwei Spieler Karten. 00.fin/00.shp enthalten also die Daten für "PULSE", 71.fin/71.shp die für "GREEN".
Die .fin Datei enthält die Kartendaten
Hier konnte ich den Aufbau auch schnell mit einem Hex-Editor herausfinden:
Am Anfang steht die Kartengröße in vier Byte (zwei hätten es auch getan, oder wie groß haben die bei BlueByte Karten geplant?!?).
Dann folgen zwei Byte für jedes Hex-Feld. Das erste Byte gibt an, welche Terrain-/Bodengrafik für das Feld verwendet werden soll, das zweite, was für eine Einheit auf dem Feld steht.
Steht keine Einheit auf dem Feld, wird das zweite Byte auf FF gesetzt.
00 00 erzeugt zum Beispiel einen deutschen Spähpanzer auf Gras, 00 FF ein leeres Grasfeld und 01 FF den Eingang einens deutschen Hauptquartiers.
Interessant ist hier: Sobald ein Gebäudeeingang gestzt wird, erkennt das Spiel das Gebäude. Den Rest des Gebäudes braucht es also eigentlich nicht.
In der Datei ist die Karte jeweils eine Reihe größer gespeichert, als im Spiel sichtbar ist. Als Daten für nicht sichtbare Felder sind AE FF gesetzt.
Das ist alles in den .fin Dateien, aber damit ist die größte Hürde, um einen Karteneditor zu schreiben, ja eindeutig schon genommen.
Die .shp Dateien scheinen die zusätzlichen Infos zu enthalten. Zum Beispiel, welche Einheiten sich in neutralen Gebäuden befinden, ob die Karte im Sommer oder Winter spielt, welche Einheiten in Fabriken gebaut werden können,
wie viele Rohstoffe die Spieler bekommen usw. Das ändert sich nämlich auch, wenn man mal die .shp Dateien der Karten tauscht.
Hier muss ich den Aufbau noch herausfinden und auch, was es mit den .com Dateien auf sich hat.
So weit bin ich bisher. Es sieht also gut aus für einen Historyline 1914-18 Mapeditor.
Vielleicht hat ja jemand von euch Lust mitzumachen?
Alle Grafiken liegen übrigens als .lbm oder .iff Dateien vor und lassen sich nach dem Entpacken problemlos ansehen oder auch bearbeiten.
In den .dat und .lib Dateien sind mehrere Grafikdateien zusammengefasst, die lassen sich aber einfach auslesen, da alle einzeln gepackt worden sind und jede neue Datei daher mit "TPWM" beginnt.
Man könnte jetzt also auch eine Historyline-Grafik-Mod machen