'* *********************************************** * '* MOVIX V1.00 * '* ----------------------------------------------- * '* Copyright Movix © 1997 by Testaware * '* ----------------------------------------------- * '* written by Volker Stepprath 02.02.97 - 16.02.97 * '* *********************************************** * Dim MX(9,9) Global MX(),XNB,XAB,XPA,XPB,XMA,XMB,XTA,XTB Global XWA,XBA,XFN,XAS,XCA,XCB,XGM,XSC,XSD Global XT$,XA$,XB$,XM$,XJ$ Request Off Amos To Front Close Workbench Proc _MXITRO Proc _MXMENU Request On End Procedure _MXMENU Gosub L_MX Do Repeat Wait Vbl Until Mouse Key A=Mouse Zone If A>False On A Gosub A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T End If Loop 'Name A A: Paste Bob 30,65,7 If Z=False Then Proc _MXINPT[XA$] : XA$=Left$(Param$,15) Autoback 1 _MXTEXT[String$(".",15-Len(XA$))+XA$,73,71] Autoback 2 : Paste Bob 30,65,6 Return 'Mode A B: Paste Bob 30,81,7 : Autoback 1 If Mouse Key=1 Then A=1 Else A=-1 Gosub Z If Z=False Then Add XCA,A,0 To 2 If XCA=0 A$="MOUSE" Else If XCA=1 A$="JOYSTICK" Else If XCA=2 A$="COMPUTER" End If _MXTEXT[String$(".",15-Len(A$))+A$,73,87] Autoback 2 : Paste Bob 30,81,6 Return 'Moves A C: Paste Bob 30,97,7 : Autoback 1 If Mouse Key=1 Then A=1 Else A=-1 Gosub Z Repeat If Z=False Then Add XMA,A,1 To 999 A$=Str$(XMA)-" " : _MXTEXT[String$("0",3-Len(A$))+A$,133,103] Until Mouse Key=False Autoback 2 : Paste Bob 30,97,6 Return 'Time A D: Paste Bob 30,113,7 : Autoback 1 If Mouse Key=1 Then A=1 Else A=-1 Gosub Z Repeat If Z=False Then Add XTA,A,0 To 999 If XTA=0 Then A$="OFF" Else A$=Str$(XTA)-" " _MXTEXT[String$("0",3-Len(A$))+A$,133,119] Until Mouse Key=False Autoback 2 : Paste Bob 30,113,6 Return 'Name B E: Paste Bob 170,65,9 If Z=False Then Proc _MXINPT[XB$] : XB$=Left$(Param$,15) Autoback 1 _MXTEXT[String$(".",15-Len(XB$))+XB$,213,71] Autoback 2 : Paste Bob 170,65,8 Return 'Mode B F: Paste Bob 170,81,9 : Autoback 1 Gosub Z If Z=False Then Add XCB,1,0 To 2 If XCB=0 A$="MOUSE" Else If XCB=1 A$="JOYSTICK" Else If XCB=2 A$="COMPUTER" End If _MXTEXT[String$(".",15-Len(A$))+A$,213,87] Autoback 2 : Paste Bob 170,81,8 Return 'Moves B G: Paste Bob 170,97,9 : Autoback 1 If Mouse Key=1 Then A=1 Else A=-1 Gosub Z Repeat If Z=False Then Add XMB,A,1 To 999 A$=Str$(XMB)-" " : _MXTEXT[String$("0",3-Len(A$))+A$,273,103] Until Mouse Key=False Autoback 2 : Paste Bob 170,97,8 Return 'Time B H: Paste Bob 170,113,9 : Autoback 1 If Mouse Key=1 Then A=1 Else A=-1 Gosub Z Repeat If Z=False Then Add XTB,A,0 To 999 If XTB=0 Then A$="OFF" Else A$=Str$(XTB)-" " _MXTEXT[String$("0",3-Len(A$))+A$,273,119] Until Mouse Key=False Autoback 2 : Paste Bob 170,113,8 Return 'Start player I: Paste Bob 30,136,11 : Autoback 1 If Z=False Then Add XAB,1,1 To 2 _MXTEXT[String$(".",6)+Str$(XAB)-" ",113,142] Gosub Z Autoback 2 : Paste Bob 30,136,10 Return 'Winning stones J: Paste Bob 30,152,11 : Autoback 1 If Mouse Key=1 Then A=1 Else A=-1 Repeat If Z=False Then Add XNB,A,2 To 10 A$=Str$(XNB)-" " : _MXTEXT[String$("0",2-Len(A$))+A$,138,158] Gosub Z Until Mouse Key=False Autoback 2 : Paste Bob 30,152,10 Return 'N° of walls K: Paste Bob 30,168,11 : Autoback 1 If Mouse Key=1 Then A=1 Else A=-1 Gosub Z Repeat If Z=False Then Add XWA,A,0 To 99 A$=Str$(XWA)-" " : _MXTEXT[String$("0",2-Len(A$))+A$,138,174] Until Mouse Key=False Autoback 2 : Paste Bob 30,168,10 Return 'N° of balls L: Paste Bob 30,184,11 : Autoback 1 If Mouse Key=1 Then A=1 Else A=-1 Autoback 1 Gosub Z Repeat If Z=False Then Add XBA,A,0 To 99 A$=Str$(XBA)-" " : _MXTEXT[String$("0",2-Len(A$))+A$,138,190] Until Mouse Key=False Autoback 2 : Paste Bob 30,184,10 Return 'Moving speed M: Paste Bob 170,136,11 : Autoback 1 B=False For A=0 To 5 If Btst(A,XAS) Then B=A : Exit Next If Mouse Key=1 Then A=1 Else A=-1 Repeat If Z=False Add B,A,0 To 5 XAS=False Bset B,XAS End If A$=Str$(XAS)-" " : _MXTEXT[String$("0",2-Len(A$))+A$,278,142] Gosub Z Until Mouse Key=False Autoback 2 : Paste Bob 170,136,10 Return 'Sound N: Paste Bob 170,152,11 : Autoback 1 If Z=False Then Add XSD,1,0 To 3 If XSD=0 : A$="OFF" Else If XSD=1 : A$="MUSIC" Else If XSD=2 : A$="SFX" Else If XSD=3 : A$="MUSIC-SFX" End If If Z=False If XSD=0 or XSD=2 : Mvolume 0 Else Mvolume 63 : End If Wait 10 End If _MXTEXT[String$(".",14-Len(A$))+A$,218,158] Autoback 2 : Paste Bob 170,152,10 Return 'Gamemode O: Paste Bob 170,168,11 : Autoback 1 Gosub Z : If Z=False Then Add XGM,1,0 To 2 If XGM=0 A$="NORMAL" Else If XGM=1 A$="MOVEOUT" Else If XGM=2 A$="SCORING" End If _MXTEXT[String$(".",11-Len(A$))+A$,233,174] Autoback 2 : Paste Bob 170,168,10 Return 'Highscore P: Paste Bob 170,184,11 If Z=False Wait 10 Proc _MXFDOT Proc _MXSCOR Z=True Gosub L_MX End If Paste Bob 170,184,10 Return 'Start! Q: Paste Bob 30,206,11 Wait 10 If 100-XWA100 Proc _MXALET["TO MUCH WALLS AND BALLS!"] Else If XWA=0 and XGM=1 Proc _MXALET["WALLS NEEDED IN THIS MODE!"] Else If XSD=0 or XSD=2 : Music Off : End If A=XMA : B=XMB : C=XTA : D=XTB : E=XAB F=XWA : G=XBA : H=XNB : I=XAB : J=XCA : K=XCB If XTA=0 : XTA=-2 : End If If XTB=0 : XTB=-2 : End If If XGM=2 If XCA=2 or XCB<>2 Proc _MXALET["SCORING MODE:USING DEFAULT!"] End If XMA=100 : XMB=100 XTA=100 : XTB=100 XWA=3 : XBA=3 If XCA=2 : XCA=0 : End If XCB=2 XNB=4 : XAB=1 End If Proc _MXFDOT Proc _MXGAME XMA=A : XMB=B : XTA=C : XTB=D : XAB=E XWA=F : XBA=G : XNB=H : XAB=I : XCA=J : XCB=K Z=True Gosub L_MX If XSD=0 or XSD=2 : Mvolume 0 : Music 1 : End If End If Paste Bob 30,206,10 Return 'About! R: Paste Bob 100,206,11 Wait 10 Proc _MXFDOT Proc _MXABOU Z=True Gosub L_MX Return 'Default! S: Paste Bob 170,206,11 Proc _MXDFLT While Mouse Key<>False Wait Vbl Wend S2: Z=True For Z=1 To 16 On Z Gosub A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P Next Z=False Mvolume 63 Paste Bob 170,206,10 Return 'Abort! T: Paste Bob 240,206,11 If XSC Trap Bsave "Movix.Score",Start(19) To Start(19)+Length(19) Wait 100 End If If XSD=1 or XSD=3 Fade 2 For A=63 To 0 Step -1 If A>30 Colour Back Colour(0) View End If Mvolume A Wait Vbl Next Else Proc _MXFDOT End If Amal Off Bob Off Screen Close 0 If Prg State2 If XCA=0 : A$=XM$ Else A$=XJ$ : End If Amal 1,A$ : Amal On 1 End If If XCB<>2 If XCB=0 : A$=XM$ Else A$=XJ$ : End If Amal 2,A$ : Amal On 2 End If 'Names Add XAB,1,1 To 2 Proc _MXNEXT 'Fade in Proc _MXFDIN Wait 10 Data "PLAYER","MOVES","POINTS","TIME" End Proc Procedure _MXGAME 'Install all Proc _MXINST Priority Reverse On 'Mainloop Repeat 'Check if move possible Proc _MXCKMV Exit If Param=False 'No moves left (both) Exit If XMA<1 and XMB<1 'Turn on timer ? If XAB=1 and XTA<>-2 or XAB=2 and XTB<>-2 Every 50 Proc _MXTIME Every On End If Repeat A=Asc(Inkey$) If A Bclr 5,A If A=27 : Rem [ESC] Bob 1,312,227,13 : Exit Else If A=72 Proc _MXCMPU Else If A=80 : Rem [P] Bob 1,63,227,13 : Exit End If End If Exit If XTA=True and XTB=True,2 If XAB=1 Amal Freeze 2 Amal On 1 If XCA=1 Exit If Joy(1)=16 Else If XCA=2 Proc _MXCMPU Exit End If Else If XAB=2 Amal Freeze 1 Amal On 2 If XCB=1 Exit If Joy(1)=16 Else If XCB=2 Proc _MXCMPU Exit End If End If Until Mouse Key Every Off Proc _MXCKIN X Mouse=X Hard(X Bob(1)) Y Mouse=Y Hard(Y Bob(1)) Until Param Every Off Priority Reverse Off Proc _MXSAMP[6] Proc _MXINFO["GAME OVER!"] Amal On XAB=False Proc _MXNEXT Proc _MXWAIT Proc _MXFDOT If XGM<2 Proc _MXFNRS Else Proc _MXSCOR End If XPA=False XPB=False End Proc Procedure _MXFNRS 'Final result Unpack 17 To 0 Screen Hide A$="THE FINAL MOVIX RESULT!" : Proc _MXTEXT[A$,160-(Len(A$)*5)/2,55] A$=String$("_",Len(A$)+2) : Proc _MXTEXT[A$,160-(Len(A$)*5)/2,62] If XPA<>XPB A$="THE LUCKY WINNER!" B$="THE UNLUCKY LOOSER!" Else A$="THE BORING RISKLESS PLAYER!" B$="THE SLEEPING RISKLESS PLAYER!" End If If XPAXPB and XPA=>A Dim A$(9) For A=0 To 9 A$(A)=Peek$(Start(19)+A*20,20) Next C$=String$(Chr$(0),20) Loke Varptr(C$),XPA Poke$ Varptr(C$)+4,XA$ A$(9)=C$ Sort A$(0) For A=0 To 9 Poke$ Start(19)+(9-A)*20,A$(A) Next XSC=True A$="CONGRATULATION FOR YOUR GREAT HIGHSCORE!" Else If XPAA A$="YOUR SCORE OF"+Str$(XPA)+" POINTS IS GOOD...BUT YOU LOST!" Else If XPA>XPB and XPA78 and X<240 and Y>27 and Y<37 Proc _MXUPIN 'Down in Else If X>78 and X<240 and Y>196 and Y<206 Proc _MXDWIN 'Left in Else If X>70 and X<80 and Y>35 and Y<198 Proc _MXLFIN 'Right in Else If X>238 and X<248 and Y>35 and Y<197 Proc _MXRGIN 'Pause Else If X>6 and X<64 and Y>212 and Y<228 Proc _MXPAUS 'Abort Else If X>255 and X<313 and Y>212 and Y<228 A$="ABORT" Proc _MXFTXT[A$,284-(Len(A$)*5)/2,218] A=True End If End Proc[A] Procedure _MXCMPU 'Computer`s move AB=XAB Gosub L_COMP ZZ=Z : AA=A0 : XX=X : YY=Y Add AB,1,1 To 2 If AB=1 and XMA>0 and XTA<>True or AB=2 and XMB>0 and XTB<>True Gosub L_COMP If A0+1A1 Z0=0 : YA=0 Else If A1>A0 A0=A1 : Z0=1 : X0=X1 : YA=9 Else If A1=A2 Z0=Rnd(1) : YA=Z0*9 If Z0=1 : X0=X1 : A0=A1 : End If End If 'Best of Left/Right If A2>A3 A1=A2 : Z1=2 : XB=0 Else If A3>A2 A1=A3 : Z1=3 : Y0=Y1 : XB=9 Else If A2=A3 Z1=2+Rnd(1) If Z1=3 : Y0=Y1 : A1=A3 : XB=9 Else A1=A2 : XB=0 : End If End If 'Best of all If A0>A1 Z=Z0 : X=X0 : Y=YA Else If A1>A0 A0=A1 : Z=Z1 : X=XB : Y=Y0 Else If A0=A1 If Rnd(1) Z=Z0 : X=X0 : Y=YA Else A0=A1 : Z=Z1 : X=XB : Y=Y0 End If End If End If Return 'UpIn LA: A0=False For X=0 To 9 If MX(X,0)=0 Y=True : B=False : C=False Repeat Inc Y : A=MX(X,Y) If A=AB : Inc B Else If A=0 and B=0 : Inc C Else : Exit End If Until Y=9 If Y=9 and XGM=1 B=0 : C=0 End If If B and B+C=>XNB If B>A0 : A0=B : X0=X Else If B=A0 and Rnd(1) : X0=X End If End If End If Next 'DownIn A1=False For X=0 To 9 If MX(X,9)=0 Y=10 : B=False : C=False Repeat Dec Y : A=MX(X,Y) If A=AB : Inc B Else If A=0 and B=0 : Inc C Else : Exit End If Until Y=0 If Y=0 and XGM=1 B=0 : C=0 End If If B and B+C=>XNB If B>A1 : A1=B : X1=X Else If B=A1 and Rnd(1) : X1=X End If End If End If Next 'LeftIn A2=False For Y=0 To 9 If MX(0,Y)=0 X=True : B=False : C=False Repeat Inc X A=MX(X,Y) If A=AB : Inc B Else If A=0 and B=0 : Inc C Else : Exit End If Until X=9 If X=9 and XGM=1 B=0 : C=0 End If If B and B+C=>XNB If B>A2 : A2=B : Y0=Y Else If B=A2 and Rnd(1) : Y0=Y End If End If End If Next 'RightIn A3=False For Y=0 To 9 If MX(9,Y)=0 X=10 : B=False : C=False Repeat Dec X A=MX(X,Y) If A=AB : Inc B Else If A=0 and B=0 : Inc C Else : Exit End If Until X=0 If X=0 and XGM=1 B=0 : C=0 End If If B and B+C=>XNB If B>A3 : A3=B : Y1=Y Else If B=A3 and Rnd(1) : Y1=Y End If End If End If Next Return 'Move anywhere LZ: Do X=Rnd(9) Y=Rnd(1)*9 Exit If MX(X,Y) mod 4=False X=Rnd(1)*9 Y=Rnd(9) Exit If MX(X,Y) mod 4=False Loop If X=0 and Y=0 : Z=Rnd(1)*2 : Rem Up(0)/Left(2) Else If X=0 and Y=9 : Z=1+Rnd(1) : Rem Down(1)/Left(2) Else If X=9 and Y=0 : Z=Rnd(1)*3 : Rem Up(0)/Right(3) Else If X=9 and Y=9 : Z=1+Rnd(1)*2 : Rem Down(1)/Right(3) Else If X mod 9 and Y=0 : Z=0 : Rem Up(0) Else If X mod 9 and Y=9 : Z=1 : Rem Down(1) Else If X=0 and Y mod 9 : Z=2 : Rem Left(2) Else If X=9 and Y mod 9 : Z=3 : Rem Rigth(3) End If Return End Proc Procedure _MXUPIN B=(X Bob(1)-80)/16 If MX(B,0) mod 4 Then Proc _MXCRZY : Pop Proc If XAB=1 Then A=15 : Dec XMA Else A=43 : Dec XMB For I=A To A+6 A$=A$+"("+Str$(I)-" "+",1)" Next A$="A1,"+A$+"("+Str$(XAB)+",1)" If MX(B,0)=False For C=1 To 9 If MX(B,C) If MX(B,C)=4 Inc C XFN=True End If Exit End If Next Dec C A$=A$+"P;P;P;P;P;P;"+"M0,"+Str$(C*16)+","+Str$(XAS*C) If XGM and C=9 and XFN=False D=22+(XAB-1)*28 A$=A$+";A1," For I=D+6 To D Step -1 A$=A$+"("+Str$(I)-" "+",1)" Next A$=A$+"(3,1)" End If Else XFN=True End If Bob 2,80+B*16,37,A Amal 4,A$ Amal On 4 While Chanan(4)+Chanmv(4) Wait Vbl Wend If XGM and C=9 and XFN=False Paste Bob X Bob(2),Y Bob(2),3 MX(B,9)=False Proc _MXSAMP[2] Proc _MXCRZY Else Paste Bob X Bob(2),Y Bob(2),XAB MX(B,C)=XAB If XFN : A=5 Else A=1 : End If Proc _MXSAMP[A] End If Bob Off 2 Proc _MXHFUN[B,C] Proc _MXMOUT Proc _MXTEST Proc _MXNEXT End Proc Procedure _MXDWIN B=(X Bob(1)-80)/16 If MX(B,9) mod 4 Then Proc _MXCRZY : Pop Proc If XAB=1 Then A=22 : Dec XMA Else A=50 : Dec XMB For A=A To A+6 A$=A$+"("+Str$(A)-" "+",1)" Next A$="A1,"+A$+"("+Str$(XAB)+",1)" If MX(B,9)=False For C=1 To 9 If MX(B,9-C) If MX(B,9-C)=4 Inc C XFN=True End If Exit End If Next Dec C A$=A$+"P;P;P;P;P;P;"+"M0,"+Str$(-C*16)+","+Str$(XAS*C) If XGM and C=9 and XFN=False D=15+(XAB-1)*28 A$=A$+";A1," For I=D+6 To D Step -1 A$=A$+"("+Str$(I)-" "+",1)" Next A$=A$+"(3,1)" End If Else XFN=True End If Bob 2,80+B*16,37+9*16,A Amal 4,A$ Amal On 4 While Chanan(4)+Chanmv(4) Wait Vbl Wend If XGM and C=9 and XFN=False Paste Bob X Bob(2),Y Bob(2),3 MX(B,0)=False Proc _MXSAMP[2] Proc _MXCRZY Else Paste Bob X Bob(2),Y Bob(2),XAB MX(B,9-C)=XAB If XFN : A=5 Else A=1 : End If Proc _MXSAMP[A] End If Bob Off 2 Proc _MXHFUN[B,9-C] Proc _MXMOUT Proc _MXTEST Proc _MXNEXT End Proc Procedure _MXLFIN B=(Y Bob(1)-37)/16 If MX(0,B) mod 4 Then Proc _MXCRZY : Pop Proc If XAB=1 Then A=29 : Dec XMA Else : A=57 : Dec XMB For A=A To A+6 A$=A$+"("+Str$(A)-" "+",1)" Next A$="A1,"+A$+"("+Str$(XAB)+",1)" If MX(0,B)=False For C=1 To 9 If MX(C,B) If MX(C,B)=4 Inc C XFN=True End If Exit End If Next Dec C A$=A$+"P;P;P;P;P;P;"+"M"+Str$(C*16)+",0"+","+Str$(XAS*C) If XGM and C=9 and XFN=False D=36+(XAB-1)*28 A$=A$+";A1," For I=D+6 To D Step -1 A$=A$+"("+Str$(I)-" "+",1)" Next A$=A$+"(3,1)" End If Else XFN=True End If Bob 2,80,37+B*16,A Amal 4,A$ Amal On 4 While Chanan(4)+Chanmv(4) Wait Vbl Wend If XGM and C=9 and XFN=False Paste Bob X Bob(2),Y Bob(2),3 MX(9,B)=False Proc _MXSAMP[2] Proc _MXCRZY Else Paste Bob X Bob(2),Y Bob(2),XAB MX(C,B)=XAB If XFN : A=5 Else A=1 : End If Proc _MXSAMP[A] End If Bob Off 2 Proc _MXHFUN[C,B] Proc _MXMOUT Proc _MXTEST Proc _MXNEXT End Proc Procedure _MXRGIN B=(Y Bob(1)-37)/16 If MX(9,B) mod 4 Then Proc _MXCRZY : Pop Proc If XAB=1 Then A=36 : Dec XMA Else A=64 : Dec XMB For A=A To A+6 A$=A$+"("+Str$(A)-" "+",1)" Next A$="A1,"+A$+"("+Str$(XAB)+",1)" If MX(9,B)=False For C=1 To 9 If MX(9-C,B) If MX(9-C,B)=4 Inc C XFN=True End If Exit End If Next Dec C A$=A$+"P;P;P;P;P;P;"+"M"+Str$(-C*16)+",0"+","+Str$(XAS*C) If XGM and C=9 and XFN=False D=29+(XAB-1)*28 A$=A$+";A1," For I=D+6 To D Step -1 A$=A$+"("+Str$(I)-" "+",1)" Next A$=A$+"(3,1)" End If Else XFN=True End If Bob 2,224,37+B*16,A Amal 4,A$ Amal On 4 While Chanan(4)+Chanmv(4) Wait Vbl Wend If XGM and C=9 and XFN=False Paste Bob X Bob(2),Y Bob(2),3 MX(0,B)=False Proc _MXSAMP[2] Proc _MXCRZY Else Paste Bob X Bob(2),Y Bob(2),XAB MX(9-C,B)=XAB If XFN : A=5 Else A=1 : End If Proc _MXSAMP[A] End If Bob Off 2 Proc _MXHFUN[9-C,B] Proc _MXMOUT Proc _MXTEST Proc _MXNEXT End Proc Procedure _MXCRZY A$="_"+Chr$(65+Rnd(25)) Restore A$ Read A$ Proc _MXINFO[A$] Wait 5 _A: Data "ARE YOU CRAZY" _B: Data "ARE YOU SLEEPING" _C: Data "SWITCH ON YOUR BRAIN" _D: Data "SOME CRAZY SOME HIT WITH A PAN" _E: Data "DONT MAKE FOOL YOURSELF" _F: Data "THINK YOU BETTER PLAY MIKADO" _G: Data "GO AND WATCH PRIVATE TV" _H: Data "HAVE A LOOK OUT FOR LECITHIN" _I: Data "ARE YOU PLAY THE FIRST TIME" _J: Data "ARE YOU A BUNDY" _K: Data "ARE YOU A CIVIL SERVANT" _L: Data "TIME TO THINK ABOUT YOUR MIND" _M: Data "ITS MOVIX NOT A SHOOT EM UP" _N: Data "PLEASE DONT SQUINT" _O: Data "THINK YOU HAVE A LOT OF FUN" _P: Data "TAKE FINGERS OUT OF YOUR NOSE" _Q: Data "ARE YOU A HEGOAT" _R: Data "PLEASE GO TO BED" _S: Data "GO & TAKE A DEEP FRESH BREATH" _T: Data "HEY WHERE ARE YOUR GLASSES" _U: Data "OH NO HOW BORING" _V: Data "PLEASE STOP THAT NONSENSE" _W: Data "I TRY TO SUE FOR DAMAGES" _X: Data "DONT SUCK ONES THUMB" _Y: Data "HELLO PLEASE WAKE UP" _Z: Data "GO AND PLAY WITH MICKY MOUSE" End Proc Procedure _MXNEXT Autoback 1 A$=Left$(XA$,10) B$=Left$(XB$,10) If XAB=0 Proc _MXTEXT[A$,35-(Len(A$)*5)/2,60] Proc _MXTEXT[B$,284-(Len(B$)*5)/2,60] Else If XAB=1 If XTB<>True and XMB>False XAB=2 Proc _MXTEXT[A$,35-(Len(A$)*5)/2,60] Proc _MXFTXT[B$,284-(Len(B$)*5)/2,60] End If Else If XAB=2 If XTA<>True and XMA>False XAB=1 Proc _MXFTXT[A$,35-(Len(A$)*5)/2,60] Proc _MXTEXT[B$,284-(Len(B$)*5)/2,60] End If End If Autoback 2 End Proc Procedure _MXTIME If XAB=1 and XTA>True Dec XTA Else If XAB=2 and XTB>True Dec XTB End If Proc _MXTOUT Every On End Proc Procedure _MXTEST 'Test for winning line(s) Dec XNB 'Vertical test For X=0 To 9 For Y=0 To 9-XNB B=MX(X,Y) If B=XAB or B=True C=True For D=Y To 9 B=MX(X,D) If B=XAB or B=True Inc C Else Exit End If Next If C=>XNB For D=Y To Y+C Z=True MX(X,D)=True Next Y=D End If End If Next Next 'Horizontal test For Y=0 To 9 For X=0 To 9-XNB B=MX(X,Y) If B=XAB or B=True C=True For D=X To 9 B=MX(D,Y) If B=XAB or B=True Inc C Else Exit End If Next If C=>XNB For D=X To X+C Z=True MX(D,Y)=True Next X=D End If End If Next Next Inc XNB 'If XNB stones in a line ? If Z Proc _MXSAMP[4] For X=0 To 9 For Y=0 To 9 If MX(X,Y)=True Paste Bob 80+X*16,37+Y*16,12 End If Next Next Wait 30 For X=0 To 9 For Y=0 To 9 If MX(X,Y)=True Add P,XNB MX(X,Y)=False Paste Bob 80+X*16,37+Y*16,3 End If Next Next 'A great move? A=P/XNB If A>XNB Proc _MXSUPR[A-XNB] A=Param Else A=False End If 'Add points If XAB=1 Add XPA,P+P*10+A If XTA>False Add XPA,XTA End If Else If XAB=2 Add XPB,P+P*10+A If XTB>False Add XPB,XTB End If End If Proc _MXPOUT End If End Proc Procedure _MXGGFX If Length(1) and Length(2) Then Pop Proc Unpack 16 To 1 Screen Hide 1 Screen 1 If Prg StateTrue A$=Str$(XTA)-" " : A$=String$("0",3-Len(A$))+A$ Else If XTA=True Proc _MXSAMP[7] Proc _MXNEXT A$="TIMEOUT!" : Proc _MXTEXT[A$,35-(Len(A$)*5)/2,180] Pop Proc Else If XTATrue A$=Str$(XTB)-" " : A$=String$("0",3-Len(A$))+A$ Else If XTB=True Proc _MXSAMP[7] Proc _MXNEXT A$="TIMEOUT!" : Proc _MXTEXT[A$,284-(Len(A$)*5)/2,180] Pop Proc Else If XTBFalse A$=Str$(XMA)-" " : A$=String$("0",3-Len(A$))+A$ Else A$="MOVESOUT!" Proc _MXSAMP[7] End If Proc _MXTEXT[A$,35-(Len(A$)*5)/2,100] Else If XMB>False A$=Str$(XMB)-" " : A$=String$("0",3-Len(A$))+A$ Else A$="MOVESOUT!" Proc _MXSAMP[7] End If Proc _MXTEXT[A$,284-(Len(A$)*5)/2,100] End If End Proc Procedure _MXFDIN For A=0 To 16 Colour A,0 Next Wait Vbl Screen Show Fade 2 To -1 For A=0 To 32 Colour Back Colour(0) View Wait Vbl Next Wait 5 Flash 15,"(000,1)(880,1)(DD0,1)(FF2,1)(FFC,1)(FFF,1)(AAF,1)(66A,1)(004,1)" End Proc Procedure _MXFDOT Flash Off Fade 2 For A=0 To 32 Colour Back Colour(0) View Wait Vbl Next Wait 5 End Proc Procedure _MXWAIT Clear Key Repeat Wait Vbl Until Mouse Key+Asc(Inkey$)+Fire(0)+Fire(1) End Proc Procedure _MXSAMP[A] '1 Plock '2 OhOh '3 Yeeha '4 Gotline '5 Ballhit '6 Gameover '7 Allout If XSD>1 Then Sam Play 3,A End Proc Procedure _MXSUPR[A] 'Bonuspoints If A=1 A$="FINE MOVE" Else If A=2 A$="WELL DONE" Else If A=3 A$="FANTASTIC" Else If A>3 A$="PROFESSIONAL" End If A=(A+XNB)*25 A$=A$+": BONUS"+Str$(A)+" PTS" Proc _MXFIFO[A$] Proc _MXSAMP[3] Wait 50 Proc _MXINFO[A$] End Proc[A] Procedure _MXALET[A$] 'Alert occurred Autoback 1 A=Length(2)+1 Get Icon A,76,94 To 243,124 Make Icon Mask A Paste Icon 76,94,A-1 A$=Right$(A$,28) Proc _MXFTXT[A$,160-(Len(A$)*5)/2,106] Autoback 2 Proc _MXWAIT Paste Icon 76,94,A Del Icon A End Proc Procedure _MXINPT[A$] 'Enter text X=76 : Y=94 Autoback 1 B=Length(2)+1 Get Icon B,X,Y To X+167,Y+30 Make Icon Mask B Paste Icon X,Y,B-1 Do Proc _MXTEXT[Right$(A$,26)+"@ ",X+15,Y+12] Clear Key Repeat A=Asc(Inkey$) Wait Vbl Until A If A=8 and Len(A$)>0 A$=Left$(A$,Len(A$)-1) Else If A=13 Exit Else If A>31 B$=Chr$(A) B$=Upper$(B$) If Instr(XT$,B$)=False B$=" " End If A$=A$+B$ End If Loop Autoback 2 Paste Icon X,Y,B Del Icon B End Proc[A$] Procedure _MXINFO[A$] Autoback 1 Cls 6,84,217 To 235,224 Proc _MXTEXT[A$,160-(Len(A$)*5)/2,218] Autoback 2 End Proc Procedure _MXFIFO[A$] Autoback 1 Cls 6,84,217 To 235,224 Proc _MXFTXT[A$,160-(Len(A$)*5)/2,218] Autoback 2 End Proc Procedure _MXHFUN[X,Y] If XFN=False Then Pop Proc XFN=False Randomize Timer A=Rnd(12) If A=0 : Rem Swap stone _MXINFO["OOOPS SWAP STONE"] If XAB=1 MX(X,Y)=2 Paste Bob 80+X*16,37+Y*16,2 Else MX(X,Y)=1 Paste Bob 80+X*16,37+Y*16,1 End If Proc _MXTEST : Add XAB,1,1 To 2 Proc _MXTEST : Add XAB,1,1 To 2 Else If A=1 : Rem Swap all stones _MXINFO["EVERYTHING GOES SWAPPED"] For A=0 To 9 For B=0 To 9 C=MX(A,B) If C and C<3 Add C,1,1 To 2 MX(A,B)=C Paste Bob 80+A*16,37+B*16,C End If Next Next Proc _MXTEST : Add XAB,1,1 To 2 Proc _MXTEST : Add XAB,1,1 To 2 Else If A=2 : Rem Erase stone _MXINFO["BYE BYE"] MX(X,Y)=0 Paste Bob 80+X*16,37+Y*16,3 Else If A=3 : Rem Erase all stones _MXINFO["TO MUCH STONES"] C=XAB For A=0 To 9 For B=0 To 9 If MX(A,B)=C MX(A,B)=0 Paste Bob 80+A*16,37+B*16,3 End If Next Next Else If A=4 : Rem Stone to wall _MXINFO["I NEED TO BRICK"] MX(X,Y)=3 Paste Bob 80+X*16,37+Y*16,4 Else If A=5 : Rem All stones to wall _MXINFO["I NEED REAL TO BRICK PUH"] C=XAB For A=0 To 9 For B=0 To 9 If MX(A,B)=C MX(A,B)=3 Paste Bob 80+A*16,37+B*16,4 End If Next Next Else If A=6 : Rem Sub 5 moves _MXINFO["LOOK AT YOUR DWINDLE MOVES"] If XAB=1 XMA=Max(0,XMA-5) Else XMB=Max(0,XMB-5) End If Else If A=7 : Rem Add 5 moves _MXINFO["YOU HAVE WORKED FOR IT"] If XAB=1 Add XMA,5 Else Add XMB,5 End If Else If A=8 : Rem Sub 5 sec _MXINFO["WHATS UP WITH TIME"] If XAB=1 and XTA>True XTA=Max(0,XTA-5) Else If XAB=2 and XTB>True XTB=Max(0,XTB-5) End If _MXTOUT Else If A=9 : Rem Add 5 sec _MXINFO["NOW MORE TIME TO THINK"] If XAB=1 and XTA>True Add XTA,5 Else If XAB=2 and XTB>True Add XTB,5 End If _MXTOUT Else If A=10 : Rem Shake all _MXINFO["I AM A REAL FINE SHAKER"] For I=0 To 49 A=Rnd(9) : B=Rnd(9) X=Rnd(9) : Y=Rnd(9) If MX(A,B)<>MX(X,Y) Swap MX(A,B),MX(X,Y) C=MX(A,B) If C=0 : C=3 Else If C=3 : C=4 Else If C=4 : C=5 End If Paste Bob 80+A*16,37+B*16,C C=MX(X,Y) If C=0 : C=3 Else If C=3 : C=4 Else If C=4 : C=5 End If Paste Bob 80+X*16,37+Y*16,C End If Next Proc _MXTEST : Add XAB,1,1 To 2 Proc _MXTEST : Add XAB,1,1 To 2 Else If A=11 : Rem Get all stones Proc _MXINFO["YOU GOT EM ALL"] For A=0 To 9 For B=0 To 9 C=MX(A,B) If C>0 and C<3 MX(A,B)=XAB Paste Bob 80+A*16,37+B*16,XAB End If Next Next Proc _MXTEST Else If A=12 : Rem All stones to ball _MXINFO["TIME FOR EVENTFUL PLAY"] C=XAB For A=0 To 9 For B=0 To 9 If MX(A,B)=C MX(A,B)=4 Paste Bob 80+A*16,37+B*16,5 End If Next Next End If End Proc Procedure _MXTEXT[A$,X,Y] A=Len(A$) For B=1 To A B$=Mid$(A$,B,1) C=Instr(XT$,B$) If C Paste Icon X,Y,C End If Add X,5 Next End Proc Procedure _MXFTXT[A$,X,Y] A=Len(A$) For B=1 To A B$=Mid$(A$,B,1) C=Instr(XT$,B$) If C Paste Icon X,Y,56+C End If Add X,5 Next End Proc Procedure _MXITRO 'Intro If Exist("Movix.Score") Trap Open In 1,"Movix.Score" If Errtrap=False Reserve As Work 19,Lof(1) Trap Sload 1 To Start(19),Length(19) End If Close End If Music 1 Unpack 15 To 0 Screen Hide : If Prg State