Wolltet ihr schon immer mal wissen wie ein Level in Wolfenstein 3D in all seiner binären Schönheit aussieht?
Ich wollte das originale Shadow Warrior mit einem modernen Source Port spielen, aber leider gibt es nichts funktionsfähiges, also habe ich mich entschlossen selber einen Port zu schreiben. Das würde meine Fähigkeiten aber um Welten übersteigen, deshalb will ich die Doomsday Engine als Basis verwenden.
Das Coole an Doomsday ist dass die Engine ziemlich unabhängig von den eigentlichen Spielen ist, also muss ich "bloß" einen Importer für die Assets (Level, Grafiken, Sounds) und die Spielregeln schreiben und Doomsday erledigt den Rest.
Trotzdem waren Shadow Warrior und Duke Nukem 3D immer noch eine Nummer zu groß für mich, also habe ich mich entschieden mir etwas einfacheres vorzunehmen: Wolfenstein 3D. Ich habe soweit nun das Level Format und zwei Kompressionsalgorithmen (RLEW- und Carmack Kompression) komplett entschlüsselt und dokumentiert. Hier ist meine Dokumentation bis jetzt:
https://github.com/HiPhish/Game-Source-Documentation
Um meine Ergebnisse auch kontrollieren zu können habe ich ein kleines Tool in C geschrieben das einzelne Assets aus den Spieldateien extrahiert. Levels zum Beispiel sind doppelt komprimiert und dann alle in einer Datei zusammengeklebt. Um ein Level auszulesen muss man erst einmal in einer "Atlas" Datei herauslesen wo welches Level in der Maps Datei gespeichert ist. In der Maps Datei findet man dann den "Kopf" des Levels und der verrät einem dann wo sie einzelnen Karten des Levels sind, denn jedes Level besteht aus zwei übereinander gelegten Karten. Das Bild oben zeigt die Extrahierte Architektur Karte des ersten Levels.
Wer selbst mal probieren will, das Tool lässt sich hier finden:
https://github.com/HiPhish/Wolf3DExtract
Man muss es selbst kompilieren, aber der Code folgt strikt dem C99 Standard und verwendet keine 3rd Party Bibliotheken, sollte also auch auf jedem Toaster laufen.
Wer mithelfen will ist herzlich willkommen, ich muss noch wissen wie das Grafikformat aufgebaut ist und wie die Spielregeln sind.