Magic Disk 64

home to index to html: MD9403-KURSE-16-FARBEN-KURS_3.html
          16-FARBEN-SCROLLING           
               Teil III                 
Endlich! Diesmal wollen wir das Ding mit
der $d011-Trickserei hinter uns bringen.
Als Krönung dazu befindet sich der "Bit-
map-Manager" auf  der  Diskette.  Dieser
Editor verwaltet  Grafik-Areas  für  die
Routine des dok.Scroll-Source-Codes  der
vorigen Ausgabe. Zu  Beginn  eine  kurze
Einführung in das  Arbeiten  mit  diesem
Editor...                               
Mit  dem  "Bitmap-Manager"  lassen  sich
Grafik-Backgrounds in einem  Format  von
100 x 40 Squares gestalten.  Ein  Square
ist ein Feld der Größe von 2x2  Cursors.
Insgesamt  also  eine  Area   von   rund
5 x 4 Screens. Die  Squares  werden  von
einem Grafik-Bild  von  40  x  20  Chars
ausgelesen (z.B.ein  normales  Koala-Pic
in der Höhe von  20  Chars),  womit  wir
bei 200 verschiedenen Squares wären.    
Zu Beginn befindet man  sich  im  Haupt-
Menu, in welchem  man  mit  den  Cursor-
Tasten und Return  bestimmte  Funktionen
startet. Wenn wir  in  den  Field-Editor
gelangen,  gelten  folgende  Tasten  als
funktionstüchtig:                       
Return,Pfeil links........ins Haupt-Menu
Cursor oder Joystick.....Pointer bewegen
1-8........................Square setzen
Space oder Feuer........Square #0 setzen
F1/F2...................Hintergrundfarbe
F7....................in den Page-Editor
+,-...................Page 0-31 anwählen
shift+clr home...........Area löschen(!)
*...................Sprite-Block-pointer
      (die '*'-Funktion wird später noch
       genauer erläutert werden...)     
Die Squares lassen  sich  also  mit  den
Tasten  1-8  setzen,  abhängig  von  der
aktuellen Page.  Um  nun  die  Pages  zu
editieren, gelangen wir mit 'F7' in  den
Page-Editor,   welcher   mit   folgenden
Tasten bedient wird:                    
F7...................in den Field-Editor
Cursor oder Joystick.....Pointer bewegen
1-8.............Square in Page schreiben
+,-........................Page anwählen
So lassen sich 32 verschiedene Pages er-
stellen. Beim anwählen der Pages  ändert
sich die Rahmen-farbe  mit,  das  heißt,
daß jede Page seine bestimmte Farbe  an-
zeigt. Somit ist das Arbeiten im  Field-
Editor leichter, da in diesem das  voll-
ständige Darstellen der 8 Squares  einer
Page  aus  technischen   Gründen   nicht
möglich ist.  Orientierung  schafft  nur
die Page-Nummer  rechts  oben  und  eben
die entsprechende Rahmenfarbe.          
NUN GANZ PRAKTISCH:                     
Wie gestalte ich mein eigenes Demo/Game?
Zuerst mal wird gemalt. Ein  Picture  in
der Größe 40x20  Cursors,  welches  alle
200 Squares repräsentiert. Abgespeichert
wird  im  Koala-Format.  Nun  läßt  sich
dieses  Bild  mit  dem  "Bitmap-Manager"
laden, wonach es in das  richtige,  "re-
defined" Format gebracht wird (der Bild-
schirmrand flackert kurz).              
So, nun  kann's  schon  mit  der  Field-
Gestaltung  losgehen.  Zuerst  mal   die
Pages  zusammenstellen.  Am  Besten  die
Squares, die in  Verbindung  miteinander
stehen (ganze Grafik-Elemente),  in  die
gleiche Page bringen.  Jetzt  zurück  in
den  Field-Editor  und  den   Background
designen...                             
Hat man sich einmal an das  Prinzip  mit
den Pages  und  dem  1-8-Modus  gewöhnt,
läuft das Gestalten so  richtig  schnell
und macht Spaß.  Vor  Allem  dann,  wenn
man schon  weiß,  wo  bestimmte  Squares
sind, die man z.B.  öfter  braucht,  was
nach einer gewissen  Zeit  sowieso  ent-
steht.                                  
Gut, die Area ist abgeschlossen und  wir
begeben uns wieder ins  Hauptmenu.  Dort
speichern  wir  vorsorgend  gleich   die
Pages  und  die  gesamte  Area   ($c000-
$cfa0).  Beim  Wiederbearbeiten  einfach
die Grafik, Area  und  Pages  reinladen,
und losgeht'S (die Pages haben also  nur
für den Editor Bedeutung)!              
Wollen wir ernst machen und den gesamten
Background für ein eigenes Projekt  ver-
wenden, dann ist  folgende  Schrittfolge
anzuwenden:                             
Zuerst speichern wir die Grafik(Squares)
als "redefined Grafics" ab (Bereich  von
$2000 bis  $3f3f).  Bevor  wir  nun  die
Routine starten (ich rede vom Sourcecode
der letzten Ausgabe von  Kurs  Teil  2),
laden wir die Area  ($c000)  normal  und
die "redefined Grafic"  (gespeichert  ab
$2000) nach $e000 in den Speicher.  Wenn
wir jetzt  die  Routine  starten,  haben
wir nicht viel Unterschied  zum  Editor,
da  die  Routine  (vom  Sourcecode)  dem
Editor ähnlich ist.  Aber  wir  befinden
uns schon mal im  Assembler  und  können
die ganze Sache entscheidend  beeinflus-
sen...                                  
...ab hier ist jeder  Programmierer  auf
sich selbst angewiesen. Man sollte  sich
ein wenig in den  Code  einarbeiten  und
herumexperimentieren.  Ein  wenig   Tips
und Hilfe  möchte  ich  hier  aber  noch
auflisten:                              
 1.Im schwarzen, oberen  Bereich  (line-
   crunching) werden  7  Sprites  (X-und
   Y-expanded) dargestellt. Die  Koordi-
   naten,Blöcke  und  Farben  werden  im
   Programm   initialisiert.  Durch  ge-
   zieltes Ändern ist  diese  Gestaltung
   selbst   frei  einzurichten  (die  Y-
   Koordinaten müssen allerdings gleich-
   bleiben; Timing!).                   
 2.Das Programm arbeitet in einem Haupt-
   und einem Interrupt-Teil. Der  Haupt-
   teil wartet immer wieder  darauf,  ob
   neue Zeilen aufgebaut werden  müssen.
   Im Interrupt werden die Tasten  abge-
   fragt,  die  Softscreenmoving-Routine
   aufgerufen  sowie  ins  Linecrunching
   verzeigt. Wird nun  im  Hauptprogramm
   gerade eine  Cursor-Zeile  aufgebaut,
   wird der Vorgang meist,denn er dauert
   eine   gewisse  Zeit,  vom  Interrupt
   unterbrochen.                        
   Also: Routinen,die alle 1/50  Sekunde
   stattfinden müssen, werden einfach in
   den Interrupt eingabaut. Dabei ist zu
   beachten, daß nicht zuviel Rasterzeit
   verbraucht wird, da das Linecrunching
   zur bestimmten Rasterzeile  unbedingt
   stattfinden muß. Wenn die freie  Zeit
   zuwenig ist, einfach den  Raster-IRQ-
   Einsatz um ein paar Zeilen verfrühen,
   und sozusagen vom Haupt-oder  Aufbau-
   Programm etwas abzwicken.            
 3.Im  Sourcecode  befindet  sich   eine
   Routine mit dem  Namen  "SET  PIECE".
   Wenn ein Square  auf  den  Bildschirm
   gestzt    wird,  muß  sie  aufgerufen
   werden. Die "set  piece"-Routine  ist
   sehr praktisch:  Sie  prüft,  ob  das
   Square,   welches  gesetzt  wird,  im
   sichtbaren Bereich liegt oder  nicht.
   Wenn ja, wird es in  die  angezeigte,
   aktuelle   Bitmap  geschrieben.  Wenn
   nicht, dann nur als Byte in der  Area
   festgehalten,    d.h.  wenn   dorthin
   gescrollt  wird,  wird  jenes  Square
   angezeigt, da's ja in der  Area  ver-
   ankert wurde (in die  Area  wird  das
   Square also auf jeden Fall  geschrie-
   ben).                                
 4.Gescrollt wird,  indem  man  die  ge-
   wünschten Werte direkt in den  Opcode
   der   Screenmoving-Routine  schreibt.
   Die Labels heißen  "mo1"-"mo4".  Also
   um nach oben zu scrollen,  den  Soft-
   Wert nach "mo1+1" schreiben  und  die
   Routine  Screenmoving  aufrufen.  Die
   Werte können von 0-8 liegen und  wer-
   den  nach  jedem  Aufruf  automatisch
   gelöscht.                            
Zum Schluß möchte  ich  noch  auf  einen
kleinen  "Hindernis"-Umstand   eingehen,
welchen  ich  oben  zu   Beginn   dieses
Kurs-Teiles angesprochen habe.  Es  geht
um   den    Sprite-Blockpointer-Bereich,
welcher sich im Editor  durch  die  "*"-
Taste und im Sourcecode mit der  Return-
Taste ein-und  ausschalten  läßt  (diese
8 nebeneinanderliegenden (phew!) Cursor-
Bytes "flashen" dann).                  
Bekanntlich belegen die Blockpointer für
die Sprites  die  letzten  8  Bytes  des
aktuellen Text-Bildschirms.  In  unserem
Beispiel  liegt  dieser  ab  $4400,  die
Blockpointer also ab  $47f8.  Gewöhnlich
ist dieser Bereich  frei  verfügbar,  da
der Text-Bildschirm  nur  einen  Bereich
von 1000 Bytes braucht (also bis $47d7).
Doch  durch  das   Linecrunching   kommt
dieser sonst  unsichtbare  Bereich  auch
zum Vorschein, da der VIC bei  der  Dar-
stellung des Screens dort fortsetzt,  wo
er aufgehört hat (also  bei  $47d8,  und
erst nach $47ff springt er zu $4400  zu-
rück).                                  
Dies ist  auch  der  Grund,  warum  beim
Linecrunchen  der  Bereich  auch  in  X-
Richtung  versetzt  auftaucht,   nämlich
genau   um   diese   24   Bytes/Cursors!
Um mit diesem Umstand  keine  "Troubles"
zu  bekommen,  läßt  man  jene   Cursors
einfach leer oder vom  Screen-Colour-RAM
unbeeinflußt   (nur    $d800-Farb-RAM!).
Wenn man auf Sprites  über  der  Scroll-
Area verzichtet,  stellt  sich  selbiges
Problem ohnehin nicht.                  
Mein letzter und vielleicht  wichtigster
Tip lautet:                             
  Durchbeißen!                          
    Durchbeißen!                        
      Durchbeißen!                      
         ...und NIIIIIEEMALS aufgeben!  
                     (Hannes Sommer,'93)



Valid HTML 4.0 Transitional Valid CSS!