Eigene t Dateien erstellen

Aus X-Lexikon
Wechseln zu: Navigation, Suche


t-Dateien (auch t-Files) sind Dateien in und , welche sämtlichen Text, der im Spiel zu sehen ist beinhalten. Ob Kommandobeschriftung, Schiffsnamen oder -beschreibung oder die Befehle die im Scripteditor angezeigt werden, alles steht in den t-Dateien. Die t-Dateien findet man im X²/X³ Unterverzeichnis t (Beispiel: C:\Programme\Egosoft\X3 Reunion\t\) und auch in den cat/dat-Dateien beider Spieleversionen.
Können die t-Dateien nicht korrekt ausgelesen werden oder sind gar nicht vorhanden, entstehen für den Spieler nicht verständliche ReadText Einträge, gefolgt von einer Zahlenfolge. Diese Einträge kann man zumeist durch die Kompatibilitätslisten (englisch | deutsch) identifizieren, und so das fehlerhafte Scriptpaket zuordnen.


Ladereihenfolge

Die Relevanz der zu ladenden t-Dateien richtet sich nach folgender Reihenfolge:

  1. Zuerst werden die Dateien aus den cat/dat-Dateien geladen, dabei von der niedrigsten zur höchsten. Das bedeutet: Sind in der nummerisch größten cat/dat-Datei t-Dateien gleichen Namens enthalten wie in den vorhergehenden, so wird jeweils nur die t-Datei geladen, welche im höchsten Katalog vorhanden ist.
  2. Danach werden die t-Dateien aus dem t-Verzeichnis geladen. Sollten in diesem Verzeichnis Dateien gleichen Namens wie auch bereits in den cat/dat-Dateien vorhanden sein, so werden die Dateien aus den Katalogdateien ignoriert und nur die t-Dateien aus dem t-Verzeichnis geladen.

Dateiformat

Das Dateiformat der t-Dateien ist XML, und wird mit UTF-8 Codierung gespeichert. Der Name einer solchen Datei wird aus einem Zahlencode zusammengesetzt, welche die verwendete Sprache und die TextFile-ID enthält.
Die Sprache wird mit einem 1- bzw. 2-stelligen Code angegeben:

  • 7 – Russisch
  • 33 – Französisch
  • 39 – Italienisch
  • 44 – Englisch
  • 49 – Deutsch

Die TextFile-ID ist immer 4-stellig! Auch wenn die t-Datei nur die ID 7 erhalten soll, so ist dies im Namen eine 0007. Somit hätten wir dann folgende Namen für die unterschiedlichen Sprachen unserer t-Datei (Beispiel):

  • 70007.xml – Russisch
  • 330007.xml – Französisch
  • 390007.xml – Italienisch
  • 440007.xml – Englisch
  • 490007.xml – Deutsch

Um Überschneidungen bzw. Überschreibungen der t-Dateien zu verhindern, gibt es im Egosoft-Forum Kompatibilitätslisten, an denen man sich orientieren kann und sollte:


Dateiaufbau

Notwendige Inhalte

Grundsätzlich benötigen t-Dateien einen Header. Dieser Header benennt die XML-Version und die Codierung. Außerdem wird zusätzlich die Sprache definiert. Hierbei gilt das, was bereits unter Dateiformat beschrieben ist.

Ein typischer t-Datei Header eines deutschen TextFiles:

<?xml version="1.0" encoding="UTF-8"?> 
<language id="49"> 

</language>

Wie bereits zu erkennen ist, gehört der Language-Eintrag bereits zur ersten Sektion. Hier ist also die deutsche Sprache angegeben. Die letzte Zeile schließt die Sektion Language ab. Alles, was an Text in die t-Datei eingegeben wird, muss in die Sektion <language>. Wichtig ist, dass die Werte (Value) der Zuordnungen immer in Anführungszeichen (“) gesetzt werden müssen. Bei der Namensgebung ist zu beachten, das alle IDs unterhalb von 7000, also bis 6999, von Egosoft beansprucht werden. Die IDs zwischen 7000 und 9999 sind für Scripter und Modder freigegeben.


PageID

Die PageID (Seiten-Identifikation oder Seiten-Ident) definiert die verschiedenen Sektionen, welche teilweise bereits seitens Egosoft vorgegeben sind, innerhalb der Language-Sektion. Dazu später mehr.

Grundsätzlich wird der Eintrag einer PageID folgendermaßen zusammengesetzt:

<page id="8883" title="Advanced Message System" descr="Messages for Scripts"  voice="no"> 

</page> 

Die eigentliche ID muss immer angegeben werden, alle anderen Einträge sind optional.

  • title Gibt der PageID einen Titel, zum Beispiel dem des zugehörigen Scriptes, oder der Funktionen die darin enthalten sind.
  • desc Beschreibung der enthaltenen Texte.
  • voice ob die angezeigten Texte im Spiel vom Bordcomputer/Stationscomputer gesprochen werden sollen. Diese Funktion ist nur bei den Egosoft-eigenen PageIDs und dazugehörigen TextIDs verfügbar. Die Regeln dafür, welche Texte gesprochen werden, sind von Egosoft festgelegt.

Wichtig ist, dass die Werte (Value) der Zuordnungen immer in Anführungszeichen gesetzt werden müssen.


Vorgegebene PageIDs

Von Egosoft sind bereits einige PageIDs vorgegeben, welche für bestimmte Funktionen bzw. Einsatzbereiche in den spielinternen Abläufen verwendet werden. Es werden nur die PageIDs gelistet, die für das Erstellen von t-Dateien mit Befehlsanbindung oder Modding relevant sind:

PageID Verwendung
page id="7" Namen der Sektoren
page id="300007" Namen der Sektoren
page id="9" Buchstaben Alphabet
page id="12" griechische Bezeichnungen, griechisches Alphabet
page id="14" Kommandostatus von Schiffen
page id="17" Objektnamen und -beschreibungen
page id="300017" Objektnamen und -beschreibungen
page id="18" Dialogoptionen (Stations/Schiffskommunikation)
page id="19" Beschreibung der Sektoren
page id="300019" Beschreibung der Sektoren
page id="20" Handelsrang
page id="300020" Handelsrang
page id="21" Kampfrang
page id="300021" Kampfrang
page id="23" Völkerrang Argonen
page id="300023" Völkerrang Argonen
page id="24" Völkerrang Boronen
page id="300024" Völkerrang Boronen
page id="25" Völkerrang Split
page id="300025" Völkerrang Split
page id="26" Völkerrang Paraniden
page id="300026" Völkerrang Paraniden
page id="27" Völkerrang Teladi
page id="300027" Völkerrang Teladi
page id="28" Völkerrang Goner
page id="300028" Völkerrang Goner
page id="30" argonische Namen
page id="31" boronische Namen
page id="32" Split Namen
page id="33" paranidische Namen
page id="34" teladianische Namen
page id="1263" ID-Kürzel der Schiffs- und Objektklassen
page id="301263" ID-Kürzel der Schiffs- und Objektklassen
page id="1266" Namen der Rassen
page id="301266" Namen der Rassen Kurzform
page id="1706" Bezeichnung von Spielerobjekten
page id="301706" Bezeichnung von Spielerobjekten
page id="2000" Scripteditor Parameter Definition
page id="2001" Scripteditor Condition Codes
page id="2002" Scripteditor Konstanten
page id="2003" Scripteditor Befehlsnamen
page id="302003" Scripteditor Befehlsnamen
page id="2004" Scripteditor Operanden
page id="2005" Scripteditor BefehlsMenü Namen
page id="302005" Scripteditor BefehlsMenü Namen
page id="2006" Objektklassen
page id="2007" Scripteditor Return Variables
page id="2008" Script Kommandobezeichnungen für das Befehlsmenü eines Schiffes in Scripten
page id="302008" Script Kommandobezeichnungen für das Befehlsmenü eines Schiffes in Scripten
page id="2009" Script Rückgabewerte FLRET
page id="2010" Kommandonamen für das Befehlsmenü eines Schiffes
page id="302010" Kommandonamen für das Befehlsmenü eines Schiffes
page id="2011" Kommando-Kurzbezeichnungen für das Befehlsmenü eines Schiffes
page id="302011" Kommando-Kurzbezeichnungen für das Befehlsmenü eines Schiffes
page id="2012" Formationsnamen
page id="302012" Formationsnamen
page id="2013" Scripteditor Datatypes
page id="2020" Kommando-Konsolenbezeichnungen
page id="302020" Kommando-Konsolenbezeichnungen
page id="2021" Bezeichnungen der Geschützkanzeln
page id="2022" Kommandobeschreibungen für das Befehlsmenü eines Schiffes
page id="302022" Kommandobeschreibungen für das Befehlsmenü eines Schiffes

Für Egosoft sind alle PageIDs reserviert, welche bereits in den originalen t-Dateien vergeben sind.

Für Kommando- bzw Befehlszuordnungen müssen natürlich die entsprechenden PageIDs genutzt werden, da andernfalls keine Anbindung an die auszuführenden Befehle erfolgen kann.

In der Regel verwendet ein Scripter bzw. Modder für benutzerdefinierte Texte eine PageID, welche mit der ID der t-Datei übereinstimmt. Dies hat noch einen, außer der Übersichtlichkeit, weiteren Vorteil: Sollten Fehler bei der Textanzeige im Spiel auftreten, und so genannte ReadText-Meldungen erscheinen, kann so die dazugehörige t-Datei und, anhand der Kompatibilitätsliste, leicht das dazu gehörende Scriptpaket gefunden werden.

TextID

Mit der TextID wird jeder neue Texteintrag innerhalb eines Page-Eintrages versehen.

Folgendermaßen sieht eine TextID aus:

<t id="1000">Create Random Asteroids</t>

Auch eine TextID wird abgeschlossen durch ein </t>.

Die erste ID die verwendet werden kann, ist 0; die höchste, maximal mögliche, konnte derzeit noch nicht ermittelt werden, oder anders: Es wurde noch nie soviel Text in eine Page-Sektion geschrieben das eine Begrenzung bemerkt wurde. Auch der ID-Wert muss wieder in Anführungszeichen gesetzt werden.

Innerhalb der von Egosoft vorgegebenen PageIDs sind die TextIDs bereits fest vergeben. Eine Änderung dieser bereits vorhandenen TextIDs bewirkt eine Änderung der Texte, welche bereits im originalen Spiel vorhanden sind. Dies betrifft jedoch nicht die nicht vergebenen Kommandoslots, da diese seitens Egosoft nicht belegt, lediglich deklariert sind.

Formatierungen innerhalb einer t-Datei

Zwecks farblicher Gestaltung, Übersichtlichkeit oder spezieller Anordnung von Texten und Nachrichten gibt es auch in einer t-Datei Formatierungsmöglichkeiten. Eine sehr häufig verwendete Formatierung von Nachrichten ist der Zeilensprung. Dieser wird nach dem letzten Zeichen vor dem Zeilensprung bzw. vor dem ersten Zeichen der nächsten Zeile gesetzt:

Ich bin heute hier.\nMorgen bin ich schon da.

Dies ergibt folgene Anzeige im Spiel:

Ich bin heute hier.
Morgen bin ich schon da.

Es können auch mehrere Zeilensprünge nacheinander eingefügt werden um eventuell Leerzeilen einzufügen. Es gibt jedoch eine Zeilenbeschränkung, welche in bei 100 Zeilen je Nachricht liegt.


Farbliche Gestaltung

Um Texte farblich in einer t-Datei zu formatieren, müssen vor und nach dem einzufärbenden Text die Tags (Markierungen) gesetzt werden. Dies setzt selbstverständlich die Verwendung innerhalb eines TextID-Eintrages voraus.

Eine Festlegung der Farben beginnt mit folgendem Code:

  • \033A - Grau (Standardfarbe von Texten und Nachrichten, muss nicht festgelegt werden)
  • \033B - Blau
  • \033C - Cyan (Hellblau)
  • \033G - Grün
  • \033M - Magenta (Violett, Lila)
  • \033R - Rot
  • \033W - Weiß
  • \033Y - Gelb

Zum Beenden einer „Einfärbung“ wird immer folgender Code verwendet:

  • \033X - Farbformatierung beenden, nachfolgende Texte erscheinen wieder in grau

Selbstverständlich kann man so jedem Buchstaben eine andere Farbe geben, was vielleicht ganz lustig aussehen mag, jedoch nicht der Übersicht zuträglich ist. Zudem sollte beachtet werden, dass die Farben Blau und Rot ungünstig bei der Verwendung von Namen für Schiffe und Stationen sind. Mit Blau sind diese bei normaler Auswahl schlecht zu lesen. Bei einer roten Formatierung verschwinden die Namen gänzlich, sollte das Schiff bzw. die Station angegriffen werden.

Normalerweise werden Farbformatierungen nur zum Hervorheben von besonders wichtigen Werten oder Namen in Nachrichten verwendet, damit diese dem Spieler besser auffallen.

Verlinken

Oftmals ist es so, dass bereits alles, was man in einer Meldung anzeigen lassen will, im Spiel so als Text vorhanden ist, nur leider nicht in der Form, wie man es gern hätte. Nun kann man natürlich alle Texte neu schreiben, jedoch ist es somit auch notwendig, die eigenen Texte zu übersetzen, will man seine t-Datei in anderen Sprachen veröffentlichen. Damit einem dies erspart bleibt, besteht die Möglichkeit, Texte zu verlinken. Dabei spielt es keine Rolle ob die Texte, die man verlinken möchte, in der selben t-Datei stehen. Im Spiel muss zwar jede t-Datei geladen werden, aber ist dies geschehen, zieht die Spieleengine nur noch aus dem Pool der PageIDs und TextIDs die entsprechenden Einträge heraus.


Ein Link innerhalb einer TextID ist folgendermaßen aufgebaut:

{PageID,TextID}

Die geschwungenen Klammern am Anfang und Ende sowie das Komma zwischen PageID und TextID dürfen nicht vergessen werden, andernfalls wird der Link nicht korrekt erkannt.


Ein Beispiel:

<t id="815">{300017,4131} {300017,4031} {12,104} {9,523}{9,511}</t>

Das Beispiel ergibt dann folgenden, zusammengesetzten Namen:

Nova Bomber epsilon XL

{ 300017 , 4131 } Dieser Link verweist auf die PageID 300017 und innerhalb dieser auf die TextID 4131, welche den Text Nova enthält. Das Prinzip eines Links sollte somit klar sein. In seltenen Fällen kann es bei zu vielen Verlinkungen aber zu Problemen beim Laden des Textfiles kommen.

Nachrichtengestalltung

Sicherlich sind schon die Nachrichten aus dem BBS aufgefallen, dort steht etwas von Absender, ein zentrierter, unterstrichener Titel oder sogar zweispaltiger Text. Dies sind erweiterte Formatierungsmöglichkeiten, welche in BBS-Nachrichten oder Nachrichten, die an den Spieler gesendet bzw. ins Logbuch eingetragen werden, Verwendung finden.


Angabe eines Absenders

[author]Königin Atreus[/author]

Innerhalb einer TextID eingegebene Absenderinformationen müssen immer am Anfang eines TextID-Eintrages geschrieben werden. Ein Zeilensprung nach dem Abschlusscode [/author] ist nicht notwendig.


Nachrichten Titel

[title]Das Königreich der Boronen bittet um Ihre Mithilfe[/title]

Ein innerhalb einer TextID eingegebener Titel muss immer am Anfang eines TextID-Eintrages, jedoch wenn vorhanden nach der Autordeklaration geschrieben werden. Ein Zeilensprung nach dem Abschlusscode [/title] ist nicht notwendig. Der Titel erscheint immer zentriert.


Zentrierung eines Textes

Normale Texte werden von links nach rechts geschrieben, auch in /. Manchmal ist jedoch eine andere Formatierung notwendig für eine bessere oder auffälligere Erscheinung.

[center]Melden Sie sich im Sektor Königstal ![/center]

Diese Formatierung rückt den Text zwischen dem Code in die Mitte der Nachricht.


Linksausrichtung - Rechtsausrichtung

Hin und wieder benötigt man für die Darstellung einer Tabelle auch eine genaue Angabe, an welcher Seite und/oder Spalte der Text nun erscheinen soll. Dafür gibt es folgende Codes, welche innerhalb einer TextID eingegeben werden können.

[left]Melden Sie sich im Sektor Königstal ![/left]  [right]Es ist sehr wichtig ![/right]

Der erste Satz wird nun links an den Rand geschoben, während der zweite sich am rechten Rand ausrichtet.


Tabellen

Um eine Tabelle darzustellen, wird die Angabe der möglichen Spalten benötigt. Bisher ist keine Grenze der Spaltenanzahl bekannt, jedoch wird eine Darstellung von mehr als 5 Spalten schon fast unmöglich, da jedes Wort, welches über eine Spaltenbreite hinausgeht, eine neue Zeile beginnt. Somit ist die gesamte Formatierung durcheinander. In der Praxis hat sich eine maximale Spaltenzahl von 3 als praktisch und relativ leicht zu kontrollieren herausgestellt.

So erfolgt die Angabe der Spalten:

[text cols='2']Zeile 1 Spalte 1\nZeile 1 Spalte 1\nZeile 1 Spalte 2\Zeile 2 Spalte 2[/text]

Eine solche Formatierung ergibt im Spiel folgende Anzeige:

Zeile 1 Spalte 1                                                                    Zeile 1 Spalte 2
Zeile 2 Spalte 1                                                                    Zeile 2 Spalte 2

Zeigen wir es auch einmal 3spaltig:

[text cols='3']Zeile 1 Spalte 1\nZeile 2 Spalte 1\nZeile 1 Spalte 2\Zeile 2 Spalte 2\nZeile 1 Spalte 3\Zeile 2 Spalte 3[/text]

Diese Formatierung sieht dann so aus:

Zeile 1 Spalte 1                             Zeile 1 Spalte 2                        Zeile 1 Spalte 3
Zeile 2 Spalte 1                             Zeile 2 Spalte 2                        Zeile 2 Spalte 3

Es gilt jedoch weiterhin die Zeilenbeschränkung von 100. Auch wenn wir optisch nur 2 Zeilen haben sind es doch bereits 6 Zeilen. Deshalb gilt folgendes bei Tabellen

  • Zeilenbeschränkung / Spaltenzahl = mögliche Tabellenzeilen

Zudem ist es bei der Erstellung von Nachrichten nicht möglich, zusätzlich normalen Text ohne Spalteneinteilung darzustellen. Lediglich der Author/Absender und der Nachrichtentitel können noch festgelegt werden.


Zusätzliche Formatierungen

Zusätzlich gibt es noch die Möglichkeit, Fettschrift zu verwenden

[b]Mein fett geschriebener Text[/b]

oder auch Texte unterstrichen darstellen zu lassen.

[u]Mein unterstrichener Text[/u]


Wichtige Formatierungshinweise

In und auch in werden einige Zeichen in den t-Dateien als Steuerzeichen erkannt, sofern diese nicht anders deklariert werden. Dazu zählen:

  •  %
  • (
  • )

Diese Steuerzeichen, sollen sie so in einem Text auftauchen, müssen vor der Darstellung gekennzeichnet werden. Bei den runden Klammern zum Beispiel ( ) wird der Text der in den Klammern steht ausgeblendet, dient also nur als Kommentar im TextID-Eintrag. Soll er dargestellt werden, muss er mit einem Steuerzeichen(Escape-Sequenz) markiert werden:

\(Ich will diesen Text sehen, aber in Klammern\)

Somit wird der Text in der Nachricht mit Klammern angezeigt.

Zusammenarbeit mit Scripten

Dynamische Werte übergeben

Es sollen Werte in eine Textdatei eingetragen werden, welche jedoch nicht statisch sondern dynamischer Natur sind, sich also im Spiel jederzeit ändern können, wie zum Beispiel der Geldbetrag des Spielers, der Handelsrang oder gar das Schiff, welches der Spieler fliegt. Sollen diese Werte in eine Nachricht einfließen, muss dafür ein Platzhalter in die Nachricht eingebaut werden.

<t id=“1“>[author]Ban Danna[/author][title]Dein neuer %s[/title]Hallo mein Junge,\n\nheut
überreiche ich Dir Dein neues Schiff. Es ist ein nagelneuer %s und hat einen Wert von
\033Y%s\033X Credits.\nPass also gut auf ihn auf.</t>

Die Werte, die in die Nachricht eingetragen werden, könnten in der obigen Nachricht sein: Jäger ; Buster ; 725486

Der Platzhalter ist %s und kann je TextID-Eintrag nicht öfter als 5 mal verwendet werden. Sollen mehr Werte in eine Nachricht eingebaut werden muss diese Nachricht im Script selbst zusammengesetzt werden, um so mehr Variablen übergeben zu können. Auch ein dynamischer Wert kann andere Formatierungen enthalten, zum Beispiel farbliche Darstellung (\033Y%s\033X)


Auswahlbuttons

Wenn der Spieler vor eine Wahl gestellt wird, und sei es auch nur eine noch so einfache JA / NEIN Angelegenheit, dann kommen die Schaltflächen in den Nachrichten zur Geltung. Diese Schaltflächen oder Buttons müssen vorher in einer TextID mit eingegeben werden, oder aber in einer extra dafür angelegten TextID eingetragen und dann per Script in die Nachricht eingefügt werden. Ein einfaches Beispiel:

[select value="YES"] JA [/select] [select value="NO"] NEIN [/select]

Je nachdem, welchen Button der Spieler nun anklickt, wird der Wert, YES oder NO an ein Script zurück übergeben.

Auch bei den Schaltflächen gilt die Beschränkung von 5 je TextID, und es gilt auch, dass diese zusammengesetzt werden können durch ein Script, um mehr Schaltflächen in einer Nachricht unterzubringen.


Nun soll der Spieler jedoch nicht nur Ja und Nein sagen können, er soll sich sogar noch entscheiden wie viel er haben will. Dies erfordert eine Wertübergabe an die Schaltfläche und nach Aktivierung die Übergabe an das Script. Wie man dynamische Werte an ein Script übergibt sollte bis jetzt klar sein, nun bauen wir diese ein:

[select value="YES,%s"] JA, ich nehme %s [/select]\n[select value="YES,%s"] Ok, gib mir %s [/select]
\n[select value="NO"] NEIN [/select]

Es wurden jetzt 4 Werte übergeben an 2 Schaltflächen, für NEIN brauchen wir keinen Wert. Je nachdem, welchen JA Button der Spieler nun anklickt, wird der Wert YES mit dem Argument %s an das Script übergeben. So kann dieser Wert im Script weiter verarbeitet werden, um zum Beispiel entweder 100 oder 500 Frachteinheiten zu transferieren.