Alternative Steuerungsmethoden für Trainz

  • 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

    Einmal editiert, zuletzt von Joerg M ()

    • Offizieller Beitrag

    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

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

    :loudly_crying_face:


    Jörg

    Einmal editiert, zuletzt von Joerg M ()

  • 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 :winking_face: soweit kommts noch das ich im Trainz-Programm rumpfusche und dann geht nix mehr :grinning_squinting_face:

    • Offizieller Beitrag

    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

  • 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

    2 Mal editiert, zuletzt von Joerg M ()

    • Offizieller Beitrag

    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

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

    • Offizieller Beitrag

    Wenn es solche Features gibt, gibt es sicherlich auch mehr Nutzer, die sich für den Multiplayer begeistern lassen :)


    Davon ab sollte es aber auch mit etwas Aufwand möglich sein, ein Stellwerkfenster in TrainzScript zu schreiben, welches das kann. Auf jeden Fall kann man schonmal Modellbahnartige Schaltpulte auf die Strecke setzen (ja, die Funktionieren im MP) und von dort aus Weichen stellen sowie andere Knöpfe drücken, die mit irgendwelchen Funktionen verbunden sind, siehe z.b.



    Greets, Mika

  • @callavsg

    Diesen Ansatz hatte mein Sohn auch gesagt als ich ihm die Problematik erklärte.

    Leider kann er uns bei der Lösung z.Zt. nicht helfen, da er in anderen zeitraubenden Projekten steckt.

    Es sei den man kann ihm die Variablen von Trainz benennen. Der Rest wäre "ganz einfach".

    Dann kann Ardunio den Rest übernehmen



    Jürgen aka Joth

    Grüße

    Jürgen aka Joth

    (Ex-Neuköllner)


    "Die Dummheit von Regierungen sollte niemals unterschätzt werden." Helmut Schmidt

    "Immer wenn ich denke, dass meine Strecke fertig ist, gibt es ein Update" Icke

    ''Ich habe große Achtung vor der Menschenkenntnis meines Hundes, er ist schneller und gründlicher als ich.'' Fürst Bismarck

    "Denk ich an Deutschland in der Nacht, dann bin ich um den Schlaf gebracht.“ Heinrich Heine

  • Erstmal respekt an callavsg. nur mal ein kleiner zwischenstand von mir. Es funktioniert! Ich habe prototypmäßig mit potis, schalter und taster mein 2010er trainz ferngesteuert! Wie geplant hab ich einen Arduino nano (hatte ich noch rumliegen) als Hardware-IO eingesetzt. Aktuell packe ich erstmal 14 Kanäle in ein Protokoll das über virtuelle serielle Schnittstelle mit meiner Software kommuniziert (werden aber mehr). In dieser kann man dann die Art der Behandlung der Eingansdaten einstellen (jeder kanal ist frei konfigurierbar, d.h. kann alles sein und alles setzen) und diese wiederum schickt Tastendrücke an trainz. Läuft... Aber! Ich kann leider nur .NET (managed code).


    Vielleicht verrät @callavsg wenigstens wo oder wie man die einstiegspunkte (von mir aus auch unmanaged) findet :winking_face:

    Einmal editiert, zuletzt von MathiasR ()

  • Vielleicht verrät callavsg wenigstens wo oder wie man die einstiegspunkte (von mir aus auch unmanaged) findet

    Genau darin liegt der Knackpunkt. Der Weg ist das, was juristisch fragwürdig ist.

    Ich schlage eine Deal vor:

    Ich habe gestern diese Software bereits etwas schön verpackt. Diese unterstützt nun Plugins und die entsprechende TrainzScript Bibliothek ist auch schon fertig. Wenn man da etwas brauchbares und sinnvolles liefert, würde ich bei N3V Games anklopfen und fragen, ob die das durchgehen lassen. Wenn ja, biete ich die Software und das Plugin-SDK zum Download an.

  • Wenn ja, biete ich die Software und das Plugin-SDK zum Download an.

    Fein, dass Du uns immer wieder mit Deinen Script-Kreationen erfreust! Dein Einsatz fuer uns Trainzer ist vorbildlich!


    Mick!

    One of the painful signs of years of dumbed-down education is how many people are unable to make a coherent argument. They can vent their emotions, question other people’s motives, make bold assertions, repeat slogans—anything except reason.“ (Thomas Sowell)

  • @callavsg und MathiasR ...

    auch von mir je einen Daumen hoch für eure Arbeit...

    allerdings könnte diese "Steuerung" bereits mit den anfangs genannten Sachen erfüllt werden, und zwar für mindesten 18 Schalter und Regler, was den Cab-Modus betrifft!

    Nun gut, jede Taste usw. nicht frei programmierbar, halt fest zugeordnet, aber:


    Genanntes Problem war eher die Rückmeldung, bzw. Bereitstellung von Daten aus Trainz.

    Wie schaut es da mit Euren Programmen aus...?


    Jörg

    Einmal editiert, zuletzt von Joerg M ()

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

    Damit ist alles abgedeckt