spacolaeclipse045

Wo ich gerade schon bei Spielen mit der Grafik noch aus der Zeit der Weimarer Republik bin, spreche ich am besten direkt das nächste passende Thema an: Spiele mit Grafik aus der Steinzeit. Es folgt ein diesmal etwas längerer Artikel über den aktuellen Entwicklungsfortschritt meines Hobby-Dongleware-Remake-Projekts SPACOLA Eclipse. Es gibt viel zu berichten, weil ich in letzter Zeit viel daran gearbeitet habe. Die neueste Work-in-progress-Version vom Juni 2015 führt einige neue Gameplay-Features ein, allerdings auch viele tolle Neuerungen unter der Haube, die das Arbeiten an dem Projekt endlich deutlich interessanter machen, was wohl auch der Grund für meinen unerwarteten Eifer ist.

Mehrspieler-Modus

Ich habe in letzter Zeit die Serialisierbarkeit der meisten Spielobjekte überarbeitet und damit angefangen, den Mehrspieler-Modus zumindest grundsätzlich mit Leben zu füllen. Nachdem man bislang den Server lediglich vorbereiten, und sich als Client nur theoretisch registrieren lassen konnte, startet nun in der neuen Version tatsächlich ein Spiel, sobald die Mindestanzahl der Teilnehmer erreicht ist. Als nächsten Schritt sorgte ich dafür, dass die Spieler-Objekte untereinander ausgetauscht und dargestellt werden können. Die Mitspieler werden sich jetzt zwar auf dem Bildschirm gegenseitig sehen, aber davon abgesehen wird noch nichts synchronisiert, jeder spielt ein völlig eigenständiges Spiel. Mein Ziel war damit bereits erreicht, denn es ging mir vorerst um das Programmgebilde außenrum. Als nächstes wäre eine Lobby nötig, damit man einen Spielmodus und das Level auswählen, sich absprechen, und die Teilnehmerzahl festlegen kann.

Aktives Rendern, höhere Auflösungen, Vollbildmodus

Es war eine kleine und interessante Herausforderung, als ich damals mein eigenes Double-Buffering schrieb für das Zeichnen von 50 Bildern pro Sekunde ins Fenster, aber wenn ich ehrlich bin, war das eine rein autodidaktische Mission und überhaupt nicht nötig. Double-Buffering gehört zur Standardausstattung von Swing. Für meine Verhältnisse war meine Methode lange Zeit absolut ausreichend, aber für höhere Auflösungen leider unbrauchbar langsam. Inzwischen habe ich die 2D-Grafikengine von SPACOLA Eclipse auf aktives Rendern umgestellt, das den ausbremsenden Swing-Overhead umgeht und das Zeichnen des Fensters selbst steuert. Der Unterschied in der Performance ist beeindruckend. Als Bonus habe ich Echtzeit-Skalierung eingebaut, die das Bild stufenlos vergrößert, sogar mit Interpolation. Inzwischen läuft SPACOLA Eclipse in 1280×800 Pixeln, und das absolut ruckelfrei und noch dazu viel responsiver was die Mauseingaben angeht. Ach stimmt, einen exklusiven Vollbildmodus gibt es jetzt auch, den man wahlweise ganz normal mit ALT+Enter oder F8 umschaltet. Die Menüleiste ist mit dem Vollbildmodus noch nicht so ganz einverstanden, aber daran arbeite ich noch.

Farbsprites

Die ersten Vorbereitungen für den Farbmodus sind endlich getroffen. Meinen ganzen alten Monochrom-only-Code habe ich durch pseudomonochrome Grafikobjekte ersetzt, die zur Farbdarstellung in der Lage sind. Ein erster Test mit ins Spiel eingebauten Farbsprites verlief erfolgreich, der Rest ist also nur noch eine Sache von wochenlanger Kolorierung in Fleißarbeit und Search & Replace. Angefangen habe ich damit bereits teilweise. Außerdem gelang es mir, die ersten Farbsprites, die von Meinolf Amekudzi im Jahr 1993 für eine nie in Entwicklung gegangene SPACOLA-Farbversion angefertigt wurden, endlich richtig auszulesen. Die Grafiken sehen wirklich sehr spannend aus. Es müsste mir also möglich sein, diese Designs bald zu komplettieren, und einen Farbmodus ins Remake einzubauen.

Neue Gegner-KI

Die alte provisorische Gegner-KI ist bald Geschichte. Bislang war das Flugverhalten der Dummy-Gegner doch sehr merkwürdig, da sie im Weltraum Haken schlagen konnten und auch nur endlos dem Spieler folgten. Längst gelang es mir, das Flugverhalten deutlich realistischer zu machen. So müssen die Gegner jetzt genau wie der Spieler genügend Gegenschub liefern, damit sie ihre Richtung anpassen können. Endlich driften die kleinen Piratenschiffe halbwegs glaubwürdig über das Pixelbild, verfehlen auch mal das Ziel, und müssen dann ständig wieder den Kurs korrigieren. Darüber hinaus machen die Piraten zum ersten Mal das, was sie eigentlich sollten: Sie knöpfen dem Spieler seine Waren ab oder suchen freischwebende Waren, und fliegen damit zur feindlichen Station, um sie unter Gelächter dort abzugeben. Das klappt wirklich erstaunlich gut, ist nur leider noch nicht so ganz am Original dran. Und wenn die Gegner mal gut gelaunt sind, dann fliegen sie schiffbrüchigen Kameraden hinterher und retten diese.

Rettungskapseln, neue Powerups

Es gibt im Original Gegnerschiffe, die bei ihrem Abschuss mehrere Rettungskapseln freigeben. Diese öffnen sich dann wiederum in ausreichendem Abstand zum Spieler von selbst und geben die üblichen hilferufenden kleinen Männchen frei. Die Rettungskapseln sind jetzt auch im Remake enthalten. Bei den Powerups sind immerhin eineinhalb dazu gekommen: Der Molekularduplikator, der soweit ich es erkennen kann in genau einem von 64 Levels vorkommt, funktioniert jetzt perfekt. Beim Raketen-Powerup habe ich immerhin das Einladen mal fertiggestellt. Das Abfeuern derselben fehlt noch.

Der Quellcode umfasst jetzt mehr als 24.000 Zeilen und wurde von mir in den vergangenen Wochen ausgiebig gepflegt und verbessert. Einige verschluckte Exceptions beim Soundplayer habe ich so aufgespürt, was sich vermutlich auch auf die Performance ausgewirkt hat. Das Logging habe ich deutlich erweitert und auch hier einige Fehler behoben, die mir vorher nie aufgefallen waren. Insgesamt ist das Projekt spürbar aufgeräumter und ausgereifter geworden, so dass die faulen Phasen hoffentlich der Vergangenheit angehören dürften. Inzwischen ergibt selbst ein richtiges Optionsmenü Sinn, in dem man Grafikmodus und Audiotreiber und diverse andere Technikaspekte einstellen könnte. Das nächste große Thema ist ein funktionierender Kampagnenmodus mit wechselnden Levelkonfigurationen. Das Ding habe ich jetzt lange genug vor mir hergeschoben.