1 POKE53281,0:POKE53280,0:POKE788,52 2 DV=PEEK(186):I=RND(-TI) 5 SYS57812"RESOURCE $1C80",DV,0:POKE780,0:POKE781,128:POKE782,28:SYS65493 6 SYS57812"MORRIS ML$C000",DV,0:POKE780,0:POKE781,0:POKE782,192:SYS65493 9 REM* 10 REM************************* 20 REM* NINE MEN'S MORRIS V1.0 30 REM* BY: ROBERT MUNDSCHAU 40 REM* LAST MODIFIED 09/15/95 50 REM************************* 60 REM* 99 REM** MAIN CALLER 100 GOSUB 1000:REM* INITIALIZE 110 GOSUB 2000:REM* DRAW TITLE 120 GOSUB 2500:REM* MAIN MENU 130 REM* HANDLE MAIN MENU SELECTION 140 IF M=3 THEN SYS49162:GOSUB9200:GOTO110:REM*DISPLAY GAME RULES 150 IF M=4 THEN GOTO 900:REM*LOADSTAR 199 REM* M=2 START GAME 200 GOSUB 3000:REM* PRE-GAME SET-UP 209 REM* MAIN GAME LOOP 210 LT=CT:CT=(CT+1)AND1:GOSUB9300 220 IFNP(CT)=0THEN8700:REM*PATCHED CODE 299 REM* YES, PLACE A PIECE. 300 W1=2:GOSUB9400:POKE1539,176+NP(CT):REM* DSPLY # LEFT 310 ON (PT(CT)+1) GOSUB 4000,5000 320 SP%(SN%(CX,CY))=CT:NP(CT)=NP(CT)-1 330 GOSUB8100:GOSUB9600:REM*APPEAR 340 GOTO500 399 REM* MOVE A PIECE. (PATCH RETURN) 400 W1=8:GOSUB9400:REM* DSPLY YOUR MOVE 405 ON (PT(CT)+1) GOSUB 4200,6000 410 IFK<>4THEN430:REM* MOVE WAS MADE 415 GOSUB8050:GOSUB9300:W1=11:GOSUB9400:GOSUB9200:GOSUB9300:GOTO400:REM* CANCEL 420 GOTO8700:REM* ENTRAPMENT SCAN 429 REM*ANIMATE MOVE 430 GOSUB9350:SP%(SN%(CX,CY))=2:GOSUB8900:SP%(SN%(MA(K,0),MA(K,1)))=CT 435 POKE2040,SB+4:GOSUB9650 440 GOSUB8200:FORT=4TO1STEP-1:POKE2040,SB+T:POKES+1,T*3:FORW1=1TO50:NEXT:NEXT 450 W1=(MA(K,0)-CX)*2:W2=(MA(K,1)-CY)*2:REM* DOT VELOCITY 460 FORT=12TO1STEP-1:POKES+1,T:POKEV,PEEK(V)+W1:POKEV+1,PEEK(V+1)+W2:NEXT 470 FORT=2TO4:POKE2040,SB+T:FORW1=1TO75:NEXT:NEXT 480 CX=MA(K,0):CY=MA(K,1):GOSUB9650:POKE2040,SB+5 499 REM* CHECK IF MILL FORMED 500 W1=SN%(CX,CY):M%=0 510 IF(SP%(AS%(W1,0))=CT)AND(SP%(AS%(W1,1))=CT)THENM%=M%+1 520 IF(SP%(AS%(W1,2))=CT)AND(SP%(AS%(W1,3))=CT)THENM%=M%+1 550 IF M%=0 THEN680:REM* NO MILL 599 REM* PLAYER FORMED A MILL 600 GOSUB8300:GOSUB9300:W1=5:GOSUB9400:REM* DSPLY YOU HAVE FORMED A MILL. 610 ON(PT(CT)+1)GOSUB 4500,7000 620 SP%(SN%(CX,CY))=2:REM* REMOVE PIECE 630 GOSUB8150:GOSUB9950:REM* ANIMATE 640 M%=M%-1:IFM%>0THEN600 649 REM* CHECK FOR WINNER 650 GOSUB9700:REM* PIECE COUNT 660 IF(W1+NP(0))<3THENQF=1:GOTO700:REM* MOON WIN 670 IF(W2+NP(1))<3THENQF=1:GOTO800:REM* SUN WIN 679 REM* HAS Q BEEN PRESSED 680 IF QF>0 THEN ON (LT+1) GOTO 800,700 690 GOTO210:REM* NEXT PLAYER 699 REM* MOONS WIN 700 GOSUB9000:POKE53280,0:GOSUB8500:PRINTC$(1)PP$(1):W1$=LEFT$(L$,12) 710 PRINT"[153]"W1$" THE MOON HAS":PRINTW1$"ECLIPSED THE SUN" 720 PRINTW1$"IN THEIR CONTEST":PRINTW1$" FOR THE SKY!" 730 GOTO825 799 REM* SUNS WIN 800 GOSUB9000:POKE53280,6:GOSUB8500:PRINTC$(0)PP$(0):W1$=LEFT$(L$,11) 810 POKE53281,6:PRINT"[153]"W1$"HIP! HIP! HOORAY!":PRINTW1$" THE SUN" 820 PRINTW1$" HAS WON THE":PRINTW1$" DAY!" 825 PRINT"PRESS FIRE OR RETURN" 830 GOSUB9050:GOSUB9200:GOSUB8100:GOTO110 899 REM* RETURN TO LOADSTAR 900 W1$=LEFT$(L$,19):PRINT"[147]"W1$C$(0)PP$(0) 910 PRINT"[155]DO YOU WISH TO RETURN TO LOADSTAR?" 920 PRINTW1$"[157][157]([153]Y[155]/[150]N[155])?":PRINTW1$C$(1)PP$(1) 930 GETM$:IFM$="N"THEN110 940 IFM$<>"Y"THEN930 950 PRINT"[147][154]THANK-YOU FOR PLAYING 9 MEN'S MORRIS." 960 PRINT"[153]PLEASE CHECK THAT THE DISK IS READY AND" 965 PRINT"THEN PRESS RETURN." 970 GOSUB 9200:SYS49432:REM* IRQS OFF 980 POKE53272,PEEK(53272)AND240OR4:POKE44,8:POKE43,1:POKE2048,0 990 GOTO40000 999 REM* INITIALIZE 1000 PRINT"[147]";:POKE53272,PEEK(53272)AND240OR14 1010 L$="":D$="" 1020 FORT=0TO10STEP2:PRINT""LEFT$(D$,T);:FORK=0TO(22-T):POKE646,T*2+7 1030 W1$=LEFT$(L$,T)+LEFT$("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",40-T*2) 1040 FORK=0TO(22-T*2):PRINTW1$:NEXT:NEXT 1050 PRINT""LEFT$(L$,11)LEFT$(D$,11)"[159] SETTING UP... " 1059 REM* 1060 SYS 49206:REM* ENGAGE IRQS 1065 REM* 1070 DIM GB%(7,7),MF%(7,7),SN%(7,7),AS%(24,3),SP%(24),XY%(24,1),PF%(18,1) 1075 DIM PS%(35),CF%(35),CL%(24),TS%(24),MR%(13,17) 1080 DIM JV(31),JX(4),JY(4),PT(1),MA(4,1),NP(1) 1090 DIM MS$(13),MC$(1),C$(3),CS$(1),PP$(3),PT$(1) 1100 MC$(0)="[158]":MC$(1)="[159]":REM* TEXT WINDOW COLOR AND RVS. 1110 C$(0)="[158]":C$(1)="[159]" 1120 PP$(0)="[192][193][157][157][160][161]":PP$(1)="[200][201][157][157][168][169]":PP$(2)=" [157][157] ":PP$(3)="" 1130 PT$(0)="[155] PERSON ":PT$(1)="[155]COMPUTER" 1140 CS$(0)="[153]NOVICE":CS$(1)="[129] BEST " 1150 MM$(0)="PLAYER SELECTION":MM$(1)="COMPUTER SKILL" 1160 MM$(2)="START GAME":MM$(3)="GAME RULES":MM$(4)="RETURN TO LOADSTAR" 1170 FORT=0TO31:JV(T)=4:NEXT:JV(30)=0:JV(29)=2:JV(27)=3:JV(23)=1 1180 JX(1)=1:JX(3)=-1:JY(0)=-1:JY(2)=1:QF=1 1199 REM* SPRITE SET-UP 1200 SB=150:V=53248 1210 POKEV+21,1:POKEV+16,0:POKEV+28,0:POKEV+23,30:POKEV+27,0:POKEV+29,30 1299 REM* SOUND SET-UP 1300 S=54272:FORT=0TO24:POKES+T,0:NEXT 1310 POKES+24,15 1399 REM* READ DATA 1400 FORCY=0TO7:FORCX=0TO7:READW1:GB%(CX,CY)=W1:NEXT:NEXT 1410 FORCY=0TO6:FORCX=0TO6:READW1:MF%(CX,CY)=W1:NEXT:NEXT 1420 FORCY=0TO6:FORCX=0TO6:READW1:SN%(CX,CY)=W1:NEXT:NEXT 1430 FORCY=0TO6:FORCX=0TO6:W1=SN%(CX,CY):XY%(W1,0)=CX:XY%(W1,1)=CY:NEXT:NEXT 1439 REM* UNPACK STRINGS 1440 FORT=0TO13:READ W1$:W1=LEN(W1$):W2=1 1450 MS$(T)=MS$(T)+MID$(W1$,W2,12)+"[157][157][157][157][157][157][157][157][157][157][157][157]":W2=W2+12:IFW2" 2130 PRINTW2$"<"W1$W2$">" 2140 PRINTW1$C$(0)PP$(0)W1$W1$W1$W1$"[145]"C$(1)PP$(1) 2150 PRINT"USE [153]JOY2 OR [153]CRSR KEYS AND [153]RETURN" 2160 PRINTW1$"TO MAKE YOUR SELECTIONS."; 2170 RETURN 2499 REM* MAIN MENU 2500 M=0:GOSUB2900:GOSUB9050 2510 GOSUB2900:GOSUB9100 2520 IF(CR=1)AND(M>1)THEN:GOSUB8250:RETURN 2530 ON J GOTO 2560,2540,2560,2510 2540 M=M+JY(J):IF(M<0)OR(M>4)THENM=M-JY(J) 2550 GOTO2510 2560 ON (M+1) GOTO 2700,2600,2510,2510,2510 2600 CS=(CS+1)AND1:GOSUB8250:GOTO2510 2700 IFJ=3THENPT(0)=(PT(0)+1)AND1:GOTO2720 2710 PT(1)=(PT(1)+1)AND1:IFPT(1)+PT(0)=2THENPT(0)=0:GOTO2730 2720 IF PT(1)+PT(0)=2THENPT(1)=0 2730 GOSUB8250:GOTO2510 2899 REM* UPDATE MENU 2900 PRINT""PT$(PT(0))""PT$(PT(1)) 2910 PRINT""CS$(CS)""CS$(CS)"[145][145][145][145]" 2920 FORT=0TO4:W2$="[156]":IFM=TTHENW2$=C$(P):P=(P+1)AND1 2930 PRINT W2$:PRINT""MM$(T):NEXT:RETURN 2999 REM** PRE-GAME SETUP 3000 GOSUB9000:POKE53280,2 3010 SYS 49157:REM* DRAW GAMEBOARD 3020 SP%(0)=3:FORT=1TO24:SP%(T)=2:NEXT 3030 NP(0)=9:NP(1)=9:CT=INT(RND(1)*2):POKE2040,SB:POKEV+21,31 3039 REM* SPRITES FOR THIN RED STRIPS 3040 FORT=0TO3:POKEV+40+T,2:POKE2041+T,SB+T+6:NEXT 3050 POKEV+2,79:POKEV+3,105:POKEV+4,135:POKEV+5,105:POKEV+6,135:POKEV+7,161 3060 POKEV+8,79:POKEV+9,161 3080 PRINT""LEFT$(D$,24)"[155] TO QUIT PRESS (Q) DURING YOUR MOVE "; 3090 QF=0:GOSUB9050:RETURN 3999 REM*** HUMAN-WHERE PLACE A PIECE? 4000 W1=3:GOSUB9400:REM* DSPLY SELECT 4010 GOSUB9500:REM* PICK SPACE ROUTINE 4020 IFSP%(SN%(CX,CY))=2THENRETURN 4030 GOSUB9300:W1=4:GOSUB9400:GOSUB8000:REM* SPACE NOT EMPTY! 4040 GOTO4000 4199 REM* HUMAN SELECT MOVE 4200 W1=3:GOSUB9400:REM* DSPLY SELECT 4210 GOSUB9500:REM* PICK SPACE ROUTINE 4220 IF SP%(SN%(CX,CY))=CT THEN4300 4230 GOSUB8000:GOSUB9300:W1=9:GOSUB9400:REM* DSPLY INVALID SELECT 4240 GOTO4200 4299 REM* MOVE WHERE? 4300 GOSUB8250:GOSUB9300:W1=10:GOSUB9400:W1=3:GOSUB9400:REM*DSPLY MOVE WHERE? 4310 GOSUB 8900:K=4:REM* MAKE MAP 4320 CX=MA(K,0):CY=MA(K,1):GOSUB9350 4330 GOSUB9100:IFCR=1THENCX=MA(4,0):CY=MA(4,1):RETURN 4340 IFK=4THENK=J:GOTO4360 4350 IF (J<>4) AND (K<>J) THEN K=4 4360 IFMA(K,0)=-1THENK=4 4370 GOTO4320 4499 REM* HUMAN PICK PIECE FOR CAPTURE 4500 GOSUB 9500 4510 IFSP%(SN%(CX,CY))<>LTTHEN GOSUB8000:GOTO 4500:REM* INVALID SELECTION 4520 GOSUB9800:REM* PIECE IN MILL? 4530 IFF1=0THENRETURN:REM* NO 4540 GOSUB9900:REM*YES, ARE OTHERS NOT? 4550 IFF2>0THENRETURN:REM* F2>0=NO. 4560 W1=7:GOSUB8050:GOSUB9300:W1=7:GOSUB 9400:REM* YES,PIECE PROTECTED IN MILL. 4570 GOTO4500:REM* SELECT AGAIN. 4999 REM* COMPUTER PLACE A PIECE 5000 M%=0:W1=12:GOSUB9400 5010 CX=3:CY=3:GOSUB9350 5019 REM* PASS 1 5020 FORT=1TO24 5030 IF SP%(T)<>2THEN CL%(T)=0:GOTO5060 5040 GOSUB5200:CL%(T)=PS%(W4) 5050 IF CL%(T)=7 THEN M%=M%+1 5060 NEXT 5099 REM* PASS 2 5100 HS=0 5110 FORT=1TO24:SC=0:CX=XY%(T,0):CY=XY%(T,1):GOSUB9350 5120 ON CL%(T) GOSUB 5500,5550,5600,5650,5700,5750,5800,5850,5900 5140 SC=PF%(SC,CS)+INT(RND(1)*10) 5150 IF SC>HS THEN HS=SC:BS=T 5160 NEXT 5170 SP=BS:CX=XY%(BS,0):CY=XY%(BS,1):GOSUB9350 5180 RETURN 5199 REM* DETERMINE SPACE TYPE 5200 W1=SP%(AS%(T,0)):W2=SP%(AS%(T,1)) 5210 GOSUB5300:W4=W3 5220 W1=SP%(AS%(T,2)):W2=SP%(AS%(T,3)) 5230 GOSUB5300:W4=W4+W3*6 5240 RETURN 5299 REM* CALC PLACEMENT SITUATION 5300 IF W1=2 THEN5400 5310 IF W1=CT THEN 5350 5320 IF W2=2 THEN W3=2:RETURN 5330 IF W2=CT THEN W3=4:RETURN 5340 W3=5:RETURN 5350 IF W2=2 THEN W3=1:RETURN 5360 IF W2=CT THEN W3=3:RETURN 5370 W3=4:RETURN 5400 IF W2=2 THEN W3=0:RETURN 5410 IF W2=CT THEN W3=1:RETURN 5420 W3=2:RETURN 5499 REM** DETERMINE SCORING BY CLASS 5500 SC=1:RETURN 5550 IFM%>1THENSC=4:RETURN 5560 GOSUB 5950 5570 IF(W1=0)AND(W2=0)THEN SC=13:RETURN 5575 IF(W1=0)AND(W2>0)THEN SC=12:RETURN 5580 IF(W1>0)AND(W2=0)THEN SC=11:RETURN 5585 SC=10:RETURN 5600 SC=18:RETURN 5650 SC=3:RETURN 5700 SC=2:RETURN 5750 SC=14:RETURN 5800 SC=5:RETURN 5850 W1=0:FORK=0TO3:IF SP%(AS%(T,K))=2THENW1=W1+1 5860 NEXT:IF W1=0THEN SC=17:RETURN 5875 IF W1=1 THEN SC=16:RETURN 5880 SC=15:RETURN 5900 GOSUB5950 5910 IF(W1=0)AND(W2=0)THEN SC=9:RETURN 5920 IF(W1=0)AND(W2>0)THEN SC=8:RETURN 5930 IF(W1>0)AND(W2=0)THEN SC=7:RETURN 5940 SC=6:RETURN 5949 REM* COUNT N3 AND N6'S 5950 W1=0:W2=0:FORK=0TO3 5960 IFCL%(AS%(T,K))=3THENW1=W1+1 5970 IFCL%(AS%(T,K))=6THENW2=W2+1 5980 NEXT:RETURN 5999 REM* COMP SELECT MOVE 6000 W1=12:GOSUB9400 6010 GOSUB 6800:F3=F3+7296:HS=0:BS=0:BD=4 6020 RF%=6-CS*3:FOR Z=1TO24:IFSP%(Z)<>CT THEN6190 6030 CX=XY%(Z,0):CY=XY%(Z,1):GOSUB9350:GOSUB8900:IF F1=0 THEN 6190 6040 GOSUB 6700:SS=PEEK(F3+W1+TS%(Z)*256) 6050 SP%(Z)=2:FORK=0TO3:IF MA(K,0)=-1 THEN 6180 6060 W4=SN%(MA(K,0),MA(K,1)):GOSUB6600 6065 SC=MR%(SS,PEEK(8832+W1+TS%(Z)*256))+INT(RND(1)*RF%) 6070 IF SC>HS THEN HS=SC:BS=Z:BD=K 6180 NEXT:SP%(Z)=CT 6190 NEXT 6200 IF BD<>4 THEN CX=XY%(BS,0):CY=XY%(BS,1) 6210 K=BD:RETURN 6599 REM* CALC MOVE FACTOR INDEX 6600 W1=0:FORI=0TO3 6610 W2=AS%(W4,I):W3=SP%(W2) 6620 IF W3=2 THEN 6670 6630 IF W3=CT THEN W3=0:GOTO6670 6650 W3=1:IF(SP%(AS%(W2,0))=LT)AND(SP%(AS%(W2,1))=LT)THEN W3=3:GOTO6670 6660 IF(SP%(AS%(W2,2))=LT)AND(SP%(AS%(W2,3))=LT)THEN W3=3 6670 W1=W1+W3*(4^I):NEXT:RETURN 6699 REM* CALC STAY FACTOR INDEX 6700 W1=0:FORK=0TO3 6710 W2=AS%(Z,K):W3=SP%(W2) 6720 IF W3=2 THEN 6770 6730 IF W3=CT THEN W3=0:GOTO6770 6750 W3=1:IF(SP%(AS%(W2,0))=LT)AND(SP%(AS%(W2,1))=LT)THEN W3=3:GOTO6770 6760 IF(SP%(AS%(W2,2))=LT)AND(SP%(AS%(W2,3))=LT)THEN W3=3 6770 W1=W1+W3*(4^K):NEXT:RETURN 6799 REM* CAN ENEMY FORM A MILL? 6800 F3=0:FORZ=1TO24 6810 IF SP%(Z)=LT THEN GOSUB 6900 6820 NEXT:RETURN 6899 REM* MILL SUB-SCAN ROUTINE 6900 CX=XY%(Z,0):CY=XY%(Z,1):GOSUB8900:IF F1=0 THENRETURN 6905 SP%(Z)=2 6910 FORJ=0TO3:IF MA(J,0)=-1THEN6970 6920 CX=MA(J,0):CY=MA(J,1):GOSUB9350 6930 W1=SN%(CX,CY) 6940 IF(SP%(AS%(W1,0))=LT)AND(SP%(AS%(W1,1))=LT)THEN F3 = 768 6950 IF(SP%(AS%(W1,2))=LT)AND(SP%(AS%(W1,3))=LT)THEN F3 = 768 6970 NEXT:SP%(Z)=LT:RETURN 6999 REM* COMP SELECT CAPTURE 7000 W1=12:GOSUB9400 7010 HS=0:BS=0 7020 FORT=1TO24 7030 IF SP%(T)<>LT THEN GOTO7080 7040 CX=XY%(T,0):CY=XY%(T,1):GOSUB9350 7050 GOSUB5200:SC=CF%(W4) 7060 W1=4-CS(CT):SC=CF%(W4)+INT(RND(1)*(W1*4)) 7070 IF SC>HS THEN HS=SC:BS=T 7080 NEXT 7090 CX=XY%(BS,0):CY=XY%(BS,1):GOSUB9350 7100 RETURN 7998 REM*** SFX 7999 REM* BUZZER 8000 POKES+1,9:POKES+5,0:POKES+6,240:POKES+4,33 8010 FORT=1TO300:NEXT:POKES+4,32:RETURN 8049 REM* DOUBLE BUZZ 8050 POKES+1,8:POKES+5,0:POKES+6,240 8060 FORK=1TO2:POKES+4,33:FORT=1TO125:NEXT:POKES+4,32:FORT=1TO25:NEXT:NEXT 8070 RETURN 8099 REM* APPEAR SOUND 8100 POKES+1,25:POKES+5,0:POKES+6,250:POKES+15,25:POKES+14,128 8110 POKES+4,21:POKES+4,20:RETURN 8149 REM* DISAPPEAR SOUND 8150 POKES+1,5:POKES+5,0:POKES+6,250:POKES+15,5:POKES+14,80 8160 POKES+4,21:POKES+4,20:RETURN 8199 REM* MOVE SOUND 8200 POKES+1,1:POKES+5,32:POKES+6,250 8210 POKES+4,17:POKES+4,16:RETURN 8249 REM* SELECT SOUND 8250 POKES+1,30:POKES+5,16:POKES+6,240 8260 POKES+4,17:FORT=1TO50:NEXT:POKES+4,16:RETURN 8299 REM* MILL SOUND 8300 POKES+8,40:POKES+12,0:POKES+13,250:POKES+1,20 8310 POKES+11,21:POKES+11,20:RETURN 8499 REM* DRAW WIN SCREEN BASE 8500 W1$="[160] [161][157][157][157][157][157][160] [165] [163][157][157][157][157][157][157][160] [165][167][164] [161][157][157][157][157][157][157][157][162] [167] [166] [163][157][157][157][157][157][162] [163]" 8510 W2$="[160] [161][157][157][157][162] [164] [161][157][157][157][157][157][157][160] [165][166][164] [161][157][157][157][157][157][157][157][162] [167] [166] [163][157][157][157][157][157][162] [163]" 8520 PRINT"[147]";:FORT=1TO50:POKE1024+INT(RND(1)*40)+INT(RND(1)*19)*40,28:NEXT 8530 PRINT"[152]"W1$:PRINT""LEFT$(L$,32)W2$"" 8540 PRINTLEFT$(L$,9)W2$"[145][145][145][145]"W1$ 8550 PRINT""W1$LEFT$(L$,26)"[145][145][145][145]"W2$"":PRINTLEFT$(L$,9)W2$"[145][145][145][145]"W1$ 8560 PRINT" " 8570 PRINT" [145][145][145]" 8580 PRINT"[168][168][168][168][150][169][170][145][157][157][171][172][168][168][168][168][149][173][174][173][174][173][168][168][168][168][150][169][170][145][157][157][171][172][168][168][168][168][149][173][174][173][174][173][168][168][168][168][150][169][170][145][157][157][171][172][168][168][168]" 8590 FORT=0TO4:POKE2040+T,SB:NEXT:PRINT""LEFT$(L$,19)LEFT$(D$,8);:RETURN 8699 REM* SCAN FOR ENTRAPMENT (PATCH) 8700 F2=0:Z=1 8710 IF SP%(Z)<>CT THEN8760 8720 CX=XY%(Z,0):CY=XY%(Z,1):W1=MF%(CX,CY):W2=MF%(CY,CX) 8730 FORJ=0TO3:W3=(CX+W1*JX(J))AND7:W4=(CY+W2*JY(J))AND7 8740 IFSP%(SN%(W3,W4))=2 THENF2=1 8750 NEXT:IF F2=1 THEN400:REM*END PATCH 8760 Z=Z+1:IF Z<25THEN8710 8770 GOSUB8050:W1=13:GOSUB9400:GOSUB9200:QF=1:ON(CT+1)GOTO 700,800:REM* TRAPPED 8899 REM* POTENTIAL MOVE ASSESSMENT 8900 MA(4,0)=CX:MA(4,1)=CY:F1=0 8910 FORT=0TO3:W1=(MF%(CX,CY)*JX(T)+CX)AND7:W2=(MF%(CY,CX)*JY(T)+CY)AND7 8920 IFSP%(SN%(W1,W2))<>2THENMA(T,0)=-1:GOTO8940 8930 MA(T,0)=W1:MA(T,1)=W2:F1=1 8940 NEXT:RETURN 8999 REM* BLANK SCREEN 9000 POKE53265,PEEK(53265)AND239:RETURN 9049 REM* UNBLANK SCREEN 9050 POKE53265,PEEK(53265)OR16:RETURN 9099 REM*** HUMAN INPUT 9100 J=PEEK(56320)AND31:IF(J<31)THENCR=SGN(JAND16):CR=(CR+1)AND1:J=JV(J):RETURN 9110 J=4:CR=0:GETM$ 9120 IFM$=CHR$(13)THENCR=1:RETURN 9130 IFM$="[145]"THENJ=0 9140 IFM$=""THENJ=1 9150 IFM$=""THENJ=2 9160 IFM$="[157]"THENJ=3 9180 IF(M$="Q")AND(QF=0)THENPRINT"GAME WILL QUIT AT END OF TURN.":QF=1:GOSUB8100 9190 RETURN 9199 REM* WAIT FOR FIRE/RETURN 9200 GOSUB9100:IFCR=1THEN9200 9210 GOSUB9100:IFCR=0THEN9210 9220 RETURN 9299 REM* CLEAR WINDOW 9300 PRINT""LEFT$(D$,8):FORT=0TO12:PRINTLEFT$(L$,26)MC$(CT)" ":NEXT 9310 PRINT""LEFT$(D$,8) 9320 W1=CT:GOSUB9400:RETURN 9349 REM* UPDATE CURSOR 9350 POKE2040,SB:POKEV,38+CX*24:POKEV+1,64+CY*24:POKE2040,SB+5:RETURN 9399 REM* DISPLAY MESSAGE 9400 PRINTLEFT$(L$,26)MC$(CT)MS$(W1):RETURN 9499 REM* HUMAN PICK A SPACE ON BOARD 9500 CX=3:CY=3:GOSUB9350:REM*SET CURSOR 9510 GOSUB9100:IFCR=1THENRETURN 9520 IFJ=4THEN9510:REM* NO MOVEMENT 9530 W1=(MF%(CX,CY)*JX(J)+CX)AND7:W2=(MF%(CY,CX)*JY(J)+CY)AND7 9540 IFGB%(W1,W2)=3THEN9510:REM* WALL! 9550 CX=W1:CY=W2:GOSUB9350 9560 FORT=1TO75:NEXT:GOTO9510 9599 REM* ANIMATE APPEARANCE 9600 FORT=0TO4:POKE2040,SB+T:FORK=1TO40:NEXT:NEXT 9610 GOSUB9650:REM* SPACE FILL 9620 POKE2040,SB+5:RETURN 9649 REM* DRAW PIECE ON SCREEN 9650 PRINT""LEFT$(L$,CX*3)LEFT$(D$,CY*3)C$(CT)PP$(SP%(SN%(CX,CY))):RETURN 9699 REM* ON BOARD PIECE COUNT 9700 W1=0:W2=0 9710 FORT=1TO24:IFSP%(T)=0THENW1=W1+1 9720 IFSP%(T)=1THENW2=W2+1 9730 NEXT:RETURN 9799 REM* CHECK FOR MILL DEFENSE LOCAL 9800 W1=SN%(CX,CY):W2=0:F1=0 9810 IF(SP%(AS%(W1,0))=LT)AND(SP%(AS%(W1,1))=LT)THENF1=1 9820 IF(SP%(AS%(W1,2))=LT)AND(SP%(AS%(W1,3))=LT)THENF1=1 9830 RETURN 9899 REM* CHECK FOR MILL DEFENSE GLOBAL 9900 W1=6:GOSUB9400:F2=1 9910 FORT=1TO24:IFSP%(T)<>LTTHEN9940 9920 F1=0:IF(SP%(AS%(T,0))=LT)AND(SP%(AS%(T,1))=LT)THENF1=1 9930 IF(SP%(AS%(T,2))=LT)AND(SP%(AS%(T,3))=LT)THENF1=1 9935 F2=F2*F1 9940 NEXT:RETURN 9949 REM* ANIMATE CAPTURE 9950 POKE2040,SB+4:GOSUB9650 9960 FORT=3TO0STEP-1:POKE2040,SB+T:FORK=0TO40:NEXT:NEXT 9970 POKE2040,SB+5:RETURN 9999 REM* GAME BOARD LAYOUT DATA-GB%(,) 10000 DATA 2,3,3,2,3,3,2,3 10010 DATA 3,2,3,2,3,2,3,3 10020 DATA 3,3,2,2,2,3,3,3 10030 DATA 2,2,2,3,2,2,2,3 10040 DATA 3,3,2,2,2,3,3,3 10050 DATA 3,2,3,2,3,2,3,3 10060 DATA 2,3,3,2,3,3,2,3 10070 DATA 3,3,3,3,3,3,3,3 10099 REM* XY MOVEMENT DISTANCES-MF%(,) 10100 DATA 3,0,0,3,0,0,3 10110 DATA 0,2,0,2,0,2,0 10120 DATA 0,0,1,1,1,0,0 10130 DATA 1,1,1,1,1,1,1 10140 DATA 0,0,1,1,1,0,0 10150 DATA 0,2,0,2,0,2,0 10160 DATA 3,0,0,3,0,0,3 10199 REM* SPACE CONVERTER TABLE-SN%() 10200 DATA 23,0,0,5,0,0,20 10210 DATA 0,19,0,1,0,16,0 10220 DATA 0,0,15,12,24,0,0 10230 DATA 11,4,8,0,6,2,9 10240 DATA 0,0,22,10,17,0,0 10250 DATA 0,14,0,3,0,21,0 10260 DATA 18,0,0,7,0,0,13 10599 REM* MESSAGE $ 10600 DATA " #$ SUN %& PLAYER:" 10610 DATA " ;< MOON => PLAYER:" 10620 DATA "YOU HAVE PIECES LEFT TO PLACE." 10630 DATA "USE JOY2 OR CRSR KEYS TOSELECT." 10640 DATA "YOU MUST CHOOSE AN EMPTY SPACE!" 10650 DATA"A MILL HAS BEEN FORMED.NOW SELECT AN OPPOSING PIECE FOR CAPTURE!" 10660 DATA "------------PLEASE WAIT.------------" 10670 DATA "YOU MAY NOT CAPTURE A PIECE IN A MILL, WHILE OTHERS ARE NOT." 10680 DATA "IT IS YOUR TURN TO MOVEA PIECE." 10690 DATA "YOU NEED TO SELECT A PIECE TO MOVE!" 10700 DATA "MOVE PIECE TO WHERE?" 10710 DATA"YOUR MOVE ISCANCELED! PRESS FIRE OR RETURN TO CONTINUE." 10720 DATA "????????????? THINKING ?????????????" 10730 DATA"YOU CAN NOT MOVE ANY OF YOUR PIECES! PRESS FIRE OR RETURN." 10999 REM* ADJ SPACE TABLE-AS%(,) 11000 DATA 5,12,19,16,16,21,6,9 11010 DATA 10,7,14,21,19,14,11,8 11020 DATA 23,20,1,12,24,17,2,9 11030 DATA 13,18,3,10,22,15,4,11 11040 DATA 20,13,2,6,17,22,3,7 11050 DATA 18,23,4,8,15,24,1,5 11060 DATA 9,20,7,18,3,21,4,19 11070 DATA 8,22,12,24,1,19,2,21 11080 DATA 6,24,10,22,7,13,11,23 11090 DATA 4,14,1,16,5,23,9,13 11100 DATA 2,16,3,14,10,17,8,15 11110 DATA 11,18,5,20,12,15,6,17 11199 REM* PLACEMENT FACTORS-PF%(,) 11200 DATA -100,-100,53,120 11210 DATA 49,105,46,95 11230 DATA 43,85,40,75 11250 DATA 37,65,34,60 11270 DATA 31,55,28,47 11290 DATA 25,40,22,35 11310 DATA 19,30,16,25 11330 DATA 13,20,10,15 11350 DATA 7,10,4,5 11370 DATA 1,1 11399 REM* PLACEMENT SITUATIONS-PS%() 11400 DATA 9,3,6,1,8,5 11410 DATA 3,4,2,1,2,5 11420 DATA 6,2,7,1,8,5 11430 DATA 1,1,1,1,1,1 11440 DATA 8,2,8,1,8,5 11450 DATA 5,5,5,1,5,5 11499 REM* CAPTURE FACTORS-CF%() 11500 DATA 85,100,135,115,95,15 11510 DATA 100,110,145,125,101,25 11520 DATA 135,145,155,150,140,10 11530 DATA 115,125,150,130,120,30 11540 DATA 95,105,140,120,90,20 11550 DATA 15,25,10,30,20,5 11599 REM* TYPE OF SPACE-TS%() 11600 DATA 2,2,2,2,1,1,1,1 11610 DATA 1,1,1,1,0,0,0,0 11620 DATA 0,0,0,0,0,0,0,0 11699 REM* MOVEMENT RANKS-MR%(,) 11700 DATA 1,2,3,4,5,6,7,8,9,10,11,12,13,14 11710 DATA 15,31,47,48,49,50,51,52,53,54,55,215,89,200 11720 DATA 16,32,56,68,82,83,84,85,86,87,88,216,98,201 11730 DATA 17,33,57,69,126,127,128,129,130,131,132,219,99,204 11740 DATA 18,34,58,70,112,113,114,115,116,117,118,220,100,205 11750 DATA 19,35,59,71,119,120,121,122,123,124,125,221,101,206 11760 DATA 20,36,60,72,140,141,142,143,144,145,146,222,102,207 11770 DATA 21,37,61,73,133,134,135,136,137,138,139,218,103,203 11780 DATA 22,38,62,74,157,158,159,160,161,154,162,223,104,208 11790 DATA 23,39,63,75,163,164,165,166,167,155,168,224,105,209 11800 DATA 24,40,64,76,147,148,149,150,151,152,153,217,102,202 11810 DATA 25,41,65,77,169,170,171,172,173,156,174,225,107,210 11820 DATA 26,42,66,78,175,176,178,179,180,181,182,226,108,211 11830 DATA 27,43,67,190,191,192,193,194,195,196,198,227,109,212 11840 DATA 28,44,199,229,230,231,232,233,234,235,236,237,227,238 11850 DATA 29,45,79,80,90,91,92,93,94,95,96,97,110,213 11860 DATA 30,46,81,89,183,184,185,186,187,188,189,228,111,214 11870 DATA 248,239,240,241,242,243,244,245,246,249,247,250,251,252 40000 FORI=0TO21:POKE828+I,8+I:NEXT:POKE788,49 40010 IFDV<8ORDV>29ORDV=8THEN40030 40020 A=PEEK(828):B=PEEK(828+DV-8):POKE828,B:POKE828+DV-8,A 40030 A$="HELLO CONNECT":FORJ=8TO29:I=PEEK(828+J-8):IFI=14THENNEXT 40040 CLOSE2:OPEN2,I,2:CLOSE2:IFSTTHEN40060 40050 CLOSE15:OPEN15,I,15,"R0:"+A$+"="+A$:INPUT#15,ER:CLOSE15:IFER=63THEN40070 40060 NEXT:PRINT"[147]":POKE53272,23:POKE186,8:END 40070 Q$=CHR$(34):POKE646,PEEK(53281):PRINT"[147]":POKE53272,23 40080 PRINT"[147]P[207]2048,0:P[207]44,8:P[207]43,1:P[207]56,160:P[207]55,0:CLR:L[207]"Q$A$Q$","I 40090 PRINT"RUN:":POKE631,13:POKE632,13:POKE198,2:END