proc tSpriteC:
  global sprName$(130)
  local initW%,initH%

  loadm "spriteC"
  sprName$="m:\opd\SPRITE1.PIC"
  initW%=gWidth :initH%=gHeight
  if not exist(sprName$)
    makeMlt:
  endif
  gSetWin 0,0,initW%,initH%
  test:
  unloadm "spriteC"
endp

proc test:
  local bId%(12)
  local fHand%,count%
  local i%
  local offset%(2)
  local pos%(2)
  local sprite%(18)  rem 'array' of 2 W_SPRITE structs
  local sprId%,wId%
  local info%(36)

  gInfo info%()
  wId%=info%(31)    rem WSRV window ID for this window

  rem Open the bitmap-file
  fHand%=gInitB%:(sprName$,addr(count%))
  offset%(1)=0 :offset%(2)=0

  rem set up 2 element array of W_SPRITE structs
  rem reading bitmaps from the open file

  rem Set the 1st element in the array of W_SPRITEs
  i%=1
  while i%<=6
    sprite%(i%)=gGetB%:(fHand%,i%-1,0,addr(offset%())) rem bitmaps 0 to 5
    i%=i%+1
  endwh
  sprite%(7)=0 rem offset x
  sprite%(8)=0 rem offset y
  sprite%(9)=1 rem time 1/10 sec

  rem and now set the 2nd element in the array of W_SPRITEs
  i%=10
  while i%<=15
    sprite%(i%)=gGetB%:(fHand%,i%-4,0,addr(offset%())) rem bitmaps 6 to 12
    i%=i%+1
  endwh
  sprite%(16)=0 rem offset x
  sprite%(17)=0 rem offset y
  sprite%(18)=1 rem time 1/10 sec
  wFree:(fHand%)
  pos%(1)=0 :pos%(2)=0
  sprId%=wCrtSpr%:(wId%,addr(pos%()),0,2,addr(sprite%()))

  busy "Key changes position"
  get
  busy ""

  pos%(1)=60 :pos%(2)=30
  sprite%(16)=60
  wSetSpr%:(sprId%,addr(pos%()),1,addr(sprite%(10)))
  get
endp

proc makeMlt:
  local multi%

  busy "Making multi-bitmap"
  gSetWin 0,0,50,50
  multi%=gIniMlt%:(sprName$,12)
  doMltSav:(0,0,multi%)
  doMltSav:(2,2,multi%)
  doMltSav:(4,4,multi%)
  doMltSav:(6,6,multi%)
  doMltSav:(8,8,multi%)
  doMltSav:(10,10,multi%)

  doMltSav:(12,12,multi%)
  doMltSav:(14,14,multi%)
  doMltSav:(16,16,multi%)
  doMltSav:(18,18,multi%)
  doMltSav:(20,20,multi%)
  doMltSav:(22,22,multi%)

  gEndMlt%:(multi%)
  busy ""
endp

proc doMltSav:(x%,y%,multi%)
  local info%(36)
  local wId%

  gInfo info%()
  wId%=info%(31)    rem WSRV window ID for this window
  gAt x%+1,y%+1
  gBorder 2,gWidth-(x%+1)*2,gHeight+1-(y%+1)*2
  gAt x%,y%
  gBorder 2,gWidth-x%*2,gHeight+1-y%*2
  gSavMlt%:(multi%,wId%)
  gCls
endp

