MAP (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
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.

Bild 1: Level 5, Screen 2 im Spiel "Ghost Valley"

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.

Bild 2: Level 5, Screen 2: Code-Map

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 erste Objekt 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).

Bild 4: Screen im Multicolor-Textmodus
Bild 3: Screen aus "Danger Castle" (Normaler Textmodus)

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.

Bild 5: Code-Map für Bild 4

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]