... oder wie der Busfahrer zu seinem Kaffee kam
An dem Beispiel einer Kaffeetasse in der Frontmatrix eines SD202 (genauer gesagt in der Nummernmatrix) möchte ich im Folgenden erläutern, wie man beliebige Sonderzeichen in das Spiel integriert.
Inhalt:
1. Modifikation der Fontgrafiken
2. Modifikation der Fontdefinitionen
3. Anpassungen in der Bus-Scriptdatei
4. Das Ergebnis
1. Modifikation der FontgrafikenZu Beginn müssen wir die Grafik, die wir in der Matrix anzeigen wollen, in die Grafik des Schriftsatzes, der in der Matrix genutzt wird, einfügen. Genauer gesagt ist es bloß ein Alpha-Channel, die weißen Flächen markieren die Punkte die angezeigt werden sollen, die schwarzen Flächen blenden das ungewünschte aus. Die Farbe wird woanders festgelegt und ist für uns erstmal nicht von Belang.
Wir öffnen also die Datei "ANX_L_Alpha.bmp" im Ordner "Omsi\Fonts\". Hier sehen wir alle Zeichen, die auf der Matrix dargestellt werden können, in einer Datei. Zusätzlich sehen wir unten rechts 8 rote Gittermuster, dies sind Platzhalter für weitere Zeichen und zugleich unsere Füllmaske, denn mit diesen Begrenzungen können wir die gewünschten kleine Quadrate bequem mit weiß ausfüllen.
In unserem Fall mit der Kaffeetasse könnte dies z.B. so aussehen:
(Die Kaffeetasse belegt gleich 3 Zeichenplätze, damit sie anschließend auch wohlproportioniert über alle drei Felder angezeigt werden kann)
Sollte eine Grafik einmal keinen Platz mehr für ein weiteres Zeichen haben, können wir die Grafik problemlos nach unten und rechts erweitern, hier ist das allerdings nicht nötig.
Haben wir dies geschafft, speichern wir erstmal, nehmen einen Schluck aus der Wasserflasche (oder Cola, Kaffee, Tee
), und widmen uns dem nächsten Punkt.
2. Modifikation der FontdefinitionenWir haben unsere Grafik jetzt zwar erstellt, aber Omsi weiß davon noch gar nichts und wird mit den zusätzlichen Zeichen nichts anfangen können. Wir müssen dem Programm erst sagen, dass wir unsere Grafik auch als Zeichen interpretiert haben wollen. Dazu öffnen wir die zugehörige Datei "ANX_L.oft" im selben Verzeichnis mit einem handelsüblichen Textedi. Beim durchsehen verstehen wir, dass ein Zeichen in Omsi mit dem Keyword "[char]" definiert wird. Es folgen vier Zeilen mit Parametern zum zu definierenden Zeichen: zuerst kommt das gewünschte Zeichen, ich nutze für die drei Kaffeetassensymbole die Sonderzeichen $, %, &.
Es folgt eine Zeile mit der x-Koordinate, die das Zeichen nach links in der Grafik begrenzt, in unserem Fall ist dies für das erste Zeichen 195, für das zweite 243 und für das dritte 273. Der Ursprung befindet sich in der linken oberen Ecke des Bildes, ab hier wird in beide Richtungen Pixel für Pixel gezählt.
Die dritte Zeile ist die Begrenzung des Zeichens nach rechts, wieder auf der x-Achse. Im Kaffeebeispiel sind dies 223, 262 und 301.
Die letzte Zeile für die Zeichendefinition begrenzt unsere zeichen nach oben, eine Begrenzung nach unten erfolgt nicht, bzw. nur indirekt durch ein ggf. in der nächsten Zeile folgendes Zeichen. Für die Tasse ist der y-Wert für alle drei 192.
Wenn ihr alles richtig gemacht habt, sollte das Ergebnis in der Datei so aussehen:
Auch diese Datei wird gespeichert und ihr dürft euch wieder einen Schluck gönnen
3. Anpassungen in der Bus-ScriptdateiWir wechseln jetzt in das Verzeichnis "Omsi\Vehicles\MAN_SD202\Script" und nehmen uns die Datei "Matrix_D.osc" wieder mit einem Texteditor zur Brust. Nicht erschrecken, die Scriptdatei wirkt komplizierter als die Zeichendatei, ist sie auch, wir nehmen aber nur eine kleine Änderung vor, also keine Angst
Wir scrollen runter bis ca. zur Zeile 255. In diesem Abschnitt wird das Ereignis behandelt, wenn der Linie ein anderer Suffix als "00" folgt und ein Sonderzeichen angezeigt werden soll. Zuerst suchen wir uns einen freien Suffix, ich persönlich habe die 40 genommen, d.h. wenn man als Linie "40" oder "**40" eintippt, soll die Tasse erscheinen (** stellen beliebige Ziffern dar, da sie eh nicht zur Anzeige kommen werden).
Wir bewegen uns der ordnung halber noch ein wenig in der Datei nach unten, bis die Zahlen in den Zeilen mit "l4 xx =" größer als 40 sind. Davor fügen wir unsere zusätzliche Abfrage ein, die ungefähr so strukturiert ist:
wenn(Liniensuffix = 40 )dann:
SetzeLinie(Kaffeetasse);
Ansonsten:
//hier folgt dann das weitere Script
In der Scriptsprache von Omsi funktioniert die Abfrage dann so:
l4 40 = | die Bedingung die erfüllt sein muss, l4 ist hier der Liniensuffix, und der auszuführende Operator befindet sich am Zeilenende
{if} | hier das Schlüsselwort "wenn"
Danach folgt dann unsere Anweisung, es genügt wenn wir sagen, dass der String aus unseren Sonderzeichen $ % & bestehen soll:
"$%&"
Abschließen müssen wir die Bedingung dann noch mit {endif}
Als Kontrollergebnis:
Ihr wisst es, speichern, trinken usw.
4. Das ErgebnisEigentlich ist jetzt alles getan, schwingt euch in den Bus, schaltet die Elektrik ein und tippt als Linie "40" in das IBIS und bewundert das Ergebnis. Sollte etwas nicht klappen, kontrolliert, ob ihr alle Schritte so ausgeführt habt, wie angegeben.
Achja, die Tasse erscheint jetzt nur auf der Frontmatrix. Für die Seite müsst ihr das Prozedere mit den Dateien "" und "" wiederholen, die Scriptdatei bleibt allerdings so wie sie ist, dort besteht kein Änderungsbedarf, denn das einzige Problem ist, dass die Seitenmatrix nicht weiß, wie sie die Zeichen $%& interpretieren soll, daher genügt die Definition
Viel Glück
Ich hoffe, ich konnte euch damit die Zeichenerstellung etwas näher bringen
Gruß Niklas
P.S.: Das Ergebnis mit modifizierter hof-Datei (ich tüftele noch daran, auch das Ziel "Kaffeepause" in dem Script unterzubringen
)