home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1997-05-30 | 17.3 KB | 635 lines |
- 'Set Buffer 10
- Dim PD(1,28),CD(7),F(1,11,21),HI$(11),HI(11,2),P$(1),C(31),L(4)
- Dim MUS$(29)
- Hide
- 'Request Off
- 'On Error Goto ERR
- Extension_8_0EA2 "Amotrix.sam",-11
- 'Load "Amotrix.abk",11 : Bank Temporary 11
- Extension_8_142A 11
- 'Load "Amotrix.sam",11
- MUSDIR$=Dir$
- If Extension_8_09B4
- C$=Upper$(Command Line$)
- Else
- C$=Upper$( Extension_8_09D6( Extension_8_09C2 ))
- End If
- P=Instr(C$,"MODDIR=")
- If P
- MUSDIR$="" : Add P,7 : BR=0
- Do
- Exit If P>Len(C$)
- A$=Mid$(C$,P,1)
- If A$='"' : BR=1-BR : A$="" : End If
- Exit If(A$<=" ") and BR=0
- MUSDIR$=MUSDIR$+A$
- Inc P
- Loop
- End If
- If Exist(MUSDIR$)=0 Then MUSDIR$=Dir$
- Extension_8_063A MUSDIR$
- M=0
- Do
- F$= Extension_8_064C
- Exit If F$="" or M=30
- If Left$(F$,4)="mod."
- MUS$(M)=F$ : Inc M
- End If
- Loop
- NUMMUS=M : CURMUS=Rnd(NUMMUS-1)
- If NUMMUS Then Extension_8_0EA2 Extension_8_03EC(MUSDIR$)+MUS$(CURMUS),-3
- SET=1 : Gosub LOASET
- For A=1 To 10
- HI$(A)="* CHRISI *"
- HI(A,0)=(11-A)*1000
- HI(A,1)=5-(A-1)/2
- HI(A,2)=1
- Next
- For A=0 To 7 : Read CD(A) : Next
- Unpack 14 To 1 : Screen Hide 1
- For A=0 To 31 : C(A)=Colour(A) : Next
- If NUMMUS Then Extension_8_10F2 125 : Extension_8_108E 3
- HI=0 : MU=1 : SO=1 : HLF=1
- Gosub LOAHIS
- Repeat
- Repeat
- Gosub TITLE : HI=1
- Gosub MENU
- Until I$<>" "
- If I$<>Chr$(27) Then Gosub GAME : I$=""
- Until I$=Chr$(27)
- For A=64 To 0 Step -2 : Extension_8_10C6 A : Multi Wait : Next
- Sprite Off : Extension_8_10A8
- Screen Close 1
- Extension_8_1400 15
- End
- MENU:
- Unpack 15 To 0 : Screen Hide 0
- Screen 1 : Get Palette 0
- Screen 0 : For A=0 To 31 : Colour A,0 : Next
- Multi Wait : Screen Show 0
- Gr Writing 0
- T["WELCOME TO AMOTRIX!",76,2]
- T["WRITTEN BY",90,4]
- T["CHRISTOPHER HODGES",102,5]
- T["PLEASE SELECT PLAYERS",120,1]
- T["FIRE ON PORT 1: ONE PLAYER ",132,3]
- T["FIRE ON PORT 0: TWO PLAYERS",142,6]
- T["OTHER KEY-FUNCTIONS ARE NOW...",154,0]
- T["SPC: VIEW HIGHSCORES ",164,0]
- T["ESC: QUIT OUT! ",174,0]
- T["1-3: LOAD NEW GRAPHIC SET",184,0]
- T["INGAME KEYS ARE...",194,0]
- T["'P': PAUSE (VIEW SETTINGS)",204,0]
- T["'S': TOGGLE SOUND",214,0]
- T["'M': TOGGLE MUSIC; 'C': CHANGE MODULE",224,0]
- T["'H': HALF SPEED ",234,0]
- T["ESC: MAIN MENU ",246,0]
- Multi Wait : Fade 3 To 1
- A=0
- Repeat
- Multi Wait : I$=Upper$(Inkey$) : Inc A
- If Fire(1) Then I$="P1"
- If Fire(0) Then I$="P2"
- If(I$=>"1") and(I$<"4") and Val(I$)<>SET Then SET=Val(I$) : Gosub LOASET : A=0
- If A>500 Then I$=" "
- If I$="M" and NUMMUS<>0 Then MU=1-MU
- If I$="S" Then SO=1-SO
- If I$="H" Then HLF=3-HLF
- If I$="P" Then P=2 : Gosub PAUSE
- If I$="C" Then SONGEND=2
- Gosub TESTMUSIC
- Until(I$="P1") or(I$="P2") or(I$=Chr$(27)) or(I$=" ")
- If I$="P1" Then PL=0
- If I$="P2" Then PL=1
- Gr Writing 1
- Fade 3
- If MU=0 and(I$<>" ")
- If NUMMUS
- For A=64 To 0 Step -2 : Extension_8_10C6 A : Multi Wait : Next
- Extension_8_10A8 : WAI[16]
- End If
- Else
- WAI[48]
- End If
- Screen Close 0
- Return
- TITLE:
- Unpack 12 To 0 : Screen Hide 0 : Screen Display 0,,10,,1
- Screen 1 : Get Palette 0
- Screen 0 : For A=0 To 31 : Colour A,0 : Next
- Multi Wait : Screen Show 0 : Screen To Front 0
- If HI
- Gr Writing 0
- A=Rnd(3)
- If A=0 : A$="TODAYS HISCORE" : End If
- If A=1 : A$="FOREVER REMEMBERED" : End If
- If A=2 : A$="BEST AMOTRIXERS" : End If
- If A=3 : A$="COOLEST STACKERS" : End If
- T[A$,96,2]
- T[" RNK NAME SCORE LV SET",111,3]
- For A=1 To 10
- T$=Str$(HI(A,0))-" "
- T$=Str$(A)+". "+HI$(A)+" "+String$("0",5-Len(T$))+T$+" "
- If A<10 : T$=" "+T$ : End If
- A$=Str$(HI(A,1))-" "
- T$=T$+String$("0",2-Len(A$))+A$+" "+Str$(HI(A,2))+" "
- T[T$,A*10+115,5]
- Next
- Gr Writing 1
- End If
- If MU=0 and(I$<>" ") and NUMMUS Then Extension_8_108E 3 : Extension_8_10C6 64
- Multi Wait : Fade 3 To 1
- For A=0 To 128 Step 4
- Multi Wait : Screen Display 0,,168-A,,A*2+2
- Next
- For A=1 To 400
- Multi Wait
- Exit If Fire(0)+Fire(1)+(Inkey$<>"")
- Gosub TESTMUSIC
- Next
- Fade 3
- For A=0 To 128 Step 4
- Multi Wait : Screen Display 0,,41+A,,256-A*2
- Next
- WAI[16] : Screen Close 0
- Return
- GAME:
- Unpack 15 To 0 : Screen Hide 0
- Screen 1 : Get Palette 0
- Screen 0 : For A=0 To 31 : Colour A,0 : Next
- If PL=1 Then PD(0,0)=3 : PD(1,0)=163 : PD(0,1)=72 : PD(1,1)=232
- If PL=0 Then PD(0,0)=89 : PD(0,1)=158
- For P=0 To PL
- Gosub CLEARFIELD
- Next
- Multi Wait : Screen Show 0
- Multi Wait : Fade 3 To 1 : WAI[48]
- For P=0 To PL
- Gosub NEWSTONE
- Next
- TIM=0
- Repeat
- Gosub TESTMUSIC
- Gosub FUNCHECK
- If(PL=0 and PD(0,24)) or(PL=1 and PD(0,24) and PD(1,24)) Then Inc TIM
- I$=Upper$(Inkey$)
- For P=0 To PL
- If PD(P,24)=4 Then Gosub RETHISCORE2 : TIM=0
- If PD(P,24)=3 Then Gosub RETHISCORE : TIM=0
- If PD(P,24)=2 and PD(P,27) Then PD(P,25)=100
- If PD(P,24)=2 Then Inc PD(P,25) : If PD(P,25)>100 Then PD(P,24)=0 : Gosub RETNEXTLEV
- If PD(P,24)=1 and PD(P,27) Then PD(P,24)=0 : Gosub CLEARFIELD : Gosub NEWSTONE2
- If PD(P,24)=0 Then Gosub AMOTRIX : TIM=0
- PD(P,27)=0 : PD(P,28)=0
- Next
- If PD(0,24)<>3 and PD(1,24)<>3
- If I$="P" : P=0 : Gosub PAUSE : End If
- If I$="M"
- If NUMMUS
- MU=1-MU
- If MU=0
- Extension_8_10A8
- Else
- Extension_8_108E 3 : Extension_8_10C6 64
- End If
- End If
- End If
- If I$="S" : SO=1-SO : End If
- If I$="H" : HLF=3-HLF : End If
- If I$="C" : SONGEND=2 : End If
- If I$=Chr$(27) and PD(0,24)=1 and(PD(1,24)=1 or PL=0) : Exit : End If
- If I$=Chr$(27)
- P=0 : Sprite Off : Gosub GAMEOVER : Gosub NEWSTONE
- If PL=1 : P=1 : Gosub GAMEOVER : Gosub NEWSTONE : End If
- End If
- End If
- T=Timer
- If T<HLF Then For A=1 To HLF : Gosub FUNCHECK : Multi Wait : Next
- Timer=0
- Until TIM>200
- Sprite Off
- Fade 3 : WAI[48]
- Return
- End
- TESTMUSIC:
- If NUMMUS<2 Then Return
- If Extension_8_10B6 =$FF Then SONGEND=1
- If SONGEND=0 Then Return
- If SONGEND
- If Extension_8_15F0 <3 or Extension_8_15F0 >60 or SONGEND=2
- Extension_8_10A8
- Erase 3
- Repeat : NEXMUS=Rnd(NUMMUS-1) : Until NEXMUS<>CURMUS
- CURMUS=NEXMUS
- Extension_8_0EA2 Extension_8_03EC(MUSDIR$)+MUS$(NEXMUS),-3
- Extension_8_108E 3
- SONGEND=0
- End If
- End If
- Return
- LOASET:
- A$=Str$(SET)-" "
- Erase 1
- Extension_5_0120 "Amotrixset"+A$+".dat",1
- Extension_8_025A SET+6 To 13 : Extension_8_008A 13
- Return
- SAVHIS:
- Trap Open Out 1,"Amotrix.his"
- If Errtrap Then Return
- For A=1 To 10
- B=HI(A,0)
- Print #1, Extension_8_08D2(HI(A,0))+Chr$(HI(A,1))+Chr$(HI(A,2))+HI$(A);
- Next
- Close 1
- Return
- LOAHIS:
- If Exist("Amotrix.his")=0 Then Return
- Open In 1,"Amotrix.his"
- For A=1 To 10
- A$=Input$(1,6)
- HI(A,0)= Extension_8_0998(A$)
- HI(A,1)=Asc(Mid$(A$,5))
- HI(A,2)=Asc(Mid$(A$,6))
- HI$(A)=Input$(1,10)
- Next
- Close 1
- Return
- FUNCHECK:
- If Fire(1) Then PD(0,27)=-1
- If Fire(0) Then PD(1,27)=-1
- R=Jleft(1)-Jright(1)
- If R Then PD(0,28)=R
- R=Jleft(0)-Jright(0)
- If R Then PD(1,28)=R
- Return
- PAUSE:
- Sprite Off
- If P=0 Then Screen 1 : Get Palette 0 : Screen 0
- Multi Wait : Fade 1
- For A=0 To 127 Step 8
- Screen Display 0,,43+A,,256-A*2 : Multi Wait
- Next
- WAI[17]
- Screen Open 2,320,256,2,0
- Curs Off : Cls 0
- Palette 0,$FFF
- A$="; A: L R0=1280+R8; L R1=400; L R2=R9; L R3=R5; L A=R7+34; L R6=R7/4; "
- A$=A$+"B: L X=R0/10; L Y=R1/10; P; L R0=R0+R2; L R1=R1+R3; L R3=R3+1; "
- A$=A$+" I R1<2640 J B; L R4=1; I R3<30 J A; L R3=0-R3/2; L R1=2639; J B; "
- For A=0 To 3
- Sprite A,0,0,1
- Channel A To Sprite A*2
- Amal A,String$("P",A*40)+A$
- Next
- C=0
- Locate 0,7 : Centre "GAME PAUSED!"
- A$="MUSIC IS O"
- If MU Then A$=A$+"N. ("+MUS$(CURMUS)+")" Else A$=A$+"FF."
- Locate 0,10 : Centre A$
- A$="SOUND IS O"
- If SO Then A$=A$+"N." Else A$=A$+"FF."
- Locate 0,12 : Centre A$
- Locate 0,14 : Centre "GRAPHIC SET"+Str$(SET)+" IS LOADED."
- A$="DROPPING SPEED IS "
- If HLF=2 Then A$=A$+"ON HALF!" Else A$=A$+"NORMAL!"
- Locate 0,16 : Centre A$
- Locate 0,19 : Centre "PRESS ANY KEY OR FIRE TO RETURN."
- Draw 0,255 To 320,255
- Repeat
- For A=0 To 3
- Amreg(A,8)=Rnd(2870) : Amreg(A,9)=Rnd(19)-10 : Amreg(A,7)=Rnd(31)
- B=Amreg(A,6) : Amreg(A,5)=Rnd(30)
- Colour 17+A*4,C(CD(B)) : Colour 18+A*4,C(CD(B)+1)
- Colour 19+A*4,C(CD(B)+2)
- If Amreg(A,4)=1 Then Amreg(A,4)=0 : Extension_8_145A Extension_8_04F8(A),1,10000+Rnd(200)
- Next
- If C=0 Then Amal On : C=1
- Gosub TESTMUSIC
- Multi Wait
- Until(Inkey$<>"") or Fire(1) or Fire(0)
- Amal Off : Sprite Off
- Screen Close 2
- Screen Display 0,,10,,1
- For A=0 To 31 : Colour A,0 : Next
- Multi Wait : Fade 1 To 1
- For A=0 To 128 Step 8
- Multi Wait : Screen Display 0,,170-A,,A*2+2
- Next
- Wait 16
- Return
- AMOTRIX:
- Add PD(P,4),PD(P,6)*Min(PD(P,26),2)
- If PD(P,27)=0 Then PD(P,7)=21
- If PD(P,4) mod 8=0 Then PD(P,6)=0
- R=Jdown(1-P)-Jup(1-P)*PD(P,23)
- If R Then Gosub ENERGY
- PD(P,5)=PD(P,5)-Sgn(R)*PD(P,26)+PD(P,26)
- Sprite 4+P*2,PD(P,1)+PD(P,4)+128,123+PD(P,5),34+PD(P,2)*4+PD(P,3)
- If PD(P,5)/8<>PD(P,8) Then Gosub CHECK : PD(P,8)=PD(P,5)/8
- If PD(P,28) Then PD(P,6)=PD(P,28) : If PD(P,4) mod 8=0 Then Gosub MOVE
- Inc PD(P,7)
- If PD(P,27) and PD(P,7)>20 and PD(P,5)>-1 Then Gosub ROTATE
- Return
- ENERGY:
- If PD(P,5)<0 Then R=Min(0,R) : Return
- PD(P,9)=Max(Min(1280,PD(P,9)-R),8)
- If PD(P,9)=8 and R>0 Then R=0
- If PD(P,9)<1280 Then Ink 0 : Draw PD(P,0)+153,248-PD(P,9)/8 To PD(P,0)+154,248-PD(P,9)/8
- Ink 6 : Draw PD(P,0)+153,249-PD(P,9)/8 To PD(P,0)+154,249-PD(P,9)/8
- Return
- CHECK:
- S=PD(P,2)*4+PD(P,3) : XX=PD(P,4)/8 : YY=Max(PD(P,5)/8,0)
- For X=0 To 3
- For Y=0 To 3
- A=Peek(Start(13)+S*16+X+Y*4)
- If XX+X>10 or XX+X<-1 Then Exit
- If A and F(P,XX+X+1,YY+Y+1) Then Gosub PASTESTONE : Gosub NEWSTONE : Exit 2
- Next
- Next
- Return
- MOVE:
- S=PD(P,2)*4+PD(P,3) : XX=PD(P,4)/8+PD(P,6) : YY=Max(PD(P,5)/8,0)
- If YY<0 Then Return
- For X=0 To 3
- For Y=0 To 3
- A=Peek(Start(13)+S*16+X+Y*4)
- If XX+X>10 or XX+X<-1 Then Exit
- If A and F(P,XX+X+1,YY+Y+1) Then PD(P,6)=0 : Exit 2
- Next
- Next
- Return
- ROTATE:
- B=PD(P,3)
- Add PD(P,3),1,0 To 3
- S=PD(P,2)*4+PD(P,3) : XX=PD(P,4)/8+PD(P,6) : YY=Max(PD(P,5)/8,0)
- If YY<0 Then Return
- For X=0 To 3
- For Y=0 To 3
- A=Peek(Start(13)+S*16+X+Y*4)
- If XX+X>10 or XX+X<-1 Then Exit
- If A and F(P,XX+X+1,YY+Y+1) Then PD(P,3)=B : Exit 2
- Next
- Next
- If B<>PD(P,3) and SO Then Extension_8_145A 1,1,4000
- PD(P,7)=0
- Return
- PASTESTONE:
- Sprite Off 4+P*2
- If PD(P,2)=7 Then Goto DROP
- If SO Then Extension_8_145A 1,1,10000
- Paste Bob PD(P,4)/8*8+PD(P,1),81+PD(P,5)/8*8,2+PD(P,2)*4+PD(P,3)
- For X=0 To 3
- For Y=0 To 3
- If Y+YY<1 Then Gosub GAMEOVER : Pop : Exit 2
- A=Peek(Start(13)+S*16+X+Y*4)
- If A Then F(P,XX+X+1,YY+Y)=1
- Next
- Next
- Return
- GAMEOVER:
- Ink 6,0 : Text PD(P,1),111,"GAME OVER!"
- If PD(P,20)>HI(10,0)
- If PL=1 and PD(1-P,24)=3
- Ink 9,0 : Text PD(P,1)+16,167,"PLEASE"
- Ink 9,0 : Text PD(P,1)+24,175,"WAIT"
- PD(P,24)=4 : PD(P,23)=1
- P$(P)=" "
- Else
- Ink 9,0 : Text PD(P,1),167,"YOU HAVE A"
- Text PD(P,1)+8,175,"HISCORE!"
- Text PD(P,1),183,"ENTER NAME"
- PD(P,24)=3 : PD(P,23)=1
- P$(P)=" "
- Text PD(P,1),199,P$(P)
- End If
- Else
- Ink 3,0 : Text PD(P,1),135,"PRESS FIRE"
- Ink 3,0 : Text PD(P,1)+8,143,"TO PLAY!"
- PD(P,24)=1
- End If
- Return
- RETHISCORE2:
- If PD(1-P,24)=3 Then Return
- Ink 9,0 : Text PD(P,1),167,"YOU HAVE A"
- Text PD(P,1)+8,175,"HISCORE!"
- Text PD(P,1),183,"ENTER NAME"
- Text PD(P,1),199,P$(P)
- PD(P,24)=3
- Return
- RETHISCORE:
- POS=PD(P,23)
- If I$="" Then Return
- If(I$>=" ") and(I$<="Z")
- P$(P)=Left$(P$(P),POS-1)+I$+Right$(P$(P),10-POS)
- POS=Min(POS+1,10)
- End If
- If I$=Chr$(8)
- POS=Max(POS-1,1)
- P$(P)=Left$(P$(P),POS-1)+" "+Right$(P$(P),10-POS)
- If POS=9 : P$(P)=Left$(P$(P),8)+" " : End If
- End If
- PD(P,23)=POS
- If I$=Chr$(13) Then I$="" : Gosub MAKEENTRY
- Ink 3,0 : Text PD(P,1),199,P$(P)
- Return
- MAKEENTRY:
- Ink 3,0 : Text PD(P,1),135,"PRESS FIRE"
- Ink 3,0 : Text PD(P,1)+8,143,"TO PLAY!"
- Ink 0
- For A=0 To 39
- Box A+PD(P,1),161+A To PD(P,1)+79-A,200-A
- If A and 4 Then Multi Wait
- Next
- POS=1
- For A=1 To 10
- If HI(A,0)>PD(P,20) Then POS=A+1
- Next
- For A=11 To POS Step -1
- HI(A,0)=HI(A-1,0) : HI$(A)=HI$(A-1)
- Next
- A=Rnd(9) : B=(P$(P)=" ")
- If B and A=0 Then P$(P)="BAD LAMER!"
- If B and A=1 Then P$(P)="LOSER GUY!"
- If B and A=2 Then P$(P)="MR.NO NAME"
- If B and A=3 Then P$(P)="AMIGAFREAK"
- If B and A=4 Then P$(P)="HOPELESS!!"
- If B and A=5 Then P$(P)="INVALIDE!!"
- If B and A=6 Then P$(P)="NO-FINGER!"
- If B and A=7 Then P$(P)="HALF-BRAIN"
- If B and A=8 Then P$(P)="MANIAC GUY"
- If B and A=9 Then P$(P)="GHOST-MAN!"
- HI(POS,0)=PD(P,20) : HI$(POS)=P$(P)
- HI(POS,1)=PD(P,21) : HI(POS,2)=SET
- PD(P,24)=1
- Gosub SAVHIS
- Pop
- Return
- DROP:
- If SO Then Extension_8_145A 1,2,8000
- XX=PD(P,4)/8+1 : YY=Max(PD(P,5)/8,0)+1
- For A=0 To 4
- Y=YY : X=XX : D=0
- For C=0 To 19
- B=0
- If F(P,X,Y+1)=0 Then Inc Y : B=1
- If F(P,X+1,Y)=0 and F(P,X+1,Y+1)=0 and B=0 Then Inc X : Inc Y : D=1 : B=1
- If F(P,X-1,Y)=0 and F(P,X-1,Y+1)=0 and B=0 Then Dec X : Inc Y : D=-1 : B=1
- If F(P,X+1,Y)=0 and B=0 and D=1 Then Inc X : B=1
- If F(P,X-1,Y)=0 and B=0 and D=-1 Then Dec X : B=1
- If F(P,X+1,Y) and B=0 and D=1 Then Exit
- If F(P,X-1,Y) and B=0 and D=-1 Then Exit
- If F(P,X+1,Y) and F(P,X-1,Y) and F(P,X,Y+1) and B=0 Then Exit
- Next
- If F(P,X,Y)=0 Then F(P,X,Y)=1 : Paste Bob X*8+PD(P,1)-8,81+Y*8,74
- Next
- Return
- NEWSTONE:
- B=0
- For Y=2 To 20
- For X=1 To 10
- If F(P,X,Y)=0 Then Exit
- Next
- If X=11 Then L(B)=Y : Inc B
- Next
- If B>3 and SO Then Extension_8_145A 14,3,16000
- If B Then Add PD(P,20),(B*B*150)/HLF Else Add PD(P,20),10/HLF
- If B Then Gosub PUSH
- PD(P,22)=Max(PD(P,22)-B,0)
- If PD(P,22)=0 Then Gosub NEXLEVEL : Return
- NEWSTONE2:
- PD(P,2)=PD(P,11) : PD(P,11)=Rnd(7) : PD(P,3)=0 : PD(P,4)=24 : PD(P,5)=-15 : PD(P,6)=0
- PD(P,12+PD(P,2))=Min(PD(P,12+PD(P,2))+1,35)
- Gosub UPDAT
- X=PD(P,0)+(PD(P,2) mod 4)*16+7
- Y=187+PD(P,2)/4*48-PD(P,12+PD(P,2))
- Ink CD(PD(P,2)) : Plot X+3,Y+1
- Ink CD(PD(P,2))+1 : Plot X+3,Y : Draw X+1,Y+1 To X+2,Y+1
- Ink CD(PD(P,2))+2 : Draw X,Y To X+2,Y
- Colour 25+P*4,Colour(CD(PD(P,2))) : Colour 26+P*4,Colour(CD(PD(P,2))+1)
- Colour 27+P*4,Colour(CD(PD(P,2))+2)
- Ink 0 : Bar 45+PD(P,0),122 To 60+PD(P,0),137
- Paste Bob 45+PD(P,0),122,PD(P,11)+66
- Return
- NEXLEVEL:
- For X=1 To 10
- For Y=1 To 20
- If F(P,X,Y) Then Exit
- Paste Bob X*8+PD(P,1)-8,81+Y*8,74
- If SO Then Extension_8_145A 1,1,16000
- Add PD(P,20),2/HLF
- T$=Str$(PD(P,20))-" "
- T$=String$("0",5-Len(T$))+T$
- Ink 3,0 : Text PD(P,0)+12,97,T$
- Next
- Multi Wait
- Next
- Timer=0
- Ink 3,0 : Text PD(P,1)+20,143,"LEVEL"
- Text PD(P,1),159,"COMPLETED!"
- Add PD(P,20),PD(P,21)*200/HLF
- Gosub UPDAT
- BAAA=0
- Repeat
- Add BAAA,1,0 To 3
- If SO Then Extension_8_145A 1,5,PD(P,9)*12+4000
- R=8 : Gosub ENERGY
- Add PD(P,20),(PD(P,21)-1)/HLF+1
- T$=Str$(PD(P,20))-" "
- T$=String$("0",5-Len(T$))+T$
- Ink 3,0 : Text PD(P,0)+12,97,T$
- If BAAA=0 Then Multi Wait
- Until PD(P,9)=8
- PD(P,24)=2 : PD(P,25)=0
- Return
- RETNEXTLEV:
- Gosub CLEARFIELD2
- Inc PD(P,21)
- PD(P,22)=PD(P,21)*5+5
- PD(P,23)=Min(PD(P,23)+1,8)
- If(PD(P,21) and 1) and(PD(P,21)>3) Then Inc PD(P,26)
- Gosub NEWSTONE2
- Return
- UPDAT:
- T$=Str$(PD(P,20))-" "
- T$=String$("0",5-Len(T$))+T$
- Ink 3,0 : Text PD(P,0)+12,97,T$
- T$=Str$(PD(P,21))-" "
- If PD(P,21)<10 Then T$="0"+T$
- Ink 18,0 : Text PD(P,0)+25,115,T$
- T$=Str$(PD(P,22))-" "
- If PD(P,22)<10 Then T$="0"+T$
- Ink 9,2 : Text PD(P,1),86,"LINES - "+T$
- Return
- DAMAGE:
- For C=1 To 49
- XX=Rnd(9)+1 : YY=Rnd(18)+2
- If F(1-P,XX,YY)
- F(1-P,XX,YY)=0
- Ink 0
- For C=0 To 3
- If SO : Extension_8_145A 1,5,10000 : End If
- Box PD(1-P,1)+XX*8-8+C,81+YY*8+C To PD(1-P,1)+XX*8-1-C,88+YY*8-C
- Multi Wait
- Next
- Exit
- End If
- Next
- Return
- PUSH:
- If SO Then Extension_8_145A 1,4,16000
- Colour 25+P*4,$444
- For A=0 To B-1
- Ink 25+P*4 : Bar PD(P,1),81+L(A)*8 To PD(P,1)+79,88+L(A)*8
- Next
- For A=$444 To $FFF Step $111
- Colour 25+P*4,A : Wait 2
- Next
- Wait 4
- For A=$FFF To 0 Step -$111
- Colour 25+P*4,A : Multi Wait
- Next
- For A=0 To B-1
- If PL=1 and PD(1-P,24)=0 Then Gosub DAMAGE
- For C=L(A)-1 To 1 Step -1
- For X=1 To 10
- F(P,X,C+1)=F(P,X,C)
- Next
- Next
- Screen Copy 0,PD(P,1),89,PD(P,1)+80,81+L(A)*8 To 0,PD(P,1),97
- Screen Copy 1,197,PD(P,10)*8+9,277,PD(P,10)*8+17 To 0,PD(P,1),89
- Add PD(P,10),-1,0 To 13
- Next
- Return
- CLEARFIELD:
- PD(P,20)=0 : PD(P,9)=8 : PD(P,21)=1 : PD(P,22)=10 : PD(P,23)=1 : PD(P,26)=1
- CLEARFIELD2:
- PD(P,24)=0 : PD(P,10)=13 : PD(P,11)=Rnd(7)
- For A=12 To 19 : PD(P,A)=0 : Next
- Ink 0 : Bar PD(P,0)+153,88 To PD(P,0)+154,248
- Screen Copy 1,SET*64-64,0,SET*64,170 To 0,PD(P,0),80
- Screen Copy 1,192,0,284,170 To 0,PD(P,0)+64,80
- For X=1 To 10
- For Y=0 To 20
- F(P,X,Y)=0
- Next
- Next
- For X=0 To 11
- F(P,X,21)=1
- Next
- For Y=0 To 21
- F(P,0,Y)=1 : F(P,11,Y)=1
- Next
- Gosub UPDAT
- Return
- ERR:
- Resume Next
- Data 7,4,10,19,13,22,1,16
- Procedure T[T$,Y,C]
- X=160-Len(T$)*4
- Ink C*3+1 : Text X+1,Y+7,T$
- Ink C*3+3 : Text X,Y+6,T$
- End Proc
- Procedure WAI[T]
- For AAA=1 To T : Multi Wait : Next
- End Proc