home *** CD-ROM | disk | FTP | other *** search
/ The Glitch Apple Disk Collection / 2014.glitch.apple.collection.zip / indexed / 9B.DSK / NUKEWAR.bas < prev    next >
BASIC Source File  |  2014-09-09  |  12KB  |  256 lines

  1. 10  DIM M%(63,1),MS%(63,1),S%(1),MB%(1),BB%(1),SB%(1),AB%(1),BA%(1),FA%(1),SA%(1),AA%(1)
  2. 20  DIM MT%(7),BF%(2),N$(1)
  3. 30 S$ = "CMBSA*.":Q1% = 0:Q2% = 0:AM% = 165:BF%(2) = 0
  4. 40  FOR I = 0 TO 1:MB%(I) = 0:BB%(I) = 0:SB%(I) = 0:AB%(I) = 0:BA%(I) = 0:FA%(I) = 0:SA%(I) = 0:AA%(I) = 0:BF%(I) = 0: NEXT 
  5. 50  DEF  FN R(X) =  INT(X * RND(1))
  6. 60  DEF  FN M8(X) = X -8 * INT(X/8)
  7. 100  TEXT : HOME : VTAB 8: PRINT  TAB( 14);"** NUKEWAR **": PRINT 
  8. 110  PRINT  TAB( 12);"COPYRIGHT 1980 BY": PRINT 
  9. 120  PRINT  TAB( 15);"AVALON HILL": PRINT  TAB( 11);"MICROCOMPUTER GAMES"
  10. 130  VTAB 24: INPUT "YOUR COUNTRY'S NAME? ";N$(0)
  11. 140  INPUT "ENEMY COUNTRY'S NAME? ";N$(1)
  12. 150  CALL  -936: POKE 34,20: VTAB 1: PRINT  TAB( 3);N$(0);: PRINT  TAB( 26);N$(1)
  13. 160  VTAB 3: PRINT  TAB( 17);"COLD WAR"
  14. 170  VTAB 5: HTAB 3:A$ = "A B C D E F G H": PRINT A$;: HTAB 26: PRINT A$:A$ = " . . . . . . . ."
  15. 180  FOR I = 1 TO 8: VTAB 6 +I: HTAB 1: PRINT I;A$;"      ";I;A$: NEXT 
  16. 190 Y% = 1955 + FN R(10):M9% =  FN R(33):Y0% = Y%
  17. 200  FOR I = 1956 TO Y%:AM% =  INT(.91 *AM%): NEXT 
  18. 270  FOR I = 0 TO 63: FOR J = 0 TO 1:M%(I,J) = 0:MS%(I,J) = 0: NEXT : NEXT : FOR I = 0 TO 1: FOR J = 1 TO 10
  19. 280 L =  FN R(64): IF M%(L,I)  THEN 280
  20. 285 M%(L,I) = 1 +(J >8) +(J >9): IF   NOT I  THEN  GOSUB 5200
  21. 290  NEXT : NEXT 
  22. 300 Y% = Y% +1: GOSUB 5300:AM% =  INT(.91 *AM%)
  23. 310  INPUT "COLD WAR ORDERS? ";A$: IF A$ = "W"  THEN 550
  24. 315 B% = 2:S%(0) = 8: IF A$ = "S"  THEN B% = 1:S%(0) = 24
  25. 320  IF  FN R(100) <Y% -Y0%  THEN 590
  26. 335 I = 0: FOR J = 1 TO B%
  27. 340  INPUT "TYPE OF BASE TO BUILD? ";A$
  28. 350 T% = 2 *(A$ = "M") +3 *(A$ = "B") +4 *(A$ = "S"  AND Y% >1964) +5 *(A$ = "A"  AND Y% >1969)
  29. 360  IF   NOT T%  THEN  PRINT "IMPROPER TYPE. TRY AGAIN.": GOTO 340
  30. 370  INPUT "LOCATION TO BUILD BASE? ";A$: GOSUB 5400: IF L =  -1  THEN 385
  31. 380  IF   NOT (M%(L,I)  OR ((T% = 4)  AND (L >8)  AND (L <55)  AND ( FN M8(L +1) >1)))  THEN 390
  32. 385  PRINT "IMPROPER LOCATION.": GOTO 370
  33. 390 M%(L,I) = T%: GOSUB 5200: NEXT 
  34. 400 B% = 1:S%(1) = 24: IF  FN R(10)  THEN B% = 2:S%(1) = 8
  35. 410 I = 1:J = 0
  36. 420 J = J +1:I1% = 2: IF  FN R(100) <M9%  THEN 427
  37. 421  IF Y% <1965  THEN I1% = 2 +( FN R(4) <3)
  38. 422  IF Y% >1964  AND Y% <1970  THEN L =  FN R(9):I1% = 2 +(L <8) +(L <5)
  39. 425  IF Y% >1969  THEN L =  FN R(16):I1% = 2 +(L <15) +(L <12) +(L <7)
  40. 427 K% = 0
  41. 430 K% = K% +1
  42. 435 L =  FN R(64): IF I1% = 4  AND L >8  AND L <55  AND  FN M8(L +1) >1  THEN 435
  43. 440  IF   NOT M%(L,I)  THEN 450
  44. 441  IF K% = 20  THEN 580
  45. 442  GOTO 430
  46. 450 M%(L,I) = I1%: IF J <B%  THEN 420
  47. 460  FOR I = 0 TO 1: FOR J = 1 TO S%(  NOT I):L =  FN R(64):MS%(L,I) = M%(L,I): IF I  THEN  GOSUB 5200
  48. 475  NEXT : NEXT 
  49. 480  FOR I = 0 TO 1: FOR L = 0 TO 63:T% = M%(L,I): IF  FN R(500)  OR T% <2  OR T% >5  THEN 540
  50. 490  IF I  THEN  PRINT "<CTRL-G>"
  51. 495  PRINT "<CTRL-G>NUCLEAR ACCIDENT IN ";N$(I);"!"
  52. 500  GOSUB 10005:I =   NOT I
  53. 505 R% =  -1 + FN R(3): IF (R% =  -1  AND  FN M8(L) = 0)  OR (R% = 1  AND  FN M8(L) = 7)  THEN 540
  54. 510 U% =  -1 + FN R(3): IF (U% =  -1  AND L <8)  OR (U% = 1  AND L >55)  THEN 540
  55. 515  IF   NOT (R%  OR U%)  THEN 540
  56. 520 L = L +R% +8 *U%: GOSUB 10005:L = L -R% -8 *U%:I =   NOT I
  57. 540  NEXT : NEXT :Q2% = 0: GOTO 300
  58. 550 Q1% = 1:SU% = 0: IF  FN R(4) >0  THEN 600
  59. 551  PRINT "ORDER TO FIRST STRIKE HAS BEEN DIS-     OBEYED.": IF  FN R(100) <Y% -Y0%  THEN 590
  60. 552 Q1% = 0: GOTO 400
  61. 580 Y% = Y% +1
  62. 590 Q2% = 1
  63. 600  PRINT "<CTRL-G><CTRL-G><CTRL-G><CTRL-G><CTRL-G>": GOSUB 5300: VTAB 3: HTAB 17: PRINT "        ";
  64. 610  FLASH : HTAB 18: PRINT "HOT";: HTAB 22: PRINT "WAR": NORMAL 
  65. 615  HOME 
  66. 620 Q3% = Q1%:Q4% = Q2%: IF S%(0) = 24  THEN Q1% = 1
  67. 625 Q% = Q1%:W% = 0
  68. 630  FOR I = 0 TO 1: FOR L = 0 TO 63:T% = M%(L,I): IF T% <2  OR T% = 6  THEN 730
  69. 635  ON T% -1 GOTO 640,660,680,700
  70. 640 MB%(I) = MB%(I) +1: GOTO 730
  71. 660  IF  FN R(10) > = 1 +2 *Q%  THEN BB%(I) = BB%(I) +1: GOTO 730
  72. 670 P% = 5 + FN R(4):C% =  FN R(P% +1):P% = P% -C%:BA%(I) = BA%(I) +P%:FA%(I) = FA%(I) +C%: GOTO 720
  73. 680  IF  FN R(10) > = 5 +Q%  THEN SB%(I) = SB%(I) +1: GOTO 730
  74. 690 SA%(I) = SA%(I) +1: GOTO 720
  75. 700  IF  FN R(100) > = 25 +25 *Q%  THEN AB%(I) = AB%(I) +1: GOTO 730
  76. 710 AA%(I) = AA%(I) +5 + FN R(4)
  77. 720  GOSUB 7040
  78. 730  NEXT :Q% = Q2%: NEXT 
  79. 740  IF   NOT (BB%(0) +MB%(0) +SB%(0) +AB%(0))  THEN Q1% = 0
  80. 750  IF   NOT (BB%(1) +MB%(1) +SB%(1) +AB%(1))  THEN Q2% = 0
  81. 760  HTAB 1: VTAB 16: IF BB%(0) +BA%(0)  THEN  PRINT "BOMBERS AIRBORNE"
  82. 770  HTAB 1: VTAB 17: IF BB%(0) +FA%(0)  THEN  PRINT "FIGHTERS AIRBORNE"
  83. 780  HTAB 1: VTAB 18: IF SB%(0) +SA%(0)  THEN  PRINT "MISSILE SUBS AT SEA"
  84. 790  HTAB 1: VTAB 19: IF AB%(0) +AA%(0)  THEN  PRINT "ABM'S ON ALERT"
  85. 795  GOSUB 5500
  86. 800  IF Q1% <1  THEN 920
  87. 805 I = 0
  88. 850  INPUT "BASE TO ACTIVATE? ";A$: GOSUB 5400
  89. 860  IF L =  -1  THEN  PRINT "WRONG LOCATION.": GOTO 850
  90. 870 T% = M%(L,I): IF T% <2  OR T% = 6  THEN 850
  91. 875  ON T% -1 GOTO 880,890,900,910
  92. 880  GOSUB 6000: GOTO 920
  93. 890  GOSUB 7000: GOTO 915
  94. 900  GOSUB 8000: GOTO 915
  95. 910  GOSUB 9000
  96. 915  GOSUB 5500
  97. 920  IF Q2% <1  THEN 980
  98. 921 I = 1:L =  FN R(64)
  99. 930 L = L +1:L = L *(L <64):T% = M%(L,I): IF T% <2  OR T% = 6  THEN 930
  100. 935  ON T% -1 GOTO 940,950,960,970
  101. 940  GOSUB 6000: GOTO 980
  102. 950  GOSUB 7000: GOTO 980
  103. 960  GOSUB 8000: GOTO 980
  104. 970  GOSUB 9000
  105. 980  FOR I = 0 TO 1: IF (  NOT I  AND   NOT Q1%)  OR (I  AND   NOT Q2%)  THEN 1050
  106. 985  FOR L = 0 TO 63:T% = M%(L,I): IF T% <2  OR T% = 6  THEN 1040
  107. 990  ON T% -1 GOTO 1000,1010,1020,1030
  108. 1000  IF  FN R(100) >14  THEN 1040
  109. 1001  GOSUB 6000: GOTO 1040
  110. 1010  IF  FN R(10)  THEN 1040
  111. 1011  GOSUB 7000: GOTO 1035
  112. 1020  IF  FN R(100) >4  THEN 1040
  113. 1021  GOSUB 8000: GOTO 1035
  114. 1030  IF  FN R(100) >24  THEN 1040
  115. 1031  GOSUB 9000
  116. 1035  IF   NOT I  THEN  GOSUB 5500
  117. 1040  NEXT 
  118. 1050  NEXT 
  119. 1060  FOR I = 0 TO 1:P7% = SA%(I): IF   NOT P7%  THEN 1105
  120. 1061  FOR P8 = 1 TO P7%
  121. 1065  IF  FN R(100) > = 5 *W%  THEN 1100
  122. 1066 J = 5 + FN R(4):SA%(I) = SA%(I) -1
  123. 1070  IF I  THEN 1090
  124. 1071  PRINT "MISSILE SUB ";SB%(I) +SA%(I) +1;" ON STATION."
  125. 1080  PRINT J;" MISSILES TO FIRE.": PRINT "TARGETS:";
  126. 1090  GOSUB 6030
  127. 1100  NEXT 
  128. 1105  NEXT 
  129. 1110  FOR I = 0 TO 1: IF  FN R(10) > = W%  OR   NOT BA%(I)  THEN 1220
  130. 1120  IF BA%(I) <5  THEN J = BA%(I)
  131. 1122  IF BA%(I) > = 5  THEN J = 4 + FN R(BA%(I) -3)
  132. 1123 BA%(I) = BA%(I) -J
  133. 1130  PRINT J;" BOMBERS ATTACK ";N$(  NOT I);"."
  134. 1140  IF I = 1  AND FA%(0) +AA%(0)  THEN  PRINT "AIR DEFENSE COMMAND ALERT!"
  135. 1150  IF   NOT FA%(  NOT I)  THEN 1170
  136. 1151  IF  FN R(10) <9  THEN J = J -1
  137. 1152  IF   NOT J  THEN 1210
  138. 1160  IF  FN R(10) <8  THEN FA%(  NOT I) = FA%(  NOT I) -1
  139. 1161  GOTO 1150
  140. 1170  IF   NOT AA%(  NOT I)  THEN 1190
  141. 1171 AA%(  NOT I) = AA%(  NOT I) -1
  142. 1180  IF  FN R(2)  THEN J = J -1
  143. 1181  IF   NOT J  THEN 1210
  144. 1182  GOTO 1170
  145. 1190  PRINT J;" BOMBERS SURVIVE OVER ";N$(  NOT I);"."
  146. 1200  FOR J2 = 1 TO J: GOSUB 12010: GOSUB 10000: NEXT : GOSUB 5500: GOTO 1220
  147. 1210  PRINT "ALL BOMBERS DESTROYED BY AIR DEFENSE.": GOSUB 5500
  148. 1220  NEXT 
  149. 1230 Q% = 0:Q5% = SA%(0) *6 +BA%(0):Q6% = SA%(1) *6 +BA%(1)
  150. 1235  FOR I = 0 TO 1:Q2% = 0:MB%(I) = 0:BB%(I) = 0:SB%(I) = 0:AB%(I) = 0: FOR L = 0 TO 63
  151. 1240 T% = M%(L,I): IF T% <2  OR T% = 6  THEN 1300
  152. 1241  ON T% -1 GOTO 1250,1260,1270,1280
  153. 1250 MB%(I) = MB%(I) +1: GOTO 1290
  154. 1260 BB%(I) = BB%(I) +1: GOTO 1290
  155. 1270 SB%(I) = SB%(I) +1: GOTO 1290
  156. 1280 AB%(I) = AB%(I) +1
  157. 1290 Q% = Q% +1:Q2% = Q2% +1
  158. 1300  NEXT : NEXT :Q1% = Q% -Q2%:Q% = 3 *Q% +Q5% +Q6%:Q5% = Q1% +Q5%/3:Q6% = Q2% +Q6%/3: IF   NOT Q%  THEN 1370
  159. 1310 W% = W% +1: IF  FN R(2)  THEN 800
  160. 1320  PRINT "THE PREMIER OF ";N$(1): PRINT "IS ON THE HOT LINE"
  161. 1330  INPUT "DO YOU WISH TO NEGOTIATE? ";A$
  162. 1340  IF  MID$ (A$,1,1) < >"Y"  THEN 800
  163. 1341  IF 100 *(Q5% +1)/(Q6% +1) > FN R(100)  THEN  PRINT "NEGOTIATIONS SUCEED.": GOTO 1380
  164. 1350  PRINT "NEGOTIATIONS FAIL.": GOTO 800
  165. 1370  PRINT "ALL WEAPONS ARE EXPENDED."
  166. 1380  PRINT "NUCLEAR WAR IS OVER.": HTAB 17: VTAB 3: PRINT "        ": HTAB 1: VTAB 24
  167. 1390  POKE 34,15
  168. 1400 Q% = 0: FOR I = 0 TO 1:P2% = 0: FOR L = 0 TO 63:T% = M%(L,I): IF I  THEN  GOSUB 5200
  169. 1410  IF T% = 6  THEN 1420
  170. 1415 Q% = Q% +1:P2% = P2% +1: IF T% = 1  THEN Q% = Q% +10:P2% = P2% +10
  171. 1420  NEXT : NEXT :P1% = Q% -P2%: IF  FN R(2) *Q3%  THEN 1430
  172. 1421 Q3% = 0
  173. 1430  IF  FN R(2) *Q4%  THEN 1440
  174. 1431 Q4% = 0
  175. 1440  IF Q3% >0  THEN  PRINT "WORLD OPINION IS AGAINST ";N$(0);"."
  176. 1450  PRINT N$(0);"'S POPULATION: ";P1%;",000,000"
  177. 1460  IF Q4% >0  THEN  PRINT "WORLD OPINION IS AGAINST ";N$(1);"."
  178. 1470  PRINT N$(1);"'S POPULATION: ";P2%;",000,000"
  179. 1480 S% = (P1% +1) *(Q4% +1):R% = (P2% +1) *(Q3% +1): IF S% >R%  THEN 1490
  180. 1481 R% = 10 *R%/S%:S% = 1:P% = P2%: GOTO 1500
  181. 1490 R% = 10 *S%/R%:S% = 0:P% = P1%
  182. 1500  IF P% <29  THEN 1510
  183. 1501  IF R% > = 30  THEN 1520
  184. 1502  IF R% > = 20  THEN 1530
  185. 1503  IF R% > = 15  THEN 1540
  186. 1510  PRINT "NEITHER COUNTRY GAINS ADVANTAGE.": GOTO 1560
  187. 1520  PRINT "TOTAL";: GOTO 1550
  188. 1530  PRINT "MAJOR";: GOTO 1550
  189. 1540  PRINT "MINOR";
  190. 1550  PRINT " VICTORY FOR ";N$(S%);"."
  191. 1560  INPUT "AGAIN (Y/N)? ";A$: IF A$ < >"Y"  THEN  TEXT : HOME : END 
  192. 1570  GOTO 30
  193. 5200  VTAB 7 + INT(L/8): HTAB 3 +2 * FN M8(L) +23 *I
  194. 5205  VTAB 7 + INT(L/8): HTAB 3 +2 * FN M8(L) +23 *I
  195. 5210  PRINT  MID$ (S$,M%(L,I) +7 *(  NOT M%(L,I)),1)
  196. 5220  HTAB 1: VTAB 24: RETURN 
  197. 5300  VTAB 2: HTAB 19: PRINT Y%: HTAB 1: VTAB 24: RETURN 
  198. 5400  IF  LEN(A$) <2  THEN 5420
  199. 5401 L =  ASC( MID$ (A$,2,1)) -49: IF L <0  OR L >7  THEN 5420
  200. 5402 K% =  ASC( MID$ (A$,1,1)) -65: IF K% <0  OR K% >7  THEN 5420
  201. 5410 L = 8 *L +K%: RETURN 
  202. 5420 L =  -1: RETURN 
  203. 5500  VTAB 16: HTAB 21: PRINT "  ";: HTAB 21: IF BB%(0) +BA%(0)  THEN  PRINT BA%(0)
  204. 5510  VTAB 17: HTAB 21: PRINT "  ";: HTAB 21: IF BB%(0) +FA%(0)  THEN  PRINT FA%(0)
  205. 5520  VTAB 18: HTAB 21: PRINT "  ";: HTAB 21: IF SB%(0) +SA%(0)  THEN  PRINT SA%(0)
  206. 5530  VTAB 19: HTAB 21: PRINT "  ";: HTAB 21: IF AB%(0) +AA%(0)  THEN  PRINT AA%(0)
  207. 5540  HTAB 1: VTAB 24: RETURN 
  208. 6000 J = 5 + FN R(4): GOSUB 7040:MB%(I) = MB%(I) -1: IF I  THEN 6030
  209. 6010  PRINT J;" MISSILES READY AT BASE ";MB%(0) +1;".": PRINT "TARGETS:";
  210. 6030  FOR J2 = 0 TO J -1: ON I +1 GOSUB 11000,12000
  211. 6032 MT%(J2) = L: NEXT 
  212. 6035  IF I  AND AA%(0)  THEN  PRINT "<CTRL-G><CTRL-G>ABM ALERT: INCOMING ICBM'S"
  213. 6040  FOR J2 = 0 TO J -1:L = MT%(J2): IF   NOT AA%(  NOT I)  OR   NOT  FN R(10)  THEN 6060
  214. 6050 AA%(  NOT I) = AA%(  NOT I) -1: IF  FN R(10)  THEN 6090
  215. 6060  IF  FN R(100) > = AM%  THEN 6080
  216. 6061 R% =  -1 + FN R(3):U% =  -1 + FN R(3)
  217. 6070  IF (R% =  -1  AND  FN M8(L) = 0)  OR (R% = 1  AND  FN M8(L) = 7)  THEN 6090
  218. 6075  IF (U% =  -1  AND L <8)  OR (U% = 1  AND L >55)  THEN 6090
  219. 6076 L = L +R% +8 *U%
  220. 6080  GOSUB 10000
  221. 6090  NEXT : IF   NOT I  THEN  PRINT 
  222. 6091  GOSUB 5500: RETURN 
  223. 7000 J = 5 + FN R(4):P% =  FN R(J +1): IF I  THEN 7030
  224. 7010  PRINT J;" PLANES READY AT AIRBASE ";BB%(0);".":BB%(0) = BB%(0) -1
  225. 7020  INPUT "NUMBER TO ARM AS FIGHTERS? ";P%: IF P% >J  THEN P% = J
  226. 7021  IF P% <0  THEN P% = 0
  227. 7030 BA%(I) = BA%(I) +J -P%:FA%(I) = FA%(I) +P%
  228. 7040 M%(L,I) = 0: IF   NOT I  THEN  GOSUB 5200
  229. 7050  RETURN 
  230. 8000  IF   NOT I  THEN  PRINT "MISSILE SUB ";SB%(0);" AT SEA."
  231. 8010  GOSUB 7040:SA%(I) = SA%(I) +1:SB%(I) = SB%(I) -1: RETURN 
  232. 9000  IF   NOT I  THEN  PRINT "ABM BASE ";AB%(0);" ACTIVATED."
  233. 9010  GOSUB 7040:AA%(I) = AA%(I) +5 + FN R(4):AB%(I) = AB%(I) -1: RETURN 
  234. 10000 I =   NOT I
  235. 10005 T% = M%(L,I): IF I  AND (T% >1)  AND (T% <6)  THEN Q2% = Q2% -1
  236. 10008 M%(L,I) = 6: GOSUB 5200:MS%(L,I) = 6
  237. 10010  FOR I1 = 1 TO 10:I2 =  PEEK( -16336)
  238. 10020  FOR I2 = 1 TO 2: NEXT : NEXT :I =   NOT I: RETURN 
  239. 11000  POKE 2007 +3 *J2,186: POKE 2008 +3 *J2,96
  240. 11010 C =  PEEK( -16384): IF C <127  THEN 11010
  241. 11020  POKE  -16368,0: IF C <193  OR C >200  THEN 11010
  242. 11021  POKE 2008 +3 *J2,C:C = C -192
  243. 11025  POKE 2009 +3 *J2,96
  244. 11030 R =  PEEK( -16384): IF R <127  THEN 11030
  245. 11040  POKE  -16368,0: IF R <177  OR R >184  THEN 11030
  246. 11041  POKE 2009 +3 *J2,R:R = R -176
  247. 11045  PRINT "<CTRL-G>";
  248. 11050 L = C +8 *R -9: RETURN 
  249. 12000 I1% = 0: GOTO 12030
  250. 12010 I1% = 1
  251. 12030 L1% =  FN R(64):L = L1%: IF BF%(I +  NOT I1%) >1  THEN  RETURN 
  252. 12040 L = L +1:L = L *(L <64):T% = MS%(L,  NOT I): IF I1%  THEN T% = M%(L,  NOT I)
  253. 12051  IF (T%  OR BF%(I +  NOT I1%))  AND T% < >6  THEN  RETURN 
  254. 12060  IF L < >L1%  THEN 12040
  255. 12061 BF%(I +  NOT I1%) = BF%(I +  NOT I1%) +1: IF BF%(I +  NOT I1%) = 1  THEN 12030
  256. 12070 L =  FN R(64): RETURN