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:E:\Aktive Daten\Grafik\TG2TP\fehler.tgd: Parse error at line 223: not well-formed (invalid token)

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.Die fehlerhafte Datei fehler.tgd wird ganz normal ausgewählt.

Möglicherweise siehst du die Datei gar nicht, dann muss ganz unten im Fenster in der Zeile "Dateityp:" auf "Alle Dateien" umgestellt werden. Nun werden auch die .tgd-Dateien angezeigt.

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.Unter 'Format' muss das Häkchen bei Zeilenumbruch entfernt werden.

Als nächste Maßnahme bietet sich an, unter "Ansicht" noch die Statusleiste anzuschalten: Unter 'Ansicht' muss das Häkchen bei 'Statusleiste' entfernt werden. 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": Unter 'Bearbeiten' muss man auf 'Gehe zu...' klicken.

Im Fenster muss die Zeile eingetippt werden.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".

Oft taucht eine Bezeichnung mehrfach in der Datei auf! Eine fehlerhafte Bezeichnung wie "grün" muss bei jedem Vorkommen gleichermaßen korrigiert werden!

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".

Es wurden keine weiteren Vorkommen von 'grün' gefunden - wir sind fertig!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.

Wenn man noch einen anderen falsch benannten Shader o.Ä. in der Datei hat, zum Beispiel "grün2", dann muss der natürlich auch korrigiert werden. Gegebenenfalls meldet sich dann TG2 wieder mit der entsprechenden Fehlermeldung.

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