Der eine oder andere erinnert sich vielleicht noch an das, ebenfalls von mir zusammengeschraubte Tool ReaDat. Das hier vorgestellte DecDat (Oder kurz: "d2") kann ungefähr als großer Bruder von ebendiesem betrachtet werden.
Aber wozu braucht man einen großen Bruder? DecDat kann etwas mehr als ReaDat, und das was ReaDat konnte in verbesserter Art und Weise.
ReaDat konnte benutzt werden um sich den Inhalt einer Dat zu Gemüte zu führen. Es wurden alle Symbole aufgelistet und über verschiedene Tabellen verteilt, Funktionen, Instanzen und Prototypen konnte man sich in Form der Parsertokens genauer ansehen.
DecDat geht noch einen Schritt weiter: Es ist möglich den Daedaluscode (fast*) in seiner Urform anzuzeigen. Das konnte der GothicSourcer auch, allerdings hat der bei schmutzigeren Angelegenheiten (Ikarus und LeCo.) gerne aufgegeben.
Neben diesem neuen Hauptaspekt, der Möglichkeit die Dat vollständig als Daedalusscript zu rekonstruieren (Über die Exportdefinition auch über mehrere Dateien verteilt) wurde das Interface überarbeitet. Es gibt nur noch eine Tabelle in der alle Symbole aufgelistet sind, dafür ist ein neues Suchfeld hinzugekommen, das mit Regulären Ausdrücken gefüttert werden kann. (Das fehlende Suchfeld hat ReaDat ziemlich nutzlos gemacht, finde ich.)
Bisher ist nur die Suche nach ID, Typ und Name möglich, mir ist bewusst dass das immer noch beschränkt ist, aber immerhin besser als nichts.
Ohne jetzt zu weit abzuschweifen: Ich habe dieses Tool aus zwei Gründen erstellt.
Ich habe den Quellcode von ReaDat verloren und es ist unwartbar geworden - trotz einiger Makel die ich noch ausmerzen wollte
Ich brauchte eine verlässliche Möglichkeit eine .dat wieder zu rekonstruieren. (Auch mit anspruchsvollerem Code, den der Gothicsourcer nicht packt.)
Das Tool kann, wie ReaDat auch, genutzt werden um den Bytecode besser zu verstehen, gleichzeitig kann es als letzter Notnagel verloren geglaubter Skripte dienen.
Zu der mysteriösen "Exportdefinition", sowieso zu den Regulären Ausdrücken und den Kürzeln der Tokens sind knappe Hilfedateien in das Programm integriert.
* Beim Parsen der Scripte gehen ein paar Informationen verloren, so kann es sein dass ein Instanzname als int interpretiert wird oä. Wer wirklich eine .dat vollständig benutzbar machen möchte, sollte auf jeden Fall die Reihenfolge der Symbole einhalten!
Desweiteren geht natürlich die Formatierung verloren.
Dieses Programm wurde entgegen der anderen Tools die ich bisher hier her geschleppt habe nicht mit C# angefertigt, sondern mit Java. (Swing für die Oberfläche.)
Ich kann bisher noch keinen fehlerfreien Export garantieren. Wer einen Fehler findet möge ihn bitte melden!
In weiser Vorraussicht hänge ich den Quellcode dieses Mal direkt an. Ich möchte ihn nicht nochmal verlieren
Ich wünsche allen interressierten ein fröhliches Dekompilieren!
Dein Programm ist großartig!
Es wird mir in ein paar Wochen die Arbeit wesentlich vereinfachen. Vielen vielen Dank für die Mühen und das Bereitstellen der Quelltexte.
ps@Lehona: Netter Versuch
"Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
Dein Programm ist großartig!
Es wird mir in ein paar Wochen die Arbeit wesentlich vereinfachen. Vielen vielen Dank für die Mühen und das Bereitstellen der Quelltexte.
Da du dich in Rätseln ausdrückst übernehm ich das mal: Wirst du uns eventuell mitteilen wofür du DecDat benutzen möchtest? Klingt ja doch sehr interessant.
ich hoffe, ich habe das richtig verstanden: man kann mit deinem programm sozusagen kompilierte dateien manipulieren und sie wieder über die exportfunktion z.b. als .dat zusammenfügen, d.h. das original wurde dann verändert, auch wenn ein paar infos verloren gehen?
Kein Java. Hab grad nach gegoogelt aber der lädt mir das immer nur als Browser-Plugin. Nehme an das ist falsch, denn das bringt rein gar nichts was die datei angeht.
"Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
-Korallenkette
Kein Java. Hab grad nach gegoogelt aber der lädt mir das immer nur als Browser-Plugin. Nehme an das ist falsch, denn das bringt rein gar nichts was die datei angeht.
Ah gut, jetzt hab ich das Ding endlich aufgekriegt.
Leider exportiert das Programm (zumindest soweit ich das gesehen habe) nicht so sauber wie der Gothic-Sourcer das könnte wenn er nicht bei Ikarus den Löffel abgeben würde.
Mir wird fast alles in eine Content.d geklatscht. Wenn ich damit versuche ein Backup aufzuspielen...
Oder habe ich die Auswahl nur übersehen, mit der man die dat sauber in ihre Ursprungsdaten zerlegen kann?
"Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
-Korallenkette
Nein, aber du darfst dir nächstes Mal ruhig die Hilfedateien anschauen (zugegeben, die jeweiligen Menüpunkte haben aus irgendeinem Grund die entsprechende Datei nicht gefunden)
Exportdefinition ist hier der Stichpunkt - wenn du wirklich die komplette Ordnerstruktur rekonstruieren willst, ist das eine Menge arbeitet. Aber meistens reicht es ja, in der einen Content.d entsprechende Dinge nachzuschauen.
DecDat hat Fehler bei Conditional Statements: Wenn man mehrere Bedingungen an einem if Statement setzt, die aus "Und" und "Oder" Verknüpfungen bestehen, dann gibt es ein Problem bei der Klammersetzung. Wenn man "Oder" Verknüpfungen miteinander verbinden möchte, dass sie anschließend als "Und" Verknüpfungen weiterverwendet werden können, dann lässt DecDat die Klammern um die verbundenen "Oder" Verknüpfungen einfach weg.
So sollte es aussehen:
Code:
if (((condition_1) || (condition_2)) && (condition_3)) { };
So sieht es aus:
Code:
if ((condition_1) || (condition_2) && (condition_3)) { };
Bist du dir sicher, dass Gothic das nicht beides gleich interpretiert, weil von links nach rechts ausgewertet wird?
Sprich, weil keine Klammern vorhanden sind, zuerst
(condition_1) || (condition_2)
und dann
<Ergebnis> && (condition_3)
Du kannst meine Vermutung ja mal im Spiel ueberpruefen und ausserdem anschauen, was aus
if ((condition_3) && ((condition_1) || (condition_2))) { };
wird. Hier waere die Reihenfolge ja wichtig, und ich vermute, dass die Klammern korrekt gesetzt werden.
An DecDat wird meines Wissens eh nicht weiter gearbeitet, warum genau brauchst du den Code auf GitHub? Wenn du hier eine verbesserte Version hochladen willst, kannst du das gerne tun Notfalls kann ich das nächste Woche auch gerne bei GitHub hochladen
Kann die Sache mit den conditions mittlerweile jemand bestätigen?
Ja, verschachtelte Conditions werden verkehrt aufgelöst.
PS: Der Fehler gilt übrigens auch für Rechenoperationen, d.h. aus (a + b) * c wird a + b * c.
Es werden also die Prioritäten der Operatoren allgemein falsch rum ausgewertet.
I understand correctly, since decdat indicates an error
unhandled exception occured: java.lang.ArrayIndexOutOfBoundsException: -1
it turns out that gothic.dat compiled with errors? I met this in a recent update of Odyssee 2.6.4, an error pops up in the function b_addon_piratesgohome (64070 ID)
in version 2.6.3 this is not.