                          - SEPTIC'S DEMOSKOLA -

                                 Lektion 5
                                 
                        Skriven av Vicious / Septic

                                 05 Jun 93



                                 Inledning
                                 
Efter tv lektioner om bitplansgrafik ska vi nu g vidare till sprites, och
gra en (frr i tiden) mycket (men tyvrr ven nu) vanlig typ av
stjrnscroll! Mycket nje!


                                   Teori
                                   
Trots att sprites ser ut som vanlig bitplansgrafik r de egentligen helt
oberoende av grafiken bakom-framfr dem. Att gra ngra scrollande stjrnor
bakom en vektorkub krver allts ingen strre anstrngning n att gra dem
p en tom skrm. Det finns bara tta sprite kanaler p Amigan, vilket bara
tillter att tta sprites visas p samma gng P SAMMA RASTERRAD! Ska man
kra spritarna huller om buller om varandra s kan man allts bara ha tta
stycken, men ser man till att de ligger efter varandra nedt p skrmen
(som i en horisontell stjrnscroll) s kan man anvnda en teranvndnings-
teknik som innebr att sprite kanalen visar en ny sprite efter att den
blivit klar med den frra...Detta betyder allts att i en stjrnscroll kan
man rita ut en stjrna och sedan vnta p en ny rad med samma spritekanal
och rita ut nnu en ny stjrna. P det hr sttet kan man visa kanske 200
stjrnor med bara EN spritekanal, och om man anvnder varje spritekanal
till ett lager stjrnor, blir det 8 lager med 200 stjrnor i varje, vilket
ger 1600 punkter...Ganska lagom.
  En sprite kan bara vara 16 pixlar bred (ej AGA) men dremot kan den vara
hur hg som helst! Den kan bara ha 4 frger i vanlig mode, men anvnder man
attached mode (som ger 16 frger) s halveras spritekanal-antalet till 4.
  En sprite r uppbyggd p fljande stt:

   WORD 1 - Bit 15-8 innehller de 8 lgsta VSTART-bitarna
            Bit  7-0 innehller de 8 hga bitarna i HSTART
   WORD 2 - Bit 15-8 innehller de 8 lga VSTOP-bitarna
            Bit 7    (anvnds i attached mode)
            Bit 6-3  Anvnds ej
            Bit 2    VSTART hgsta biten
            Bit 1    VSTOP hgsta biten
            Bit 0    HSTART lga biten

Hrefter fljer sprite data fr grafiken och sen antingen tv words med
noll, eller nya spritekontroll WORDS fr nsta sprite.
  VSTART str fr den vertikala startpositionen och VSTOP fr
slutpositionen. Detta anger allts hjden p spriten. HSTART r den
horisontella startpositionen. Alla dessa siffror anges i
hrdvarukoordinater, som brjar en bit innan den riktiga skrmen.

  En sprite kan se ut s hr:

   DC.W   $6D60,$7200   ; VSTART,HSTART,VSTOP
   DC.W   $0990,$07E0   ; Data fr grafiken i tv bitplan.
   DC.W   $13C8,$0FF0
   DC.W   $23C4,$1FF8
   DC.W   $13C8,$0FF0
   DC.W   $0990,$07E0
   DC.W   $0000,$0000   ; Slut p spritedata

Den hr spriten kommer att visas p horis.pos $60 och vertikal pos $6D till
$72...Sprite grafiken skapas enklast i en RAW to IFF converter.
  Vill man teranvnda spritekanalen s r det bara att haka p ny
spritedata dr nollorna sitter:

   DC.W   $6D60,$7200   ; VSTART,HSTART,VSTOP
   DC.W   $0990,$07E0   ; Data fr grafiken i tv bitplan.
   DC.W   $13C8,$0FF0
   DC.W   $23C4,$1FF8
   DC.W   $13C8,$0FF0
   DC.W   $0990,$07E0
   DC.W   $8D90,$9200   ; Vr nya sprite brjar hr!
   DC.W   $0990,$07E0   ; Data fr grafiken i tv bitplan.
   DC.W   $13C8,$0FF0
   DC.W   $23C4,$1FF8
   DC.W   $13C8,$0FF0
   DC.W   $0990,$07E0
   DC.W   $0000,$0000   ; Slut p spritedata

Hr kommer vr frsta sprite att visas p samma stlle som frut, men samma
spritekanal kommer nu ocks att visa en likadan p position $90, $8D.
Fantastiskt!

                                 Register
                                 
Frst och frmst mste vi sl p sprite DMA i DMACON ($dff096) i vanlig
ordning. Sen behver vi bara stlla in lite pekare varje vertikal blanking
fr att DMAn ska visa vra vackra spritar. Eftersom de ska stllas in varje
VBL, s ska vi givetvis (surprise, surprise!) uppdatera dem
med.....COPPERN!
  SPR0PT ($DFF120) heter den frsta spritepekaren och sen fljer 7
longwords till de andra pekarna som vi mste stlla in.
  Hur jag gr detta smidigt ser du i programexemplet.
  Spritarnas frger stlls in i frgregistren 16 till 32, och dr har tv
spritepar 4 frger var. Det betyder allts att sprite 0 och 1 delar p
frgerna 16-19, sprite 2 och 3 p frgerna 20-23, sprite 4 och 5 p
frgerna 24-27 och sprite 6 och 7 p frgerna 28-31.
  Anvnder man attached mode (16 frger) s delar de fyra spritarna p
frgerna 16-31.


                              Programexemplet
                              
Tja, inte mycket att kommentera egentligen...En sn dr stjrnscroll som vi
sett 10958345 gnger frr! Oftast brukar den vara i endast tre lager, men
jag har klmt till med sex lager som alla scrollar i
olika hastigheter frn 1 till 6 pixlar varje vertical blanking.
  Scrollningen grs genom att ndra i varje sprites kontroll WORD, dr den
horisontella positionen str. Den kommer sjlvmant att "wrappa runt" nr
byten ntt 255 och skrmens ytterkant r ndd.


                                 Utmaning
                                 
Den hr gngen tnkte jag gra en enkel utmaning s att alla
(frhoppningsvis) kan delta...
  Det jag vill att ni ska gra r att skriva om den hr lektionens program-
exempel till att klara tv riktningar p stjrnscrollen. Hger och vnster!
Stjrnorna ska allts scrolla t hger frst, och nr man trycker p
joystick-knappen ska de scrolla t vnster istllet, och s ska man kunna
hlla p och byta riktning tills man fr hjrnbldning, eller trycker p
musknappen.
  Joysticken lses av p samma stt som vnster musknapp, fast med bit #7
istllet fr #6:

   BTST   #7,$BFE001   ; Ls av joystick-knapp...

  Detta kan vl inte vara fr svrt?! Jag kommer att presentera en lsning
i nsta lektion, men tills dess vill jag ha mnga skojiga frsk frn er
sida!
