PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCF2XML



Ghabry
22.01.2013, 21:13
Nach mehreren Jahren des stillen mitgelesens melde ich mich jetzt auch endlich mal an. ;)

Hallo, ich bin Ghabry, einer der EasyRPG (http://www.multimediaxis.de/threads/130258-easy-rpg-Werden-der-rm2k-und-der-rm2k3-eventuell-bald-ersetzt) Player Entwickler (RPG_RT-Nachbau).
Habe bisher keine RPG Maker-Spiele veröffentlicht und auch nie eins fertiggestellt.

Ich möchte jetzt auch mal ein Tool vorstellen und zwar LCF2XML.
Dieses kann beliebige RPG2k/2k3 Dateien (also LDB, LMU, LMT und LSD) nach XML und zurück konvertieren. XML ist zwar teilweise auch nicht wirklich menschenfreundlich, aber besser als ein Binärformat :). Die XML-Datei kann man mit einem beliebigen Texteditor bearbeiten. Alternativ kann man z.B. auch automatisiert mit einem Programm eine XML-Datei generieren und diese dann in das RPG-Format umwandeln.

Anleitung:
Einfach die umzuwandelnde Datei per Drag&Drop auf die lcf2xml.exe ziehen, das richtige Dateiformat wird per Heuristik ermittelt ;). Die konvertierte Datei erscheint dann im Verzeichnis der Ursprungsdatei (mit der geänderten Dateiendung)
Klappt in beide Richtungen (also Binär->XML und XML->Binär). Ich garantiere aber nicht, dass dies mit allen Dateien fehlerfrei funktioniert *g*

Das Programm simuliert typisches Linuxverhalten: Bei Erfolg wird kein Text ausgegeben und vorhandene Dateien werden ohne Nachfrage überschrieben.

Download (https://easy-rpg.org/jenkins/job/LCF2XML_Windows/lastSuccessfulBuild/artifact/bin/lcf2xml.zip)

Benötigt Windows XP SP2 oder neuer! (das kam vor 9 Jahren aus, also unbedingt mal System updaten wenn ihr das nicht erfüllt ;))

Weitere Infos:
Im Prinzip ist das nur eine billige Konsolenanwendung, die die entsprechenden Funktionen von libreaders (unsere RPG2k-Lib für EasyRPG) aufruft. (siehe Quellcode (https://github.com/Ghabry/LCF2XML/blob/master/src/main.cpp))

Auf der Kommandozeile kann man noch optional ein zweites Argument übergeben, um die Ausgabedatei festzulegen.

Das XML für Spielstände (LSD) enthält viele "unknown"-Blöcke, dies liegt daran, dass wir nicht wissen, welche Bedeutung diese Werte haben (Siehe auch dieses Topic (http://www.multimediaxis.de/threads/135645-EasyRPG-2000-Crowdsourcing-unknown-savegame-data))

Davy Jones
22.01.2013, 21:24
Moin =)

Sag mal, welche Vorteile erhalte ich als Entwickler, wenn ich LDB-, LMU-, LMT- und LSD-Dateien im Texteditor öffnen kann?

Ghabry
22.01.2013, 21:43
Tach,
Also der Hauptgrund für das Programm war eigentlich, dass man Spielstände leichter verändern kann, damit man testen kann, was passiert, wenn man unbekannte Werte verändert (das geht nunmal viel eleganter im Editor als mit dem Hexeditor in dem Binärblob. Könnte man auch ein Programm für schreiben, aber einige können halt nicht programmieren ^^). Und einen Spielstandeditor liefert Enterbrain nicht mit.

Die anderen Formate habe ich nur der Vollständigkeit halber eingebaut. ;) Ich improvisiere mal:
Man könnte z.B. auf einer Karte die Texte von MsgBoxen austauschen, ohne vorher jedes einzelne Event auf der Karte suchen zu müssen...

Oder man kann irgendwelche ungültigen Werte in die Felder eintragen und schauen, wie sich RPG_RT verhält *g*

Oktorok3
22.01.2013, 22:43
Ich bin mir jetzt auch nicht so sicher, was man neues damit machen kann.
Ich weiß nicht, ob du das Tool "rpg2ksav" von sue 445 kennst, mit dem man 2k und 2k3 Savedateien laden und verändern kann.
Zudem kann man alle im Spiel geschriebenen Texte mit dem Tool "Dreamaker" exportieren und in einem Texteditor bearbeiten und danach wieder importieren.

Ich werde mir das Tool jedenfalls mal anschauen.
Vielleicht erschließt sich mir dann mehr.

Edit: Scheint auf jeden Fall nützlich zu sein!
Damit kann man praktisch alles, was sich auf der Map befindet ganz einfach ändern->so z.B. auch Event IDs oder deren Namen, X und Y Position und was nicht sonst noch alles.
Das Tool hat's zweifellos drauf!

Edit2: Was mir auffällt ist allerdings, das jede konvertierte Map die ID "0000" besitzt.
Das kann ja wohl nicht ganz stimmen und führt beim rückkonvertieren evtl. zu Fehlern (weiß ich nicht in wie weit das den Maptree beeinflusst, oder nicht, scheint bei meinem Test keine Auswirkungen darauf gehabt zu haben.)

Ghabry
23.01.2013, 02:29
Edit2: Was mir auffällt ist allerdings, das jede konvertierte Map die ID "0000" besitzt.
Das kann ja wohl nicht ganz stimmen und führt beim rückkonvertieren evtl. zu Fehlern (weiß ich nicht in wie weit das den Maptree beeinflusst, oder nicht, scheint bei meinem Test keine Auswirkungen darauf gehabt zu haben.)
Stimmt, habe ich gerade mal etwas genauer verfolgt und festgestellt: Die ID wird gar nicht in der LMU gespeichert. Habe mal mehrere leere Karten erstellt und dann mit einem Hexeditor verglichen, die waren alle identisch.
Der wirklich Bug ist also, dass LCF2XML einen ID-Tag ausgibt, der muss weg ;).

Ja und rpg2ksav ist mir bekannt, aber damit kann man halt auch nicht alles bearbeiten.

gRuFtY
24.01.2013, 10:46
Interessant, dass diesen Monat mehrere Leute ähnliche Projekte vorstellen: Mein RPG-Reader, den du ja deinem Comment auf GitHub nach auch schon gefunden hast, kann das theoretisch auch. Ich bin mir gerade nicht sicher, ob alle Klassen des Readers als serialisierbar angegeben sind, es ist aber möglich das zu tun und sie dann mit einem beliebigen XMLParser in eine XML zu schreiben - aber du kannst mit den Save-Files um, ich nicht.
Interesssanter als LCF2XML finde ich persönlich ja die Reader von EasyRPG, auf denen du damit scheinbar aufbaust. Da könnte zumindest für mich noch eher etwas interessantes zu finden sein.

Dadurch, dass ich für den Zweck, den du mit LCF2XML verfolgst, meinen Reader verwenden würde (einfach weil ich den halb besser kenne), ist für mich LCF2XML eher uninteressant, aber cool finde ich es trotzdem ;)

elvissteinjr
24.01.2013, 14:37
Moin, als interessierter Verfolger von EasyRPG, hab ich mir das hier mal angeschaut, funktioniert auch ganz gut.
Als ich aber mal einen Spielstand von Velsarbor getestet habe, kam das hier bei raus:

Assertion failed: length >= 1 && length <= 5, file ..\..\include\reader_struct.h, line 206
Spielstände von anderen Spiele gingen aber problemlos, hab mal den Save hier (https://dl.dropbox.com/u/2999010/Atelier/Vel_Save04.lsd) hochgeladen.

Oktorok3
24.01.2013, 16:51
So ein Fehler ist bei einem Save das ich damit mal testen wollte auch aufgetreten.
(Ich glaube es war derselbe Fehler) Jedoch hab ich das bei irgendeinem anderen RPG ausprobiert.
Scheint also zumindest bei Savedateien nicht immer zu funktionieren.



EDIT: Savedatei von En Drai Zuk V1.0
http://www.file-upload.net/download-7108010/Save01.lsd.html

Ghabry
24.01.2013, 23:45
Interessant, dass diesen Monat mehrere Leute ähnliche Projekte vorstellen: Mein RPG-Reader, den du ja deinem Comment auf GitHub nach auch schon gefunden hast, kann das theoretisch auch. Ich bin mir gerade nicht sicher, ob alle Klassen des Readers als serialisierbar angegeben sind, es ist aber möglich das zu tun und sie dann mit einem beliebigen XMLParser in eine XML zu schreiben - aber du kannst mit den Save-Files um, ich nicht.
Interesssanter als LCF2XML finde ich persönlich ja die Reader von EasyRPG, auf denen du damit scheinbar aufbaust. Da könnte zumindest für mich noch eher etwas interessantes zu finden sein.
Kommentar auf GitHub von mir? Wo? Also das Projekt von dir ist mir durchaus bekannt (hab den Thread gelesen), aber ich habe eigentlich nichts zu deinem Projekt kommentiert...
Jedenfalls, wenn du bei den Spielständen spicken möchtest: lsd_chunks.h (https://github.com/EasyRPG/Readers/blob/master/include/lsd_chunks.h) von libreaders. Die Werte der Enum-Einträge sind immer die IDs in dem Binärblob. Und die IDs der "Hauptkategorien" sind ganz unten bei "struct ChunkSave".


Ich bin mir gerade nicht sicher, ob alle Klassen des Readers als serialisierbar angegeben sind, es ist aber möglich das zu tun und sie dann mit einem beliebigen XMLParser in eine XML zu schreiben
Wusste gar nicht, dass Java nen XML-Serialisierer hat. Ist dann halt die Frage, ob das XML dann überhaupt bearbeitet werden kann, wenn da Java zu viele Meta-Infos reinschreibt könnte das problematisch werden. ^^



Moin, als interessierter Verfolger von EasyRPG, hab ich mir das hier mal angeschaut, funktioniert auch ganz gut.
Als ich aber mal einen Spielstand von Velsarbor getestet habe, kam das hier bei raus:

Hm, komisch. Werden wir wohl irgendwo den Typ von einem der Chunks falsch angegeben haben und lesen daher zu viele/zu wenig Bytes. Muss mal schauen wann ich Zeit finde, dem nachzugehen. Wenn das noch irgendwer hat wäre es schön, wenn das entsprechende Savegame ebenfalls hochgeladen werden könnte.

gRuFtY
25.01.2013, 00:22
Huch! Der Kommentar war gar nicht von dir, der verwies nur auf LCF2XML. Ich war irgendwie davon ausgegangen, dass der Kommentar vom Autor war, war er aber gar nicht ^^"
Meta-Infos schreibt Java glaube ich recht wenige in eine serialisierte Datei, da die meisten Metas ja in der Klasse, nicht in der Instanz stecken. Ich hab damit vor einiger Zeit ein wenig rumgespielt, schließlich werde ich für RPGit Serialisierung brauchen ;) (RPGit wird eine Software werden, die Makerspiele in zeilenbasierte Dateien schreibt, um diese mittels Git versionieren zu können. Mehr dazu gibts wohl in ein paar Wochen, wenn die Entwicklung anläuft)