Project

OpenTyrian Adaption

MultiMediaTechnology, 2012

Über OpenTyrian Adaption

Projektidee Ziel des QPT1 ist es, das Arcade-Spiel OpenTyrian von Epic MegaGames in aktuelle Webtechnologien zu portieren. Der Charme und das Gameplay des alten Spieles sollen dabei möglichst erhalten bleiben. In Tyrian steuert der Spieler mit Tastatur oder Maus ein Raumschiff, welches über verschiedene Waffensysteme verfügt, die jeweils vor Levelbeginn gegen Credits gekauft und/oder aufgerüstet werden können. Credits können entweder in den Levels gesammelt oder durch den Verkauf von Waffe...

Projektidee Ziel des QPT1 ist es, das Arcade-Spiel OpenTyrian von Epic MegaGames in aktuelle Webtechnologien zu portieren. Der Charme und das Gameplay des alten Spieles sollen dabei möglichst erhalten bleiben. In Tyrian steuert der Spieler mit Tastatur oder Maus ein Raumschiff, welches über verschiedene Waffensysteme verfügt, die jeweils vor Levelbeginn gegen Credits gekauft und/oder aufgerüstet werden können. Credits können entweder in den Levels gesammelt oder durch den Verkauf von Waffen erworben werden können.

Umsetzung Alle benötigten Grafiken und Musikdateien werden spätestens vor Levelbeginn vorgeladen. Da das Verändern des DOM-Baumes eines der längsten Operationen ist, werden alle statischen Objekte bereits zu beginn des Levels vollständig in das DOM eingehängt. Alle Objekte die nicht gleich zu beginn des Levels benötigt werden, wie zum Beispiel feindliche Schiffe, warten am Spielfeldrand verdeckt auf ihren Einsatz.

Ist ihre Zeit gekommen, erhalten sie eine CSS3 Klasse, die sie entsprechend animiert. Für den zeitgerechten Auftritt sorgt ein eigener Web Worker, der Director. Die Kollisionsabfrage wird in diesem WebWorker realisiert. Theoretisch könnte bereits bei der Erzeugung eines Schusses (Laserstrahl, Feuerball, …) die zu erwartende Kollision mit einem Objekt berechnet werden, da der Spieler allerdings sein Schiff frei steuern kann und feindliche Objekte rammbar sein sollen, kann keine sinnvolle Vorhersage getroffen werden. Daher werden alle Benutzereingaben, insbesondere die Steuerung des Spielerschiffs, an den Director weitergeleitet. Dieser generiert daraus ein JSON Datensatz, welcher die Position des Schiffes und die Anfangsposition aller abgegebenen Schüsse enthält. Der zweiten JSON Datensatz enthält die feindlichen Objekte (die in Level.json gespeichert sind) der ebenfalls von Director erstellt wird.

Kommt es zu einer Kollision, gibt der Director dem Hauptprogramm Tyrian.js, welches die Oberfläche verwaltet, bescheid. Dieses passt nun die Oberfläche gemäß der Nachricht des Directors an. Sinn und Zweck dieses Systems ist es das Hauptprogramm (Tyrian.js) möglichst zu entlasten. Tyrian.js soll nur noch die Aufgabe haben das Interface zu verwalten, die Benutzereingaben weiterzuleiten und den DOM-Baum zu modifizieren. Nötig macht dies die allgemeine Synchronität von JavaScript, das heißt, solange das Hauptprogramm eine Schleife abarbeitet, sind alle anderen Funktionen (der Oberfläche) blockiert.

Unterstützung Statt direkt JavaScript und CSS zu verwenden, wird auf CoffeeScript und SASS/Compass zurückgegriffen, aus Gründen der Code Übersichtlichkeit und der Skalierbarkeit.

Obwohl ich mich seit einigen Jahren mit CSS beschäftige, sind die neusten Entwicklungen wie Animationen und Transformationen die aufregendsten. Die Implementierung dieser Neuheiten wird in allen Browsern als experimentell angesehen und zumindest Firefox und Chrome machen dieser Einstufung bisher alle Ehre, was in der Entwicklung sehr frustrierend sein kann. Nutz man die Funktion –webkit-calc() in einer Webkit Animation, stürzt der komplette Browser sofort ab. Leider gehen dabei auch alle Informationen verloren, die im Chrome eignen Entwicklerwerkzeug gesammelt wurden. Dies erschwert die Fehlersuche unnötig, wobei hier der Fehler aufseiten des Interpreters liegt. Der Chrome 20 Beta bricht bei dieser Kombination schon nicht mehr zusammen, da es die Deklaration schlicht ignoriert. Firefox hingegen hatte bis Version 12 massive Leistungsprobleme mit den Animationen, die erfreulicherweise in Version 13 gelöst wurden.

Meine Kenntnisse in CoffeeScript konnte ich dahin gehend vergrößern, dass ich nun das gesamte Potenzial von CoffeeScript ausschöpfen kann. Vor allem aber konnte ich noch viel über JavaScript und seine Funktionsweise lernen. Bücher wie High Performance JavaScript von Nicholas Zakas oder JavaScript Patterns von Stoyan Stefanov, haben mein Verständnis von dieser Sprache noch mal vertiefen können.

Mit diesem Wissen freue ich mich auf zukünftige (hoch performante) Projekte.

Visuelle Eindrücke

Wenig Energie

Ausweichmanöver

Angeschlagen

Mitwirkende

Anonyme Person