Alternative Steuerungsmethoden für Trainz

  • MathiasR

    Wünschenswert wäre natürlich, dass N3V diese Funktion via Service Pack nachreicht, im (für die normalen Benutzer) schlimmsten Falle kommt diese aber erst mit dem nächsten Release, wohl irgendwann 2020 (schätzungsweise).

    Und auch dann wird der Arduino ja weiterhin benötigt, um eben die Schnittstelle zwischen Eingabehardware (Taster, Potis, etc.) und PC zu bieten. :-)


    Vielleicht gibt es ja die Möglichkeit, dass du auch ohne Trainz Plus Zugang als Betatester bekommst, sinnvoll wäre das allemal.

  • Ich fände es ja schon toll, wenn Trainz Unterstützung für Gamecontroller/HIDs bieten würde, dann könnte man ja zumindest mal ein altes PC-Lenkrad nutzen und Buttons und Potis nach eigenem Gusto zweckentfremden...

    ... das sollte mit der "Blackbox möglich sein!


    @all Ich habe mir mal weiter Gedanken zum Thema gemacht:

    Eigentlich müsste man doch für Rückmeldungen ein Skript nutzen können, das die Veränderungen in der Cab, Locomotive usw. bezüglich Geschwindigkeit und sonstiger Anzeigen auswertet...


    Edit: ...und im Objekt "Interior" entsprechend anzeigt.


    Jörg

  • das Problem ist, dass TrainzScript nach außen hin abgeriegelt ist. Es gibt überhaupt keine Möglichkeit, mit der Außenwelt zu kommunizieren. Man kann Wikiseiten öffnen aus HTML In-Game Fenstern heraus, welche dann an den eingestellten Standardbrowser gehen. Ja, man könnte ein Programm als Standardbrowser wählen, welches diese abfängt und daraus Werte abliest oder ein Addon für Firefox/Chrome erstellen, das wird aber mehr schlecht als recht.

    Somit bleibt mehr oder weniger nur die Möglichkeit des Ablesens vom Bildschirm. 1x1px Bilder in TrainzScript HTML muss ich mal probieren, ob das geht. Fix ist auf jeden Fall die linke obere Bildschirmecke und bis zur Auflösung von 720p können wir davon ausgehen, dass diese Pixel alle Nutzer haben. Eigentlich wäre ein Hud am rechten Rand viel schöner, aber man kann aus TS die aktuelle Auflösung nicht aufrufen*. Jetzt steht die Frage, ob Fenster, welche im Script an einen Bereich geschoben werden, der nach rechts außerhalb des Bildschirms liegt, ob diese einfach an den rechten Rand docken. Ansonsten kann man in/bis T:ANE auch Inhalte zum HUD per Regel hinzufügen, aber ich hab noch nicht getestet, wie sich diese auf TRS19 auswirken. Das eigentliche HUD von 19 abzulesen könnte auch schwieriger werden, da die Nummern auf einem farblich Flexiblen Hintergrund sind.

    Ich fürchte auch mit einer Nativen Inputunterstützung irgendwann in weiter Zukunft würde Trainz keinen Output liefern.


    Du kannst, wenn du dich mit C++ auskennst und ein ernsthaftes, flexibles Projekt für viele Nutzer entwickeln willst (ist ja gerade der Fall) auch bei N3V anfragen, eine Lizenz zur DLL-Erstellung zu erhalten, welche dann tiefer in Trainz eingreift und auch Output abrufen können sollte. Allerdings ist die Wikiseite auch schon etwas älter und da scheinbar außer Pi Engineering nie jemand interessiert war Trainz mit DLLs zu erweitern, weiss ich nicht, wie aktuell diese Möglichkeit noch ist.



    Greets, Mika


    *Edit: Geht doch, gerade in den AWS Skript geschaut, ist gar nicht so schwer

    Strecken und Szenariobauer, Repainter, Skripter und Moderator...

    ... nur von Modelling hab ich keine Ahnung :P


    "It's always more fun to share with everyone" -Jack Johnson

  • Joerg M Wie kann ich darauf von "aussen" zugreifen? Oder denkst du auch über die PixelCode-Idee nach?

    Eigentlich NEIN...

    Aber damit löst sich mein nächtlicher Gedanken_Marathon gerade in Luft auf:

    das Problem ist, dass TrainzScript nach außen hin abgeriegelt ist. Es gibt überhaupt keine Möglichkeit, mit der Außenwelt zu kommunizieren.

    ;(


    Jörg

  • Mika 720 Pixel breit am oberen linken Bildschirmrand wären doch ausreichend um einige Informationen bitcodiert zu übertragen. Wäre klasse wenn du das hinbekommen könntest. Diese wiederum könnte ich auslesen und weiter verarbeiten.

    Und wenn man da 0/1 in schwarz/fastschwarz darstellt stört es auch niemanden.


    Ich kümmer mich jetzt erstmal um den Hinweg und wenns läuft ist der Rückweg dran.


    Zum Thema C++ und dlls generieren, das übersteigt dann doch meinen Horizont... Ich bin glücklich das ich mit meinem bisschen VB.Net, C# und am Arduino klar komme ;) soweit kommts noch das ich im Trainz-Programm rumpfusche und dann geht nix mehr :D

  • Ich denke, wer ein Fahrpult mit Trainz verbindet, hat sich mit der Materie beschäftigt und hat die Limitationen gelesen und stört sich dann eventuell auch wirklich nicht an nem kleinen Bitcode damit das läuft.

    Ich muss mich dieses Wochenende eh mit Skripten beschäftigen, vielleicht kann ich das ja dann kurz testen.


    Außerdem hab ich gerade den Hinweis von einem anderen User auf Discord bekommen, dass die T:ANE SP3 Steamversion durchaus normale Controller erkennt. Ich hab mir vor ein paar Monaten mal nen Steam Key für T:ANE gesichert, lade das gerade runter, werde in ca ner halben Stunde mal testen, ob meine Controller damit gehen.



    Greets, Mika

    Strecken und Szenariobauer, Repainter, Skripter und Moderator...

    ... nur von Modelling hab ich keine Ahnung :P


    "It's always more fun to share with everyone" -Jack Johnson

  • Außerdem hab ich gerade den Hinweis von einem anderen User auf Discord bekommen, dass die T:ANE SP3 Steamversion durchaus normale Controller erkennt. Ich hab mir vor ein paar Monaten mal nen Steam Key für T:ANE gesichert, lade das gerade runter, werde in ca ner halben Stunde mal testen, ob meine Controller damit gehen.

    Bezieht sich dies nicht rein auf den Steamcontroller? Wenn ja, wäre dies doch schon die halbe Miete :)


    Wobei es auch viele Spiele auf Steam gibt welchen „nur“ den Controller von valve unterstützen...

  • das Problem ist, dass TrainzScript nach außen hin abgeriegelt ist. Es gibt überhaupt keine Möglichkeit, mit der Außenwelt zu kommunizieren.

    Also, da mir das Ganze keine Ruhe mehr lässt, hab ich mich nochmals schlau gemacht:


    Der /das Raildriver Fahrpult ist laut dieser Seite hier für verschiedene Simulatoren geeignet:


    Fahrpult


    Interessant ist, daß sich links oben eine digitale Geschwindigkeitsanzeige befindet!

    Woher bezieht diese seine Daten...?


    Edit:

    Wenn ich mit die Dateien der Software so anschaue, werden die Daten zu den Bedienelementen und Anzeigen in und aus der Cabin- (Interior) und Enginedatei der jeweiligen Lok gegeben / genommen.

    Wie ich schon vermutet habe...


    Jörg

  • OpenRails: Native Unterstützung (erkennt aber sonst keine anderen Controller und gibt auch sonst keine Zugdaten nach Außen)

    Railworks: Schnittstelle für DLL Erstellung und erkennt normale Joysticks soweit ich weiss (nie selbst getestet)
    World of Subways: Native Unterstützung (erkennt aber sonst keine anderen Controller und gibt auch sonst keine Zugdaten nach Außen)
    Trainz mit Jet Engine: Native Unterstützung? Oder nur Tastaturemulator?
    Trainz mit E2 Engine (T:ANE/TRS19) Native Unterstützung via TNI DLL, aber erkennt sonst keine anderen Controller wie besprochen

    MSTS: Raildriver Software emuliert Tastatureingaben und liest vom HUD ab

    Run 8: Native Unterstützung (hab ich nicht also keine Ahnung ob andere Controller unterstützt)



    Greets, Mika

    Strecken und Szenariobauer, Repainter, Skripter und Moderator...

    ... nur von Modelling hab ich keine Ahnung :P


    "It's always more fun to share with everyone" -Jack Johnson

  • Ich würde das Thema gerne nochmal hervorholen.

    Ich habe es geschafft einen in beide Richtungen funktionierenden Datenkanal zwischen Trainz-Scripts und nativem Code herzustellen.

    Wie genau ich das angestellt habe oder woher ich die nötigen Infos habe, bleibt mein "Geheimnis", da ich mir über die rechtliche Lage dahingehend nicht sicher bin.


    Wichtiger ist vielmehr, dass meine Versuche mit einer managed Language wie C# unter .NET auch mit den bekanntesten Packages keine brauchbaren Ergebnisse geliefert haben. Im Endeffekt musste ich mich trotzdem immer unmanaged Code bedienen. Das machte die Sache unübersichtlicht und anstrengend. Darum hatte ich in C/C++ nochmal erneut angefangen und mich somit in die entsprechenden Teile von TRS19 eingeklinkt.


    Ich beschäftige mich schon seit längerem mit erweiterten Möglichkeiten und weiter als das bin ich nicht gegangen, da mir wie gesagt die rechtliche Lage dahingehend nicht eindeutig erscheint. Anbieten, Code zeigen, o.ä. werde ich deswegen auch nicht.


    Meine Vermutung jedoch habe ich ein wenig bestätigt bekommen, dass ich mit C# unter .NET mehr Aufwand habe, als in einer reinen nativen Umgebung. Es ist nicht damit getan die InteropServices zu nutzen...

    Mit der entsprechenden Bibliothek ging das mittels weniger Codezeilen. Unter C# musste ich mit der gleichen Bibliothek (die auch nur die nativen Bibliotheken verpackt) viele Aspekte gerade im Hinblick auf Datentypen und Strukturen mehr berücksichtigen. Auch hier reichte es nicht einfach alles als "byte" zu betrachten und nach Gebrauch zu casten.


    Kurzum:

    C# und .NET sind in diesem Beispiel schön, wenn man schnell einen Server oder ähnliches programmieren möchte, der die Daten routet, sprich anhand des Protokolls die Daten an die richtigen Adressen verteilt, so als Zwischenstück zwischen Hardware und Trainz. Einen solchen Ansatz verfolgt meine ich auch ZUSI, das gewisse Daten über eine extra Software die mit TCP-Verbindungen arbeitet sendet.

    Für das wirkliche Einhängen empfehle ich ganz klar eine Lösung mit C++ unter Win32 API, da ich dort direkt und ohne Umwege Dinge beschreiben und lesen kann, die ich brauche.


  • Ich finde den Ansatz sehr Interessant für den bidrektionalen Datenkanal, hierdurch würde sich neben der Steuerung durch eigene Hardware auch die Möglichkeit ergeben, für Multiplayer-Sessions eine Art externes Stellwerk oder Fahrstraßentool für die Jeweilige Strecke zu bauen, sofern man damit in der Lage ist Weichen zu schalten und Fahrzeugpositionen ( Befindet sich in Block XYZ ) abzugreifen.
    Wäre für größere Multiplayersessions interessant, wenn man hier mit menschlichen FDL'lern arbeiten möchte...


    Ist halt nur die Frage, ob es so große Sessions oder Fahrtage gibt, die einen solchen Aufwand rechtfertigen könnten.