MAP (TSB)
MAP (TSB) | |
Syntax: | MAP <zl>,<sp>,<tile$>,<col-array%> |
Parameter | |
zl: Bildschirmzeile | |
sp: Bildschirmspalte | |
tile$: String aus Map-Codes | |
col-array%: Integer-Array mit den Map-Farben | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Bildschirmkontrolle |
Aufgabe: | Ausgabe von 2x2-Kacheln zur Bildung eines Spielfeldes aus Chars |
Abkürzung: | mA |
Token: | $64 $B1 (100 177) |
Verwandte Befehle | |
MOVE - FCHR - FILL - FCOL - INV - COLOUR |
Dieser Artikel beschreibt das TSB-Schlüsselwort MAP (TSB).
Es gibt kein entsprechendes Simons'-Basic-Schlüsselwort.
Typ: Anweisung Syntax: MAP <zl>,<sp>,<tile$>,<col-array%>
Genau wie X! gehört MAP zu den TSB-Befehlen, die nur temporär Teil des TSB-Befehlssatzes sind. MAP muss nachgeladen und ausdrücklich aktiviert werden, um es zu nutzen, sonst wird ein Aufruf des Befehls mit einem ?NOT YET ACTIVE ERROR beantwortet.
MAP wurde eingeführt im Zusammenhang mit dem in TSB geschriebenen Spiel "Ghost Valley[1]" von Christian Nennewitz. Dort dient es dazu, das Spielfeld in großer Geschwindigkeit komplett aufzubauen (s. erstes Bild). Es setzt einen speziell für diesen Befehl konzipierten Zeichensatz voraus. In ihm müssen die dargestellten Gegenstände aus je vier Einzelzeichen zusammengesetzt sein, die im Speicher hintereinander liegen, z.B. die Eingangstür links oben im Bild. Jedes dieser Objekte hat eine Grundfarbe (die Tür ist orange, das Wasser ist blau usw.), die aber vom Programm aus mithilfe des Befehls FCOL noch ergänzt werden kann (ein schönes Beispiel dafür im dritten Bild, das aus einem kommerziellen Spiel ("Danger Castle") entnommen und mit MAP nachempfunden wurde).
Damit der MAP-Zeichensatz auch alphanumerische Zeichen für Beschriftungen und Interaktion zur Verfügung stellen kann, ist die Anzahl der 2x2-Objekte auf 48 begrenzt. Sie beginnen bei einem Byte-Offset von 512 Bytes (also ab dem Zeichen mit dem Bildschirmcode 64). Wenn der Zeichensatz z.B. an Position $E000 im Speicher liegt, beginnen die Objekte daher bei Position $E200.
Um einen zeitsparenden Weg für die Darstellung eines MAP-Objekts zu bieten, gehorcht der Aufruf eines Objekts in MAP einer Kodierung in einem String (<tile$>). Dabei erhält das Objekt Nummer 1 den Code '#' (Wert: 35) und alle weiteren rücken im PETSCII-Code eine Stelle weiter, bis hin zum Wert (35 plus maximal 47 gleich) 82 (Code 'r'). Im zweiten Bild sieht man die Code-Strings für den vollständigen Bildaufbau für Level 5, Screen 2 im Spiel "Ghost Valley", wie er im ersten Bild zu sehen ist. Die Tür hat den Code '&', das Wasser den Code '6' usw. Objekte, die in Bild 2 nicht zu sehen sind, dafür aber in Bild 1, sind Sprites. Zusätzlich: Codes, die im zweiten Bild zu sehen sind, nicht aber als Objekte in Bild 1 auftauchen, sind "geheime", unsichtbare Objekte, die im Spiel bestimmte, zunächst überraschende Vorgänge auslösen (Codes '3' und '?').
Die Farbe der Objekte wird dem Befehl MAP über ein Integer-Array mitgeteilt (<col-array%>), dessen Inhalt der Anordnung bei der Objektkodierung folgt. Der erste Eintrag im Farb-Array ist dem Code '#' zugeordnet usw., der letzte dem Code 'r'. Im Aufrufbefehl steht das Farbarray als letzter Parameter. In der Klammer für den Index steht immer die Indexnummer für den ersten Farbeintrag, normalerweise 0. Durch das Verwenden dieser Basisnummer könnte man für die Screens auch unterschiedliche Farben für gleiche Objekte vorsehen (nicht 0 als Basisindex angeben, sondern eine höhere Zahl, jenseits der Farben für den ersten Screen).
Selbstverständlich kann MAP auch Multicolor-Zeichensätze darstellen (viertes Bild, auch dieses aus einem kommerziellen Spiel, "Platman Worlds"). Wegen der besseren (und wahrscheinlich umfangreicheren) Einfärbungsmöglichkeiten könnte das Nachfärben mit FCOL einen spürbaren Moment dauern, das Ergebnis sollte jedoch diesen kleinen Mangel verschmerzbar machen.
Um den Multicolor-Textmodus zu aktivieren, braucht man zusätzlich die Befehle BCKGNDS und MULTI ON. Der folgende Code zeigt die Startsequenz für die Anzeige von Bild 4.
110 screen: multi on: bckgnds 128+12,0,1,x: .recolor
In der Prozedur SCREEN arbeitet der MAP-Befehl und gibt alle Objekte (hier noch nicht im Multimodus) aus, wie in der Screen-Map in Bild 5 zu sehen, was so schnell geht, dass der fehlende Multimodus nicht wahrgenommen wird.
Danach wird Multi eingeschaltet (MULTI ON) mit den Farben 12 (mittelgrau) für den Hintergrund ($D021) und schwarz und weiß (BCKGNDS) für die für den ganzen Screen gültigen zwei Multifarben 0 (schwarz, wird bei den Objekträndern eingesetzt) und 1 (weiß, zeigt die hellen Lichter auf den Objekten). In der Prozedur .RECOLOR nimmt das Programm dann mit FCOL alle zusätzlichen Einfärbungen vor, es setzt z.B. das umfangreiche rot-gelbe Schachbrettmuster.
Ganz rechts unten im Bild 4 sieht man ein Beispiel für die verbliebenen alphanumerischen Zeichen.
Die Beispielprogramme für die beiden letzten hier gezeigten Bilder von MAP befinden sich auf der TSB-Disk[2] ("map.dmo" und "multimap.dmo").
Anmerkungen[Bearbeiten | Quelltext bearbeiten]
- ↑ Ghost Valley - https://www.godot64.de/TSB/ghostvalley.html
- ↑ Download der TSB-Disk - https://www.godot64.de/TSB/downloads.html