home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0020 - 0029 / ibm0020-0029 / ibm0028.tar / ibm0028 / KINGS.ZIP / LEVEL3.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  12.1 KB  |  270 lines

  1. 0  '***********************************
  2. 1  '* PIB1474   (KING'S RULE)         *
  3. 2  '* (c) '85 Sunburst Communications *
  4. 3  '* Author: Tom O'Brien             *
  5. 4  '* Programmer: Raoul Watson        *
  6. 5  '***********************************
  7. 6  'OVERLAY SEGMENT 3
  8. 7  L$="3":L%=3:RES%=3
  9. 19  GOTO 29500
  10. 20  R=FNR(9)*10+9:S=FNR(9)*10+9:T=FNR(9)*10+9:RETURN
  11. 21  IF N<10 THEN I=((21-N)/2) ELSE I=((27-N)/2)
  12. 22  JN=FNR(I):R=N:S=R+JN:T=S+JN:IF RU=1 THEN RETURN
  13. 25  R=T:T=N:RETURN
  14. 30  N=FNR(27-JN):R=N:S=R+JN:T=S+JN:IF RU=1 THEN RETURN
  15. 35  R=T:T=N:RETURN
  16. 40  IF RIGHT$(STR$(X),1)="9" AND RIGHT$(STR$(Y),1)="9" AND RIGHT$(STR$(Z),1)="9" THEN AN=1:RETURN ELSE RETURN
  17. 50  IF RU=2 AND (Z+JN=Y AND Y+JN=X) THEN AN=1:RETURN
  18. 60  R=FNR(70):S=FNR(70):T=R+S:RETURN
  19. 80  IF X+Y=Z THEN AN=1:RETURN ELSE RETURN
  20. 100  R=FNR(15):S=FNR(15):T=R*S:RETURN
  21. 120  IF X*Y=Z THEN AN=1:RETURN ELSE RETURN
  22. 140  R=FNR(30)*5:S=FNR(30)*5:T=FNR(30)*5:RETURN
  23. 160  IF (X/5=INT(X/5) AND Y/5=INT(Y/5) AND Z/5=INT(Z/5)) THEN AN=1:RETURN ELSE RETURN
  24. 180  R=FNR(50)*3:S=FNR(50)*3:T=FNR(50)*3:RETURN
  25. 200  IF (X/3=INT(X/3) AND Y/3=INT(Y/3) AND Z/3=INT(Z/3)) THEN AN=1:RETURN ELSE RETURN
  26. 220  R=FNR(40)*10:S=FNR(40)*10:T=FNR(40)*10:RETURN
  27. 240  IF (X/10=INT(X/10) AND Y/10=INT(Y/10) AND Z/10=INT(Z/10)) THEN AN=1:RETURN ELSE RETURN
  28. 260  R=FNR(100):S=R+FNR(10):T=S+FNR(10):RETURN
  29. 280  IF Z>Y AND Y>X THEN AN=1:RETURN ELSE RETURN
  30. 300  R=FNR(100):S=FNR(100):IF R<S THEN T=S-R:R=S:S=R-T:RETURN
  31. 310  T=R-S:RETURN
  32. 320  IF X-Y=Z THEN AN=1:RETURN ELSE RETURN
  33. 340  R=FNR(100)*2+1:S=FNR(100)*2+1:T=FNR(100)*2+1:RETURN
  34. 360  IF (X/2<>INT(X/2) AND Y/2<>INT(Y/2) AND Z/2<>INT(Z/2)) THEN AN=1:RETURN ELSE RETURN
  35. 380  D1=FNR(9)+1
  36. 390  R=FNR(20)*D1:S=FNR(22)*D1:T=FNR(24)*D1:RETURN
  37. 400  IF (X/D1=INT(X/D1) AND Y/D1=INT(Y/D1) AND Z/D1=INT(Z/D1)) THEN AN=1:RETURN ELSE RETURN
  38. 420  N=FNR(26):I=INT((28-N)/2):IF N<10 THEN I=INT((21-N)/2)
  39. 421  JN=FNR(I):R=N:S=R+JN:T=S+JN:IF RU=11 THEN RETURN
  40. 425  R=T:T=N:RETURN
  41. 430  N=FNR(26-JN):R=N:S=R+JN:T=S+JN:IF RU=11 THEN RETURN
  42. 435  R=T:T=N:RETURN
  43. 440  IF RU=11 AND (X+JN=Y AND Y+JN=Z) THEN AN=1:RETURN
  44. 445  IF RU=12 AND (Z+JN=Y AND Y+JN=X) THEN AN=1:RETURN
  45. 450  AN=2:RETURN
  46. 500  C=FNR(9)
  47. 520  N=FNR(5):R=N:S=R*C:T=S*C:IF RU=13 THEN RETURN
  48. 525  R=T:T=N:RETURN
  49. 540  IF RU=13 AND (Z/C=Y AND Y/C=X) THEN AN=1:RETURN
  50. 545  IF RU=14 AND (X/C=Y AND Y/C=Z) THEN AN=1:RETURN
  51. 550  AN=2:RETURN
  52. 4000  LINE (24,64)-(305,168),0,BF:LOCATE 10,10:PRINT"THE RECAP PAD IS FULL.":LOCATE 13,5:PRINT"Any entry made after this will":LOCATE 15,5:PRINT"start a new pad. If you need the":LOCATE 17,5:PRINT"notes for later, recap one more":LOCATE 19,5
  53. 4010  PRINT"time and take notes.":GOSUB 10000:RETURN
  54. 4400  IF R+S+T>9999 THEN AF=8 ELSE AF=0
  55. 4401  YPOS=28:N$=STR$(R):XPOS=92+AF-LEN(N$)*8:GOSUB 4500:N$=STR$(S):XPOS=172+AF-LEN(N$)*8:GOSUB 4500:N$=STR$(T):XPOS=252+AF-LEN(N$)*8:GOSUB 4500
  56. 4402  RETURN
  57. 4500  IF VAL(N$)<0 THEN PUT (XPOS,YPOS),MIN,PSET:XPOS=XPOS+9
  58. 4510  N$=MID$(N$,2):FOR I=1 TO LEN(N$):SUB%=VAL(MID$(N$,I,1)):GOSUB 4600:XPOS=XPOS+9:NEXT I:RETURN
  59. 4600  ON SUB%+1 GOSUB 4610,4611,4612,4613,4614,4615,4616,4617,4618,4619:RETURN
  60. 4610  PUT (XPOS,YPOS),N0,PSET:RETURN
  61. 4611  PUT (XPOS,YPOS),N1,PSET:RETURN
  62. 4612  PUT (XPOS,YPOS),N2,PSET:RETURN
  63. 4613  PUT (XPOS,YPOS),N3,PSET:RETURN
  64. 4614  PUT (XPOS,YPOS),N4,PSET:RETURN
  65. 4615  PUT (XPOS,YPOS),N5,PSET:RETURN
  66. 4616  PUT (XPOS,YPOS),N6,PSET:RETURN
  67. 4617  PUT (XPOS,YPOS),N7,PSET:RETURN
  68. 4618  PUT (XPOS,YPOS),N8,PSET:RETURN
  69. 4619  PUT (XPOS,YPOS),N9,PSET:RETURN
  70. 5000  CLS:IF JR THEN SCREEN 1:OUT &H3DA,0:OUT &H3DA,0:RETURN ELSE OUT &H3D8,2:RETURN
  71. 5010  IF ENOUGHMEMORY=0 THEN LINE (0,0)-(47,33),0,BF
  72. 5020  IF JR THEN SCREEN 1:OUT &H3DA,0:OUT &H3DA,10:RETURN ELSE OUT &H3D8,10:RETURN
  73. 6000  IF MSF%=0 THEN RETURN ELSE SF%=NOT SF%
  74. 6010  ON SF%+2 GOSUB 6050,6030:RETURN
  75. 6030  YES$="":NO$="":FANFARE$="":RETURN
  76. 6050  YES$="mbt100o3l20cd":NO$="mbo1t32l14c":FANFARE$="mbt200l6o3efefcd#c#o2a#":RETURN
  77. 8000  AA%=-8:BB%=8:CC%=33:DD%=88:SUB%=2:DEF SEG=MSEG%:CALL MOFF%(AA%,BB%,CC%,DD%,SUB%)
  78. 8001  DEF SEG:RETURN
  79. 8010  B=IC-5:FOR I=1 TO 5:LOCATE 9+I+I,3:PRINT TAB(4+NOT(Z1(B+I)<0))Z1(B+I)TAB(14+NOT(Z2(B+I)<0))Z2(B+I)TAB(24+NOT(Z3(B+I)<0))Z3(B+I)TAB(34);:IF Z4(B+I)=1 THEN PRINT"Yes"; ELSE PRINT "No ";
  80. 8020  NEXT I:LOCATE 21,4:PRINT STRING$(34,32);:RETURN
  81. 10000  LOCATE 25,3:PRINT EL$;
  82. 10010  LOCATE 25,9:PRINT"Press ENTER to continue.";
  83. 10020  WHILE INKEY$<>"":WEND
  84. 10022  K$=INKEY$:IF K$="" THEN 10022
  85. 10023  IF K$=CHR$(1) THEN GOSUB 6000:GOTO 10022
  86. 10025  IF K$=CHR$(5) AND RU=0 THEN 29400
  87. 10026  IF K$=CHR$(5) AND EFL<>1 THEN RETURN 27999
  88. 10030  IF K$=" " OR K$=CHR$(13) THEN RETURN
  89. 10040  GOTO 10022
  90. 10100  GG=3:CLS:WC$=CHR$(22)+"______":LI=5:LINE (6,0)-(319,54),2,B:LINE (6,57)-(319,175),2,B
  91. 10105  GOSUB 29030:LOCATE 2,8:PRINT"These numbers fit the rule:":GOSUB 4400:RETURN
  92. 10110  LOCATE 9,4:PRINT"1st       2nd       3rd      Yes/No";:LINE (24,72)-(47,72),1:LINE (103,72)-(127,72),1:LINE (184,72)-(207,72),1:LINE (256,72)-(303,72),1:RETURN
  93. 10120  LOCATE 25,3:PRINT"Press <R> for recap, or <Q> for quiz.";:RETURN
  94. 10150  LINE (128,16)-(319,128),0,BF:RETURN
  95. 10160  LINE (24,80)-(296,168),0,BF:RETURN
  96. 10170  LINE (136,8)-(318,192),0,BF:RETURN
  97. 10190  '*** delay loops ***
  98. 10200  FOR I=1 TO 1200:NEXT I:RETURN
  99. 10205  FOR I=1 TO 1800:NEXT I:RETURN
  100. 10500  LOCATE 23,33:PRINT STR$(L);" -";STR$(RU);:GOSUB 10000:LOCATE 23,33:PRINT"       ";:GOSUB 10120:RETURN
  101. 13000  LC=0:CK$=WC$:WHILE INKEY$<>"":WEND
  102. 13010  SW=0:Z1=0:N$="":Y$=N$:K$=Y$
  103. 13020  LOCATE PO,XPO+Z1:PRINT LEFT$(CK$,TL)" ";
  104. 13030  Y$=INKEY$:IF Y$="" THEN 13030
  105. 13040  J=ASC(Y$):IF J>90 THEN J=J-32:Y$=CHR$(J)
  106. 13041  IF FL=1 THEN 13080
  107. 13050  IF Y$="Q" AND Z1=0 AND D=2 THEN K$="Q":SW=1:Y$="":N$="0":GG=3:RETURN
  108. 13060  IF Y$="R" AND Z1=0 AND D=2 THEN K$="R":SW=1:Y$="":N$="0":RETURN
  109. 13065  IF Y$="-" AND D=2 AND SW<>1 THEN 13120 ELSE IF Y$="-" AND D=1 THEN 13000
  110. 13070  IF N$="-" AND Y$="0" THEN TL=TL+1:GOTO 13000
  111. 13080  IF J=13 AND N$<>"" AND N$<>"-" THEN SW=0:LOCATE PO,XPO+Z1:PRINT STRING$(TL,32);:TL=7:RETURN
  112. 13090  IF J=5 AND D=2 THEN RETURN 27999
  113. 13100  IF J=8 OR (RIGHT$(Y$,1)="S" AND LEN(Y$)>1) THEN 13160
  114. 13105  IF J=1 THEN GOSUB 6000
  115. 13106  IF J=20 AND QU$="of" AND L>2 THEN GOSUB 10500:GOTO 13030
  116. 13110  IF SW=1 THEN 13030
  117. 13115  IF J<LL OR J>UL THEN 13020
  118. 13120  IF Y$="-" AND Z1>0 THEN 13020
  119. 13130  LOCATE PO,XPO+Z1:PRINT Y$;
  120. 13140  Z1=Z1+1:N$=N$+Y$:TL=TL-1:IF LEN(N$)>LI THEN SW=1:WHILE INKEY$<>"":WEND:GOTO 13020
  121. 13150  GOTO 13020
  122. 13160  IF SW=1 AND LEN(N$)<6 THEN Y$=""
  123. 13161  SW=0:K$="":IF Z1<1 THEN 13020 ELSE PRINT CHR$(29)" ";CHR$(29);
  124. 13170  Z1=Z1-1:TL=TL+1:N$=LEFT$(N$,Z1):GOTO 13020
  125. 13499  '*** bot. for guard ***
  126. 13500  LOCATE 20+G2,22+GG:PRINT"Press ENTER";
  127. 13501  LOCATE 21+G2,22+GG:PRINT"to continue.";:LINE (163+GG*8,147+G2*8)-(267+GG*8,172+G2*8),2,B:WHILE INKEY$<>"":WEND
  128. 13510  GOTO 10020
  129. 14000  PRINT"_";CHR$(29);:WHILE INKEY$<>"":WEND:N$="":AN$="":SW%=0
  130. 14010  N$=INKEY$:IF N$="" THEN 14010
  131. 14020  J%=ASC(N$):IF J%>90 THEN J%=J%-32:N$=CHR$(J%)
  132. 14030  IF J%<>13 AND J%<>5 AND J%<>8 AND SW%=1 THEN N$="":GOTO 14010
  133. 14040  IF N$="Y" THEN PRINT"Yes_";:SW%=1:LE%=1:AN$="Y"
  134. 14050  IF N$="N" THEN PRINT"No_ ";:SW%=1:LE%=2:AN$="N"
  135. 14060  IF J%=13 AND SW%=1 THEN PRINT STRING$(LE%,29)" ";:RETURN
  136. 14070  IF J%=5 THEN RETURN 27999
  137. 14080  IF J%=8 AND SW%=1 THEN SW%=0:PRINT STRING$(4,29);"    ";STRING$(4,29);:GOTO 14000
  138. 14090  N$="":GOTO 14010
  139. 15000  GG=0:GOSUB 6000:GOSUB 29600:GET (0,0)-(31,29),PRIZE:PUT (0,0),PRIZE
  140. 15010  LOCATE 3,18:PRINT"Halt! I guard the door":LOCATE 4,18:PRINT"to the Game Parlour. To":LOCATE 5,18:PRINT"pass through you must":LOCATE 6,18:PRINT"solve three number":LOCATE 7,18:PRINT"riddles...":LOCATE 9,18
  141. 15015  PRINT"In each riddle, I will":LOCATE 10,18:PRINT"give you three numbers":LOCATE 11,18:PRINT"that follow a rule.":LOCATE 13,18:PRINT"Test the rule with":LOCATE 14,18:PRINT"your own sets of":LOCATE 15,18:PRINT"numbers -- as many":LOCATE 16,18
  142. 15016  DEF SEG=PL%:LIM%=PEEK(0):POKE 0,LIM%:DEF SEG
  143. 15020  PRINT"as you like.";:GOSUB 5010:GOSUB 13500:GOSUB 10150:LOCATE 3,18:PRINT"You will be told":LOCATE 4,18:PRINT"whether or not each":LOCATE 5,18:PRINT"set fits the rule.":LOCATE 7,18
  144. 15030  PRINT"You can get a recap":LOCATE 8,18:PRINT"of your guesses by":LOCATE 9,18:PRINT"pressing R.":LOCATE 11,18:PRINT"When you are ready":LOCATE 12,18:PRINT"for the quiz, press":LOCATE 13,18:PRINT"the Q key."
  145. 15031  IF ENOUGHMEMORY THEN GET (15,4)-(117,198),GUARD
  146. 15050  HN=FNR(3)+3:GOSUB 10020
  147. 15060  RANDOMIZE (VAL(RIGHT$(TIME$,2))):RU=FNR(14)
  148. 15070  RANDOMIZE (VAL(RIGHT$(TIME$,2))):ON RU GOSUB 20,60,100,140,180,220,260,300,340,380,420,420,500,500
  149. 15075  TL=7:LL=48:UL=57:QU$="of":GG=0:D=2:GOSUB 10100:GOSUB 10110:PO=11:XPO=4
  150. 15080  LOCATE 25,3:PRINT"Press <R> for recap, or <Q> for quiz.";:IF KZ=1 THEN KZ=0:XPO=4
  151. 15085  IF PO>21 THEN GOSUB 8000:PO=21:XPO=4
  152. 15087  GOSUB 13000
  153. 15090  IF K$="Q" THEN 20000
  154. 15100  IF K$="R" THEN GOSUB 19000:GOTO 15080
  155. 15110  X=VAL(N$):XPO=XPO+10
  156. 15130  GOSUB 13000
  157. 15140  IF K$="Q" THEN 20000
  158. 15150  IF K$="R" THEN GOSUB 19000:IF KZ<>1 THEN 15130 ELSE 15080
  159. 15160  Y=VAL(N$):XPO=XPO+10
  160. 15180  GOSUB 13000
  161. 15190  IF K$="Q" THEN 20000
  162. 15200  IF K$="R" THEN GOSUB 19000:IF KZ<>1 THEN 15180 ELSE 15080
  163. 15210  Z=VAL(N$):XPO=XPO+10
  164. 15230  AN=2:ON RU GOSUB 40,80,120,160,200,240,280,320,360,400,440,445,540,545
  165. 15240  IF AN=1 THEN LOCATE PO,XPO:PRINT"Yes";:PLAY YES$:RW=1:GOTO 15252
  166. 15250  LOCATE PO,XPO:PRINT"No";:PLAY NO$:RW=2:WH=WH+1
  167. 15252  IF EM=1 THEN IC=0:EM=0
  168. 15253  XPO=4:IC=IC+1
  169. 15264  Z1(IC)=X:Z2(IC)=Y:Z3(IC)=Z:Z4(IC)=RW:PO=PO+2:R$="":IF WH=HN THEN GOSUB 29000
  170. 15270  IF IC=90 THEN EM=1:GOSUB 4000:GOTO 15075
  171. 15290  ZZ=FRE(H$):GOTO 15080
  172. 16000  EFL=1:CLS:PRINT CHR$(7):LOCATE 10,4:PRINT"Please make sure that the diskette":PRINT:PRINT"   is inserted properly and that disk":PRINT:PRINT"   drive door is closed.":GOSUB 10000:RESUME 29400
  173. 19000  IF IC=0 THEN LOCATE 25,3:PRINT EL$;:LOCATE 25,11:PRINT"You have no entry!";:GOSUB 10205:GOSUB 10120:RETURN
  174. 19005  IF SA=1 THEN SA=0:GOTO 19020
  175. 19010  IF IC<6 THEN LOCATE 25,3:PRINT EL$;:LOCATE 25,8:PRINT"All entries are displayed.";:GOSUB 10205:GOSUB 10120:RETURN
  176. 19020  GOSUB 10160:PO=11
  177. 19030  LOCATE 25,3:PRINT EL$;:FOR I=1 TO IC:LOCATE PO,3:PRINT TAB(4+NOT(Z1(I)<0))Z1(I)TAB(14+NOT(Z2(I)<0))Z2(I)TAB(24+NOT(Z3(I)<0))Z3(I)TAB(34);:IF Z4(I)=1 THEN PRINT"Yes"; ELSE PRINT"No ";
  178. 19040  LC=LC+1:IF LC=6 THEN IF I<IC THEN GOSUB 10010:GOSUB 10160:LC=0:PO=9
  179. 19045  IF LC=6 THEN IF I=IC THEN GOSUB 10010:GOSUB 10160:KZ=1:LC=0:XPO=4:PO=11:RETURN
  180. 19050  PO=PO+2:NEXT I:GOSUB 10010:IF PO>21 THEN GOSUB 10160
  181. 19060  KZ=1:RETURN
  182. 20000  IF ENOUGHMEMORY THEN GOSUB 5000:PUT (15,4),GUARD ELSE GOSUB 29600
  183. 20010  IF KI<>0 THEN GOSUB 5010:GOTO 20031 ELSE LOCATE 3,18:PRINT"I will present you":LOCATE 4,18:PRINT"with three numbers":LOCATE 5,18:PRINT"at a time. You must":LOCATE 6,18
  184. 20012  PRINT"say whether or not":LOCATE 7,18:PRINT"each group fits the":LOCATE 8,18:PRINT"rule.":LOCATE 10,18:PRINT"When you answer five":LOCATE 11,18:PRINT"questions correctly":LOCATE 12,18:PRINT"you pass the quiz":LOCATE 13,18
  185. 20013  PRINT"and win a chess piece."
  186. 20015  LOCATE 15,18:PRINT"When you pass three":LOCATE 16,18:PRINT"quizzes, you may":LOCATE 17,18
  187. 20016  PRINT"enter the parlour."
  188. 20030  G2=1:GG=0:GOSUB 5010:GOSUB 13500
  189. 20031  G2=1:GG=0:QU$="on":WH=0:IC=0:DN=FNR(5)
  190. 20041  R1=R:ON RU GOSUB 20,60,100,140,180,220,260,300,340,390,430,430,520,520:IF R=R1 THEN 20041
  191. 20042  IF DN=RC+1 THEN 20050
  192. 20043  IF FNR(4)=2 THEN 20050
  193. 20044  GOTO 21000
  194. 20050  ON RU GOSUB 140,20,300,20,220,180,300,260,20062,20,20064,20065,20064,20065
  195. 20055  GOTO 21000
  196. 20060  IF DD=2 THEN RR=S:GOSUB 20100:S=RR:GOTO 21000
  197. 20062  R=FNR(30)*2:S=FNR(20)*2:R=R+S:RETURN
  198. 20064  T=FNR(40):S=T+FNR(10):R=S+FNR(10):RETURN
  199. 20065  R=FNR(40):S=R+FNR(10):T=S+FNR(10):RETURN
  200. 20066  C1=C:GOSUB 500:R=T:T=N:C=C1:RETURN
  201. 20070  RR=T:GOSUB 20100:T=RR
  202. 20090  GOTO 21000
  203. 20100  K=FNR(2):ON K GOSUB 20220,20230
  204. 20110  RETURN
  205. 20200  RR=RR*FNR(3):RETURN
  206. 20210  RR=INT(RR/FNR(3)):IF RR<0 THEN 20210 ELSE RETURN
  207. 20220  RR=RR+FNR(5):IF RR>30 THEN RR=30
  208. 20221  RETURN
  209. 20230  RR=RR-FNR(5):IF RR<1 THEN RR=1
  210. 20231  RETURN
  211. 21000  GOSUB 10170:LINE (144,12)-(318,51),2,B:X=R:Y=S:Z=T
  212. 21010  AN=2:ON RU GOSUB 40,80,120,160,200,240,280,320,360,400,440,445,540,545:IF R+S+T>9999 THEN AF=8 ELSE AF=0
  213. 21015  YPOS=24:N$=STR$(R):XPOS=192+AF-LEN(N$)*8:GOSUB 4500:N$=STR$(S):XPOS=248+AF-LEN(N$)*8:GOSUB 4500:N$=STR$(T):XPOS=304+AF-LEN(N$)*8:GOSUB 4500
  214. 21020  GG=2:LOCATE 9,20:PRINT"Do these numbers fit":LOCATE 10,20:PRINT"the rule? ";:GOSUB 14000
  215. 21050  IF AN=1 AND AN$="Y" THEN 21300
  216. 21060  IF AN=2 AND AN$="N" THEN 21300
  217. 21100  LOCATE 13,20:PLAY NO$:PRINT"Wrong. You will have":LOCATE 14,20:PRINT"to try again.":IF L%<4 THEN KI=0
  218. 21105  GOSUB 13500:RC=0:GOTO 27999
  219. 21300  PLAY YES$:IF RC<4 THEN LOCATE 13,20:PRINT"Right!":LOCATE 14,20:PRINT"You may continue the":LOCATE 15,20:PRINT"challenge...";:GOSUB 13500:RC=RC+1:GOTO 20041
  220. 21310  LOCATE 12,20:PRINT"Right! You have":LOCATE 13,20:PRINT"passed the quiz":LOCATE 14,20
  221. 21311  PRINT"and won a chess";:LOCATE 15,20:PRINT"piece.";:KI=KI+1:PO=15:XPO=26:GOSUB 22000:GOSUB 13500
  222. 21320  RC=0:GOSUB 10170:GOSUB 23000
  223. 21325  IF KI=3 THEN SR=SR+1:GOTO 21400
  224. 21330  LOCATE 3,21:PRINT"The Game Parlour is":LOCATE 4,21:PRINT"still closed. You":LOCATE 5,21:PRINT"will need to solve":LOCATE 6,21:PRINT J$((3-KI)+4);" more riddle";:IF KI=2 THEN PRINT"."; ELSE PRINT"s.";
  225. 21340  GOSUB 13500:FL=0:GOTO 15060
  226. 21400  LOCATE 3,22:PRINT"CONGRATULATIONS!":LOCATE 5,21:PRINT"You may now pass ":LOCATE 6,21:PRINT"through the Game":LOCATE 7,21:PRINT"Parlour to the":LOCATE 8,21:PRINT"Magician's Study.":L=L+1:RES=SR
  227. 21410  PLAY FANFARE$:IF L%>RES THEN DEF SEG=PL%:POKE 0,L%:DEF SEG:GOSUB 13500 ELSE GOSUB 13500
  228. 21420  GOSUB 10170:GOTO 29400
  229. 22000  PUT (XPO*8+2,PO*8),PRIZE,PSET:RETURN
  230. 23000  IF KI=1 THEN PO=11:XPO=26:GOSUB 22000:RETURN
  231. 23010  IF KI=2 THEN PO=14:XPO=21:GOSUB 22000:XPO=XPO+10:GOSUB 22000:RETURN
  232. 23020  PO=10:XPO=26:GOSUB 22000:PO=14:XPO=21:GOSUB 22000:XPO=XPO+10:GOSUB 22000:RETURN
  233. 27999  IF GG=3 AND ENOUGHMEMORY THEN GOSUB 5000:PUT (15,4),GUARD:GOSUB 5010 ELSE IF GG=3 THEN GOSUB 29600:GOSUB 5010 ELSE GOSUB 10170
  234. 28000  LOCATE 4,18:PRINT"Would you like:":LOCATE 6,18:PRINT"1. Same level,":LOCATE 7,21:PRINT"same rule":LOCATE 9,18:PRINT"2. Same level,":LOCATE 10,21:PRINT"different rule, or":LOCATE 12,18:PRINT"3. Return to the menu":G2=0
  235. 28010  LL%=49:UL%=51:LI=0:J=0:SW=J:QU$="off":RC=0:WH=0:LOCATE 15,18:PRINT"Enter selection:";:PO=15:XPO=35:WC$=CHR$(22)+" ":TL=2:FL=1:D=1:GOSUB 13000:A=VAL(N$)
  236. 28040  FL=0:IF A=1 THEN SA=1:ON RU GOSUB 20,60,100,140,180,220,260,300,340,390,430,430,520,520:GOTO 15075
  237. 28050  IF A=2 THEN SV=RU:GOTO 28065
  238. 28060  IF A=3 THEN 29400
  239. 28065  RU=FNR(14):IF RU=SV THEN 28065
  240. 28070  IC=0:GOTO 15070
  241. 28999  '*** hint ***
  242. 29000  R1=R:S1=S:T1=T
  243. 29001  ON RU GOSUB 20,60,100,140,180,220,260,300,340,390,430,430,520,520:IF R=R1 THEN 29001
  244. 29002  HN=FNR(3)+3:LOCATE 2,3:PRINT EL$;
  245. 29010  GOSUB 29030:LOCATE 2,3:PRINT J$(FNR(4)):LOCATE 3,3:PRINT"these numbers also fit the rule:";
  246. 29020  GOSUB 4400:GOSUB 10000:R=R1:S=S1:T=T1:GOSUB 29030:GOSUB 10105:WH=0:RETURN
  247. 29030  LINE (16,8)-(304,46),0,BF:RETURN
  248. 29400  ON ERROR GOTO 16000:RUN "menu"
  249. 29500  DEFINT A-W:R=18:DEF SEG:DIM RET(26),TITLE(242),N0(R),N1(R),N2(R),N3(R),N4(R),N5(R),N6(R),N7(R),N8(R),N9(R),MIN(R):DEF SEG:BLOAD "image.img",VARPTR(RET(0))
  250. 29501  LD$="UNPACK.BLD":MAXIMUM%=16500
  251. 29502  DEF SEG=&H40:MEM%=PEEK(&H13)+256*PEEK(&H14)
  252. 29504  ASMPROG%=(MEM%*1024/16)-108
  253. 29506  SEGMENT%=INT((ASMPROG%*16-MAXIMUM%)/16)
  254. 29508  DEF SEG=ASMPROG%:BLOAD LD$,0
  255. 29510  UNPACKIT%=0:PACK%=0:DEF SEG
  256. 29512  IF MEM%>80 THEN ENOUGHMEMORY=1 ELSE ENOUGHMEMORY=0
  257. 29520  DIM Z1(92),Z2(92),Z3(92),Z4(92):IF ENOUGHMEMORY THEN DIM DIS(2520),GUARD(2537)
  258. 29525  DIM PRIZE(122)
  259. 29530  DEF SEG=0:POKE &H6C,84:POKE &H6D,0:POKE &H6E,0:POKE &H6F,0:POKE 84,&HCF:DEF SEG:DEF SEG=&H40:IF PEEK (&H6B)<>&HA5 THEN 30000
  260. 29535  DEF SEG=&HF000:JR=(PEEK(&HFFFE)=&HFD)
  261. 29536  DEF SEG=0:PL%=INT((((PEEK(&H510)+256*PEEK(&H511))*16+VARPTR(#2))/16)+1):DEF SEG
  262. 29537  DEF SEG=&H40:MOFF%=PEEK(4)+256*PEEK(5):MSEG%=PEEK(6)+256*PEEK(7):DEF SEG
  263. 29540  DEF FNR(N)=1+INT(RND*N)
  264. 29545  EL$=STRING$(37,32)
  265. 29550  J$(1)="Just between you and me...":J$(2)="I shouldn't tell you this, but":J$(3)="Psst...Don't tell anyone, but":J$(4)="Shhh...Our secret...":J$(5)="one":J$(6)="two":GOTO 15000
  266. 29600  FILE1$="guard"+L$+".pak":DEF SEG=SEGMENT%:BLOAD FILE1$,0:DEF SEG=ASMPROG%:GOSUB 5000:CALL PACK%(SEGMENT%,UNPACKIT%):RETURN
  267. 29601  RETURN
  268. 30000  CLS:LOCATE 6,2,0:PRINT"Unauthorized copying of this diskette":PRINT:PRINT" is unlawful.":PRINT:PRINT" Violators will be prosecuted to the":PRINT:PRINT" full extent of the law."
  269. 30001  PRINT CHR$(7);:GOTO 30001
  270.