home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0020 - 0029 / ibm0020-0029 / ibm0028.tar / ibm0028 / KINGS.ZIP / LEVEL4.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  12.2 KB  |  294 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  L%=N%:L$=RIGHT$(STR$(L%),1):F$="ovrlay"+L$:COMMON L%,F$,MSF%,RES
  8. 7  L$="4":L%=4:RES%=4
  9. 19  GOTO 29500
  10. 20  R=FNR(9):S=FNR(9):T=R*S: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  IF X*Y=Z THEN AN=1:RETURN
  15. 35  AN=2:RETURN
  16. 40  IF RU=1 AND (X+JN=Y AND Y+JN=Z) THEN AN=1:RETURN
  17. 50  N=FNR(9):R=N:S=FNR(9):IF S>R THEN R=S:S=N
  18. 55  T=R-S:RETURN
  19. 60  IF X-Y=Z THEN AN=1:RETURN
  20. 70  AN=2:RETURN
  21. 80  R=FNR(9):S=FNR(9):T=R*R-1:RETURN
  22. 90  IF X*X-1=Z THEN AN=1:RETURN
  23. 100  AN=2:RETURN
  24. 110  N=FNR(9):R=N:S=FNR(9):IF R>S THEN R=S:S=N
  25. 115  T=S-R:RETURN
  26. 120  IF Y-X=Z THEN AN=1:RETURN
  27. 130  AN=2:RETURN
  28. 140  R=FNR(9):S=FNR(9):T=R:RETURN
  29. 150  IF X=Z THEN AN=1:RETURN
  30. 160  AN=2:RETURN
  31. 170  R=FNR(9):S=FNR(9):T=R*R:RETURN
  32. 180  IF X*X=Z THEN AN=1:RETURN
  33. 190  AN=2:RETURN
  34. 200  N=FNR(9):S=FNR(9):R=N:IF S>R THEN R=S:S=N
  35. 205  T=(R-S)*(R-S):RETURN
  36. 210  IF (X-Y)*(X-Y)=Z THEN AN=1:RETURN
  37. 220  AN=2:RETURN
  38. 230  R=FNR(9):S=FNR(9):T=INT(ABS(R+(S/2))):RETURN
  39. 240  IF INT(ABS(X+(Y/2)))=Z THEN AN=1:RETURN
  40. 250  AN=2:RETURN
  41. 260  R=FNR(9):S=FNR(9):T=(R+S)*(R+S):RETURN
  42. 270  IF (X+Y)*(X+Y)=Z THEN AN=1:RETURN
  43. 280  AN=2:RETURN
  44. 290  R=FNR(9):S=FNR(9):T=ABS(R*R-S*S):RETURN
  45. 300  IF ((ABS(X*X-Y*Y))=Z) THEN AN=1:RETURN
  46. 310  AN=2:RETURN
  47. 320  R=FNR(9):S=FNR(9):T=-(R+S):RETURN
  48. 330  IF Z=-(X+Y) THEN AN=1:RETURN
  49. 340  AN=2:RETURN
  50. 350  R=FNR(9):S=FNR(9):T=(R+1)*(S+1):RETURN
  51. 360  IF (X+1)*(Y+1)=Z THEN AN=1:RETURN
  52. 370  AN=2:RETURN
  53. 380  R=FNR(9):S=FNR(9):T=R+S+C:RETURN
  54. 390  IF X+Y+C=Z THEN AN=1:RETURN
  55. 400  AN=2:RETURN
  56. 410  R=FNR(9):S=FNR(9):T=R*S-C:IF T<0 THEN 410
  57. 411  RETURN
  58. 420  IF X*Y-C=Z THEN AN=1:RETURN
  59. 430  AN=2:RETURN
  60. 440  R=FNR(9):S=FNR(9):T=(R+S)*C:RETURN
  61. 450  IF (X+Y)*C=Z THEN AN=1:RETURN
  62. 460  AN=2:RETURN
  63. 470  R=FNR(9):S=FNR(9):T=R*S+C:RETURN
  64. 480  IF X*Y+C=Z THEN AN=1:RETURN
  65. 490  AN=2:RETURN
  66. 500  R=FNR(9):S=FNR(9):T=100-R-S:RETURN
  67. 510  IF 100-X-Y=Z THEN AN=1:RETURN
  68. 520  AN=2:RETURN
  69. 530  R=FNR(9):S=FNR(9):T=(R+S)*10:RETURN
  70. 540  IF (X+Y)*10=Z THEN AN=1:RETURN
  71. 550  AN=2:RETURN
  72. 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
  73. 4010  PRINT"time and take notes.":GOSUB 10000:RETURN
  74. 4400  IF R+S+T>9999 THEN AF=8 ELSE AF=0
  75. 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
  76. 4402  RETURN
  77. 4500  IF VAL(N$)<0 THEN PUT (XPOS,YPOS),MIN,PSET:XPOS=XPOS+9
  78. 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
  79. 4600  ON SUB%+1 GOSUB 4610,4611,4612,4613,4614,4615,4616,4617,4618,4619:RETURN
  80. 4610  PUT (XPOS,YPOS),N0,PSET:RETURN
  81. 4611  PUT (XPOS,YPOS),N1,PSET:RETURN
  82. 4612  PUT (XPOS,YPOS),N2,PSET:RETURN
  83. 4613  PUT (XPOS,YPOS),N3,PSET:RETURN
  84. 4614  PUT (XPOS,YPOS),N4,PSET:RETURN
  85. 4615  PUT (XPOS,YPOS),N5,PSET:RETURN
  86. 4616  PUT (XPOS,YPOS),N6,PSET:RETURN
  87. 4617  PUT (XPOS,YPOS),N7,PSET:RETURN
  88. 4618  PUT (XPOS,YPOS),N8,PSET:RETURN
  89. 4619  PUT (XPOS,YPOS),N9,PSET:RETURN
  90. 5000  CLS:IF JR THEN SCREEN 1:OUT &H3DA,0:OUT &H3DA,0:RETURN ELSE OUT &H3D8,2:RETURN
  91. 5010  IF ENOUGHMEMORY=0 THEN LINE (78,0)-(120,27),0,BF
  92. 5020  IF JR THEN SCREEN 1:OUT &H3DA,0:OUT &H3DA,10:RETURN ELSE OUT &H3D8,10:RETURN
  93. 6000  IF MSF%=0 THEN RETURN ELSE SF%=NOT SF%
  94. 6010  ON SF%+2 GOSUB 6050,6030:RETURN
  95. 6030  YES$="":NO$="":FANFARE$="":RETURN
  96. 6050  YES$="mbt100o3l20cd":NO$="mbo1t32l14c":FANFARE$="mbt200l6o3efefcd#c#o2a#":RETURN
  97. 8000  AA%=-8:BB%=8:CC%=33:DD%=88:SUB%=2:DEF SEG=MSEG%:CALL MOFF%(AA%,BB%,CC%,DD%,SUB%)
  98. 8001  DEF SEG:RETURN
  99. 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 ";
  100. 8020  NEXT I:LOCATE 21,4:PRINT STRING$(34,32);:RETURN
  101. 10000  LOCATE 25,3:PRINT EL$;
  102. 10010  LOCATE 25,9:PRINT"Press ENTER to continue.";
  103. 10020  WHILE INKEY$<>"":WEND
  104. 10022  K$=INKEY$:IF K$="" THEN 10022
  105. 10023  IF K$=CHR$(1) THEN GOSUB 6000:GOTO 10022
  106. 10025  IF K$=CHR$(5) AND RU=0 THEN 29400
  107. 10026  IF K$=CHR$(5) AND EFL<>1 THEN RETURN 27999
  108. 10030  IF K$=" " OR K$=CHR$(13) THEN RETURN
  109. 10040  GOTO 10022
  110. 10100  GG=3:CLS:WC$=CHR$(22)+"______":LI=5:LINE (6,0)-(319,54),2,B:LINE (6,57)-(319,175),2,B
  111. 10105  GOSUB 29030:LOCATE 2,8:PRINT"These numbers fit the rule:":GOSUB 4400:RETURN
  112. 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
  113. 10120  LOCATE 25,3:PRINT"Press <R> for recap, or <Q> for quiz.";:RETURN
  114. 10150  LINE (128,16)-(319,128),0,BF:RETURN
  115. 10160  LINE (24,80)-(296,168),0,BF:RETURN
  116. 10170  LINE (136,8)-(318,192),0,BF:RETURN
  117. 10190  '*** delay loops ***
  118. 10200  FOR I=1 TO 1200:NEXT I:RETURN
  119. 10205  FOR I=1 TO 1800:NEXT I:RETURN
  120. 10500  LOCATE 23,33:PRINT STR$(L);" -";STR$(RU);:GOSUB 10000:LOCATE 23,33:PRINT"       ";:GOSUB 10120:RETURN
  121. 12000  N$="":SW=0:Y$=N$:Z1=0:XPOS=256:YPOS=24:WHILE INKEY$<>"":WEND
  122. 12010  PUT (XPOS,YPOS+7),MIN,PSET
  123. 12020  Y$=INKEY$:IF Y$="" THEN 12020
  124. 12030  J=ASC(Y$)
  125. 12040  IF Y$="-" AND SW<>1 THEN 12120
  126. 12050  IF N$="-" AND Y$="0" THEN PUT (XPOS,YPOS),BLANK,PSET:XPOS=XPOS-9:N$="":Z1=Z1-1:GOTO 12010
  127. 12060  IF J=13 AND N$<>"" AND N$<>"-" THEN SW=0:PUT (XPOS,YPOS),BLANK,PSET:RETURN
  128. 12070  IF J=5 THEN RETURN 27999
  129. 12080  IF J=8 OR (RIGHT$(Y$,1)="S" AND LEN(Y$)>1) THEN 12160
  130. 12090  IF J=19 THEN GOSUB 6000
  131. 12100  IF SW=1 THEN 12020
  132. 12110  IF J<48 OR J>57 THEN 12020
  133. 12120  IF Y$="-" AND Z1>0 THEN 12020
  134. 12130  IF Y$="-" THEN PUT (XPOS,YPOS),MIN,PSET ELSE SUB%=VAL(Y$):GOSUB 4600
  135. 12140  Z1=Z1+1:XPOS=XPOS+9:N$=N$+Y$:IF LEN(N$)>LI THEN SW=1:WHILE INKEY$<>"":WEND:GOTO 12010
  136. 12150  GOTO 12010
  137. 12160  IF SW=1 AND LEN(N$)<6 THEN Y$=""
  138. 12170  SW=0:IF Z1<1 THEN 12020 ELSE PUT (XPOS,YPOS),BLANK,PSET:PUT (XPOS-9,YPOS),BLANK,PSET
  139. 12180  Z1=Z1-1:XPOS=XPOS-9:N$=LEFT$(N$,Z1):GOTO 12010
  140. 13000  LC=0:CK$=WC$:WHILE INKEY$<>"":WEND
  141. 13010  SW=0:Z1=0:N$="":Y$=N$:K$=Y$
  142. 13020  LOCATE PO,XPO+Z1:PRINT LEFT$(CK$,TL)" ";
  143. 13030  Y$=INKEY$:IF Y$="" THEN 13030
  144. 13040  J=ASC(Y$):IF J>90 THEN J=J-32:Y$=CHR$(J)
  145. 13041  IF FL=1 THEN 13080
  146. 13050  IF Y$="Q" AND Z1=0 AND D=2 THEN K$="Q":SW=1:Y$="":N$="0":GG=3:RETURN
  147. 13060  IF Y$="R" AND Z1=0 AND D=2 THEN K$="R":SW=1:Y$="":N$="0":RETURN
  148. 13065  IF Y$="-" AND D=2 AND SW<>1 THEN 13120 ELSE IF Y$="-" AND D=1 THEN 13000
  149. 13070  IF N$="-" AND Y$="0" THEN TL=TL+1:GOTO 13000
  150. 13080  IF J=13 AND N$<>"" AND N$<>"-" THEN SW=0:LOCATE PO,XPO+Z1:PRINT STRING$(TL,32);:TL=7:RETURN
  151. 13090  IF J=5 AND D=2 THEN RETURN 27999
  152. 13100  IF J=8 OR (RIGHT$(Y$,1)="S" AND LEN(Y$)>1) THEN 13160
  153. 13105  IF J=1 THEN GOSUB 6000
  154. 13106  IF J=20 AND QU$="of" AND L>2 THEN GOSUB 10500:GOTO 13030
  155. 13110  IF SW=1 THEN 13030
  156. 13115  IF J<LL OR J>UL THEN 13020
  157. 13120  IF Y$="-" AND Z1>0 THEN 13020
  158. 13130  LOCATE PO,XPO+Z1:PRINT Y$;
  159. 13140  Z1=Z1+1:N$=N$+Y$:TL=TL-1:IF LEN(N$)>LI THEN SW=1:WHILE INKEY$<>"":WEND:GOTO 13020
  160. 13150  GOTO 13020
  161. 13160  IF SW=1 AND LEN(N$)<6 THEN Y$=""
  162. 13161  SW=0:K$="":IF Z1<1 THEN 13020 ELSE PRINT CHR$(29)" ";CHR$(29);
  163. 13170  Z1=Z1-1:TL=TL+1:N$=LEFT$(N$,Z1):GOTO 13020
  164. 13499  '*** bot. for guard ***
  165. 13500  LOCATE 20+G2,22+GG:PRINT"Press ENTER";
  166. 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
  167. 13510  GOTO 10020
  168. 15000  GG=0:GOSUB 6000:GOSUB 29600:GET (78,0)-(120,27),PRIZE:PUT (78,0),PRIZE:GET (0,0)-(7,15),BLANK
  169. 15010  LOCATE 3,18:PRINT"Halt! I guard the door":LOCATE 4,18:PRINT"to the Magician's":LOCATE 5,18:PRINT"Study. To pass through":LOCATE 6,18:PRINT"you must solve three":LOCATE 7,18:PRINT"number riddles...":LOCATE 9,18
  170. 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
  171. 15016  DEF SEG=PL%:LIM%=PEEK(0):POKE 0,LIM%:DEF SEG
  172. 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
  173. 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."
  174. 15031  IF ENOUGHMEMORY THEN GET (15,4)-(117,198),GUARD
  175. 15050  HN=FNR(3)+3:GOSUB 10020
  176. 15060  RANDOMIZE (VAL(RIGHT$(TIME$,2))):RU=FNR(18):C=FNR(5)
  177. 15070  RANDOMIZE (VAL(RIGHT$(TIME$,2))):ON RU GOSUB 20,50,80,110,140,170,200,230,260,290,320,350,380,410,440,470,500,530
  178. 15075  TL=7:LL=48:UL=57:QU$="of":GG=0:D=2:GOSUB 10100:GOSUB 10110:PO=11:XPO=4
  179. 15080  LOCATE 25,3:PRINT"Press <R> for recap, or <Q> for quiz.";:IF KZ=1 THEN KZ=0:XPO=4
  180. 15085  IF PO>21 THEN GOSUB 8000:PO=21:XPO=4
  181. 15087  GOSUB 13000
  182. 15090  IF K$="Q" THEN 20000
  183. 15100  IF K$="R" THEN GOSUB 19000:GOTO 15080
  184. 15110  X=VAL(N$):XPO=XPO+10
  185. 15130  GOSUB 13000
  186. 15140  IF K$="Q" THEN 20000
  187. 15150  IF K$="R" THEN GOSUB 19000:IF KZ<>1 THEN 15130 ELSE 15080
  188. 15160  Y=VAL(N$):XPO=XPO+10
  189. 15180  GOSUB 13000
  190. 15190  IF K$="Q" THEN 20000
  191. 15200  IF K$="R" THEN GOSUB 19000:IF KZ<>1 THEN 15180 ELSE 15080
  192. 15210  Z=VAL(N$):XPO=XPO+10
  193. 15230  ON RU GOSUB 30,60,90,120,150,180,210,240,270,300,330,360,390,420,450,480,510,540
  194. 15240  IF AN=1 THEN LOCATE PO,XPO:PRINT"Yes";:PLAY YES$:RW=1:GOTO 15252
  195. 15250  LOCATE PO,XPO:PRINT"No";:PLAY NO$:RW=2:WH=WH+1
  196. 15252  IF EM=1 THEN IC=0:EM=0
  197. 15253  XPO=4:IC=IC+1
  198. 15264  Z1(IC)=X:Z2(IC)=Y:Z3(IC)=Z:Z4(IC)=RW:PO=PO+2:R$="":IF WH=HN THEN GOSUB 29000
  199. 15270  IF IC=90 THEN EM=1:GOSUB 4000:GOTO 15075
  200. 15290  ZZ=FRE(H$):GOTO 15080
  201. 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
  202. 19000  IF IC=0 THEN LOCATE 25,3:PRINT EL$;:LOCATE 25,11:PRINT"You have no entry!";:GOSUB 10205:GOSUB 10120:RETURN
  203. 19005  IF SA=1 THEN SA=0:GOTO 19020
  204. 19010  IF IC<6 THEN LOCATE 25,3:PRINT EL$;:LOCATE 25,8:PRINT"All entries are displayed.";:GOSUB 10205:GOSUB 10120:RETURN
  205. 19020  GOSUB 10160:PO=11
  206. 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 ";
  207. 19040  LC=LC+1:IF LC=6 THEN IF I<IC THEN GOSUB 10010:GOSUB 10160:LC=0:PO=9
  208. 19045  IF LC=6 THEN IF I=IC THEN GOSUB 10010:GOSUB 10160:KZ=1:LC=0:XPO=4:PO=11:RETURN
  209. 19050  PO=PO+2:NEXT I:GOSUB 10010:IF PO>21 THEN GOSUB 10160
  210. 19060  KZ=1:RETURN
  211. 20000  IF ENOUGHMEMORY THEN GOSUB 5000:PUT (15,4),GUARD ELSE GOSUB 29600
  212. 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
  213. 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
  214. 20013  PRINT"and win a magic book."
  215. 20015  LOCATE 15,18:PRINT"When you pass three":LOCATE 16,18:PRINT"quizzes, you may":LOCATE 17,18
  216. 20016  PRINT"enter the study."
  217. 20030  G2=1:GG=0:GOSUB 5010:GOSUB 13500
  218. 20031  G2=1:GG=0:QU$="on":WH=0:IC=0:DN=FNR(5)
  219. 20041  R1=R:GOTO 21000
  220. 20042  ON RU GOSUB 20,50,80,110,140,170,200,230,260,290,320,350,380,410,440,470,500,530:IF R=R1 THEN 20042
  221. 20043  IF FNR(4)=2 THEN 20050
  222. 20044  GOTO 21000
  223. 20050  DD=FNR(3):IF DD=1 THEN GOSUB 20100:R=RR:GOTO 21000
  224. 20060  IF DD=2 THEN RR=S:GOSUB 20100:S=RR:GOTO 21000
  225. 20070  RR=T:GOSUB 20100:T=RR
  226. 20090  GOTO 21000
  227. 20100  K=FNR(2):ON K GOSUB 20220,20230
  228. 20110  RETURN
  229. 20200  RR=RR*FNR(3):RETURN
  230. 20210  RR=INT(RR/FNR(3)):IF RR<0 THEN 20210 ELSE RETURN
  231. 20220  RR=RR+FNR(5):IF RR>30 THEN RR=30
  232. 20221  RETURN
  233. 20230  RR=RR-FNR(5):IF RR<1 THEN RR=1
  234. 20231  RETURN
  235. 21000  GOSUB 10170:LINE (144,12)-(318,51),2,B:X=R:Y=S:Z=T
  236. 21010  ON RU GOSUB 20,50,80,110,140,170,200,230,260,290,320,350,380,410,440,470,500,530:IF R=R1 THEN 21010
  237. 21015  YPOS=24:N$=STR$(R):XPOS=160:GOSUB 4500:N$=STR$(S):XPOS=208:GOSUB 4500
  238. 21020  GG=2:LOCATE 9,20:PRINT"Enter the third":LOCATE 10,20:PRINT"number above.":GOSUB 12000:Z=VAL(N$):IF Z=T THEN AN=1:GOTO 21300 ELSE AN=2:GOTO 21100
  239. 21050  IF AN=1 AND AN$="Y" THEN 21300
  240. 21060  IF AN=2 AND AN$="N" THEN 21300
  241. 21100  LOCATE 13,20:PLAY NO$:PRINT"Wrong. You will have":LOCATE 14,20:PRINT"to try again.":IF L%<4 THEN KI=0
  242. 21105  GOSUB 13500:RC=0:GOTO 27999
  243. 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
  244. 21310  LOCATE 12,20:PRINT"Right! You have":LOCATE 13,20:PRINT"passed the quiz":LOCATE 14,20
  245. 21311  PRINT"and won a magic";:LOCATE 15,20:PRINT"book.";:KI=KI+1:PO=15:XPO=26:GOSUB 22000:GOSUB 13500
  246. 21320  RC=0:GOSUB 10170:GOSUB 23000
  247. 21325  IF KI=3 THEN SR=SR+1:GOTO 21400
  248. 21330  LOCATE 3,20:PRINT"The Magician's Study":LOCATE 4,20:PRINT"is still closed. You":LOCATE 5,20:PRINT"will need to solve":LOCATE 6,20:PRINT J$((3-KI)+4);" more riddle";:IF KI=2 THEN PRINT"."; ELSE PRINT"s.";
  249. 21340  GOSUB 13500:FL=0:GOTO 15060
  250. 21400  LOCATE 3,22:PRINT"CONGRATULATIONS!":LOCATE 5,21:PRINT"You may now pass ":LOCATE 6,21:PRINT"through the":LOCATE 7,21:PRINT"Magician's Study":LOCATE 8,21:PRINT"to the Royal Suite.":L=L+1:RES=SR
  251. 21410  PLAY FANFARE$:IF L%>RES THEN DEF SEG=PL%:POKE 0,L%:DEF SEG:GOSUB 13500 ELSE GOSUB 13500
  252. 21420  GOSUB 10170:GOTO 29400
  253. 22000  PUT (XPO*8+2,PO*8),PRIZE,PSET:RETURN
  254. 23000  IF KI=1 THEN PO=11:XPO=26:GOSUB 22000:RETURN
  255. 23010  IF KI=2 THEN PO=14:XPO=21:GOSUB 22000:XPO=XPO+10:GOSUB 22000:RETURN
  256. 23020  PO=10:XPO=26:GOSUB 22000:PO=14:XPO=21:GOSUB 22000:XPO=XPO+10:GOSUB 22000:RETURN
  257. 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
  258. 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
  259. 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$)
  260. 28040  FL=0:IF A=1 THEN SA=1:GOTO 15070
  261. 28050  IF A=2 THEN C=FNR(5):SV=RU
  262. 28060  IF A=3 THEN 29400
  263. 28065  RU=FNR(18):IF RU=SV THEN 28065
  264. 28070  IC=0:GOTO 15070
  265. 28999  '*** hint ***
  266. 29000  R1=R:S1=S:T1=T
  267. 29001  ON RU GOSUB 20,50,80,110,140,170,200,230,260,290,320,350,380,410,440,470,500,530:IF R=R1 THEN 29001
  268. 29002  HN=FNR(3)+3:LOCATE 2,3:PRINT EL$;
  269. 29010  GOSUB 29030:LOCATE 2,3:PRINT J$(FNR(4)):LOCATE 3,3:PRINT"these numbers also fit the rule:";
  270. 29020  GOSUB 4400:GOSUB 10000:R=R1:S=S1:T=T1:GOSUB 29030:GOSUB 10105:WH=0:RETURN
  271. 29030  LINE (16,8)-(304,46),0,BF:RETURN
  272. 29400  ON ERROR GOTO 16000:RUN "menu"
  273. 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))
  274. 29501  LD$="UNPACK.BLD":MAXIMUM%=16500
  275. 29502  DEF SEG=&H40:MEM%=PEEK(&H13)+256*PEEK(&H14)
  276. 29504  ASMPROG%=(MEM%*1024/16)-108
  277. 29506  SEGMENT%=INT((ASMPROG%*16-MAXIMUM%)/16)
  278. 29508  DEF SEG=ASMPROG%:BLOAD LD$,0
  279. 29510  UNPACKIT%=0:PACK%=0:DEF SEG
  280. 29512  IF MEM%>80 THEN ENOUGHMEMORY=1 ELSE ENOUGHMEMORY=0
  281. 29520  DIM Z1(92),Z2(92),Z3(92),Z4(92):IF ENOUGHMEMORY THEN DIM DIS(2520),GUARD(2537)
  282. 29525  DIM PRIZE(156),BLANK(18)
  283. 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
  284. 29535  DEF SEG=&HF000:JR=(PEEK(&HFFFE)=&HFD)
  285. 29536  DEF SEG=0:PL%=INT((((PEEK(&H510)+256*PEEK(&H511))*16+VARPTR(#2))/16)+1):DEF SEG
  286. 29537  DEF SEG=&H40:MOFF%=PEEK(4)+256*PEEK(5):MSEG%=PEEK(6)+256*PEEK(7):DEF SEG
  287. 29540  DEF FNR(N)=1+INT(RND*N)
  288. 29545  EL$=STRING$(37,32)
  289. 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
  290. 29600  FILE1$="guard"+L$+".pak":DEF SEG=SEGMENT%:BLOAD FILE1$,0:DEF SEG=ASMPROG%:GOSUB 5000:CALL PACK%(SEGMENT%,UNPACKIT%):RETURN
  291. 29601  RETURN
  292. 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."
  293. 30001  PRINT CHR$(7);:GOTO 30001
  294.