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