'===========================================================================
' Subject: BOUNCING MADNESS                   Date: 05-15-99 (13:43)       
'  Author: Jernej Simoncic                    Code: QB, PDS                
'  Origin: jernej.simoncic@guest.arnes.si   Packet: DIRECTQB.ABC
'===========================================================================
'
' Bouncing madness (thanks to Angelo for thinking of name;)
'
' A very simple effect made with DirectQB. It looks like the one in WinAmp's
' about box.
'
' Notes: Shown image size should be at least 170x105, or it won't look good.
'        This program uses TEXTURE1.PCX, from DQb texture mapping example.
'
' Programmed by Jernej Simoncic, jernej.simoncic@guest.arnes.si
' ICQ#: 26266467
' http://www2.arnes.si/~sopjsimo
'
' Required DQb modules: draw, sprite, image, palette
'

'$INCLUDE: 'directqb.bi'

DIM Pal AS STRING * 768
DIM Pic(2050) AS INTEGER, Scn(32001) AS INTEGER

xSize% = 180    'sprite resolution
ySize% = 110

a% = DQBinit(1, 0)
IF a% THEN
  PRINT DQBerror$
  DQBclose
  END
END IF
SCREEN 13

IF DQBloadLayer(1, "texture1.pcx", Pal) THEN
  SCREEN 0
  PRINT DQBerror$
  DQBclose
  END
END IF

DQBget 1, 0, 0, 63, 63, VARSEG(Pic(0)), VARPTR(Pic(0))

DQBclearLayer 1

DQBsetPal Pal

RANDOMIZE TIMER

x% = INT(RND * (300 - xSize%)) + 10 'startup sprite position
y% = INT(RND * (180 - ySize%)) + 10

xx% = INT(RND * 20) - 10            'movement direction
yy% = INT(RND * 20) - 10

DQBsetSolidPut  'solid put must be used
DO
 
  DQBget 1, 6, 6, 313, 193, VARSEG(Scn(0)), VARPTR(Scn(0))  'get current
                                                            'screen and
  DQBsPut 1, 0, 0, VARSEG(Scn(0)), VARPTR(Scn(0)), 320, 200 'enlarge it
 
  'DQbSput is used, since the texture1.pcx isn't big enough.
  DQBsPut 1, x%, y%, VARSEG(Pic(0)), VARPTR(Pic(0)), xSize%, ySize%
  'Normally you should use this:
  'DQBput 1, x%, y%, VARSEG(Pic(0)), VARPTR(Pic(0))

  DQBwait 1
  DQBcopyLayer 1, 0

  x% = x% + xx%
  y% = y% + yy%

  IF INT(RND * 10) = 0 THEN xx% = INT(RND * 20) - 10  'randomly change
  IF INT(RND * 10) = 0 THEN yy% = INT(RND * 20) - 10  'movement direction
 
  IF x% >= 320 - xSize% THEN xx% = -ABS(xx%)
  IF x% <= 0 THEN xx% = ABS(xx%)
  IF y% >= 200 - ySize% THEN yy% = -ABS(yy%)
  IF y% <= 0 THEN yy% = ABS(yy%)

LOOP WHILE INKEY$ = ""

DQBclose
END
