Schlagwort-Archive: Powerups

spacolaeclipse047

Gestern auf den Tag genau vor fünf Jahren tippte ich die ersten 50 Quellcodezeilen von etwas, das ein paar weiße Pixel auf einem schwarzen Hintergrund bewegte. Heute sind es ziemlich genau 28.500 Zeilen mehr, und es sind leider immer noch weiße Pixel auf schwarzem Hintergrund. So ein Pech aber auch. Nein, heute ist es ein Spiel, das einem originalgetreuen SPACOLA-Remake tatsächlich sehr nahe kommt. Originaltreue ist mir am wichtigsten. Ich verändere nur Details, die mir sinnvoll erscheinen und sich nicht vermeiden lassen. Jede zusätzliche Änderung, jedes weitere witzige Extra wird immer optional sein. Im Moment arbeite ich mich recht fleißig durch die vielen offenen Punkte, und darauf möchte ich in diesem Update-Artikel zu sprechen kommen.

Levelparser/Levelgenerator und Kampagnenmodus

Der Parser für die Levelkonfiguration mit dem Levelgenerator sind weitgehend fertig. Der Parser liest die Original-Levelskripte ein, teilt die Anweisungen im Skript in Tokens und Parameter ein und „interpretiert“ diese, indem er dem Levelgenerator Anweisungen gibt, wie das nächste Level aufgebaut werden muss. Das funktioniert schon perfekt für Level 1. Ab Level 2 aufwärts werden allerdings weitere Befehle eingeführt, die ich erst noch verstehen und vor allem einbauen muss. Damit ist der Kampagnenmodus jetzt theoretisch vorhanden und benutzbar, und wird auch mit jedem weiteren umgesetzten Befehl besser.

Spielen ohne Spacola Sternenatlas

Zwei Änderungen, die nötig sind um das Spiel ohne Buch sinnvoll spielen zu können, habe ich nun umgesetzt. Im Levelauswahl-Bildschirm kann man mit dem Mauszeiger über die Levels fahren und rechts im Statusfenster wird jetzt das darin befindliche erste Sektor-Powerup eingeblendet. Dieses musste man sonst aus dem Buch herauslesen. Ohne das Buch hätte man aber keine Möglichkeit mehr, diese an sich wichtige taktische Entscheidung noch zu treffen, darum hilft das Remake hier nach. Die zweite Änderung, die mir wichtiger ist: Wie soll der Spieler erfahren, wohin es die Waren auszuliefern gilt? Im Jahre 1991 hatte ich dazu das Buch mit der richtigen Seite aufgeschlagen an der oberen Kante unter die Tastatur geklemmt, um die Tabelle immer sofort griffbereit zu haben. Mit dem Finger konnte ich so Zeile und Spalte entlangfahren und schon ging es los. Ohne das Buch muss ich den Zielsektor logischerweise direkt rechts einblenden, was auch der Fall ist. Aber um die Sache spannender zu gestalten, experimentiere ich im Moment damit, dem Spieler den Zielsektor nur zeitverzögert zu verraten, so dass man sich erst noch ein paar Sekunden alleine mit der Spielwelt befassen muss, ehe man sich auf die Reise macht. Derzeit sieht es so aus, dass rechts in der Leiste eine Art „Dekodierung“ angezeigt wird, die nacheinander die X- und Y-Koordinate „entschlüsselt“. Das wäre meine Idee, wie man diesen Aspekt sci-fi-mäßig ohne Buch umsetzen könnte, ohne es noch simpler zu machen.

Alle Powerups fertig

Das „Kantinenruf“-Powerup wurde kürzlich von mir implementiert, und auch das Abfeuern von Lenkraketen funktioniert jetzt einwandfrei. Es sieht sogar schon recht witzig aus, wie die kleinen Lenkraketen zielsicher die Gegnerschiffe verfolgen und alles explodiert. Inzwischen kann ich also stolz vermelden: Alle 12 Original-Powerups sind funktional! Mit der Taste F12 kann man im Spiel neuerdings jederzeit Screenshots abspeichern lassen. War nicht wichtig, aber kam mir irgendwie selbstverständlich vor, dass der Client sowas können sollte. Außerdem merkt der Client sich jetzt endlich alle Einstellungen, die der Spieler vornimmt. So werden etwa Grafikeinstellungen in eine CFG-Datei persistiert und beim Programmstart geladen. Im Cheatmenü gibt es ein neues Untermenü für alle verfügbaren Powerups, die man hier einzeln anwählen kann. Das macht das Testen etwas einfacher.

Richtungspfeil und Testversions-Hinweise

Einen weiteren Cheat habe ich diese Woche verwirklicht: Einen Richtungspfeil am Bildschirmrand ähnlich wie in GTA, der immer den kürzesten Weg zu einem frei wählbaren Spielobjekt anzeigt, also z.B. die Zielstation. Sobald das Objekt sich dann mal tatsächlich auf dem Bildschirm befindet, zeigt der Pfeil auch direkt darauf. Dieser Pfeil wird in der klassischen Kampagne natürlich nicht enthalten sein, da er das Spiel zu sehr vereinfacht, aber ich fand es gut, dass ich sowas mal verfügbar habe für alle Fälle. Analog zu den Spezialhinweisen in der TOS-Demo von SPACOLA habe ich (pixelgenau positioniert versteht sich) auch in mein Remake einige Hinweise bezüglich seiner Unvollständigkeit hinterlegt. Das könnte man als erste Vorbereitung für einen öffentlichen Beta-Release werten, der definitiv in nächster Zeit nötig sein wird, wenn die Entwicklung in diesem Tempo weitergeht.

Präzise Messungen beim Schießverhalten

Das Schießverhalten des Spielerschiffes ist nun sehr viel näher am Original. Durch witzige Messmethoden habe ich versucht, herzuleiten, welche Parameter im Original verwendet werden. Hierzu muss ich Screenshots des Originals anfertigen, und dann die Distanz in Pixeln messen, die die abgefeuerten Schüsse in einer zuvor gezählten Anzahl an Frames zurückgelegt haben. Bei den 72 Hertz, die der Atari ST darstellt (wobei SPACOLA im Gegensatz zu OXYD nur jedes zweite Bild zeichnet, also eigentlich 36 fps), kann ich dann eine Umrechnung in Pixel pro Zeiteinheit als Schussgeschwindigkeit vornehmen, die ich im Remake wiederum verwende, um sie auf die gewählte Zielframerate aufzuteilen. Auch die Schussfrequenz bei Dauerfeuer konnte ich so mit Hilfe von Screenshots messen. Wenn beim Messen dann mal keine ganz krumme Zahl herauskam, wusste ich, dass ich auf der richtigen Spur bin. Die Herumrechnerei führt dazu, dass im Remake endlich deutlich authentischere Werte verwendet werden. Hierbei ist mir auch aufgefallen, dass das Weitschuss-Powerup anders als im Handbuch behauptet, die Schussgeschwindigkeit nicht erhöht, sondern die Kugeln nur weiter fliegen lässt.

Grafikbearbeitung abgeschlossen

In den vergangenen zwei Monaten habe ich die Original-Designvorlagen von SPACOLA wirklich ausgiebig analysiert, in stunden- und tagelanger Fleißarbeit ausgeschnitten, mit meinen eigenen Dateien etwa bezüglich Transparenz, Rotation und Reihenfolge verglichen und dadurch unzählige kleine und große Korrekturen an hunderten von Sprites vornehmen können. Dieser Prozess ist jetzt zu 99,9% abgeschlossen, und damit fallen die teilweise recht lästigen Pixeldoktoreien mit GIMP weg, und ich kann mich endlich vollkommen auf den Code konzentrieren. Mann, das wird ein Spaß. Aber der schwierigste und wichtigste Teil von allen kommt ja erst noch: Die Gegner-Intelligenz so wie im Original hinbekommen.

So viel zu tun, so wenig Zeit. Irgendwie finde ich es traurig, dass ich im Prinzip zu überhaupt nichts mehr komme, wenn ich nicht manchmal einfach ein Stoppschild aufstelle (und Leute enttäusche). Die Wochenenden sind bereits komplett verplant, bevor sie überhaupt angefangen haben, und unter der Woche geht ja sowieso nichts, wenn man erst um 21 Uhr sein täglich zu absolvierendes Alltagsprogramm abgespult hat. Aber genug Geheule für heute. Der nächste Urlaub kommt bestimmt.

Trotz allem ist es mir ein großes Vergnügen, die neuesten Fortschritte bei meinem kleinen Feierabend-Hobby-Projekt vorzustellen: Mein Dongleware-Remake Spacola Eclipse ist jetzt praktisch „spielbar“ in der Version 0.19. Das letzte Mal als ich nennenswert am Code arbeitete, war Anfang Juli. Vor einer Woche packte es mich dann endlich wieder, als ich mich der alten Sound-Problematik annahm. Nach langem Herumgebastele und mit der Unterstützung eines Indie-Spieleentwicklers konnte ich es zu meiner Zufriedenheit hinbiegen. Es geht tatsächlich, allerdings muss man sich um das Abspielen selbst kümmern. Der Sound funktioniert seitdem besser denn je und es sind viele Ingame-Samples dazugekommen. Dadurch hatte ich die nötige Motivation um auch andere Dinge anzupacken.

Im Anschluss schrieb ich lässig den Code für die Asteroiden und die Kollisionserkennung runter. Asteroiden kann man nun zerstören und mit dem Schiff an ihnen abprallen. Zugegeben, die Mathematik hinter dem „Abprall“-Effekt von Asteroiden, die wollte ich mir nicht mit dicken Mathebüchern herleiten. Da geht es um Drehung von Koordinatensystemen, damit man eine eindimensionale Kollision berechnen kann und den Abprallwinkel und die Abprallgeschwindigkeit beider Objekte bekommt. Gruseliges Zeug wenn man schnell fertig werden will. Für die Methode ließ ich mich bei anderen intelligenten Programmierern inspirieren. Es funktioniert noch nicht perfekt, aber immerhin.

In der Folge kamen weitere Powerups hinzu, so z.B. alle Schuss-Powerups und die Extraleben. An Stationen kann man jetzt andocken, so dass man entweder wüst beschimpft wird, oder das Sonnensystem vom Spiel als erfolgreich abgeschlossen beendet wird. Ja genau, endlich kann man im Spiel vorankommen und die Levels zumindest gewinnen. So kann man nach und nach alle Sonnensysteme auf der Übersichtskarte abhaken. Verlieren kann man bisher noch nicht, da das Sterben noch nicht implementiert ist und es weiterhin noch keine Gegner gibt (kommt, kommt!). Die Sektoren sind bisher alle zufallsgeneriert, was leider nicht ganz richtig ist, da das Original-Spacola hier gewisse Konfigurationen kennt, die in die Levelgenerierung mit einfließen. Auch der Zielsektor ist fest nach einem bestimmten Schema berechnet und nicht komplett dem Zufall überlassen. Für den Moment muss es aber so gehen.

Die Preis-, Fahndungs- und Bonuslisten sind fast fertig. Die Preise stimmen alle und die Screens sind alle eingebaut, aber bisher sind eben nur die Sprites für die Lieferartikel eingebunden – die Sprites für Gegner und andere Hindernisse fehlen noch. Ebenfalls fehlen die animierten Sprites für das Beschleunigen des eigenen Raumschiffs. Zur Vereinfachung habe ich stattdessen zwei Partikelstrahler-Objekte bei den Triebwerken platziert, die beim Beschleunigen Pixelpartikel emittieren. Sieht eigentlich sehr viel besser aus als im Original, aber es bleibt am Ende natürlich nicht so. Vermutlich lasse ich diesen Effekt für spätere Versionen drin.