Vorankündigung: Mod für individuelle Gleistypen-Anpassung

Willkommen in der Transport Fever Community

Welcome to the fan community of Transport Fever and Train Fever, the economic simulators of Urban Games. The community is free for you to share and inform yourself about the game. We cultivate a friendly and objective interaction with each other and our team will be happy to answer any questions you may have.

 

Registration and use is of course free for you.

 

We wish you a lot of fun and hope for active participation.

The Team of the Transport-Fever Community

  • Da sich das Straßenbahnprojekt erst einmal eine Pause gönnt, habe ich eine andere Sache dazwischengeschoben, auch wieder mal eins der Vorhaben, die schon lange angedacht waren. Es handelt sich um eine Mod, mit der man beliebige (!) Gleistypen mit einer Reihe von Attributen versehen kann, die sie nativ nicht besitzen. Darunter unterdrückte Oberleitungsmasten, Fahrdrähte und Prellböcke, Änderung der Geschwindigkeit, Gleisbettfarbe, Böschung etc. Ist das so was wie die Jokerstraßen? Ja, aber anders. ;) Man kann besser sehen, was man tut, und die Anzahl der neuen Gleistypen ist unbegrenzt. Es können allerdings keine bereits verlegten Gleise verändert werden, und eine Erzeugung weitergabefähiger Gleistypen ist auch nicht geplant. Außerdem wird in den meisten Fällen die Installation der Original-Gleismods nötig sein. Es wird in dieser Mod auch keine Funktionen geben, mit denen Gleistypen anderer Mods durchgehend geändert werden können; es werden grundsätzlich nur neue einzelne Gleistypen erzeugt.


    Ich denke mal, gerade im Hinblick auf ziehbare Oberleitungen und Verschlankung des Gleistypen-Bestandes haben sich schon einige von euch so was gewünscht. Es werden aber noch ein bis zwei Wochen bis zur ersten Beta vergehen, denn es muss wie üblich wieder viel Forschung betrieben werden.

    Ich will TpF3 mit Dinos, Zombies und Vulkanen!

  • Ich möchte nur anmerken, das die Gleisgeschwindigkeit per Region in CommonAPI2 geändert werden kann. Schon ewig


    Unfertig in CommonAPI2 kann man auch den Gleistyp von der Oberleitung trennen. (ca 20%) fertig.

    Bevor hier wieder wegen paralleler Entwicklung gemeckert wird.

  • Quote

    Bevor hier wieder wegen paralleler Entwicklung gemeckert wird.

    Ich habe überhaupt nichts gegen CommonAPI, aber es soll auch Leute geben, die CommonAPI nicht benutzen, z.B. die User auf Steam oder die Linux-Leute. Oder diejenigen, die sich aus welchen Gründen auch immer für einen anderen Weg entscheiden. Vielleicht wird es eine Doppelentwicklung, aber dann hat eben auch jeder zwei Optionen. ;-)

    Quote

    Ich möchte nur anmerken, das die Gleisgeschwindigkeit per Region in CommonAPI2 geändert werden kann.

    War mir nicht bekannt. Aber wieso wird dann jede Gleismod mit gefühlt Hunderten von Varianten geliefert, die alle nur die Menüs verstopfen? BTW Was meinst du denn mit "per Region"?

    Quote

    Wie, ich kann keine Gleise ändern, die ich nicht habe

    Es werden Klone angefertigt, bei denen der größte Teil der vorhandenen Informationen kopiert wird. Einige Parameter können dann geändert werden. Eigentlich alles, außer den Schwellen und den Schienen, weil dazu separate Modelldateien notwendig sind, die sich nur sehr eingeschränkt über die Transformationsmatrix ändern lassen.

    Ich will TpF3 mit Dinos, Zombies und Vulkanen!

  • Ich habe überhaupt nichts gegen CommonAPI, aber es soll auch Leute geben, die CommonAPI nicht benutzen, ..

    wieso wird dann jede Gleismod mit gefühlt Hunderten von Varianten geliefert, die alle nur die Menüs verstopfen? ...

    Die CommonAPI ist sicher eine sehr gute Mod. Mir ist sie etwas zu kompliziert und deshalb nutze ich sie nicht. Mit den Gleisbaumods hast du absolut Recht. Bei den Mods die ich benutze habe ich jede Menge nicht benötigtes raus geschmissen.

  • Da bin ich ja mal gespannt. Ein lang bekanntes Problem.


    Du willst also die TPF API (api.res) nutzen, um vorhandene Gleistypen zu kopieren und dabei anpassen?

    Die Idee hatte ich auch schon lange, aber ich habe bisher keine Mod gesehen, die im großen Stil Gleise dynamisch erstellt und damit ewiges Copy&Paste von Gleis .lua Dateien vermeidet (siehe zB NEP...). Außer lollus höchstens, der macht das mit ein paar Straßen.

    Quote from 16.07.2020 Ich an UrbanGames

    Es ist schön, dass es jetzt maximale Steigungen für Straßen gibt. Aber hier ist es wie bei den Gleisen: In der neuen dynamischen Ressourcenverwaltung ist "maxSlope" leider nicht mehr vorhanden und kann nicht in der postRunFn gesetzt werden. Es wäre daher nur der Weg über die klassischen Modifier loadTrack/loadStreet möglich, so wie ich es bei "Realistic Railway Slopes" gemacht habe. Auf diesem Weg würde eine Mod, die alle Straßensteigungen ändert, aber nicht dynamisch erstellte Straßen/Gleise berücksichtigen, welche es in Zukunft vielleicht als Mod geben wird.

    Ist inzwischen vorhanden, also die Möglichkeiten, alle Parameter zu ändern sind schon da. Wenn es damals schon funktioniert hätte, hätte ich es auch über die res api umgesetzt und nicht per Modifier. Die meisten solcher Mods, die Gleise durchgehen basieren wahrscheinlich auf Modifier, d.h. dynamsich hinzugefügte Gleise werden nicht beeinflusst (denke da zB an deinen Kurvengeschwindigkeitsanpasser). Das muss man bedenken, aber man will die custom Gleise ja eh selbst konfigurieren.


    Wenn man das individuell gestalten will stellt sich ja die Frage des Interface, wie hast du das gedacht? Eine lange Liste von Modoptionen? Das könnte halt schnell explodieren. Oder eine Config Datei? Das spricht halt nicht alle Nutzergruppen an und User die eine Datei bearbeiten, kopieren sich evtl. gleich selbst eigene Track .luas zurecht...


    Außerdem ein nicht ganz ungefährliches Unterfangen, weil es ja nicht zuletzt um geladene Ressourcen geht, die im Savegame gespeichert sind. Wenn die Konfiguration aus irgendwelchen Gründen futsch geht, sind Gleistypen weg und werden mit Dummys ersetzt oder Parameter ändern sich, was in manchen Fällen problematisch sein kann: Wenn sich bei verbauten Straßentypen die Breite ändert kann man sie nicht mehr abreißen. Das erfordert also einige Checks. Aber das weißt du bestimmt bereits...

    Klar, sowas kann klassisch bei Modupdates mit Dateiänderungen auch passieren, aber das ist Moderstellern idR bekannt und es gibt klare Versionen. Der dynamische Weg eröffnet also mehr Individualisierung und Übersichtlichkeit, gleichzeitig sollte die eigene Konfiguration gut gesichert/dokumentiert sein.


    Ich bin gespannt wie das Thema in TPF3 aussieht. Wenn es nicht endlich echte Gleis/Straßenparameter geben wird, werden sich alle Probleme wiederholen...

  • Quote

    Außer lollus höchstens, der macht das mit ein paar Straßen.

    Auf demselben Wege mache ich das auch ;-)

    Quote

    In der neuen dynamischen Ressourcenverwaltung ist "maxSlope" leider nicht mehr vorhanden und kann nicht in der postRunFn gesetzt werden.

    Danke für den Hinweis. Muss ich mal austesten. Falls dem so ist, kann ich das leider nicht implementieren. Edit: Hatte den folgenden Satz nicht gelesen. Wenn es doch da ist, ist es ja kein Problem mehr. Werde es aber dennoch testen.

    Quote

    d.h. dynamsich hinzugefügte Gleise werden nicht beeinflusst (denke da zB an deinen Kurvengeschwindigkeitsanpasser). Das muss man bedenken, aber man will die custom Gleise ja eh selbst konfigurieren.

    Aber es werden immerhin die Originalgleise in der RunFn angepasst, und wenn diese wiederum anschließend dynamisch kopiert werden, werden deren Änderungen mit übernommen, was letztendlich auch zum Ziel führen dürfte. Und wenn es Parameter sind, die in den Klonen selbst geändert bzw. überschrieben werden, ist es ohnehin egal.

    Quote

    Eine lange Liste von Modoptionen? Das könnte halt schnell explodieren.

    Soo lang ist sie nun auch wieder nicht. Zumal bestimmte Parameter wie die Farbe und Form der Schwellen und Schienen nicht ohne riesigen Aufwand beeinflusst werden können, da ich dann Parameter in den mdls ändern müsste, übrigens auch ein Manko des bestehenden Systems. Momentan könnte ich ausschließlich die Transformationsmatrix ändern. Also entfallen diese Features schon mal.


    Bleibt noch das hier übrig; es ist nicht viel mehr als bei den Jokerstraßen, wo ich es zudem noch zehnmal ausgeben muss:


    Quote

    Wenn die Konfiguration aus irgendwelchen Gründen futsch geht, sind Gleistypen weg und werden mit Dummys ersetzt oder Parameter ändern sich, was in manchen Fällen problematisch sein kann: Wenn sich bei verbauten Straßentypen die Breite ändert kann man sie nicht mehr abreißen. Das erfordert also einige Checks. Aber das weißt du bestimmt bereits...

    Auf die Dummys werde ich hinweisen. Wichtig ist, dass die Settings nicht verlorengehen, und dass eingebaute Klone möglichst gelöscht werden. Ansonsten ist ja wie bei ganz normalen Gleisen: Wenn die Mod fehlt, sind noch Dummys da, bei denen mir bis auf das Zumüllen des Savegames keine schädliche Wirkung bekannt ist, außer natürlich in uralten Spielversionen, worauf ich auch hinweisen werde. Sollten irgendwelche Mods mit diesen Dummys nicht zurechtkommen, liegt das Problem bei diesen Mods - aber letztendlich empfehle ich ja auch, die Dummys zu löschen, solange sie nicht in großen Mengen eingebaut wurden. Habe sogar extra einen Zähler dafür eingebaut. ;-)


    In die Settings sollte nichts manuell eingetragen werden (zuminest nicht, wenn man nicht weiß, was man tut), und für das Sicherungsproblem gibt es den SettingsSaver, der auch unterstützt wird. Separate Settings sind vielleicht ein Nachteil gegenüber dem Jokerstrassen-Konzept, wo die Settings in den Mod-Einstellungen gemacht werden und dann im Savegame verbleiben. Ich könnte mir noch einmal Gedanken machen, ob ich sie via save-load aus der Game-API heraus ins Savegame schreiben könnte.


    Konfigurationen können nicht rückwirkend geändert werden, da stets ein neues Gleis erstellt wird. Ein Vorteil gegenüber den Jokerstraßen! ;-) Klone können übrigens auch nicht nochmals geklont werden, um Chaos und lange Namen zu vermeiden. Und um dreistes Abkupfern zu vermeiden, funktioniert die Mod immer nur über die Originale und kann im Gegensatz zum SettingsSaver auch keine eigenen speicherbaren Gleisdateien erbrüten.


    Ach ja, ein von dir noch gar nicht erwähntes anderes Problem konnte ich auch lösen. :)



    Bei der Gelegenheit ist mir aber noch eine Frage aufgefallen: Im UG-Wiki ist von einer Vergabe von IDs für dynamisch erzeugte Dateien im Repository die Rede. Bei diesen IDs soll es sich wohl nicht um Strings, sondern um Nummern handeln. merkwürdigerweise habe ich sowas noch nie gesehen. Ist jemandem von euch schon einmal so ein Fall begegnet?

    Ich will TpF3 mit Dinos, Zombies und Vulkanen!

    Edited 3 times, last by WernerK ().

  • postRunFn mit dynamischen Gleisen funktioniert genauso wie alle Repository Funktionen via Dateinamen zu ID Mapping.

    Das ID Mapping übernimmt UG intern. Beachtet, es können ID Lücken entstehen... (sprich getAll ist nicht mit ipairs zu nutzen)


    repository.add(fileName, resource, visible)


    Wichtig ist, bei fileName etwas eindeutiges zu vergeben. Dieser sollte trotzdem, wie ein echter Dateiname keine obskuren Zeichen beinhalten...

    Sollte ein Dateiname schon vergeben sein, wird TPF2 crashen, mit einem "duplicate Name" error. Typisch wird einem der Dateinamen natürlich nicht gesagt... :rolleyes:


    Also repository.find nutzen, ist das Teil schon da?


    Intern hat jedes repo eine m_name2index. Die eigentlichen Einträge werden in der Regel intern mit ids angesprochen und liegen auch in einem std::vector.

    Alternativ via (file)Name zum Beispiel wenn die Daten von einer Konstruktion kommen. Irgendwann wird aber trotzdem dann gemappt.



    Randnotizen:


    Die postRunFn Id kann sich auch von der im schlussendlich im Spiel befindlichen id unterscheiden.


    Alle Texturen müssen für Straßen vorgeladen werden.

    Das war früher anders und UG hat dieses dynamisch gemacht. Nachteil war, hat mein eine kaputte Straße gebaut, gab es dann einen Crash...


    Bei Brücken errechnet beim Bau wohl für jeden möglichen Brückentyp die Kollisionen. Daher bitte keine X Brücken hinzufügen....


    Mit CommonAPI2 erhält man ggf. mehr Informationen (Teile die UG nicht gemappt haben, bzw. bald auch extra Daten der CommonAPI2 für Straßen zumindest.)

  • Was mich etwas irritiert hat: Im UG-Wiki befindet sich ein Musterskript für die Erzeugung dynamischer Bahnhofsmodule aus dynamisch erzeugten Gleisen. Hier ein Codeschnippsel:

    Code
    if trackName ~= "standard.lua" and trackName ~= "high_speed.lua" then
        for __, catenary in pairs({false, true}) do
        mod.fileName = "trainstation_" .. tostring(trackName) .. (catenary and "catenary" or "")

    Was macht tostring dort? Daraus schließe ich, dass der Gleisname auch mal eine Zahl sein könnte, sonst bräuchte man das ja nicht. (Wobei man es nach den Lua-Regeln selbst dann nicht unbedingt brauchen würde. ;-) )

    Ich will TpF3 mit Dinos, Zombies und Vulkanen!

  • Eigentlich nö, aber du kannst natürlich auch 123 als fileName nehmen, das wäre aber für Lua auch egal, schauen wir mal:

    Code
    >> commonapi.dmp(api.res.trackTypeRep.getAll())
    {
    [0] = "eis_os_1000mm.lua",
    [1] = "eis_os_1000mm_5_5m.lua",
    [2] = "eis_os_750mm.lua",
    [3] = "high_speed.lua",
    [4] = "standard.lua",
    <metatable> = <__name: sol.std::map<int, std::__cxx11::basic_string<char> >>
    }

    Das ist eine c++ std::map<int, std::::string> (Schlüssel können nur int annehmen, die Werte sind immer ein std::string, und daraus wird halt ein lua string)

  • VacuumTube: Ich habe die Sache mit den Modifiern in RunFn noch einmal überprüft. Ich hatte zunächst selber ein wenig Sorge, dass es hier Probleme geben könnte. Aber es besteht kein Grund zur Panik: Die Modifier verändern zwar nicht die Klone, die zu diesem Zeitpunkt noch gar nicht existieren, aber die Klone kopieren wiederum in postRunFn die normalen Gleise und deren modifizierte Parameter, wie ich schon schrieb. Dadurch, dass die Klone bei jedem Spielstart neu generiert werden, werden die Daten aus runFn auch ständig in den Klonen aktualisiert.


    Sollten die Klone eigene Werte setzen, haben diese natürlich Vorrang, was auch Sinn macht.


    Fremde modifizierende Mods in postRunFn wären sogar das größere Problem. Zu diesen Mods gehört z.B. mein eigener Menü-Manager, wo dann die Ladereihenfolge ein Rolle spielt. Größtenteils kann ich aber zumindest hier diese Probleme durch ein Workaround abfangen.

    Ich will TpF3 mit Dinos, Zombies und Vulkanen!

BlueBrixx