home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / games / enigma.zip / ENIGMA.BAS next >
BASIC Source File  |  1986-07-21  |  17KB  |  310 lines

  1. 1 COLOR 7,0,0:CLS:T=TIMER:RANDOMIZE(T-(32768!*FIX(T/32768!))):T=0:DEFINT A-S:
  2.   DEFINT U-Z:COLOR 2
  3. 2 '
  4. 10 PRINT "ENIGMA (C) Copyright 1986, Colonel C. F. Mowery, Jr., USAF (Ret.)"
  5. 20 PRINT "                           406 Van Reed Manor Drive"
  6. 30 PRINT "                           Brandon FL 33511"
  7. 40 PRINT "                           Tel: (813) 689-4212":LOCATE 10,1:COLOR 6
  8. 45 '
  9. 46 GOSUB 2000:' *** Lines 46, 47, 53-55, 61-63, 71, and 2000-2030
  10. 47 '                are not in compiled (.EXE) version.
  11. 50 A$=INKEY$:IF A$<>"" GOTO 50
  12.    ELSE PRINT "Does your computer run at 4 MHz or 8 MHz (enter 4 or 8)? ";
  13. 51 A$=INPUT$(1):A=VAL(A$):PRINT A:PRINT
  14. 52 IF A<>4 AND A<>8 GOTO 50 ELSE IF A=8 GOTO 70
  15. 53 ' *** Note:
  16. 54 ' In compiled version (.EXE), line 60 variable settings are:
  17. 55 '  3000  1800  20400  150   4500   900   6000
  18. 60 P1=50:P2=30:P3=680:P4=30:P5=800:P6=70:P7=200:GOTO 71
  19. 61 ' *** Note:
  20. 62 ' In compiled version (.EXE), line 70 variable settings are:
  21. 63 '  5000  3000  32000   250   7500    1650   10000
  22. 70 P1=88:P2=53:P3=1190:P4=53:P5=1400:P6=123:P7=350
  23. 71 ' ***
  24. 72 COLOR 3:PRINT "Press any key ...";:A$=INPUT$(1):LOCATE 12,1:
  25.    PRINT "If you see the split cursor at the end of the next line,"
  26. 73 PRINT "enter Y (if you don't see the cursor, press any key): ";
  27. 74 A=CSRLIN:B=POS(0):COLOR 4:LOCATE A,B,1,7,0:A$=INPUT$(1)
  28. 75 IF A$="Y" OR A$="y" THEN C2=7:C1=0 ELSE C2=0:C1=7
  29. 90 COLOR 1,3,3:CLS:KEY OFF:FOR Z=1 TO 10:KEY Z,"":NEXT Z:C4$="PASSWORD":
  30.    FOR Z=1 TO 10:READ C$(Z):READ CL$(Z):NEXT Z
  31. 100 A=INT(RND*10+1):C5$=C$(A):CL$=CL$(A):T$(1)="E":T$(2)="N":T$(3)="I":
  32.     T$(4)="G":T$(5)="M":T$(6)="A"
  33. 110 FOR Z=1 TO LEN(C5$):L(Z)=ASC(MID$(C5$,Z,1)):NEXT Z:W=1:Y=27:LOCATE ,,0,0,0
  34. 120 LOCATE 3,Y:Q=INT(RND*6+1):IF Q=W THEN COLOR 14
  35. 130 SOUND 1000,.5:PRINT T$(Q);:COLOR 1:P=P1:GOSUB 560:IF Q=W THEN W=W+1:Y=Y+2
  36. 140 IF W<7 GOTO 120 ELSE Q=0
  37. 150 A$=INKEY$:IF A$<>"" GOTO 150 ELSE GOSUB 1490:IF Q<>1 THEN GOSUB 1780
  38. 160 A$=INKEY$:IF A$<>"" GOTO 160 ELSE Q=0:CLS:LOCATE 4,24:COLOR 0:
  39.     PRINT "Part 2 of ENIGMA"
  40. 170 LOCATE 8,19:PRINT "Select level of difficulty:":PRINT:
  41.     PRINT TAB(27)"1. Expert":PRINT:PRINT TAB(27)"2. Average":PRINT:
  42.     PRINT TAB(27)"3. Easy":PRINT
  43. 180 A$=INKEY$:IF A$<>"" GOTO 180 ELSE PRINT:PRINT TAB(27)"Choice: ";:
  44.     SOUND 700,2:SOUND 500,2:SOUND 300,4
  45. 190 A$=INPUT$(1):LE=VAL(A$):IF LE<1 OR LE>3 THEN RUN
  46. 200 A$=INKEY$:IF A$<>"" GOTO 200
  47. 210 SCREEN 1:COLOR 0,0:PSET (0,0),1:PRINT "  CLUE: E(nd) & T(erminate) & S(top)"
  48. 220 LOCATE 23,3:PRINT "You have"LE*60"seconds left ...":TT=TIMER:TTT=LE*60:
  49.     TIME=LE*60:P=P2
  50. 230 IF TIME <=0 GOTO 570 ELSE A=INT(RND*16+1):IF A=7 OR (A>8 AND A<14) GOTO 230
  51. 240 GOSUB 550:IF A$<>"" GOTO 420 ELSE LINE (137,96)-(211,50),B:GOSUB 560
  52. 250 LINE (126,96)-(51,50),B:GOSUB 560
  53. 260 LINE (126,104)-(51,150),B:GOSUB 560
  54. 270 LINE (136,104)-(211,150),B:GOSUB 560
  55. 280 LINE (141,100)-(221,100),B:GOSUB 560
  56. 290 LINE (131,94)-(131,40),B:GOSUB 560
  57. 300 LINE (41,100)-(121,100),B:GOSUB 560
  58. 310 LINE (131,105)-(131,160),B:GOSUB 560
  59. 320 GOSUB 550:IF A$<>"" GOTO 420 ELSE LINE (139,102)-(201,125),B:GOSUB 560
  60. 330 LINE (139,98)-(201,75),B:GOSUB 560
  61. 340 LINE (134,94)-(151,50),B:GOSUB 560
  62. 350 LINE (129,94)-(101,50),B:GOSUB 560
  63. 360 LINE (123,97)-(51,75),B:GOSUB 560
  64. 370 LINE (123,102)-(51,125),B:GOSUB 560
  65. 380 LINE (128,106)-(106,145),B:GOSUB 560
  66. 390 LINE (133,105)-(156,150),B
  67. 400 C=INT(RND*26+65):LOCATE 13,17:PRINT CHR$(C);
  68. 410 GOSUB 560:GOSUB 560:GOSUB 550:IF A$="" GOTO 230
  69. 420 LOCATE 25,1:PRINT SPC(79):LOCATE 25,1:
  70.     IF A$="B" OR A$="I" OR A$="S" GOTO 480
  71.     ELSE IF LEFT$(A$,1)=CHR$(0) THEN SOUND 50,5:
  72.     PRINT "  You're not even close ...";:GOTO 230
  73. 430 IF ASC(A$)>96 AND ASC(A$)<123 THEN SOUND 1500,3:
  74.     PRINT "  You're warm...";:GOTO 450
  75. 440 IF ASC(A$)>64 AND ASC(A$)<91 THEN SOUND 1500,2:SOUND 1000,3:
  76.     PRINT "  You're very warm...";
  77.     ELSE SOUND 50,5:PRINT "  You're cold ...";:GOTO 230
  78. 450 IF A$="T" OR A$="E" OR A$="F" OR A$="t" OR A$="e" OR A$="f" THEN T=T+1:
  79.     IF T/3=T\3 THEN SOUND 1500,3:PRINT " Try an antonym.";:GOTO 230
  80. 460 IF A$="b" OR A$="i" OR A$="s" THEN SOUND 1000,3:PRINT "hot even...";:
  81.     T1=T1+1:IF T1/3=T1\3 THEN SOUND 1500,3:PRINT "Shift gears";
  82. 470 GOTO 230
  83. 480 IF A$="B" AND T(1)=1 GOTO 510 ELSE IF A$="B" THEN T(1)=1:LOCATE 2,9:
  84.     PRINT "B(egin)":PRINT:GOTO 520
  85. 490 IF A$="I" AND T(2)=1 GOTO 510 ELSE IF A$="I" THEN T(2)=1:LOCATE 2,17:
  86.     PRINT "I(nitiate)":PRINT:GOTO 520
  87. 500 IF A$="S" AND T(3)=1 GOTO 510 ELSE IF A$="S" THEN T(3)=1:LOCATE 2,31:
  88.     PRINT "S(tart)":PRINT:GOTO 520
  89. 510 LOCATE 4,1:PRINT SPC(79):LOCATE 4,1:SOUND 800,5:
  90.     PRINT "  "A$" already entered; still";:GOTO 530
  91. 520 LOCATE 4,1:PRINT SPC(79):LOCATE 4,1:SOUND 1000,2:SOUND 1500,3:
  92.     IF T(1)+T(2)+T(3)=2 THEN PRINT "  Another one!";
  93.     ELSE PRINT "  You got one!";
  94. 530 IF T(1)+T(2)+T(3)=3 GOTO 570 ELSE PRINT 3-(T(1)+T(2)+T(3))"to go ...";
  95. 540 GOTO 230
  96. 550 B=INT(RND*4):LOCATE 13,17:PRINT CHR$(A):GOSUB 1400:A$=INKEY$:
  97.     IF A$=CHR$(27) THEN END ELSE RETURN
  98. 560 FOR Z=1 TO P:XX=1:NEXT Z:RETURN
  99. 570 SCREEN 2:SCREEN 0
  100. 580 COLOR 14:IF TIME>0 THEN GOSUB 1670:LOCATE 13,20,0,0,0:
  101.     PRINT "YOU MADE IT IN"(60*LE)-TIME"SECONDS!":GW=1:PLAY "MF":GOTO 610
  102. 590 SOUND 200,3:SOUND 175,3:SOUND 150,3:SOUND 125,3:SOUND 100,3:SOUND 75,3:
  103.     SOUND 40,15
  104. 600 LOCATE 13,10,0,0,0:PRINT "Sorry, time's up.  Better luck next time."
  105. 610 A$=INKEY$:IF A$<>"" GOTO 610
  106. 620 PRINT:PRINT TAB(20)"Continue ...";:A$=INPUT$(1):GP=1:COLOR 1,3,3:CLS
  107. 630 LOCATE 12,30:PRINT "________:":LOCATE 17,10:COLOR 4:FOR Z=65 TO 90:
  108.     PRINT CHR$(Z);CHR$(Z+32);:NEXT Z
  109. 640 A$=INKEY$:IF A$<>"" GOTO 640
  110. 650 A$="":LOCATE 2,10:SOUND 800,5:COLOR 0:
  111.     PRINT "To skip this part, fill in this blank: ________"
  112. 660 Y=49:Y$=C4$:FOR Z=1 TO 8:LOCATE 2,Y:X$=INPUT$(1):
  113.     IF X$<>MID$(Y$,Z,1) THEN SOUND 75,5:SOUND 50,10:LOCATE 2,49:
  114.     PRINT " Sorry ...";:P=P3:GOSUB 560:GOTO 690
  115. 670 SOUND 1000,2:SOUND 1500,3:PRINT X$;:Y=Y+1:NEXT Z:GW=GW+1:GP=2
  116. 680 A$=INKEY$:IF A$<>"" GOTO 680 ELSE GOSUB 1670:GOTO 990
  117. 690 LOCATE 2,1:PRINT SPC(78)
  118. 700 A$=INKEY$:IF A$<>"" GOTO 700
  119.     ELSE LOCATE 23,10,0:SOUND 800,5:PRINT "Begin ...";:A$=INPUT$(1)
  120. 710 A$=INKEY$:IF A$<>"" GOTO 710
  121.     ELSE C=30:LOCATE 23,10:PRINT "You have"LE*90"seconds left ...   ":
  122.     TT=TIMER:TTT=LE*90:GOSUB 1400:QQQ=0:LOCATE 18,35,1,0,7
  123. 720 WHILE C:A=CSRLIN:B=POS(0)
  124. 730 LOCATE A,B:A$=INKEY$:IF A$=CHR$(27) THEN END
  125.     ELSE IF LEFT$(A$,1)=CHR$(0) GOTO 780 ELSE IF A$=CHR$(13) GOTO 850
  126.     ELSE IF A$<>"" THEN SOUND 37,5
  127. 740 QQ=QQ+1:IF QQ/P4=QQ\P4 THEN GOSUB 1400:LOCATE A,B:
  128.     IF QQ=>P5 THEN QQ=0:IF C=30 AND QQQ=0 THEN GOSUB 760
  129. 750 GOTO 730
  130. 760 A=CSRLIN:B=POS(0):LOCATE 4,10:COLOR 10:
  131.     PRINT "Clue:  Follow the arrows to the `mail', then":
  132.     PRINT TAB(17)"either `come back' or `go in' to send it."
  133. 770 LOCATE A,B:RETURN
  134. 780 E=ASC(RIGHT$(A$,1))
  135. 790 IF E=72 THEN A=A-1:GOTO 830
  136. 800 IF E=75 THEN B=B-1:GOTO 830
  137. 810 IF E=77 THEN B=B+1:GOTO 830
  138. 820 IF E=80 THEN A=A+1:GOTO 830
  139. 825 SOUND 37,5:GOTO 730
  140. 830 IF A>24 THEN A=1 ELSE IF A<1 THEN A=24 ELSE IF B>80 THEN B=1
  141.     ELSE IF B<1 THEN B=80
  142. 840 GOTO 730
  143. 850 L=SCREEN(A,B):LOCATE 12,C
  144. 860 ON C-29 GOTO 870,880,890,890,900,910,920,930
  145. 870 IF L=80 GOTO 950 ELSE GOTO 940
  146. 880 IF L=65 GOTO 950 ELSE GOTO 940
  147. 890 IF L=83 GOTO 950 ELSE GOTO 940
  148. 900 IF L=87 GOTO 950 ELSE GOTO 940
  149. 910 IF L=79 GOTO 950 ELSE GOTO 940
  150. 920 IF L=82 GOTO 950 ELSE GOTO 940
  151. 930 IF L=68 GOTO 950
  152. 940 SOUND 50,5:COLOR 4:PRINT "*";:COLOR 1:QQQ=1:P=P1:GOSUB 560:LOCATE 12,C:
  153.     PRINT "_":GOTO 960
  154. 950 SOUND 1000,2:SOUND 1500,3:PRINT CHR$(L);:C=C+1:IF C=38 THEN LOCATE 12,40:
  155.     PRINT "________":C=0
  156. 960 LOCATE 18,35:WEND
  157. 970 GOSUB 1670:LOCATE 20,10:PRINT SPC(60):LOCATE 20,10,0,0,0:COLOR 14:
  158.     PRINT "Well done!";:COLOR 5:
  159.     PRINT "  Now all you need is the Password... (heh,heh)";:PLAY "MF"
  160. 980 A$=INKEY$:IF A$<>"" GOTO 980 ELSE LOCATE 23,10:COLOR 0:
  161.     PRINT "You had"TIME"seconds left.  Continue ...";:A$=INPUT$(1):GW=GW+1:GP=2
  162. 990 COLOR 1,3,3:CLS:T=0:C=8:GOSUB 1000:PLAY "MF":GOTO 1070
  163. 1000 LOCATE 14,10:PRINT "(   ) ";:FOR Z=42 TO 63:PRINT CHR$(Z)" ";:NEXT Z:
  164.      PRINT "!"
  165. 1010 LOCATE 16,10:FOR Z=65 TO 90:PRINT CHR$(Z)" ";:NEXT Z
  166. 1020 LOCATE 18,10:FOR Z=97 TO 122:PRINT CHR$(Z)" ";:NEXT Z:LOCATE 12,26:
  167.      PRINT "Password: ";:IF C<8 THEN PRINT LEFT$(C5$,8-C);
  168. 1030 FOR Z=1 TO C:PRINT "_";:NEXT Z
  169. 1040 LOCATE 3,1:PRINT "CLUES:":PRINT TAB(10)"1. ";:COLOR 14:PRINT "R";:
  170.      COLOR 1:PRINT "(eprint)":PRINT:
  171.      PRINT TAB(10)"2. Take it, then return again to leave it":PRINT
  172. 1050 PRINT TAB(10)"3. ";:IF T<3 THEN PRINT "(watch here for clue later)"
  173.      ELSE LOCATE 8,13:PRINT SPC(60):LOCATE 8,13:COLOR 5:PRINT CL$:COLOR 1
  174. 1060 RETURN
  175. 1070 LOCATE 23,10:PRINT "Begin ...";:A$=INPUT$(1):LOCATE 24,1:PRINT SPC(69);:
  176.      LOCATE 23,10:COLOR 0:PRINT "You have"LE*300"seconds left ...":COLOR 1
  177. 1080 A$=INKEY$:IF A$<>"" GOTO 1080 ELSE QQ=0:TT=TIMER:TTT=LE*300:L=0
  178. 1090 WHILE C:IF L=0 THEN LOCATE 19,35,1,6,7:A=CSRLIN:B=POS(0)
  179. 1100 A$=INKEY$:IF A$="" THEN QQ=QQ+1:IF QQ=P6 THEN QQ=0:GOSUB 1400:
  180.      LOCATE A,B:GOTO 1100 ELSE GOTO 1100
  181. 1110 IF A$=CHR$(27) THEN END ELSE IF A$="R" THEN GOSUB 1000:L=0:GOTO 1280
  182. 1120 IF LEFT$(A$,1)<>CHR$(0) GOTO 1150 ELSE E=ASC(RIGHT$(A$,1)):
  183.      IF E=72 OR E=75 OR E=77 OR E=80 THEN X=A:Y=B:IF E=72 THEN A=A-1
  184.      ELSE IF E=75 THEN B=B-1 ELSE IF E=77 THEN B=B+1 ELSE IF E=80 THEN A=A+1
  185. 1130 IF A>24 THEN A=1 ELSE IF A<1 THEN A=24 ELSE IF B>80 THEN B=1
  186.      ELSE IF B<1 THEN B=80
  187. 1140 LOCATE X,Y:PRINT " ";:LOCATE A,B:PRINT CHR$(L);:LOCATE A,B:GOTO 1100
  188. 1150 IF A$<>CHR$(13) GOTO 1280 ELSE L=SCREEN(A,B):LOCATE ,,,C2,C1:
  189.      IF A<>12 GOTO 1280 ELSE IF B<36 OR B>43 GOTO 1280
  190. 1160 ON B-35 GOTO 1170,1180,1190,1200,1210,1220,1230,1240
  191. 1170 IF L=L(1) GOTO 1260 ELSE GOTO 1250
  192. 1180 IF L=L(2) GOTO 1260 ELSE GOTO 1250
  193. 1190 IF L=L(3) GOTO 1260 ELSE GOTO 1250
  194. 1200 IF L=L(4) GOTO 1260 ELSE GOTO 1250
  195. 1210 IF L=L(5) GOTO 1260 ELSE GOTO 1250
  196. 1220 IF L=L(6) GOTO 1260 ELSE GOTO 1250
  197. 1230 IF L=L(7) GOTO 1260 ELSE GOTO 1250
  198. 1240 IF L=L(8) GOTO 1260
  199. 1250 LOCATE A,B:SOUND 50,5:COLOR 4:PRINT "*";:COLOR 1:P=P1:GOSUB 560:
  200.      LOCATE A,B:PRINT "_":GOTO 1270
  201. 1260 IF C=9-(B-35) THEN C=C-1:SOUND 1000,2:SOUND 1500,3 ELSE SOUND 800,5
  202. 1270 L=0:T=T+1:IF T=3 THEN GOSUB 1040 ELSE IF T>3 THEN T=4
  203. 1280 WEND:GOSUB 1670:CLS:LOCATE 8,25:COLOR 30:PRINT "Congratulations!!":
  204.      COLOR 1:PLAY "MF":PRINT:PRINT TAB(20)"Time remaining:"TIME"seconds":
  205.      PRINT:PRINT:GP=3:GW=GW+1:GOTO 1440
  206. 1290 END
  207. 1300 DATA "3. What?","What's the Password plus?"
  208. 1310 DATA "!enigma!","!Conundrum!"
  209. 1320 DATA " 3 keys ","Llave, clave and tecla"
  210. 1330 DATA "Sphinx  ","More than one think is a rhyme"
  211. 1340 DATA "Help me!","Help yourself!"
  212. 1350 DATA "drowssaP","If you could see the monitor in a mirror"
  213. 1360 DATA "12345678","Count on me to make it easy"
  214. 1370 DATA "stuvwxyz","RIGHT$(abc$,8)"
  215. 1380 DATA "Diamond!","This is the hardest one!"
  216. 1390 DATA "BOND 007","Much more than a license to steal"
  217. 1400 IF GP=0 THEN LOCATE 23,11:SOUND 200,2:SOUND 100,2
  218.      ELSE LOCATE 23,18:SOUND 100,.25
  219. 1410 TIME=TTT-(TIMER-TT):IF GP=0 THEN PRINT INT(TIME);
  220.      ELSE COLOR 4:PRINT INT(TIME);:COLOR 1
  221. 1420 IF GP=0 OR TIME>0 THEN RETURN
  222. 1430 CLS:LOCATE 8,25:IF TIME<=0 THEN SOUND 75,10:SOUND 50,15:
  223.      PRINT "Sorry, time's up!":PRINT:PRINT
  224. 1440 PLAY "MF":PRINT TAB(23)"You solved"GW+1"puzzles.":PRINT
  225. 1450 IF GW<3 THEN PRINT TAB(23)"Better luck next time.":PRINT
  226. 1460 IF LE>1 AND GW>1 THEN PRINT TAB(17)"Next time try difficulty level"LE-1"."
  227. 1470 PRINT:PRINT:IF GW=3 THEN PRINT "  The first ";:COLOR 14:
  228.      PRINT "and last";:COLOR 1:
  229.      PRINT " puzzles may change each time you play -- so play again."
  230. 1480 LOCATE 23,1,1,6,7:COLOR ,,0:END
  231. 1490 A$=INKEY$:IF A$<>"" GOTO 1490 ELSE LOCATE 6,14:SOUND 500,1:SOUND 100,2:
  232.      PRINT "Have you solved the first part before? ";
  233. 1500 A$=INKEY$:IF A$="" GOTO 1500 ELSE IF A$="Y" OR A$="y" THEN Q=1:
  234.      LOCATE 24,14:SOUND 300,3:PRINT "Ready for Part 2.";:P=P7:GOSUB 560:
  235.      LOCATE 24,31:GOTO 1660
  236. 1510 LOCATE 6,14:SOUND 800,5:PRINT "   Stand by . . .                     ";:
  237.      DIM C(26):FOR Y=1 TO 26:IF Y=5 OR Y=25 THEN SOUND 2000,2
  238. 1520 C=INT(RND*26+1):FOR Z=1 TO Y:IF C(Z)=C GOTO 1520
  239.      ELSE IF C(Z)=0 THEN C(Z)=C ELSE NEXT Z
  240. 1530 NEXT Y:SOUND 2000,2:FOR Z=1 TO 10:READ A$(Z):C$(Z)=A$(Z):NEXT Z:
  241.      FOR Y=1 TO 10:FOR Z=1 TO LEN(A$(Y)):A=ASC(MID$(A$(Y),Z,1))
  242. 1540 IF A>64 AND A<91 THEN A=A-64:MID$(A$(Y),Z,1)=CHR$(C(A)+64):GOTO 1560
  243. 1550 IF A>96 AND A<123 THEN A=A-96:MID$(A$(Y),Z,1)=CHR$(C(A)+96)
  244. 1560 NEXT Z:NEXT Y:FOR Z=1 TO 10:X$(Z)=A$(Z):A$(Z)=C$(Z):NEXT Z:SOUND 2000,2:
  245.      SCREEN ,,1,0:Q=1:GOSUB 1570:FOR Z=1 TO 10:A$(Z)=X$(Z):X$(Z)=C$(Z):
  246.      C$(Z)=A$(Z):NEXT Z:SOUND 2000,2:SCREEN ,,2,0:Q=1:GOSUB 1570:SCREEN ,,0,0
  247. 1570 LOCATE 6,10,0:PRINT TAB(10);A$(1):PRINT
  248. 1580 PRINT TAB(10);A$(2):PRINT
  249. 1590 PRINT TAB(6);A$(3)
  250. 1600 PRINT TAB(6);A$(4)
  251. 1610 PRINT TAB(6);A$(5)
  252. 1620 PRINT TAB(6);A$(6):PRINT
  253. 1630 PRINT TAB(6);A$(7):PRINT TAB(6);A$(8):PRINT
  254. 1640 PRINT TAB(6);A$(9)
  255. 1650 PRINT TAB(6);A$(10):PRINT:IF Q=1 THEN Q=0:LOCATE ,,1:RETURN
  256. 1660 A$=INKEY$:IF A$<>"" GOTO 1660 ELSE SOUND 800,5:
  257.      PRINT SPC(5)"Begin ...";:A$=INPUT$(1):RETURN
  258. 1670 PLAY "MB O3 T220 C8C8C8G#C8C8C8G#G#4F4.":RETURN
  259. 1680 DATA "Definition:  something obscure or hard to understand."
  260. 1690 DATA "Synonyms:  mystery, problem, riddle, conundrum, puzzle."
  261. 1700 DATA "ENIGMA has several parts.  All parts are different, and each is more"
  262. 1710 DATA "difficult than the one before. You can reach the third part, even if"
  263. 1720 DATA "you do not complete the second. However, you must complete (or skip)"
  264. 1730 DATA "the first to reach the second, and the third to go on to the rest."
  265. 1740 DATA "Clues will be provided from time to time, but the clues are as enig-"
  266. 1750 DATA "matic as ENIGMA itself and may apply to methods, solutions, or both."
  267. 1760 DATA "There are no instructions except these:  watch the screen carefully,"
  268. 1770 DATA "listen, know your keyboard and use it, and escape when you want to."
  269. 1780 LOCATE 21,6,1,C2,C1:SOUND 1000,2:SOUND 500,3:
  270.      PRINT "Clue:  Use the indian missiles then type a letter ... ";:
  271.      A=CSRLIN:B=POS(0):L$=""
  272. 1790 A$=INKEY$:IF A$="" GOTO 1790 ELSE IF A$=CHR$(27) THEN END
  273. 1800 IF LEFT$(A$,1)<>CHR$(0) GOTO 1840 ELSE E=ASC(RIGHT$(A$,1)):
  274.      IF E<>72 AND E<>75 AND E<>77 AND E<>80 THEN SOUND 37,5:GOTO 1830
  275. 1810 IF E=72 THEN A=A-1 ELSE IF E=75 THEN B=B-1 ELSE IF E=77 THEN B=B+1
  276.      ELSE IF E=80 THEN A=A+1
  277. 1820 IF A>24 THEN A=1 ELSE IF A<1 THEN A=24 ELSE IF B>80 THEN B=1
  278.      ELSE IF B<1 THEN B=80
  279. 1830 LOCATE A,B:GOTO 1790
  280. 1840 SCREEN ,,2,0:L=SCREEN(A,B):SCREEN ,,0,0:IF L<65 OR (L>90 AND L<97)
  281.      OR L>122 OR A<6 OR A>19 THEN SOUND 37,5:GOTO 1790
  282. 1850 L1=ASC(A$):IF L1<65 OR (L1>90 AND L1<97) OR L1>122 THEN SOUND 37,5:
  283.      GOTO 1790 ELSE COLOR 14:PRINT A$:COLOR 30:LOCATE 23,6:SOUND 800,5:
  284.      PRINT "Stand by ...";:COLOR 1:LOCATE A,B
  285. 1860 SCREEN ,,1,0:L3=SCREEN(A,B)
  286. 1870 IF L3<>L1 AND ((L1>96 AND L3<>L1-32) OR (L1<91 AND L3<>L1+32))
  287.      THEN SCREEN ,,0,0:COLOR 4:PRINT "*":COLOR 1:SOUND 50,5:P=P5:GOSUB 560:
  288.      LOCATE 23,6:PRINT SPC(50):LOCATE A,B:PRINT CHR$(L):LOCATE A,B:GOTO 1790
  289. 1880 SCREEN ,,0,0:SOUND 1000,3:LOCATE 23,14,,C2,C1:FOR Y=1 TO 10:
  290.      FOR Z=1 TO LEN(C$(Y)):L2=ASC(MID$(C$(Y),Z,1))
  291. 1890 IF L2=L OR (L>96 AND L<123 AND L2=L-32) OR (L>64 AND L<91 AND L2=L+32)
  292.      THEN IF L2<91 AND L1>96 THEN L$=CHR$(L1-32) ELSE IF L2>96 AND L1<91
  293.      THEN L$=CHR$(L1+32) ELSE L$=CHR$(L1)
  294. 1900 IF L$="" GOTO 1920
  295. 1910 MID$(A$(Y),Z,1)=L$:L$=""
  296. 1920 NEXT Z:NEXT Y:Q=1:GOSUB 1570:LOCATE 23,6,,C2,C1:PRINT SPC(50):
  297.      FOR Z=1 TO 10:IF A$(Z)=X$(Z) THEN NEXT Z:GOTO 1940
  298. 1930 A$=INKEY$:IF A$<>"" GOTO 1930 ELSE LOCATE A,B,1:GOTO 1790
  299. 1940 A$=INKEY$:IF A$<>"" GOTO 1940 ELSE GOSUB 1670:LOCATE 23,6,0,6,7:COLOR 30:
  300.      PRINT "Finished!";:COLOR 1:
  301.      PRINT SPC(5)"Note: Next time this puzzle may be slightly different."
  302. 1950 L=0:L1=0:L2=0:L3=0:Q=0:ERASE A$,C$,X$:L$="":
  303.      PRINT SPC(5)"Ready for Part 2 ...";
  304. 1960 A$=INKEY$:IF A$="" GOTO 1960 ELSE RETURN
  305. 2000 PRINT "Note: ENIGMA was written to be run in compiled format (.EXE)."
  306. 2010 PRINT "      It can be run in this (.BAS) format, but it will run more"
  307. 2020 PRINT "      slowly, particularly in Part 1.":PRINT
  308. 2021 PRINT "      (See listing, lines 46-71 and 2000-2030.)":PRINT
  309. 2030 PRINT "Press any key to begin ...";:A$=INPUT$(1):CLS:LOCATE 10,1:RETURN
  310.