Aktueller Entwicklungsstand für CTR-Schienen

Markus Lomberg
Nach der Entschlüsselung der Bahn-OVLs vor etwa einem Monat ist nun auch der zweite von drei Schritten erfolgt; die Strukturanalyse der Schienen-OVLs ist größtenteils abgeschlossen. Nur Schienen mit Sonderfunktionen (z.B. Bremsen, Tilt, Wagenrotation) sind noch unbekannt.

Somit ist es mir nun möglich, beliebige Graphiken und Verläufe (TrackSplines) für CTR-Schienenteile zu verwenden. Das Ganze geht allerdings bisher nur "per Hand", d.h. sehr aufwändig, mithilfe eines Hexeditors. Eine automatische Verarbeitung von 3D-Daten aus Blender/Sketchup wäre wünschenswert. Um zu verstehen, wo das Problem liegt, muss ich kurz erklären, wie die Schienenteile aufgebaut sind:

Prinzipiell handelt es sich bei Schienenteilen um 3D-Graphikdaten, z.B. wie bereits von CSOs bekannt. Anders als bei CSOs sind darüberhinaus in den Schienen-OVLs noch sogenannte TrackSplines vorhanden, die festlegen, wo die Wagen entlangfahren (das wird von RCT3 nicht über die Graphik der Schiene gesteuert!). Zudem kommen noch einige Extra-Schienendaten hinzu, die es bei CSOs nicht gibt.

Damit gibt es zwei Möglichkeiten, selbsterstellte Schienengraphiken aus Blender/Sketchup in RCT3 reinzukriegen:
1.) Man benutzt wie üblich den Importer, um die komplizierte Umwandlung von ASE-Graphikdaten in CSO-Daten durchzuführen. Danach müsste mein Tool CTR_Creator diese CSOs und die oben erwähnten, zusätzlichen Daten einlesen, um die Schienen-OVLs zu generieren.
2.) Wenn CTR_Creator ähnliche Routinen wie der Importer hinzubekommen würde, könnte man in einem Schritt mittels CTR_Creator alle Eingangsdaten (ASE-Graphiken, TrackSplines und Zusatzinfos) einlesen, diese verarbeiten und Schienen-OVLs erstellen.

Gegen Möglichkeit 1 spricht die Tatsache, dass der Importer CSOs schreibt, die zwar funktionieren, aber eine andere Struktur als normale Szenerie-OVLs besitzen. Deshalb müsste ich nicht nur die Bahn-, Schienen- und Wagen-Strukturen analysieren, sondern auch noch die Struktur von CSOs herausfinden. Das ist eine Arbeit, zu der ich ehrlich gesagt, keine Lust habe. (Warum gibt der Importer nicht Szenerie-OVL-konforme Strukturen aus? )

Gegen Möglichkeit 2 ist einzuwenden, dass es sehr arbeits- und zeitaufwändig wäre, alle wichtigen Routinen des Importers nochmals in CTR_Creator nachzuprogrammieren. Ausserdem möchte ich nicht JonWil und Belgabor ihrer genialen Meisterleistung berauben, indem ich einfach ihren Importer-SourceCode kopiere (auch wenn kein Copyright drauf ist)! :Respekt:

Hat jemand einen weiteren Lösungansatz oder zumindest eine Idee, wie man das Problem mittels einer der beiden oben beschriebenen Möglichkeiten relativ einfach lösen kann?

PS: Bei CTR-Wagen wird das Problem sogar noch größer, da Wagen haufenweise BoneAnimations verwenden.
Daxter
Ich hätte vielleicht eine Idee, die der Methode von Objektanimationen und deren Weg in Sims 2 sehr nahe kommt. Aber dafür musst du noch ein bischen besser beschreiben, wie man sich so ein Trackspline vorstellen muss.

Ich denke mal, dass es verschiedene Punkte mit Koordinaten gibt, die duch gerade Wege verbunden werden und der Wagen so an seinem Origin daran geführt wird.

Oder verstehe ich das so falsch ?

MfG Daxter
Belgabor
Markus, die Splines stehen doch im TrackXY...ovl, die einzelnen ovls der Teile sind, zumindest bei den Stichproben die ich gerade gemacht habe, "normale" CS Objekte.
Eine Möglichkeit, Splines aus Blender Bezier-Kurven zu machen ist in Arbeit.

quote:
Original von Daxter
Ich denke mal, dass es verschiedene Punkte mit Koordinaten gibt, die duch gerade Wege verbunden werden und der Wagen so an seinem Origin daran geführt wird.

Oder verstehe ich das so falsch ?


Jein. Splines in RCT3 sind "echte" Kurven (genau gesagt kubische Bèzierkurven). Sie haben keine 3D-Orientierung (dh man kann kein "oben" definieren), deswegen benutzen Tracks zwei, eine die sozusagen die linken Räder führt und eine die die rechten Räder führt. "sozusagen" weil ich glaube, dass intern aus den zwei Kurven eine mit 3D-Orientierung errechnet wird, auf der dann wie Du sagst der Origin entlanggeführt wird. Möglicherweise hilft die Dualität auch bei den Physikberechnungen, obwohl das reine Spekulation ist.
Murchel
Hört sich aber gut an.
fechu
Vielleicht könntest du ja in zusammenarbeit mit Belgabor und Jonwil einen Importer entwickeln, der gerade alles auf einmal kann. Also Schienen, Wagen und einfach Objekte importieren. Ich weiss natürlich nicht wie der Aufwand ist, denn ich habe selber keine Ahnung in sachen Programieren.

Veilleicht ist die Zeit auch einfach noch nicht reif für das, was ich natürlich noch nicht hoffe.

Gruss fechu
Daxter
@Belgabor: Danke für die kurze Erklärung, aber so kann man die Methode von den Sims 2 Animationen leider nicht anwenden.

Aber weiterhin viel Glück mit den Arbeiten an der Entschlüsselung und dem Importer dafür.

MfG Daxter
BlackMambaFan
Wo werden überhaupt die Objekte "Schienenteile" gespeichert?
Hab die schonmal gesucht, aber noch nie gefunden .
Markus Lomberg
Die Schienenteile befinden sich im Ordner "..\RollerCoaster Tycoon 3\tracks\coasters\Track*" (für die Achterbahnen) bzw. im Ordner "..\RollerCoaster Tycoon 3\tracks\TrackedRides\TrackBased*" (für die übrigen Bahnen mit konstanter Geschwindigkeit).
errt
Ich würde die entsprechenden Teile des Importers verwenden. Der Code ist schließlich offen, um weiterentwickelt und für neue Möglichkeiten weiterverwendet zu werden. Dass dieser Teil aus dem Importer übernommen ist, kannst du ja erwähnen und dich dafür bei Jonwil & Co. bedanken.
BlackMambaFan
Sag Jonwil doch einfach bescheid, dann wird er dir schon sagen, ob er will, dass er weiterverbessert werden soll oder nicht .
Markus Lomberg
quote:
Original von fechu
Vielleicht könntest du ja in zusammenarbeit mit Belgabor und Jonwil einen Importer entwickeln, der gerade alles auf einmal kann. Also Schienen, Wagen und einfach Objekte importieren.

Ja, eine Kombination aus Importer und CTR_Creator ist genau das, was am Ende angestrebt wird. Mit Belgabor, dem momentanigen Hauptentwickler des Importers, stehe ich auch in engem Mailkontakt.

Ein derartiges Kombinations-Tool braucht aber eine lange Entwicklungszeit. Und solange wollen wir ja nicht warten, um eigene Schienen zu erstellen. Es ist daher eine Zwischenlösung erforderlich, weshalb ich die obigen Möglichkeiten erwähnte.

quote:
Original von errt
Ich würde die entsprechenden Teile des Importers verwenden. Der Code ist schließlich offen, um weiterentwickelt und für neue Möglichkeiten weiterverwendet zu werden. Dass dieser Teil aus dem Importer übernommen ist, kannst du ja erwähnen und dich dafür bei Jonwil & Co. bedanken.

Klar, das wäre denkbar; aber auch wenn der Importer Code offen ist, so empfinde ich es persönlich als Ideenraub, den ich JonWil und Belgabor nicht antuen möchte. Und selbst wenn ich deren Okay kriegen würde, verbleibt immer noch das Problem, dass ich den Importer Code kaum verstehe (zumindest momentan). Folglich wäre viel Zeit und Arbeit zu investieren. Wie gut kennst du dich denn mit dem Importer Code aus, errt?
errt
Ich? Kein bisschen. Das ist C++. Und ich hasse C^^ Allerdings gibt es doch relativ fertige dlls, die diese Sachen übernehmen im Importer, oder? Ich hatte mich mal durch die einzellnen Dateien etwas durchgeschaut, allerdings nur oberflächlich.
Belgabor
Der code steht unter der GPL, d.H. solange Du Deinen Code offensegst, kannst Du damit machen, was Du willst. (Ich hab da auch nichts dagegen ). An DLLs gibt es nur jonwils alte libOVL.dll, und die ist genau das was die nicht-konformen OVLs erzeugt. Meine eigene OVL-Bibliothek ist rein für statisches linken ausgerichtet, sollte sich aber mit Borland C++ compilieren und linken lassen.
Markus Lomberg
quote:
... solange Du Deinen Code offensegst, kannst Du damit machen, was Du willst.

Wie ich schonmal per PM erwähnte, werde ich den Code von CTR_Creator nicht offenlegen (sonst lacht die ganze Welt über meinen miserablen Programmierstil ). Anders sieht es da mit den OVL-Strukturen aus; die kann ich gerne veröffentlichen, sobald ich mit meiner Arbeit fertig bin -- allerdings werden weltweit höchstens ein Dutzend RCT3-User die Strukturen verstehen (JonWil, Belgabor, Vodhin, TheCook...)

quote:
Meine eigene OVL-Bibliothek ist rein für statisches linken ausgerichtet, sollte sich aber mit Borland C++ compilieren und linken lassen.

Um an deine OVL-Bibliothek zu kommen, benötige ich aber doch "Tortoise", was ich nicht wirklich verstehe. Und selbst wenn ich diese erste Hürde geschafft habe, dann bestehen immer noch die Probleme mit Compilieren, Linken und C++-Befehlen (ich bin da eher so wie errt).

Klingt zwar komisch, aber ich bin alles andere als ein Informatik-/PC-Überflieger. Manchmal frag ich mich schon, warum ausgerechnet ich, die Bahn-OVLs entschlüsseln und CTRs schreiben kann.
errt
Dass du den Code nicht offenlegen willst, verhindert natürlich das Verwenden dieser Daten. Aber ich glaube, für seinen Programmierstil muss man sich nicht wirklich schämen. Belgabor ärgert sich ja auch immer über Jonwils Stil. Und wer würde über Jonwil lachen? Übrigens hoff ich mal für dich, dass das kein Aprilscherz ist^^
Markus Lomberg
Nein, es ist kein Aprilscherz. Ich weiß, ich hätte mir besser einen anderen Tag zum Posten des Entwicklungsstandes aussuchen sollen (im Nachhinein ist man immer schlauer).

PS: JonWils Programmierstil ist im Vergleich zu meinem wirklich gut gelungen und sehr elegant. Wenn du es nicht glaubst, wie schlecht mein Stil ist, soll ich dir mal eine Kostprobe per PM schicken?
BlackMambaFan
Ich würde mal sagen, keiner sollte sich über irgendwelche Programmierstile aufregen, es ist doch egal, wie es geschrieben wird, hauptsache es funktioniert nachher.

Ich selber verstehe kein Wort C, ich wüsste auch nicht, wofür ich es lernen sollte.
Belgabor
quote:
Original von Markus Lomberg
PS: JonWils Programmierstil ist im Vergleich zu meinem wirklich gut gelungen und sehr elegant.


Das kann ich mir ehrlich gesagt nicht vorstellen...
LP10
Markus du brauchst nicht bescheiden zu sein^^

Das was du da machst ist GEIL!
BlackMambaFan
quote:
Original von LP10
Markus du brauchst nicht bescheiden zu sein^^

Das was du da machst ist GEIL!


signed.

Was ich mich frage: Was meint ihr mit programmierstilen??
Da kann ich mir ehrlichgesagt nichts drunter vorstellen...