home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1992-02-26 | 6.2 KB | 322 lines |
- '
- ' "GRETCH" By Andrew Campbell 1994
- '
- ' INSTRUCTIONS: By using the joystick-controlled dot, guide
- ' the bouncing balls into the flashing block. You have infinite
- ' lives but not infinite hair - don't pull it too hard.
- '
- ' Yes I know it's an excuse of a game but who cares?
- ' Just play it and stop moaning.
- '
- ' Cheers - AJC
- '
-
- Dim XP(50),YP(50),_DIR(50)
- Global LVL,LVS,SCORE
- Global XP(),YP(),_DIR()
-
- REST:
- Gosub TSCREEN
- LVL=1 : LVS=5 : SCORE=0
-
-
- RESTART:
- Screen Open 0,320,256,8,Lowres : Curs Off : Flash Off : Hide On : Cls 0
- Default Palette 0,0,0,0,0,0,0,0
- Key Speed 10,1
- NUMBER_OF_BALLS=LVL
- Ink 2 : Box 0,0 To 319,199
- GEN_LEVEL
-
-
-
- Repeat
- X=Rnd(310)+9 : Y=Rnd(190)+9
- If Point(X,Y)=2 : Goto FINE : End If
- Until DEATH=1
-
-
-
-
-
-
- FINE:
-
- CEN=1 : SPEEDY=0 : DEAD=0 : WON=0 : SLOW=0 : QUIT=0
- _STARTX=0 : _STARTY=0 : _FINISHX=0 : _FINISHY=0
-
- Auto View On : View
- Fade 1,$0,$FFF,$F,$F0,$F,0,$FFF,0
- Flash 7,"(444,5)(555,5)(666,5)(777,5)(888,5)(999,5)(AAA,5)(BBB,5)(CCC,5)(BBB,5)(AAA,5)(999,5)(888,5)(777,5)(666,5)"
-
-
-
-
- GO_FOR_IT:
- Plot X,Y,1
- K$=""
-
- Repeat
-
- Update
-
- K$=Inkey$
- If K$>"" : QUIT=1 : End If
- Gosub MALIEN
-
- If SPEEDY=1
- If DR=1 : Gosub GOIT : End If
- If DR=2 : Gosub GOIT : End If
- If DR=3 : Gosub GOIT : End If
- If DR=4 : Gosub GOIT : End If
- If Joy(1)<>-1
- If Jup(1) : DR=1 : Gosub GOIT : End If
- If Jright(1) : DR=2 : Gosub GOIT : End If
- If Jdown(1) : DR=3 : Gosub GOIT : End If
- If Jleft(1) : DR=4 : Gosub GOIT : End If
- End If
- End If
-
- If SPEEDY=0
- If Jup(1) : DR=1 : Gosub GOIT : End If
- If Jright(1) : DR=2 : Gosub GOIT : End If
- If Jdown(1) : DR=3 : Gosub GOIT : End If
- If Jleft(1) : DR=4 : Gosub GOIT : End If
- End If
-
- Until DEAD=1 or WON=LVL or QUIT=1
-
- If QUIT=1 : Goto REST : End If
- If WON=LVL : Flash Off : Wait 30 : Fade 1,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF : Wait 30 : Inc LVL : End If
- Goto RESTART
-
-
-
-
- GOIT:
- OX=X : OY=Y
- If DR=1 : Dec Y : End If
- If DR=2 : Inc X : End If
- If DR=3 and Y<199 : Inc Y : End If
- If DR=4 : Dec X : End If
- If SPEEDY=0 : Gosub CHECKPOINT : End If
- If SPEEDY=1 : Gosub CHECKPOINT2 : End If
- Return
-
-
-
-
-
- CHECKPOINT:
- C=Point(X,Y)
- If C=0
- _STARTX=X : _STARTY=Y
- SPEEDY=1
- Return
- Else If C<>2
- X=OX : Y=OY
- Return
- Else
- Plot OX,OY,2
- Plot X,Y,1
- End If
- Return
-
-
-
-
- CHECKPOINT2:
- C=Point(X,Y)
- If C=2
- SPEEDY=0
- _FINISHX=X : _FINISHY=Y
- Gosub _FILL_IT_IN
- Return
- Else If C=1 or C=7
- Sam Play 3
- DEAD=1
- Return
- Else If C=0
- Plot X,Y,1
- End If
- Return
-
-
-
-
- MALIEN:
- Inc CEN
- If CEN>NUMBER_OF_BALLS : CEN=1 : End If
- If XP(CEN)=0 and YP(CEN)=0 and _DIR(CEN)=0 : Return : End If
- Plot XP(CEN),YP(CEN),0
- If _DIR(CEN)=1 : Dec XP(CEN) : Dec YP(CEN) : End If
- If _DIR(CEN)=2 : Inc XP(CEN) : Dec YP(CEN) : End If
- If _DIR(CEN)=3 : Inc XP(CEN) : Inc YP(CEN) : End If
- If _DIR(CEN)=4 : Dec XP(CEN) : Inc YP(CEN) : End If
- Plot XP(CEN),YP(CEN),3
- Gosub REBOUND
- Return
-
-
-
-
-
- REBOUND:
-
- C1=Point(XP(CEN),YP(CEN)-1)
- C2=Point(XP(CEN)+1,YP(CEN))
- C3=Point(XP(CEN),YP(CEN)+1)
- C4=Point(XP(CEN)-1,YP(CEN))
-
- If C1=1 or C2=1 or C3=1 or C4=1 : DEAD=1 : Sam Play 3 : End If
- If C1=7 or C2=7 or C3=7 or C4=7
- Inc WON : Plot XP(CEN),YP(CEN),0 : XP(CEN)=0 : YP(CEN)=0 : _DIR(CEN)=0
- A=$FFF : Palette A,A,A,A,A,A,A,A,A,A,A,A
- Flash 7,"(444,5)(555,5)(666,5)(777,5)(888,5)(999,5)(AAA,5)(BBB,5)(CCC,5)(BBB,5)(AAA,5)(999,5)(888,5)(777,5)(666,5)"
- Fade 1,$0,$FFF,$F,$F0,$F,0,$FFF,0
- Sam Play 1
- End If
-
- If C4=2 and _DIR(CEN)=1 : _DIR(CEN)=2 : If SFX=1 : Sam Play 2 : End If : End If
- If C4=2 and _DIR(CEN)=4 : _DIR(CEN)=3 : If SFX=1 : Sam Play 2 : End If : End If
- If C2=2 and _DIR(CEN)=2 : _DIR(CEN)=1 : If SFX=1 : Sam Play 2 : End If : End If
- If C2=2 and _DIR(CEN)=3 : _DIR(CEN)=4 : If SFX=1 : Sam Play 2 : End If : End If
- If C1=2 and _DIR(CEN)=1 : _DIR(CEN)=4 : If SFX=1 : Sam Play 2 : End If : End If
- If C1=2 and _DIR(CEN)=2 : _DIR(CEN)=3 : If SFX=1 : Sam Play 2 : End If : End If
- If C3=2 and _DIR(CEN)=4 : _DIR(CEN)=1 : If SFX=1 : Sam Play 2 : End If : End If
- If C3=2 and _DIR(CEN)=3 : _DIR(CEN)=2 : If SFX=1 : Sam Play 2 : End If : End If
-
- Return
-
-
-
- _FILL_IT_IN:
- PTX=0 : PTY=0
- Ink 2
- Paint _STARTX,_STARTY
- Plot X,Y,1
- Return
-
-
-
- TSCREEN:
-
- SFX=0
-
- Screen Open 0,320,256,8,Lowres : Curs Off : Flash Off : Hide On : Cls 0
- Default Palette 0,0,0,0,0,0,0,0
- Wait 30
- Key Speed 10,1
- Fade 1,$0,$FFF,$F,$F0,$F,0,$FFF,0
-
- CEN=1
- Ink 2 : Box 0,0 To 319,199
- NUMBER_OF_BALLS=Rnd(10)+5
-
- For I=1 To NUMBER_OF_BALLS
- XP(I)=Rnd(300)+8 : YP(I)=Rnd(170)+8 : _DIR(I)=Rnd(3)+1
- Next I
-
- Paper 0 : Pen 2
- Locate 0,8 : Centre "G R E T C H"
- Locate 0,12 : Centre "(c) 1994 Black Dragon Design"
- Locate 0,14 : Centre "PRESS FIRE TO PLAY"
-
- K$=""
- Repeat
- K$=Inkey$
- If K$<>"" : Fade 1 : Wait 15 : End : End If
- Gosub MALIEN
- Until Fire(1)
- SFX=1
-
- Return
-
-
-
- '------------------
- Procedure GEN_LEVEL
-
- Randomize Timer
-
- If LVL=1
- Ink 2
- Bar 0,0 To 290,43
- Bar 0,0 To 70,127
- Bar 166,128 To 320,199
- Bar 177,63 To 201,128
- Bar 177,42 To 201,50
- Ink 7
- Bar 1,128 To 35,198
- XP(1)=310
- YP(1)=14
- End If
-
- If LVL=2
- Ink 2
- Bar 22,0 To 146,86
- Bar 11,119 To 84,192
- Bar 84,35 To 255,60
- Bar 160,166 To 320,199
- Bar 177,42 To 201,50
- Ink 7
- Bar 212,90 To 221,99
- XP(1)=298 : XP(2)=5
- YP(1)=14 : YP(2)=5
- End If
-
- If LVL=3
- Ink 2
- Circle 146,86,10 : Paint 146,86,2
- Circle 84,192,7 : Paint 84,192,2
- Circle 200,100,10 : Paint 200,100,2
- Ink 7
- Bar 155,110 To 165,120
- XP(1)=2 : YP(1)=2
- XP(2)=312 : YP(2)=2
- XP(3)=200 : YP(3)=2
- End If
-
- If LVL=4
- Ink 2
- Circle 100,86,13 : Paint 100,86,2
- Circle 284,192,7 : Paint 284,192,2
- Bar 0,0 To 20,20 : Bar 300,0 To 320,20
- Ink 7
- Bar 315,195 To 319,199
- XP(1)=42 : YP(1)=42
- XP(2)=52 : YP(2)=52
- XP(3)=62 : YP(3)=62
- XP(4)=72 : YP(4)=72
- End If
-
- If LVL>4 and LVL<10
- Ink 2
- Bar 0,150-(LVL*5) To 50+(10*LVL),199 : Bar 300,0 To 320,20
- Ink 7
- Circle 160,100,11-LVL : Paint 160,100,7
- For I=1 To LVL : XP(I)=10*I : YP(I)=10 : Next I
- End If
-
- If LVL>9
- Ink 2
- R1=Rnd(310)+5 : R2=Rnd(190)+5
- Circle R1,R2,Rnd(LVL)-5 : Paint R1,R2,2
-
- Ink 7
- R1=Rnd(310)+5 : R2=Rnd(190)+5
- Ink 7 : Box R1,R2 To R1+10,R2+10
-
- For I=1 To LVL
- REE:
- R1=Rnd(310)+5 : R2=Rnd(190)+5
- C=Point(R1,R2)
- If C<>0 : Goto REE : End If
- XP(I)=R1 : YP(I)=R2
- Next I
- End If
-
- For I=1 To LVL : _DIR(I)=Rnd(3)+1 : Next I
-
- End Proc
- '------------------