Vince

Vince

(275 Kommentare, 331 Beiträge)

Ein Mann kann etwas verändern.

Homepage: http://www.successdenied.com

Beiträge von Vince
ATARI

Atari ST und Bolo bei den Spieleveteranen

0

Im Spieleveteranen-Podcast ist es nur eine halbe Anekdote bzw. eine kurze Randnotiz wert, mir dagegen natürlich ein kleiner Blogbeitrag: Heinrich Lenhardt erwähnt in der neuesten Folge #70 des Podcasts (der diesmal gleichzeitig auch als YouTube-Video zur Verfügung steht) den Atari ST-Klassiker Bolo von Meinolf Schneider. Besprochen wird das ganze im Rahmen der jeweils 30-jährigen Jubiläen des Amiga 1000 und des Atari ST.

Dabei geht Heinrich Lenhardt, der bekanntermaßen zu den erfahrensten deutschen Fachjournalisten für Computerspiele zählt, und der auch um 1990 Spieletests für das von mir geschätzte TOS-Magazin schrieb, quasi in einem Nebensatz darauf ein, dass es jeweils eine eigene Computerspielewelt rund um den Farbmonitor, aber auch um den Monochrommonitor gab. Aus seiner Sicht waren seine armen Kollegen zu belächeln, die sich regelmäßig über neue Spiele für den Monochrommonitor erkundigten, während er sich eigentlich hauptsächlich mit den Farbspielen beschäftigte. Als Beispiel für Monochromspiele nennt er sofort Bolo, das 1987 veröffentlicht wurde, also zu der Zeit als Herr Lenhardt noch für die Happy Computer arbeitete. Leider bleibt es allein bei der Nennung. Dennoch ist Amiga- und Atari-ST-Spielenostalgikern natürlich die gesamte Folge sehr zu empfehlen.

Der besagte Ausschnitt beginnt bei Minute 36:

Die Spieleveteranenrunde setzt sich in dieser Episode aus den Herren Heinrich Lenhardt, Jörg Langer, Winnie Forster, Michael Hengst, sowie dem Stargast Andreas von Lepel zusammen. Letzterer wurde bekannt als Moderator der ZDF-Sendung “X-Base” Anfang/Mitte der 90er Jahre, in der es um Videospiele ging. Von Lepel arbeitet allerdings auch selbst als Spieleentwickler und früher auch als Spielejournalist.

Erwähnenswert ist auch, dass in dieser Episode kurz diskutiert wird, wie man denn am besten Screenshots von sehr alten Spielen macht. Jörg Langer und Heinrich Lenhardt sind sich dabei einig, dass man sowas am einfachsten mit Hilfe von Emulatoren macht, was mich natürlich entsprechend darin bestätigt, dass Emulatoren der beste, der richtige und vor allem ein zu schützender und zu fördernder Weg ist, alte Spiele zu bewahren, denn damit machen sie sich indirekt für Disk-Images und ROM-Dateien stark. Winnie Forster dagegen schwört auf aufwändige und teure Bildschirmfotografien der Monitore an den echten Geräten.

Spacola_Disks1

SPACOLA Eclipse WIP 0.47

2

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.

ATARI

Enigma 1.21 und RemBolo

Nachdem ich wochenlang nicht nur praktisch nichts auf meinem vernachlässigten Blog habe verlautbaren lassen, sondern sogar das fünfjährige Bestehen von SuccessDenied total verschlafen habe, darf ich an dieser Stelle nun wenigstens meine grenzenlose Freude über immerhin einige wenige Tage Urlaub bekunden, die ich seit einigen Wochen wirklich dringend nötig hatte. Jetzt kann ich zwei Wochen lang soviel Sport machen wie ich will, mich endlich so richtig um den Haushalt kümmern, mein Spiele-Remake fertigbasteln und all die anderen wichtigen Dinge, die ich mir für den Urlaub ganz fest vorgenommen habe. Ich setze mich nur noch mal ganz kurz auf die Couch und … Ach, mal gucken was grade so im Fernsehen läuft.

Tatsächlich leide ich im Moment ein bisschen unter Ideenlosigkeit was ergiebige Themen für Artikel angeht. Ich habe zwar eine lange Liste von Dingen, über die ich irgendwann mal schreiben müsste, aber im Endeffekt fehlt mir dann doch die Energie, die Stichpunkte in einen lesbaren, ausgewogenen Artikel zu gießen und diesem den nötigen Feinschliff zu verpassen. Der notorisch unmotivierte Webseitenbetreiber wendet also stattdessen einmal mehr das Minimalprinzip an und schreibt einen weiteren einfachen Lückenfüller-Artikel, der aber zumindest inhaltlich zur Webseite passt, um sich mehr Zeit für richtige Themen zu verschaffen.

Es geht um Dongleware-Spiele. Eigentlich ganz und gar nicht aktuell ist die Neuigkeit, dass Enigma in der Version 1.21 veröffentlicht wurde. Und zwar schon letzten Dezember. Ich sollte deren Webseite vielleicht doch öfter als zweimal pro Jahr besuchen. Ganze 51 Landschaften sind im aktuellen Release des aufwändigen OXYD-Remakes dazugekommen, darunter scheinbar auch vereinzelt bei den “Deja-vu”-Levelpaketen für Esprit, OXYD, OXYD2, Oxyd Magnum und Oxyd Extra. Diese sind mir als Fan der Originale sehr wichtig, daher betrübt es mich besonders, dass die Entwickler es bis heute noch nicht hinbekommen haben, die alten Levels vollständig zu portieren. Ich wüsste nur noch gerne, ob es mehr eine Sache des Nicht-Wollens oder des Nicht-Könnens ist, da auch das beste OXYD-Remake leider noch nicht gut genug ist, wenn ich darin nicht alle Original-Levels wiederfinde.

Zwischenzeitlich habe ich ein weiteres eigentlich vielversprechendes Dongleware-Remake gefunden: RemBolo (Remake-Bolo?), das vom Dongleware-Klassiker Bolo inspirierte Breakout-Spiel will das Spielgefühl und die Mechaniken des 95’er PC-Bolos imitieren, aber auch das Ur-Bolo vom Atari ST scheint ihm noch als dankbare Vorlage zu dienen. Der scheinbar deutschsprachige Entwickler arbeitet mindestens seit 2008 an der C++-Implementation unter Verwendung vorgefertigter 2D-Physikbibliotheken. Sogar einen recht gut spielbaren 2D-Prototyp von RemBolo bot er damals bereits zum Download an, den ich bis heute sehr beeindruckend finde. Mir wäre es sogar am liebsten gewesen, wenn man diesen Prototyp als Grundlage für die weitere Entwicklung des Remakes gewählt hätte. Stattdessen entschied der Programmierer sich für einen kompletten Neustart zugunsten von 3D-Grafik. Die ersten Screenshots dieser 2.5D/3D-Version sehen auch schon recht beachtlich aus, besonders der Glaseffekt des Schlägers ist wirklich schön anzusehen.

Illustration von der RemBolo-Webseite

Illustration von der RemBolo-Webseite

Leider steht die Kommunikation bei RemBolo deutlich im Hintergrund, so gab es zwischen den Jahren 2010 und 2015 kein Lebenszeichen des Remake-Projekts. Erst im Februar diesen Jahres wurde die Early-Alpha des neuen Leveleditors auf einem Screenshot gezeigt. Sonstige Fortschritte werden nicht genannt. Da ich weiß wie mühsam es ist, quasi im Alleingang ein komplettes Remake zu bauen (unabhängig davon wie minimalistisch die Grafik sein mag oder auch nicht), erhoffe ich mir einige tolle Neuigkeiten von dem Projekt in den kommenden Jahren. Schon da dieses sich als Schwesterprojekt zu Enigma betrachtet, fände ich die Möglichkeit wirklich reizvoll, dass wir eines Tages (mindestens) zwei nahezu perfekte Dongleware-Remakes hätten.

Hardware

Die Festplatte – Unendliche Weiten

9

Noch vor wenigen Jahren habe ich jedem gegenüber meine tiefste Verachtung zum Ausdruck gebracht, der mich zum Thema Festplattengrößen fragte, “wer denn soviel Platz bräuchte”. Jeder, der durch solche und ähnliche Pauschaläußerungen seine gnadenlose Beschränktheit offenbarte, ist mir meine teure Zeit und Hirnkapazität eigentlich nicht wert, erst recht keine selbsternannten IT-“Experten”, die sich dann dummerweise durch solche Sprüche entlarven. Inzwischen würde ich die Thematik vielleicht sogar schon etwas lockerer sehen, denn man ist heute in der wahnsinnig komfortablen Situation, dass man nicht nur exorbitant große Festplatten für wirklich wenig Geld bekommt, sondern auch, dass die bislang – gemessen am Preis pro Gigabyte – unbezahlbaren SSD-Festplatten längst in angenehmere Preisregionen gefallen sind.

Im Grunde genommen bin ich nun zum ersten Mal seit Beginn meiner Nutzung diverser Computer in den späten 80er Jahren nicht mehr ständig auf der Suche nach mehr Speicherplatz. Tatsächlich fällt es jetzt sogar mir als Datenhamster und -messie wirklich schwer, den verfügbaren Speicherplatz zu füllen. Wo ich früher im Prinzip täglich jede Menge Datenkrempel auf große Stapel voller CD-Rohlinge auslagern musste, da die Festplatten immer bis zum Anschlag voll waren, habe ich heute soviel Platz, dass ich mir überhaupt keine Sorgen machen muss. Ich habe sogar derart viel Platz, dass ich mir terabyteweise Redundanz leisten kann – vor 15 Jahren mit dem knappen Taschengeld eines Teenagers undenkbar, und auch vor zehn Jahren mit BAföG kaum machbar. Schlimmer noch, musste ich schon damals im Jahresabstand neue Festplatten hinzukaufen, um nicht Gefahr zu laufen, kostbare Daten löschen zu müssen: 1997 noch mit mickrigen 2,1 Gigabyte, 2005 dann mit gefühlten endlosen 500 GB. Beide waren in ungefähr der gleichen Zeit gefüllt. Das Speicherplatz-Wettrüsten war erstmals mit dem Kauf einer 6 TB-Festplatte Ende 2014 beendet, seitdem kann ich mich entspannt zurücklehnen.

Jahrelang tat sich nichts im Bereich Festplattenkapazitäten. Längst hatte ich Angst, dass bei den 4 TB-Modellen eine unüberwindbare physikalische Grenze erreicht war, quasi das Ende der Fahnenstange. Gleichzeitig änderte sich aber eine ganze Menge bei den immer populärer werdenden SSDs, und daher wollten diesen Umstand die Techniklaien dieser Welt als das (warum auch immer) herbeigesehnte Ende der herkömmlichen Festplatten verstehen. Schaut man sich heute mal bei den üblichen Hardware-Versandhändlern um, so findet man endlich 8 TB-Festplatten für nur noch 250 Euro. Die Technik für 10 TB und sogar 20 TB liegt bereits in den Schubladen der Festplattenhersteller. Solche Festplatten werden bewusst teilweise mit dem Namenszusatz “ARCHIVE” versehen, da solche Massenspeicher sich in Sachen Zugriffszeiten, sowie Datenübertragungsraten mit den SSDs sowieso nicht messen können. Aber sie haben den gigantischen Vorteil ihrer Kapazität, und den kann noch keine SSD ersetzen. Vielleicht noch eine ganze Weile nicht. Die größten Consumer-SSDs mit 2 TB sind zwar schon im Handel erhältlich, jedoch für knapp 1000 Euro in keinster Weise vergleichbar, meiner Ansicht nach auch dann nicht, wenn man versucht, mit der höheren Geschwindigkeit zu argumentieren.

Aber eines beweist mir die aktuelle Situation dann doch: Noch vor wenigen Monaten las ich in einem Technikforum die Behauptung, dass es technisch nicht möglich sein dürfte, in den kommenden Jahren SSDs mit Kapazitäten jenseits der Terabytegrenze zu bauen, da hierfür extreme Strukturverkleinerungen nötig wären. Inzwischen zweifle ich doch sehr stark an dieser Aussage. Es würde mich schon nicht mehr wundern, wenn die Consumer-SSDs in einigen Jahren mit den magnetischen Festplatten gleichziehen würden. Aber bis es soweit ist, werde ich die verblödeten SSD-Nazis auch weiterhin in die Schranken weisen. Storage ist vielen Menschen bei Festplatten eben deutlich wichtiger als reine Geschwindigkeit.

Java

Java Toolkit-Sync verschluckt Interrupted-Flag

0

Da mir im Moment der Sinn nicht ganz nach irgendeinem Politikum steht, worüber ich meinen Senf ausgießen müsste, werde ich vorerst noch mehr Softwareentwickler-Kram posten, mit dem ich die geneigten, aber uninteressierten Leser erfolgreich abschrecken kann. Wir danken für Ihr Verständnis.

Wer sich im Internet gezielt über aktives Rendering mittels Canvas in Java informiert, also etwas, das direkt im Zusammenhang mit Java-Spieleentwicklung steht, der wird wahrscheinlich irgendwann über die Methode sync() in java.awt.Toolkit stolpern, also meistens in der Form Toolkit.getDefaultToolkit().sync(). Nun gehe ich stark davon aus, dass die meisten Entwickler diese Codeschnipsel als gegeben ansehen und 1:1 in ihre eigene Klasse einfügen, da sie wahrscheinlich vielfach erprobt sind. So war das bei mir anfangs leider auch. In einem eigenen Render-Thread habe ich Bilder gerendert und anschließend brav das Toolkit “synchronisiert”, was laut Dokumentation irgendwie “gut für Animationen” ist.

Seit der Umstellung auf aktives Rendering jedoch hatte ich plötzlich Schwierigkeiten damit, den Render-Thread mittels interrupt() vorzeitig zu stoppen, also etwa wenn der Nutzer das Rendering über das Menü beendet oder wenn ein bestimmtes Ereignis auftritt. Zuvor war das nie ein Problem gewesen. Neuerdings läuft der Thread in drei von vier Fällen einfach weiter, sobald ich ihn gezielt unterbrechen will. Das war eine mittlere Katastrophe, denn ich konnte mich jetzt nicht mehr darauf verlassen, dass das Programm das macht, was ich davon erwartete. Mein Programm funktionierte so nicht mehr, und ich wusste nicht, was ich falsch gemacht haben könnte.

Etwa einen halben Tag hat es gedauert, bis ich den Fehler gefunden hatte: java.awt.Toolkit.sync() verschluckt ganz frech das Interrupted-Flag. Es scheint leider wirklich so zu sein. Die Implementation der Java Virtual Machine von Oracle ist hier offenbar fehlerhaft, denn alles funktioniert einwandfrei wenn ich auf sync() verzichte. Sobald ich die Zeile verwende, klappt das Unterbrechen des Threads nicht mehr. Meine Vermutung ist daher, dass das blockierende sync() das Interrupted-Flag mittels interrupted() abfragt (und dadurch löscht!), und dann leider nicht mehr setzt und leider auch keine Exception wirft. Es verschluckt die Thread-Unterbrechung völlig. So wird dieser Mechanismus sogar ganz offiziell in der Java-Doku erklärt:

if (Thread.interrupted()) // Clears interrupted status!

Nun hält sich Oracle selbst nicht daran. Ich habe anschließend in meinem Code keine Möglichkeit mehr, diese Unterbrechung zu erkennen und gegebenenfalls selbst eine InterruptedException auszulösen. Oracle hat hier eindeutig Scheiße gebaut, denn eigentlich ist das Konsens, das Interrupted-Flag nach dem Löschen erneut zu setzen, damit die Unterbrechung nach oben eskaliert werden kann, so dass auch andere Programmteile auf die Unterbrechung korrekt reagieren können. Hier wurde ganz einfach geschlampt.

Und was macht sync() eigentlich? Tja, keine Ahnung. So ganz scheint das nämlich niemand zu wissen. Ich liebe es, wenn die Java-Dokumentation von Oracle so explizit ist, dass man trotzdem keine Ahnung hat, was genau vor sich geht. So auch zur Methode sync() der Klasse Toolkit:

void java.awt.Toolkit.sync()

Synchronizes this toolkit’s graphics state. Some window systems may do buffering of graphics events.

This method ensures that the display is up-to-date. It is useful for animation.

Wenn jemand mal im Internet in einschlägigen Entwicklerforen versucht danach zu fragen, was das genau bedeutet, wird die Frage mit “synchronizes the graphics state” “beantwortet”, und anschließend als Off-Topic geschlossen. Zurecht wurde wenigstens noch darauf hingewiesen, dass das die Frage kaum beantwortet.

Da ich weder sagen kann, was die Methode macht, in welchen Fällen ich sie brauchen könnte, und welche Vorteile oder Nachteile damit zusammenhängen, werde ich auf sync() gerne verzichten, schon da ich mit dem Interrupt-Problem einen ziemlich schwerwiegenden Fehler entdeckt habe, den ich nicht bereit bin zu akzeptieren – ganz egal wie toll die Funktion ansonsten arbeiten möge.

Vince's RSS Feed
nach oben