Ein elitärer Bordcomputer
Inhaltsverzeichnis
Auf der Nostromo konnte Ripley mit MOTHER sprechen, in 2001 hatte die Discovery One den berühmt-berüchtigten HAL 9000 an Bord, und Luke quatschte locker mit R2-D2. Alles in natürlicher Sprache (wobei bei letzterem der Rückkanal etwas technisch klingt).
Und was mache ich? Sprung in das Jahr 3309 im Elite Dangerous Universum. Ich im Cockpit … und klicke auf dem Bildschirm herum! Navigation … klick … scrollen in der Sonnensystemliste … klick … Planet ausgewählt … klick … Ziel gesetzt.
Zugegeben, eigentlich ist das sogar ziemlich cool. Ich bin nach wie vor begeistert, wie bei Elite der Bordcomputer quasi “physisch” in das virtuelle Cockpit eingebunden ist. Sehr immersiv. Aber wie wäre es, wenn ich auch mit dem Computer sprechen könnte? Die Vorstellung gefällt mir. Ich spiele mit dem Gedanken, ein kleines Programm zu schreiben, einen virtuellen Beifahrer.
Heute basteln wir uns einen Bordcomputer #
Was brauche ich denn dafür? Spracheingabe? Machen wir mit Sphinx. Sprachausgabe? Da kommt Mary ins Spiel. Dann sollte der digitale Kollege natürlich noch etwas über das Spiel wissen, idealerweise sogar Informationen in Echtzeit bekommen. Zum Glück ist das schon seit geraumer Zeit kein Problem mehr. In den ersten Jahren nach dem Release von Elite Dangerous haben findige Hacker noch die Netzwerk-Logs von Elite mitgehört, umständlich über Screenshots Informationen ausgelesen oder sogar direkt im Arbeitsspeicher herumgeschnüffelt. Seit 2016 ist das alles Geschichte: Der Entwickler Frontier führte das Player-Journal ein. Dort werden relevante Ereignisse im Spiel ganz komfortabel in JSON Dateien geschrieben.
Das Journal enthält aktuelle Ereignisse, also zum Beispiel, wenn der Spieler startet, landet, sich einem Planeten annähert, einen Himmelskörper scannt, von einem Sternensystem zum nächsten springt und vieles mehr. Hier gibt es ein kleines Problem: Weil immer nur aktuelles geloggt wird, dauert es bis mein Bordcomputer ein vollständiges Bild seiner Umgebung aufbauen kann. Hier kommt die EDSM (Elite Dangerous Star Map) ins Spiel. Darüber kann ich eine komplette Karte meiner Umgebung mit vielen nützlichen Zusatzinformationen laden.
Zusammengeflickt wird mein Bordcomputer dann mit Java und libGDX. Warum libGDX? Ich stelle mir das so vor, dass ich den Spaß auf dem zweiten Monitor laufen lasse, während ich auf dem Hauptbildschirm spiele. Mein kleiner digitaler Copilot könnte dann zum Beispiel auch eine Sternenkarte anzeigen und die geplante Route oder ein bisschen Text darstellen. LibGDX ist ein Game-Development Framework für Java, das ich zurzeit auch für ein anderes Projekt verwende.
Die Bastelanleitung #
Also, der finale Plan sieht jetzt so aus:
- Java bildet die Grundlage
- Sphinx hört auf meine Sprachbefehle
- Über die Player Journals greifen wir auf Elite zu
- LibGDX zaubert etwas auf dem Bildschirm
- Mary generiert eine gesprochene Antwort
Für die Anbindung an Elite finde ich eine kleine Bibliothek auf GitHub. Damit lassen sich auch kleine Eventlistener für allerlei Ereignisse registrieren. Trotz dieser hilfreichen Library komme ich dann leider nicht darum herum, viele kleine Java-Mapper für Daten zu Sternen, Planeten etc. zu schreiben. Vielleicht hätte ich Python nehmen sollen. Auch in die gesprochenen Texte geht einiges an manueller Arbeit. Es soll ja schließlich alles stimmig zur Situation passen. An einer Stelle probiere ich die Programmierkünste von ChatGPT aus: Ich lasse mir eine Methode schreiben, um Sternenklassen in Farben umzuwandeln.
Erzähl mir von den Sternen #
Um den Bordcomputer anzusprechen, muss ich mir ein Aktivierungswort ausdenken. In einem Anflug größter Kreativität entscheide ich mich für “Computer”. Dann nimmt er für einige Sekunden meine Stimme auf und gleicht das Gesagt mit einer Meine erste Version der Kommandopalette ist noch sehr übersichtlich. Neben ein paar Möglichkeiten, die Sternenkarte zu zoomen und zu rotieren, kann er vor allem das aktuelle Ziel analysieren. Ich bin gerade im System ‘Harpulidna’ unterwegs, und so sieht das dann auf meinem “Bordcomputer” aus:
Und dazu gibt er dann diesen Text auf der Tonspur aus:
‘Harpulidna 4 d’ is a Icy body. The gravity is 0.50 G. Your ship is able to land on this planet. Material analysis shows a composition of 27 percent sulphur, 22 percent carbon, 14 percent phosphorus, 12 percent iron, 9 percent nickel, 5 percent chromium, 5 percent manganese, 3 percent vanadium, 1 percent tellurium, 1 percent niobium and 1 percent tin. Atmosphere detected. It consists of 100 percent Argon. The average temperature on surface level is about 52 Kelvin.
Das meiste davon ist für den Spieler ziemlich nutzlos und purer Fluff. Also genau das richtige! Wunderbar geeignet für ein bisschen atmosphärisches Hintergrundrauschen, wenn ich durch das sonst viel zu stille Weltall fliege. Und das muss noch nicht alles sein: Das Journal gibt noch viel her, um weitere Unfug zu treiben. Ab hier fühlt sich diese kleine Bastelei aber nach Arbeit an. Text für die Sprachausgabe zu schnitzen ist mühsames Handwerk, vor allem wenn man ein bisschen Variation haben möchte. Sonst klingt alles gleich, wie eine kaputte Schallplatte. Vielleicht lasse ich es erstmal so wie es ist. Und sollte ich irgendwann doch noch meine Diamondback nach Beagle Point reiten, finde ich sicher noch das eine oder andere Stündchen, um ein paar frische Dialoge zu bauen.
Einen neuen Sprachbefehl musste ich übrigens dann doch noch schnell implementieren: Shut up! Manchmal darf ich auch einfach die Stille der Leere genießen.