★ APPLICATIONS ★ DIVERS ★ CPC-SHAPEPLOTTER ★ |
CPC-ShapePlotter | Applications Divers |
... sollten Sie beim Spielen des diesmaligen Listings des Monats nicht empfinden. »Horrible Halls« bietet außer schauerlichen Monstern in einer der besten Grafikdarstellungen, die Sie jemals auf dem Schneider-CPC gesehen haben, auch einen Character-Generator für 16farbige Sprites und neue Sprite-Befehle.Ein so großartiges Spiel bedingt einen ebenso hohen Programmieraufwand. Deshalb und wegen der enormen Flexibilität teilt sich das Programm in vier Listings auf. »Shape-Datas« (Listing 1) erzeugt durch RSX-Einbindung sechs neue Basic-Befehle, die mit dem vorangestellten »|« aufzurufen sind. Die Aktivierung erfolgt mit »CALL &8500«. Befehlssyntax und Auswirkungen sind weiter unten im einzelnen angeführt. Bei der Planung lag die Idee zugrunde, möglichst vielseitige und schnelle Befehle zu erzeugen. Das hat dazu geführt, mehrere Speicherbereiche für die Ablage von Daten freizuhalten, so daß der Speicherbereich ab 8500 hex nicht mehr zur freien Verfügung steht. Es lassen sich aber noch alle Zeichen ab ASCII-Code 32 neu definieren. Den größten Platz nimmt der Motivspeicher ein, der sich durch das Programm »Shape-Plotter« (Listing 2) mit 40 verschiedenen Motiven füllen läßt. Eine Besonderheit stellt der Adressenspeicher dar. Bei der Planung eines schnellen MOVE-Befehls stört die umständliche Berechnung der senkrechten Bildschirmadressen. Das führte zu der Idee, die ieweils erste Byteadresse einer Linie des Shapes zu speichern. Geschwindigkeits-Optimierung Bei einer Bewegung werden nun nur die Verschiebeadressen neu berechnet. Zusätzlich enthält der Adressenspeicher die Koordinaten der Shape-Ecken (siehe Befehl SETSH), die für den Berührungstest benötigt werden. Der Berührungstest wird bei jedem SET-, MOVE-und SHOOT-Befehl durchgeführt und läßt sich entsprechend nutzen (siehe PEEKs und POKEs). Außerdem enthält der Adressenspeicher die dem Shape zugeordnete Motivnummer und — falls es sich um einen Run-Shape handelt — die entsprechende Bewegungsphase. Der RND-Speicher enthält Richtung, Nummer und Anzahl der Wiederholungen, in der ein Shape zufällig bewegt werden soll. Wird ein Shape mit »|MOVESH,nummer,richtung« mit gesetztem siebten Bit (Variable »rich-tung« größer 127) bewegt, so erfolgt die Speicherung mit seiner Nummer im RND-Speicher (bis zu acht Stück). Das R-Register weist ihm eine zufällige Richtung sowie die Anzahl der Bewegungsphasen zu. Bei einem erneuten Aufruf mit gesetztem siebten Bit, überprüft nun das Programm, ob das Shape bereits abgelegt ist. Ist das der Fall, wird geprüft, ob die Bewegung in diese Richtung noch einmal auszuführen ist (bis zu neunmal). Wenn nicht, erzeugt das R-Register eine neue Richtung mit Wiederholungen. Durch diese Methode ist gewährleistet, daß sich Shapes über den ganzen Bildschirm hin-und herbewegen und nicht auf der Stelle »herumzittern«. Der CLR-Speicher beinhaltet lediglich 144 Nullen und stellt im Grunde genommen ein schwarzes Motiv dar. um mit der gleichen Befehlsfolge, die zum Setzen eines Shapes in den Bildschirmspeicher dient, diesen auch wieder zu löschen. Der letzte Speicher ist der Shoot-Speicher. Er beinhaltet die beiden Bildschirmadressen und die Richtung eines Schusses (bis zu sechs Schüsse gleichzeitig). Die Befehle: Der Interpreter bemerkt bei allen Befehlen Falscheingaben; er löst dann einen Rücksprung ins Basic aus. Zusätzliche Fehlermeldungen sind jedoch nicht implementiert. Es ist zu beachten, daß beim Löschen des Bildschirms mit »CLS«, »CLG« oder »MODE 0« die Shapes im Adressenspeicher erhalten bleiben und somit immer noch vorhanden sind, wenn man sie auch nicht mehr sieht. Sie sollten also jedes gesetzte Shape auch wieder mit »|CLRSH,nummer« löschen, wenn ein neues Bild aufzubauen ist. Neue Befehle
setzt Shape Nummer < a > mit Motivnummer < b > an die Bildschirmkoordinaten < x > und < y >. DieShape-nummer ist willkürlich wählbar; sie dient zur geordneten Ablage im Adressenspeicher. Die Motivnummern werden bei der Erzeugung der Motive mit dem Programm »Shape Plotter« (Listing 2) verteilt. Der Bildschirm ist für die Befehle von 0 bis 80 in x-Richtung und von 0 bis 50 in y-Richtung aufgeteilt (nicht 79 und 49!). Für die y-Richtung sollten nur gerade (durch 2 teilbare) Werte benutzt werden, sonst zieht der Interpreter automatisch den Wert 1 ab, was zu Verlusten bei der Ausführungs-Geschwindigkeit führt.
setzt einen Schuß links oder rechts neben das gewählte Shape, bewegt ihn jedoch nicht. Da die weitere Fortbewegung in der Geschwindigkeit variabel sein soll, ist es nötig, den Befehl in entsprechenden Zeitintervallen ohne Parameter aufzurufen: 100 EVERY 10,1 GOSUB 1000 |
Byte 1 | Byte 2 | ||
Bit | Bedeutung | Bit | Bedeutung |
7 | Hindernis 4 | 7 | Aktion 4 |
6 | Hindernis 3 | 6 | Aktion 3 |
5 | Hindernis 2 | 5 | Aktion 2 |
4 | Hindernis 1 | 4 | Aktion 1 |
3 | Wand unten | 3 | Besonderheiten 4 |
2 | Wand oben | 2 | Besonderheiten 3 |
1 | Wand rechts | 1 | Besonderheiten 2 |
0 | Wand links | 0 | Besonderheiten 1 |
Ist das jeweilige Bit gesetzt, verzweigt der Computer in ein entsprechendes Unterprogramm. Beim Verlassen eines Raumes werden entsprechend der neuen Raumkoordinaten die neuen Bytes ermittelt. Diese Art der Programmierung macht das Programm sehr flexibel.
Bis zu 5000 Bilder!
Der Zahl der Räume sind sehr hohe Grenzen gesetzt (4000 bis 5000 sind vom Speicherbedarf her möglich). Sie müssen nur die Werte für < xmax > und < ymax > angleichen. Die einzelnen Unterprogramme lassen sich leicht ändern und es können neue Ideen eingebaut werden. Es ist möglich, mit völlig neuen Motiven ein quasi anderes Spiel zu spielen. Eine sehr wichtige Rolle spielen die »Flags«. Sie erlauben auf sehr einfache Weise, jeweilige Spielzustände zu kontrollieren und entsprechend zu reagieren. Fast alle Variablen sind am Anfang des Programms festgelegt. Die einzelnen Gruppen kennzeichnen REMarks. In Zeile 220 von Listing 3 sind die Tasten mit ihren Nummern festgelegt. Wer andere Tasten oder den Joystick benutzen möchte, kann die Werte entsprechend der INKEY-Nummern im Handbuch ändern. Die Standard-Tastenbelegung:
Das Spiel sollte niemals durch einmaliges Drücken der BREAK-Taste unterbrochen werden, weil die Tastatur- und Schuß-Routine über Interrupts abgefragt wird. Für eine Unterbrechung stehen deshalb die Tasten »H« und »S« zur Verfügung. Das Ziel des Spieles ist. die mit Gold und Edelsteinen gefüllte Schatzkammer zu finden. Aber auf diesem Weg stellen sich Ihnen grauenvollste Gefahren entgegen. Jede Berührung eines der Hindernisse vermindert Ihre Lebensenergie:
Berührung | Energieverlust |
Käfer und Fledermäuse | 4 Punkte |
Geister | 8 Punkte |
Goblins | 300 Punkte |
Feuerbälle | 500 Punkte (ein Leben) |
Der Vorrat läßt sich jedoch durch Abschießen der Geister wieder um jeweils 30 Punkte auffüllen.
In einigen Räumen finden Sie Waffen und Schlüssel, die Sie durch Druck auf die Taste »I« mit sich nehmen können. »Horrible Halls« ist nur lauffähig mit hinter dem Hauptprogramm auf Kassette gespeicherten Shape-Code und den Motiven. In Zeile 310 lassen sich die Startbedingungen ändern. So können Sie durch andere Werte für < x > und < y > in jedem beliebigen Raum starten, wobei es denkbar ist. daß Ihre Spielfigur vom Programm nicht gesetzt werden kann, wenn es auf ein Hindernis treffen würde. In der gleichen Zeile können Sie auch die Zahl der Leben manipulieren, Werte größer 98 sind aber nicht zulässig.
Aber nun genug der langen Rede und nichts wie ran ans Spielen. Selbstgestalten und Experimentieren.
|
|