KSPControl - A new KSP Multiplayer

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • KSPControl - A new KSP Multiplayer

      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
    • 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.
    • Neu

      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.