Hallo, alle miteinander.
Nach langer Zeit habe ich mich mal wieder dazu aufgerafft, einen Beitrag hier im Forum zu erstellen. Da habe ich direkt auch etwas Nettes vorbereitet.
Wie ich zu Godot gekommen bin?
Durch mein Studium sollte ich in einer Gruppe ein Lernspiel erstellen. Dies sollten wir mit der Game Engine Godot machen. Schnell merkte ich, dass ich diese Engine sehr mag und ich zumindest sehr intuitiv finde. Vor allem mag ich die Skriptsprache GDScript, die einem etwas mehr Sicherheit bietet als JavaScript. Da bin ich zu dem Entschluss gekommen, mit Godot mehr zu entwickeln. Da ich aber viele Umsetzungen des RPG Makers sehr gut finde, vor allem aber das Event-System auf der Map und so weiter, wollte ich einige Mechaniken des Makers in die Godot-Engine übertragen. Ich will also eine gewisse Programm-Architektur entwickeln, die es mir erlaubt, relativ einfach ein RPG nach meinen Vorstellungen zu erstellen.
Wer weiß, vielleicht gibt es ja ein paar Interessenten, die meinen Prozess hier ebenfalls anschauen wollen oder vielleicht selbst Inspiration erhalten, etwas in Godot umzusetzen.
Was will ich hier dann eigentlich präsentieren?
Ich will über die Zeit hinweg einige Ansätze vorstellen, die ich angedacht habe, um die Entwicklung eines RPG's in Godot zu ermöglichen. Ich habe natürlich viel vor mir, aber das bin ich gewohnt.
Teil 1: Der Aufbau und Wechsel von Szenen durch Module
Damit man überhaupt etwas sieht, braucht man in Godot ja nicht viel. Man legt eine Szene an und startet das Spiel...Ach wenn es so einfach wäre, würde ich hier nicht schreiben. Es gibt da nämlich ein Problem: Wie kommt von einer Szene zu nächsten? Darüber hatte ich mir Gedanken gemacht. Im RPG-Maker werden ja Szenen auf einen Szenenstack gelegt, um auch so etwas wie Menüs oder Untermenüs zu erstellen. Dieser Ansatz ist sehr nett, doch ich wollte etwas anderes probieren. Ich wollte nämlich die Baumstruktur nutzen, die einen Godot mit dem Szenenbaum bietet. Dafür habe ich dann das Konzept der Module erarbeitet.
Was ist ein Modul?
Ein Modul ist hierbei eine Art Objekt, welches eine Szene darstellt und den bequemen Wechsel zwischen diesen Szenen erlaubt. Dabei kann ein Modul Kinder-Module haben, die sich ebenfalls abwechseln können. Damit kann man eine gewisse Ordnung aufbauen, die die Organisation des gesamten Spiels helfen kann. Nun werde ich euch am besten den Code mal zeigen.

Da haben wir einen einleitenden Teil. Hierbei erweitert die Module-Klasse die Basisklasse Node. Weiterhin wird der Klassenname Module im Projekt global sichtbar gemacht, um Untertypen dieser Klasse entwickeln zu können. Am Ende haben wir hier eine exportierte Variable, in der die Kind-Module eingetragen werden können. Das ermöglicht uns folgende Hilfestellung in der Engine selbst:

Wie ihr sehen könnt, kann man damit Kind-Module mit eigenen Namen versehen und den Pfad angeben, der zu diesem Modul führt. Die kann man dann einfach in seinem Datei-System aufrufen.
Eine wichtige andere Funktion ist dann hierbei noch die Funktion activate_child()

Sie erlaubt es, dass ein Modul das aktive Kind gegen ein anderes tauschen kann. Zunächst wird das neue Kind aktiviert und falls es ein vorheriges aktives Kind gab, so wird es zerstört.
Wie würde so ein Prozess dann aber visuell aussehen.

Ich habe mir diese Struktur überlegt. Hierbei startet Main alles. Hierbei hat Main die Kinder SplashScreen und Window, die es frei verwalten kann. In meinem Fall wird zuerst der SplashScreen aktiviert und dann kommt es zu einem Wechsel zu Window, worin das eigentliche Hauptspiel stattfindet. Hierbei wird der SplashScreen wieder zerstört. Gleich darauf wird das Menu aktiviert, wodurch auch das Menu sichtbar wird. Geht man dann auf New Game, folgt der Wechsel zur World, wo dann Spielinhalt wäre wie Maps usw.





Hier nochmal das Ergebnis. Ist jetzt visuell nicht sehr ansprechend, demonstriert aber sehr gut den Ablauf.
Naja, ich hoffe mal, dass ich meinen Ansatz einigermaßen erklären konnte. Hat echt eine Weile gedauert, sich das Ganze auszudenken. Was sagt ihr dazu? Wünscht ihr euch mehr Teile, wo ich erkläre, wie ich weitere Dinge umsetze, z.B. Aufbau von Charakterprofilen und Battlerprofilen ähnlich der RPG-Maker-Datenbank? Schreibt es gerne hier rein.