Spacola

spacola_splash_web

Drei Spiele, die mich in meiner Kindheit ganz besonders begeistert haben? Da würde ich bestimmt Super Mario Bros. auf dem NES nennen, und Cadaver auf dem Atari ST, und sowas wie Test Drive II auf dem Amiga. Würde ich bestimmt, wenn da nicht vorher ganz andere Spiele gewesen wären, die mich auf eine völlig andere Weise begeistern konnten. Drei Spiele, die ich in einem Atemzug nennen kann: Bolo, OXYD und Spacola. Drei Spiele für den Atari ST, die alle zufällig von einem Entwickler sind: Meinolf Amekudzi.

Diese Spiele zeichneten sich durch detailreiche, hochauflösende Monochromgrafik aus, durch witzigen Sound, durch anfangs unglaublich simples, aber trotzdem schnell komplexer werdendes Gameplay. Bolo war ein Breakout-Klon. OXYD selbst war ein Murmelspiel, das Dongleware damit perfektioniert hatte. Spacola war dagegen ein Asteroids-Klon, allerdings deutlich aufwändiger, und mit wesentlich mehr lebendigen Gegnern als Asteroiden. Von Bolo gab es später noch einige Umsetzungen, unter anderem für den PC. Von OXYD gab es Umsetzungen, Fortsetzungen und Remakes für alle möglichen Systeme. Einzig Spacola war zum Sterben mit dem Atari ST verdammt. Schade eigentlich, dabei hatte gerade dieses Spiel seinen ganz eigenen Charme, weil es kein typisches Geschicklichkeitsspiel war, sondern auch viel Action bieten konnte.

Spacola Eclipse ist ein von mir derzeit entwickeltes Remake von Spacola, also eine möglichst detailgetreue Nachbildung für moderne Betriebssysteme, und da mir der Original-Quellcode leider nicht zur Verfügung steht, muss ich zwangsläufig alles vollständig aus der Beobachtung nachimplementieren. Das Remake wird in Java entwickelt und wird somit theoretisch unter jedem System lauffähig sein. Sobald es denn mal fertig ist.

Test Test

Video Preview – Version 0.39

YouTube Preview Image

Features

Bereits implementiert

  • Originalgetreue Monochrom-Grafikengine (Classic-Modus)
  • Titelmusik und Sound wie beim ST-Original, zusätzliche Ingame-Musik
  • Intuitive Maussteuerung zum Drehen, Feuern und Beschleunigen
  • Animierter Radarschirm
  • 11 Powerups, 13 Gegnertypen, Raumstationen
  • Schiffbrüchige Piraten, Asteroiden, Fracht, Schwarze Löcher, Minen
  • HUD-Anzeige für Koordinaten und Punktezahl
  • Parallaktischer Sternenhintergrund
  • Pixelbasiertes Partikelsystem für Schub und Explosionen
  • Komplettes Intro mit Titeln, Highscore, Kurzanleitung, Level-Ende-Screen
  • Fünf verschiedene Mauszeiger im ST-Stil (z.B. TOS-Biene, Zielvisier, Rakete)
  • Dongleware-typisches Titel-Fading mit Dithering
  • Menüleiste für die wichtigsten Funktionen, zusätzlich zum Hauptmenü
  • Multilingual, Deutsch und Englisch bereits integriert, problemlos erweiterbar
  • Fake-TOS-Ladebildschirm und Splashscreen
  • Lauffähig auf jedem Betriebssystem mit Java
  • Geringe Hardwareanforderungen

Weiterhin geplant

  • Mehr Gegner
  • HUD-Anzeige ausblendbar und Spielbildschirm im Vollbildmodus
  • Wechsel zwischen Classic-Modus, Enhanced-Modus (Farbe) und HD-Modus
  • Verschiedene Schwierigkeitsgrade
  • Multiplayer-Modus mit Duell- und Coop-Kampagne oder Schnellrunde
  • Spiel jederzeit Laden und Speichern
  • Farbversion auf Basis der Originalgrafik (koloriert)
  • HD-Version mit hochauflösenden, besseren Sprites
  • Einfach wechselbare Spritesets
  • Zusätzlich erweiterbar, z.B. andere Gegner, andere Fracht, andere Effekte

Entwicklungsfortschritt

  • Derzeitige Version: v0.40
  • Nächster Schritt: Übrige Powerups, mehr Gegner (v0.45)
  • Danach: echter Kampagnenmodus (v0.50)
  • Beta-Release, erste spielbare Version (v0.5) (Frühjahr 2015)
  • Komplett spielbare Milestones (v0.6 – v0.9) (Sommer 2015)
  • Finale Monochrom-Version (Classic) (v1.0) (2016)
  • Kolorierte Farbversion mit höherer Auflösung (v1.1) (2016)
  • Spielbarer Multiplayer-Modus (v1.2) (when it’s done)
  • HD-Version mit hochauflösender Grafik (v2.0) (when it’s done)

Statistiken

Version: 0.40 alpha / Build 118
Datum: 18.01.2015
Codezeilen: 19249
Pakete: 19
Klassen: 162
Bilddateien: 705
Audiodateien: 53
Größe Quellcode: 919 KByte
Größe JAR/EXE: 4,5 MByte

Development Screenshots

2014
Das Remake stellt sich vor.

WIP-Version 0.32: Das Remake stellt sich vor.

Einen eigenen GEM-Texteditor bringt das Spiel auch mit.

WIP-Version 0.32: Einen eigenen GEM-Texteditor bringt das Spiel auch mit.

2013
WIP-Version 0.22: Komplettes HUD

WIP-Version 0.22: Komplettes HUD

WIP-Version 0.22: Statusmeldungen und Gegnerhorde

WIP-Version 0.22: Statusmeldungen und Gegnerhorde

2012 / Neue Architektur

WIP-Version 0.19: Preis- und Fahndungslisten sind fast fertig

WIP-Version 0.15: Splash-Screen

WIP-Version 0.19: Schub mit Partikeleffekten und Extraleben-Powerup

WIP-Version 0.19: Spielfortschritt auf der Karte sichtbar

WIP-Version 0.15: Hauptmenü

WIP-Version 0.15: Schutzschild zu Beginn

2010 / Alte Architektur

WIP-Version 0.06

WIP-Version 0.03


Ältere Videos – Version 0.29 / 0.21


Q & A

In welcher Programmiersprache wird Spacola Eclipse programmiert?

Das Remake Spacola Eclipse wird komplett in Java geschrieben. Auf dem Atari ST wurde Spacola soweit mir bekannt mit dem Megamax Modula-2-Compiler entwickelt, die zeitkritischen Teile (Grafik, Sound) direkt in 68k-Assembler.

Für welches Betriebssystem wird das Remake entwickelt?

Software, die in Java geschrieben ist, läuft im Prinzip auf jedem Betriebssystem, auf dem eine Java VM läuft. Primär entwickle und teste ich unter Windows 7. Spacola Eclipse sollte aber problemlos auch unter Linux und Mac OS laufen, sowie anderen Betriebssystemen. Entsprechende aussagekräftige Tests sind geplant, sobald das Spiel veröffentlicht werden kann.

Wann wird Spacola Eclipse veröffentlicht?

Leider kann ich Spacola Eclipse erst veröffentlichen, wenn es spielbar ist. Im Moment läuft es, und es macht auch so einiges, aber das vorliegende Programm eignet sich höchstens als Demo. Im Moment ist noch nicht absehbar, wann es soweit sein wird. Mit etwas Glück möglicherweise noch 2015.

Seit wann ist das Remake in Entwicklung?

An dem Remake arbeite ich inzwischen fast exakt genau so lange wie es Success Denied gibt. Genauer gesagt seit dem 19. August 2010. Seitdem arbeite ich mit mehr oder weniger langen Pausen daran (leider meistens längere). Neben meinem Beruf finde ich außerdem nicht immer die Zeit, um mein Hobbyprojekt nennenswert voranzutreiben. Meist packt mich das Thema erst wieder, wenn ich eine entsprechende Inspiration gefunden habe.

Sind Apps für Android und iPhone bzw. iPad geplant?

Auf jeden Fall. Über eine Umsetzung für Android denke ich bereits seit dem ersten Tag nach. Da die Dalvik VM für Android-Betriebssysteme ähnlich wie die Java VM funktioniert, dürfte das mit recht geringem Portieraufwand machbar sein. Eine iOS-Version ist ebenfalls machbar, wenngleich der Aufwand etwas höher sein dürfte. Genaueres lässt sich sagen, wenn die Dinge konkret werden.

Wieso ausgerechnet ein Spacola-Remake? Warum nicht gleich OXYD?

Von OXYD gibt es viele Fortsetzungen und Neuauflagen und bis zum heutigen Zeitpunkt zwei(!) unabhängige Remakes, die auf aktuellen Betriebssystemen, sowie Smartphones laufen. Welchen Wert hätte ein weiteres Remake? Spacola ist insofern Neuland, außerdem schätze ich es als die einfachere Implementation ein, was ich angesichts meines ersten kleinen Spieleprojekts, an dem ich in meiner knappen Freizeit arbeite, eher begrüße. Obwohl ich selbst wahrscheinlich auch viel mehr Zeit mit OXYD verbrachte, hat mir Spacola ebenfalls sehr viel Freude bereitet. Warum also nicht?

Brauche ich wieder den “Spacola Sternenatlas” (Spacola-Codebuch) wie im Original?

Nein, der Spacola Sternenatlas wird NICHT benötigt, schon allein da er heute sehr selten und kaum noch zu bekommen ist, und weil er bei vielen Spacola-Fans sicher auch schon vor Jahren auf dem Dachboden verschollen ist. Das Spiel soll grundsätzlich jeder in vollem Umfang spielen können, daher werden für den Spielfortschritt keine Buch-/Code-Abfragen eingebaut. Ich überlege allerdings, ob ich als witziges Gimmick ein kleines Cheatmenü o.ä. in das Remake einbauen soll, das sich z.B. nur bei korrekter Eingabe eines Codes aus dem Sternenatlas öffnen wird. Das wäre meine Idee gewesen, wie man die Besitzer des Originals auf humorvolle Weise belohnen könnte, ohne das Spiel für den Rest unzugänglich zu machen.

Warum sehen die Screenshots so hässlich aus? Warum ist alles nur schwarzweiß?

Nun, Schönheit liegt im Auge des Betrachters. Manche finden diesen ganz besonderen Stil der Monochromgrafik sehr reizvoll, da sie nur wenig Spielraum lässt und die Kreativität daher auf eine ganz eigenartige Weise fordert. Ich für meinen Teil bleibe (vorerst) bei Schwarzweißgrafik weil ich: 1. Spacola nicht anders kenne – das Original IST einfach so, und 2. weil es mir die Entwicklung einfacher macht und ich nicht mehr Zeit mit Grafikbearbeitung verbringen muss als das sowieso schon der Fall ist. Dennoch: Eine Farbversion und eine hochauflösende HD-Version sind längst geplant.

Welche speziellen Game-Frameworks bzw. Libraries werden im Code verwendet?

Tatsächlich verwende ich bisher KEINE Game-Frameworks, und nur eine einzige externe Library (für die Wiedergabe von OGG-Vorbis-Audio). Mir ist es im Moment aus autodidaktischer Sicht wichtiger, möglichst viele der üblichen essentiellen Mechanismen zur Spieleentwicklung selbst zu erarbeiten und zu entwickeln, darunter so Dinge wie Timing, Animationen, sowie Maus- und Tastatur-Handling. Mit einem Game-Framework wäre die Arbeit vermutlich leichter und das Spiel womöglich am Ende auch performanter, aber ich möchte derzeit möglichst unabhängig von externen Bibliotheken sein. Es mag nicht die intelligenteste Entscheidung sein, aber es ist meine Entscheidung.

Development Log

v0.40 – January 2015

  • figured out and defined all starting powerups for levels 9 to 16
  • replaced 2014 splash logo with a new 2015 one
  • fixed a very old bug that prevented the player from ejecting aliens on destruction
  • decreased the alien shout probability from 0.01 to 0.004
  • started implementing a method that detects if a game object is actually on the screen
  • defined some enemy and powerup constants for the levels.txt parser
  • added duplicator powerup sprite
  • added 4 rotating star (RS) enemy sprites
  • added minedropper ball shot sprite
  • fixed transparency of warecollector and credit powerup sprites
  • added all 16 rocket sprites
  • added the minedropper drop sound effect to the resources
  • implemented rocket loaded and last rocket status message events
  • added 3 hair dryer station animation sprites
  • added the rotator/star mine shot sound effect
  • renamed lots of sound effect files to consider the latest additions
  • added a TSA timestamp URL to the signing process in the build script
  • added the cherry station sound effect
  • figured out and defined all starting powerups for levels 17 to 24
  • added 3 cherry station animation sprites
  • added cherry ware hud sprite and gamescreen sprite
  • figured out and defined all starting powerups for levels 25 to 32
  • added cutter (scissors) station sound effect
  • added 2 scissors station animation sprites
  • added scissors ware hud sprite and gamescreen sprite
  • added all 16 enemy rocket drive sprites (for cycles, turrets and pigs/peashooters)
  • added 4 wheel (cycle) enemy sprites
  • added all 32 sprites for the spermbird “enemy”
  • fixed destroyed asteroids playing the wrong explosion sound effect
  • added cigarette ware hud sprite and gamescreen sprite
  • added the cigarette station sound effect
  • added 6 cigarette station animation sprites
  • replaced the buildsplash image with a new 2015 one
  • figured out and defined all starting powerups for levels 33 to 40
  • added all 16 cargoliner enemy sprites
  • restored all 3 original maforian shapes by rotating and mirroring the ship sprites
  • fixed transparency and shading for all 16 maforian sprites
  • renamed KleptomaraDecoy to Decoy only, since many other enemies will be using it
  • renamed PiratonShot to PirateShot
  • renamed PeashooterShot to PeaShot
  • renamed KleptomaraShot to LaserShot
  • renamed MaforianShot to MicroShot
  • created a new package for all the different shot types and moved the classes there
  • removed dependency of the framestopwatch of the controllable objects
  • the framestopwatch will now use a better timer to perfectly fit the target framerate
  • fixed framestopwatch to calculate the actual framerate instead of a theoretical value
  • fixed vanishing shield powerup playing the wrong sound effect
  • restored all 3 original mothermaforian shapes
  • fixed transparency and shading for 11 mothermaforian sprites
  • created 3 shapes for rocket drives, still not perfect though
  • started including my old particles test program with the core modules
  • fixed english translation in the billing screen being too long
  • added cherry, scissors and cigarette ware drawing code to the hud and the gamescreen
  • fixed the ShipDecorator drawing only cola bottles, disregarding the actual ware type
  • Controls class will now calculate both gamescreen and actual screen mouse coordinates
  • restored all 5 original player ship shapes
  • fixed all 32 player ship sprites transparency and shading using the shapes
  • renamed shot sprite files, moved all player shot and enemy shot sprites into folder
  • created a shot dissolve spriteset containing 3 sprites
  • removed integrated dissolve spritesets from player shot and decoy sprites
  • created a dissolve game object that will be created once certain shots start to dissolve
  • different sounds are played when the player gets ware stolen by flythrough or pirate shots
  • a dissolve object will be spawned whenever a pirate shot hits the player
  • changed how the acceleration sound is played, keeps up better with fast rightclicking
  • fixed playing the wrong sound effect on tailspinning enemies
  • fixed dissolves not being updated
  • reduced the dissolve distance to half the framerate = half a second
  • reduced the player shooting distance to account for having a dedicated dissolve object now
  • resolved a race condition when stopping music on game engine shutdown
  • created separate build targets for signedjar and signedexe since they need internet access
  • added cigarette station animation as a station script
  • added a method to copy a vector to another vector
  • implemented a Camera object which allows switching the camera perspective in the game
  • with the TAB key, the Camera can now be switched between player ship and space station
  • fixed station trapper so that it doesn’t directly add sector objects
  • fixed a bug where enemies were able to bounce off the player while he is still invisible
  • resolved usage of a lot of deprecated drawing methods in the gfx engine
  • fixed an NPE that was caused by resetting stars on repeated TAB press
  • the graphics engine now uses methods to determine if an object needs to be drawn
  • restored all 3 original peashooter shapes
  • fixed transparency and shading for all 16 peashooter sprites; considered pixel perfect now
  • fixed a new bug where game objects would not be drawn centered correctly anymore
  • implemented a level timer that might be useful for time trial modes or timed highscores
  • level timer can now display exact 3 digit milliseconds values or 1 digit values
  • wrote a simple SpacolaServer class that starts an RMI registry and a multiplayer server stub
  • added a multiplayer menu with host/join game menu items
  • wrote a simple client that attempts to join an existing “game”
  • restored all 3 original cargoliner shapes
  • fixed transparency and shading for 10 cargoliner sprites
  • implemented ping logic for the spacola multiplayer server to determine lags for clients
  • set the default port for multiplayer games to 1702
  • the spacola multiplayer server will now be properly shutdown on exit
  • the RMI registry will now be properly shutdown on exit
  • fixed 2 piraton sprites that have initially been mirrored the wrong way
  • recentered the maforian sprites using the shieldmaforian sprites; considered pixel perfect now
  • added 3 maforian shield sprites for the shieldmaforian enemies
  • implemented a basic timeout logic which throws unavailable players out of the game
  • implemented a multiplayer client version check which disallows differing client versions
  • created a score indicator object and pulled related code out of debris explosions
  • wrote methods to copy only position or direction portions from other vectors
  • score indicators will now follow the players movement, as in the original game
  • implemented cargoliner dummy enemy ai and made stations deploy them
  • fixed the wrong sound effect being played when bouncing off from other objects
  • fixed small explosions that actually have never even worked
  • implemented shield maforian dummy enemy ai and made stations deploy them
  • the player can now shoot the shield maforian which in turn will lose its shield
  • renamed wheel enemy to “cycle”, as it seems to be called in the original game
  • implemented cycle dummy enemy ai and made stations deploy them
  • implemented rotating star dummy enemy ai and made stations deploy them
  • wrote a utility class that generates random IDs
  • all game objects now have generated unique IDs to identify them in network games
  • implemented minedropper dummy enemy ai and made stations deploy them
  • restored all 3 original motherharakiri shapes
  • added all 16 motherharakiri sprites; need rotation axes fixed soon
  • figured out and defined all starting powerups for levels 41 to 48
  • added bonbon (candy) station delivery sound effect

v0.39 – December 2014

  • rewrote some german text creation parts for intro and titles
  • translated and added intro, billing and title texts to the resource bundles
  • created a method for the game that redraws everything on changing that language
  • removed a lot of unnecessary object casting in the game class
  • unified the way how titles are instantiated and where to pass the dependency
  • fixed fallback highscore name prompt displaying wrong title
  • extracted all texts from highscores and short instructions into the resource bundles
  • short instructions texts are now constructed more dynamically
  • fixed a problem with billing and intro sharing a titles object
  • fixed a bug where ogg stream fading boundaries were calculated incorrectly
  • extracted and translated all swing gui element texts
  • menubar events are now distinguished on gui objects and not on captions
  • fixed a bug where titles wouldn’t be reset for the splash module
  • added a languages menu with 2 flag icons to the menubar to allow switching languages
  • the language on application start is now preselected in the menu
  • fixed handling events for language switch if the same language was already selected
  • fixed the GEM text editor to make it run inside the game engine
  • added a modules menu with the GEM text editor to allow running it inside the game engine
  • fixed a bug where the game engine would not shutdown during GEM text edit module
  • fixed a bug where the solar selector wouldn’t reset after the player lost a previous game
  • inserted a linebreak for the gem text editor warning on launch
  • created a new splash logo with the year 2015
  • started work on a more flexible module execution engine, which may be controlled much easier
  • translated all the short instructions cards into english
  • short instructions module now also allows switching languages
  • fixed tailspinning enemies’ explosions being positioned one step behind
  • fixed NPE on unselecting music if the audio lib wasn’t initialized yet
  • the game window will only appear after all the initializations are done
  • fixed instant highscore cheat which added score instead of setting it to a calculated value
  • created a cheatmanager class that handles all the various cheats for the menu bar
  • pulled check for new highscore into a dedicated method
  • fixed restarting music on reenable after the game engine has been shutdown
  • the player will now reset score, lives etc. properly on gameover again
  • added alien overload status message sprite to the resources
  • implemented alien overload status to the HUD and the players ship
  • raised max number of aliens to 40, which is the value in the original game
  • lost aliens will now add 20$ to the players score, when they’re recollected
  • fixed a rare NPE by trying to stop the currently playing ogg stream twice
  • fixed player stats getting reset actually only for the wrong player object
  • all core modules now share the same solar system and player object
  • by pressing the + key in a game the player will receive an extra credit (for debugging)
  • powerup containers and alien/ware have a differing magnetic radius multiplier now
  • increased the magnetic radius multiplier for aliens and ware to 4
  • added the last rant sprite that i forgot in the animation
  • rewrote animation logic for the station sprites to allow much easier “scripting”
  • deprecated all old station animation code, will keep as fallback
  • corrected and fine tuned station waving, station rant and station cola animation
  • added toilet paper station animation
  • implemented ware type switches for hud, billing, game screen, sound playback and stations
  • it is finally possible to deliver toilet paper instead of just space cola
  • started writing a level generator class which handles the complete level creation process
  • it is no longer possible to have sector objects overlap each other
  • added several additional distance calculation methods for use of point classes
  • made use of the game random class in the level generator and the solar system
  • wrote more methods to determine random level and screen coordinates for the game random class
  • fixed switching X and Y values in the sectors matrix (results in strange gfx behaviour)
  • fixed random powerups using game random class now
  • game random can now also return random enum values
  • fixed a bug where the target sector was no longer determined correctly
  • fixed a bug where the target station was not provided to the solar system module
  • added more solar system methods to get current and target sector/station/game objects
  • fixed a bug in determining if the current sector is asteroided
  • alien and ware magnetism radius measured and set to be 100 pixels
  • fixed a bug where empty lines were left out when parsing short instructions texts

Show complete changelog

nach oben