8. Syntax für action7
Hier galt es erstmals eine komplizierte Struktur so zu vereinfachen dass sie in einer Mehrzahl der Fälle relativ unkompliziert genutzt werden kann. Die volle Leistungsfähigkeit der nfo action07 bzw action9 ist daher (bisher) nicht implementiert worden.
Das statement
skip(<number>)
überspringt immer die angegebene Anzahl von sprites, wobei
skip(EXIT)
die aktuelle newgrf beendet.
Der bedingte Sprungbefehl
skipif(<number>,<var>, <conditiontype>,<value>)
ermöglicht Sprünge abhängig von verschiedenen Variablenarten.
8.1. Sprung abhängig von TTDPatch-Variablen
Als TTDPatch-Variablen können hier 4 verschiedene Typen auftreten:
- Zahlenwert (Klima, Versionsnummer, ...)
- Bitwert (TTDPatch flags)
- grf-ID
- cargo label
Entsprechend unterschiedlich gestaltet sich die Syntax des Befehls:
Code:
skipif(6,CLIMATE,==,TEMP)
führt zum Sprung wenn das Klima das temperierte Klima ist. Es stehen ausserdem die Operatoren !=, < und > zur Verfügung.
Code:
skipif(1,FLAGS,BITSET,NEWTRAINS)
führt zum Sprung wenn das bit für das TTDPatch feature "newtrains" gesetzt ist. BITCLR wird verwendet um zu prüfen ob ein bit nicht gesetzt ist.
Code:
skipif(2,GRFACTIVE,+,ALPINESET)
führt zum Sprung wenn die newgrf "alpineclimate" aktiv ist, und
Code:
skipif(1,GRFACTIVE,-+,ALPINESET)
wenn diese newgrf (noch) nicht aktiviert ist, später aber noch aktiviert werden wird:
D.h.
"+" steht für "ist aktiviert",
"-" für "ist nicht aktiviert",
"-+" für "ist nicht aktiviert, wird aber noch aktiviert werden",
"++" für "ist aktiviert, und wird noch aktiviert werden",
"--" für "ist weder aktiviert noch wird später aktiviert werden".
Code:
skipif(reflabel(NOCERE), CARGO, -, {CERE})
führt zum Sprung an die Marke "NOCERE" wenn die Güterart "CERE" nicht zur Verfügung steht.
In diesem Fall muss übrigens der Parameter CERE in bestimmter Weise gekennzeichnet werden ("quoted") weil er sonst nicht als Text ("CERE") sondern als die entsprechende Güterart (CERE) selber behandelt werden würde. Nur durch die Verwendung von Text kann hier nämlich auch auf das Vorhandensein unbekannter Güterarten abgeprüft werden.
Genauso muss übrigens auch bei der Definition einer "cargo translation table" "gequoted" werden, dies als Folge des Vorteils dass wir, anders als in nfo, nicht zwischen den verschiedenen Bezeichnern für Frachtarten in den action0, action2 und action3, etc unterscheiden brauchen:
Code:
cargotranslationtable(32)
{"PASS" "COAL" "MAIL"
"OIL_" "LVST" "GOOD"
"CERE" "WOOD" "IORE"
"STEL" "VALU" "PAPR"
"FOOD" "FRUT" "FISH"
"WOOL" "POTA" "SAND"
"GLAS" "WDPR" "DYES"
"FERT" "OLSD" "RFPR"
"VEHI" "PETR" "BRCK"
"SULP" "CMNT" "FICR"
"LIME" "TOUR"}
8.2. Sprung abhängig von über Parameter vereinbarten Variablen
Dies sind Variablen die üblicherweise über die nfo actionD vereinbart werden. Durch diesen Mechanismus kann auch auf die Werte von TTDPatch flags zugegriffen werden.
Statt zB
Code:
-1 * 9 0D 01 00 06 FE FF FF 00 00 // lade "multihead" Wert in Parameter 1
-1 * 6 07 01 01 02 00 01 // Sprung abhängig vom Wert des Parameters 1
lässt sich nun mit
Code:
skipif(1, patchvar(MULTIHEAD), ==, 0)
derselbe Effekt erzielen. Hierbei ermittelt die Funktion "patchvar" den Wert der entsprechenden TTDPatch-Variablen.
-------------- Ende Teil 7 -------------------
Gruß
Michael