TGD-Dateien Reparieren
Einleitung
Hallo!
Auf dieser Seite habe ich eine recht ausführliche Anleitung
gesetzt, wie man Syntax-Fehler in einer .tgd-Datei wieder
ausbügelt. Der Text richtet sich vor allem an Menschen, die
selbst nie ernsthaft mit einem Editor gearbeitet haben. Für
alle anderen Leser ist diese Anleitung vermutlich viel zu
kleinschrittig, für sie reicht es, die Abschnitte Problem und eventuell Technischer Hintergrund zu lesen.
Problem
In dieser kurzen Anleitung geht es um ein Problem, dass beim
Laden von Dateien auftreten kann. Zur Demonstration habe ich
in einer neuen Datei einen Surface Layer angelegt und ihn
"grün" genannt. Speichert man die Datei ab, in meinem
Beispiel als fehler.tgd, und lädt sie dann wieder, kommt
folgende Fehlermeldung:
Kommt diese Fehlermeldung nicht, liegt das Problem vermutlich ganz woanders.
Dieser Fehler ist zwar ärgerlich, aber man kann ihn leicht beheben. Was wir tun werden ist, die Datei zu öffnen und das ungültige Zeichen zu ersetzen, in diesem Beispiel "ü", durch "ue". Die Programmierer unter uns wissen wie das geht. Für den normal-sterblichen Windows-Nutzer kommt hier die ausführliche Anleitung.
Analyse
Glücklicherweise ist die Fehlermeldung wesentlich aufschlussreicher als die meisten Fehlermeldungen. Hier steht nicht nur der Name der problematischen Datei, sondern auch die Zeile, in der der Fehler auftritt. Außerdem sagt uns TG2 noch, welcher Fehler aufgetreten ist: "Parse error at line 223: not well-formed (invalid token)". Auf Deutsch heißt das in etwa: "Parse/Syntax-Fehler in Zeile 223: nicht wohlgeformt (ungültiges Zeichen)". Beim sogenannten Parsen einer Datei wird diese geprüft und ausgelesen. Dabei ist nun ein Fehler aufgetreten - die Datei ist "nicht wohlgeformt". Wohlgeformt werden Ausdrücke genannt, wenn sie bestimmte Kriterien oder Regeln (zum Beispiel die Regeln einer Grammatik) erfüllen. Wir kennen die genauen Regeln in diesem Fall nicht, TG2 gibt uns aber noch einen Tipp: "ungültiges Zeichen".
Offensichtlich haben wir in Zeile 223 irgend ein Zeichen, dass nicht ok ist. Wir wissen, dass das "ü" den Fehler verursacht. In der folgenden Anleitung tun wir aber einfach so, als wüssten wir absolut nicht, was das Programm eigentlich von uns will. (Was meistens auch der Fall ist ;) )
Lösung
Um die Datei zu reparieren müssen wir sie uns anschauen. Das
geht mit jedem Text-Editor. Als Beispiel nehmen wir den
Editor, denn der ist bei jedem Windows dabei und hat
sich über die Jahre prakisch nicht verändert. Der Editor
befindet sich im Startmenü unter "Programme" - "Zubehör".
Alternativ kann man im Startmenü auf "Ausführen..." klicken
und dort notepad eingeben. Im Editor öffnen wir nun
die Datei, die in der Fehlermeldung stand. Das wird die
tgd-Datei sein unter der wir das Projekt gespeichert
haben.
Wie finde ich die richtige Zeile? Wir kennen zwar die Zeilennummer, aber der Editor zeigt nicht an, in welcher Zeile wir uns befinden. Das lässt sich ändern.
Zuerst muss gegebenenfalls der automatische Zeilenumbruch
abgestellt werden. Dazu braucht man nur unter "Format" den
Eintrag "Zeilenumbruch" anklicken, sodass das Häkchen davor
verschwindet.
Als nächste Maßnahme bietet sich an, unter "Ansicht" noch die
Statusleiste anzuschalten: Jetzt stehen unten rechts Zeile und
Spalte, in der sich der Cursor befindet.
Um uns die manuelle Suche zu sparen, benutzen wir "Gehe
zu...". Die Funktion befinet sich unter "Bearbeiten":
Ein kleines
Fenster öffnet sich, hier muss die Zeilenzahl aus der
Fehlermeldung eingegeben werden. Der Cursor springt nach
einem Klick auf "OK" in die gesuchte Zeile.
Irgendwo in dort muss der Fehler sein.
surface_shader = "grün"
Die Fehlermeldung erwähnte ein "ungültiges Zeichen". "surface_shader" sind ja fast in jeder TG2-Datei enthalten ohne dort Probleme zu machen. Also muss der Fehler in "grün" liegen. Das merkwürdigste Zeichen dort ist der Umlaut "ü".
Umlaute sind eine bekannte Fehlerquelle - jede Datei, die einen Umlaut enthält, oder auch ein "ß" wird beim nächsten Öffnen den genannten Fehler erzeugen. Auch andere Sonderzeichen sind von diesem Effekt betroffen. Bis planetside diesen Bug also behoben hat, sollte man sich bei der Benennung von Shadern und Anderem auf die Buchstaben A-Z, Zahlen, und bekannte, funktionierende Zeichen wie "-" beschränken.
Das Problem ist nun schnell behoben - wir ersetzen "ü" durch "ue".
Würden wir die Datei nun speichern und in TG2 laden, bekämen wir dieselbe Meldung noch einmal - nur mit anderer Zeilennummer. Um die Datei sofort nach weiteren kritischen Stellen zu durchsuchen, benutzen wir die Suchfunktion. Sie befindet sich unter "Bearbeiten" - "Suchen...". Im sich nun öffnenden Fenster geben wir grün ein und klicken auf "OK".
Findet
der Editor das Wort, markiert er es. Ohne das Suchfenster zu
schließen, kann man jetzt das gefundene Wort korrigieren.
Dann klickt man im Suchfenster auf "Weitersuchen". Findet er
ein weiteres Vorkommen, korrigiert man es ebenfalls. Findet
er nichts, sind wir fertig!
Nun muss die Datei nurnoch abgespeichert werden. ("Datei" - "Speichern") Beim nächsten Laden sollte die Datei funktionieren.
Technischer Hintergrund
Das Kern-Problem ist eine unvorsichtige Verarbeitung von Text seitens des Programms. TG2 erlaubt einerseits keine Umlaute und nur wenige Sonderzeichen in seinen Dateien. Daher kommt beim Lesen gegebenenfalls die Fehlermeldung: "not well-formed".
Andererseits aber schreibt das Programm selbst die unerwünschten Zeichen in die Datei! Insbesondere wird nach einer Umbenennung eines Shaders o.Ä. nicht überprüft, ob der Name ungültige Zeichen enthält. Schnell passiert es, dass man seine Surface Layer "grün", "hellgrün", "mattes Grün" nennt. Statt die problematischen Zeichen zu kodieren, schreibt TG2 sie blind in die tgd.
Wie konnte so ein dummer Fehler passieren? Terragen kommt aus Großbritannien. Im englischen Alphabet gibt es die kritischen Buchstaben garnicht. In anderen Ländern, in denen Terragen beliebt ist, wie Deutschland, Frankreich, Spanien, Italien, usw. tauchen hingegen recht oft Umlaute, Akzente, Ligaturen und andere Varianten von Buchstaben auf. Im deutschen Sprachraum sind das Umlaute und das "ß", in den südlichen Ländern vor allem Buchstaben mit Akzenten.
Schluss
Das war's auch schon - viel Spaß mit der wiederbelebten Datei ;)
Sollte es noch Fragen geben: Schreib mir einfach eine Mail.
MfG, Nico