home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64Arcade / BATTLESHIP (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  10.4 KB  |  231 lines

  1. 10 POKE55,0:POKE56,128:CLR:REM  MOVE TOP OF MEMORY DOWN TO 32768
  2. 20 GOTO5000
  3. 97 *
  4. 98 *     MAIN GAME LOOP
  5. 99 *
  6. 100 TI$="000000"
  7. 110 GETIN$:IFIN$=""GOTO150
  8. 120 IFIN$=""THENGOSUB2200
  9. 130 IFIN$=""THENGOSUB2400
  10. 140 IFIN$=" "THENDC=1
  11. 150 R=FNE(.):ONRGOSUB1000,1100,1200,1300,1400,1500,1000,1300:IFDCTHENGOSUB2000
  12. 160 IFTI<TLIMGOTO110
  13. 170 GOTO7000
  14. 997 *
  15. 998 *    SMALL SUB
  16. 999 *
  17. 1000 POKEHOM+X(1)+SW*Y(1),BL:X(1)=X(1)+FND(.):IFX(1)<SWGOTO1020
  18. 1010 X(1)=1:Y(1)=FNB(.):IFY(1)=Y(2)ORY(1)=Y(3)GOTO1010
  19. 1020 POKEHOM+X(1)+SW*Y(1),34:RETURN
  20. 1097 *
  21. 1098 *   MED SUB
  22. 1099 *
  23. 1100 A=HOM+X(2)+SW*Y(2):POKEA,BL:POKEA-1,BL:X(2)=X(2)+FNA(.):IFX(2)<SWGOTO1120
  24. 1110 X(2)=2:Y(2)=FNB(.):IFY(2)=Y(1)ORY(2)=Y(3)GOTO1110
  25. 1120 A=HOM+X(2)+SW*Y(2):POKEA,36:POKEA-1,35:RETURN
  26. 1197 *
  27. 1198 *   LARGE SUB
  28. 1199 *
  29. 1200 A=HOM+X(3)+SW*Y(3):FORI=A-2TOA:POKEI,BL:NEXT
  30. 1210 X(3)=X(3)+FNA(.):IFX(3)<SWGOTO1230
  31. 1220 X(3)=3:Y(3)=FNB(.):IFY(3)=Y(1)ORY(3)=Y(2)GOTO1220
  32. 1230 A=HOM+X(3)+SW*Y(3):POKEA,39:POKEA-1,38:POKEA-2,37:RETURN
  33. 1297 *
  34. 1298 *   SMALL PLANE
  35. 1299 *
  36. 1300 POKEHOM+X(4)+SW*Y(4),BL:X(4)=X(4)-FNA(.):IFX(4)>.GOTO1320
  37. 1310 X(4)=SW:Y(4)=FNC(.):IFY(4)=Y(5)ORY(4)=Y(6)GOTO1310
  38. 1320 POKEHOM+X(4)+SW*Y(4),22:RETURN
  39. 1397 *
  40. 1398 *   MED PLANE
  41. 1399 *
  42. 1400 A=HOM+X(5)+SW*Y(5):POKEA,BL:POKEA+1,BL:X(5)=X(5)-FND(.):IFX(5)>.GOTO1420
  43. 1410 X(5)=39:Y(5)=FNC(.):IFY(5)=Y(4)ORY(5)=Y(6)GOTO1410
  44. 1420 A=HOM+X(5)+SW*Y(5):POKEA,23:POKEA+1,24:RETURN
  45. 1497 *
  46. 1498 *   LARGE PLANE
  47. 1499 *
  48. 1500 A=HOM+X(6)+SW*Y(6):FORI=ATOA+2:POKEI,BL:NEXT
  49. 1510 X(6)=X(6)-FNA(.):IFX(6)>.GOTO1530
  50. 1520 X(6)=38:Y(6)=FNC(.):IFY(6)=Y(4)ORY(6)=Y(5)GOTO1520
  51. 1530 A=HOM+X(6)+SW*Y(6):POKEA,25:POKEA+1,26:POKEA+2,27:RETURN
  52. 1997 *
  53. 1998 *   DEPTH CHARGE
  54. 1999 *
  55. 2000 POKEFQ,38:POKEWV,TRI:PK%=PEEK(D):IFPK%<>BLANDPK%<>63GOTO2030
  56. 2010 POKED,BL:D=D+SW:IFD>33767GOTO2040
  57. 2020 PK%=PEEK(D):IFPK%=BLTHENPOKED,63:POKEWV,.:RETURN
  58. 2030 C=D:GOSUB3000
  59. 2040 D=33266:DC=.:POKEWV,.:RETURN
  60. 2197 *
  61. 2198 *   LEFT GUN
  62. 2199 *
  63. 2200 POKEFQ,10:POKEWV,NOI:POKE33141,42:FORI=1TO10:NEXT:C=.:POKEWV,.
  64. 2210 FORI=33100TO32813STEP-41:POKEI+41,BL:PK%=PEEK(I):IFPK%=BLTHENPOKEI,40:NEXT
  65. 2220 IFPK%<>BLTHENC=I:I=32772:NEXT
  66. 2230 IFCTHENGOSUB3000:RETURN
  67. 2240 POKE32813,BL:RETURN
  68. 2397 *
  69. 2398 *   RIGHT GUN
  70. 2399 *
  71. 2400 POKEFQ,9:POKEWV,NOI:POKE33151,42:FORI=1TO10:NEXT:C=.:POKEWV,.
  72. 2410 FORI=33112TO32839STEP-39:POKEI+39,BL:PK%=PEEK(I):IFPK%=BLTHENPOKEI,41:NEXT
  73. 2420 IFPK%<>BLTHENC=I:I=32800:NEXT
  74. 2430 IFCTHENGOSUB3000:RETURN
  75. 2440 POKE32839,BL:RETURN
  76. 2997 *
  77. 2998 *   PLANE OR SUB HIT
  78. 2999 *
  79. 3000 T=PK%:EX=62+(T<28):GOSUB3500:TG=6:IFT=23ORT=24THENTG=5:GOTO3050
  80. 3010 IFT>36ANDT<40THENTG=3:GOTO3050
  81. 3020 IFT=35ORT=36THENTG=2:GOTO3050
  82. 3030 IFT=22THENTG=4
  83. 3040 IFT=34THENTG=1
  84. 3050 TPT=TPT+PT(TG):PRINT"[145]";SL$;TPT;"     ":X(TG)=-SW*(TG<4):RETURN
  85. 3497 *
  86. 3498 *   EXPLOSION
  87. 3499 *
  88. 3500 POKEWV,SAW:IFEX=62THENPOKEWV,TRI
  89. 3510 FORI=C-2TOC+2:POKEI,BL:NEXT:POKEC,42
  90. 3520 FORI=C-SWTOC+SWSTEPSW:FORI2=-1TO1:A=I+I2:IFPEEK(A)=BLTHENPOKEA,EX
  91. 3530 POKEFQ,20-10*I2:NEXTI2,I:POKEWV,.
  92. 3540 FORI=C-SWTOC+SWSTEPSW:FORI2=-1TO1:A=I+I2:IFPEEK(A)=EXTHENPOKEA,BL
  93. 3550 NEXTI2,I:POKEC,BL:RETURN
  94. 4997 *
  95. 4998 *   INITIALIZE
  96. 4999 *
  97. 5000 PRINT "[147]INITIALIZING......"
  98. 5010 POKE 53280,11:POKE 53281,1:REM  SET SCREEN COLORS
  99. 5011 FORT=55296TO56319:POKET,0:NEXT
  100. 5015 REM  SET SOUND VOICE #1
  101. 5020 POKE 54296,15:REM  VOLUME
  102. 5030 POKE 54277,0:REM  ATTACK-DECAY
  103. 5040 POKE 54278,240:REM  SUSTAIN RELEASE
  104. 5050 POKE 54272,100:REM  LO FREQ.
  105. 5060 FQ=54273:REM  HI FREQ. REGISTER
  106. 5070 WV=54276:REM  WAVE FORM REGISTER
  107. 5080 NOI=129:SAW=33:TRI=17:REM  WAVE FORM VALUES
  108. 5090 HOM=32727:D=33266:REM  SCREEN LOCATIONS
  109. 5100 TLIM=10800:REM  TIME LIMIT (JIFFIES)
  110. 5110 BL=32:SW=40:REM  VALUE TO POKE BLANK, SCREEN WIDTH
  111. 5115 REM  SET RANDOM VALUE FUNCTIONS
  112. 5120 DEF FN A(R)=INT(RND(R)*3+1)
  113. 5130 DEF FN B(R)=INT(RND(R)*9+15)
  114. 5140 DEF FN C(R)=INT(RND(R)*6+3)
  115. 5150 DEF FN D(R)=INT(RND(R)*2+1)
  116. 5160 DEF FN E(R)=INT(RND(R)*8+1)
  117. 5170 ST$="":FORI=1TO11:READA:ST$=ST$+CHR$(A):NEXT:REM  TOP OF SHIP
  118. 5180 DATA 32,66,69,70,73,74,77,78,81,82,32
  119. 5190 SB$="":FORI=1TO11:READA:SB$=SB$+CHR$(A):NEXT:REM  BOTTEM OF SHIP
  120. 5200 DATA 67,68,71,72,75,76,79,80,83,84,85
  121. 5210 SL$="":FORI=43TO47:SL$=SL$+CHR$(I):NEXT:REM  SCORE DISPLAY LINE
  122. 5220 FORI=1TO6:READPT(I):NEXT:REM  POINT VALUES
  123. 5230 DATA 150,40,25,75,20,15
  124. 5240 GOSUB 8000:REM  READ, POKE CUSTOM CHARACTER SET
  125. 5250 GOTO 6000
  126. 5997 *
  127. 5998 *   BEGIN GAME
  128. 5999 *
  129. 6000 X=RND(-TI):PRINT "[147][151]   - BATTLESHIP WAR - BY KEITH MEADE    "
  130. 6010 PRINT "   YOU ARE IN COMMAND OF A BATTLESHIP."
  131. 6020 PRINT "  YOU HAVE 3 MINUTES TO DESTROY AS MANY"
  132. 6030 PRINT "   ENEMY SUBS AND PLANES AS POSSIBLE."
  133. 6040 PRINT " POINT VALUES:"
  134. 6050 PRINT " SMALL SUB = 150[146]      SMALL PLANE = 75"
  135. 6060 PRINT " MED SUB   = 40       MED PLANE   = 20"
  136. 6070 PRINT " LARGE SUB = 25       LARGE PLANE = 15"
  137. 6080 PRINT "     CURSOR KEYS FIRE THE CANNONS."
  138. 6090 PRINT "   SPACE BAR RELEASES A DEPTH CHARGE."
  139. 6100 FOR X=1 TO 40:NEXT
  140. 6110 PRINT "[145]      PRESS ANY KEY TO BEGIN PLAY"
  141. 6120 FOR X=1 TO 40:NEXT
  142. 6130 PRINT "[145]      PRESS ANY KEY TO BEGIN PLAY"
  143. 6140 GET IN$:IF IN$="" GOTO 6100
  144. 6150 PRINT "[147]"
  145. 6160 SCRAM=0:CHSET=2:REM  SCREEN RAM, CHAR SET LOCATION VALUES
  146. 6170 GOSUB 10000:REM  MOVE VIDEO BLOCK, ETC.
  147. 6175 REM  DRAW GAME DISPLAY
  148. 6180 POKE 53281,5:PRINT "[147]":POKE 53281,1:REM  CLEAR, SET COLOR RAM
  149. 6190 FORI=55296TO55695:POKEI,11:NEXT:REM  CHANGE SOME COLOR RAM
  150. 6200 PRINT "[154]";:FORI=1TO40:PRINTCHR$(65);:NEXT:REM  WATER LINE
  151. 6210 PRINT "[145][145][152]";SPC(13);ST$:REM  SHIP TOP
  152. 6220 PRINT SPC(13);SB$:REM  SHIP BOTTEM
  153. 6230 PRINT "[151]";SL$;TPT:REM  SCORE LINE
  154. 6240 FOR I=1 TO 3:X(I)=39:X(I+3)=0:NEXT:REM  RESET TARGET POSITIONS
  155. 6245 POKE53281,15
  156. 6250 GOTO 100
  157. 6997 *
  158. 6998 *    GAME OVER
  159. 6999 *
  160. 7000 POKE 53281,7:REM  CHANGE SCREEN COLOR
  161. 7010 FOR I=1 TO 2000:NEXT:REM  WAIT
  162. 7020 POKE 53281,1:REM  RESTORE SCREEN COLOR
  163. 7030 PRINT"[147]"
  164. 7040 GOSUB 10100:REM  RESTORE VIDEO LOCATION
  165. 7050 POKE 53272,(PEEK(53272) AND 240)+5:REM  RESTORE STANDARD CHARACTER SET
  166. 7060 PRINT "[147]TIME'S UP!!"
  167. 7070 IF TPT>HIGAME THEN HIGAME=TPT
  168. 7080 PRINT "YOUR SCORE =";TPT
  169. 7090 PRINT "HIGH SCORE =";HIGAME
  170. 7100 PRINT "ANOTHER GAME? (Y OR N)"
  171. 7110 GET IN$:IF IN$="Y" THEN TPT=0:GOTO 6000
  172. 7120 IF IN$<>"N" GOTO 7110
  173. 7130 END
  174. 7997 *
  175. 7998 *    POKE CUSTOM CHAR DATA
  176. 7999 *
  177. 8000 M=34816
  178. 8010 FORLIN=8040TO8350STEP10:TT=0:FORI=1TO16:READA:POKEM,A:M=M+1:TT=TT+A:NEXT
  179. 8020 READA:IFTT<>ATHENPRINT"ERROR IN LINE";LIN:STOP
  180. 8030 NEXT:RETURN
  181. 8040 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,204,170,51,425
  182. 8050 DATA 192,96,48,24,12,2,10,10,0,0,170,255,127,59,21,14,1040
  183. 8060 DATA 10,10,170,255,255,187,85,238,0,0,0,0,0,128,160,160,1658
  184. 8070 DATA 10,10,10,10,10,255,255,204,160,160,170,255,255,187,85,238,2274
  185. 8080 DATA 204,255,170,255,255,187,85,238,138,138,138,138,138,255,255,204,3053
  186. 8090 DATA 138,138,138,138,138,255,255,204,204,255,170,255,255,187,85,238,3053
  187. 8100 DATA 204,255,170,255,255,187,85,238,138,138,138,138,138,255,255,204,3053
  188. 8110 DATA 138,138,138,138,138,255,255,204,204,255,170,255,255,187,85,238,3053
  189. 8120 DATA 204,255,170,255,255,187,85,238,128,128,128,128,128,193,197,197,2876
  190. 8130 DATA 3,6,12,24,48,80,84,84,197,197,170,255,255,187,85,238,1925
  191. 8140 DATA 84,84,170,255,255,187,85,238,0,0,170,254,252,184,80,224,2522
  192. 8150 DATA 0,48,49,255,255,49,48,0,3,6,12,255,255,6,3,1,1245
  193. 8160 DATA 1,3,7,255,255,0,0,128,0,0,0,42,170,170,0,0,1031
  194. 8170 DATA 40,80,160,170,170,170,80,40,1,2,5,170,169,170,10,2,1439
  195. 8180 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  196. 8190 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  197. 8200 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  198. 8210 DATA 0,12,12,255,255,0,0,0,0,0,0,0,255,127,63,0,979
  199. 8220 DATA 0,224,224,224,255,255,254,0,0,0,0,0,170,170,42,10,1828
  200. 8230 DATA 2,2,2,2,170,170,170,170,128,128,128,128,168,170,170,168,1876
  201. 8240 DATA 128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,510
  202. 8250 DATA 0,146,84,56,214,56,84,146,112,249,193,241,121,25,249,240,2216
  203. 8260 DATA 225,243,131,131,131,131,243,225,227,243,51,51,51,51,243,227,2604
  204. 8270 DATA 227,51,51,227,227,51,51,51,224,224,15,207,192,15,239,224,2276
  205. 8280 DATA 60,102,102,102,102,102,60,0,24,24,24,24,24,24,24,0,798
  206. 8290 DATA 124,6,6,12,48,96,126,0,124,6,6,28,6,6,124,0,718
  207. 8300 DATA 102,102,102,127,6,6,6,0,126,96,96,124,6,6,124,0,1029
  208. 8310 DATA 60,96,96,124,102,102,60,0,126,6,12,24,24,24,24,0,880
  209. 8320 DATA 60,102,102,60,102,102,60,0,60,102,102,62,6,6,60,0,986
  210. 8330 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  211. 8340 DATA 0,0,0,0,0,0,0,0,192,6,48,0,3,192,12,0,453
  212. 8350 DATA 112,216,112,0,14,27,14,0,0,0,0,60,126,60,0,0,741
  213. 9995 *
  214. 9996 *  MOVE VIDEO BLOCK TO #3
  215. 9997 *    SET SCREEN RAM AND
  216. 9998 *    CHAR SET LOCATIONS
  217. 9999 *
  218. 10000 IF SCRAM<0 OR SCRAM>15 THEN PRINT " SCREEN RAM LOCATION ERROR ":STOP
  219. 10010 IF CHSET<0 OR CHSET>15 THEN CHSET=4
  220. 10020 POKE 56576,5:REM  VIDEO BLOCK LOCATION
  221. 10030 POKE 53272,16*SCRAM+CHSET:REM  SCREEN RAM,CHAR SET LOCATION
  222. 10040 POKE 648,128+4*SCRAM:REM  NOTIFY BASIC
  223. 10050 RETURN
  224. 10097 *
  225. 10098 * RESTORE VIDEO TO NORMAL
  226. 10099 *
  227. 10100 POKE 56576,7:REM  VIDEO BLOCK
  228. 10110 POKE 53272,20:REM  SCREEN RAM, CHAR SET
  229. 10120 POKE 648,4:REM  BASIC'S SCREEN LOCATION
  230. 10130 RETURN
  231.