Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

  • Playm

    RPG Studio Webmaster

    Sie müssen sich registrieren, um eine Verbindung mit diesem Benutzer herzustellen.

317

Mit Qt ganz schnell das RTP des Makers laden

Bewertung:

Von Playm, Sonntag, 15. Oktober 2017, 18:25

In meinem letzten Blogartikel habe ich darüber geschrieben, wie man ein RPGXP-Projekt mit seiner eigenen Anwendung öffnen kann. Darunter hat dann Josey kommentiert, dass ich ja jetzt auf die Grafiken des Projekts zugreifen kann. Soweit stimmt das. Ich komme an alle Grafiken im Projektordner. Aber da fehlt ja noch was. RPG Maker Projekte benutzen in aller Regel das Run Time Package (RTP) und an diese Grafiken wollen wir auch dran.

Zwei Aufgaben ergeben sich:
  1. Herausfinden, ob und wenn ja welche RTP das Projekt benutzt
  2. Den Ordner mit dem jeweiligen RTP auf der Festplatte finden


Die Game.ini auslesen
Die Information, welche RTPs (theoretisch kann ein Projektersteller bis zu drei RTPs verwenden) das Projekt einsetzt stehen in der Game.ini im Projektordner. Eins noch vorweg: Wir gehen fest davon aus, dass eine Game.ini existiert. Dass keine Datei mit diesem Namen im Projektordner liegt berücksichtigen wir nicht.

Eine typische Game.ini hat den folgenden Inhalt

Zitat von »Game.ini«

[Game]
Library=RGSS104E.dll
Scripts=Data\Scripts.rxdata
Title=Project Defender
RTP1=Standard
RTP2=
RTP3=


Kurzer Ausflug in die Welt der ini-Dateien. Eine Datei ist in einen oder mehrere Abschnitte aufgeteilt. Unsere ini-Datei hat nur einen Abschnitt namens "Game". In dem Abschnitt liegen mehrere Schlüssel-Wert-Paare. Links vom Gleichheitszeichen steht der Schlüssel. Rechts davon der Wert. Wir sehen das RTP2 und RTP3 leer sind und keine Werte haben. Das bedeutet, dass kein zweites und kein drittes RTP verwendet wird. Es wird nur ein RTP verwendet, nämlich das namens "Standard".

Der geübte Scripter hat sich sicher schon clevere Möglichkeiten in reinem Ruby überlegt, wie man jetzt diese Werte ausliest. Aber wir verwenden dafür eine Bibliothek und machen das nicht von Hand. In meinem Projekt setze ich bereits Qt ein und zufälligerweise stellt die Qt-Bibliothek bereits Funktionen bereit um Werte aus ini-Dateien auszulesen. Naja, wenn wir es eh schon drin haben, dann benutzen wir diese Funktionen natürlich auch.

Mit Qt::Settings eine ini-Datei auslesen
Die Klasse Qt::Settings ist dafür da, um Einstellungen die der User für eine Qt-Anwendung getätigt hat zu speichern, damit diese beim erneuten Programmstart wieder zur Verfügung stehen. Zu diesem Zweck kann es zufälligerweise ini-Dateien lesen und schreiben. Genau das was wir brauchen.

Schauen wir uns mal ein Codebeispiel an. Wir nehmen an, dass sich im aktuellen Ordner eine Game.ini-Datei befindet.

Ruby Quellcode

1
2
3
4
5
6
7
8
require 'Qt'
qt_ini_file = Qt::Settings.new( './Game.ini',
                                Qt::Settings::IniFormat)
rtp1 = qt_ini_file.value('Game/RTP1').toString
rtp2 = qt_ini_file.value('Game/RTP2').toString
rtp3 = qt_ini_file.value('Game/RTP3').toString
 
p( rtp1, rtp2, rtp3 )

Da der Computer nicht weiß, was für einen Datentyp wir erwarten - zum Beispiel, ob wir einen Text oder eine Zahl erwarten - müssen wir den abgefragten Wert explizit mit .toString in den gewünschten Datentyp umwandeln. In unserem Fall, möchten wir Text haben und keine Zahl.

Das war gar nicht so schwer, wenn man seine Werkzeuge kennt. Jetzt haben wir die bis zu drei RTPs, die verwendet werden. Jetzt kümmern wir uns darum, die Ordner mit den RTP-Ressourcen zu finden.

Die Registry auslesen
Wenn man sich ein RTP installiert, wird dieses bei Windows registriert. Das ist garnicht kompliziert. Man sagt Windows "Hey, wenn dich jemand nach dem RTP des RPG Makers fragt, sag demjenigen bitte diesen und jenen Dateipfad." Und Windows sagt: "Okay."

Für die Hacker unter euch, die jetzt den genauen Registrierungs-Schlüssel für das RTP haben wollen, der lautet:

Quellcode

1
HKEY_LOCAL_MACHINE\SOFTWARE\Enterbrain\RGSS\RTP


Ein RPG Maker Spiel kann jetzt also hingehen und sagen - oh, ich verwende das RTP namens "Standard" und Windows kann antworten: "Ja, das hat der Benutzer an Ort XY installiert."

Das macht unsere Anwendung jetzt auch. Wir lesen aus der Windowsregistry einen Wert aus. Dafür gibt es verschiedene Möglichkeiten, wir verwenden wieder Qt. Die Klasse Qt::Settings kann nämlich nicht nur ini-Dateien lesen sondern auch die Windowsregistry. Praktisch.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
require 'Qt'
#--------------------------------------------------------
# * Get Path to RTP from Registry
#--------------------------------------------------------
def get_rpgxp_rtp_path( rtp_name )
  common_key = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Enterbrain"
  rpgxp_subpath = "\\RGSS\\RTP"
  reg = Qt::Settings.new( common_key + rpgxp_subpath,
                          Qt::Settings::NativeFormat )
  return reg.value( rtp_name ).toString
end
#--------------------------------------------------------
#  Main
#--------------------------------------------------------
path = get_rpgxp_rtp_path( "Standard" )
print( path )


Man erkennt in Zeile 8 und 9 das bekannte Qt::Setting wieder. Diesmal wird aber keine ini-Datei, sondern das "native" Format verwendet. Native heißt in diesem Context, dass wir die Windowsregistry meinen. Das Programm gibt bei mir "C:\Programme\Gemeinsame Dateien\Enterbrain\RGSS\Standard" aus. Bei euch würde es den Pfad ausgeben, den ihr damals beim Installieren des RTPs angegen habt.

Und damit haben wir beide Aufgaben gelöst. Wir können jetzt die Lösungen zusammenführen und schon kann unsere Qt-Anwendung auch das in der Game.ini des Projekts spezifizierte RTP laden. Wir können jetzt also theoretisch eine Charset-Auswahl in "RPG Micky" einbauen. Spannend!

Dieser Artikel wurde bereits 22 mal gelesen.


Kommentare (1)

  • 1

    Von Josey (Montag, 23. Oktober 2017, 23:58)

    Ich wusste tatsächlich gar nicht, dass man mehrere RTPs verwenden kann : D
    Was hat das überhaupt für Vorteile? Ist doch besser ein Game RTP-Unabhängig zu machen, damit es einfach anlaufen kann, wenn jemand zocken will.

    Das Ding findet jetzt also automatisch den Ort, an dem bei mir auf dem PC das RTP gespeichert ist, richtig?

Blog Navigation

Nächster Artikel

Playm träumt: Konfigurierbare Menüs

Von Playm (Sonntag, 22. Oktober 2017, 07:00)

Vorheriger Artikel

Eine App schreiben, die RPG Maker Projekte öffnen kann

Von Playm (Sonntag, 8. Oktober 2017, 17:10)