Die wichtigsten Elemente in einer Fahrplandatei sind die Bewegungen. Dies sind alle die Zeilen, die nicht mit einem $ beginnen und nicht Kommentare sind. Sie beschreiben Züge und wie sich diese auf dem Bildschirm bewegen. Zur Vereinfachung werden in diesem Dokument alle Zusammenstellungen von einzelnen Fahrzeugen nebeneinander als "Züge" bezeichnet, obwohl viele andere Typen von Fahrzeugen (Flugzeuge, Schiffe, Raumschiffe und sogar Menschen und Tiere) in Traffic benutzt und von den gleichen Kommandos kontrolliert werden können. Ein "Zug" ist folglich definiert als eines oder mehrere Fahrzeuge, weshalb eine einsame Lokomotive, die ohne Waggons über den Bildschirm fährt, ebenfalls als Zug bezeichnet wird.
Die Bewegungen beziehen sich - mit Ausnahme der Szenen - immer auf eine einzelne Trasse. Die Bewegungen benötigen für ihren Ablauf auf dem Bildschirm einen entsprechenden Platz mit bestimmter Höhe. Wenn nicht anders festgelegt, wird die horizontale Position zufallsgesteuert bestimmt. Sie belegt den benötigten Platz und beginnt mit der Bewegung: Hinter- und/oder Vordergrundbild(er) werden auf den Schirm gemalt, Züge erscheinen, erledigen ihre festgelegten Bewegungsabläufe und Vorder- und Hintergrundbilder werden entfernt. Danach wird die nächste Bewegung ausgewählt, auf dem Bildschirm plaziert, und so weiter. Wenn für eine weitere Bewegung nicht mehr genügend Fläche zur Verfügung steht, wird auf das Ende einer anderen Bewegung und die Freigabe von Fläche auf dem Bildschirm gewartet.
Im Gegensatz dazu definiert eine Szene einen Bereich - üblicherweise (aber nicht notwendigerweise) von einem Hintergrundbild ausgefüllt - innerhalb derer man mehrere Trassen festlegen kann. Trassen sind die Bereiche, in denen Bewegungen ablaufen können. Diese Trassen können sich überlappen - sowhl vollständig als auch teilweise. Jede Trasse besitzt ihre eigenen Kontrollen - sie verhält sich wie eine unabhängige Zeile. Die Fahrzeuge auf diesen Trassen werden so behandelt, als ob diese vor/hinter einander in einer vordefinierten Art angeordnet sind. Es ist sogar möglich, Vorder- und Hintergrundelemente nicht nur hinter der letzten oder vor der ersten Trasse zu platzieren, sondern auch zwischen den einzelnen Trassen.
Eine Sektion (die Kommandos $SECTION, das korrespondierende Abschlußkommando $ENDSECTION und die Bewegungen und eventuellen weiteren Sektionen dazwischen) verhalten sich wie eine einzige Bewegung. Sie benötigt ein definiertes Maß an Bildschirmplatz, belegt diesen, läuft für eine bestimmte Zeit, wird beendet und gibt den Schirmbereich wieder frei.
Insgesamt verhält sich die Sektion selbst wiederum ähnlich wie ein eigener Bildschirm: sie stellt Platz für eventuelle Untersektionen ("Kinder") zur Verfügung, die Bewegungen und andere Sektionen zwischen $SECTION und $ENDSECTION - Kommandos.
Eine Gruppe ist eine wesentlich einfachere Konstruktion. Sie verhält sich nicht wie ein Bildschirm, sondern wie eine einzelne Zeile. Sie kann nur Bewegungen enthalten, jedoch keine weiteren $SECTION, $GROUP oder $LINE - Kommandos zwischen $GROUP und $ENDGROUP - Kommando.
Alle Bewegungen laufen in dem exakt gleichen Bereich auf dem Bildschirm ab. Wen das $GROUP - Kommando zumindest einen der Parameter FG= ; BG= ; W= ; WP= ; enthält, werden Vorder- und Hintergrundbild(er) - oder zumindest die benutzte Trasse - bereits vor dem Start der ersten Bewegung dargestellt und erst nach dem Ende der letzten Bewegung wieder gelöscht. Dies bedeutet, daß der Hintergrund (wenn benutzt) auf dem Bildschirm während des gesamten Ablaufs aller Inhalte der $GROUP bestehen bleibt. Die Punkte entlang der Trasse werden mit der Festlegung der Trassendarstellung oder von Vorder- und Hintergrundbild(ern) im $GROUP - Kommando definiert, individuellen Punkte innerhalb der enthaltenen Bewegungen können nicht definiert werden. (Im Gegensatz hierzu gilt: Wenn die Parameter FG= ; BG= ; W= ; WP= ; in einer Sektion benutzt werden, werden diese nur auf die Bewegungen und Segmente innerhalb vererbt: Jede Bewegung, die nicht über eigene Definition dieser Parameter verfügt, benutzt den gleichen Vorder-/Hintergrund, diese verschwinden jedoch mit dem Ende der Bewegung und werden erneut bei der nächsten Bewegung gezeigt, möglicherweise jedoch an einer anderen vertiaklen Position.)
Die erste Version des traffic - Bildschirmschoners konnte nur mit festen Zeilen umgehen - alle Bewegungen wurden auf Zeilen bezogen und deren Position war beim Programmstart fixiert. Anzahl und Position der Zeilen wurde auf Basis der ABOVE, BELOW, MINSPACE, MAXLINE – Parameter kalkuliert (und des IMGY - Parameters, der maximalen Fahrzeughöhe, die durch den Wert in der Fahrzeugliste fixiert ist). In der aktuellen Version werden die Zeilen für Bewegungen per Zufall plaziert, die Methode fixierter Zeilen kann man jedoch über die Eingabe von $LINE - Kommandos in die Fahrplandatei nachbilden. Da eine $SECTION sich gegenüber ihren Kindern wie ein eigener Bildschirm verhält, ist es möglich, $LINE - Kommandos nicht nur allgemein in der Fahrplandatei zu benutzen, sondern auch innerhalb einer $SECTION. Auch hier werden mögliche Anzahl und Position solcherart fixierter Zeilen auf Basis der ABOVE, IMGY, BELOW, MINSPACE, MAXLINE – Parameter kalkuliert: der Parameter MAXLINE bestimmt die mögliche Anzahl der Zeilen. Wenn die Höhe des Bildschirms oder der Sektion dividiert durch den benötigten Platz je einzelner Zeile (Summe der Werte ABOVE, IMGY, MINSPACE und MAXLINE) einen anderen Wert ergibt, wird der niedrigere davon verwendet. Die mögliche Anzahl solcher Zeilen und ihre Positionen (der Abstand dazwischen) werden errechnet. Diese Berechnung bestimmt schließlich die mögliche Anzahl und Position der fixierten Zeilen innerhalb einer Sektion oder innerhalb des Bildschirmschoner-Fensters.
Die Bewegungen zwischen einem $LINE und einem folgenden $ENDLINE - Kommando gehören zu dieser Zeile. Aus Kompatibiltätsgründen (und weil eine $LINE nicht rekursiv eine weitere $LINE enthalten kann) muß die Zusammenstellung der Bewegungen innerhalb einer $LINE zwangsläufig mit einem korrespondierenden $ENDLINE abgeschlossen werden. Die Zusammenstellung wird ebenfalls automatisch durch $ENDSECTION, $GROUP, $SECTION oder das nächste $LINE - Kommando abgeschlossen.
Es gibt zwei Formate des
$LINE - Kommandos: mit und ohne L= ; - Parameter für die Zeilennummer. Wenn ein $LINE - Kommando diesen Parameter besitzt, belegt er exakt die Zeilen, die in dem Parameter genannt werden. Sind dies mehrere Zeilen, werden aus der zum $LINE - Kommando gehörenden Zusammenstellung an Bewegungen diese dynamisch den enthaltenen Zeilen zugewiesen. So wird die Trasse, deren Bewegung gerade beendet wurde, die nächste Bewegung erhalten (abhängig vom Parameter SEQUENCE). Enthält die Vorgabe mehr Zeilen als tatsächlich verfügbar sind, werden die überzähligen Nummern verworfen. Wenn alle Nummern eines $LINE - Kommandos verworfen werden müssen, werden die zugeordneten Bewegungen nicht ausgeführt.
Wenn das $LINE – Kommando keinen L= - Parameter besitzt, werden die zu dieser $LINE gehörenden Bewegungen alle verfügbaren Zeilen belegen, die von $LINE - Kommandos mit Nummern noch nicht belegt sind. In diesem Fall wird der gesamte verfügbare Raum auf dem Bildschirm (oder innerhalb einer Sektion) von fixierten Zelen belegt. Keine weiteren Gruppen, Sektionen, Segmente oder Bewegungen über die zu dieser $LINE gehörenden Bewegungen hinaus können zusätzlich ablaufen, sie werden vom Programm ignoriert.
Wenn nur $LINE - Kommandos mit expliziter Zeilenliste benutzt werden, ist es möglich, daß in der Sektion oder auf dem Bildschirm restlicher Raum verfügbar ist. Damit können weitere Elemente als die zu dieser $LINE gehörende ablaufen. Diese zusätzlichen Bewegungen werden zufällig an den Positionen innerhalb der Sektion plaziert, die noch nicht über Zuordnungen des $LINE - Kommandos belegt sind.
Das $SCENE - Kommando eröffnet eine kombinierte Struktur. Es belegt vertikalen Raum entsprechend dem HEIGHT=; - Parameter. Es sollte ein oder mehrere $PATH - Kommandos enthalten. Die $PATH - Kommandos bezeichnen die Trassen, auf denen sich die Fahrzeuge bewegen. Der Y=; - Parameter des $PATH - Kommandos bestimmt die Position der Trasse - die Grundlinie, auf der sich die Fahrzeuge bewegen. Das Koordinatensystem des $SCENE - Kommandos beginnt am unteren Ende der festgelegten Fläche und wächst nach oben hin. Die Bewegungen zwischen dem $PATH - und dem $ENDPATH - Kommando werden an dieser Position ausgeführt.
Die zuerst definierte $PATH -Trasse wird vor allen weiteren angeordnet, die zuletzt definierte $PATH -Trasse wird die entfernteste sein - sie wird von allen anderen verdeckt werden. Die Höhe der Trasse - die maximale Höhe der dort bewegten Fahrzeuge - sollte festgelegt werden. Im Normalfall wird der verebte Wert des Parameters IMGY=; den Bedürfnissen entsprechen. Bei Benutzung des MM&MM-kompatiblen Bildersets, das mit Traffic geliefert wird, passen die meisten Fahrzeuge in die vorgesehenen 58 Pixel. Wenn einige der wenigen höheren Fahrzeuge benutzen werden sollen, muß die Höhe mit dem Parameter IMGY=; spezifiziert werden - wie auch für die anderen Segmentationskommandos und einfachen Bewegungen. Die anderen zwei Größenparameter ( ABOVE=; und BELOW=; ) existieren nicht im $PATH - Kommando, der durch Hintergrund- und Vordergrundbilder belegbare Bereich ist bereits durch die Größenangabe des zugehörigen $SCENE - Kommandos und die Position des $PATH - Kommandos festgelegt.
Sowohl das $SCENE als auch das $PATH - Kommando kann Hintergrund- und Vordergrundbilder enthalten. Die Anordnung, nach der diese angeordnet werden ist (vom nächsten zum entferntesten):
- Vordergrund der $SCENE
- Vordergrund des ersten $PATH
---- die Fahrzeuge des ersten $PATH bewegen sich hier
- Hintergrund des ersten $PATH
- Vordergrund des zweiten $PATH
---- die Fahrzeuge des zweiten $PATH bewegen sich hier
- Hintergrund des zweiten $PATH
...- Vordergrund des letzten
$PATH
---- die Fahrzeuge des letzten $PATH bewegen sich hier
- Hintergrund des letzten $PATH
- Hintergrund der $SCENE
Wie man sieht, kann jede Lage zwischen den bewegten Fahrzeugen oder vor dem ersten/hinter dem letzten $PATH auf zwei verschiedene Arten angesprochen werden. Natürlich können in allen oben genannten Lagen Objekte platziert werden, man erreicht jedoch das gleiche Resultat, wenn man nur eine der beiden Möglichkeiten benutzt.
Jedes $PATH - Kommando besitzt seine eigenen Bewegungen, die an der angegebenen Position ablaufen. Die Bewegungen laufenb vollständig unabhängig voneinander ab. Die Lebensdauer eines $SCENE - Segments ist in ähnlicher Art begrenzt wie beim $SEGMENT - Kommando. Wenn alle $PATH - Kommandos ihre Bewegungen abgearbeitet haben oder die $SCENE beendet wird (zum Beispiel durch Ablauf der festgelegten Anzeigedauer), wird die gesamte $SCENE gelöscht. Selbst wenn keine weiteren Bewegungen in einer durch ein $PATH - Kommando definierten Trasse mehr gestartet werden, verbleiben die Vordergrund- / hintergrundelemente auf dem Schirm, alle Vorder- / Hintergrundelemente gehören zusammen.
Wie lange verbleiben die komplexen Elemente (Sektionen, Gruppen, feste Zeilen) auf dem Schirm? Die festen Zeilen haben keine eigene Lebensdauer. Sie existieren nur so lange, wie ihre enthaltende Sektion existiert. Die absolute Sektion (das Fenster oder der gesamte Bildschirm mit dem Bildschirmschoner) lebt bis der Benutzer das Programm durch einen Tastendruck, eine Menüauswahl oder eine Mausbewegung beendet, abhängig von den Angaben für die $NOSTOPONMOVE, $NOSTOPONKEY and $NOSTOPONCLICK – Kommandos oder die vergleichbaren Konfigurationen dies erlauben. Die vorgegeben Lebensdauer einer Sektion oder Gruppe umfaßt den einmaligen Ablauf aller Kinder. Man kann die Lebensdauer mit Parametern verändern – die Lebensdauer kann durch die exakte Anzahl ausgeführter Bewegungen begrenzt werden, durch die Zeit in Sekunden oder kann unbegrenzt sein.
Alle Sektionen, Gruppen und Zeilen haben ihre eigene Zusammenstellung an Bewegungen (oder - im Falle von Sektionen - auch noch enthaltene Untersektionen). Sie wählen die nächste Bewegung für die Darstellung auf dem Schirm abhängig von einer Vorgabe für den Ablauf aus. Wenn keine spezielle Vorgabe für den SEQUENCE = ; - Parameter existiert, werden Sequenzvorgaben von der Elternsektion geerbt. Man kann den Ablauf für die jeweilige Sektion über das höchstmögliche Kommando $SEQUENCE festlegen. Wird dieses nicht angegeben, werden die Vorgaben über das Konfigurationsfenster vorgegeben (unterschiedlich für den Vollbild- oder Fenstermodus)
Die Lebensdauer einer Sektion und der darin enthaltene Ablauf von Bewegungen sind zwei voneinander unabhängige Eigenschaften. Jede Sektion "erinnert" sich daran, welche Bewegungen bereits abgelaufen sind. Wenn die Lebensdauer kürzer ist, als der Ablauf aller Bewegungen in der Sektion (nicht alle Bewegungen werden in einem ersten Leben gezeigt) und die ausgewählte Sequenz nicht die vollständige Zufallsauswahl ist, wird die Sektion ihre Arbeit fortsetzen, wenn sie das nächste mal auf dem Schirm dargestellt wird. Wenn die Sequenz FIXED oder CONTINUED ausgewählt wurde, wird die nächste Bewegung dargestellt, die der letzten begonnenen beim vorigen Ablauf nachfolgt. Wenn die RANDOM_SEQUENCE gewählt wurde, wird eine Wiederholung einer Beweegung vermieden , bevor alle Bewegungen einmal abgelaufen sind. Der einzige Unterschied zwischen FIXED und CONTINUED ist, dass nach einem Stop und Neustart des Bildschirmschoners (oder nach einem Start mit dem Test-Knopf im Konfiguratinsfenster) die Sequenz FIXED immer vom Anfang an beginnt, während sich CONTINUED daran erinnert, an der Stelle weiter zu arbeiten, an der abgebrochen wurde.
In den folgenden Bereichen werden die individuellen Parameter der Kommandos $SECTION , $GROUP und $LINE beschrieben. Die gemeinsamen Parameter zur Bestimmung von Abmessung, Lebensdauer, Trasse und beschreibendem Textwerden in Unterkapiteln beschrieben.