APPLICATIONSDIVERS ★ CPC-SHAPEPLOTTER ★

CPC-ShapePlotterApplications 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
|SETSH,a,b,x,y
< a >< b >< x >< y >
1 bis 321,5,9 = Run
13 bis 24 = groß
25 bis 40=klein
0 bis 73
>127 = Zufall
0 bis 42
>127-Zufall

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.

|MOVESH,a,r
< a >< r >
1 bis 321 = links
2 = rechts
3 = oben
4 = unten
>127 Zufall


bewegt Shape < a > in Richtung < r >. Die Shape-Art erkennt der Interpreter (Run. groß, klein). Große und kleine Shapes sind lediglich zu verschieben, wogegen bei einem Run-Shape auf die Bewegungsphasen geachtet wird (siehe Beschreibung des Programms »Shape Plotter« weiter unten).

|SWAPSH,a,b
< a >< r >
1 bis 321,5,9=Run
13 bis 24=groß
25 bis 40=klein


Der Befehl dient dem schnellen Austausch von Motiven. So lassen sich statische Bewegungen vortäuschen (siehe Programm »Horrible Halls« aus Listing 3, Fledermäuse, Käfer. Feuerbälle). Weist man einem Runshape ein neues Motiv zu, so bleibt im Speicher das alte erhalten und taucht bei der nächsten Bewegung wieder auf.

|SHOOSH,a,r
< a >< r >
1 bis 321 links
2 rechts

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
:
:
1000 |SHOOSH,1,1 : RETURN

Es besteht aber auch die Möglichkeit, den Befehl in die Tastaturabfrage eines Spielprogramms einzusetzen oder ähnliche, regelmäßig aufgerufene Unterprogramme. Der einfache SHOOSH-Befehl (ohne Parameter) prüft im Schußspeicher ob geschossen wurde, bewegt die vorhandenen Schüsse weiter und löscht sie bei einem Treffer.

|CLRSH.a löscht das Shape mit der Nummer < a >,
|CLRSH löscht sämtliche Shapes.

Scharf geschossen

Abfragen und Eingriffe sind durch verschiedene PEEKs und POKEs einfach zu realisieren. Die entsprechenden Adressen finden Sie im folgenden:

PEEK &86FF An dieser Adresse legt der Berührungstest die Nummer des Shapes ab, der bei einem SET-, MOVE- oder SHOOT-Befehl berührt wurde. Liegt keine Berührung vor. ergibt der Test eine 0.
PEEK &8CB3 Linker x-Wert von Shape Nummer 1
PEEK &8CB4 Rechter x-Wert von Shape Nummer 1
PEEK &8CB5 Oberer y-Wert von Shape Nummer 1
PEEK &8CB6 Unterer y-Wert von Shape Nummer 1. Die Koordinaten aller weiteren Shapes errechnen sich durch folgende Formel:
Linker x-Wert = »PEEK(&8CB3+((nummer-1)*56))«

Die Werte der anderen drei Richtungen ergeben sich aus den entsprechenden Adressen.

POKE &86FE,0 Diese Adresse liest der Berührungstest aus. Ist eine 1 gesetzt (Standard), so ist eine Überla-gerung mehrerer Shapes nicht möglich. Das Shape wird also nicht bewegt oder gesetzt, falls eine Berührung vorliegt. Bei Null ist eine Überlagerung möglich und das zuerst gefundene Shape wird mit seiner Nummer angegeben (siehe »PEEK(&86FF)«).

Direkter Speicherzugriff

POKE &8700,linksbegr, POKE &8701.rechtsbegr. POKE &8702,obenbegr, POKE &8703,untenbegr : Diese vier POKEs begrenzen den Bildschirmbereich entsprechend der x- und y-Koordinaten des SET-Befehls und werden bei Ausführung der Befehle SETSH, MOVESH und SHOOSH beachtet. Der Standard ist links 0. rechts 80, oben 0, unten 50; also der gesamte Büdschirmbe-reich.

Der Programmteil »Shapeplotter« (Listing 2) erlaubt, Motive für die mit dem Programm »Shape-Datas« (Listing 1) erzeugten Shape-Befehle zu generieren. Da es diese Befehle auch nutzt, muß der mit dem Programm »Shape-Datas« erzeugte Maschinencode hinter dem Hauptprogramm auf Kassette gespeichert sein. Der »Shapeplot-ter« arbeitet menügesteuert und benutzt ausschließlich Unterprogramme, die jeweils mit einem oder mehreren Kommentaren versehen sind. Zusammen mit diesem Einführungstext und den selbsterklärenden Variablen ist es nicht schwer, sich darin zurechtzufinden.

Neue Motive

Zum Programmpunkt 3, »Shape erstellen < RUN > «:

Das Run-Shape ist so im Speicher abgelegt, daß zuerst ein Motiv der rechten Bewegungsphase entwickelt werden muß. Das Programm kopiert das Motiv dann spiegelbildlich und legt es im Speicher ab. Daraufhin muß das zweite Motiv der rechten Bewegungsphase entwickelt werden. Um alle Menüpunkte durchzugehen, ist der komplette Motivspeicher des Programms »Horrible Halls« hinter dem Hauptprogramm und dem Shape-Code gespeichert. Über den Menüpunkt »7« können Sie es unter dem Namen »MOTIVE« laden. Es lassen sich dann aber keine weiteren Motive entwerfen.

Der Programmteil »Motiv-Datas« (Listing 4) ist ein Basic-Hexlader, der den kompletten Motivspeicher für das Spiel »Horrible Halls« erzeugt. Die Motive wurden mit dem Programm »Shapeplotter« generiert und sollten auf der Kassette hinter »Horrible Halls« und »Shape-Code« gespeichert sein.

Kernpunkt des Programms »Horrible Halls* (Listing 3), einer Art Labyrinthspiel, ist die Haupt-Interpreter-schleife. Jeder der Räume (in diesem Fall 625 an der Zahl) ist durch 2 Byte bitweise verschlüsselt. Entsprechend der x/y-Fosition des Raums im Koordinatensystem berechnet das Programm die Speicheradresse, an der die beiden Raumbytes abgelegt sind. Diese sind wie folgt codiert:

Byte 1Byte 2
BitBedeutungBitBedeutung
7Hindernis 47Aktion 4
6Hindernis 36Aktion 3
5Hindernis 25Aktion 2
4Hindernis 14Aktion 1
3Wand unten3Besonderheiten 4
2Wand oben2Besonderheiten 3
1Wand rechts1Besonderheiten 2
0Wand links0Besonderheiten 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:

  • »A« oben
  • »Z« unten
  • »O« links
  • »P« rechts
  • »I« Gegenstand nehmen
  • »SPACE« (Leertaste) schießen
  • »S« Start
  • »H« unterbrechen

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ührungEnergieverlust
Käfer und Fledermäuse4 Punkte
Geister8 Punkte
Goblins300 Punkte
Feuerbälle500 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.

(Michael Hoger/ja)

★ PUBLISHER: Happy Computer
★ ANNÉES: 1985 , 1986
★ CONFIG: AMSDOS + 64K
★ LANGAGE:
★ LiCENCE: LISTING
★ COLLECTION: HAPPY COMPUTER 1986
★ AUTHOR: MICHAEL HOGER

 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-CPC-ShapePlotter    (Happy  Computer)    LISTING    GERMANDATE: 2017-03-26
DL: 302
TYPE: PDF
SiZE: 3351Ko
NOTE: Uploaded by hERMOL ; 24 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Turbo Basic
» Applications » Maxi Caractères
» Applications » RSX Ltext (CPC Magazin)
» Applications » RSX Speech Generator (Popular Computing Weekly)
» Applications » RSX - Bankswap (CPC Amstrad International)
» Applications » Transmat + R.S.X Clock (Pride Utilities )
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 754 millisecondes et consultée 1441 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.