Kerbal Mission Control - A new KSP Multiplayer (früher: KSPControl)

    • Kerbal Mission Control - A new KSP Multiplayer (früher: KSPControl)

      Ich möchte mich mit einer nicht ganz so kleinen Idee ins Forum zurückmelden.

      Vielleicht kennen ein paar von euch den Artemis Spaceship Bridge Simulator. Grunprinzip ist einfach: Ihr steuert ein Raumschiff. Clue dabei ist, dass jeder Spieler eine andere Station auf selbigen Raumschiff besetzt und alle eng zusammenarbeiten müssen damit es klappt.

      Ich habe vor auf Basis des Mods kRPC etwas ähnliches zu entwickeln. Der Mod ermöglicht es sehr einfach von verschiedenen Programmiersprachen aus direkt auf KSP zuzugreifen. Idee ist dabei, dass verschiedene Personen verschiedene Informationen von der Rakete bekommen und auch verschiedene Steuerungsmöglichkeiten haben.



      So hat der Steuermann Zugriff auf den Navball und die Steuerung der Rakete, während ein Techniker Solarpanele, Batterien, Lichter, Generatoren und Landestützen.

      Spieltechnische Umsetzung
      Umgesetzt wird das ganze über ein Modulares System basierend auf Roles und Panels.
      Ein Panel ist dabei eine Ansammlung von Anzeigen und Kontrollen. So kann es ein Panel mit dem Navball oder ein Panel für die Actiongroups geben. Diese Panel werden dann den entsprechenden Rollen zugewiesen, können aber individuell angepasst werden. So sind Mischrollen oder komplett neue Rollen möglich (oder man packt alle Controls in eine Rolle und hat ein völlig überladendes Fenster um KSP zu steuern)

      Teschnische Umsetzung


      Zentrales Element der Umsetzung wird ein sogenannter MQ-Server (Messagequeing) sein. Der Server erhält über kRPC alle wichtigen Daten und schreibt diese in die verschiedenen Kanäle des MQ-Servers. Die Clients melden beim MQ-Server Interesse an den für ihre Kontrollen benötigten Kanäle an (genauere Ausarbeitung folgt) und erhalten dadurch alle Infos die sie brauchen. Ihrerseits können sie Kontrollanweisungen in einen speziellen Command-Kanal schreiben welcher vom Server ausgelesen und über kRPC an KSP zurückgegeben wird.

      Bisheriger Plan für die ersten Versionen ist eine reine Anzeige wichtiger Informationen sowie grundlegende Strukturen sein. Im weiteren werden dann weitere und komplexere Panels dazu kommen.

      TODO

      • Auswahl eines geeigneteten Embeded MQ Servers
      • Testen von kRPC und dem Datenempfang
      • Einrichten des MQ Servers
      • Erstellen der grundsätzlichen Struktur für Server und Client.
      • Erstellen erster Panels für Informationsanzeige
      • Erstellen erster Kontrollpanels

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Chase ()

    • Ziemlich interessante Idee, wenn das fertig ist möchte ich da auf jeden-Fall mal mitfliegen. :thumbup:

      Chase schrieb:

      Der Mod ermöglicht es sehr einfach von verschiedenen Programmiersprachen aus direkt auf KSP zuzugreifen.
      Auch Java? :schäm: :D

      Wie sieht es im Konstruktionsmodus aus?
      Ist es möglich sich dort die Aufgaben auch aufzuteilen?
      So das z.B. ein Spieler das Servicemodul, ein Andere den Lander und wieder ein Anderer Spieler die Rakete baut? :ahhh:
    • Mr. Maxwell schrieb:

      Chase schrieb:

      Der Mod ermöglicht es sehr einfach von verschiedenen Programmiersprachen aus direkt auf KSP zuzugreifen.
      Auch Java? :schäm: :D

      Interessant dass du es ansprichst, weil ich hatte vor das ganze in Java zu schreiben. kRPC bietet Libaries in Java, C#, C++ und Python an. Theoretisch kann man mit jeder RPC fähigen Programmiersprache darauf zugreifen

      Mr. Maxwell schrieb:

      Wie sieht es im Konstruktionsmodus aus?
      Ist es möglich sich dort die Aufgaben auch aufzuteilen?
      So das z.B. ein Spieler das Servicemodul, ein Andere den Lander und wieder ein Anderer Spieler die Rakete baut? :ahhh:

      Das geht mit kRPC leider nicht, da es keine Spiele miteinander verbindet sondern lediglich Befehle von außerhalb an KSP weitergibt. Man könnte sich das Vehicle Sharing von DMP anschauen.
    • Klingt cool, würde mich auf jeden Fall interessieren. :thumbup:
      I mod, therefore I am

    • Mr. Maxwell schrieb:

      Das ist ja Super, dann kann ich mit Java auch bisschen daran rumschnipseln. :D
      Hilfe ist natürlich immer gerne gesehen :D

      Thomas P. schrieb:

      Klingt cool, würde mich auf jeden Fall interessieren. :thumbup:
      Und auch schön, dass das Projekt Anklang findet.

      Ein erstes kleines Update:
      Zum einen ist das ganze schon etwas schärfer geworden. Ich werde den ZeroMQ Server als Embedded MQ Service nutzen um die Kommunikation zwischen Server, Clients und KSP sicherzustellen. Desweiteren kommt GSON als Libary zum Einsatz um die KSP Daten zum Client zu transferieren.

      Als ersten Test habe ich mit kRPC die Fluginformationen ausgelesen und einfach mal per Java Reflection in ein Fenster geworfen. Dazu kommt ein wenig Statistik in den ersten beiden Zeilen darüber wie oft ich dieses Fenster updaten kann.

      Die Zahlen wurden einfach aus dem Objekt gelesen, mit einem Namen versehen und an einen String gehängt welcher dann ins Fenster projiziert wird. Also keine große Formatierung im Hintergrund und ich bin soweit mit Average Ops zufrieden.


      Ziel ist es am Ende 10mal pro Sekunde alle Daten in die Que hängen zu können, damit die Clients sie erhalten können.
    • Nachdem es etwas ruhig geworden ist kann ich jetzt nach einigen Tagen Arbeit verkünden das die erste Hälfte der Basis fast komplett steht.

      Ich kann jetzt effektiv Daten aus KSP herausziehen und sie an meine Clients senden. Das wird über eine zentrale Messageque gemacht welche dann über Filter in verschiedene Kanäle aufgeteilt wird.

      Bisher geplant sind die Kanäle:
      Flight - Fluginformationen, größtenteils für Atmosphärenflug (Implementiert)
      Orbit - Informationen über den Orbit des Fahrzeugs
      Science - Informationen über alle verfügbaren Experimente
      Ressource - Ressouceninformationen
      Engineering - Informationen über Stromerzeugen und Verbrauch sowie den Status verschiedener Teile
      Communication - Informationen über am Fahrzeug verfügbare Antennen

      Für das Layout des Clients habe ich mir überlegt, dass ganze wie ein modulares Panel aufzubauen. Also besteht das komplette GUI aus einem standartisierten Raster (momentan 200 mal 200 Pixel pro Zelle) und jedes Programpannel muss sich an dieses Raster halten.
      Spoiler anzeigen


      Die gestrichelten Linien sind dabei das theoretische Raster auf dem Panels positioniert werden können.
      Ein Panel kann auch mehrere Zeilen an Platz einnehmen.


      Leider sind die von Java angebotenen Layouts entweder zu starr (Box Layout) oder zu flexibel (GidBagLayout) entsprechen werde ich da wohl oder übel etwas herumbasteln müssen.

      Dennoch funktioniert der Grundstock bisher sehr gut, und selbst mehrere Anwendungen welche die gleichen Infos brauchen sind kein Probleme

      Sobald ich das ganze System noch etwas aufgeräumt und viele Altlasten der Entwicklung entfernt habe, werde ich den Code auch auf Github veröffentlichen.
    • Lang lang ist's her... Also etwas weniger als 3 Wochen. Aber es gibt Neuigkeiten.

      Ich bin ein ganzes Stück weitergekommen, habe verschiedene Dinge verfeinert, das MessageSystem modernisiert und durch einen Rückkanal erweitert. Jetzt können die Clients auch Nachrichten an den Server schicken. Das ist nicht nur Grundstock für das Kontrollsystem, sondern wird später auch für zahlreiche Dinge seitens Programmtechnik verwendet (Ich denke an Dinge wie Einloggen, Rollenanfragen evt. einen Chat und ein Aktionslog)

      Aber ihr habt richtig gelesen, Kontrollsystem. KSPContol ist endlich in der Lage auch Dinge zu kontrollieren. Das System ist dabei relativ einfach. Der Client sagt welchen Wert er auf was setzen will und Server sagt dann ja oder nein (Spoiler, Momentan sagt Server immer ja)
      Mit diesem System kann man dann von einfachem Ausfahren von Solarpanelen bis zur analogen Joysticksteuerung theoretisch alles ermöglichen.

      Ich habe es für den Anfang bei einfachen Grundfunktionen belassen um das System selber auszuarbeiten.

      Spoiler anzeigen

      Neben den beiden einfachen Anzeigepanels gibt es jetzt auch eine Reihe von Buttons mit denen man verschiedene Funktionen steuern kann.
      Hierzu noch ein paar Anmerkungen:
      1) Aus unbekannten gründen lassen sich die Beine nicht separat steuern. Wenn man jedoch die Steuerung für Gear benutzt fahren auch die Beine ein und aus
      2) Mir ist wohl bekannt, dass das GUI noch einige Probleme hat, Verschobene Texte, nicht richtig ausgerichtete Gitterelemente. Darum werde ich mich jedoch später kümmern







      Und am Ende noch die Antwort auf eine Frage die ich mir selbst gestellt habe.
      Wie sieht es jetzt eigentlich mit Verbindungen aus?

      Zum jetzigen Zeitpunkt sieht es wie folgt aus:
      Der Computer auf welchem auch KSP ausgeführt wird muss die Serversoftware gestartet haben. Das möchte ich ungern ändern, da die Serversoftware selber kaum Performance verbraucht und man dadurch später über die Serversoftware auch verschiedene Dinge einstellen oder Dinge wie einzelne Spieler für die Kontrollen zu sperren durchführen kann.

      Problem dabei: Wenn man über das Internet spielen will, muss der Server ins Internet sichtbar sein oder eine VPN Software wie Hamachi ist nötig. Ungünstig.
      Da kommt jedoch wieder eine Stärke der Message Infrastruktur zum Vorschein. Ich arbeite nebenbei daran einen sogenannten Message Proxy zu entwickeln. Diesen kann man dann auf einem externen Server laufen lassen und er macht nichts anderes als Nachrichten von Client und Serverseite entgegenzunehmen und weiterzuleiten.
    • Von Parts und der 0.40

      Jetzt mit Titel!

      So, ich versuche euch jetzt ungefähr Wöchentlich auf dem laufenden zu halten was gerade passiert und in der letzten Woche ist einiges Passiert:

      Fangen wir an mit Parts. Das Partproblem hatte ich schon eine ganze Zeit. Warum Problem? Einfache Sache: kRPC hat keine Möglichkeit einen Part eindeutig zu identifizieren. Es gibt defacto momentan keinerlei eindeutige ID auf einem Vessel.
      Also wenn es etwas nicht gibt: Selbermachen. KSP hat nämlich so eine ID in form der Part.FlightID. Was ich also machen musste war eine Möglichkeit zu finden an diese ID von außen heranzukommen, der Plan war einfach:
      Ein Partmodul entwickeln das nichts anderes macht als beim ersten initialisieren die FlightID des Parts in ein Modulfeld zu schreiben. Einfacher gesagt als getan.
      Nachdem ich dann etwas über eine Stunde versucht habe die KSP Libaries in Visual Studio ans laufen zu bringen und es endlich geschafft hatte dauerte die eigentliche Entwicklung etwa 20 Minuten. Am Ende noch einen ModuleManager Patch, der das Modul einfach an jeden Part ranklebt den KSP zu bieten hat und voilà, eine PartID, öffentlich verfügbar.

      Dann muste ich noch einmal fast alle Datenklassen umschreiben damit ich die Parts ordentlich verwalten und initialisieren kann. Punkt ist: Es geht :party:

      Also, erster Teil des Titels abgeschlossen, auf zu Nummer Zwei: Während ich am entwickeln war wurde insgeheim kRPC Version 0.40 released, welche nicht nur die Kompatibilität mit 1.3.1 herstellt (mir war jetzt kein Punkt im Changelog bekannt der das nötig machen würde, aber okay) und ein paar nette neue Features ermöglicht, welche zum momentanen Zeitpunkt mein Programm richtung Nirvana schicken. Also downgrade auf die 0.39 und kein offizieller Support für die 1.3.1. Vielleicht schaue ich mir das ganze nochmal zu einem späteren Zeitpunkt an, aber momentan Stand ist folgender: KSPControl Version 1.0 wir nicht für die Version KSP 1.3.1 herauskommen und auch nicht kRPC V0.40 unterstützen!

      Edit: Das Ding mit dem FX
      Es ist etwas passiert!
      Oder um genauer zu sein, ich habe erfahren das mit Java8 Swing als Standard für Desktopentwicklungen abgelöst wird. Ich lese mich gerade in den Nachfolger aka. JavaFX ein und es sieht gar nicht so schlecht aus. Daher werde ich schauen ob ich den Client auf JavaFX umstelle, was zum Beispiel das erstellen eines eigene UI Designs deutlich einfacher macht (und sind wir ehrlich... das Standard design sieht halt bescheiden aus)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Chase ()

    • Lang ist her und unter neuem Namen
      Lange ist es und ich konnte mein Versprechen der Wöchentlichen Updates direkt nachdem ich es gemacht habe nicht halten. Grunde dafür sind einfach: Ich war eine Woche in Cardif, Wales unterwegs und bin danach Kopfüber in das Oberstufenprojekt meiner Berufsschule geschmissen worden, was mich wieder 2 Wochen gefesselt hat. Nun ist Ende November und seit letztem Mal kann ich keine Neuerungen angeben.
      Dieser Zustand wird auch erst mal weiter Bestehen, da ich Anfang Dezember umziehe und danach schon Weihnachten vor der Tür steht. Daher werde ich wohl dieses Jahr nicht mehr dazu kommen große Änderungen am Programm zu machen.

      Aber als kleine Ankündigung, damit der Post hier nur schlechte Nachrichten sind.
      Der Name KSPControl ist mir spontan eingefallen und hat mir die ganze Zeit die ich daran gearbeitet habe nicht wirklich gefallen. Daher musste ein neuer Name her und dank ein paar Vorschläge, sowie meiner eigene Intuition ist es jetzt Offiziell.
      KSPControl wird unter dem Namen Kerbal Mission Control oder KMC erscheinen
      Grund für diesen Namen ist, dass der Spielaufbau wie ich ihn mir vorstelle mich stark an das tatsächliche Mission Control der NASA erinnert. Daher, Name genommen, Kerbal drangeklatscht und fertig ist das Branding.