home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib30b.dsk / SURPRISE.ATTACK.bas < prev    next >
BASIC Source File  |  2023-02-26  |  7KB  |  241 lines

  1. 10  REM **********************
  2. 20  REM *SURPRISE.ATTACK     *
  3. 30  REM *BY JEFF G. COX      *
  4. 40  REM *COPYRIGHT (C) 1987  *
  5. 50  REM *BY MICROSPARC, INC. *
  6. 60  REM *CONCORD, MA 01742   *
  7. 70  REM **********************
  8. 80  REM * INITIALIZE GAME OPTIONS
  9. 90 AS =  PEEK(768)
  10. 100 BS =  PEEK(769)
  11. 110 BKEYS$ = "ASD": REM LEFT, CENTER, RIGHT
  12. 120 DS =  PEEK(770)
  13. 130 FS =  PEEK(771)
  14. 140 PS =  PEEK(772)
  15. 150 TS =  PEEK(773)
  16. 160 TKEYS$ = "OK.;L": REM UP, LEFT, DOWN, RIGHT, STOP
  17. 170 XS =  PEEK(774)
  18. 180 YS =  PEEK(775)
  19. 190  REM * INITIALIZE SAFAST INTERFACE
  20. 200 CD$ =  CHR$(4): REM CONTROL-D
  21. 210 START% = 16384: REM MACHINE CODE STARTS AT $4000
  22. 220  PRINT CD$;"BLOAD SAFAST,A";START%
  23. 230  POKE START% +81,AS
  24. 240 LBN% = START% +83: REM  BASE ARRAY LOCATION
  25. 250  POKE START% +87,BS
  26. 260  FOR I = 1 TO 3
  27. 270  POKE START% +88 +I,128 + ASC( MID$ (BKEYS$,I,I))
  28. 280  NEXT I
  29. 290 LCN% = START% +92: REM  CITY ARRAY LOCATION
  30. 300 LDS% = START% +99: REM  DIFFICULTY LOCATION
  31. 310 LERR% = START% +100: REM  ERROR LOCATION
  32. 320  POKE LERR%,0
  33. 330  POKE START% +101,FS
  34. 340  FOR I = 1 TO 5
  35. 350  POKE START% +104 +I,128 + ASC( MID$ (TKEYS$,I,I))
  36. 360  NEXT I
  37. 370  POKE START% +110,TS
  38. 380  POKE START% +114,XS
  39. 390 LXSP% = START% +115: REM  MISSILE X SPEED LOCATION
  40. 400  POKE START% +121,YS
  41. 410 LYSP% = START% +122: REM  MISSILE Y SPEED LOCATION
  42. 420 LSHPE% = START% +140: REM  SHAPE TABLE LOCATION
  43. 430  REM * INITIALIZE COLORS AND SHAPES
  44. 440 BLACK = 0
  45. 450 LIME = 1
  46. 460 WHITE = 3
  47. 470 CITY = 1
  48. 480 MISSILE = 2
  49. 490 HBYTE =  INT(LSHPE%/256): REM HIGH BYTE
  50. 500 LBYTE = LSHPE% -HBYTE *256: REM LOW BYTE
  51. 510  POKE 232,LBYTE: POKE 233,HBYTE
  52. 520  REM * INITIALIZE REST
  53. 530 SPKR =  -16336: REM APPLE SPEAKER
  54. 540  GOSUB 2170
  55. 550  REM * RETURN HERE FOR EACH PLAY
  56. 560  REM * RESET VARIABLES FIRST
  57. 570  POKE LBN% +1,10: REM # OF MISSILES AT BASE 1,
  58. 580  POKE LBN% +2,10: REM  BASE 2, AND
  59. 590  POKE LBN% +3,10: REM  BASE 3; <0 IF DESTROYED
  60. 600  POKE LCN% +0,6: REM  NUMBER OF CITIES LEFT
  61. 610  FOR J = 1 TO 6
  62. 620  POKE LCN% +J,1: REM CITY #J IS OK IF 1, DESTROYED IF 0
  63. 630  NEXT J
  64. 640 DA = DS: REM ADJUSTABLE DIFFICULTY FACTOR
  65. 650  POKE LDS%,DA
  66. 660 SCRE = 0: REM TOTAL SCORE
  67. 670 EXTRA = 500 *DA: REM SCORE REQUIRED FOR EXTRA CITY IN ARCADE MODE
  68. 680 ALARM = 1: REM ALARM FLAG
  69. 690 ERR = 0
  70. 700  REM * DRAW LANDSCAPE
  71. 710  TEXT : HOME : HGR 
  72. 720  ROT= 0
  73. 730  SCALE= 1
  74. 740  HCOLOR= LIME
  75. 750  FOR YA = 159 TO 149  STEP  -1
  76. 760  HPLOT 0,YA TO 279,YA
  77. 770  NEXT YA
  78. 780  REM * DRAW CITIES
  79. 790  HCOLOR= WHITE
  80. 800 YA = 148
  81. 810  FOR I = 1 TO 6
  82. 820 XA = 31 *I
  83. 830  IF I >3  THEN XA = XA +31
  84. 840  IF  PEEK(LCN% +I) >0  THEN  DRAW CITY AT XA,YA
  85. 850  NEXT I
  86. 860  REM * DRAW BASE AND MISSILES
  87. 870  FOR I = 1 TO 3
  88. 880  IF  PEEK(LBN% +I) <0  THEN 950
  89. 890  HCOLOR= BLACK
  90. 900 XA = 124 *I -122
  91. 910  FOR YA = 150 TO 158
  92. 920  HPLOT XA,YA TO XA +28,YA
  93. 930  NEXT YA
  94. 940  GOSUB 1950: REM * DRAW MISSILES
  95. 950  NEXT I
  96. 960  REM * TIME TO WAKE UP
  97. 970  IF ALARM < >1  THEN 1050
  98. 980 ALARM = 0
  99. 990  VTAB 21
  100. 1000  FLASH : PRINT "RED ALERT";: NORMAL 
  101. 1010  PRINT ":  ENEMY MISSILES APPROACHING."
  102. 1020  PRINT "ACTIVATE DEFENSES.   PREPARE TO ATTACK."
  103. 1030  GOSUB 2090: REM * SOUND ALARM
  104. 1040  REM * OPEN MISSILE DOORS
  105. 1050  FOR I = 1 TO 3
  106. 1060  IF  PEEK(LBN% +I) <0  THEN 1150
  107. 1070 XA = 124 *I -122
  108. 1080  FOR X = 1 TO 5
  109. 1090  HCOLOR= BLACK
  110. 1100  HPLOT XA +X,149
  111. 1110  HCOLOR= LIME
  112. 1120  HPLOT XA +X +6,148
  113. 1130  FOR J = 1 TO 100: NEXT J
  114. 1140  NEXT X
  115. 1150  NEXT I
  116. 1160  HOME 
  117. 1170  REM * INITIALIZE FRAME VARIABLES
  118. 1180  POKE LXSP%,9 *DA +10: REM  ICBM X SPEED LOW BYTE
  119. 1190  POKE LXSP% +1,0: REM  AND HIGH BYTE
  120. 1200  POKE LXSP% +2,150: REM  INTERCEPTOR X SPEED LOW BYTE
  121. 1210  POKE LXSP% +3,0: REM  AND HIGH BYTE
  122. 1220  POKE LYSP%,9 *DA +10: REM  ICBM Y SPEED LOW BYTE
  123. 1230  POKE LYSP% +1,0: REM  AND HIGH BYTE
  124. 1240  POKE LYSP% +2,150: REM  INTERCEPTOR Y SPEED LOW BYTE
  125. 1250  POKE LYSP% +3,0: REM  AND HIGH BYTE
  126. 1260  REM * TIME TO GO DO IT!
  127. 1270  CALL START%
  128. 1280  IF  PEEK(LERR%) < >0  THEN 1760
  129. 1290  IF  PEEK(LCN%) <1  THEN 1830
  130. 1300  REM  * CALCULATE SCORE
  131. 1310  FOR I = 1 TO 3
  132. 1320 BNI =  PEEK(LBN% +1)
  133. 1330  IF BNI >0  AND BNI < = 10  THEN SCRE = SCRE +BNI *DA
  134. 1340  NEXT I
  135. 1350  IF  PEEK(LCN%) >0  THEN SCRE = SCRE + PEEK(LCN%) *(50 +50 *AS)
  136. 1360  REM * BUMP UP DIFFICULTY
  137. 1370 DA = DA +1: IF DA >9  THEN DA = 9
  138. 1380  POKE LDS%,DA
  139. 1390  IF AS < >0  THEN 1640
  140. 1400  REM * DISPLAY SCORE IN ARCADE MODE
  141. 1410  HOME 
  142. 1420  VTAB 21
  143. 1430  PRINT "YOUR SCORE IS NOW ";SCRE
  144. 1440  IF EXTRA >SCRE  THEN 1540
  145. 1450  REM * ADD A BONUS CITY
  146. 1460 EXTRA = EXTRA +500 *DA
  147. 1470  FOR I = 1 TO 6
  148. 1480  IF  PEEK(LCN% +I) >0  THEN 1530
  149. 1490  POKE LCN% +I,1
  150. 1500  POKE LCN%, PEEK(LCN%) +1
  151. 1510 I = 6
  152. 1520  PRINT "PLUS, YOU RECEIVE A BONUS CITY!"
  153. 1530  NEXT I
  154. 1540  IF PS = 0  THEN  FOR I = 1 TO 500: NEXT I: GOTO 1590
  155. 1550  POKE  -16368,0: REM IGNORE PREVIOUS KEYPRESSES
  156. 1560  PRINT "PRESS RETURN TO CONTINUE ";
  157. 1570  GET KEY$
  158. 1580  REM * RESUPPLY BASES
  159. 1590  POKE LBN% +1,10
  160. 1600  POKE LBN% +2,10
  161. 1610  POKE LBN% +3,10
  162. 1620  GOTO 710
  163. 1630  REM * RESUPPLY BASES FOR CONTINUOUS MODE
  164. 1640 ADD = (13 -DA)/2
  165. 1650  FOR I = 1 TO 3
  166. 1660 BNI =  PEEK(LBN% +I)
  167. 1670  IF BNI <0  OR BNI > = 10  THEN 1730
  168. 1680  IF  PEEK(LCN% +2 *I -1) >0  THEN BNI = BNI +ADD
  169. 1690  IF  PEEK(LCN% +2 *I) >0  THEN BNI = BNI +ADD
  170. 1700  IF BNI >10  THEN BNI = 10
  171. 1710  POKE LBN% +I,BNI
  172. 1720  GOSUB 1950: REM * DRAW MISSILES
  173. 1730  NEXT I
  174. 1740  GOTO 1180
  175. 1750  REM * HANDLE ERROR MESSAGES
  176. 1760 ERR =  PEEK(LERR%): REM ERROR NUMBER
  177. 1770  TEXT 
  178. 1780  HOME 
  179. 1790  PRINT "PROGRAM ABORTED DUE TO FATAL ERROR: ";ERR
  180. 1800  GOSUB 2090: REM  SOUND ALARM
  181. 1810  END 
  182. 1820  REM * DISPLAY FINAL SCORE
  183. 1830  VTAB 21
  184. 1840  PRINT "YOUR FINAL SCORE IS ";SCRE
  185. 1850  REM * PLAY AGAIN?
  186. 1860  PRINT 
  187. 1870  INPUT "PLAY AGAIN (Y/N)? ";INPT$
  188. 1880  IF INPT$ < >"Y"  AND INPT$ < >"N"  THEN 1830
  189. 1890  IF INPT$ = "Y"  THEN 570
  190. 1900  PRINT 
  191. 1910  TEXT : HOME 
  192. 1920  END 
  193. 1930  REM * HERE ARE THE UTILITY ROUTINES
  194. 1940  REM * DRAW MISSILES FOR BASE I
  195. 1950  IF  PEEK(LBN% +I) <1  THEN 2050
  196. 1960  HCOLOR= WHITE
  197. 1970  ROT= 0
  198. 1980  SCALE= 1
  199. 1990 XA = 124 *I -119:YA = 152
  200. 2000  RESTORE 
  201. 2010  FOR J = 1 TO  PEEK(LBN% +I)
  202. 2020  READ X,Y
  203. 2030  DRAW MISSILE AT XA +X,YA +Y
  204. 2040  NEXT J
  205. 2050  RETURN 
  206. 2060  DATA  0,0,5,0,10,0,15,0,20,0: REM  ROW 1
  207. 2070  DATA  0,4,5,4,10,4,15,4,20,4: REM  ROW 2
  208. 2080  REM * SOUND ALARM
  209. 2090  FOR I = 1 TO 4
  210. 2100  FOR J = 1 TO 20
  211. 2110 A =  PEEK(SPKR) + PEEK(SPKR) + PEEK(SPKR)
  212. 2120  NEXT J
  213. 2130  FOR J = 1 TO 50: NEXT J
  214. 2140  NEXT I
  215. 2150  RETURN 
  216. 2160  REM * INTRODUCTORY DISPLAY
  217. 2170  GOSUB 2090
  218. 2180  TEXT : HOME 
  219. 2190  PRINT "** ALERT ** ALERT ** ALERT ** ALERT **"
  220. 2200  PRINT 
  221. 2210  PRINT "FROM:  NORAD WARNING CENTER"
  222. 2220  PRINT "TO  :  REGIONAL ABM COMMANDERS"
  223. 2230  PRINT 
  224. 2240  PRINT "WE HAVE CONFIRMED REPORTS THAT A"
  225. 2250  PRINT "NUMBER OF ENEMY NUCLEAR MISSILES"
  226. 2260  PRINT "ARE APPROACHING THE CONTINENTAL U.S."
  227. 2270  PRINT "INTELLIGENCE INDICATES A STEADILY"
  228. 2280  PRINT "INCREASING ATTACK WITH SINGLE ICBM'S,"
  229. 2290  PRINT "MULTIPLE ICBM'S, AND MANEUVERABLE"
  230. 2300  PRINT "CRUISE MISSILES.  THE PRESIDENT HAS"
  231. 2310  PRINT "DECLARED DEFCON 4 (GENERAL WAR)."
  232. 2320  PRINT "ACTIVATE YOUR REGIONAL ABM DEFENSES."
  233. 2330  PRINT 
  234. 2340  PRINT "GOOD LUCK, YOUR COUNTRYMEN ARE"
  235. 2350  PRINT "DEPENDING ON YOU."
  236. 2360  PRINT 
  237. 2370  POKE  -16368,0
  238. 2380  PRINT "ACKNOWLEDGE RECEIPT OF MESSAGE BY"
  239. 2390  PRINT "PRESSING RETURN...";
  240. 2400  GET KEY$
  241. 2410  RETURN