' -*- MINDCHAOS -*- ' Mindchaos ©1993 by Testaware ' programmed by Volker Stepprath ' ' Close Workbench Request Off 'Break Off ' Dim XGF(9,9),XKF(9,9),XHIGH$(9),XHIGH(9) Global XGF(),XKF(),XHIGH$(),XHIGH() Global XLENKUNG,XLEVEL,XLEVEL2,XFIN,XTM,XTS,XHELP,XPOINTS,XMUSIC,XSFX Global XANIM$,XCODE$,XDEMO,XHIGH,XHARP ' '-*- Install Gfx -*- _INSTALLGFX Hide _INTRO ' '-*- Install animation -*- For A=1 To 34 XANIM$=XANIM$+"("+Str$(A)-" "+",1)" Next A XANIM$="A 0,"+XANIM$+";" ' XSFX=1 : XMUSIC=1 : XLEVEL=1 ' Do If XFIN=False If XPOINTS>XHIGH(9) _EINTRAGEN End If _MENU Hide _STEUERUNG Else _GETPOINTS Fade 3 : Wait 70 If XLEVEL<200 Inc XLEVEL _STEUERUNG Else _ALLDONE End If End If Loop ' Procedure _MENU Show _START: Unpack 14 To 1 Screen Hide For I=0 To 7 Colour I,$0 Next I ' If XMUSIC=0 : Screen Copy 0,112,53,125,66 To 1,154,105 : End If If XSFX=0 : Screen Copy 0,112,53,125,66 To 1,262,105 : End If Add XLENKUNG,1,0 To 1 : X=14 : Y=105 : Gosub _A Inc XLEVEL : X=67 : Y=69 : Gosub _A N$="" If XLEVEL2<100 Then N$="0" If XLEVEL2<10 Then N$="00" _TEXT["PLAYABLE LEVELS "+N$+Str$(XLEVEL2)-" "+" OF 200",30,215] X=0 : Y=0 ' Screen Show 1 Fade 3 To 0 : Wait 70 ' XDEMO=0 : XHELP=9 : XPOINTS=0 ' Do Repeat MK=Mouse Key TK$=Upper$(Inkey$) If TK$<>"" If TK$="-" : X=67 : Y=69 : End If If TK$="+" : X=117 : Y=69 : End If If TK$="H" : X=201 : Y=69 : End If If TK$="Y" : X=14 : Y=105 : End If If TK$="M" : X=154 : Y=105 : End If If TK$="X" : X=262 : Y=105 : End If If TK$="D" : X=14 : Y=141 : End If If TK$="S" : X=191 : Y=141 : End If If TK$="R" : X=14 : Y=177 : End If If TK$="A" : X=134 : Y=177 : End If If TK$="E" : X=252 : Y=177 : End If Clear Key Exit End If Until MK If MK<>0 Then X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) Gosub _A X=0 : Y=0 Loop ' _A: '-*- - -*- If Y>68 and Y<83 If X>66 and X<81 Screen Copy 0,177,53,190,66 To 1,67,69 Gosub _B Wait 15 Repeat Add XLEVEL,-1,1 To 200 Gosub _B Wait 2 N=Mouse Key Until N=0 Screen Copy 0,164,53,177,66 To 1,67,69 End If '-*- + -*- If X>116 and X<131 Screen Copy 0,151,53,164,66 To 1,117,69 Wait 15 Repeat Add XLEVEL,1,1 To 200 Gosub _B Wait 2 N=Mouse Key Until N=0 Screen Copy 0,138,53,151,66 To 1,117,69 End If '-*- Highscore -*- If X>200 and X<214 Screen Copy 0,125,53,138,66 To 1,201,69 Wait 15 _HIGHSCORE Goto _START End If End If ' If Y>104 and Y<119 '-*- Joystick | Keyboard -*- If X>13 and X<29 Screen Copy 0,125,53,138,66 To 1,14,105 Add XLENKUNG,1,0 To 1 If XLENKUNG=0 : _TEXT["JOYSTICK",31,107] : End If If XLENKUNG=1 : _TEXT["KEYBOARD",31,107] : End If Wait 15 Screen Copy 0,112,53,125,66 To 1,14,105 End If '-*- Music -*- If X>153 and X<169 Add XMUSIC,1,0 To 1 If XMUSIC=1 : Screen Copy 0,125,53,138,66 To 1,154,105 : Music 1 : End If If XMUSIC=0 : Screen Copy 0,112,53,125,66 To 1,154,105 : Music Off : End If Wait 15 End If '-*- Sfx -*- If X>261 and X<277 Add XSFX,1,0 To 1 If XSFX=1 : Screen Copy 0,125,53,138,66 To 1,262,105 : End If If XSFX=0 : Screen Copy 0,112,53,125,66 To 1,262,105 : End If Wait 15 End If End If ' If Y>140 and Y<155 '-*- Demonstartion -*- If X>13 and X<29 Screen Copy 0,125,53,138,66 To 1,14,141 XDEMO=1 XHELP=0 Wait 15 Fade 3 : Wait 50 Pop Proc End If '-*-Start game -*- If X>190 and X<205 Screen Copy 0,125,53,138,66 To 1,191,141 Wait 15 Fade 3 : Wait 50 XLEVEL=Min(XLEVEL2,XLEVEL) Pop Proc End If End If ' If Y>176 and Y<192 '-*- Rules -*- If X>13 and X<29 Screen Copy 0,125,53,138,66 To 1,14,177 Wait 15 _RULES Goto _START End If '-*- About -*- If X>133 and X<148 Screen Copy 0,125,53,138,66 To 1,133,177 Wait 15 _ABOUT Goto _START End If '-*- Exit -*- If X>251 and X<276 Screen Copy 0,125,53,138,66 To 1,252,177 If XHIGH On Error Goto _END Open Out 1,"mindchaos.high" For I=0 To 9 Print #1,XHIGH$(I) Print #1,XHIGH(I) Next I Print #1,XLEVEL2 Close 1 Wait 50 End If _END: If XMUSIC For I=63 To 0 Step -1 Mvolume I : Wait 3 Next I Music Off End If Wait 15 Request On Erase 1 Erase 2 Fade 3 : Wait 100 Screen Close 0 Screen Close 1 Wait 15 End End If End If Return _B: N$="" If XLEVEL<100 Then N$="0" If XLEVEL<10 Then N$="00" _TEXT[N$+Str$(XLEVEL)-" ",84,71] Return End Proc Procedure _STEUERUNG _INSTALLLEVEL XFIN=False Clear Key ' If XDEMO Then _DEMO : Pop Proc ' Every 50 Proc _TIME Every On ' Do J=0 : A=0 : B=0 : A2=0 : B2=0 ' If XLENKUNG=0 While J=0 Gosub _A J=Joy(1) Wend End If If XLENKUNG=1 Gosub _A While TASTE=0 Gosub _A Wend If TASTE=79 : J=4 : End If If TASTE=78 : J=8 : End If If TASTE=76 : J=1 : End If If TASTE=77 : J=2 : End If If TASTE=64 : J=16 : End If TASTE=0 End If ' If(J=4 or J=5 or J=6) and CX>0 : Dec CX : A=-17 : A2=-11 : End If If(J=8 or J=9 or J=10) and CX<9 : Inc CX : A=17 : A2=11 : End If If(J=1 or J=5 or J=9) and CY>0 : Dec CY : B=-17 : B2=-10 : End If If(J=2 or J=6 or J=10) and CY<9 : Inc CY : B=17 : B2=10 : End If ' If J<16 If A<>0 or B<>0 A$="M"+Str$(A)+","+Str$(B)+",4" B$="M"+Str$(A2)+","+Str$(B2)+",4" Amal 2,A$ Amal 3,B$ Amal On 2 Amal On 3 While Chanmv(2) : Wend End If Else _CHECK[CX,CY] While Joy(1)>15 or Mouse Key<>0 or Asc(Inkey$)<>0 : Wend End If ' If XFIN : Every Off : Amal Off : Pop Proc : End If ' Loop ' _A: If XTM=0 and XTS=0 Every Off Fade 3 : Wait 50 Amal Off : Bob Off Cls 0 : Wait Vbl Screen Copy 0,0,138,141,172 To Logic,90,80 Screen Copy 0,0,138,141,172 To Physic,90,80 Fade 3 To 0 : Wait 70 Clear Key While(Asc(Inkey$)+Mouse Key+Joy(1))=0 : Wend Fade 3 : Wait 50 Pop Proc End If TASTE$=Inkey$ TASTE=Scancode ' If TASTE Clear Key '-*- Exit -*- If TASTE=69 Every Off Fade 3 : Wait 50 Amal Off Pop Proc End If ' '-*- Restart -*- If TASTE=95 and XHELP>0 Every Off Fade 3 : Wait 70 Amal Off Dec XHELP _INSTALLLEVELGFX CX=0 : CY=0 Every 50 Proc _TIME Every On End If ' '-*- Skip level -*- If TASTE=93 Every Off Fade 3 : Wait 70 Amal Off XFIN=True Pop Proc End If End If Return ' End Proc Procedure _DEMO N=Len(XCODE$) Clear Key For I=1 To N TASTE$=Inkey$ TASTE=Scancode If TASTE=69 Fade 3 : Wait 70 Amal Off Pop Proc End If X=Asc(Mid$(XCODE$,I,1))-65 Inc I Y=Asc(Mid$(XCODE$,I,1))-65 ' If X>X2 Then A=17 : A2=11 : A3=X-X2 If XY2 Then B=17 : B2=10 : B3=Y-Y2 If Y9 Then Pop Proc Inc XGF(CX,CY) _UP[CX,CY] If XSFX Then Sam Play 8,1,9000 If CX>0 If XGF(CX-1,CY)<10 Inc XGF(CX-1,CY) _UP[CX-1,CY] End If End If If CX<9 If XGF(CX+1,CY)<10 Inc XGF(CX+1,CY) _UP[CX+1,CY] End If End If If CY>0 If XGF(CX,CY-1)<10 Inc XGF(CX,CY-1) _UP[CX,CY-1] End If End If If CY<9 If XGF(CX,CY+1)<10 Inc XGF(CX,CY+1) _UP[CX,CY+1] End If End If ' _TEST ' If XHARP and XSFX Then Sam Play 1,2,19000 : XHARP=False End Proc Procedure _UP[CX,CY] A=XGF(CX,CY) Get Icon 0,1,A*16,37 To A*16+16,53 Paste Icon 140+CX*17,9+CY*17,1 If A>9 Then XHARP=True End Proc Procedure _TEST For I=0 To 9 For I2=0 To 9 A=XKF(I2,I) B=XGF(I2,I) If A=0 Then A=10 If A=B Then Inc C Else Pop Proc Next I2 Next I XFIN=True End Proc Procedure _INSTALLLEVEL For A=0 To 9 For B=0 To 9 XKF(A,B)=0 Next B Next A ' XCODE$="" ' Randomize Timer For I=1 To XLEVEL A=Rnd(9) B=Rnd(9) If XKF(A,B)<10 XCODE$=XCODE$+Chr$(65+A)+Chr$(65+B) Inc XKF(A,B) If A>0 If XKF(A-1,B)<10 : Inc XKF(A-1,B) : End If End If If A<9 If XKF(A+1,B)<10 : Inc XKF(A+1,B) : End If End If If B>0 If XKF(A,B-1)<10 : Inc XKF(A,B-1) : End If End If If B<9 If XKF(A,B+1)<10 : Inc XKF(A,B+1) : End If End If Else Dec I Inc I2 End If If I2>999 Then I=XLEVEL Next I ' _INSTALLLEVELGFX ' If XLEVEL>XLEVEL2 and XDEMO=0 Then XLEVEL2=XLEVEL : XHIGH=True End Proc Procedure _INSTALLLEVELGFX Unpack 15 To 1 Screen Hide For A=0 To 15 Colour A,$0 Next A ' For A=0 To 9 For B=0 To 9 I=XKF(A,B) If I>0 and I<10 Screen Copy 0,I*10,53,I*10+9,62 To 1,9+A*11,10+B*10 End If If I Screen Copy 0,0,37,16,53 To 1,140+A*17,9+B*17 XGF(A,B)=0 Else XGF(A,B)=10 End If Next B Next A ' If XLEVEL<100 Then N$="0" If XLEVEL<10 Then N$="00" _TEXT[N$+Str$(XLEVEL)-" ",13,133] ' If XDEMO=0 If XLEVEL<51 : XTM=5 : End If If XLEVEL>50 and XLEVEL<101 : XTM=10 : End If If XLEVEL>100 and XLEVEL<151 : XTM=15 : End If If XLEVEL>150 : XTM=20 : End If XTS=0 If XTM<10 : TM$="0" : End If If XTS<10 : TS$="0" : End If N$=TM$+Str$(XTM)+":"+TS$+Str$(XTS) _TEXT[N$-" ",68,133] Else _TEXT["DEMO",73,133] End If ' _POINTS _TEXT[Str$(XHELP)-" ",103,167] ' Double Buffer Bob 1,139,8,1 Bob 35,8,9,35 Amal 1,XANIM$ Amal On 1 ' Screen Show Fade 3 To 0 : Wait 45 End Proc Procedure _GETPOINTS For A=0 To 9 For B=0 To 9 Add XPOINTS,XKF(B,A) Next B Next A _POINTS End Proc Procedure _POINTS If XPOINTS<100000 Then N$="0" If XPOINTS<10000 Then N$="00" If XPOINTS<1000 Then N$="000" If XPOINTS<100 Then N$="0000" If XPOINTS<10 Then N$="00000" _TEXT[N$+Str$(XPOINTS)-" ",12,167] End Proc Procedure _TIME If XTS=0 If XTM>0 Dec XTM End If End If Add XTS,-1,0 To 59 If XTM<10 : TM$="0" : End If If XTS<10 : TS$="0" : End If N$=TM$+Str$(XTM)+":"+TS$+Str$(XTS) _TEXT[N$-" ",68,133] Every On End Proc Procedure _ALLDONE Unpack 14 To 1 Screen Hide For I=1 To 7 Colour I,$0 Next I _SCREEN _TEXT["WELL DONE",117,64] For I=1 To 4 Read N$,X _TEXT[N$,X,75+I*12] Next I _TEXT["(HOPE YOUR MIND IS NOW SORTED)",11,155] Screen Show 1 Fade 3 To 0 : Wait 70 Clear Key While(Asc(Inkey$)+Mouse Key+Joy(1))=0 : Wend XFIN=False Data "YOU`VE SOLVED THE LAST LEVEL",21 Data "OF MINDCHAOS!",99 Data "THANX FOR YOUR HEAVY WORK AND",16 Data "FOR PLAYING THIS GAME!",51 End Proc Procedure _TEXT[N$,X,Y] A$="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ÄÖü:.-+=*!?#©®()/_` " A=Len(N$) For I=1 To A B$=Mid$(N$,I,1) N=Instr(A$,B$) If N>35 Add N,-35 N2=75 Else N2=66 End If Screen Copy 0,(N-1)*9,N2,N*9,N2+9 To Logic,X+(I-1)*10,Y Screen Copy 0,(N-1)*9,N2,N*9,N2+9 To Physic,X+(I-1)*10,Y Next I End Proc Procedure _HIGHSCORE _SCREEN For I=0 To 9 If I<9 Then N$="0" Else N$="" _TEXT[N$+Str$(I+1)-" "+".",15,50+I*13] _TEXT[XHIGH$(I),53,50+I*13] N$="" If XHIGH(I)<100000 Then N$="0" If XHIGH(I)<10000 Then N$="00" If XHIGH(I)<1000 Then N$="000" If XHIGH(I)<100 Then N$="0000" If XHIGH(I)<10 Then N$="00000" _TEXT[N$+Str$(XHIGH(I))-" ",246,50+I*13] Next I Screen Show 1 Fade 3 To 0 : Wait 70 Clear Key While(Asc(Inkey$)+Mouse Key+Joy(1))=0 : Wend Fade 3 : Wait 50 End Proc Procedure _RULES _SCREEN For I=0 To 10 Read N$ _TEXT[N$,15,49+I*12] Next I Screen Show 1 Fade 3 To 0 : Wait 70 Clear Key While(Asc(Inkey$)+Mouse Key+Joy(1))=0 : Wend Fade 3 : Wait 50 Data "THE STRATEGIC MIND BASED ON A" Data "SIMPLE GAMERULE. EVERY STONE" Data "WHICH WILL BE SELECTED RISE" Data "UP ITS SCORE AND EVERY STONE" Data "WHICH BORDERED ON IT WILL" Data "RISE UP TOO. IF THE SCORE IS" Data "GREATER THAN 9 THE STONE IS" Data "TAKEN FROM BOARD. A LEVEL" Data "IS COMPLETED IF THE ORDER OF" Data "STONES THE SAME LIKE IN THE" Data "SMALL BOARD ON THE LEFT." End Proc Procedure _ABOUT _SCREEN For I=1 To 8 Read N$,X,Y _TEXT[N$,X,Y] Next I Screen Show 1 Fade 3 To 0 : Wait 70 Clear Key While(Asc(Inkey$)+Mouse Key+Joy(1))=0 : Wend Fade 3 : Wait 50 Data "THIS GAME IS PUBLIC DOMAIN",30,55 Data "AUTHOR",130,80 Data "VOLKER STEPPRATH",80,95 Data "SPANDAUERSTRASSE 4",70,107 Data "(W) 4019 MONHEIM",80,119 Data "GERMANY",125,131 Data "AMOS ©1991 BY EUROPRESS SOFT",20,163 Data "MINDCHAOS ©1993 BY TESTAWARE",20,175 End Proc Procedure _EINTRAGEN _SCREEN _TEXT["CONGRATULATION",92,60] _TEXT["YOU ENTERED THE TOP 10,",52,80] _TEXT["PLEASE TYPE IN YOUR NAME",42,93] _TEXT[String$(".",18),72,130] Screen Show 1 Fade 3 To 0 : Wait 70 Clear Key Repeat N=Asc(Upper$(Inkey$)) If N>31 and N<>44 and Len(A$)<18 A$=A$+Chr$(N) _TEXT[A$+String$(".",18-Len(A$)),72,130] End If If N=8 and Len(A$)>0 A$=Left$(A$,Len(A$)-1) _TEXT[A$+String$(".",18-Len(A$)),72,130] End If Until N=13 If A$="" Then A$="C.APPLEGATE" ' XHIGH(9)=XPOINTS XHIGH$(9)=A$ ' For I=0 To 8 For I2=I+1 To 9 If XHIGH(I2)>XHIGH(I) Swap XHIGH(I),XHIGH(I2) Swap XHIGH$(I),XHIGH$(I2) End If Next I2 Next I ' Fade 3 : Wait 48 ' _HIGHSCORE XHIGH=True End Proc Procedure _SCREEN Fade 3 : Wait 50 Unpack 14 To 1 Screen Hide For I=0 To 16 Colour I,$0 Next I Ink 0 : Bar 0,57 To 320,256 Def Scroll 1,0,37 To 319,200,0,9 For I=0 To 15 Scroll 1 Next I End Proc Procedure _INTRO Unpack 16 To 1 Screen Hide Cls 0 For I=1 To 8 Colour I,$0 Next I Screen Show 1 Screen Copy 0,0,84,288,118 To 1,15,95 Wait 50 Fade 2,,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF : Wait 40 Fade 2,,$600,$800,$A20,$A40,$C60,$C80,$EC0 Led Off Mvolume 0 Music 1 For I=0 To 63 : Mvolume I : Wait 3 : Next I Wait 10 Fade 2,,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF : Wait 40 Fade 2 : Wait 50 : Cls 0 Screen Copy 0,0,120,114,137 To 1,103,98 Fade 2 To 0 : Wait 140 Fade 2 : Wait 40 : Cls 0 Screen Copy 0,115,120,244,138 To 1,96,98 Fade 2 To 0 : Wait 180 Fade 2 : Wait 32 End Proc Procedure _INSTALLGFX Unpack 16 To 0 Screen Hide ' For A=0 To 1 For B=0 To 16 Inc C Get Bob C,B*18,A*18 To B*18+18,A*18+18 Next B Next A ' Get Bob 35,100,53 To 112,64 ' Channel 1 To Bob 1 Channel 2 To Bob 1 Channel 3 To Bob 35 ' If Exist("mindchaos.high") Open In 1,"mindchaos.high" For I=0 To 9 Input #1,XHIGH$(I) Input #1,XHIGH(I) Next I Input #1,XLEVEL2 Close 1 Else For I=0 To 9 XHIGH$(I)=String$(".",18) Next I XLEVEL2=1 End If End Proc