ZX Fall – mein einziges selbstgeschriebenes Spiel

Ich bin kein großer Programmierer. Aber doch hatte ich immer Spaß, wenn ich Programmierprojekte gemacht habe. Im privaten und beruflichen Rahmen habe ich einiges entwickelt.

Willkommen bei ZX Fall

Andere Programmierprojekte

Dazu gehörte eine Kontrollsoftware, mit der ich die Quartalsabrechnung der KV für die Praxis meines Vaters überprüfen konnte. Allerdings war das komplizierteste hier nicht das Datenbankprogramm, sondern das wochenlange Eintippen von Ziffern von Krankenscheinen. Erschwerend kam hinzu, dass meine Mutter und ich die Daten auf der schlechten Tastatur des Sinclair QL eingeben mussten.

Ein wichtiger Teil meiner Diplomarbeit war eine Software mit der ich die theoretischen Ansätze meiner Arbeit verifizieren konnte. Es ging hier um Penalty-Funktionen bei der Optimierung von n-dimensionalen Funktionen. Damals habe ich auf dem Atari ST mit Pascal XSC gearbeitet. XSC stand für Extension for Scientific Computation. Speziell nutzte ich die eingebaute Intervall-Arithmetik, die für Branch-and-Bound-Methoden einfach genutzt werden konnte. Einfach faszinierend, wenn man Rechenoperationen auf Zahlenintervalle anstelle von Zahlen anwenden konnte.

Später im beruflichen Umfeld habe ich dann Programmiersprachen der 4. Generation (u.a. GOGOL von der Firma GMI) genutzt, um auf Mainframe-Computern (BS2000 und MVS) Anwendungen für Sparkassen und Banken zu entwickeln. Auch in der Jahr 2000-Umstellung und bei der Einführung des Euros war ich beteiligt und arbeitete kilometerlange alte Sourcen durch.

Und nun zurück ins Jahr 1984

Mein allererstes Programmierprojekt war ein Computerspiel auf meinem Sinclair ZX81. Davon will ich hier berichten.

Es muss im Jahr 1984 oder 1985 gewesen sein. Ich hatte durch die Eingabe von vielen Listings aus Zeitschriften Erfahrungen gesammelt und mir einige Maschinencode-Routinen notiert, die ich wiederverwenden wollte. Ja, damals gab es noch keine Libraries mit vielen wiederverwendbaren Routinen. Das war noch edle Handarbeit.

Eigentlich wollte ich ja einen Autosimulator schreiben, der es ermöglichte die gesamte Autobahn A3 zwischen Düsseldorf und Passau abzufahren. Ich bin damals mit meinen Eltern die Strecke so häufig gefahren, dass ich jede Kurve genau kannte. Nach einigen Planungen habe ich dieses Projekt nach hinten gestellt, da ich der Meinung war, dass der Speicherplatz von 16KB RAM nicht reichen würde.

Eine weitere Idee sollte eine animierte Monopoly-Variante sein. Was habe ich mir für Mühen gemacht, um die Animationen auf Rechenpapier vorzuzeichnen.

Den Ausschlag hat dann aber ein Spiel auf der Atari VCS 2600 gegeben.

Activisions Pitfall auf der Atari VCS 2600 – was für ein tolles Spiel

Es war das klassische Activision-Spiel Pitfall (Link). Das hat mich sehr beeindruckt und ich sah die Möglichkeit die erlernten Techniken und Programm-Routinen hier sinnvoll anzuwenden.

ZX Fall – die Spieleprogrammierung

Ich habe sechs unterschiedliche Szenen im Spiel ZX Fall vorgesehen:

  • schwingen mit der Liane über einen See,
  • springen über Krokodile,
  • springen über rollende Fässer,
  • springen über Schlangen,
  • springen über Gruben,
  • der Schatz.

Diese Szenen sollten zufallsgesteuert vom Spieler durchlaufen werden. Man hatte maximal drei Leben. Es mussten 10 Szenen erfolgreich absolviert werden. Das Spiel war wirklich herausfordernd. Besonders bei dem Springen über rollende Fässer verlor man leicht ein Leben. Das Schwingen mit der Liane war einfach, die programmiertechnische Herausforderung war dabei aber die größte.

Zum Schluss kam noch ein Sprung über zufällige Gruben, bei dem man auch leicht ein Leben verlieren konnte. Wenn man auch das schaffte, dann erwartete einen ein Schatz als Belohnung.

Das Spiel wurde von mir in 90% BASIC und dem Rest in Maschinencode für spezielle Routinen entwickelt.

ZX Fall – das Video

Schwingen mit der Liane über einen See

Das war mein Sahnestück bei der Entwicklung. Mit BASIC konnte man die Liane in unterschiedlichen Positionen zwar plotten, das ganze lief allerdings in Zeitlupe. Ich wollte aber eine flüssige Lianen-Schwingbewegung entstehen lassen. Idealerweise würde man 25 Bilder pro Sekunde überlagern lassen. Ich habe mich entschieden die Schwingbewegung in 5 Bildern zu malen und diese Bilder in einem gewissen Rhythmus zu überlagern. Dadurch entstand wirklich der Eindruck einer flüssigen Bewegung.

Technisch habe ich die vorgezeichneten Bilder im Speicher abgelegt und mit einer speziellen Maschinencode-Routine in den Bildschirmspeicher eingeblendet. Und diese Überlagerung war tatsächlich schnell genug und erzeugte einen flüssigen Schwung der Liane. Schaut euch das mal genau im Video an.

Die Bewegung des Helden (ein toller Buchstabe A) wurde über eine Basic-Routine abgefragt. Der richtige Augenblick für den Sprung war nur in einem engen Zeitfenster möglich. Wenn der Tastendruck zum Sprung im richtigen Augenblick passierte, dann wurde der Held an der Liane hängend rübergeschwungen. Was war das für ein Spaß als die gewünschte Bewegung das erste Mal erfolgreich ablief.

Springen über Krokodile

Dies war eines der von Activision wirklich schön gestalteten Bildern. Krokodile, die ihr Maul aufklappten und schlossen. Idealerweise springt man auf das Krokodil (>==), wenn das Maul geschlossen ist. Das habe ich ein wenig angepasst. Ich habe ein Band von Pfeilen (<-) auf den Helden zukommen lassen, welches in zufälliger Folge Pfeile einblendete und von rechts nach links laufen ließ. Dieses Laufband war auch eine Maschinencode-Routine und erlaubte einen flüssigen Ablauf.

Ziel war es, dass der Held auf den Rücken des Krokodils springen sollte, aber nur dann springen durfte, wenn kein Pfeil auf ihn zuflog. Diese Kollisionsabfrage Held<>Pfeil wurde auch über eine kleine Maschinencoderoutine realisiert. Und es funktionierte großartig und ich hatte auch mit dieser Szene viel Spaß.

Springen über rollende Fässer

Auch hier kommt eine Laufbandtechnik wie mit den Pfeilen bei den Krokodilen zum Einsatz. Aber diesmal ist dieses Laufband auf Höhe des Helden und er muß über die auf ihn zurollenden, in zufälliger Frequenz erscheinenden Fässer (O) springen. Um das Ganze zu erschweren habe ich eine Obergrenze bei der Anzahl von Sprüngen definiert. Ein Zähler oben links zählte nach jedem Sprung runter. Die Szene war geschafft, wenn man rechts ankam und der Zähler größer als Null war.

Auch hier kam eine Kollisionsabfrage zum Einsatz. Diese Szene war bei weitem am schwierigsten zu spielen. Manchmal waren die zufällig erscheinenden Fässer zu dicht gesetzt, so dass der Zähler schnell auf Null ging.

Springen über Schlangen

Die einfachste Szene war der Sprung über zufällig gesetzte Schlangen (einfach wunderbar gestaltet – schaut es euch auf dem Screenshot oben an). Um diese Szene zu erschweren habe ich einen herausfordernden Timer rechts runterzählen lassen. Der Held musste also sofort loslaufen, um rechtzeitig auf der anderen Seite anzukommen. Eine einfache Kollisionsabfrage kam dabei zum Einsatz.

Springen über Gruben

Die letzten Sprünge über Gruben

Nach 10 erfolgreich absolvierten, zufällig ausgewählten Szenen wird man mit einer letzten Herausforderung belohnt. Zufällig erzeugte tiefe Gruben tauchen vor dem Helden auf und müssen übersprungen werden. Peinlich ist es, wenn man daran scheitert, denn dann darf man nochmal erfolgreich drei andere Szenen in zufälliger Reihenfolge durchspielen, bevor man wieder zu dieser Szene kommt.

Das wirkliche Spielende – der Schatz

Der großartige Schatz am Ende des Regenbogens

Am Ende des Spieles erwartet den Helden ein großartiger Schatz. Mann, mann, mann – was habe ich damals geschwitzt, als ich bei der Aufnahme des Videos im Jahr 2010 das Spiel bis zum Ende durchspielen wollte. Ich habe über eine halbe Stunde gebraucht, aber dann war es geschafft.

Fazit

Für mich war dieses Programmierprojekt eine leidenschaftliche Fingerübung mit wiederverwendbaren Maschinencode-Routinen. Diese in mein Basic-Programm zu integrieren war eine großartige Erfahrung. Das Ergebnis mag ein wenig ungelenk aussehen, aber das war damals mein erster Computer und dieser Computer konnte auch wirklich nicht viel. Wer noch ein wenig über meine persönliche Geschichte zum Sinclair ZX81 nachlesen möchte, den kann ich auf diesen Link verweisen.

Ich bin froh, daß ich euch dieses Spiel noch heute zeigen kann. Ich habe es in den 80er-Jahren in ein 81-File auf den Atari ST exportiert. Dieses konnte dann mit dem ZX81 Emulator von Ch. Zwerschke gestartet werden. Durch diese Emulation konnte ich damals das Spiel vom Bildschirm des Atari Mega ST abfilmen, während ich es durchspielte.

Es hat Spaß gemacht, diese Erinnerung nochmal für meinen Blog aufzubereiten. Vielleicht habt ihr ja auch schöne Erinnerungen an euer „erstes Mal“ und wollt dies mit mir diskutieren. Bitte nutzt dafür die Kommentarfunktion in diesem Beitrag.

1 Kommentar

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.