Jaja, seit Monaten sitz ich an einem Projekt in NoLimits2 ran. Wie ich dabei vorgegangen bin bzw. vorgehe und was alles an Vorbereitung zwischen den Arbeitsschritten stattfand halte ich hier fest.
Voab: Es gibt viel Text, Beschreibungen zu mathematisch/physikalischen Berechnungen und vielleicht auch etwas Fachwissen im Bezug auf die Steuerungstechnik der Attraktion. Letztere nur in dem Umfang was man selber realistisch als Außenstehender durch Beobachtungen und ggf. Nachfragen oder YT-Videos herausfinden kann. Es könnte sein, dass am Ende viele Funktionen wie beim Original vorhanden, aber einige auch fehlen können!
Bevor es mit dem eigentlichen Thema losgeht erstmal kurz ein paar Worte wie ich auf die Idee kam:
Vor langer Zeit, oder eher gesagt zum Start der Freizeitpark-Sommersaison 2021, habe ich mir als Ziel gesetzt irgendeine Attraktion aus einem Freizeitpark in irgendeinem Simulatorspiel wie PlanetCoaster oder NL2 nachzubauen.
Der Nachbau soll aber nicht nur optisch existieren, sondern auch funktional, heißt für mich dass alle Funktionen, welche in echt von einem Bediener kontrolliert werden können, auch vom Spieler gesteuert werden sollen. Damit hatte ich mich schonmal für NL2 zum bauen entschieden, das das Spiel/Programm auch eine eigene API zum Programmieren bereitstellt. Und mit etwas KnowHow wäre auch die Steuerung einer Attraktion je nach Fleiß nahezu realitätsnah realisierbar.
Als nächstes war die Frage welche Attraktion aus welchem Park sollte ich nachbauen? Hier musste die Wahl auf eine Attraktion fallen, welche steuerungstechnisch nicht so viele Funktionen hat womit man mehrere Facharbeiten füllen könnte. Gleichzeitig sollte die auch nicht so krass von der Thematik und der Technik sein, da alles separat in Blender oder einem ähnlichem Programm noch 3D-Modelliert werden muss... Lange nachdenken musste ich nicht, und schon konnte ich auf jeden Fall alle Achterbahnen ausschließen und mich auf einem Flatride festsetzen.. Und dann dachte ich mir bau ich mal meinen Lieblings-Flatride seit 2020 nach. Und damit beging der Nachbau der Thunderbirds.
Bevor es aber mit den ersten Programmierschritten in NL2 losgehen konnte, musste zuerst ein erstes grobes Modell her. Und da ich mit 3D-Modellieren keine Erfahrung hate, hieß es erstmal Tutorials durchschauen
Und dann ging es zuerst mit dem groben Karussell-Aufbau los...
Bewaffnet mit einigen Bildern der Attraktion und dem groben Datenblatt auf der Homepage von Zamperla zum Airrace 8.2 fing ich erstmal mit der Bodenplatte und dem Fundament, worauf alles steht an:
als nächstes kam dann ein grober Aufbau des Karussell's in der Mitte dazu:
...die 8 "Gondel-Arme"...
und zum Schluss auch die Gondeln:
Die Höhen/Größen der Teile sind nahe der Realität, aber nur geschätzte und keine exakten Abmessungen, da ich selbstverständlich keine Baupläne habe
Bei Gondel 1, welche als erste sich auch in Bewegung setzt nachdem das Karussel. etwas in Bewegung kommt, habe ich mir auch eine kleine Markierung gemacht in Form von 2 Quadern:
Links der längliche Quader geht auch in die Bodenplatte rein und ist auf dem Standpunkt verankert, während der rechte Quader an Gondel 1 festsitzt und sich auch mit der Gondel bewegt,
Diese Markierung existiert natürlich nicht in echt, aber die Erfüllt für mich während des Programmiervorgangs eine wichtige Funktion: und zwar die optische Ermittlung und Prüfung des Nullpunktes bzw. des Referenzpunktes vom Karussell, da es bei jeder Fahrt im Idealfall dort anhält, wo es auch startet...
Jetzt hatte ich dann schonmal ein grobes Modell, mit welchem ich anfangen konnte in NL2 zu programmieren.
Bitte beiden seltsamen Würfeln an den Gondeln nicht wundern. Diese werden beim Exportieren unsichtbar gemacht und dienen in NL2 als Onride-Ansicht, weil man soll auch auf allen 16 Plätzen mitfahren können
Eines will ich an der Stelle vorab sagen, und zwar habe ich in der Zeit parallel zum programmieren versucht auch erste thematische Aspekte im 3D-Modell zu ergänzen, aber bei meinem Wahn zum Perfektionismus ist es so verdammt viel Arbeit, dass ich mich entschieden habe mich erstmal auf das Programmieren der Attraktion zu fokussieren, und mir für das 3D-Modellieren eventuell Hilfe zu besorgen (für alles was bisher oben gezeigt wurde saß ich insgesamt 6 Std daran... und wenn es an Details rangehen soll, dann will ich mir nicht vorstellen wie viele Stunden es für mich werden.
Deshalb such ich mir für's 3D-Modellieren etwas Hilfe, bis dahin müssen wir uns mit dem monochrom grauen groben Modell begnügen)
Sollte jemand durch Zufall gute Kenntnisse mit Blender haben oder vielleicht auch Lust haben, beim Projekt mitzuwirken, kann er/sie/es sich gerne bei mir melden
Egal, genug der Sorgen, jetzt geht es ans spannende, dem programmieren/skripten der Anlage.
Wobei ich zeige euch nochmal kurz wie das Modell etwas abgewandelt in NL2 aussieht..
Hier nummeriere ich euch die Gondeln zur Orientierung und auch die grobe Umgebung was irgendwann noch wohin folgen wird:
Nun, wie geht man am Effektivsten vor, bei einem Fahrgeschäft mit 6 verschiedenen Fahrtstärken und 4 potentiell-verschiedenen Fahrtzeiten?
Ganz einfach: zuerst ignoriert man die Anzahl von beiden Aspekten und versucht sich mit nur 1 Fahrtzeit und 1 mittleren Fahrtstärke; der Rest ist am Ende dann leicht ergänzbar.
In dem Fall habe ich mich für Fahrtzeit 90 Sekunden entschieden (zuzüglich Startzeit, Auspendelzeit und Referenzpunkt-Suche praktisch +-140-150 Sekunden.
Zuerst wurde ein grober Plan gemacht, was programmiert man zuerst und was folgt nach etlichen Testdurchläufen..
Ich habe mich entschieden, zuerst NUR das Drehen des Karussells ohne die Arme zu programmieren und zu testen, und danach gleiches mit den Gondelarmen.
Und wieder hieß es vor dem Start des Karussels viel Recherche und Notitzen.
Ich habe angefangen bei Onrides die Dauer einer einzelnen Runde des Karussells immer zu stoppen. Damit und mit dem Radius der Anlage aus dem Datenblatt, wurden Beschleunigungen und Geschwindigkeiten berechnet.. Die vollständigen Rechenwege hier festzuhalten würde den Rahmen und die Laune beim Lesen sprengen, von daher hier kurz nur meine theoretischen Werte:
- Das Karussell beschleunigt 15s lang mit ca. 0,045283 rad/s²
- Im Normalbetrieb fährt es mit einer durchschnittlichen Geschwindigkeit von ca. 0,679263 rad/s (oder einer 360° Runde in 9,25 Sekunden)
- Es bremst 5 Sekunden vor Ende der eingestellten Fahrtzeit mit der gleichen Beschleunigungskraft auf ca. 1/3 der Geschwindigkeit zum Auspendeln der Gondeln (das Auspendeln der Gondeln ist unabhängig von der Karussell-Geschwindigkeit!
- Die letzte 1/4 Runde bis zum Referenzpunkt bremst das Karussell nochmal etappenweise ab je näher es sich dem Referenzpunkt nähert, bis es die letzten Zentimeter in sehr langsam rantastet.
- Beim Referenzpunkt werden dann Geschwindigkeit und Beschleunigung auf 0 gestellt und es bleibt stehen.
Die ersten Tests liefen automatisch mit Simulationsstart, heißt mit Start der Simulation 10 Sekunden Idle - Start und Fahrprogramm - 10 Sekunden Idle - erneut Start...
Nachdem das Karussell-Verhalten grob programmiert war, hatte ich mich entschlossen die Musik einzufügen, da ich beim Testen mehr Lust hatte mich an der Musik etwas zu orientieren statt an Sekundenwerten, wobei ich letzteres nicht außer Acht lassen könnte.
Jetzt ging es an die Gondeln ran:
Anfangs hatte ich noch mit Zeitwerten experimentiert, aber da verlor ich viel zu oft die Orientierung und es gab genug Fehler, seien es unkontrollierte, endlose Beschleunigungen oder dass die Gondeln kopfüber bzw. schräg im stumpfen Winkel standen...
Also habe ich mir Gedanken gemacht, welche "Zustände" können die Gondeln haben? Diese dann notiert, die Randbedingungen für jeden Zustand festgehalten und eingefügt bzw. ersetzt..
Bisher kam ich auf 7 verschieden Zustände, hier mal aufgezählt und kurz beschrieben:
- Zustand 0 (ja, beim programmieren startet das Zählen bei 0): Nullpunkt; Senkrechter Referenzpunkt der Gondel
- Zustand 1: 1. Umschwung
- Zustand 2: Normaldrehen gegen Uhrzeigersinn
- Zustand 3: Wechsel gegen->im Uhrzeigersinn
- Zustand 4: Normaldrehen im Uhrzeigersinn
- Zustand 5: Wechsel im->gegen Uhrzeigersinn
- Zustand 6: Bremsen/Auspendeln
Alle Zustände werden im Idealfall in Reihe angesteuert, außer während der Fahrtzeit, da sollten nur die Zustände 2-5 aktiv sein bzw. wiederholt werden bis Ende der Fahrtzeit oder Fahrtabbruch.
Mit den Zuständen funktioniert jetzt auch die Bewegung der Gondeln. Was bei den beiden "Wechseln" und beim 1. Umschwung gemacht wird, ist mit einem Zufallsgenerator eine bestimmte Anzahl an Drehungen individuell für jede einzelne Gondel definiert. Erst wenn die Anzahl erreicht ist, geht es in den nächsten Wechsel.
Zum Ende kam dann auch eine Starttaste ins Programm dazu, dass man jederzeit selber die Fahrt starten/stoppen kann. Beim Stoppen der Fahrt bremst das Karussell wie oben beschrieben ab und sucht den Referenzpunkt und erst wenn es steht kann wieder gestartet werden. Hierbei ist auch eine gewisse Auspendelzeit für die Gondeln mit einberechnet, damit es nicht direkt zum Stillstand kommt, heißt im schlimmsten Fall dreht man eine Ehrenrunde..
Soweit der aktuelle Stand meines Nachbaus. Ich bitte vielmals um Verzeihung sollte ich jemanden mit den vielen Fachwerten gelangweilt haben.
Wobei ein Offride und Onride hätte ich da noch. Hierbei kann man vor allem beim Onride am Ende das stufenweise Abbremsen zum Referenzpunkt hin erkennen... hierbei aktiviere ich auch die Ausgabe von Beschleunigungen, Geschwindigkeiten, Zuständen, Anzahl der Rotationen bis zum Wechsel usw.. ganz zum Ärger der Performance.. also nicht wundern wenn es mit knapp unter 30FPS etwas stockend aussieht, ohne die Ausgabe wären es eher um die 500 FPS
Die bereits existierenden Einstellungen, Werte und Funktionen sind nicht festgelegt und noch in der Anpassung bzw. Verfeinerung.
Es folgen definitiv noch mehr als genug Sachen, unter anderem auch das Steuerpult wie im original welches auch nahezu alle Funktionen haben wird, womit man am Ende auch Fahrtzeit und Fahrtstärke bestimmen kann und sogar eingebaute Fehler quittieren kann. Auch Szenarien wie Notabschaltung oder vllt ein Testbetrieb werden dann vorhanden sein
Bei Fragen, Wünschen und Anregungen steh ich jederzeit zur Verfügung
Gleiches auch wenn jemand mit Programmierkenntnissen in Java oder C den Programmcode mal neugierigerweise durchgehen will. Bin bei sowas eigentlich recht transparent.
Fortsetzung folgt...