Archiv für den Monat: August 2020

Was bisher geschah: Einem erfolglosen Remake-Entwickler ist es trotz aller Widrigkeiten schließlich doch noch gelungen, alle Originaldateien von SPACOLA mit Hilfe eines Debuggers in einem Atari ST-Emulator zu extrahieren. Doch das sollte noch lange nicht das Ende seiner abenteuerlichen Reise in die Heimcomputer-Vergangenheit des späten 20. Jahrhunderts sein, denn die antiken Hieroglyphen in den Originaldaten mussten erst noch aufwändig von einem gewieften Software-Archäologen entziffert und entschlüsselt werden. Dies ist seine haarsträubende Geschichte.

Da saß ich nun also, mit einem ganzen Haufen alter, unlesbarer Sprite-Dateien aus dem Spiel SPACOLA, ohne irgendeinen Hinweis, was ich damit anfangen könnte, und welche sagenhaften Geheimnisse diese historischen Dokumente letztlich bargen. Lediglich aus den perfekt erhaltenen Dateinamen ließ sich ungefähr ersehen, welche Sprites genau darin zu finden seien. Mein geschätzter Mit-Atarianer und Blogleser Gerry hatte mich glücklicherweise bereits Jahre zuvor mit einem wichtigen Zeitschriftenartikel aus der guten alten „ST Computer“ versorgt, in dem Meinolf Schneider höchstpersönlich im Jahr 1990 über die Entwicklung von Bolo und Esprit berichtet. Dieser Artikel erwies sich als pures Gold und enthielt so einige hochinteressante Einblicke und Fakten, die mir als Entwickler wiederum bedeutende Implementierungsdetails verrieten. Unter anderem beschrieb Meinolf darin einzelne Aspekte seines eigenen Sprite-Formats, den sogenannten „Shapelists“. Wie das Format aufgebaut war, war daraus zwar leider noch lange nicht ersichtlich, aber dafür andere wichtige Eigenarten, die später von Vorteil sein sollten.

Der Hex-Editor HxD zeigt eine SHL-Datei

Das Hilfsmittel Nummer eins war wiederum der Hex-Editor, mit dem ich mir die Dateien Byte für Byte quasi unter der Lupe ansehen konnte. Bei genauerem Hinsehen erkannte ich, dass diese Dateien immer aus mehreren „Blöcken“ bzw. Abschnitten bestehen, nämlich aus mindestens zwei, so wie im Falle der kleinsten Datei „SPI_MINE.SHL“. Diese spezielle Datei sollte mir schließlich zur Lösung des Rätsels dienen, da ich hierüber zum Glück ausreichend wusste. Da sie nachweislich aus genau zwei Blöcken besteht, wusste ich nun ziemlich sicher, dass nur die zwei einzelnen Sprites der beiden Sprengminen des Originals darin enthalten sein konnten. Ich wusste wie diese Sprites genau aussehen, wie groß sie sind, und am allerwichtigsten, dass diese Sprites zu einem großen Teil symmetrisch sind. Meine Chance bestand also darin, in den Shapelists nach genau diesen Symmetrien Ausschau zu halten. Würde ich eine Symmetrie im Bytemuster der Datei wiedererkennen, hätte ich schon einen äußerst wichtigen Ansatz gefunden.

Als ich einige Hexwerte (in Big Endian Bytereihenfolge) in der Shapelist in Dezimal umgerechnet hatte, fand ich so unter anderem die Dateigröße und die einzelnen Spritegrößen wieder, und so konnte ich sogar ausmachen, welches Sprite in welchem Block gespeichert ist. Ich konzentrierte mich also auf den kleineren ersten Block. Es dauerte nicht lange und ich hatte einen Teil ausgemacht, der symmetrisch aussah, und so folgerte ich, dass genau hier die Pixelinformationen begraben sein mussten. Bei einer Monochromgrafik war es zwar durchaus naheliegend, aber ich brauchte trotzdem einige Minuten, um darauf zu kommen, dass hier jedes Byte genau eine Reihe von 8 Pixeln darstellen konnte. Mit Hilfe des Windows-Taschenrechners ließ ich mir die Hex-Werte binär anzeigen, und so malte ich die gesetzten Bits auf ein Pixelgrid. Tatsächlich erkannte ich schon kurz darauf etwas, das zumindest teilweise nach den invertierten Umrissen der linken Hälfte des erwarteten Minen-Sprites aussah. Das war für mich erneut ein entscheidender Durchbruch. Ab hier war ich sicher, ich könne die Shapelists lesen.

In der Folge stellten sich mir bei der Analyse einige wichtige Merkmale des Dateiformats heraus: Die Sprites waren immer kodiert in „Scheibchen“ zu je 8 Pixeln Breite mit variabler Höhe. Zudem gab es pro Sprite meist zwei Schichten: Einen Hintergrund mit Transparenzinformationen, und einen Vordergrund. Manchmal gab es auch nur eine Schicht ohne Transparenz. Anschließend begann der nächste Block, der das nächste Sprite enthielt. Große Teile der Datei verstand ich bis dahin noch nicht, daher entschied ich mich zunächst, diese zu ignorieren, denn ich begann gleichzeitig damit, einen Konverter zu entwickeln, der SHL-Dateien laden und diese in ein anderes Grafikformat übersetzen konnte. Nach ein oder zwei Stunden hatte ich meinen Code schon soweit, dass er die beiden Minen aus der Originaldatei perfekt auf dem Bildschirm anzeigte. Ich wähnte mich bereits am Ziel, als ich zur Kontrolle eine andere SHL-Datei laden wollte, und der Konverter mit diversen Fehlern abbrach. Mit dem Format dieser Datei konnte er nichts anfangen, und so musste ich erneut mit dem Hex-Editor ran.

Ein monochromes Minen-Sprite aus der Shapelist mit Transparenzdaten in GIMP geladen

Ich entdeckte, dass Shapelists bisweilen mehrere „Versionen“ desselben Sprites beinhalteten, aber den Grund kannte ich nicht, bis sich herausstellte, dass jede folgende Sprite-Version im Grunde nur um jeweils einen Pixel nach rechts verschoben war. Die Lösung lieferte besagter ST-Computer-Artikel, in dem Meinolf erläuterte, dass er alle acht Möglichkeiten zur horizontalen Positionierung einer Grafik vorberechnete. Dies war nötig, weil er die Sprites direkt in den Grafikspeicher des Bildschirms kopierte, was natürlich nur in ganzen Bytes möglich war. Er schreibt hierzu genauer: „Will man die Figur auf eine beliebige horizontale Position darstellen, müssen die einzelnen Bits, die ja Bildpunkte repräsentierten, innerhalb eines Bytes verschoben werden. Und dies kann bei vielen zu zeichnenden Figuren für eine 72Hz-Animation zu langwierig sein.„. Diese bit-geshifteten Versionen sind in den Shapelists also allesamt enthalten. Ich entdeckte außerdem, dass die Shapelists im Header immer alle Offsets enthalten, die verwendet werden können, um direkt zum Beginn eines Blocks zu springen.

Nachdem ich meinen Konverter angepasst hatte und er flexibler mit dem Shapelist-Format umgehen konnte, erlaubte mir das bereits, einige Dutzend SHL-Dateien fehlerfrei zu laden, während so manche andere Datei jedoch noch Darstellungsprobleme hatte. Auch dies konnte ich wiederum korrigieren, so dass ich das SHL-Format dadurch immer besser zu verstehen lernte. Am Ende war mein Konverter problemlos in der Lage, alle Shapelists aus Bolo, Esprit, OXYD und Spacola zu laden. Die Shapelists aus OXYD 2 könnte er vermutlich auch konvertieren, aber diese müsste ich dazu natürlich erst mühsam aus dem Spiel holen. Eine letzte Erkenntnis konnte ich schließlich noch gewinnen: Zu jedem Sprite sind in der Shapelist die genauen horizontalen und vertikalen Pixeloffsets gespeichert, also die Zahlenwerte, um wieviele Pixel das Sprite relativ zur Position des entsprechenden Spielobjekts verschoben gezeichnet werden soll – im einfachsten Fall muss man das Sprite nämlich über dem Objekt zentrieren.

Ein Zusammenschnitt mehrerer konvertierter Shapelist-Inhalte aus Bolo (1987), Esprit (1989), und SPACOLA (1991)

Besagten Shapelist-Konverter habe ich mittlerweile nativ in das Remake SPACOLA ECLIPSE integriert, und das Spiel lädt folglich nicht nur die Original-Sounddateien, sondern inzwischen auch schon einige der Original-Spritedateien. Die Transition hin zu Shapelists ist aktuell noch im Gange und wird auch noch einige Monate andauern, aber der Vorteil ist für mich eindeutig: Absolute Originaltreue ohne unnötige Kompromisse. Durch die Verwendung von Shapelists werden all meine bisherigen Unsicherheiten verschwinden, ob ich dieses oder jenes Sprite auch wirklich pixelgenau und fehlerfrei gezeichnet habe, und ich kann meine geringe Aufmerksamkeit wieder anderen, deutlich wichtigeren Dingen widmen. Zum Beispiel dem Spiel.

Mit der Programmierung meines kleinen SPACOLA-Remakes habe ich übrigens heute vor exakt 10 Jahren begonnen. In dieser Zeit wuchs das Hobby-Projekt auf 54.300 Codezeilen in 326 Quelldateien an, und umfasst zusätzlich knapp 1500 Grafikdateien und 64 Audiodateien. Für volle 10 Jahre Entwicklungszeit ist das wahrlich nicht so viel, aber schneller bekomme ich es nicht hin. Ich habe eben mein ganz eigenes Tempo, das sowohl von motivierten als auch von faulen Phasen mitbestimmt wird. Dafür steckt trotzdem eine ganze Menge Herzblut, Schweiß und Erfahrung in meinem Werk. Wann das Spiel fertig oder wenigstens mal spielbar sein wird, steht weiterhin in den Sternen. Aber wer meine vielen kleinen Fortschritte bis heute fleißig verfolgt hat, und die Hoffnung immer noch nicht aufgegeben hat, den werde ich vielleicht in den kommenden Wochen doch noch ein bisschen überraschen können.

To be concluded…

Ladies and Gentlemen, werte anwesende Gäste, vielen Dank, dass Sie alle so zahllos gut zählbar zur großen Feier zum zehnjährigen Jubiläum von SuccessDenied.com erschienen sind. Wie Sie wissen, begeistere ich die Welt nun schon seit genau zehn Jahren mit meinen schriftlichen Ergüssen, und das hat selbstverständlich Spuren hinterlassen. Vielleicht nicht unbedingt bei Ihnen, aber in jedem Fall bei mir: Meine Tastatur ist inzwischen ganz schön abgenutzt. Nach zehn Jahren wird es auch Zeit, mir endlich eine Neue zu kaufen. In den vergangenen zehn Jahren konnte ich mir über viele Dinge in meinem Bloggerleben ausgiebig Gedanken machen: Wer bin ich? Worüber soll ich schreiben? Wohin verschwinden all die Socken in meiner Waschmaschine? Und nun habe ich zehn weitere Jahre, in denen ich über diese wichtigen Dinge nachdenken kann, denn eine Antwort habe ich bislang nicht finden können.

Schon der große deutsche Philosoph Friedrich Nietzsche sagte einst: „Die sogenannten Paradoxien des Autors, an welchen der Leser Anstoß nimmt, stehen häufig gar nicht im Buche des Autors, sondern im Kopfe des Lesers.„. Das hat zwar mit meiner Webseite nicht viel zu tun, aber es klingt äußerst tiefgründig. So tiefgründig wie meine vielen Artikel über Spiele, Filme, TV-Serien, Hitzewellen in meiner Wohnung, und auch über professionelle Prokrastination. Und nun, nach dieser langen Zeit, wird es allmählich Zeit, mir die Zeit zu nehmen, um ein Resümee zu ziehen: Es hat sich überhaupt nicht gelohnt. Und genau deswegen muss ich unaufhörlich weitermachen. Als ich anfing, war ich noch Student, jung, dynamisch, optimistisch, weltoffen. Inzwischen bin ich seit vielen Jahren berufstätig, verbittert, nörgelig, stur, mit Rücken. Das gibt mir die Gelegenheit, aus einem völlig anderen Blickwinkel über das tägliche Geschehen in der Welt zu berichten. Nämlich leicht gebeugt, mit Krückstock und viel Ibuprofen.

Ich bin wahrlich kein großer Redner, daher möchte ich mich möglichst kurzfassen und im folgenden nur aus den knapp 100 meiner einflussreichsten und bedeutendsten Blog-Beiträge der vergangenen zehn Jahre zitieren. Ich möchte nicht prahlen, aber unzählige Verfasser wissenschaftlicher Publikationen auf der ganzen Welt, Fachblätter aus allen Wissenschaftsbereichen, und außerdem viele anerkannte Koryphäen, darunter sogar mehrere Nobelpreisträger, haben sich für meine qualitativ hochwertigen Artikel auf SuccessDenied.com zwar bislang leider nicht interessiert, aber möglicherweise würden sie das, wenn sie sie gelesen hätten. Es wäre ohnehin zuviel der Ehre gewesen, und wie schon gesagt, ich wollte ja nicht prahlen.

Anschließend werde ich detailliert auf die 50 spannendsten Kommentare meiner großartigen Blog-Besucher eingehen und diese zur Diskussion stellen. Wenn uns im Anschluss noch etwas Zeit bleibt, würde ich sehr gerne den Abend ausklingen lassen mit einer Lesung einzelner Kapitel aus meinem neuen Buch „Erfolglos Bloggen für Dummies“. Vielleicht wird sich der eine oder andere sogar dadurch inspiriert fühlen, sich ebenfalls dieser beinahe vergessenen, brotlosen Kunst anzunehmen, und mit meiner Hilfe und unter meiner kompetenten Anleitung garantiert nicht reich und mächtig zu werden, sondern – wie ich – ganz auf dem Boden der Tatsachen zu bleiben.

Das Buch gibt es für nur 14,99 EUR UVP in jedem gut gepflegten Buchhandel, den ich zuvor aufgesucht und einige Exemplare dort heimlich im Regal versteckt habe. Ich komme übrigens regelmäßig zu Signierstunden nach Hintertupfingen in die aufstrebende Buchhandlung hinter dem alten Bahnhof, direkt am Friedhof. Sie müssen nur bei „Meier“ klingeln und nach mir fragen, dann werden Sie direkt in den Hinterhof zum großen Bücherschuppen geführt. Die verrosteten Fahrräder und Gartengeräte können Sie ignorieren. Achja, wenn ich zur Mittagszeit noch nicht wach sein sollte, ziehen Sie einfach fest an der Zeitung, mit der ich mich zugedeckt habe, oder treten sie lautstark gegen eine der leeren Schnapsflaschen, die am Boden herumliegen. Für 5 EUR mache ich auch Selfies mit meinen Fans, für 10 EUR sogar gekämmt und mit einem sauberen Hemd.

An die beiden unruhigen Herren hier vorne in der ersten Reihe: Ich darf doch um Ruhe bitten. Keine Sorge, das Buffet wird bald eröffnet, ich möchte nur meine Rede noch beenden. Aber danke, dass Sie mir dieses passende Stichwort geben. Denn wie ich bereits im Vorfeld zu dieser Feier angekündigt hatte, würden wir das geplante opulente Festmahl vollständig von den reinen Werbeeinnahmen und Spenden auf SuccessDenied.com bezahlen! Sie haben richtig gehört. Alles was meine vielen Leser mir im Laufe der Jahre gegeben haben, fließt natürlich direkt wieder an Sie in Form des Caterings zurück. Und da kam definitiv einiges an gutem Willen und frohen Gedanken zusammen. Ich kann daher voller Stolz verkünden, dass sich die Tafel unserer wunderschönen Kommune bereit erklärt hat, uns mit Essen zu versorgen. Jeder Gast bekommt daher einen ganzen Teller klare Suppe mit einem kleinen Stück Brot.

Achja, ein herzliches Dankeschön an die treuen Leser von SuccessDenied.com! Es ist mir völlig unverständlich, aber irgendwie schön zu wissen, dass ihr immer noch regelmäßig, oder wenigstens ab und zu vorbeischaut. Ich weiß es sehr zu schätzen, dass ihr die Hoffnung noch nicht aufgegeben habt, dass ich irgendwann mal wirklich etwas aus meinem Blog mache. Bis dahin bleibt hier einfach alles so wie es ist. Und ihr bleibt hoffentlich so wie ihr seid. Es sei denn, ihr wollt etwas Besseres sein. Dann werdet etwas Besseres.

Auf die nächsten zehn Jahre!
Vince