'-> Mattonite by Stefano Regattin
'i> 2 ottobre 1996 
'm> 3,8,12,13,14,19,25,27,31 ottobre 1996
'm> 9 novembre 1996
'm> 12 novembre 1997 
'm> 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 maggio 2000 
'm> 1,4,5,6,7,8,9,11,13,14,23,26,27,28 giugno 2000 
'm> 16,17,18,19,23,24 luglio 2000
'm> 5,12,13,14,15,30 agosto 2000 
'm> 1,10,11,26 settembre 2000
'm> 12,15,24,25,26,31 ottobre 2000 
'm> 2,16,17,21,23 novembre 2000
'm> 3 dicembre 2000
'm> 5,7,8,9,10,11,13,14,17,18,22,25,26,27,28 febbraio 2001 
'm> 1 marzo 2001 
'm> 15,22,23,26 aprile 2001
'm> 19,20,22,26,27,29 maggio 2001
'm> 1,2,3,4,5,9,10,12,25,28 giugno 2001
'm> 1,2,3,6,7,10,14,15,16,29,30 luglio 2001
'm> 7,8,9,14,29 agosto 2001
'm> 9,17 settembre 2001
'm> 4,5,6,7,11,12,13,15 ottobre 2001 
'm> 2,3,4,5,6,8,22,25,26 novembre 2001 
'm> 3,9,17,18,28 dicembre 2001   
'm> 7 gennaio 2002 
'------------------
Set Buffer 20
'allocates 20kiloBytes for variables space 
Degree 
'activates the degree angle misuration settings for trigonometric functions
' like Sin() and Cos() 
OGGETTISTANDARD$="MattoniteStandardObjects.Abk"
'standard graphics objects   
OGGETTICOLORATI$="MattoniteColouredObjects.Abk"
'coloured graphics objects 
SUONI$="MattoniteSoundFXs.Abk"
'sounds
PUNTEGGI$="TopHundredScores"
'top hundred scores
VERO=-1
'true
FALSO=0
'false 
'these are set not for commodity but for strange running of the executable 
' derivated from this source if you replace the VERO (that means True in 
' italian) and FALSO (that means False in italian) with the original True and
' False constants  
ALTEZZAFONT=8
'font height 
BANCO=65535
'bank
IMMAGINIBOING=8
'boing images
IMMAGINIGUANO=1
' guano images 
IMMAGINIPAPERO=4
'duck images 
IMMAGINIRUBAPALLINA=11
'ballthief images
LARGHEZZAPANNELLO=48
'panel width 
MASSIMOBOINGINCAMPO=3
'boing maximum 
MASSIMOMATTONCINIDARIDISEGNARE=247
'brick to redraw maximum 
MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO=8
'bonus bricks maximum
MASSIMOPALLINEINCAMPO=5
'balls maximum 
MATTONCINIDIPOTENZIAMENTOCOLORATI=0
'flag that reports 1 if you want the coloured objects or 0 if you want the 
' standard ones
MOSTRASOLOILPUNTEGGIOMASSIMO=1
'flag that report 1 if you want the top score displayed or 0 if only the 
' higher coming
OGGETTORIGA=0
'row object
OGGETTOCENTRODELLABARRA=1
'bar centre object 
OGGETTOLATIDELLABARRA=OGGETTOCENTRODELLABARRA+1
'bar sides object  
OGGETTOLASER=OGGETTOLATIDELLABARRA+1
'laser beam object 
OGGETTORAGGIOLASER=OGGETTOLASER+1
'laser ray object
OGGETTOMATTONCINODIPOTENZIAMENTO=OGGETTORAGGIOLASER+1
'first bonus bricks object   
OGGETTOBOING=OGGETTOMATTONCINODIPOTENZIAMENTO+MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO
'first boing object
OGGETTOPAPERO=251
'duck object 
OGGETTOGUANO=252
'guano object
OGGETTOPAPEROALIENO=253
'alien duck object 
OGGETTORUBAPALLINA=254
'ballthief object
OGGETTOPALLINA=OGGETTOPAPERO-MASSIMOPALLINEINCAMPO
'first ball object 
PRIMAPARTITA=VERO
'this flag is true if you are playing your first game
RITARDODELLENTRATAINCAMPODEIBOING=-1000
'boing in game delay counter 
SEMITONO#=1.05946
'distance between two semitones multiply factor  
SUONICARICATI=VERO
'this flag reports True if you want to load the soundfxs 
VOCE=1
'voice 
Dim NOMEDELGIOCATORE$(99),LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(99)
'players name, 100 level up to the players have played 
Dim PUNTEGGIODELGIOCATORE$(99)
'player score
Dim DELTAXPALLINA#(MASSIMOPALLINEINCAMPO-1)
'balls X movement  
Dim DELTAYPALLINA#(MASSIMOPALLINEINCAMPO-1)
'balls Y movement  
Dim VELOCITADELLAPALLINA#(MASSIMOPALLINEINCAMPO-1)
'balls velocity
Dim XPALLINA#(MASSIMOPALLINEINCAMPO-1),YPALLINA#(MASSIMOPALLINEINCAMPO-1)
'X and Y balls coords on screen
Dim BOING(MASSIMOBOINGINCAMPO-1),C0LORE(31),DURATADELLARIGA(2)
'boings, colors that can be changed, row in game duration  
Dim DURATADELRIDISEGNODELMATTONCINO(MASSIMOMATTONCINIDARIDISEGNARE-1)
'redrawing brick process duration
Dim IMMAGINEBOING(IMMAGINIBOING-1),IMMAGINEPAPERO(IMMAGINIPAPERO-1)
'boing image, duck image 
Dim IMMAGINEPAPEROALIENO(IMMAGINIPAPERO-1)
'alien duck image
Dim IMMAGINERUBAPALLINA(IMMAGINIRUBAPALLINA-1),INGOMBRODELLABARRA(2)
'ballthief image, bar side width 
Dim LAPALLINAERIMASTAINCOLLATAALLABARRA(MASSIMOPALLINEINCAMPO-1)
'ball glued to the bar 
Dim LAPALLINAHACOLPITOLABARRA(MASSIMOPALLINEINCAMPO-1)
'ball has hitted the bar 
Dim LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(MASSIMOPALLINEINCAMPO-1)
'ball has hitted one bar side
Dim MATTONCINO(246),MATTONCINODARIDISEGNARE(MASSIMOMATTONCINIDARIDISEGNARE-1)
'brick, brick to be redrawed 
Dim MATTONCINODIPOTENZIAMENTO(MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1)
'bonus brick 
Dim PALLINA(MASSIMOPALLINEINCAMPO-1)
'ball
Dim VOCE(3),X0ZONA(246),XBOING(MASSIMOBOINGINCAMPO-1)
'number of voices, X coord of brick in game  
Dim XCOLLA(MASSIMOPALLINEINCAMPO-1)
'X glued ball coord  
Dim XMATTONCINODIPOTENZIAMENTO(MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1)
'X bonus brick coord 
Dim Y0ZONA(246),YBOING(MASSIMOBOINGINCAMPO-1),YCOLLA(MASSIMOPALLINEINCAMPO-1)
'Y brick coord, Y boing coord, Y glued ball coord
Dim YMATTONCINODIPOTENZIAMENTO(MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1)
'Y bonus brick coord 
Global VERO,FALSO
'True. False 
Global CENTOGIOCATORI$,OGGETTI$,OGGETTICOLORATI$,OGGETTISTANDARD$,PERCORSO$
'one hundred players, objects, coloured objects,standard objects, main path
Global PERCORSODEILIVELLI$,PERCORSODELLAGRAFICA$,PERCORSODELLAMUSICA$
'levels path, graphics path, music path
Global PUNTEGGI$,SUONI$,SEMITONO#
'scores path 
Global ALTEZZAFONT,BANCO,_BARRABLOCCATA,BOINGINCAMPO,BONUS,C0LLA
'font height, bank, locked bar, in game boings, bonus, glue
Global C0LORIDELLOSCHERMOMENOUNO,DISTANZADELMATTONCINOPIUVICINOALPAPERO
'screen colours minus one, nearest to duck brick distance
Global DURATADELLARIGA,GRADIPAPEROALIENO,GUANOINCAMPO,GUANOMOLLATO
'row in game time duration, alien duck degrees, guano activated, guano dropped 
Global IMMAGINEGUANO,IMMAGINELASER,IMMAGINEPALLINA,IMMAGINEPAPERO
'guano image, laser beam image, ball image, duck image 
Global IMMAGINEPAPEROALIENO,IMMAGINERAGGIOLASER,IMMAGINERUBAPALLINA
'alien duck image, laser ray image, aline duck image 
Global IMMAGINIBOING,IMMAGINIGUANO,IMMAGINIPAPERO,IMMAGINERIGADUE
'boing images, guano images, duck images, row type 2 image 
Global IMMAGINERIGATRE,IMMAGINERIGAUNO,IMMAGINIRUBAPALLINA,LARGHEZZAPANNELLO
'row type 3 image, row type 1 image,ball thief images, panel width 
Global LASER,LIVELLO,LUNGHEZZADELLABARRA,LUNGHEZZADELLABARRACAMBIATA
'laser, level, bar width, changed bar width
Global MASSIMOBOINGINCAMPO,MASSIMOMATTONCINIDARIDISEGNARE
'in game boings maximum, bricks to be redrawed maximum 
Global MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO,MASSIMOPALLINEINCAMPO
'in game bonus brick maximum,in game balls maximum 
Global MATTONCINI,MATTONCINIDIPOTENZIAMENTO,MATTONCINIDIPOTENZIAMENTOCOLORATI
'in game bricks, bonus bricks number, coloured bonus bricks  
Global MATTONCINIRIMASTI,MATTONCINODATROVAREPERILPAPERO,MATTONCINOPERILPAPERO
'bricks left, bricks to find for the duck, brick for the duck
Global MOSTRASOLOILPUNTEGGIOMASSIMO,OGGETTOBOING,OGGETTOCENTRODELLABARRA
'show only the top score, first boing object,bar centre object 
Global OGGETTOGUANO,OGGETTOLASER,OGGETTOLATIDELLABARRA
'guano object, laser beam object, sides of the bar object
Global OGGETTOMATTONCINODIPOTENZIAMENTO,OGGETTOPALLINA,OGGETTOPAPERO
'first bonus brick object, first ball object, duck object
Global OGGETTOPAPEROALIENO,OGGETTORAGGIOLASER,OGGETTORIGA,OGGETTORUBAPALLINA
'alien duck object, laser ray object, row object, ballthief object 
Global PALLINAPRESADALRUBAPALLINA,PALLINASCELTADALRUBAPALLINA,PALLINE
'ball taken by the ballthief, ball choosen by the ball thief, balls left 
Global PALLINEINCAMPO,_PAPEROALIENO,_PAPEROALIENOINCAMPO,_PAPEROINCAMPO
'in game balls counter, alien duck status,in game alien duck,in game duck  
Global POSIZIONE,PUNTEGGIO,PUNTEGGIOMASSIMO,RAGGIOLASERRIFLESSO
'score position, score, maximum score, reflected laser ray 
Global RAGGIOLASERSPARATO,RIGA,RIMBALZODELLEPALLINESUIMATTONCINI,RITARDOBOING
'laser ray fired, row status, balls bounce against bricks status, in game time 
' boing delay
Global RITARDOPAPERO,RITARDOMASSIMODELLABARRA
'in game duck delay, bar maximum delay 
Global RITARDODELGIOCO,RITARDODELLARIPETIZIONEDELSUONODELLAPALLINARUBATA
'game delay, ball taken soun repeat delay
Global RITARDODELLENTRATAINCAMPODEIBOING
'in game boing appearition time delay  
Global RITARDODELLENTRATAINCAMPODELPAPEROALIENO
'in game alien duck appearition time delay 
Global RITARDODELLENTRATAINCAMPODELRUBAPALLINA,RUBAPALLINACOLPITO
'in game ballthief appearition timedelay, ballthief hitted 
Global SUONICARICATI,TASTO,TASTOGRIGIO,TASTOSCANSITO,TEMP0TRASCORSODIGIOCO
'soundfxs loaded, key, grey key, scanned key, game time spent  
Global T0GLILARIGA,VOCE,XBARRA,XFINALERIGA,XGUANO,XLASER,XPANNELLO,XPAPERO
'remove the row, voice, bar X coord, row ending X, guano X coord, laser beam X 
' coord, panel X coord, duck X coord 
Global XPAPEROALIENO,XRIGA,XRUBAPALLINA,YBARRA,YGUANO,YLASER,YPAPERO
'alien duck X coord, row X coord, ballthief X coord, bar Y coord, guano Y
' coord, laser beam Y coord, duck Y coord  
Global YPAPEROALIENO,YRUBAPALLINA
'alien duck Y coord, ballthief Y coord 
Global NOMEDELGIOCATORE$(),LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$()
'player name,player latest level 
Global PUNTEGGIODELGIOCATORE$()
'player score
Global DELTAXPALLINA#(),DELTAYPALLINA#(),VELOCITADELLAPALLINA#(),XPALLINA#()
'ball X movement, ball Y movement, ball velocity, ball X 
Global YPALLINA#()
'ball Y
Global BOING(),C0LORE(),DURATADELLARIGA(),DURATADELRIDISEGNODELMATTONCINO()
'boing status, colors, row time duration, brick redrawing time duration
Global IMMAGINEBOING(),IMMAGINEPAPERO(),IMMAGINEPAPEROALIENO()
'boing image, duck image, alien duck iamge 
Global IMMAGINERUBAPALLINA(),INGOMBRODELLABARRA()
'ballthief image, bar side width 
Global LAPALLINAERIMASTAINCOLLATAALLABARRA(),LAPALLINAHACOLPITOLABARRA()
'ball glued to the bar, ball has hitted the bar  
Global LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(),MATTONCINO()
'ball has hitted a bar side, brick 
Global MATTONCINODARIDISEGNARE(),MATTONCINODIPOTENZIAMENTO(),PALLINA(),VOCE()
'brick to be redrawn, bonus brick, ball, voice 
Global X0ZONA(),XBOING(),XCOLLA(),XMATTONCINODIPOTENZIAMENTO(),YBOING()
'brick X coord, boing X coord, ball glued X coord, bonus brick X coord, boing
' Y coord
Global YCOLLA(),YMATTONCINODIPOTENZIAMENTO(),Y0ZONA()
' ball glued Y coord, bonus brick Y coord, brick Y coord 
Proc INDIVIDUALAPOSIZIONEDELPROGRAMMA
Proc IMPOSTAIPERCORSIDEIFILE
Proc IMPOSTALOSCHERMO
If MATTONCINIDIPOTENZIAMENTOCOLORATI=1
 OGGETTI$=OGGETTICOLORATI$
Else 
 OGGETTI$=OGGETTISTANDARD$
End If 
Proc CARICAGLIOGGETTI
Proc IMPOSTAGLIOGGETTI
Proc IMPOSTAICOLORI
Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
Proc TROVAILFONTDATA70
Proc DISSOLVENZADEICOLORI[$FFF,1,1]
Hide 
Proc IMPOSTALARCOBALENO
If SUONICARICATI=VERO Then Proc CARICAISUONI
Proc CARICAILLIVELLO
Proc DABANCOAVARIABILI
Proc METTIILPANNELLO
Proc CREALEIMMAGINIPERLERIGHE
Proc IMPOSTALEZONEDEIMATTONCINI
Proc METTIECONTAIMATTONCINI
Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
Screen Swap 
Proc DISSOLVENZADEICOLORI[$FFF,1,2]
Proc IMPOSTALINGOMBRODELLABARRA
Proc CARICAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
Proc IMPOSTALADURATADELLERIGHE
Proc IMPOSTAILAMPEGGI
Repeat 
 Proc MOSTRAICREDITI
 Proc MOSTRAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
 Proc MOSTRALEOPZIONIDIGIOCO
 TESTOINTRODUTTIVO$="Press left mouse button to play."+Chr$(10)
 TESTOINTRODUTTIVO$=TESTOINTRODUTTIVO$+"Press right mouse button to exit."
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOINTRODUTTIVO$,20,21,1,500]
 If TASTO=-1
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
  C0LLA=FALSO
  DISTANZADELMATTONCINOPIUVICINOALPAPERO=1000
  DURATADELLARIGA=-1
  INIZIODELLIVELLO=VERO
  LASER=0
  LIVELLO=0
  LUNGHEZZADELLABARRA=1
  LUNGHEZZADELLABARRACAMBIATA=LUNGHEZZADELLABARRA
  PALLINASCELTATADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
  PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
  PALLINE=5
  PALLINEINCAMPO=1
  _PAPEROINCAMPO=FALSO
  PUNTEGGIO=0
  RIGA=0
  RIMBALZODELLEPALLINESUIMATTONCINI=VERO
  TEMP0TRASCORSODIGIOCO=0
  XBARRA=X Screen(X Mouse)
  YBARRA=247
  If PRIMAPARTITA=FALSO or LIVELLO>0
   Proc CANCELLAIMATTONCINI
   Proc CARICAILLIVELLO
   Proc DABANCOAVARIABILI
   Proc METTIECONTAIMATTONCINI
  Else 
   PRIMAPARTITA=FALSO
  End If 
  Repeat 
   Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELPAPEROALIENO
   Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELRUBAPALLINA
   Proc AGGIORNAILPANNELLO
   RITARDOMASSIMODELLABARRA=0
   If INIZIODELLIVELLO=VERO
    TESTOINIZIOGIOCO$="Get ready for level"+Str$(LIVELLO)+"!"+Chr$(10)
    TESTOINIZIOGIOCO$=TESTOINIZIOGIOCO$+"Press a (mouse) key to begin..."
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOINIZIOGIOCO$,22,20,1,500]
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc IMPOSTAIBOING
    If SUONICARICATI=VERO
     Sam Play VOCE,1 : Proc VOCESEGUENTE
    Else 
     Bell 20
    End If 
    INIZIODELLIVELLO=FALSO
   End If 
   For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
    If PALLINA<PALLINEINCAMPO
     PALLINA(PALLINA)=VERO
     XPALLINA#(PALLINA)=XBARRA+PALLINA*7-14
     YPALLINA#(PALLINA)=YBARRA-3
    Else 
     PALLINA(PALLINA)=FALSO
     Proc CANCELLALAPALLINA[PALLINA]
    End If 
   Next PALLINA
   Autoback 1
   Repeat 
    TASTOCLICCATODELTOPO=Mouse Click
    If RITARDODELLABARRA=0 or RITARDOMASSIMODELLABARRA=0
     XBARRA=X Screen(X Mouse)
    End If 
    If RITARDOMASSIMODELLABARRA>0
     Add RITARDODELLABARRA,1,0 To RITARDOMASSIMODELLABARRA
    End If 
    Proc MOSTRALABARRA
    Proc CAMBIALALUNGHEZZADELLABARRA
    Proc LIMITAIMOVIMENTIDELLABARRA
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=VERO
      XPALLINA#(PALLINA)=XBARRA+PALLINA*7-14
      YPALLINA#(PALLINA)=YBARRA-3
      Bob OGGETTOPALLINA+PALLINA,Int(XPALLINA#(PALLINA)),Int(YPALLINA#(PALLINA)),IMMAGINEPALLINA
     End If 
    Next PALLINA
    Proc MOSTRAILLASER
    If T0GLILARIGA>0
     If XRIGA>0
      Dec XRIGA
     End If 
     Proc MOSTRALARIGA[T0GLILARIGA]
    Else 
     If RIGA>0
      If XRIGA<XFINALERIGA
       Inc XRIGA
       Proc MOSTRALARIGA[RIGA]
      End If 
     End If 
    End If 
    Proc MATTONCINIDIPOTENZIAMENTO[0,0]
    Proc BOINGINCAMPO
    If _PAPEROINCAMPO=VERO
     Proc _PAPEROINCAMPO
    End If 
    If RITARDODELLENTRATAINCAMPODELPAPEROALIENO=0
     Proc _PAPEROALIENOINCAMPO
     Proc MOLLAILGUANO
    Else 
     Dec RITARDODELLENTRATAINCAMPODELPAPEROALIENO
    End If 
    If RITARDODELLENTRATAINCAMPODELRUBAPALLINA=1
     ENTRATAINCAMPODELRUBAPALLINA=Rnd(2)>1
    End If 
    If RITARDODELLENTRATAINCAMPODELRUBAPALLINA=0
     If ENTRATAINCAMPODELRUBAPALLINA=VERO
      Proc RUBAPALLINAINCAMPO
     End If 
    Else 
     Dec RITARDODELLENTRATAINCAMPODELRUBAPALLINA
    End If 
    Bob Update 
    TASTOPREMUTO$=Lower$(Inkey$)
    TASTOGRIGIO=Key Shift
    TASTOSCANSITO=Scancode
    Exit If TASTOPREMUTO$=Chr$(27)
    If TASTOPREMUTO$="p"
     Proc METTIILGIOCOINPAUSA
    End If 
    If TASTOGRIGIO=4
     If TASTOSCANSITO=80 : Rem F1 key 
      Add LUNGHEZZADELLABARRACAMBIATA,1,0 To 2
     Else If TASTOSCANSITO=81 : Rem F2 key 
      Add PALLINEINCAMPO,1,1 To MASSIMOPALLINEINCAMPO
      For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
       If PALLINA<PALLINEINCAMPO
        PALLINA(PALLINA)=VERO
       Else 
        PALLINA(PALLINA)=FALSO
        Proc CANCELLALAPALLINA[PALLINA]
       End If 
      Next PALLINA
     Else If TASTOSCANSITO=82 : Rem F3 key 
      If LASER=-1
       LASER=1
      Else If LASER=1
       LASER=2
      Else If LASER=2
       LASER=3
      Else If LASER=3
       LASER=0
      End If 
     Else If TASTOSCANSITO=83 : Rem F4 key 
      If RIGA>0 and T0GLILARIGA=0
       T0GLILARIGA=RIGA
      End If 
      Add RIGA,1,0 To 3
     Else If TASTOPREMUTO$=" "
      Proc MATTONCINIDIPOTENZIAMENTO[-Rnd(28)-1,0]
     End If 
    End If 
   Until TASTOCLICCATODELTOPO>0
   Proc IMPOSTALEPALLINE
   DURATADELGIOCO=0
   Repeat 
    TASTOCLICCATODELTOPO=Mouse Click
    If TASTOCLICCATODELTOPO=1
     For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
      LAPALLINAERIMASTAINCOLLATAALLABARRA(PALLINA)=FALSO
     Next PALLINA
    Else If TASTOCLICCATODELTOPO=2
     Proc HAISPARATOILRAGGIOLASER
    End If 
    If _BARRABLOCCATA>0
     If _BARRABLOCCATA=1
      X Mouse=X Hard(Int(XBARRA))
     End If 
     Dec _BARRABLOCCATA
    Else 
     If RITARDODELLABARRA=0 or RITARDOMASSIMODELLABARRA=0
      XBARRA=X Screen(X Mouse)
     End If 
     If RITARDOMASSIMODELLABARRA>0
      Add RITARDODELLABARRA,1,0 To RITARDOMASSIMODELLABARRA
     End If 
    End If 
    Proc MOSTRALABARRA
    Proc CAMBIALALUNGHEZZADELLABARRA
    Proc LIMITAIMOVIMENTIDELLABARRA
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=VERO
      If LAPALLINAERIMASTAINCOLLATAALLABARRA(PALLINA)=VERO
       XPALLINA#(PALLINA)=XBARRA-XCOLLA(PALLINA)
       YPALLINA#(PALLINA)=YBARRA-YCOLLA(PALLINA)
      Else 
       XPALLINA#(PALLINA)=XPALLINA#(PALLINA)+DELTAXPALLINA#(PALLINA)
       YPALLINA#(PALLINA)=YPALLINA#(PALLINA)+DELTAYPALLINA#(PALLINA)
       If TILTPALLINA=VERO
        XPALLINA#(PALLINA)=XPALLINA#(PALLINA)+XTILTPALLINA
        YPALLINA#(PALLINA)=YPALLINA#(PALLINA)+YTILTPALLINA
       End If 
       If XPALLINA#(PALLINA)>XPANNELLO-1-3
        XPALLINA#(PALLINA)=XPANNELLO-1-3
        DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
        If SUONICARICATI=VERO
         Sam Play VOCE,2,8363*2 : Proc VOCESEGUENTE
        Else 
         Boom 
        End If 
       Else If XPALLINA#(PALLINA)<3
        XPALLINA#(PALLINA)=3
        DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
        If SUONICARICATI=VERO
         Sam Play VOCE,2,8363*2 : Proc VOCESEGUENTE
        Else 
         Boom 
        End If 
       Else If YPALLINA#(PALLINA)<3
        YPALLINA#(PALLINA)=3
        DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
        If SUONICARICATI=VERO
         Sam Play VOCE,2,8363*2 : Proc VOCESEGUENTE
        Else 
         Boom 
        End If 
       End If 
       If TILTPALLINA=VERO
        Add XTILTPALLINA,-Sgn(XTILTPALLINA)
        If XTILTPALLINA>0
         XTILTPALLINA=Max(XTILTPALLINA,0)
        Else If XTILTPALLINA<0
         XTILTPALLINA=Min(XTILTPALLINA,0)
        End If 
        Add YTILTPALLINA,-Sgn(YTILTPALLINA)
        If YTILTPALLINA>0
         YTILTPALLINA=Max(YTILTPALLINA,0)
        Else If YTILTPALLINA<0
         YTILTPALLINA=Min(YTILTPALLINA,0)
        End If 
        Screen Display 0,128+XTILTPALLINA,44+YTILTPALLINA,320,256
        If XTILTPALLINA=0 and YTILTPALLINA=0
         TILTPALLINA=FALSO
        End If 
       Else 
        If TASTOPREMUTO$=" "
         XTILTPALLINA=Rnd(32)-16 : YTILTPALLINA=Rnd(32)-16 : TILTPALLINA=VERO
        End If 
       End If 
      End If 
      Bob OGGETTOPALLINA+PALLINA,Int(XPALLINA#(PALLINA)),Int(YPALLINA#(PALLINA)),IMMAGINEPALLINA
      If LAPALLINAERIMASTAINCOLLATAALLABARRA(PALLINA)=FALSO
       Proc MATTONCINOCOLPITODALLAPALLINA[PALLINA]
       Proc LAPALLINAHACOLPITOLABARRA[PALLINA]
       Proc LAPALLINAHACOLPITOLARIGA[PALLINA]
       Proc LAPALLINAEUSCITADALCAMPODIGIOCO[PALLINA]
      End If 
     End If 
    Next PALLINA
    Exit If TASTOPREMUTO$=Chr$(27)
    TASTOPREMUTO$=Lower$(Inkey$)
    Exit If TASTOPREMUTO$=Chr$(27)
    If TASTOPREMUTO$="p"
     Proc METTIILGIOCOINPAUSA
    End If 
    Proc MOSTRAILLASER
    Proc MOSTRAILRAGGIOLASER
    TASTOGRIGIO=Key Shift
    SHIFTSINISTRO=Btst(0,TASTOGRIGIO)
    SHIFTDESTRO=Btst(1,TASTOGRIGIO)
    TASTOMAIUSCOLE=Btst(2,TASTOGRIGIO)
    TASTISHIFTPREMUTI=SHIFTSINISTRO or SHIFTDESTRO or TASTOMAIUSCOLE
    If TASTISHIFTPREMUTI=FALSO
     Proc MATTONCINOCOLPITODALRAGGIOLASER
    End If 
    Proc LABARRAESTATACOLPITADALRAGGIOLASERRIFLESSO
    If T0GLILARIGA>0
     If XRIGA>0
      Dec XRIGA : Proc MOSTRALARIGA[T0GLILARIGA]
     Else 
      Proc T0GLILARIGA : DURATADELLARIGA=-1
     End If 
    Else 
     If RIGA>0
      If XRIGA<XFINALERIGA
       Inc XRIGA : Proc MOSTRALARIGA[RIGA]
      Else 
       If DURATADELLARIGA=-1
        DURATADELLARIGA=DURATADELLARIGA(RIGA-1)
       Else If DURATADELLARIGA=0
        T0GLILARIGA=RIGA : RIGA=0
       Else 
        Dec DURATADELLARIGA
       End If 
      End If 
     End If 
    End If 
    Proc MATTONCINIDIPOTENZIAMENTO[0,0]
    Proc BOINGINCAMPO
    If _PAPEROINCAMPO=VERO
     Proc _PAPEROINCAMPO
    End If 
    If RITARDODELLENTRATAINCAMPODELPAPEROALIENO=0
     Proc _PAPEROALIENOINCAMPO
     Proc MOLLAILGUANO
    Else 
     Dec RITARDODELLENTRATAINCAMPODELPAPEROALIENO
    End If 
    If RITARDODELLENTRATAINCAMPODELRUBAPALLINA=1
     ENTRATAINCAMPODELRUBAPALLINA=Rnd(2)>1
    End If 
    If RITARDODELLENTRATAINCAMPODELRUBAPALLINA=0
     If ENTRATAINCAMPODELRUBAPALLINA=VERO
      Proc RUBAPALLINAINCAMPO
     End If 
    Else 
     Dec RITARDODELLENTRATAINCAMPODELRUBAPALLINA
    End If 
    Bob Update 
    For MATTONCINODARIDISEGNARE=0 To MASSIMOMATTONCINIDARIDISEGNARE-1
     If DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)>0
      MATTONCINO=MATTONCINODARIDISEGNARE(MATTONCINODARIDISEGNARE)
      If MATTONCINO>0
       X0MATTONCINO=X0ZONA(MATTONCINO-1)
       Y0MATTONCINO=Y0ZONA(MATTONCINO-1)
       TIPODIMATTONCINO=MATTONCINO(MATTONCINO-1)
       If TIPODIMATTONCINO=0
        Ink 0 : Bar X0MATTONCINO,Y0MATTONCINO To X0MATTONCINO+19,Y0MATTONCINO+9
       Else 
        Paste Bob X0MATTONCINO,Y0MATTONCINO,82+TIPODIMATTONCINO
       End If 
      End If 
      Dec DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)
     End If 
    Next MATTONCINODARIDISEGNARE
    If BONUS>0
     If RITARDODELDECREMENTODELBONUS=9
      RITARDODELDECREMENTODELBONUS=0 : Dec BONUS : Proc MOSTRAILBONUS[FALSO]
     Else 
      Inc RITARDODELDECREMENTODELBONUS
     End If 
    End If 
    Exit If MATTONCINI=0
    If RITARDODELGIOCO=1
     Wait Vbl 
    End If 
    Inc DURATADELGIOCO
   Until PALLINEINCAMPO=0
   Proc CANCELLALABARRA
   Proc CANCELLALEPALLINE
   Proc CANCELLAIMATTONCINIDIPOTENZIAMENTO[FALSO]
   Proc T0GLIILLASER
   Proc CANCELLAILRAGGIOLASER
   Proc CANCELLAILRUBAPALLINA
   Proc CANCELLAILPAPERO : _PAPEROINCAMPO=FALSO
   Proc CANCELLAILPAPEROALIENO
   Proc CANCELLAILGUANO
   Proc CANCELLAIBOING
   Proc CANCELLALARIGA
   Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
   Exit If TASTOPREMUTO$=Chr$(27)
   Add TEMP0TRASCORSODIGIOCO,DURATADELGIOCO
   If MATTONCINI=0
    Proc AGGIUNGIALPUNTEGGIOILBONUS
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc AGGIORNAILPANNELLO
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
    Proc AGGIUNGIALPUNTEGGIOILBONUSPERIMATTONCINIRIMASTI
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc AGGIORNAILPANNELLO
    DISTANZADELMATTONCINOPIUVICINOALPAPERO=1000
    Inc LIVELLO
    INIZIODELLIVELLO=VERO
   End If 
   If PALLINEINCAMPO>0
    Proc CANCELLAIMATTONCINI
    Proc CANCELLAIMATTONCINIDIPOTENZIAMENTO[VERO]
    Proc CARICAILLIVELLO
    Exit If LIVELLO<0
    Proc DABANCOAVARIABILI
    Proc METTIECONTAIMATTONCINI
   Else 
    C0LLA=FALSO
    RIMBALZODELLEPALLINESUIMATTONCINI=VERO
    If LASER>0
     Dec LASER
    End If 
    If PALLINE>0
     Dec PALLINE : PALLINEINCAMPO=1
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,5 : Proc VOCESEGUENTE
    Else 
     Boom 
    End If 
   End If 
  Until PALLINE=0
  Autoback 0
  If TASTOPREMUTO$<>Chr$(27)
   Proc AGGIUNGIALPUNTEGGIOILBONUSPERLEPALLINERIMASTEAFINEGIOCO
   Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
   Proc AGGIORNAILPANNELLO
   Proc FAIINSERIREALGIOCATOREILSUOPUNTEGGIO
   Proc SALVAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
   Proc CARICAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
   Proc MOSTRAILTEMPOTRASCORSODIGIOCOESALUTAILGIOCATORE
  End If 
 End If 
Until TASTO=-2
Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
Flash Off : Proc DISSOLVENZADEICOLORI[0,1,1]
Autoback 1
Proc T0GLIIMATTONCINI
Proc T0GLIILPANNELLO
Proc T0GLILARCOBALENO
Show : Rainbow Del 0 : Screen Close 0 : Erase All : End 
Procedure AGGIORNAILPANNELLO
 'update the panel  
 Proc MOSTRAILPUNTEGGIO[VERO]
 Proc MOSTRAILPUNTEGGIOMASSIMO[VERO]
 Proc MOSTRALEPALLINERIMASTE
 Proc MOSTRAILLIVELLO
 Proc MOSTRAILBONUS[VERO]
End Proc
Procedure AGGIUNGIALPUNTEGGIOILBONUS
 'add the bonus to the score  
 If BONUS>0
  BONUS$="I am going to add the bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to your game points."+Chr$(10)
  BONUS$=BONUS$+"Wait for a moment, please..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,22,20,1,-1]
  Repeat 
   TASTOPREMUTO$=Lower$(Inkey$)
   If TASTOPREMUTO$="p"
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc METTIILGIOCOINPAUSA
   End If 
   Dec BONUS : Proc MOSTRAILBONUS[FALSO]
   Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
  Until BONUS=0
 Else 
  TASTOPREMUTO$=Lower$(Inkey$)
  If TASTOPREMUTO$="p"
   Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
   Proc METTIILGIOCOINPAUSA
  End If 
  BONUS$="There are no bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to add to your game points."+Chr$(10)
  BONUS$=BONUS$+"I am sorry..."+Chr$(10)+"...I wish a better luck for the next level."+Chr$(10)
  BONUS$=BONUS$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,21,20,1,1000]
 End If 
End Proc
Procedure AGGIUNGIALPUNTEGGIOILBONUSPERIMATTONCINIRIMASTI
 'add 2 points to the score for every brick left  
 If MATTONCINIRIMASTI>0
  BONUS$="I am going to add the bricks left bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to your game points,"+Chr$(10)
  BONUS$=BONUS$+"adding two points for each brick left."+Chr$(10)
  BONUS$=BONUS$+"There are"+Str$(MATTONCINIRIMASTI)+" bricks left..."+Chr$(10)
  BONUS$=BONUS$+"...wait for a moment, please..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,22,20,1,-1]
  Repeat 
   TASTOPREMUTO$=Lower$(Inkey$)
   If TASTOPREMUTO$="p"
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc METTIILGIOCOINPAUSA
   End If 
   Dec MATTONCINIRIMASTI
   Add PUNTEGGIO,2 : Proc MOSTRAILPUNTEGGIO[VERO]
  Until MATTONCINIRIMASTI=0
 Else 
  TASTOPREMUTO$=Lower$(Inkey$)
  If TASTOPREMUTO$="p"
   Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
   Proc METTIILGIOCOINPAUSA
  End If 
  BONUS$="There are no bricks left bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to add to your game points."+Chr$(10)
  BONUS$=BONUS$+"I am sorry..."+Chr$(10)+"...I wish a better luck for the next level."+Chr$(10)
  BONUS$=BONUS$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,21,20,1,1000]
 End If 
End Proc
Procedure AGGIUNGIALPUNTEGGIOILBONUSPERLEPALLINERIMASTEAFINEGIOCO
 'add 500 points to the score for every ball left at the end of the game  
 If PALLINE>0
  Repeat 
   BONUS$="I am going to add the ball left bonus points..."+Chr$(10)
   BONUS$=BONUS$+"...to your game points,"+Chr$(10)
   BONUS$=BONUS$+"adding 500 points for each ball left."+Chr$(10)
   BONUS$=BONUS$+"There are"+Str$(PALLINE)+" ball(s) left..."+Chr$(10)
   BONUS$=BONUS$+"...wait for a moment, please..."
   Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,22,20,1,-1]
   TASTOPREMUTO$=Lower$(Inkey$)
   If TASTOPREMUTO$="p"
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
    Proc METTIILGIOCOINPAUSA
   End If 
   Dec PALLINE : Proc MOSTRALEPALLINERIMASTE
   Add PUNTEGGIO,500 : Proc MOSTRAILPUNTEGGIO[VERO]
   Sam Play VOCE,2 : Proc VOCESEGUENTE
   _ASPETTA[50]
  Until PALLINE=0
 Else 
  BONUS$="There are no balls left bonus points..."+Chr$(10)
  BONUS$=BONUS$+"...to add to your game points."+Chr$(10)
  BONUS$=BONUS$+"I am sorry..."+Chr$(10)+"...I wish a better luck for the next game."+Chr$(10)
  BONUS$=BONUS$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,21,20,1,1000]
 End If 
End Proc
Procedure _ASPETTA[TEMP0DAASPETTARE]
 'wait for a (mouse or grey) key pressed: 
 ' if time to wait (TEMP0DAASPETTARE) is less than zero exit immediately; 
 ' if time to wait is equal to zero wait forever; 
 ' if time to wait is grater than zero wait the specified time. 
 TASTO=0 : TASTOSCANSITO=0 : Timer=0
 Repeat 
  TASTOPREMUTO$=Inkey$
  TASTOGRIGIO=Key Shift
  TASTOSCANSITO=Scancode
  TASTOPREMUTODELTOPO=Mouse Key
  If TASTOGRIGIO>0 and TASTOGRIGIO<>Key Shift
   Add TASTO,TASTOGRIGIO*256 : Exit 
  End If 
  If TASTOPREMUTODELTOPO>0 Then TASTO=-TASTOPREMUTODELTOPO : Exit 
  If TASTOPREMUTO$<>"" Then TASTO=Asc(TASTOPREMUTO$) : Exit 
  If TEMP0DAASPETTARE>0 Then TEMP0TRASCORSO=Timer
  If TEMP0DAASPETTARE<0 Then Pop Proc
 Until TEMP0TRASCORSO>TEMP0DAASPETTARE
End Proc
Procedure BOINGINCAMPO
 'manage the boings 
 For BOING=0 To MASSIMOBOINGINCAMPO-1
  If BOING(BOING)>0
   If RITARDOBOING=0
    Bob OGGETTOBOING+BOING,XBOING(BOING),YBOING(BOING),IMMAGINEBOING(BOING(BOING)-1)
    Add XBOING(BOING),Rnd(4)-2
    Proc LIMITI[XBOING(BOING),0,XFINALERIGA] : XBOING(BOING)=Param
    Inc YBOING(BOING)
    Add BOING(BOING),1,1 To 8
   End If 
   Proc ILBOINGESTATOCOLPITO[BOING]
   Proc ILBOINGEUSCITODALCAMPODIGIOCO[BOING]
  Else If BOING(BOING)=0
   XBOING(BOING)=Rnd(XFINALERIGA) : YBOING(BOING)=-9 : BOING(BOING)=Rnd(7)+1
   If SUONICARICATI=VERO
    Sam Play VOCE,10 : Proc VOCESEGUENTE
   Else 
    Bell 60
   End If 
  Else If BOING(BOING)<0
   If BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
    Proc CANCELLAILBOING[BOING] : Inc BOING(BOING)
   Else 
    Inc BOING(BOING)
   End If 
  End If 
 Next BOING
 Add RITARDOBOING,1,0 To 3
End Proc
Procedure CAMBIALALUNGHEZZADELLABARRA
 'change the bar size 
 If LUNGHEZZADELLABARRACAMBIATA<>LUNGHEZZADELLABARRA
  If LUNGHEZZADELLABARRA=0
   If LUNGHEZZADELLABARRACAMBIATA=1
    Gosub LUNGHEZZADAZEROAUNO
   End If 
   If LUNGHEZZADELLABARRACAMBIATA=2
    Gosub LUNGHEZZADAZEROAUNO
    Gosub LUNGHEZZADAUNOADUE
   End If 
  Else If LUNGHEZZADELLABARRA=1
   If LUNGHEZZADELLABARRACAMBIATA=0
    Gosub LUNGHEZZADAUNOAZERO
   End If 
   If LUNGHEZZADELLABARRACAMBIATA=2
    Gosub LUNGHEZZADAUNOADUE
   End If 
  Else If LUNGHEZZADELLABARRA=2
   If LUNGHEZZADELLABARRACAMBIATA=0
    Gosub LUNGHEZZADADUEAUNO
    Gosub LUNGHEZZADAUNOAZERO
   End If 
   If LUNGHEZZADELLABARRACAMBIATA=1
    Gosub LUNGHEZZADADUEAUNO
   End If 
  End If 
 End If 
 LUNGHEZZADELLABARRA=LUNGHEZZADELLABARRACAMBIATA
 Pop Proc
 LUNGHEZZADAZEROAUNO:
 'from small to medium bar  
 For OGGETTO=45 To 41 Step -1
  Bob OGGETTOCENTRODELLABARRA,Int(XBARRA),YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,Int(XBARRA),YBARRA,OGGETTO+5
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update 
 Next OGGETTO
 Return 
 LUNGHEZZADAUNOADUE:
 'from medium to large bar  
 For OGGETTO=13 To 26
  Bob OGGETTOCENTRODELLABARRA,Int(XBARRA),YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,Int(XBARRA),YBARRA,OGGETTO+14
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update 
 Next OGGETTO
 Return 
 LUNGHEZZADADUEAUNO:
 'from large to medium bar  
 For OGGETTO=26 To 13 Step -1
  Bob OGGETTOCENTRODELLABARRA,Int(XBARRA),YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,Int(XBARRA),YBARRA,OGGETTO+14
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update 
 Next OGGETTO
 Return 
 LUNGHEZZADAUNOAZERO:
 'from medium to small bar  
 For OGGETTO=41 To 45
  Bob OGGETTOCENTRODELLABARRA,Int(XBARRA),YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,Int(XBARRA),YBARRA,OGGETTO+5
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update 
 Next OGGETTO
 Return 
End Proc
Procedure CANCELLAIBOING
 'turn off all the boings 
 For BOING=0 To MASSIMOBOINGINCAMPO-1
  Bob Off OGGETTOBOING+BOING
 Next BOING
 Bob Update 
End Proc
Procedure CANCELLAILBOING[BOING]
 'turn off the specified boing  
 Bob Off OGGETTOBOING+BOING
 Bob Update 
End Proc
Procedure CANCELLAILGUANO
 Bob Off OGGETTOGUANO
 Bob Update 
 GUANOMOLLATO=FALSO
 GUANOINCAMPO=FALSO
End Proc
Procedure CANCELLAILMATTONCINODIPOTENZIAMENTO[MATTONCINODIPOTENZIAMENTO]
 'turn off the specified bonus brick  
 Bob Off OGGETTOMATTONCINODIPOTENZIAMENTO+MATTONCINODIPOTENZIAMENTO
 Bob Update 
 MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=0
End Proc
Procedure CANCELLAILPAPERO
 'turn off the duck 
 Bob Off OGGETTOPAPERO
 Bob Update 
End Proc
Procedure CANCELLAILPAPEROALIENO
 'turn off the alien duck 
 Bob Off OGGETTOPAPEROALIENO
 Bob Update 
 _PAPEROALIENO=0
 _PAPEROALIENOINCAMPO=FALSO
End Proc
Procedure CANCELLAILRAGGIOLASER
 'turn off the laser ray  
 Bob Off OGGETTORAGGIOLASER
 Bob Update 
 RAGGIOLASERSPARATO=FALSO
End Proc
Procedure CANCELLAILRUBAPALLINA
 'turn off the ballthief  
 Bob Off OGGETTORUBAPALLINA
 Bob Update 
 Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELRUBAPALLINA
 PALLINASCELTADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
End Proc
Procedure CANCELLAIMATTONCINI
 'clear the bricks area   
 Cls 0,0,0 To XPANNELLO,Screen Height
 Screen Swap 
 Cls 0,0,0 To XPANNELLO,Screen Height
 Screen Swap 
End Proc
Procedure CANCELLAIMATTONCINIDIPOTENZIAMENTO[M0DO]
 'turn off all the bonus bricks 
 For MATTONCINODIPOTENZIAMENTO=0 To MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1
  If MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)>0
   Bob Off OGGETTOMATTONCINODIPOTENZIAMENTO+MATTONCINODIPOTENZIAMENTO
  End If 
  If M0DO=VERO Then MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=0
 Next MATTONCINODIPOTENZIAMENTO
 Bob Update 
End Proc
Procedure CANCELLALABARRA
 'turn off the bar  
 Bob Off OGGETTOCENTRODELLABARRA
 Bob Off OGGETTOLATIDELLABARRA
 Bob Update 
End Proc
Procedure CANCELLALAPALLINA[PALLINA]
 'turn off the specified ball   
 Bob Off OGGETTOPALLINA+PALLINA
 Bob Update 
 LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=FALSO
End Proc
Procedure CANCELLALARIGA
 'turn off the row  
 If RIGA>0
  T0GLILARIGA=RIGA : RIGA=0
 End If 
 For XRIGA=XRIGA To 0 Step -1
  Proc MOSTRALARIGA[T0GLILARIGA] : Wait Vbl 
 Next XRIGA
 DURATADELLARIGA=-1
End Proc
Procedure CANCELLALEPALLINE
 'turn off all the balls  
 For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
  Bob Off OGGETTOPALLINA+PALLINA
  LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=FALSO
 Next PALLINA
 Bob Update 
End Proc
Procedure CARICAGLIOGGETTI
 'load the objects  
 Load PERCORSODELLAGRAFICA$+OGGETTI$
End Proc
Procedure CARICAILLIVELLO
 'load the level  
 LIVELLO$="Livello"+Str$(LIVELLO)-" "
 FILE$=PERCORSODEILIVELLI$+LIVELLO$
 If Exist(FILE$)
  Open In 1,FILE$
  MARCATORE$=Input$(1,9)
  LUNGHEZZABANCO=Lof(1)
  Close 1
  If MARCATORE$="Mattonite"
   Reserve As Work BANCO,LUNGHEZZABANCO
   Bload FILE$,Start(BANCO)
  End If 
 Else 
  LIVELLO= Not LIVELLO
 End If 
End Proc
Procedure CARICAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
 'load the top hundred scores 
 If Exist(PUNTEGGI$)
  CENTOGIOCATORI$=""
  Open In 1,PUNTEGGI$
  For POSIZIONE=0 To 99
   Exit If Eof(1)
   Input #1,NOMEDELGIOCATORE$(POSIZIONE)
   CENTOGIOCATORI$=CENTOGIOCATORI$+"<"+Str$(POSIZIONE+1)-" "+"> "
   CENTOGIOCATORI$=CENTOGIOCATORI$+NOMEDELGIOCATORE$(POSIZIONE)+Chr$(10)
   Input #1,PUNTEGGIODELGIOCATORE$(POSIZIONE)
   CENTOGIOCATORI$=CENTOGIOCATORI$+PUNTEGGIODELGIOCATORE$(POSIZIONE)
   CENTOGIOCATORI$=CENTOGIOCATORI$+" points up to level "
   Input #1,LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONE)
   CENTOGIOCATORI$=CENTOGIOCATORI$+LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONE)
   If Not Eof(1)
    CENTOGIOCATORI$=CENTOGIOCATORI$+Chr$(10)
   End If 
  Next POSIZIONE
  Close 1
  PUNTEGGIOMASSIMO=Val(PUNTEGGIODELGIOCATORE$(0))
  Inc POSIZIONE
 End If 
End Proc
Procedure CARICAISUONI
 'load the sounds 
 If Chip Free<377502
  SUONICARICATI=FALSO
 Else 
  Load PERCORSODELLAMUSICA$+SUONI$
  SUONICARICATI=VERO
 End If 
End Proc
Procedure CREALEIMMAGINIPERLERIGHE
 'create the row images 
 XFINALERIGA=XPANNELLO-1
 IMMAGINERIGAUNO=IMMAGINEPALLINA+1
 Ink 20 : Bar 0,251 To XFINALERIGA,255
 Get Bob IMMAGINERIGAUNO,0,251 To XFINALERIGA+1,255+1
 Hot Spot IMMAGINERIGAUNO,XFINALERIGA,0
 IMMAGINERIGADUE=IMMAGINERIGAUNO+1
 Ink 21 : Bar 0,251 To XFINALERIGA,255
 Get Bob IMMAGINERIGADUE,0,251 To XFINALERIGA+1,255+1
 Hot Spot IMMAGINERIGADUE,XFINALERIGA,0
 IMMAGINERIGATRE=IMMAGINERIGADUE+1
 Ink 22 : Bar 0,251 To XFINALERIGA,255
 Get Bob IMMAGINERIGATRE,0,251 To XFINALERIGA+1,255+1
 Hot Spot IMMAGINERIGATRE,XFINALERIGA,0
 Ink 0 : Bar 0,251 To XFINALERIGA,255
End Proc
Procedure CREATESTOBORDATO[XTESTO,YTESTO,TESTO$,C0LORETESTO,C0LOREBORDO]
 'create outlined text  
 Ink C0LOREBORDO
 Text XTESTO,YTESTO-1,TESTO$
 Text XTESTO+1,YTESTO-1,TESTO$
 Text XTESTO+1,YTESTO,TESTO$
 Text XTESTO+1,YTESTO+1,TESTO$
 Text XTESTO,YTESTO+1,TESTO$
 Text XTESTO-1,YTESTO+1,TESTO$
 Text XTESTO-1,YTESTO,TESTO$
 Text XTESTO-1,YTESTO-1,TESTO$
 Ink C0LORETESTO
 Text XTESTO,YTESTO,TESTO$
End Proc
Procedure DABANCOAVARIABILI
 'copy from bank to variables 
 If Length(BANCO)>0
  INDIRIZZO=Start(BANCO)+9
  For A=0 To 246
   MATTONCINO(A)=Peek(INDIRIZZO)
   Inc INDIRIZZO
  Next A
  For A=0 To 255
   ARCOBALENO=Peek(INDIRIZZO)
   Inc INDIRIZZO
   ARCOBALENO=ARCOBALENO+Peek(INDIRIZZO)*$100
   Rain(0,A)=ARCOBALENO : Rainbow 0,257,0,271
   Wait Vbl 
   Inc INDIRIZZO
  Next A
  BONUS=Peek(INDIRIZZO)
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*100
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*10000
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*1000000
  Inc INDIRIZZO
 End If 
 Erase BANCO
End Proc
Procedure DISSOLVENZADEICOLORI[C0LORE,VELOCITA,M0DO]
 'fade the colours  
 If M0DO=0
  For C=0 To C0LORIDELLOSCHERMOMENOUNO
   Colour C,C0LORE
   If VELOCITA>0
    Wait VELOCITA
   End If 
  Next C
 Else 
  Dim ROSSO(C0LORIDELLOSCHERMOMENOUNO),VERDE(C0LORIDELLOSCHERMOMENOUNO),BLU(C0LORIDELLOSCHERMOMENOUNO)
  Dim ROSSOFINALE(C0LORIDELLOSCHERMOMENOUNO),VERDEFINALE(C0LORIDELLOSCHERMOMENOUNO),BLUFINALE(C0LORIDELLOSCHERMOMENOUNO)
  Dim ROSSODISSOLTO(C0LORIDELLOSCHERMOMENOUNO),VERDEDISSOLTO(C0LORIDELLOSCHERMOMENOUNO),BLUDISSOLTO(C0LORIDELLOSCHERMOMENOUNO)
  For C=0 To C0LORIDELLOSCHERMOMENOUNO
   If M0DO=1
    ROSSOFINALE(C)=C0LORE/256
    VERDEFINALE(C)=C0LORE/16 mod 16
    BLUFINALE(C)=C0LORE mod 16
   Else If M0DO=2
    ROSSOFINALE(C)=C0LORE(C)/256
    VERDEFINALE(C)=C0LORE(C)/16 mod 16
    BLUFINALE(C)=C0LORE(C) mod 16
   End If 
   ROSSO(C)=Colour(C)/256
   VERDE(C)=Colour(C)/16 mod 16
   BLU(C)=Colour(C) mod 16
  Next C
  Repeat 
   For C=0 To C0LORIDELLOSCHERMOMENOUNO
    If ROSSODISSOLTO(C)=FALSO
     If ROSSO(C)<ROSSOFINALE(C)
      Inc ROSSO(C)
     Else If ROSSO(C)=ROSSOFINALE(C)
      ROSSODISSOLTO(C)=VERO
     Else If ROSSO(C)>ROSSOFINALE(C)
      Dec ROSSO(C)
     End If 
    End If 
    If VERDEDISSOLTO(C)=FALSO
     If VERDE(C)<VERDEFINALE(C)
      Inc VERDE(C)
     Else If VERDE(C)=VERDEFINALE(C)
      VERDEDISSOLTO(C)=VERO
     Else If VERDE(C)>VERDEFINALE(C)
      Dec VERDE(C)
     End If 
    End If 
    If BLUDISSOLTO(C)=FALSO
     If BLU(C)<BLUFINALE(C)
      Inc BLU(C)
     Else If BLU(C)=BLUFINALE(C)
      BLUDISSOLTO(C)=VERO
     Else If BLU(C)>BLUFINALE(C)
      Dec BLU(C)
     End If 
    End If 
    Colour C,ROSSO(C)*256+VERDE(C)*16+BLU(C)
    If C=0
     C0LORIDISSOLTI=0
    End If 
    If ROSSODISSOLTO(C)=VERO
     If VERDEDISSOLTO(C)=VERO
      If BLUDISSOLTO(C)=VERO
       Inc C0LORIDISSOLTI
      End If 
     End If 
    End If 
   Next C
   If VELOCITA>0
    Wait VELOCITA
   End If 
  Until C0LORIDISSOLTI=C0LORIDELLOSCHERMOMENOUNO+1
 End If 
End Proc
Procedure FAIINSERIREALGIOCATOREILSUOPUNTEGGIO
 'let the player type his/her name and then insert this and the and score in the  
 ' the top hundred scores 
 GIOCATORE$="Anonymous"
 Repeat 
  MESSAGGIO$=""
  MESSAGGIO$=MESSAGGIO$+"You have entered the Top Hundred Scores..."+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+"...at position"+Str$(POSIZIONE)+"."+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+"Please backspace the Anonymous player..."+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+"...and type your name; press Return when done."+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+"Press the Esc key to undo the saving of your"+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+"name and score in the top hundred list."+Chr$(10)
  MESSAGGIO$=MESSAGGIO$+"[>"+GIOCATORE$+"<]"+Chr$(10)
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[MESSAGGIO$,22,20,1,9000]
  If TASTO=0 and TASTOSCANSITO=0
   GIOCATORE$="Anonymous" : TASTO=13
  End If 
  If TASTO>255
   TASTO=TASTO mod 256
  End If 
  If TASTO=8
   GIOCATORE$=Left$(GIOCATORE$,Len(GIOCATORE$)-1)
  Else If TASTO=27
   TASTO=13 : TASTOESCAPEPREMUTO=VERO
  Else If TASTO>31
   GIOCATORE$=GIOCATORE$+Chr$(TASTO)
  End If 
 Until TASTO=13
 If TASTOESCAPEPREMUTO=FALSO
  For POSIZIONI=98 To 0 Step -1
   If Val(PUNTEGGIODELGIOCATORE$(POSIZIONI))<PUNTEGGIO
    NOMEDELGIOCATORE$(POSIZIONI+1)=NOMEDELGIOCATORE$(POSIZIONI)
    PUNTEGGIODELGIOCATORE$(POSIZIONI+1)=PUNTEGGIODELGIOCATORE$(POSIZIONI)
    LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONI+1)=LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONI)
   End If 
  Next POSIZIONI
  NOMEDELGIOCATORE$(POSIZIONE-1)=GIOCATORE$
  PUNTEGGIODELGIOCATORE$(POSIZIONE-1)=Str$(PUNTEGGIO)-" "
  If LIVELLO<0
   LIVELLO= Not LIVELLO
  End If 
  LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONE-1)=Str$(LIVELLO)-" "
 End If 
End Proc
Procedure HAISPARATOILRAGGIOLASER
 'fire the laser ray  
 If LASER>0 and RAGGIOLASERSPARATO=FALSO
  XLASER=XBARRA : YLASER=YBARRA-5 : IMMAGINERAGGIOLASER=9+LASER
  RAGGIOLASERSPARATO=VERO
  If SUONICARICATI=VERO
   Sam Play VOCE,4,8363/SEMITONO#^LASER : Proc VOCESEGUENTE
  Else 
   Shoot 
  End If 
 End If 
End Proc
Procedure ILBOINGESTATOCOLPITO[BOING]
 'check if the specified boing has been hitted  
 If Bob Col(OGGETTOBOING+BOING,OGGETTOPALLINA To OGGETTOPALLINA+MASSIMOPALLINEINCAMPO-1)=VERO
  PALLINA=Col(-1)-OGGETTOPALLINA
  XDISTANZADELLAPALLINADALBOINGCOLPITO=Abs(XBOING(BOING)-Int(XPALLINA#(PALLINA)))
  If XDISTANZADELLAPALLINADALBOINGCOLPITO>9
   DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
  End If 
  YDISTANZADELLAPALLINADALBOINGCOLPITO=Abs(YBOING(BOING)-Int(YPALLINA#(PALLINA)))
  If YDISTANZADELLAPALLINADALBOINGCOLPITO>9
   DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
  End If 
  Add PUNTEGGIO,3 : Proc MOSTRAILPUNTEGGIO[VERO]
  BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Bell 3
  End If 
 Else If Bob Col(OGGETTOBOING+BOING,OGGETTORAGGIOLASER To OGGETTORAGGIOLASER)=VERO
  Proc CANCELLAILRAGGIOLASER
  Add PUNTEGGIO,2 : Proc MOSTRAILPUNTEGGIO[VERO]
  BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Bell 2
  End If 
 Else If Bob Col(OGGETTOBOING+BOING,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
  Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
  BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Bell 1
  End If 
 End If 
End Proc
Procedure ILBOINGEUSCITODALCAMPODIGIOCO[BOING]
 'check if the specified boing has gone out of the game field 
 If YBOING(BOING)>255+9 Then BOING(BOING)=RITARDODELLENTRATAINCAMPODEIBOING
End Proc
Procedure ILGUANOEUSCITODALCAMPODIGIOCO
 'check if the guano has gone out of the game field 
 If YGUANO>255 Then Proc CANCELLAILGUANO
End Proc
Procedure ILPAPEROALIENOESTATOCOLPITO
 'check if the alien duck has been hitted 
 If Bob Col(OGGETTOPAPEROALIENO,OGGETTOPALLINA To OGGETTOPALLINA+MASSIMOPALLINEINCAMPO-1)=VERO
  PALLINA=Col(-1)-OGGETTOPALLINA
  XPALLINA=Int(XPALLINA#(PALLINA))
  XDISTANZADELLAPALLINADALPAPEROALIENO=Abs(XPAPEROALIENO-XPALLINA)
  If XDISTANZADELLAPALLINADALPAPEROALIENO>12
   DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
  End If 
  YPALLINA=Int(YPALLINA#(PALLINA))
  YDISTANZADELLAPALLINADALPAPEROALIENO=YPAPEROALIENO-YPALLINA
  If YDISTANZADELLAPALLINADALPAPEROALIENO>-21 and YDISTANZADELLAPALLINADALPAPEROALIENO<10
   DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
  End If 
  Add PUNTEGGIO,24 : Proc MOSTRAILPUNTEGGIO[VERO]
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Boom 
  End If 
  _PAPEROALIENOCOLPITO=VERO
 Else If Bob Col(OGGETTOPAPEROALIENO,OGGETTORAGGIOLASER To OGGETTORAGGIOLASER)=VERO
  Proc CANCELLAILRAGGIOLASER
  Add PUNTEGGIO,12 : Proc MOSTRAILPUNTEGGIO[VERO]
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Boom 
  End If 
  _PAPEROALIENOCOLPITO=VERO
 Else If Bob Col(OGGETTOPAPEROALIENO,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
  Add PUNTEGGIO,6 : Proc MOSTRAILPUNTEGGIO[VERO]
  If SUONICARICATI=VERO
   Sam Play VOCE,9 : Proc VOCESEGUENTE
  Else 
   Boom 
  End If 
  _PAPEROALIENOCOLPITO=VERO
 End If 
 If _PAPEROALIENOCOLPITO=VERO
  Proc CANCELLAILPAPEROALIENO
  Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELPAPEROALIENO
  Proc CANCELLAILGUANO
 End If 
End Proc
Procedure ILPAPEROALIENOEUSCITODALCAMPODIGIOCO
 'check if the alien duck has gone out of the game field  
 If YPAPEROALIENO>255+9 Then Proc CANCELLAILPAPEROALIENO
End Proc
Procedure ILRUBAPALLINAESTATOCOLPITO
 'check if the ballthief has been hitted  
 If RUBAPALLINACOLPITO=FALSO
  For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
   If PALLINAPRESADALRUBAPALLINA<MASSIMOPALLINEINCAMPO
    If PALLINA<>PALLINAPRESADALRUBAPALLINA
     If Bob Col(OGGETTORUBAPALLINA,OGGETTOPALLINA+PALLINA To OGGETTOPALLINA+PALLINA)=VERO
      XPALLINA=Int(XPALLINA#(PALLINA))
      XDISTANZADELLAPALLINADALRUBAPALLINA=Abs(XRUBAPALLINA-XPALLINA)
      If XDISTANZADELLAPALLINADALRUBAPALLINA>12
       DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
      End If 
      YPALLINA=Int(YPALLINA#(PALLINA))
      YDISTANZADELLAPALLINADALRUBAPALLINA=YRUBAPALLINA-YPALLINA
      If YDISTANZADELLAPALLINADALRUBAPALLINA>0 and YDISTANZADELLAPALLINADALRUBAPALLINA<11
       DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
      End If 
      Add PUNTEGGIO,50 : Proc MOSTRAILPUNTEGGIO[VERO]
      If SUONICARICATI=VERO
       Sam Play VOCE,9 : Proc VOCESEGUENTE
      Else 
       Boom 
      End If 
      RUBAPALLINACOLPITO=VERO
     End If 
    End If 
   End If 
  Next PALLINA
  If Bob Col(OGGETTORUBAPALLINA,OGGETTORAGGIOLASER To OGGETTORAGGIOLASER)=VERO
   Proc CANCELLAILRAGGIOLASER
   Add PUNTEGGIO,100 : Proc MOSTRAILPUNTEGGIO[VERO]
   If SUONICARICATI=VERO
    Sam Play VOCE,9 : Proc VOCESEGUENTE
   Else 
    Boom 
   End If 
   RUBAPALLINACOLPITO=VERO
  Else If Bob Col(OGGETTORUBAPALLINA,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
   Add PUNTEGGIO,200 : Proc MOSTRAILPUNTEGGIO[VERO]
   If SUONICARICATI=VERO
    Sam Play VOCE,9 : Proc VOCESEGUENTE
   Else 
    Boom 
   End If 
   RUBAPALLINACOLPITO=VERO
  End If 
 Else 
  Inc IMMAGINERUBAPALLINA
  If IMMAGINERUBAPALLINA=10
   Proc CANCELLAILRUBAPALLINA
   Proc IMPOSTAILRITARDODELLENTRATAINCAMPODELRUBAPALLINA
   If PALLINAPRESADALRUBAPALLINA<MASSIMOPALLINEINCAMPO
    PALLINA(PALLINAPRESADALRUBAPALLINA)=VERO
   End If 
   PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
   IMMAGINERUBAPALLINA=0
   RUBAPALLINACOLPITO=FALSO
  End If 
 End If 
End Proc
Procedure ILRUBAPALLINAEUSCITODALCAMPODIGIOCO
 'check if the ballthief has gone out of the game field 
 If YRUBAPALLINA<-4
  Proc CANCELLAILRUBAPALLINA
  PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
  Dec PALLINEINCAMPO
 End If 
End Proc
Procedure IMPOSTAGLIOGGETTI
 'set the object images 
 IMMAGINEPALLINA=Length(1)
 IMMAGINELASER=6
 MATTONCINIDIPOTENZIAMENTO=Length(1)-IMMAGINIBOING-IMMAGINIRUBAPALLINA-IMMAGINIGUANO-IMMAGINIPAPERO*2-116
 For IMMAGINE=0 To IMMAGINIBOING-1
  IMMAGINEBOING(IMMAGINE)=IMMAGINEPALLINA-IMMAGINIBOING+IMMAGINE
 Next IMMAGINE
 For IMMAGINE=0 To IMMAGINIRUBAPALLINA-1
  IMMAGINERUBAPALLINA(IMMAGINE)=IMMAGINEPALLINA-IMMAGINIBOING-IMMAGINIRUBAPALLINA+IMMAGINE
 Next IMMAGINE
 IMMAGINEGUANO=IMMAGINEPALLINA-IMMAGINIBOING-IMMAGINIRUBAPALLINA-IMMAGINIGUANO
 For IMMAGINE=0 To IMMAGINIPAPERO-1
  IMMAGINEPAPEROALIENO(IMMAGINE)=IMMAGINEPALLINA-IMMAGINIBOING-IMMAGINIRUBAPALLINA-IMMAGINIGUANO-IMMAGINIPAPERO+IMMAGINE
 Next IMMAGINE
 For IMMAGINE=0 To IMMAGINIPAPERO-1
  IMMAGINEPAPERO(IMMAGINE)=IMMAGINEPALLINA-IMMAGINIBOING-IMMAGINIRUBAPALLINA-IMMAGINIGUANO-IMMAGINIPAPERO*2+IMMAGINE
 Next IMMAGINE
End Proc
Procedure IMPOSTAIBOING
 'set the boings to their initial status    
 For BOING=0 To MASSIMOBOINGINCAMPO-1
  BOING(BOING)=0
 Next BOING
End Proc
Procedure IMPOSTAICOLORI
 'remember the screen palette 
 Get Bob Palette 
 C0LORIDELLOSCHERMOMENOUNO=Screen Colour-1
 If C0LORIDELLOSCHERMOMENOUNO=63 Then C0LORIDELLOSCHERMOMENOUNO=31
 For C=0 To C0LORIDELLOSCHERMOMENOUNO
  C0LORE(C)=Colour(C)
 Next C
End Proc
Procedure IMPOSTAILAMPEGGI
 'set the colour flashes  
 Flash 20,"(0FF,2)(FFF,1)(0FF,2)(000,1)"
 Flash 21,"(F70,2)(FFF,1)(F70,2)(000,1)"
 Flash 22,"(F77,9)(FF7,9)(7F7,9)(7FF,9)(77F,9)(F7F,9)"
End Proc
Procedure IMPOSTALEPALLINE
 'set the bouncign of the balls to their initial state  
 For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
  If PALLINA<PALLINEINCAMPO
   PALLINA(PALLINA)=VERO
   VELOCITADELLAPALLINA#(PALLINA)=1
   D1REZIONEXPALLINA=Rnd(1)
   If D1REZIONEXPALLINA=1
    DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)
   Else 
    DELTAXPALLINA#(PALLINA)=-VELOCITADELLAPALLINA#(PALLINA)
   End If 
   DELTAYPALLINA#(PALLINA)=-VELOCITADELLAPALLINA#(PALLINA)
  Else 
   PALLINA(PALLINA)=FALSO
   Proc CANCELLALAPALLINA[PALLINA]
  End If 
  LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=FALSO
 Next PALLINA
End Proc
Procedure IMPOSTAILRITARDODELLENTRATAINCAMPODELPAPEROALIENO
 'time waiting for the alien duck 
 RITARDODELLENTRATAINCAMPODELPAPEROALIENO=29475-LIVELLO*25
End Proc
Procedure IMPOSTAILRITARDODELLENTRATAINCAMPODELRUBAPALLINA
 'time waiting for the ballthief
 RITARDODELLENTRATAINCAMPODELRUBAPALLINA=55950-LIVELLO*50
End Proc
Procedure IMPOSTAIPERCORSIDEIFILE
 'look for the file paths 
 PERCORSODELLAGRAFICA$=PERCORSO$+"Grafica/"
 PERCORSODEILIVELLI$=PERCORSO$+"Livelli/"
 PERCORSODELLAMUSICA$=PERCORSO$+"Musica/"
End Proc
Procedure IMPOSTALADURATADELLERIGHE
 'set the time duration of the rows in 50th of a second   
 DURATADELLARIGA(0)=3000
 DURATADELLARIGA(1)=9000
 DURATADELLARIGA(2)=27000
End Proc
Procedure IMPOSTALARCOBALENO
 'set the rainbow 
 Set Rainbow 0,0,271,"","",""
 For LINEADELLARCOBALENO=0 To 255
  Rain(0,LINEADELLARCOBALENO)=$FFF
 Next LINEADELLARCOBALENO
 Rainbow 0,257,0,271
End Proc
Procedure IMPOSTALEVOCI
 'set the audio voices
 For VOCE=0 To 3
  VOCE(VOCE)=2^VOCE
 Next VOCE
End Proc
Procedure IMPOSTALEZONEDEIMATTONCINI
 'set the brick detection zones 
 Reserve Zone 264
 For MATTONCINO=0 To 246
  LINEADELMATTONCINO=MATTONCINO/13 : RIGADELMATTONCINO=MATTONCINO mod 13
  X0ZONA(MATTONCINO)=RIGADELMATTONCINO*21
  Y0ZONA(MATTONCINO)=LINEADELMATTONCINO*11
  X0MATTONCINO=X0ZONA(MATTONCINO)
  Y0MATTONCINO=Y0ZONA(MATTONCINO)
  If RIGADELMATTONCINO=12
   X1MATTONCINO=X0MATTONCINO+19
   Y1MATTONCINO=Y0MATTONCINO+9
  Else 
   X1MATTONCINO=X0MATTONCINO+20
   Y1MATTONCINO=Y0MATTONCINO+10
  End If 
  Set Zone MATTONCINO+1,X0MATTONCINO,Y0MATTONCINO To X1MATTONCINO,Y1MATTONCINO
 Next MATTONCINO
End Proc
Procedure IMPOSTALINGOMBRODELLABARRA
 'set the length of the bars from the center to an edge 
 INGOMBRODELLABARRA(0)=10
 INGOMBRODELLABARRA(1)=16
 INGOMBRODELLABARRA(2)=31
End Proc
Procedure IMPOSTALOSCHERMO
 'set the screen  
 Screen Open 0,320,256,64,Lowres : Curs Off : Flash Off : Pen 1 : Paper 0
 Cls : Bob Update Off : Gr Writing 0 : Wait Vbl : Double Buffer : Update Off 
 Autoback 0 : Limit Mouse 
End Proc
Procedure INDIVIDUALAPOSIZIONEDELPROGRAMMA
 ' Look for the position of the program 
 PERCORSO$=Dir$
End Proc
Procedure LABARRAESTATACOLPITADALGUANO
 'check if the bar has been hitted by the guano 
 If GUANOINCAMPO=VERO and GUANOMOLLATO=VERO
  If Bob Col(OGGETTOGUANO,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
   EFFETTODELGUANO=Rnd(2)
   If EFFETTODELGUANO=2
    If LASER>0
     Dec LASER
    End If 
   Else If EFFETTODELGUANO=1
    _BARRABLOCCATA=50+LIVELLO
   End If 
   Proc CANCELLAILGUANO
  End If 
 End If 
End Proc
Procedure LABARRAESTATACOLPITADALRAGGIOLASERRIFLESSO
 'check if the bar  has been hitted by the reflected laser ray  
 If RAGGIOLASERSPARATO=VERO and RAGGIOLASERRIFLESSO=VERO
  If Bob Col(OGGETTORAGGIOLASER,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
   EFFETTODELRAGGIOLASERRIFLESSO=Rnd(2)
   If EFFETTODELRAGGIOLASERRIFLESSO=2
    If LASER>0
     Dec LASER
    End If 
   Else If EFFETTODELRAGGIOLASERRIFLESSO=1
    _BARRABLOCCATA=50+LIVELLO
   End If 
   Proc CANCELLAILRAGGIOLASER
   RAGGIOLASERRIFLESSO=FALSO
  End If 
 End If 
End Proc
Procedure LAPALLINAEUSCITADALCAMPODIGIOCO[PALLINA]
 'check if the specified ball has gone out of the game field  
 If YPALLINA#(PALLINA)>255+3
  Proc CANCELLALAPALLINA[PALLINA]
  PALLINA(PALLINA)=FALSO
  Dec PALLINEINCAMPO
 End If 
End Proc
Procedure LAPALLINAHACOLPITOLABARRA[PALLINA]
 'check if the specified ball has hitted the bar  
 If Bob Col(OGGETTOPALLINA+PALLINA,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
  If LAPALLINAHACOLPITOLABARRA(PALLINA)=FALSO
   If C0LLA=VERO
    XCOLLA(PALLINA)=Int(XBARRA-XPALLINA#(PALLINA))
    YCOLLA(PALLINA)=YBARRA-Int(YPALLINA#(PALLINA))
    LAPALLINAERIMASTAINCOLLATAALLABARRA(PALLINA)=VERO
   End If 
   If Col(OGGETTOCENTRODELLABARRA)=VERO
    If LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=VERO
     DELTAXPALLINA#(PALLINA)=DELTAXPALLINA#(PALLINA)/2.0
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)*2
     LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=FALSO
    Else 
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,2 : Proc VOCESEGUENTE
    Else 
     Boom 
    End If 
   Else If Col(OGGETTOLATIDELLABARRA)=VERO
    If LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=VERO
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
    Else 
     DELTAXPALLINA#(PALLINA)=DELTAXPALLINA#(PALLINA)*2
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)/2.0
     LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)=VERO
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,2,8363/2 : Proc VOCESEGUENTE
    Else 
     Boom 
    End If 
   End If 
   LAPALLINAHACOLPITOLABARRA(PALLINA)=VERO
  End If 
 Else 
  LAPALLINAHACOLPITOLABARRA(PALLINA)=FALSO
 End If 
End Proc
Procedure LAPALLINAHACOLPITOLARIGA[PALLINA]
 'check if the specified ball has hitted the row  
 If Bob Col(OGGETTOPALLINA+PALLINA,OGGETTORIGA To OGGETTORIGA)=VERO
  If DELTAYPALLINA#(PALLINA)>0
   DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
   If SUONICARICATI=VERO
    Sam Play VOCE,7 : Proc VOCESEGUENTE
   Else 
    Bell 96
   End If 
  End If 
 End If 
End Proc
Procedure LIMITAIMOVIMENTIDELLABARRA
 'lock bar movements  
 X0LIMITETOPO=X Hard(INGOMBRODELLABARRA(LUNGHEZZADELLABARRA))
 Y0LIMITETOPO=Y Hard(0)
 X1LIMITETOPO=X Hard(XPANNELLO-1-INGOMBRODELLABARRA(LUNGHEZZADELLABARRA))
 Y1LIMITETOPO=Y Hard(Screen Height-1)
 Limit Mouse X0LIMITETOPO,Y0LIMITETOPO To X1LIMITETOPO,Y1LIMITETOPO
End Proc
Procedure LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
 ' Lock bar movements while it is changing
 If OGGETTO>39 and OGGETTO<46
  INGOMBRODELLABARRA=46-OGGETTO+10
 Else If OGGETTO>12 and OGGETTO<27
  INGOMBRODELLABARRA=OGGETTO+4
 End If 
 X0LIMITETOPO=X Hard(INGOMBRODELLABARRA)
 Y0LIMITETOPO=Y Hard(0)
 X1LIMITETOPO=X Hard(XPANNELLO-1-INGOMBRODELLABARRA)
 Y1LIMITETOPO=Y Hard(Screen Height-1)
 Wait Vbl 
 Limit Mouse X0LIMITETOPO,Y0LIMITETOPO To X1LIMITETOPO,Y1LIMITETOPO
End Proc
Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
 '-> Limiti by Stefano Maria Regattin 
 'i> 19 maggio 1996 
 'm> 12 giugno 1996 
 '--------------------------------------------------------
 'La procedura equivale alle seguenti linee di programma: 
 ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
 ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
 'Se LIMITEMINIMO è maggiore di LIMITEMASSIMO ne scambia i valori 
 '----------------------------------------------------------------  
 If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
 NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
End Proc[NUMERO]
Procedure MATTONCINIDIPOTENZIAMENTO[MATTONCINO,ESCESEUGUALEAZERO]
 'manage the bonus bricks 
 If ESCESEUGUALEAZERO>0 Then Pop Proc
 If MATTONCINO=0
  For MATTONCINODIPOTENZIAMENTO=0 To MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1
   TIPODIMATTONCINODIPOTENZIAMENTO=MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)
   If TIPODIMATTONCINODIPOTENZIAMENTO>0
    Bob OGGETTOMATTONCINODIPOTENZIAMENTO+MATTONCINODIPOTENZIAMENTO,XMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO),YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO),115+TIPODIMATTONCINODIPOTENZIAMENTO
    Proc MATTONCINODIPOTENZIAMENTOPRESODALLABARRA[MATTONCINODIPOTENZIAMENTO,TIPODIMATTONCINODIPOTENZIAMENTO]
    Inc YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)
    Proc MATTONCINODIPOTENZIAMENTOUSCITODALCAMPODIGIOCO[MATTONCINODIPOTENZIAMENTO]
   End If 
  Next MATTONCINODIPOTENZIAMENTO
 Else 
  For MATTONCINODIPOTENZIAMENTO=0 To MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1
   TIPODIMATTONCINODIPOTENZIAMENTO=MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)
   If TIPODIMATTONCINODIPOTENZIAMENTO=0
    If MATTONCINO>0
     MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=Rnd(29)+1
     XMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=X0ZONA(MATTONCINO-1)
     YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=Y0ZONA(MATTONCINO-1)
    Else If MATTONCINO<0
     MATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=-MATTONCINO
     XMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=XBARRA-9
     YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)=-9
    End If 
    Exit 
   End If 
  Next MATTONCINODIPOTENZIAMENTO
 End If 
End Proc
Procedure MATTONCINOCOLPITODALLAPALLINA[PALLINA]
 'check if a brick has been hitted by the specified ball  
 XPALLINA=Int(XPALLINA#(PALLINA)) : YPALLINA=Int(YPALLINA#(PALLINA))
 MATTONCINO=Zone(XPALLINA,YPALLINA)
 If MATTONCINO>0
  MATTONELLA=MATTONCINO(MATTONCINO-1)
  If MATTONELLA>0
   If MATTONELLA<10
    MATTONCINOELIMINATODALLAPALLINA=VERO
   Else If MATTONELLA>9 and MATTONELLA<28
    Add MATTONELLA,-9
    MATTONCINO(MATTONCINO-1)=MATTONELLA
    Proc RIDISEGNODELMATTONCINO[MATTONCINO,100]
   Else 
    Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINO,Rnd(9)]
    MATTONCINOELIMINABILESOLODALRAGGIOLASER=VERO
   End If 
   If MATTONCINOELIMINATODALLAPALLINA=VERO
    Dec MATTONCINI : Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
    Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINO,Rnd(19)]
    Proc RIDISEGNODELMATTONCINO[MATTONCINO,500]
    MATTONCINO(MATTONCINO-1)=0
   End If 
   Y0MATTONCINO=Y0ZONA(MATTONCINO-1)
   Y1MATTONCINO=Y0MATTONCINO+9
   If RIMBALZODELLEPALLINESUIMATTONCINI=VERO
    If YPALLINA<Y1MATTONCINO and YPALLINA>Y0MATTONCINO
     DELTAXPALLINA#(PALLINA)=-DELTAXPALLINA#(PALLINA)
    Else 
     DELTAYPALLINA#(PALLINA)=-DELTAYPALLINA#(PALLINA)
    End If 
    If MATTONCINOELIMINABILESOLODALRAGGIOLASER=VERO
     If SUONICARICATI=VERO
      Sam Play VOCE,3,8363*SEMITONO#^4 : Proc VOCESEGUENTE
     Else 
      Bell 40
     End If 
    Else 
     If SUONICARICATI=VERO
      Sam Play VOCE,3 : Proc VOCESEGUENTE
     Else 
      Bell 30
     End If 
    End If 
   Else 
    If MATTONCINOELIMINABILESOLODALRAGGIOLASER=VERO
     If SUONICARICATI=VERO
      Sam Play VOCE,6,8363*SEMITONO#^4 : Proc VOCESEGUENTE
     Else 
      Bell 60
     End If 
    Else 
     If SUONICARICATI=VERO
      Sam Play VOCE,6 : Proc VOCESEGUENTE
     Else 
      Bell 50
     End If 
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MATTONCINOCOLPITODALRAGGIOLASER
 'check if a brick has been hitted by the laser ray 
 If RAGGIOLASERSPARATO=VERO
  MATTONCINO=Zone(XLASER,YLASER)
  If MATTONCINO>0
   MATTONELLA=MATTONCINO(MATTONCINO-1)
   If MATTONELLA>0
    If MATTONELLA<10
     MATTONCINOELIMINATODALRAGGIOLASER=VERO
    Else If MATTONELLA>9 and MATTONELLA<28
     Proc CANCELLAILRAGGIOLASER
     Add MATTONELLA,-9
     MATTONCINO(MATTONCINO-1)=MATTONELLA
     Proc RIDISEGNODELMATTONCINO[MATTONCINO,500]
    Else 
     If MATTONELLA=28
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=29 and LASER>1
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=30 and LASER=3
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=31
      RAGGIOLASERRIFLESSO=VERO
      QUESTOEILMATTONCINOCHEHARIFLESSOILRAGGIOLASER=VERO
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=32 and LASER>1
      RAGGIOLASERRIFLESSO=VERO
      QUESTOEILMATTONCINOCHEHARIFLESSOILRAGGIOLASER=VERO
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     Else If MATTONELLA=33 and LASER=3
      RAGGIOLASERRIFLESSO=VERO
      QUESTOEILMATTONCINOCHEHARIFLESSOILRAGGIOLASER=VERO
      MATTONCINOELIMINATODALRAGGIOLASER=VERO
     End If 
    End If 
    If MATTONCINOELIMINATODALRAGGIOLASER=VERO
     If RAGGIOLASERRIFLESSO=FALSO or QUESTOEILMATTONCINOCHEHARIFLESSOILRAGGIOLASER=FALSO
      Proc CANCELLAILRAGGIOLASER
     End If 
     Proc RIDISEGNODELMATTONCINO[MATTONCINO,100]
     Dec MATTONCINI : Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
     Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINO,Rnd(9)]
     MATTONCINO(MATTONCINO-1)=0
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MATTONCINODIPOTENZIAMENTOPRESODALLABARRA[MATTONCINODIPOTENZIAMENTO,TIPODIMATTONCINODIPOTENZIAMENTO]
 'check if the bar has met the specified bonus brick  
 If Bob Col(OGGETTOMATTONCINODIPOTENZIAMENTO+MATTONCINODIPOTENZIAMENTO,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
  If TIPODIMATTONCINODIPOTENZIAMENTO=MATTONCINIDIPOTENZIAMENTO
   MATTONCINODIPOTENZIAMENTOASORPRESA=VERO
   Add PUNTEGGIO,20
  Else 
   Add PUNTEGGIO,10
  End If 
  Proc MOSTRAILPUNTEGGIO[VERO]
  Proc CANCELLAILMATTONCINODIPOTENZIAMENTO[MATTONCINODIPOTENZIAMENTO]
  Repeat 
   If TIPODIMATTONCINODIPOTENZIAMENTO=1 : Rem a(dd a )b(all in the game field) 
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=FALSO
      PALLINA(PALLINA)=VERO
      XPALLINA#(PALLINA)=XBARRA
      YPALLINA#(PALLINA)=YBARRA-3
      VELOCITADELLAPALLINA#(PALLINA)=1
      D1REZIONEXPALLINA=Rnd(1)
      If D1REZIONEXPALLINA=1
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)
      Else 
       DELTAXPALLINA#(PALLINA)=-VELOCITADELLAPALLINA#(PALLINA)
      End If 
      DELTAYPALLINA#(PALLINA)=-VELOCITADELLAPALLINA#(PALLINA)
      Inc PALLINEINCAMPO
      Exit 
     End If 
    Next 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=2 : Rem b(all)+  
    If PALLINE<1000
     Inc PALLINE : Proc MOSTRALEPALLINERIMASTE
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=3 : Rem b(all)-    
    If PALLINE>0
     Dec PALLINE : Proc MOSTRALEPALLINERIMASTE
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=4 : Rem b(all)?
    If Rnd(1)=1
     TIPODIMATTONCINODIPOTENZIAMENTO=2
    Else 
     TIPODIMATTONCINODIPOTENZIAMENTO=3
    End If 
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=5 : Rem B(ar)+ 
    If LUNGHEZZADELLABARRA<2
     Inc LUNGHEZZADELLABARRACAMBIATA
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=6 : Rem B(ar)- 
    If LUNGHEZZADELLABARRA>0
     Dec LUNGHEZZADELLABARRACAMBIATA
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=7 : Rem B(ar)? 
    If Rnd(1)=1
     TIPODIMATTONCINODIPOTENZIAMENTO=5
    Else 
     TIPODIMATTONCINODIPOTENZIAMENTO=6
    End If 
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=8 : Rem D(uck) 
    _PAPEROINCAMPO= Not _PAPEROINCAMPO
    If _PAPEROINCAMPO=VERO
     If SUONICARICATI=VERO
      Sam Play VOCE,16 : Proc VOCESEGUENTE
     Else 
      Bell 30
     End If 
    Else 
     Proc CANCELLAILPAPERO
     If SUONICARICATI=VERO
      Sam Play VOCE,17 : Proc VOCESEGUENTE
     Else 
      Bell 10
     End If 
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=9 : Rem G(lue) 
    C0LLA= Not C0LLA
    If C0LLA=VERO
     If SUONICARICATI=VERO
      Sam Play VOCE,16 : Proc VOCESEGUENTE
     Else 
      Bell 30
     End If 
    Else 
     If SUONICARICATI=VERO
      Sam Play VOCE,17 : Proc VOCESEGUENTE
     Else 
      Bell 10
     End If 
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=10 : Rem L(aser)+ 
    If LASER=-1
     LASER=1
    Else If LASER=1
     LASER=2
    Else If LASER=2
     LASER=3
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=11 : Rem L(aser)- 
    If LASER>0
     Dec LASER
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=12 : Rem L(aser)? 
    If Rnd(1)=1
     TIPODIMATTONCINODIPOTENZIAMENTO=10
    Else 
     TIPODIMATTONCINODIPOTENZIAMENTO=11
    End If 
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=13 : Rem N(ext level) 
    MATTONCINIRIMASTI=MATTONCINI : MATTONCINI=0
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=14 : Rem P(oints)+  
    If MATTONCINODIPOTENZIAMENTOASORPRESA=VERO
     If PUNTEGGIO<9999800
      Add PUNTEGGIO,180
     End If 
    Else 
     If PUNTEGGIO<9999900
      Add PUNTEGGIO,90
     End If 
    End If 
    Proc MOSTRAILPUNTEGGIO[VERO]
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=15 : Rem P(oints)-  
    If MATTONCINODIPOTENZIAMENTOASORPRESA=VERO
     Add PUNTEGGIO,-220
    Else 
     Add PUNTEGGIO,-110
    End If 
    If PUNTEGGIO<0
     PUNTEGGIO=0
    End If 
    Proc MOSTRAILPUNTEGGIO[VERO]
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=16 : Rem P(oints)?
    If Rnd(1)=1
     TIPODIMATTONCINODIPOTENZIAMENTO=14
    Else 
     TIPODIMATTONCINODIPOTENZIAMENTO=15
    End If 
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=17 : Rem R(ow)+ 
    If RIGA<3
     T0GLILARIGA=RIGA : Inc RIGA
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=18 : Rem R(ow)- 
    If RIGA>0
     T0GLILARIGA=RIGA : RIGA=0
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=19 : Rem R(ow)? 
    If Rnd(1)=1
     TIPODIMATTONCINODIPOTENZIAMENTO=17
    Else 
     TIPODIMATTONCINODIPOTENZIAMENTO=18
    End If 
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=20 : Rem S(peed)+ 
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=VERO and VELOCITADELLAPALLINA#(PALLINA)<8
      VELOCITADELLAPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)+0.5
      If LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*2*Sgn(DELTAXPALLINA#(PALLINA))
       DELTAYPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)/2.0*Sgn(DELTAYPALLINA#(PALLINA))
      Else 
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*Sgn(DELTAXPALLINA#(PALLINA))
       DELTAYPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*Sgn(DELTAYPALLINA#(PALLINA))
      End If 
     End If 
    Next PALLINA
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=21 : Rem S(peed)- 
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=VERO and VELOCITADELLAPALLINA#(PALLINA)>0.5
      VELOCITADELLAPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)-0.5
      If LAPALLINAHARIMBALZATOSUUNBORDODELLABARRA(PALLINA)
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*2*Sgn(DELTAXPALLINA#(PALLINA))
       DELTAYPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)/2.0*Sgn(DELTAYPALLINA#(PALLINA))
      Else 
       DELTAXPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*Sgn(DELTAXPALLINA#(PALLINA))
       DELTAYPALLINA#(PALLINA)=VELOCITADELLAPALLINA#(PALLINA)*Sgn(DELTAYPALLINA#(PALLINA))
      End If 
     End If 
    Next PALLINA
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=22 : Rem S(peed)? 
    If Rnd(1)=1
     TIPODIMATTONCINODIPOTENZIAMENTO=20
    Else 
     TIPODIMATTONCINODIPOTENZIAMENTO=21
    End If 
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=23 : Rem (bar) V(elocity)+
    If RITARDOMASSIMODELLABARRA>0
     Add RITARDOMASSIMODELLABARRA,-2
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=24 : Rem (bar) V(elocity)-
    If RITARDOMASSIMODELLABARRA<50
     Add RITARDOMASSIMODELLABARRA,2
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=25 : Rem (bar) V(elocity)?
    If Rnd(1)=1
     TIPODIMATTONCINODIPOTENZIAMENTO=23
    Else 
     TIPODIMATTONCINODIPOTENZIAMENTO=24
    End If 
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=26 : Rem X(treme) 
    RIMBALZODELLEPALLINESUIMATTONCINI= Not RIMBALZODELLEPALLINESUIMATTONCINI
    If RIMBALZODELLEPALLINESUIMATTONCINI=FALSO
     If SUONICARICATI=VERO
      Sam Play VOCE,16 : Proc VOCESEGUENTE
     Else 
      Bell 30
     End If 
    Else 
     If SUONICARICATI=VERO
      Sam Play VOCE,17 : Proc VOCESEGUENTE
     Else 
      Bell 10
     End If 
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=27 : Rem y+ 
    If YBARRA<247
     Add YBARRA,5
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=28 : Rem y- 
    If YBARRA>197
     Add YBARRA,-5
    End If 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
    TIPODIMATTONCINODIPOTENZIAMENTO=0
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=29 : Rem b(all)?
    If Rnd(1)=1
     TIPODIMATTONCINODIPOTENZIAMENTO=27
    Else 
     TIPODIMATTONCINODIPOTENZIAMENTO=28
    End If 
   Else If TIPODIMATTONCINODIPOTENZIAMENTO=MATTONCINIDIPOTENZIAMENTO : Rem ?
    TIPODIMATTONCINODIPOTENZIAMENTO=Rnd(18)+1
   End If 
  Until TIPODIMATTONCINODIPOTENZIAMENTO=0
 End If 
End Proc
Procedure MATTONCINODIPOTENZIAMENTOUSCITODALCAMPODIGIOCO[MATTONCINODIPOTENZIAMENTO]
 'check if the specified bonus brick has gone out of the game field 
 If YMATTONCINODIPOTENZIAMENTO(MATTONCINODIPOTENZIAMENTO)>255
  Proc CANCELLAILMATTONCINODIPOTENZIAMENTO[MATTONCINODIPOTENZIAMENTO]
 End If 
End Proc
Procedure METTIILPANNELLO
 'put the panel in the game field 
 XPANNELLO=Screen Width-LARGHEZZAPANNELLO
 Paste Bob XPANNELLO,0,51 : Paste Bob XPANNELLO,128,52
End Proc
Procedure METTIECONTAIMATTONCINI
 'put the bricks in the game field and count them 
 MATTONCINI=0
 For MATTONCINO=0 To 246
  If MATTONCINO(MATTONCINO)>0
   Paste Bob X0ZONA(MATTONCINO),Y0ZONA(MATTONCINO),82+MATTONCINO(MATTONCINO)
   Inc MATTONCINI
  Else 
   Ink 0 : Bar X0ZONA(MATTONCINO),Y0ZONA(MATTONCINO) To X0ZONA(MATTONCINO)+19,Y0ZONA(MATTONCINO)+9
  End If 
 Next MATTONCINO
End Proc
Procedure METTIILGIOCOINPAUSA
 'pause the game
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["",0,0,0,-1]
 MESSAGGIO$="The game is paused."+Chr$(10)
 MESSAGGIO$=MESSAGGIO$+"Press a (mouse) key to continue..."
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[MESSAGGIO$,22,20,1,0]
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
End Proc
Procedure MOLLAILGUANO
 'drop the guano  
 If GUANOINCAMPO=VERO
  If GUANOMOLLATO=FALSO
   XGUANO=XPAPEROALIENO : YGUANO=YPAPEROALIENO+35 : GUANOMOLLATO=VERO
  Else 
   Bob OGGETTOGUANO,XGUANO,YGUANO,IMMAGINEGUANO
   Proc LABARRAESTATACOLPITADALGUANO
   Proc ILGUANOEUSCITODALCAMPODIGIOCO
   Add YGUANO,3
  End If 
 End If 
End Proc
Procedure MOSTRAICREDITI
 'show the credits  
 CREDITI$="EsseErre Sofware Solutions"+Chr$(10)
 CREDITI$=CREDITI$+"presents..."+Chr$(10)
 CREDITI$=CREDITI$+"************"+Chr$(10)
 CREDITI$=CREDITI$+"* MATTONITE *"+Chr$(10)
 CREDITI$=CREDITI$+"************"+Chr$(10)
 CREDITI$=CREDITI$+"by Stefano Maria Regattin"+Chr$(10)
 CREDITI$=CREDITI$+"piazza Pietro Gasparri, 4/U"+Chr$(10)
 CREDITI$=CREDITI$+"20161 Milano (Milan) Italia (Italy)"+Chr$(10)
 CREDITI$=CREDITI$+"http://utenti.tripod.it/esseerre/Stefano.html"+Chr$(10)
 CREDITI$=CREDITI$+"e-mail: esseerre@lycos.it"+Chr$(10)
 CREDITI$=CREDITI$+"This game, its editor and the related source"+Chr$(10)
 CREDITI$=CREDITI$+"codes are freely shared out."+Chr$(10)
 CREDITI$=CREDITI$+"They have been created by AMOS Professional 2.0"+Chr$(10)
 CREDITI$=CREDITI$+"and compiled by AMOS Professional Compiler 2.0."+Chr$(10)
 CREDITI$=CREDITI$+"The source codes don't require any additional"+Chr$(10)
 CREDITI$=CREDITI$+"extension."+Chr$(10)
 CREDITI$=CREDITI$+"If you will create a new game starting from these"+Chr$(10)
 CREDITI$=CREDITI$+"source codes, let me know and don't forget to"+Chr$(10)
 CREDITI$=CREDITI$+"email me and mention me in your resulting creation."+Chr$(10)
 CREDITI$=CREDITI$+"One day I have asked to my major sister Antonella"+Chr$(10)
 CREDITI$=CREDITI$+"if she would liked I created a game for her,"+Chr$(10)
 CREDITI$=CREDITI$+"assuring her I was able to create almost any"+Chr$(10)
 CREDITI$=CREDITI$+"kind of game she wanted."+Chr$(10)
 CREDITI$=CREDITI$+"The answer was yes and she specified a game"+Chr$(10)
 CREDITI$=CREDITI$+"with a bar, a bouncing ball over the bar and"+Chr$(10)
 CREDITI$=CREDITI$+"dozens of bricks deletable by the ball hit,"+Chr$(10)
 CREDITI$=CREDITI$+"gaining points for the hits."+Chr$(10)
 CREDITI$=CREDITI$+"So I started the developing of this game and"+Chr$(10)
 CREDITI$=CREDITI$+"she called it Mattonite, that in italian means"+Chr$(10)
 CREDITI$=CREDITI$+"brickache."+Chr$(10)
 CREDITI$=CREDITI$+"The purpose of the game is simple: destroy all"+Chr$(10)
 CREDITI$=CREDITI$+"the bricks by the balls hits to overcome all"+Chr$(10)
 CREDITI$=CREDITI$+"the levels and collect bonus bricks to improve"+Chr$(10)
 CREDITI$=CREDITI$+"playability."+Chr$(10)
 CREDITI$=CREDITI$+"The duck eats all the bricks, but avoid the alien"+Chr$(10)
 CREDITI$=CREDITI$+"duck's guano!"+Chr$(10)
 CREDITI$=CREDITI$+"Avoid the reflected laser ray also!"+Chr$(10)
 CREDITI$=CREDITI$+"The three flashing cyan digits report the balls"+Chr$(10)
 CREDITI$=CREDITI$+"left."+Chr$(10)
 CREDITI$=CREDITI$+"The three flashing orange digits report the"+Chr$(10)
 CREDITI$=CREDITI$+"current level."+Chr$(10)
 CREDITI$=CREDITI$+"The three flashing rainbow colours digits report"+Chr$(10)
 CREDITI$=CREDITI$+"the score position relative to the top hundred"+Chr$(10)
 CREDITI$=CREDITI$+"scores."+Chr$(10)
 CREDITI$=CREDITI$+"The seven flashing cyan digits column report"+Chr$(10)
 CREDITI$=CREDITI$+"the score."+Chr$(10)
 CREDITI$=CREDITI$+"The seven flashing orange digits column report"+Chr$(10)
 CREDITI$=CREDITI$+"the first position score."+Chr$(10)
 CREDITI$=CREDITI$+"The seven flashing rainbow colors digits column"+Chr$(10)
 CREDITI$=CREDITI$+"report the current level bonus."+Chr$(10)
 CREDITI$=CREDITI$+"Press the space bar to shock the balls."+Chr$(10)
 CREDITI$=CREDITI$+"Press the shift keys to fire the laser ray over"+Chr$(10)
 CREDITI$=CREDITI$+"the bricks to hit the boings or, better, to hit"+Chr$(10)
 CREDITI$=CREDITI$+"the ballthief!"+Chr$(10)
 CREDITI$=CREDITI$+"Press the P key to pause the game."+Chr$(10)
 CREDITI$=CREDITI$+"Press a (mouse) key to scroll quickly the text"+Chr$(10)
 CREDITI$=CREDITI$+"or press the Esc key to leave the text."+Chr$(10)
 CREDITI$=CREDITI$+"This is the end...Enjoy!"
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[CREDITI$,22,22,1,250]
End Proc
Procedure MOSTRAILBONUS[M0DO]
 'show the bonus  
 If M0DO=VERO
  CIFRA=BONUS/1000000 mod 10
  Paste Bob 305,120,73+CIFRA
  CIFRA=BONUS/100000 mod 10
  Paste Bob 305,138,73+CIFRA
  CIFRA=BONUS/10000 mod 10
  Paste Bob 305,156,73+CIFRA
  CIFRA=BONUS/1000 mod 10
  Paste Bob 305,174,73+CIFRA
  CIFRA=BONUS/100 mod 10
  Paste Bob 305,192,73+CIFRA
  CIFRA=BONUS/10 mod 10
  Paste Bob 305,210,73+CIFRA
  CIFRA=BONUS mod 10
  Paste Bob 305,228,73+CIFRA
 Else 
  CIFRA=BONUS mod 10
  Paste Bob 305,228,73+CIFRA
  If CIFRA=9
   CIFRA=BONUS/10 mod 10
   Paste Bob 305,210,73+CIFRA
   If CIFRA=9
    CIFRA=BONUS/100 mod 10
    Paste Bob 305,192,73+CIFRA
    If CIFRA=9
     CIFRA=BONUS/1000 mod 10
     Paste Bob 305,174,73+CIFRA
     If CIFRA=9
      CIFRA=BONUS/10000 mod 10
      Paste Bob 305,156,73+CIFRA
      If CIFRA=9
       CIFRA=BONUS/100000 mod 10
       Paste Bob 305,138,73+CIFRA
       If CIFRA=9
        CIFRA=BONUS/1000000 mod 10
        Paste Bob 305,120,73+CIFRA
       End If 
      End If 
     End If 
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MOSTRAILLASER
 'show the laser beam over the bar  
 If LASER>0
  Bob OGGETTOLASER,Int(XBARRA),YBARRA,IMMAGINELASER+LASER
 Else If LASER=0
  Proc T0GLIILLASER
  LASER=-1
 End If 
End Proc
Procedure MOSTRAILLIVELLO
 'shov the level  
 CIFRA=LIVELLO/100 mod 10
 Paste Bob 273,29,63+CIFRA
 CIFRA=LIVELLO/10 mod 10
 Paste Bob 289,29,63+CIFRA
 CIFRA=LIVELLO mod 10
 Paste Bob 305,29,63+CIFRA
End Proc
Procedure MOSTRAILPUNTEGGIO[M0DO]
 'show the score  
 If M0DO=VERO
  CIFRA=PUNTEGGIO/1000000 mod 10
  Paste Bob 273,120,53+CIFRA
  CIFRA=PUNTEGGIO/100000 mod 10
  Paste Bob 273,138,53+CIFRA
  CIFRA=PUNTEGGIO/10000 mod 10
  Paste Bob 273,156,53+CIFRA
  CIFRA=PUNTEGGIO/1000 mod 10
  Paste Bob 273,174,53+CIFRA
  CIFRA=PUNTEGGIO/100 mod 10
  Paste Bob 273,192,53+CIFRA
  CIFRA=PUNTEGGIO/10 mod 10
  Paste Bob 273,210,53+CIFRA
  CIFRA=PUNTEGGIO mod 10
  Paste Bob 273,228,53+CIFRA
 Else 
  CIFRA=PUNTEGGIO mod 10
  Paste Bob 273,228,53+CIFRA
  If CIFRA=0
   CIFRA=PUNTEGGIO/10 mod 10
   Paste Bob 273,210,53+CIFRA
   If CIFRA=0
    CIFRA=PUNTEGGIO/100 mod 10
    Paste Bob 273,192,53+CIFRA
    If CIFRA=0
     CIFRA=PUNTEGGIO/1000 mod 10
     Paste Bob 273,174,53+CIFRA
     If CIFRA=0
      CIFRA=PUNTEGGIO/10000 mod 10
      Paste Bob 273,156,53+CIFRA
      If CIFRA=0
       CIFRA=PUNTEGGIO/100000 mod 10
       Paste Bob 273,138,53+CIFRA
       If CIFRA=0
        CIFRA=PUNTEGGIO/1000000 mod 10
        Paste Bob 273,120,53+CIFRA
       End If 
      End If 
     End If 
    End If 
   End If 
  End If 
 End If 
 If PUNTEGGIO>PUNTEGGIOMASSIMO and MOSTRASOLOILPUNTEGGIOMASSIMO=1
  PUNTEGGIOMASSIMO=PUNTEGGIO
  M0DOPUNTEGGIOMASSIMO=FALSO
 Else 
  M0DOPUNTEGGIOMASSIMO=VERO
 End If 
 Proc MOSTRALAPOSIZIONE
 Proc MOSTRAILPUNTEGGIOMASSIMO[M0DOPUNTEGGIOMASSIMO]
End Proc
Procedure MOSTRAILPUNTEGGIOMASSIMO[M0DO]
 'show the better or the best score 
 If MOSTRASOLOILPUNTEGGIOMASSIMO=1 or POSIZIONE=1
  PUNTEGGIOSUPERIORE=PUNTEGGIOMASSIMO
 Else 
  PUNTEGGIOSUPERIORE=Val(PUNTEGGIODELGIOCATORE$(POSIZIONE-2))
 End If 
 If M0DO=VERO
  CIFRA=PUNTEGGIOSUPERIORE/1000000 mod 10
  Paste Bob 289,120,63+CIFRA
  CIFRA=PUNTEGGIOSUPERIORE/100000 mod 10
  Paste Bob 289,138,63+CIFRA
  CIFRA=PUNTEGGIOSUPERIORE/10000 mod 10
  Paste Bob 289,156,63+CIFRA
  CIFRA=PUNTEGGIOSUPERIORE/1000 mod 10
  Paste Bob 289,174,63+CIFRA
  CIFRA=PUNTEGGIOSUPERIORE/100 mod 10
  Paste Bob 289,192,63+CIFRA
  CIFRA=PUNTEGGIOSUPERIORE/10 mod 10
  Paste Bob 289,210,63+CIFRA
  CIFRA=PUNTEGGIOSUPERIORE mod 10
  Paste Bob 289,228,63+CIFRA
 Else 
  CIFRA=PUNTEGGIOSUPERIORE mod 10
  Paste Bob 289,228,63+CIFRA
  If CIFRA=0
   CIFRA=PUNTEGGIOSUPERIORE/10 mod 10
   Paste Bob 289,210,63+CIFRA
   If CIFRA=0
    CIFRA=PUNTEGGIOSUPERIORE/100 mod 10
    Paste Bob 289,192,63+CIFRA
    If CIFRA=0
     CIFRA=PUNTEGGIOSUPERIORE/1000 mod 10
     Paste Bob 289,174,63+CIFRA
     If CIFRA=0
      CIFRA=PUNTEGGIOSUPERIORE/10000 mod 10
      Paste Bob 289,156,63+CIFRA
      If CIFRA=0
       CIFRA=PUNTEGGIOSUPERIORE/100000 mod 10
       Paste Bob 289,138,63+CIFRA
       If CIFRA=0
        CIFRA=PUNTEGGIOSUPERIORE/1000000 mod 10
        Paste Bob 289,120,63+CIFRA
       End If 
      End If 
     End If 
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MOSTRAILRAGGIOLASER
 'show the laser ray  
 If RAGGIOLASERSPARATO=VERO
  Bob OGGETTORAGGIOLASER,XLASER,YLASER,IMMAGINERAGGIOLASER
  If RAGGIOLASERRIFLESSO=VERO
   If YLASER<255
    Add YLASER,5
   Else 
    RAGGIOLASERRIFLESSO=FALSO
    Proc CANCELLAILRAGGIOLASER
   End If 
  Else 
   If YLASER>0
    Add YLASER,-5
   Else 
    Proc CANCELLAILRAGGIOLASER
   End If 
  End If 
  Bob Update 
 End If 
End Proc
Procedure MOSTRAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
 'show the top hundred player scores  
 If Exist(PUNTEGGI$) and CENTOGIOCATORI$<>""
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[CENTOGIOCATORI$,20,22,1,250]
 Else 
  NONCISONOGIOCATORI$="No players till now..."+Chr$(10)
  NONCISONOGIOCATORI$=NONCISONOGIOCATORI$+"Press a (mouse) key to continue"
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[NONCISONOGIOCATORI$,21,20,1,250]
 End If 
End Proc
Procedure MOSTRAILTEMPOTRASCORSODIGIOCOESALUTAILGIOCATORE
 'show the game time and greets the player  
 MESSAGGIOFINALE$="The game is finished."+Chr$(10)
 If TEMP0TRASCORSODIGIOCO>0
  GIORNI=TEMP0TRASCORSODIGIOCO/4320000 : GIORNI$=Str$(GIORNI)
  _ORE=TEMP0TRASCORSODIGIOCO/180000 mod 24 : _ORE$=Str$(_ORE)
  M1NUTI=TEMP0TRASCORSODIGIOCO/3000 mod 60 : M1NUTI$=Str$(M1NUTI)
  SECONDI=TEMP0TRASCORSODIGIOCO/50 mod 60 : SECONDI$=Str$(SECONDI)
  MESSAGGIOFINALE$=MESSAGGIOFINALE$+"You have played for"
  If GIORNI=1
   MESSAGGIOFINALE$=MESSAGGIOFINALE$+GIORNI$+" day,"
  Else 
   MESSAGGIOFINALE$=MESSAGGIOFINALE$+GIORNI$+" days,"
  End If 
  If _ORE=1
   MESSAGGIOFINALE$=MESSAGGIOFINALE$+_ORE$+" hour,"
  Else 
   MESSAGGIOFINALE$=MESSAGGIOFINALE$+_ORE$+" hours,"
  End If 
  MESSAGGIOFINALE$=MESSAGGIOFINALE$+Chr$(10)
  If M1NUTI=1
   MESSAGGIOFINALE$=MESSAGGIOFINALE$+M1NUTI$+" minute and"
  Else 
   MESSAGGIOFINALE$=MESSAGGIOFINALE$+M1NUTI$+" minutes and"
  End If 
  If SECONDI=1
   MESSAGGIOFINALE$=MESSAGGIOFINALE$+SECONDI$+" second."
  Else 
   MESSAGGIOFINALE$=MESSAGGIOFINALE$+SECONDI$+" seconds."
  End If 
  MESSAGGIOFINALE$=MESSAGGIOFINALE$+Chr$(10)
 End If 
 MESSAGGIOFINALE$=MESSAGGIOFINALE$+"I hope you have enjoyed."+Chr$(10)
 MESSAGGIOFINALE$=MESSAGGIOFINALE$+"Bye bye!"
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[MESSAGGIOFINALE$,20,22,1,1000]
End Proc
Procedure MOSTRALABARRA
 'show the bar  
 If LUNGHEZZADELLABARRA=0
  Bob OGGETTOCENTRODELLABARRA,Int(XBARRA),YBARRA,5
  Bob OGGETTOLATIDELLABARRA,Int(XBARRA),YBARRA,6
 Else If LUNGHEZZADELLABARRA=1
  Bob OGGETTOCENTRODELLABARRA,Int(XBARRA),YBARRA,1
  Bob OGGETTOLATIDELLABARRA,Int(XBARRA),YBARRA,2
 Else If LUNGHEZZADELLABARRA=2
  Bob OGGETTOCENTRODELLABARRA,Int(XBARRA),YBARRA,3
  Bob OGGETTOLATIDELLABARRA,Int(XBARRA),YBARRA,4
 End If 
End Proc
Procedure MOSTRALAPOSIZIONE
 'show the current player position  
 For POSIZIONE=1 To 100
  If PUNTEGGIO>Val(PUNTEGGIODELGIOCATORE$(POSIZIONE-1))
   Exit 
  Else If PUNTEGGIODELGIOCATORE$(POSIZIONE-1)=""
   Exit 
  End If 
 Next POSIZIONE
 CIFRA=POSIZIONE/100 mod 10
 Paste Bob 273,47,73+CIFRA
 CIFRA=POSIZIONE/10 mod 10
 Paste Bob 289,47,73+CIFRA
 CIFRA=POSIZIONE mod 10
 Paste Bob 305,47,73+CIFRA
End Proc
Procedure MOSTRALARIGA[TIPODIRIGA]
 'show the row  
 If TIPODIRIGA=1
  IMMAGINERIGA=IMMAGINERIGAUNO
 Else If TIPODIRIGA=2
  IMMAGINERIGA=IMMAGINERIGADUE
 Else If TIPODIRIGA=3
  IMMAGINERIGA=IMMAGINERIGATRE
 End If 
 If XRIGA>0
  Bob OGGETTORIGA,XRIGA,251,IMMAGINERIGA
 Else 
  If T0GLILARIGA>0
   Proc T0GLILARIGA
   T0GLILARIGA=0
   DURATADELLARIGA=-1
  End If 
 End If 
 Bob Update 
End Proc
Procedure MOSTRALEOPZIONIDIGIOCO
 'show the game options 
 _INTERFACCIAPERLEOPZIONI$="SetVariable 0,160;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"SetVariable 1,53;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"BAse ScreenWidth 0VAriable- 2/,ScreenHeight 1VAriable- 2/;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"SIze 0VAriable,1VAriable;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"INk 38,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicBox 0,0,0VAriable 1-,1VAriable 1-;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"INk 37,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0,1VAriable 2-,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0,0,0VAriable 2-,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"INk 39,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0VAriable 1-,1,0VAriable 1-,1VAriable 1-;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0VAriable 1-,1VAriable 1-,1,1VAriable 1-;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"SetVariable 2,9 2+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"SetVariable 3,41 1- 2+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"SetVariable 4,50 1- 2+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"SetVariable 5,47 1- 2+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"PrintOutline 3,3,'Top score',21 32+,21;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"PrintOutline 3,3 2VAriable+ 5+,'Bonus bricks',20 32+,20;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"PrintOutline 3,3 2VAriable+ 4+ 2* 1+,'Video sync',22 32+,22;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"BUtton 1,0VAriable 3VAriable- 6- 1-,2,3VAriable 4+,2VAriable 4+,6VAriable,0,1;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"[INk 38,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicBox 0,0,3VAriable 4+,2VAriable 4+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"IF ButtonPosition 0=;[SetWriting 1;PrintOutline 3,0,'Higher',7,6;]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"IF ButtonPosition 1=;[SetWriting 1;PrintOutline 3,0,'Highest',7,6;]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"INk 37,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0,2VAriable 3+,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0,0,3VAriable 3+,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"INk 39,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 3VAriable 4+,1,3VAriable 4+,2VAriable 4+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 3VAriable 4+,2VAriable 4+,1,2VAriable 4+;]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"[]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"BUtton 2,0VAriable 4VAriable- 6- 1-,2 2VAriable+ 4+ 1+,4VAriable 4+,2VAriable 4+,7VAriable,0,1;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"[INk 38,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicBox 0,0,4VAriable 4+,2VAriable 4+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"IF ButtonPosition 0=;[SetWriting 1;PrintOutline 3,0,'Standard',7,6;]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"IF ButtonPosition 1=;[SetWriting 1;PrintOutline 3,0,'Coloured',7,6;]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"INk 37,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0,2VAriable 3+,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0,0,4VAriable 3+,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"INk 39,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 4VAriable 4+,1,4VAriable 4+,2VAriable 4+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 4VAriable 4+,2VAriable 4+,1,2VAriable 4+;]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"[]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"BUtton 3,0VAriable 5VAriable- 6- 1-,2 2VAriable+ 4+ 2* 1+,5VAriable 4+,2VAriable 4+,8VAriable,0,1;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"[INk 38,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicBox 0,0,5VAriable 4+,2VAriable 4+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"IF ButtonPosition 0=;[SetWriting 1;PrintOutline 3,0,'Disabled',7,6;]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"IF ButtonPosition 1=;[SetWriting 1;PrintOutline 3,0,'Enabled',7,6;]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"INk 37,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0,2VAriable 3+,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 0,0,5VAriable 3+,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"INk 39,0,0;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 5VAriable 4+,1,5VAriable 4+,2VAriable 4+;"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"GraphicLine 5VAriable 4+,2VAriable 4+,1,2VAriable 4+;]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"[]"
 _INTERFACCIAPERLEOPZIONI$=_INTERFACCIAPERLEOPZIONI$+"EXit;"
 MESSAGGIOPERLEOPZIONI$="Normally the seven flashing orange digits"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"column reports the highest score but, in"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"the following requester, you can enable"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"it showing the lowerst of the top hundred"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"scores that is higher than your score!"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"In the requester there is also an option"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"to enable the video sync for a playable"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"game on a very fast Amiga!"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"You can choose also to have coloured or"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"standard bonus bricks into the game."+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"Press a (mouse) key for the requester"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"and enable or disable the options as"+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"you wish..."+Chr$(10)
 MESSAGGIOPERLEOPZIONI$=MESSAGGIOPERLEOPZIONI$+"Press the Esc key to leave these options..."
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[MESSAGGIOPERLEOPZIONI$,20,20,1,1000]
 Show : Autoback 1 : Screen Copy Physic To Logic
 Dialog Open 1,_INTERFACCIAPERLEOPZIONI$
 Vdialog(1,6)=MOSTRASOLOILPUNTEGGIOMASSIMO
 Vdialog(1,7)=MATTONCINIDIPOTENZIAMENTOCOLORATI
 Vdialog(1,8)=RITARDODELGIOCO
 _INTERFACCIAPERLEOPZIONI=Dialog Run(1)
 Screen Swap : Screen Copy Physic To Logic
 DURATADELLINTERFACCIAPERLEOPZIONI=120
 Repeat 
  PRECEDENTEMOSTRASOLOILPUNTEGGIOMASSIMO=MOSTRASOLOILPUNTEGGIOMASSIMO
  PRECEDENTERITARDODELGIOCO=RITARDODELGIOCO
  PRECEDENTEMATTONCINIDIPOTENZIAMENTOCOLORATI=MATTONCINIDIPOTENZIAMENTOCOLORATI
  MOSTRASOLOILPUNTEGGIOMASSIMO=Rdialog(1,1)
  If MOSTRASOLOILPUNTEGGIOMASSIMO<>PRECEDENTEMOSTRASOLOILPUNTEGGIOMASSIMO
   If MOSTRASOLOILPUNTEGGIOMASSIMO=1
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
   Else 
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
   End If 
   Screen Swap : Screen Copy Physic To Logic
  End If 
  MATTONCINIDIPOTENZIAMENTOCOLORATI=Rdialog(1,2)
  If MATTONCINIDIPOTENZIAMENTOCOLORATI<>PRECEDENTEMATTONCINIDIPOTENZIAMENTOCOLORATI
   If MATTONCINIDIPOTENZIAMENTOCOLORATI=1
    OGGETTI$=OGGETTICOLORATI$
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
   Else 
    OGGETTI$=OGGETTISTANDARD$
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
   End If 
   Screen Swap : Screen Copy Physic To Logic
   Proc CARICAGLIOGGETTI
   Proc CREALEIMMAGINIPERLERIGHE
  End If 
  RITARDODELGIOCO=Rdialog(1,3)
  If RITARDODELGIOCO<>PRECEDENTERITARDODELGIOCO
   If RITARDODELGIOCO=1
    If SUONICARICATI=VERO
     Sam Play VOCE,16 : Proc VOCESEGUENTE
    Else 
     Bell 30
    End If 
   Else 
    If SUONICARICATI=VERO
     Sam Play VOCE,17 : Proc VOCESEGUENTE
    Else 
     Bell 10
    End If 
   End If 
   Screen Swap : Screen Copy Physic To Logic
  End If 
  _ASPETTA[25]
  If DURATADELLINTERFACCIAPERLEOPZIONI>0
   Dec DURATADELLINTERFACCIAPERLEOPZIONI
  Else 
   TASTO=27
  End If 
 Until TASTO=27
 Dialog Close 1
 Hide 
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
 Autoback 0
End Proc
Procedure MOSTRALEPALLINERIMASTE
 'show the remained balls 
 PALLINERIMASTE=PALLINE-1
 If PALLINERIMASTE>-1
  CIFRA=PALLINERIMASTE/100 mod 10
  Paste Bob 273,11,53+CIFRA
  CIFRA=PALLINERIMASTE/10 mod 10
  Paste Bob 289,11,53+CIFRA
  CIFRA=PALLINERIMASTE mod 10
  Paste Bob 305,11,53+CIFRA
 End If 
End Proc
Procedure _PAPEROALIENOINCAMPO
 'manage the alien duck 
 If _PAPEROALIENO=0
  XPAPEROALIENO=Rnd(XFINALERIGA) : YPAPEROALIENO=-20
  GRADIPAPEROALIENO=45 : _PAPEROALIENO=1
 Else 
  If RITARDOPAPERO=0
   Add IMMAGINEPAPEROALIENO,1,0 To IMMAGINIPAPERO-1
   Inc YPAPEROALIENO
  End If 
  If _PAPEROINCAMPO=FALSO
   Add RITARDOPAPERO,1,0 To 12
  End If 
  Add GRADIPAPEROALIENO,_PAPEROALIENO
  If GRADIPAPEROALIENO=90
   GUANOINCAMPO=VERO
  Else If _PAPEROALIENO=1 and GRADIPAPEROALIENO=135
   _PAPEROALIENO=-1
  Else If _PAPEROALIENO=-1 and GRADIPAPEROALIENO=45
   _PAPEROALIENO=1
  End If 
  XMOVIMENTOPAPEROALIENO=Cos(GRADIPAPEROALIENO)*80
  YMOVIMENTOPAPEROALIENO=Sin(GRADIPAPEROALIENO)*80-50
  Bob OGGETTOPAPEROALIENO,XPAPEROALIENO+XMOVIMENTOPAPEROALIENO,YPAPEROALIENO+YMOVIMENTOPAPEROALIENO,IMMAGINEPAPEROALIENO(IMMAGINEPAPEROALIENO)
  Proc ILPAPEROALIENOESTATOCOLPITO
  Proc ILPAPEROALIENOEUSCITODALCAMPODIGIOCO
 End If 
End Proc
Procedure _PAPEROINCAMPO
 'manage the duck 
 Bob OGGETTOPAPERO,XPAPERO,YPAPERO,IMMAGINEPAPERO(IMMAGINEPAPERO)
 If RITARDOPAPERO=0
  Add IMMAGINEPAPERO,1,0 To IMMAGINIPAPERO-1
 End If 
 Add RITARDOPAPERO,1,0 To 12
 If MATTONCINODATROVAREPERILPAPERO<247
  If MATTONCINO(MATTONCINODATROVAREPERILPAPERO)>0
   XMATTONCINOPERILPAPERO=X0ZONA(MATTONCINODATROVAREPERILPAPERO)-XPAPERO
   YMATTONCINOPERILPAPERO=Y0ZONA(MATTONCINODATROVAREPERILPAPERO)-YPAPERO
   If Abs(XMATTONCINOPERILPAPERO)+Abs(YMATTONCINOPERILPAPERO)<DISTANZADELMATTONCINOPIUVICINOALPAPERO
    DISTANZADELMATTONCINOPIUVICINOALPAPERO=Abs(XMATTONCINOPERILPAPERO)+Abs(YMATTONCINOPERILPAPERO)
    MATTONCINOPERILPAPERO=MATTONCINODATROVAREPERILPAPERO
   End If 
  End If 
  Add MATTONCINODATROVAREPERILPAPERO,1,0 To 247
 Else 
  DISTANZADELMATTONCINOPIUVICINOALPAPERO=1000
  If MATTONCINO(MATTONCINOPERILPAPERO)>0
   XDISTANZADELPAPERODALMATTONCINOPIUVICINO=X0ZONA(MATTONCINOPERILPAPERO)+10-XPAPERO
   If XDISTANZADELPAPERODALMATTONCINOPIUVICINO>0
    Inc XPAPERO
   Else If XDISTANZADELPAPERODALMATTONCINOPIUVICINO<0
    Dec XPAPERO
   End If 
   YDISTANZADELPAPERODALMATTONCINOPIUVICINO=Y0ZONA(MATTONCINOPERILPAPERO)+5-YPAPERO
   If YDISTANZADELPAPERODALMATTONCINOPIUVICINO>0
    Inc YPAPERO
   Else If YDISTANZADELPAPERODALMATTONCINOPIUVICINO<0
    Dec YPAPERO
   End If 
   If XDISTANZADELPAPERODALMATTONCINOPIUVICINO=0 and YDISTANZADELPAPERODALMATTONCINOPIUVICINO=0
    X0MATTONCINO=X0ZONA(MATTONCINOPERILPAPERO)
    Y0MATTONCINO=Y0ZONA(MATTONCINOPERILPAPERO)
    X1MATTONCINO=X0MATTONCINO+19
    Y1MATTONCINO=Y0MATTONCINO+9
    Ink 0 : Bar X0MATTONCINO,Y0MATTONCINO To X1MATTONCINO,Y1MATTONCINO
    Dec MATTONCINI : Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
    Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINOPERILPAPERO,Rnd(9)]
    MATTONCINO(MATTONCINOPERILPAPERO)=0
    Proc RIDISEGNODELMATTONCINO[MATTONCINOPERILPAPERO,500]
   End If 
  Else 
   MATTONCINODATROVAREPERILPAPERO=0
  End If 
 End If 
End Proc
Procedure RIDISEGNODELMATTONCINO[MATTONCINO,DURATADELRIDISEGNODELMATTONCINO]
 'redraw the hitted bricks  
 For MATTONCINODARIDISEGNARE=0 To MASSIMOMATTONCINIDARIDISEGNARE-1
  If MATTONCINODARIDISEGNARE(MATTONCINODARIDISEGNARE)=MATTONCINO
   MATTONCINODARIDISEGNARE(MATTONCINODARIDISEGNARE)=MATTONCINO
   DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)=DURATADELRIDISEGNODELMATTONCINO
  Else If DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)=0
   MATTONCINODARIDISEGNARE(MATTONCINODARIDISEGNARE)=MATTONCINO
   DURATADELRIDISEGNODELMATTONCINO(MATTONCINODARIDISEGNARE)=DURATADELRIDISEGNODELMATTONCINO
   Pop Proc
  End If 
 Next MATTONCINODARIDISEGNARE
End Proc
Procedure RIMETTILOSFONDO
 'redraw the screen 
 Put Block 1
End Proc
Procedure RUBAPALLINAINCAMPO
 'manage the ballthief
 If PALLINASCELTADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
  PALLINA=Rnd(MASSIMOPALLINEINCAMPO-1)
  If PALLINA(PALLINA)=VERO
   PALLINASCELTADALRUBAPALLINA=PALLINA
   YRUBAPALLINA=0
   If SUONICARICATI=VERO
    Sam Play 13 : Proc VOCESEGUENTE
   Else 
    Bell 4
   End If 
  End If 
 Else 
  Bob OGGETTORUBAPALLINA,XRUBAPALLINA,YRUBAPALLINA,IMMAGINERUBAPALLINA(IMMAGINERUBAPALLINA)
  If PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
   If PALLINA(PALLINASCELTADALRUBAPALLINA)=VERO
    XPALLINA=Int(XPALLINA#(PALLINASCELTADALRUBAPALLINA))
    YPALLINA=Int(YPALLINA#(PALLINASCELTADALRUBAPALLINA))
    XRUBAPALLINA=XPALLINA
    If YRUBAPALLINA>YPALLINA
     Dec YRUBAPALLINA
    Else If YRUBAPALLINA<YPALLINA
     Inc YRUBAPALLINA
    Else 
     PALLINAPRESADALRUBAPALLINA=PALLINASCELTADALRUBAPALLINA
     PALLINA(PALLINAPRESADALRUBAPALLINA)=FALSO
    End If 
   Else 
    PALLINASCELTADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
    PALLINAPRESADALRUBAPALLINA=MASSIMOPALLINEINCAMPO
   End If 
  Else 
   Bob OGGETTOPALLINA+PALLINAPRESADALRUBAPALLINA,XRUBAPALLINA,YRUBAPALLINA,IMMAGINEPALLINA
   Add XRUBAPALLINA,Rnd(6)-3
   Proc LIMITI[XRUBAPALLINA,11,XFINALERIGA-11] : XRUBAPALLINA=Param
   Dec YRUBAPALLINA
   If RITARDODELLARIPETIZIONEDELSUONODELLAPALLINARUBATA=0
    If SUONICARICATI=VERO
     Sam Play 14 : Proc VOCESEGUENTE
    Else 
     Bell 4
    End If 
   End If 
   Add RITARDODELLARIPETIZIONEDELSUONODELLAPALLINARUBATA,1,0 To 49
   Proc ILRUBAPALLINAEUSCITODALCAMPODIGIOCO
  End If 
  Proc ILRUBAPALLINAESTATOCOLPITO
 End If 
End Proc
Procedure SALVAIPUNTEGGIDEICENTOMIGLIORIGIOCATORI
 'save the top hundred scores 
 If Exist(PUNTEGGI$) Then Kill PUNTEGGI$
 Open Out 1,PUNTEGGI$
 For POSIZIONI=0 To 99
  If Val(PUNTEGGIODELGIOCATORE$(POSIZIONI))>0
   Print #1,NOMEDELGIOCATORE$(POSIZIONI)
   Print #1,PUNTEGGIODELGIOCATORE$(POSIZIONI)
   Print #1,LIVELLOINCUIILGIOCATOREHAFINITOILGIOCO$(POSIZIONI)
  End If 
 Next POSIZIONI
 Close 1
End Proc
Procedure TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTO$,C0LORETESTOPRIMALINEA,C0LORETESTOSECONDALINEA,C0LOREBORDO,TEMP0]
 'manage the texts  
 If TESTO$="" Then Get Block 1,0,0,Screen Width,Screen Height
 ALTEZZALINEA=ALTEZZAFONT+3
 LINEE=1
 POSIZIONEPAROLA=1
 Repeat 
  ACAPO=Instr(TESTO$,Chr$(10),POSIZIONEPAROLA)
  If ACAPO>0 Then Inc LINEE : POSIZIONEPAROLA=ACAPO+1
 Until ACAPO=0
 If LINEE=1
  C0LORETESTO=C0LORETESTOPRIMALINEA
  XINIZIOTESTO=(Screen Width-Text Length(TESTO$))/2
  YINIZIOTESTO=(Screen Height-(ALTEZZALINEA))/2+Text Base
  Proc CREATESTOBORDATO[XINIZIOTESTO,YINIZIOTESTO,TESTO$,C0LORETESTO,C0LOREBORDO]
  Screen Swap : Proc RIMETTILOSFONDO
  Proc _ASPETTA[TEMP0]
  If TASTO=27
   Pop Proc
  End If 
 Else 
  Dim TESTO$(LINEE-1)
  POSIZIONEPAROLA=1
  For LINEA=0 To LINEE-1
   ACAPO=Instr(TESTO$,Chr$(10),POSIZIONEPAROLA)
   If ACAPO>0
    TESTO$(LINEA)=Mid$(TESTO$,POSIZIONEPAROLA,ACAPO-POSIZIONEPAROLA)
    POSIZIONEPAROLA=ACAPO+1
   Else 
    TESTO$(LINEA)=Right$(TESTO$,Len(TESTO$)-POSIZIONEPAROLA+1)
   End If 
  Next LINEA
  ALTEZZATESTO=ALTEZZALINEA*LINEE
  If ALTEZZATESTO<Screen Height
   ILTESTOSTATUTTONELLOSCHERMO=VERO
  Else 
   For LINEA=LINEE To 2 Step -1
    ALTEZZATESTO=ALTEZZALINEA*LINEA
    If ALTEZZATESTO<Screen Height
     NUMEROMASSIMODILINEENELLOSCHERMO=LINEA
     Exit 
    End If 
   Next LINEA
  End If 
  If ILTESTOSTATUTTONELLOSCHERMO=VERO
   YINIZIOTESTO=(Screen Height-ALTEZZATESTO)/2+Text Base
   For LINEA=0 To LINEE-1
    If LINEA mod 2=0
     C0LORETESTO=C0LORETESTOPRIMALINEA
    Else 
     C0LORETESTO=C0LORETESTOSECONDALINEA
    End If 
    XINIZIOTESTO=(Screen Width-Text Length(TESTO$(LINEA)))/2
    Proc CREATESTOBORDATO[XINIZIOTESTO,YINIZIOTESTO+ALTEZZALINEA*LINEA,TESTO$(LINEA),C0LORETESTO,C0LOREBORDO]
   Next LINEA
   Screen Swap : Proc RIMETTILOSFONDO
   Proc _ASPETTA[TEMP0]
   If TASTO=27
    Pop Proc
   End If 
  Else 
   YINIZIOTESTO=(Screen Height-ALTEZZATESTO)/2+Text Base
   For LINEA=0 To NUMEROMASSIMODILINEENELLOSCHERMO-1
    If(LINEA) mod 2=0
     C0LORETESTO=C0LORETESTOPRIMALINEA
    Else 
     C0LORETESTO=C0LORETESTOSECONDALINEA
    End If 
    XINIZIOTESTO=(Screen Width-Text Length(TESTO$(LINEA)))/2
    Proc CREATESTOBORDATO[XINIZIOTESTO,YINIZIOTESTO+ALTEZZALINEA*LINEA,TESTO$(LINEA),C0LORETESTO,C0LOREBORDO]
   Next LINEA
   Screen Swap : Proc RIMETTILOSFONDO
   Proc _ASPETTA[TEMP0*NUMEROMASSIMODILINEENELLOSCHERMO]
   If TASTO=27
    Pop Proc
   End If 
   For LINEA=1 To LINEE-NUMEROMASSIMODILINEENELLOSCHERMO
    For LINEANELLOSCHERMO=0 To NUMEROMASSIMODILINEENELLOSCHERMO-1
     If(LINEA+LINEANELLOSCHERMO) mod 2=0
      C0LORETESTO=C0LORETESTOPRIMALINEA
     Else 
      C0LORETESTO=C0LORETESTOSECONDALINEA
     End If 
     XINIZIOTESTO=(Screen Width-Text Length(TESTO$(LINEANELLOSCHERMO+LINEA)))/2
     Proc CREATESTOBORDATO[XINIZIOTESTO,YINIZIOTESTO+ALTEZZALINEA*LINEANELLOSCHERMO,TESTO$(LINEANELLOSCHERMO+LINEA),C0LORETESTO,C0LOREBORDO]
    Next LINEANELLOSCHERMO
    Screen Swap : Proc RIMETTILOSFONDO
    Proc _ASPETTA[TEMP0]
    If TASTO=27
     Pop Proc
    End If 
   Next LINEA
  End If 
 End If 
End Proc
Procedure T0GLILARCOBALENO
 'fade out the rainbow  
 For LINEADELLARCOBALENO=271 To 271-255 Step -1
  Rainbow 0,257,0,LINEADELLARCOBALENO
  Wait Vbl 
 Next LINEADELLARCOBALENO
End Proc
Procedure T0GLILARIGA
 'turn off the row  
 Bob Off OGGETTORIGA
 Bob Update 
End Proc
Procedure T0GLIILLASER
 'turn off the laser beam 
 Bob Off OGGETTOLASER
 Bob Update 
End Proc
Procedure T0GLIILPANNELLO
 'fade out the panel  
 Ink 0
 For LINEAPANNELLO=255 To 0 Step -1
  Draw XPANNELLO,LINEAPANNELLO To XPANNELLO+LARGHEZZAPANNELLO-1,LINEAPANNELLO
  Wait Vbl 
 Next LINEAPANNELLO
End Proc
Procedure T0GLIIMATTONCINI
 'fade out the bricks 
 Ink 0
 For MATTONCINO=246 To 0 Step -1
  If MATTONCINO(MATTONCINO)>0
   Bar X0ZONA(MATTONCINO),Y0ZONA(MATTONCINO) To X0ZONA(MATTONCINO)+19,Y0ZONA(MATTONCINO)+9
   Wait Vbl 
  End If 
 Next MATTONCINO
End Proc
Procedure TROVAILFONTDATA70
 'look for the Data70 font  
 TESTOFONTEDICARATTERE$="I am looking for the Data70 font..."+Chr$(10)
 TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"...in your FONTS: drawer."+Chr$(10)
 TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"Wait for a moment, please..."
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOFONTEDICARATTERE$,17,17,19,-1]
 Get Disc Fonts 
 For FONTEDICARATTERE=1 To 65535
  FONTEDICARATTERE$=Left$(Font$(FONTEDICARATTERE),30)-" "
  If FONTEDICARATTERE$="Data70.font" Then Exit 
 Next FONTEDICARATTERE
 If FONTEDICARATTERE<65536
  Set Font FONTEDICARATTERE
  ALTEZZAFONT=Val(Mid$(Font$(FONTEDICARATTERE),31,2)-" ")
  TESTOFONTEDICARATTERE$="The font I am using is the Data70 font! :)"+Chr$(10)
  TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"This font will be used for the game."+Chr$(10)
  TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOFONTEDICARATTERE$,17,17,19,250]
 Else 
  TESTOFONTEDICARATTERE$="The font I am using is the Topaz font! :("+Chr$(10)
  TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"This font will be used for the game."+Chr$(10)
  TESTOFONTEDICARATTERE$=TESTOFONTEDICARATTERE$+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOFONTEDICARATTERE$,18,18,19,250]
 End If 
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,0,-1]
End Proc
Procedure VOCESEGUENTE
 'select the next audio voice for the next sound  
 Add VOCE,VOCE
 If VOCE=16
  VOCE=1
 End If 
End Proc
