; ; Dual playfield display example for AGA Amigas only. ; ; Demonstrates how to get the correct colours for the rear ; playfield by using DisplayControls - see Page 137 of the new ; manual or press RightAmiga/Help on the same line as the command ;) ; ; Ted Bailey 12/2/96 ; NoCli ;SetErr:End:End SetErr SpriteMode 2 ; AGA only sprites (64 pixels wide) NEWTYPE.spr ; for the list of three AGA sprites sx.w ; x position xv.w ; x velocity sy.w ; y " yv.w ; y " ch.w ; sprite channel to display sprite through End NEWTYPE ; Dim List sprites.spr(2) BitMap 0,384,288,4 ; front playfield 16 colour bitmap BitMap 1,384,288,4 ; back playfield 16 colour bitmap InitShape 0,64,64,4 ; shape to turn into a sprite ShapesBitMap 0,2 ; for drawing directly onto shapes 'bitmap' InitPalette 0,256 ; colour regs 0 and 16 are transparent ; colour regs 1->15 are for front playfield ; colour regs 15->31 are for back playfield ; colour regs 240->255 are for sprites ; AGA dualplayfield, smoothscrolling display InitCopList 0,40,256,$10038,8,256,0 ; make the back playfield use colour registers 16->31 ; by putting %0001110000000000 ($1c00) into BPLCON3 ; and make the sprites use colour registers 240->255 ; by putting %0000000011101110 ($00ee) into BPLCON4 DisplayControls 0,0,$1c00,$00ee VWait 50:BLITZ Gosub initcolours Gosub initbitmaps Gosub initsprites d.w=0 ; initialise 'degrees' counter fx.q=16 ; front playfield x starting position fy.q=16 ; " " y " " bx.q=16 ; back " x " " by.q=16 ; " " y " " CreateDisplay 0:DisplayPalette 0,0 Repeat VWait DisplayBitMap 0,0,fx,fy,1,bx,by Gosub movesprites ; move/display 3 64*64 16 colour sprites ang.f=d*Pi/180 ; sinn=Sin(ang)*16 ; move front and back playfields coss=Cos(ang)*16 ; in a circle pattern ; fx=16+sinn ; fy=16+coss ; ; bx=16+coss ; by=16+sinn ; d+3:If d>359 Then d=0 ; increment degrees counter Until Joyb(0) End .initcolours ; For cr=1 To 15 ; AGAPalRGB 0,cr,0,Rnd(255),50+cr*10 ; front playfield colours Next ; ; For cr=17 To 31 ; AGAPalRGB 0,cr,50+cr*5,Rnd(255),0 ; back playfield colours Next ; ; For cr=240 To 255 ; col=(255-cr)*15 ; AGAPalRGB 0,cr,col,col,col ; sprite colours Next ; ; Return .initbitmaps ; Use BitMap 0 ; draw some random lines + circles on For i.w=1 To 15 ; the front bitmap For n.w=1 To 5 Line Rnd(384),Rnd(288),Rnd(384),Rnd(288),i Circlef Rnd(384),Rnd(288),10+Rnd(10),10+Rnd(10),i Next Next ; Use BitMap 1 ; draw some random circles on the back For i=1 To 15 ; bitmap For n=1 To 5 Circlef Rnd(384),Rnd(288),20+Rnd(10),20+Rnd(10),i Next Next ; Return .initsprites ; Use BitMap 2 ; draw some concentric circles on the For i=1 To 15 ; shapes' bitmap Circlef 32-i/2,32-i/2,32-i*2,16-i Next GetaSprite 0,0 ; turn the shape into a sprite Free Shape 0 ; get rid of shape ; chn.w=0 ; initialise sprite channel counter USEPATH sprites() While AddItem(sprites()) \sx=50+Rnd(100) ; \xv=1+Rnd(4) ; initialise each sprites' x/y positions \sy=-50-Rnd(50) ; and velocities. \yv=1 ; \ch=chn ; set the sprite channel to display through chn+2 ; needs 2 channels per sprite (16 colours) Wend ; Return .movesprites ; USEPATH sprites() ResetList sprites() While NextItem(sprites()) \sx+\xv ; If \sx<0 Then \xv=-\xv:\sx=0 ; bounce off walls If \sx>256 Then \xv=-\xv:\sx=256 ; ; \yv+1 ; \sy+\yv ; bounce off ground If \sy>194 Then \yv=-10-Rnd(10):\sy=194 ; ; DisplaySprite 0,0,\sx,\sy,\ch ; show the sprite Wend ; Return