Checked Font

  • Fonts sind Schriftarten und in OMSI für die variable Anzeige von Text zuständig. Ein Font kann beliebige Zeichen, Zahlen, Buchstaben oder auch farbige Bilder enthalten. In OMSI werden Fonts bei Fahrzeugen (Anzeigen, Kennzeichen, Matrizen) und Objekten (Fahrgastinformationssysteme, Straßenschilder, Beschriftungen, Haltestellenschilder) benutzt.

    1 Allgemeine Grundlagen

    Im Folgenden meint "Zeichen" ein beliebiges Zeichen, was in einer Font dargestellt wird. Dies können normale Buchstaben oder Zahlen sein, aber auch Piktogramme oder farbige Bilder.

    1.1 Was ist ein Font?

    Fonts werden in Omsi als sogenannte Texttexturen dargestellt. Ein Font besteht aus zwei oder drei einzelnen Dateien (s. auch Dateiformate) mit unterschiedlichen Inhalten:

    • Eine OFT-Datei (OmsiFontType, Reintext) mit dem Namen der Font und Angaben zu verwendeten Zeichen und Positionen
    • Eine Bilddatei (_alpha.bmp), die die Maske ("die Form") der Zeichen festlegt
    • Eine Bilddatei, die die Farbe festlegt (bzw. Bilder enthält). [optional]

    Das Font-System in OMSI beruht also darauf, dass es einen Satz an Daten pro Schriftart gibt: Die Textur enthält alle Zeichen einer Schriftart, die Konfigurationsdatei Informationen, wie Zeichen aus der Textur gelesen werden.

    Bilddateien für Fonts sollten stets als Bitmap mit einer Bittiefe von 24 gespeichert werden!

    Im Grunde genommen ist ein Font nichts weiter als die Zusammenfassung von einzelnen Bildern. Omsi kann dann diese Bilder sinnvoll zusammensetzten, damit es im Spiel selbst einen Sinn ergibt. Für das Programm selbst ergibt das Dargestellte keinen Sinn. Daher können Passanten, das mit Fonts, dargestellte nicht erkennen oder gar nutzen. Es bleibt nur eine (für das Programm) nutzlose Zusammenstellung von Bildern.

    1.2 Einsatz eines Fonts

    Fonts finden sich in Omsi mehrfach. So werden Fonts benutzt, um bestimmte Texte oder Zeichenketten darzustellen, die in Omsi veränderlich sind. Ein gutes Beispiel sind Autokennzeichen: Jedes bewegliche Fahrzeug in Omsi kann mit einem Kennzeichen versehen werden. Die Buchstaben und Zahlenfolgen werden dann von Omsi automatisch erstellt. Mit dem Font kann am Kennzeichen alles dargestellt werden, was man möchte, Also nicht nur Buchstaben, Zahlen und Zeichen, sondern auch Bilder wie Nationalitätszeichen, Plaketten oder Rahmen. (Eine andere Möglichkeit zur Gestaltung von Kennzeichen ist, das Nummernschild "statisch" in das Repaint zu integrieren, diese Möglichkeit nutzt keine Fonts.) Desweiteren finden sich Fonts auf Anzeigegeräten. (Innenanzeigen, IBIS, Drucker, Thermometer, etc.)

    1.3 Fonts oder Texturen

    Die in Omsi verwendeten Rollbänder und Schilder in Fahrzeugen werden nicht über Fonts dargestellt, sondern über wechselnde Texturen. Font-gesteuerte Anzeigen können lediglich einzelne Zeichen bzw. Zeichenketten zusammensetzen. Die Möglichkeiten sind vielfälltig, aber nicht unbegrenzt: (Wechsel-)texturen sind dann sinnvoll, wenn man formatierte zusammenhängende Wörter (z. B. Zielschilder, Rollbandtexturen, Werbeplakate) umsetzen möchte. Fonts eignen sich dementsprechend dafür, wenn

    • alle Zeichen gleich formatiert werden sollen, einzelne Zeichen also nicht hervorgehoben werden,
    • die dargestellten Kombinationen zum Zeitpunkt der Content-Erstellung noch gar nicht bekannt sind (z.B. aktuelle Uhrzeit oder Datum des Spiels),
    • der anzuzeigende Text stetig wechselt (z.B. Abfahrtszeit),
    • der anzuzeigende Text unvorhersehbar ist (Anzeigen an Bussen werden z.B. durch den Spieler gesteuert) oder
    • der Text zufällig wechselt (z.B. Kapazität eines Parkhauses).

    Fonts kommen also genau dann zum Einsatz, wenn der Text im weitesten Sinne vom Scriptsystem vorgegeben wird.


    Die Aufgabe der konkreten Implementierung der Fonts verbleibt beim Content-Ersteller:

    • Für Kennzeichen oder Wagennummern braucht es meist kein gesondertes Script.
    • Alle Arten von Anzeigen am Bus, die mit dem Fahrplan zu tun haben (Zielschild, IBIS, etc.) werden mithilfe einer Hofdatei dargestellt.
    • Bei Objekten wird der Text im Editor eingegeben oder per Script geladen.
    • Bei Fahrzeugen gibt es noch die Möglichkeit der Scripttexturen.

    OMSI "liest" Fonts nicht in dem Sinne, wie Menschen Text lesen, sondern setzt lediglich Zeichen(-ketten) in eine Grafik um. Auch Menschen können nicht lesen, die Funktionsweise wie z.B. der Hofdatei steuert sich also nicht über den angezeigten Text, sondern über "interne" Codes. Es kann also nicht erkannt werden, ob ein angezeigter Text "einen Sinn ergibt" oder nicht, es werden lediglich die einzelnen Zeichen zusammengesetzt.

    Auch Dinge, wie Zeilenumbruch, Silbentrennung und Behandlung von Überlänge (wenn der Text länger ist als die Anzeige es zulässt) müssen beim Implementieren von dynamischen Anzeigen beachtet werden!

    1.4 Fonts in Microsoft Windows

    Es gibt zahlreiche Seiten, um Schriftsätze für Windows herunterzuladen und zu installieren, darunter

    • CAT Fonts (Lizenzfreie Benutzung aller angebotenen Schriftarten, auch in Payware),
    • fonts2u,
    • Dafont (nur für den privaten Gebrauch kostenfrei),
    • MyFont (mit Textvorschau),

    Je nachdem, welches Format die Fonts haben, können diese intuitiv per Doppelklick in Windows importiert werden (TrueType/.ttf und OpenType/.otf) oder es muss ein Font-Betrachter, z.B. dp4 Font Viewer (kostenfrei) zuhilfe genommen werden. Bei Problemen kann es auch helfen, die Datei manuell in C:\Windows\Fonts zu kopieren. Diese Schriftsätze stehen dann auch in allen verwendeten Programmen, wie Textbearbeitungs- oder Bildbearbeitungsprogrammen zu Verfügung.

    Auch Schriftarten unterliegen teilweise dem Urheberrecht! Die jeweiligen Lizenzen sollten unbedingt beachtet werden.

    2 Die Alpha-Textur

    Die Alpha-Textur ist eine Art "Schablone" und gibt die Form der Zeichen vor. Auch wenn die Dateinamen es anders herum suggerieren, ist die Alpha-Textur die "Haupttextur" eines Fonts. Alles, was später zur Font gehört, ist weiß, alles, was nicht dargestellt werden soll und in OMSI durchsichtig ist, wird schwarz, vereinfacht gesagt: Weiße Schrift auf schwarzem Grund. Auf scharfkantige Ränder kann hierbei aber verzichtet werden, OMSI konvertiert Grautöne an den Rändern in Teiltransparenzen (soweit möglich).


    Zu empfehlen sind Größenordnungen von 256 bis 1024 Pixeln. Größere Schriftarten erscheinen - je nach Objekt und Nutzung - aufgrund von Herunterskalieren möglicherweise unscharf.



    Auch der Platz, wo später bunte Bilder sind, muss mit weiß gekennzeichnet werden, hier im Beispiel zwei rechteckige Piktogramme und ein Kreis-Symbol. Das Leerzeichen sollte ebenfalls beachtet werden.


    Für die Alphatextur kann ein beliebiges Bildbearbeitungsprogramm genutzt werden (s. Dateiformate), idealerweise mit einem Text-Werkzeug. Der Hintergrund muss dabei in vollem Schwarz gefärbt werden und die Schrift in vollem Weiß. Nach der Überlegung, in welcher Qualität und Auflösung die Font gespeichert werden soll und einer Überschlagung, wie viele Zeichen notwendig sind (Für ein Kennzeichen aus der DDR sind beispielsweise 38 Zeichen ausreichend, nämlich A-Z, 0-9, Bindestrich und ein Leerzeichen. Kommen noch Kleinbuchstaben , Sonderzeichen oder Zeichen in verschiedenen Breiten hinzu, vergrößert sich die Menge.), reicht es meist schon aus, alle Zeichen hintereinander zu schreiben und die Größe so lange zu ändern, bis die angepeilte Texturgröße (s. Textur) passt. Es können auch beliebige Formen für Bilder (Quadrate, Rechtecke, Kreise, Ellipsen, etc.) beliebig hinzugefügt werden.


    Die Zeichen sollten sich nicht berühren oder überlappen, außer es ist gewollt. Authentische Ergebnisse bekommt man, wenn der Abstand von Zeichen zu Zeichen wie in einem normalen Text ist. Vor diesem Hintergrund sollten auch Leerzeichen zwischen zwei sichtbare Zeichen eingefügt werden, um den Abstand einzuschätzen. OMSI schneidet Zeichen als gerades Rechteck aus, die Schrift sollte also gerade sein.

    3 Die Bild-Textur (optional)

    Die Bildtextur ist nötig, falls keine einfarbige Schrift dargestellt wird, sondern es farbige Piktogramme oder Bilder gibt. Beide Texturen müssen exakt die selbe Pixelgröße haben. OMSI legt die Bildtextur - vereinfach ausgedrückt - unter die Alpha-Textur und ersetzt alles das, was im Alpha weiß ist, mit der auf der Bildtextur zugrunde liegenden Farbe.

    Jetzt sind die Piktogramme mit Farbe gefüllt, die Schrift wird sich später in weiß präsentieren.

    Zu beachten ist, dass die ausgeschnittenen Alpha-Teile exakt mit der Bild-Textur übereinstimmen müssen, sonst käme es zu Darstellungsfehlern.


    In einem Bildbearbeitungsprogramm kann man dies z.B. mit verschiedenen Ebenen simulieren, hierbei bekommt die Alpha-Textur die höchste Priorität und wird auf die Bild-Textur "multipliziert". Im Beispiel ist die Schrift zur Verdeutlichung in orange gefärbt (würde man die farbige Ebene als Bildtextur und die andere als Alphatextur speichern, ergäbe sich dies auch in OMSI) und die Flächen der Piktogramme liegen genau übereinander.


    [hl=1][/hl]

    4 Die OFT-Datei

    Die OFT-Datei ist eine einfache Textdatei, in der eingetragen wird, wo sich Zeichen in der zugehörigen Grafikdatei genau befinden und mit welchem Zeichen auf der Tastatur es aufgerufen werden kann. Wie eine solche Datei aufgebaut ist, erklärt sich im Abschnitt Aufbau einer OFT-Datei für den Font.


    Es gibt nur zwei Befehle die in dieser Datei Anwendung finden. Hierunter wird festgelegt, wo ein Bild beginnt, endet und wie groß es ist. Außerdem werden die zugehörigen Texturgrafiken zu diesem Font zugewiesen und auch der Name des Font festgelegt. Alle Angaben in der Font.oft beziehen sich auf die Pixelposition in der Grafik. Man kann auch zwei OFT-Datei für zwei unterschiedliche Font's in einer Grafik zusammenfassen und in Omsi durch bestimmte festgelegte Bedigungen einbinden. Fehler in dieser Datei, werden von Omsi gemeldet und die Schrift wird nicht dargestellt.


    Die OFT-Datei, beinhaltet nur den Namen des Font, die zugehörigen Bildtexturen und die Positionen innerhalb der Bildtextur. Je nach Umfang des Fonts, kann die OFT-Datei einige hundert kB haben. Sie sollte aber nicht 1 MB überschreiten, da Omsi mit solch großen Dateien nicht zurecht kommt. Nutzlose Kommentare sollte also kurz gehalten werden und nur als kurze Information dienen.


    Die beiden Bilddateien sollten einerseits nicht zu klein sein, da Omsi diese sonst nicht sauber darstellen kann. Hierbei würde die Schrift, die man in Omsi groß darstellen kann, sehr verpixelt und verschwommen erscheinen. Sind die Texturen zu groß, gibt es Probleme mit der Größendarstellung in Omsi und die Schrift erscheint nicht richtig.


    Das grundlegende Format der Bilddateien ist dabei unerheblich. Es muß nicht wie bei Texturen üblich, ein rechteckiges Format eingehalten werden. So können alle Zeichen in einer Reihe dargestellt werden oder auch quadratisch angeordnet sein. Wichtig ist nur, das beide Texturdateien die selbe Pixelhöhe und -breite aufweisen. Sie müßen also deckungsgleich sein!


    5 Aufbau der OFT-Datei

    5.1 Erstellen der OFT-Datei

    Der Aufbau einer OFT-Datei gleich dem Aufbau einer cfg-Datei in Omsi. Auch hier gilt: Man kann reinschreiben was man will, solange kein Befehl am Zeilenanfang steht. Ein gültiger Befehl wird immer in eckigen Klammern gesetzt und muß immer am Zeilenanfang stehen, damit dieser erkannt und ausgelesen wird. Außerdem muß dieser Befehl allein in der Zeile stehen.
    Doe OFT-Datei ist eine einfache Textdatei, die man mit Word, Word++, Office Word, Open Word, oder andere Schreibprogramme einfach erstellen kann. Abgespeichert wird die Datei dann ganz normal als Textdatei.txt und abschließend die Texturendung umgeschrieben von txt zu oft. Die Abfrage, ob diese Änderung übernommen werden soll, auch wenn diese Datei dann für diesen Rechner unbrauchbar werden könnte, muß mit OK bestätigt werden. In diese OFT-Datei sind nur zwei Befehle zulässig:


    • [newfont] hier wird ein neuer Zeichensatz definiert
    • [char] Hiermit wird ein einzelner Bildausschnitt definiert


    Jeder dieser beiden Befehle hat dann eine bestimmte Anzahl an festgelegten Strings untereinander.


    [newfont]
    1. Name des Font ohne Dateiendung
    2. zugehörige bitmap-Dateiname (Bildtextur) inklusive Dateiendung
    3. zugehörige Aplhatextur mit Dateiendung
    4. Höhe der Zeichen in Pixel, inklusive vertikalem Abstand
    5. waagerechte Lücke zwischen den Zeichen

    Dieser Befehl wird nur einmal eingetragen und gilt dann für einen einzigen Font.

    [char]
    1. Codezeichen
    2. Linker Pixel wo das Zeichen beginnt
    3. Rechter Pixel wo das Zeichen endet
    4. Oberster Pixel der Zeichenzeile

    Dieser Befehl wird mehrfach eingetragen und ist dann für jeweils ein einzelnen oder mehrere zusammenhängende Zeichen.


    So könnten dann die Befehle in der OFT-Datei geschrieben stehen:

    Code
    1. [newfont]
    2. Kennz_DDR
    3. DDR.bmp
    4. DDR_alpha.bmp
    5. 49
    6. 4


    Ab hier folgen die einzelnen Buchstaben, Zahlen und Zeichen:

    Das heißt für den Buchstaben A: Der Buchstabe A beginnt bei der vertikalen Pixelspalte 1 und endet bei der vertikalen Pixelspalte 29. Die oberste Buchstabenreihe beginnt bei der waagerechten Pixelzeile 2. Alle Buchstaben sind 49 Pixel hoch, also ist der unterste Rand des Buchstaben bei Pixelzeile 51. Daraus ergibt sich für Omsi ein Bildausschnitt mit den Koordinaten von Pixel 1,2 bis Pixel 29,51


    Eine Besonderheit gibt es. Wird ein Zeichen abgefragt für den es keinen Zeichencode gibt, wird Omsi diese Font-Datei als fehlerhaft ansehen und damit nicht arbeiten. Unter jedem [char]-Befehl muß auch ein Zeichencode eingetragen sein. Das dürfte soweit nicht schwer sein. Die Besonderheit liegt beim Leerzeichen (Space). Hier wird also unter dem Befehl [char] ein einfaches Leerzeichen gesetzt. Fehlt an dieser Stelle das Leerzeichen, erkennt Omsi den gesamten Font nicht an und erscheint als Fehler. In der Alphatextur, werden keine Zeichen eingetragen, sondern es wird nur eine schwarze Pixelfläche gelassen, solange das Zeichen schwarz sein soll. Ansonsten wird die jeweilige Farbe oder Farben eingetragen.

    5.2 Was sind Zeichencodes und welche sind zugelassen

    Mit einem Zeichencode, wird von Omsi ein Bildausschnitt identifiziert. Wenn man Beispielsweise ein Bild in die Pixelkoordinaten 1,2 bis 29,51 einzeichnen würde, muß man diesem Bild ein Zeichencode zur Identifikation geben. Das sind also Schriftzeichen, die Omsi erkennen kann. Zugelassen sind damit alle Buchstaben (Groß- und Kleinschreibung) alle Umlaute (Ä; Ö; Ü; ß), alle Ziffern und alle Tastaturzeichen (+ - . , ; : € @ µ < * ~ = / & % $ § u.s.w.). Also alles, womit Omsi eine bestimmte Pixelfläche zuordnen kann.
    Somit können in einem Font, bis zu 110 Zeichencodes vergeben werden (deutsche Tastatur {QWERTZ}). Das bedeutet aber nicht, dass man in einer Fonttextur, nur maximal 110 Pixelflächen benutzen kann. Man kann beliebig viele Pixelflächen verwenden. So könnte man zum Beispiel die 38 Zeichen aus dem DDR-Kennzeichen, die 38 Zeichen aus dem Westdeutschen Kennzeichen und die 76 Zeichen für das Eurokennzeichen innerhalb einer Textur unterbingen und dazu noch sehr viele Länderkennungen (blaues Feld auf dem EU-Kennzeichen).
    Mit der OFT-Datei braucht man dann nur auf eine bestimmte Gruppe von Bildausschnitten zugreifen. Also hätte man drei OFT-Fonts, die jeweils die selbe Bildtextur und Alphatextur verwenden. Allerdings sollte man der Übersicht wegen, große umfangreiche Schriftsätze mit einer einzelnen Textur versehen, damit die Texturgröße nicht überdimensionale Ausmaße annimmt. Es wäre auch möglich, alle Zeichen in einer Textur, mit nur einer OFT-Datei einzutragen. Allerdings kann man dann nichtmehr mit einem einfachen Eintrag im Busauswahlmenü darauf zugreifen.

    6 Schriftflächen für Omsi erstellen

    6.1 Was man für eine Schriftfläche benötigt

    Für das Erstellen einer Schriftfläche in Omsi, ist ein 3D-Programm zwingend erforderlich. Der richtige Umgang mit diesem 3D-Programm, wird in diesem Tutorial vorrausgesetzt. Welches 3D-Programm genutzt wird, ist dafür unerheblich (zModeler, Blender, Cinema 4D, SketchUp etc.).

    6.2 Schriftfläche erstellen

    Mit einem 3D-Programm erstellt man eine einfache Fläche die vorzugsweise viereckig ist. Für das Kennzeichen, erstellt man eine einfache kleine Fläche, die das gesamte Schriftfeld überdeckt. Mehr als 2 Polygone muß dieses Schriftfeld nicht haben. Als nächstes wird dieses Schriftfeld gemappt, also eine Textur zugewiesen und die Textur auf dem Objektträger aufgebracht. Die benötigte Textur ist dabei irrrelevant, da diese lediglich als Platzhalter verwendet wird. Was auf dieser Textur zu sehen ist oder nicht zusehen ist, spielt für Omsi später keine Rolle. Für das Kennzeichen kann man beispielsweise die Trägertextur "D_kennzeichen.bmp" verwenden. Auf dem 3D-Objekt wird dann die gesamte Texturfläche, also alle Pixel der Textur gemappt. Das die Textur dann nur 8192 Pixel hat ist vollkommen egal.
    Für einen Bus benötigt man 2 Objektträger. Für das vordere und für das hintere Kennzeichen. Für Wagennummern, macht man das ganz genauso. Also wird nach dem mappen, dass 3D-Objekt dupliziert. Die einzelnen Flächen werden dann vor die Kennzeichenflächen des Fahrzeuges verschoben, bis diese etwa 1 Millimeter vor dem Kennzeichen sind und das Schriftfeld des Kennzeichens überdecken. Bei einem einzelnen Bus, der aus einem Körper besteht, kann man beide Texturflächen dann als ein Objekt exportieren. Bei den Fahrzeugnummer verhält es sich genauso. Solange alle Objektträger auf einem Buskorpus sind, können alle Nummernflächen als ein Objekt exportiert werden. Selbst wenn man im Fahrzeuginneren eine kleinere Fläche hat, oder eine größere auf einer äußeren Blechseite. Für Rundungen am Bus, muß die Fläche natürlich mehrere Polygone haben, damit sich die Trägerfläche am Buskörper anpassen läßt.
    Für einen Gelenkbus muß man aber die Flächen für jeden Fahrzeugteil seperat exportieren. Hat man mehrere Schriftflächen, beispielsweise in einem mehrzeiligen Drucker oder Informationssystem, dann muß für jede seperate Informationsabfrage ein eigenes Objekt exportiert werden. Das bedeutet ein Objektträger für die Infozeile (Liniennummer, Zielcode, Umlaufnummer, Haltestellencode), für die Haltestellenanzeige, Zielanzeige (wenn diese separat angezeigt werden soll), für die Verspätungs- / Verfrühungsanzeige und für weitere Schriftfelder, wie Uhrzeit, übernächste Haltestelle u.s.w. Man kann aber auch alle Objekte zu einem zusammen fassen, wenn man die unterschiedlichen Anzeigen auf verschiedene Texturebenen aufgeteilt hat.


    6.3 Schriftflächen in Omsi einsetzen

    Zunächst sollten die 3D-Objekte mit dem x-to-o3d-Converter (im inoffiziellen SDK enthalten) in das Omsieigene o3d-Format convertiert werden. Als nächstes werden die o3d-Objekte in der model.cfg eingetragen. Diese Eintragungen finden ausschließlich in der model.cfg statt. Zuerst wird natürlich das Mesh (Objekt) eingetragen. Anschließend folgen die für dieses Mesh zugehörigen Funktionsbefehle.

    • Eintragung des Mesh.

    [mesh]

    Kennzeichen.o3d


    Hier wird also der Objektname mit der Dateiendung eingetragen.

    • Eintragung der Textur, wenn diese geändert werden soll.

    [matl]

    D-kennzeichen.bmp

    0


    Hier folgen nach dem Befehl der verwendete und auf dem Objekt gemappte Texturname mit der Dateiendung. Darunter folgt die zugehörige Texturebene. Werden mehrere Texturebenen erstellt, dann folgt dieser Befehl in diesem Mesh-Abschnitt mehrmals.

    • Zugehörige Texttextur.

    [useTextTexture]

    X


    Bei diesem Befehl ist die Schreibweise wichtig, denn es muß unbedingt auf die Groß- und Kleinschribung geachtet werden. Ansonsten ist dieser Befehl für Omsi nicht lesbar. Das X gibt die Zahl an, an welcher Eintragungsfolge der Texttexturen dieses Mesh später zugreifen soll. Diese Eintragung folgt später.

    • Einstellung der Transparenz.

    [matl_alpha]

    2


    Hier wird das gesamte Feld transparent eingestellt. Diese Transparenz richtet sich nach dem Alphalanal der gemappten Textur. Da diese Textur keinen Alphakanal beinhaltet, wird das ganze Objekt transparent. Die Schrift erscheint dann aus dem Font, wobei die Alphatextur als Maske aufgesetzt wird und die Bildtextur als Farbe gesetzt wird.

    • Zuordnung der Texttextur

    [matl_textadress_clamp]


    Mit diesem Befehl wird eine Textur einmalig dargestellt, wenn die Textur auf dem Objektträger gekachelt gemappt wurde, also mehrfach auf einer Textur erscheint.


    6.4 Texttexturen erstellen

    Am Anfang einer jeden model.cfg finden sich die Zugeordneten Variablennamen für die Repaints und darunter die Liste der Texttexturen. Hier sind zwei verschiedene Befehle möglich, womit man die Anzahl der Strings unter dem Befehl festlegt. Somit weiß Omsi, wieviele Zeilen nach dem Befehl ausgelesen werden müßen und welche Zeile für was genau steht.

    • [texttexture] - mit 8 folgenden Zeilen
    • [texttexture_enh] - mit 10 folgenden Zeilen


    6.4.1 Automatisch zentrierte Ausrichtung

    Der Befehl [texttexture] hat 8 Zeilen. Werden nicht alle 8 Zeilen beschrieben, gilt dieser Befehl als ungültig und Omsi zeigt einen Fehler an. Werden mehr als 8 Zeilen geschrieben, werden trotzdem nur die ersten 8 Zeilen ausgelesen. Alle weiteren Zeilen (Strings) sind für diesen Eintrag irrrelevant.


    [textteture]

    1. Stringvariable
    2. Fontname
    3. Breite der Schrift in Pixel
    4. Höhe der Schrift in Pixel
    5. Monochrome Farbe oder Farbe der Bildtextur
    6. Farbcode Rot
    7. Farbcode Grün
    8. Farbcode Blau

    Was die einzelnen Zeilen für eine Bedeutung haben, wird im Abschnitt Bedeutung der einzelnen Strings erklärt. (Ein Klick auf einem String, führt direkt zur Bedeutung.)


    6.4.2 Manuelle Ausrichtung

    Der Befehl [texttexture_enh] besitzt 10 Zeilen die ausgelsen werden. Auch hier gilt wieder, weniger eingetragen Zeilen werden als Fehler ausgegeben und mehr erstellte Zeilen werden ignoriert. Der Präfix _enh besagt also nur, wieviele String auszulesen sind.


    [texttexture_enh]

    1. Stringvariable
    2. Fontname
    3. Breite der Schrift in Pixel
    4. Höhe der Schrift in Pixel
    5. Monochrome Farbe oder Farbe der Bildtextur
    6. Farbcode Rot
    7. Farbcode Grün
    8. Farbcode Blau
    9. Orientierung oder Ausrichtung der Schrift
    10. Pixel auf Raster ausrichten

    (Ein Klick auf einem String, führt direkt zur Bedeutung.)


    Beispiel:

    [texttexture_enh]
    Uhrzeit
    7-Segment-LED

    128

    64
    1
    10
    85
    245
    2
    1

    6.4.3 Bedeutung der einzelnen Strings

    Es folgen nun die Erklärungen, wofür die einzelnen Strings sind:


    6.4.3.1 Stringvariable

    Die Stringvariable ist die Variable, womit Omsi erkennt, was dort auf dieser Texttextur dargestellt werden soll. Es ist also die Identifizierung welche Texttextur eingetragen wurde. Es gibt einige feste Stringvariablen, die nicht extra mit einem Systemmacro in einem Script eingetragen werden müßen. Die sind Omsi-seitig bereits fest programmiert. Die Stringvariablen, die nicht fest programmiert wurden, müßen im Script erscheinen (S.$.Stringvariable). Für das Kennzeichen und die Wagennummern sind diese bereits fest vorgegeben:

    Wagennummer: number

    Kennzeichen: ident

    Weitere Stringvariablen müßen im Script eingetragen werden, damit Omsi weiß, welche Variable ausgelesen werden soll (gegebenenfalls, wo er diese Variable findet), ob dieser ausgelesene Wert umgerechnet werden soll und wie diese Information angezeigt werden soll. Das Ergebnis wird dann mit einem Variablennamen benannt, damit Omsi diesen Variablennamen später zuordnen kann (S.$.Stringvariable). Im ersten String unter [texttexture] erscheint dann diese Stringvariable, womit der Eintrag idenifiziert wird. Diese Stringvariable enthält nun Buchstaben, Zahlen und Zeichen (Zeichencodes), die Omsi wiederrum durch die Zeichencodes des Font ersetzt. Die gefundenen Masken der einzelnen Pixelflächen, werden dann zusammengestellt und können auf der Fläche dargestellt werden. Alles was auf der Alphatextur schwarz ist, wird komplett durchsichtig, während alles was weiß ist, mit der Pixelfläche auf der Bildtextur dargestellt wird. Die verwendete Stringvariable muß richtig geschrieben sein, damit Omsi diese Variable auch finden kann. Außerdem muß das Macro eingetragen sein und alle Variablennamen müßen verifiziert werden, sonst ist der Variablenname ungültig.


    6.4.3.2 Fontname

    Im zweiten String wird nun der Name des Font eingetragen, der Verwendet werden soll. Der Dateiname wird nicht mit eingetragen, weil der Dateiname immer OFT lauten muß. Andere Dateiendungen kann Omsi dafür nicht benutzen. Auch hier muß der Dateiname fehlerfrei eingetragen sien, damit Omsi den benötigten Font auch finden kann. Der Font muß sich im Omsi-Unterordner "Fonts" befinden.


    6.4.3.3 Breite der Schrift in Pixel

    Hier wird nun die Breite der Schrift angegeben. Entscheidend ist nicht die Breite der Schrift in dem Font, sondern die Pixel der Grundtextur.


    6.4.3.4 Höhe der Schrift in Pixel

    Die Höhe der Schrift wird ebenfalls anhand der Pixel der Grundtextur festgelegt. Zusammen mit der Breite kann somit eine Schrift größer oder kleiner als im Font dargestellt werden.


    6.4.3.5 Monochrome Farbe oder Farbe der Bildtextur

    Hier sind nur 2 Ziffern zuläßig.

    • 0 = Der Hintergrund aus der Bildtextur soll verwendet werden (kann farbig sein).
    • 1 = Der nachfolgende Farbcode soll verwendet werden.

    Mit diesen Zahlen kann man also einstellen, ob alles mit einer monochromen Farbe dargestellt werden soll, oder ob die Farbe aus der Bilddatei verwendet werden soll. Für das Kennzeichen kann man also eine Frabe auswählen die für alle weißen Pixel in der Alphatextur des Font erscheint, wobei auch bunte Plaketten dann schwarz erscheinen würden. Mit dem Wert Null, wird die Farbe der Bildtextur verwendet, womit also unifarbene Zeichen möglich sind.


    6.4.3.6 Farbcode Rot

    Der Farbwert der roten Farbe. Dieser Wert kann von Schwarz (0) über Weinrot, Dunkelrot, Rot, Hellrot, Blasrot bis Weiß (255) verlaufen.


    6.4.3.7 Farbcode Grün

    Der Farbwert der grünen Farbe. Auch dieser Wert kann von Schwarz (0), über dunkelgrün, Grün, hellgrün bis Weiß erscheinen (255).


    6.4.3.8 Farbcode Blau

    Der Farbwert der blauen Farbe Hier ist alles nochmal in Blau, wie bei den anderen Farben auch.

    Zusammen ergeben diese 3 Farbeinstellungen, in Omsi die Möglichkeit, insgesamt 16.974.593 verschieden Farben darzustellen. Die 3 Farbwerte werden zusammen gemischt.


    6.4.3.9 Orientierung oder Ausrichtung der Schrift

    Mit dem Präfix _enh werden diese und die folgende Zeile ausgelesen. Mit diesem String wird festgelegt, wie Omsi die Schrift auf dem Texturträger ausrichten soll. Dafür stehen folgende Möglichkeiten zur Verfügung

    • 0 = Mittig zentriert
    • 1 = Linksseitig angeordnet
    • 2 = Rechtsseitig angeordnet
    • 3 = Am besten über den seitlichen Abstand zentriert. Die dargestellten Bilddateien werden also genau mittig gesetzt.
    • 4 = Zentriert über den linken Abstand, wenn dort doppelte Leerzeichen eingetragen wurden.
    • 5 = Zentriert über den rechten Abstand, wenn dort doppelte Leerzeichen eingetragen wurden.


    6.4.3.10 Pixel auf Raster ausrichten

    Hiermit kann die Schrift horizontal ausgerichtet werden, wobei nur zwei Möglichkeiten zur Verfügung stehen.

    • 0 = Ausrichtung der verfügbaren Schrifthöhe, wobei oben und unten die gleiche Pixelanzahl eingestellt wird.
    • 1 = Ausrichtung der Schrift, über die Höhe der Pixel des Fonts. Je nachdem wie der Font aufgebaut wurde, kann eine Schrift dann unten aufsitzen oder oben anliegen.


    6.5 Zuweisung einer Texttextur zum Objekt

    Die Reihenfolge, in der die Texttexture-Einträge vorgenommen werden ist hierbei entscheidend. Diese Zählung ist nullbasiert, heißt die Reihenfolge beginnt beim ersten Eintrag mit der 0, der zweite ist Eintrag 1, der dritte ist Eintrag 2 und so weiter. Diese Zählung findet sich auch in der model.cfg unter den jeweiligen Mesheinträgen wieder.

    Unter dem Befehl:

    • Zugehörige Texttextur.

    [useTextTexture]

    X


    steht das X für den Zählwert der Reihenfolge der Texttextur. Daher werden die meisten Texttextur-Einträge durchnummeriert, beginnend mit der Null.


    7 Abschließend

    Wenn ihr dieses Tutorial genau befolgt, sollte es euch leicht fallen, ein Kennzeichen zur Übung zu erstellen. Wenn man weiß, wie ein Kennzeichen oder Wagennummer erstellt wird, sind alle anderen Texttexturen sehr einfach, denn das Prinzip ist immer gleich.

    So könnt ihr auch neue Fonts erstellen oder bereits vorhandene Fonts ändern, umstellen, mit weiteren Zeichen ergänzen oder fehlerhafte Zeichen berichtigen.



    8 Quellen

    • diverse Fonts aus Omsi


    9 Danksagung

    • Danke an Chrizzly92, dass er sich die Mühe gemacht hat, das Omsi-Wiki zu retten, bevor die ganzen wertvollen Tutorials für immer verschwinden!
    • Ich danke auch Modellbusse, für die detaillierte Erklärung, wie man Kennzeichen umsetzt.


    10 Anhang

    Verzagt nicht gleich, wenn es beim ersten Mal nicht gleich funktioniert. Es ist noch kein Meister vom Himmel gefallen. Erstellt euch von allen Dateien, die ihr verändert wollt, immer Sicherungskopien. So könnt ihr fehlerhafte Dateien schnell ersetzen und nocheinmal ganz in Ruhe von vorne beginnen. Sichert auch die funktionierenden Dateien, damit ihr bei einer Neunstallation eure Änderungen wieder einsetzen könnt. Mit jedem weiteren Font den ihr erstellt, lernt ihr dazu und bekommt Erfahrungen, die euch beim nächsten Font helfen werden. Jeder neue Font wird einfacher, als der vorherige, den ihr erstellt habt.

Share