home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / vmsnet / startrek / part12 < prev    next >
Encoding:
Internet Message Format  |  1993-04-06  |  14.5 KB

  1. Path: uunet!cs.utexas.edu!swrinde!zaphod.mps.ohio-state.edu!howland.reston.ans.net!usc!elroy.jpl.nasa.gov!decwrl!concert!lester.appstate.edu!pembvax1.pembroke.edu!rennie
  2. From: rennie@pembvax1.pembroke.edu
  3. Newsgroups: vmsnet.sources.games
  4. Subject: Star Trek - Part [12/18]
  5. Date: 7 Apr 93 10:58:49 EDT
  6. Organization: Pembroke State University
  7. Lines: 433
  8. Message-ID: <1993Apr7.105849.1@pembvax1.pembroke.edu>
  9. NNTP-Posting-Host: papa.pembroke.edu
  10. Xref: uunet vmsnet.sources.games:654
  11.  
  12. -+-+-+-+-+-+-+-+ START OF PART 12 -+-+-+-+-+-+-+-+
  13. X`09IF(IPOOP.EQ.0.OR.NENHERE.EQ.0)GO TO 15
  14. X`09CALL PROUT ('PHASERS NOT USABLE; BATTLE COMPUTER DATA FOLLOWS:',49)
  15. X`09GO TO 870
  16. X15`09IDIDIT=0
  17. X`09IF(IFAST.NE.0) ENERGY=ENERGY+200.0
  18. X`09RETURN
  19. X 16   ENERGY=ENERGY-200.
  20. X      IFAST = 1`20
  21. XC--------READ IN AMOUNT OF ENERGY TO EXPEND ON PHASER FIRE
  22. X 20   CALL SCAN
  23. X`09POW=FNUM
  24. X      IF(NENHERE .EQ. 0) GO TO 35`20
  25. X      K=1`20
  26. X      IF(KEY.EQ.IHALPHA) GOTO 23     `20
  27. X`09IF(KEY.EQ.IHREAL) GOTO 28
  28. X      IF(.NOT.CROP(AITEM,2HNO)) GOTO 23`20
  29. X`09NO=1
  30. X`09CALL SCAN
  31. X`09POW=FNUM
  32. X 23   IF(KEY .EQ. IHALPHA .AND.CROP(AITEM,6HMANUAL))GO TO 90
  33. X      IF(DAMAGE(11).NE.0)GO TO 80`20
  34. X      IF(DAMAGE(1).NE.0) GO TO 81`20
  35. XC------- IS KEY EOL,AUTO OR PHAS POWER?`20
  36. X      IF(KEY .NE. IHALPHA)GO TO 2301
  37. X      IF(CROP(AITEM,9HAUTOMATIC))GO TO 27`20
  38. X      GO TO 24
  39. XC-------- DIFFERENTIATE BETWEEN EOL AND PHASER POWER(COMMAND MODE)
  40. X 2301 IF(KEY .NE. IHEOL)GO TO 30
  41. XC------ REQUEST MANUAL OR AUTO
  42. X 24   CALL MANORA`20
  43. X      CALL SCAN`20
  44. X`09IF(FNUM.EQ.-1.) GO TO 15
  45. X      IF(KEY .NE. IHALPHA) GO TO 24`20
  46. X      IF(CROP(AITEM,6HMANUAL))GO TO 90`20
  47. X      IF( .NOT.CROP(AITEM,9HAUTOMATIC))GO TO 24
  48. XC-------- INFORM USER OF AVAIL ENERGY AND READ IN DESIRED PHASER POWER
  49. X 2409 IF(NENHERE .EQ. 0) GO TO 26`20
  50. X      CALL CRAM(46HPHASERS LOCKED ON TARGET.  ENERGY AVAILABLE = )
  51. X25`09CALL CRAMF(ENERGY,0,2)
  52. X`09CALL CREND
  53. X`09IF (IPOOP.EQ.0) GO TO 26
  54. X      CALL CRAM(1H()
  55. X`09IREC=0
  56. X`09DO 29 K=1,NENHERE
  57. X29`09IREC=ABS(KPOWER(K))/(PHASFAC*0.9**KDIST(K))*(1.01+0.05*RANF(0))+1.
  58. X`091 +IREC
  59. X      CALL CRAMI(IREC,0)
  60. X      CALL CRAM(3H)  )
  61. X      CALL CRAM(22HUNITS TO FIRE AT ENEMY)`20
  62. X      CALL CREND
  63. X 26   CALL PROMPT(15HUNITS TO FIRE: ,15)
  64. X 27   CALL SCAN
  65. X`09POW=FNUM
  66. X28`09KEY1=KEY
  67. X      IF(KEY .EQ. IHEOL) GO TO 2409`20
  68. X 30   CALL SCAN`20
  69. XC*** READ IN ITM FIRST CHAR IN COMMON SCANBRF
  70. X`09KEY2=KEY
  71. X`09KEY=KEY1
  72. X      IF(KEY2 .EQ. IHEOL)GO TO 35`20
  73. X`09IF(ITM.NE.1HN) GOTO 34
  74. X`09NO=1
  75. X`09GO TO 35
  76. X 34   CALL BEGPARD
  77. X      GO TO 15
  78. X 35   IF(KEY .NE. IHREAL) GO TO 26
  79. X      IF(POW .LT. ENERGY)GO TO 41    `20
  80. X      CALL CRAM(18HENERGY AVAILABLE= )
  81. X      GO TO 25
  82. X 41   IF(POW .GE. 5.0)GO TO 46
  83. X`09IF (POW.LE.0) GO TO 15
  84. X`09CALL PROUT (45HMINIMUM ENERGY FOR AUTOMATIC FIRE IS 5 UNITS.,45)
  85. X      GO TO 15
  86. XC--------PRINT MESSAGE FOR SHIELD CONTROL, AND DECIDE IF MALFUNCTION OCCURS.
  87. X 42   CALL SKIP(1)
  88. X      IF(RANF(0.).LT.0.995) GO TO 45
  89. XC--------SOMETHING BAD HAS HAPPENED.
  90. X      CALL REDALRT
  91. X      CALL SKIP(1)
  92. X      CALL PROUT(36HSULU:  "SHIELD CONTROL MALFUNCTION!"  ,36)      `20
  93. X      CALL SKIP(1)
  94. X      CALL PROUT(35HSAFETY INTERLOCK OVERRIDES PHASERS.   ,35)`20
  95. X      RETURN
  96. X 45   CALL PROUT(16HSHIELDS LOWERED.  ,16)`20
  97. X      GO TO IWHERE
  98. XC--------ALLOCATE ENERGY AMONG KLINGONS ACCORDING TO NEAREST FIRST
  99. XC        STRATEGY AND COMPUTE HITS
  100. X 46   IF(IFAST .EQ. 0) GO TO 47`20
  101. X      ASSIGN 47 TO IWHERE`20
  102. X      GO TO 42
  103. X 47   ENERGY=ENERGY-POW`20
  104. X      EXTRA=POW`20
  105. X      IF(NENHERE.EQ. 0)GO TO 75`20
  106. XC--------- LOOP THAT DISTRIBUTES HITS IN AUTO MODE IS HERE.`20
  107. X`09EXTRA=0.0
  108. X`09POWREM=POW
  109. X      DO 50 I=1,NENHERE`20
  110. X`09HITS(I)=0.
  111. X`09IF (POWREM .LE. 0.) GO TO 50
  112. X      HITS   (I)=ABS(KPOWER(I))/(PHASFAC*0.90**KDIST(I))
  113. X      OVER=(.01+.05*RANF(0))*HITS(I)
  114. X`09TEMP=POWREM
  115. X`09POWREM=POWREM-HITS(I)-OVER
  116. X      IF(POWREM .LE. 0.) HITS(I)=AMIN1(TEMP,HITS(I))
  117. X      IF(POWREM .LE. 0.) OVER=0.
  118. X      EXTRA=EXTRA+OVER
  119. X 50   CONTINUE
  120. X      IF(POWREM .GT. 0.) EXTRA=EXTRA+POWREM`20
  121. X      CALL HITEM(HITS)     `20
  122. X      IF(EXTRA.EQ.0 .OR. ALLDONE.NE.0) GO TO 200
  123. XC--------- INFORM OF OVERKILL.
  124. X75    IF(ITHERE.EQ.0) GO TO 78
  125. X      CALL CRAM3AS
  126. X      CALL CRAM(19HTHOLIAN WEB ABSORBS  )      `20
  127. X      IF(NENHERE.GT.0) CALL CRAM(7H EXCESS  )  `20
  128. X      CALL CRAMDMP(16H PHASER ENERGY.           )`20
  129. X      GO TO 200  `20
  130. X78    CALL CRAMF(EXTRA,0,2)`20
  131. X      CALL CRAMDMP(25H EXPENDED ON EMPTY SPACE.)
  132. X      GO TO 200`20
  133. XC-------- MANUAL SECTION BEGINS HERE.`20
  134. XC-------- INFORM OF IMPOSED MANUAL CONDITION.`20
  135. X 80   CALL PROUT(42HBATTLE COMPUTER DAMAGED; MANUAL FIRE ONLY.,42)`20
  136. X      GO TO 84
  137. X 81   CALL SKIP(1)
  138. X      CALL PROUT(13H---WORKING---,13)
  139. X      CALL PROUT(27HSHORT-RANGE-SENSORS-DAMAGED,27)
  140. X      CALL PROUT(43HINSUFFICIENT-DATA-FOR-AUTOMATIC-PHASER-FIRE,43)
  141. X      CALL PROUT(24HMANUAL-FIRE-MUST-BE-USED,24)`20
  142. X      CALL SKIP(1)
  143. X 84   CALL CRAM(18HENERGY AVAILABLE= )
  144. X      CALL CRAMF(ENERGY-0.006,0,2)
  145. X      CALL CREND
  146. XC--------- LOOP FOR DESIRED INDIVIDUAL HITS.
  147. X870`09K=1`20
  148. X 87   IF(IPOOP .EQ. 0) GO TO 88`20
  149. XC--------PRINT BATTLE-COMPUTER RECOMMENDATION`20
  150. X      CALL CRAM(1H()
  151. X      IREC=ABS(KPOWER(K))/(PHASFAC*0.9**KDIST(K))*(1.01+0.05*RANF(0))+1.
  152. X      CALL CRAMI(IREC,0)
  153. X      CALL CRAM(3H)  )
  154. X 88   CALL CRAM(17HUNITS TO FIRE AT )`20
  155. X      II=KX(K)
  156. X      JJ=KY(K)
  157. X      IENM=QUAD(II,JJ)
  158. X      CALL CRAMENA(IENM,2,II,JJ)
  159. X`09IF(IDOIT.EQ.1)GO TO 89
  160. XC--------PHASERS CAN'T ACTUALLY BE FIRED - LOOP BACK FOR NEXT COMPUTER
  161. XC--------READOUT, OR TERMINATE IF THAT'S ALL
  162. X`09CALL CREND
  163. X`09K=K+1
  164. X`09IF(K.LE.NENHERE)GO TO 87
  165. X`09GO TO 15
  166. X 89   CALL CRAM(3H:  )
  167. X      CALL CRENDNO
  168. X 90   IF(K .EQ. 1)POW=0`20
  169. X      CALL SCAN
  170. X`09HITS(K)=FNUM
  171. X`09IF(KEY .EQ. IHREAL)GO TO 95`20
  172. X`09IF (KEY.NE.IHEOL) GO TO 91
  173. X`09IF(K .EQ. 1) GO TO 84
  174. X`09GO TO 87
  175. XC-------- BEG PARDON UNLESS KEY IS PHASER POWER, END-OF-LINE, OR 'NO'.
  176. X91`09IF (ITM.NE.1HN) GO TO 34
  177. X`09NO=1
  178. X`09GO TO 90
  179. XC-------- IF HIT LESS THAN ZERO, ABORT PHASERS.`20
  180. X 95   IF(HITS(K) .LT. 0)GO TO 15
  181. X      POW=POW+HITS(K)`20
  182. XC-------- IF TOTAL AMOUNT OF POWER REQUESTED IS TOO MUCH, INFORM
  183. XC-------- AND START OVER.`20
  184. X      IF(POW .LT. ENERGY)GO TO 97`20
  185. X      CALL PROUT(26HAVAILABLE ENERGY EXCEEDED.,26)`20
  186. X      GO TO 84
  187. X 97   K=K+1`20
  188. X      IF(K .LE. NENHERE) GO TO 90`20
  189. XC--------IF TOTAL REQUESTED IS ZERO, ABORT PHASERS
  190. X      IF(POW .EQ. 0.0) GO TO 15`20
  191. X      CALL SCAN`20
  192. X      IF(KEY .NE. IHALPHA) GO TO 9701`20
  193. X`09IF(ITM.EQ.1HN) NO=1
  194. X 9701 ENERGY=ENERGY-POW`20
  195. X      IF(IFAST .EQ. 0) GO TO 98`20
  196. X      ASSIGN 98 TO IWHERE`20
  197. X      GO TO 42
  198. XC-------- GO DELIVER THE HITS.
  199. X 98   CALL HITEM(HITS)
  200. X      IDIDIT=1
  201. XC--------SAY SHIELDS RAISED OR MALFUNCTION, IF NECESSARY.`20
  202. X 200  IF(ALLDONE.NE.0) RETURN`20
  203. X      IF(IFAST .EQ. 0) GO TO 210
  204. X      CALL SKIP(1)
  205. X      IF(NO.NE.0) GO TO 202`20
  206. X      IF(RANF(0) .LT. 0.99) GO TO 205`20
  207. X      CALL PROUT(66HSULU:  "SIR, THE HIGH-SPEED SHIELD CONTROL HAS MALFU
  208. X     CNCTIONED . . .,66)`20
  209. X      CALL PROUT(`20
  210. X     +51H        CLICK  CLICK  POP . . . NO RESPONSE, SIR!"   ,51)  `20
  211. X 202  SHLDUP =0`20
  212. X      GO TO 210`20
  213. X 205  CALL PROUT(15HSHIELDS RAISED.,15)
  214. XC--------CHECK FOR PHASER OVERHEAT
  215. X210`09IF(POW .LE. 1500.) RETURN
  216. X`09CHEKBRN=(POW-1500.)*.00038
  217. X      IF(RANF(0.) .GT. CHEKBRN) RETURN
  218. XC--------DO YOU SMELL SMOKE?
  219. X      CALL SKIP(1)
  220. X      CALL PROUT(48HWEAPONS OFFICER SULU: "PHASERS OVERHEATED, SIR."
  221. X`091    ,48)
  222. X`09DAMAGE(3) = DAMFAC*(1.0 + RANF(0))*(1.+CHEKBRN)
  223. X      RETURN
  224. X      END`20
  225. $ CALL UNPACK TRPHASERS.FOR;1 1610966166
  226. $ create 'f'
  227. X      SUBROUTINE PHOTONS
  228. XC
  229. XC`0913-JUN-79
  230. XC`09CORRECT 'THOLIAN DISAPPEARS' MESSAGE
  231. XC`09DON'T CHARGE PLAYER FOR A PLANET DESTROYED BY AN ENEMY
  232. XC
  233. X`09INCLUDE 'TREKCOM/NOLIST'
  234. X`09LOGICAL*1 IQUAD,ISHIP
  235. X`09REAL*8 AITEM
  236. X`09COMMON/SCANBF/KEY,AITEM
  237. X`09EQUIVALENCE (FNUM,AITEM),(SHIP,ISHIP)
  238. X      DIMENSION TARG(3,2), COURSE(3)
  239. X      REAL KP`20
  240. X      INTEGER BOT,TOP,TOP2
  241. X      EQUIVALENCE (CRACKS(1),HIT),(CRACKS(4),KSHOT)`20
  242. X      EQUIVALENCE (KSTUF(1),ITHERE),(KSTUF(2),ITHX),(KSTUF(3),ITHY)`20
  243. X`09DATA IHDOC/'DO'/
  244. XC--------CHECK TORPEDO COUNT AND STATUS OF PHOTON TUBES`20
  245. X`09IDIDIT=1
  246. X`09KSHOT=0
  247. X      IF(DAMAGE(4) .EQ. 0)GO TO 10
  248. X      CALL PROUT(21HPHOTON TUBES DAMAGED.,21)
  249. X      GO TO 3005
  250. X10    IF(TORPS .NE.0)GO TO 15`20
  251. X      CALL PROUT(18HNO TORPEDOES LEFT.,18)`20
  252. X      GO TO 3005
  253. XC--------SCAN AND MAKE SENSE OF COMMAND INPUT LINE
  254. X 15   CALL SCAN`20
  255. X`09TEMP=FNUM
  256. X      N = TEMP + 0.5
  257. X      IF(KEY .EQ. IHREAL) GO TO 30
  258. X 16   CALL CRAMI(TORPS,0)`20
  259. X      CALL CRAMDMP(16H TORPEDOES LEFT.)`20
  260. X      CALL PROMPT(30HNUMBER OF TORPEDOES TO FIRE:   ,30)
  261. X      GO TO 15
  262. X 30   IF(N .LE. 0) GO TO 3005`20
  263. X      IF(N .LE. 3) GO TO 31`20
  264. X      CALL PROUT(33HMAXIMUM OF 3 TORPEDOES PER BURST.,33)
  265. X      GO TO 16
  266. X 3004 CALL BEGPARD
  267. X 3005 IDIDIT=0
  268. X      RETURN
  269. X 31   IF(N .LE. TORPS) GO TO 32`20
  270. X      GO TO 16
  271. XC--------ALL TORPEDOES FIRED AT SAME SPOT.
  272. X 3101 DO 3102 I=2,N`20
  273. X      TARG(I,1)=TARG(1,1)`20
  274. X 3102 TARG(I,2)=TARG(1,2)`20
  275. X      GO TO 36
  276. XC--------READ IN TARGET SECTORS`20
  277. X 32   DO 33 I=1,N`20
  278. X      CALL SCAN`20
  279. X`09TARG(I,1)=FNUM
  280. X      IF((I.EQ.1) .AND. (KEY.EQ.IHEOL)) GO TO 34
  281. X      IF((I .EQ. 2) .AND. (KEY .EQ. IHEOL))  GO TO 3101`20
  282. X      IF (KEY .NE. IHREAL) GO TO 3004`20
  283. X      CALL SCAN`20
  284. X`09TARG(I,2)=FNUM
  285. X 33   IF (KEY .NE. IHREAL) GO TO 3004`20
  286. X      GO TO 36
  287. X 34   DO 35 I=1,N`20
  288. X`09CALL CHEW
  289. X      CALL CRAM (33HTARGET SECTOR FOR TORPEDO NUMBER )
  290. X      CALL CRAMI(I,0)`20
  291. X`09CALL CRAM(3H:  )
  292. X`09CALL CRENDNO
  293. X      CALL SCAN`20
  294. X`09TARG(I,1)=FNUM
  295. X      IF (KEY .NE. IHREAL) GO TO 3004`20
  296. X      CALL SCAN`20
  297. X`09TARG(I,2)=FNUM
  298. X 35   IF( KEY .NE. IHREAL) GO TO 3004`20
  299. XC--------CHECK FOR INVALID TARGETS.`20
  300. X 36   DO 37 I=1,N`20
  301. X      DO 37 J=1,2`20
  302. X      TEMP = TARG(I,J)
  303. X`09IF(TEMP.EQ.-1.) GO TO 3005
  304. X 37   IF ((TEMP .LT. 0.999) .OR. (TEMP .GT. 10.001)) GO TO 3004`20
  305. XC--------COMPUTE COURSE FOR EACH TORPEDO.`20
  306. X      DO 40 I=1,N`20
  307. X      DELTX = 0.1*(TARG(I,2)-SECTY)`20
  308. X      DELTY=0.1*(SECTX-TARG(I,1))`20
  309. XC--------DO NOT ALLOW ENTERPRISE TO SHOOT A TORPEDO AT ITSELF.
  310. X      IF((DELTX .NE. 0) .OR. (DELTY .NE. 0)) GO TO 40`20
  311. X      CALL SKIP(1)
  312. X      CALL PROUT(41HSPOCK:  "BRIDGE TO SICKBAY.  DR. MC COY,  ,41)  `20
  313. X      CALL PROUT(36H  I RECOMMEND AN IMMEDIATE REVIEW OF,36)`20
  314. X      CALL PROUT(41H  THE CAPTAIN'S PSYCHOLOGICAL PROFILE."   ,41)  `20
  315. X      GO TO 3005
  316. X 40   COURSE (I) = 1.90985932*ATAN2(DELTX,DELTY)
  317. XC--------BEGIN OUTER LOOP FOR MOVING <N> TORPEDOES
  318. X      I=0`20
  319. X 50   I=I+1`20
  320. X      IF(I .GT. N) GO TO 115
  321. X      IF(CONDIT .NE. IHDOC ) TORPS=TORPS-1
  322. X      J=I`20
  323. X`09STARTX=SECTX
  324. X`09STARTY=SECTY
  325. X      R=(RANF(0)+RANF(0))*0.5 -0.5
  326. X      IF(ABS(R) .LT. 0.49) GO TO 5709`20
  327. X      R=(RANF(0)+1.2)*R`20
  328. XC-------- TORPEDO MISFIRES
  329. X      IF(N.GT.1) GO TO 5706`20
  330. X      CALL PROUT(21H***TORPEDO MISFIRES.  ,21)  `20
  331. X      GO TO 5707
  332. X5706  CALL CRAM(18H***TORPEDO NUMBER )
  333. X      CALL CRAMI(I,0)`20
  334. X      CALL CRAMDMP(10H MISFIRES.)`20
  335. X      IF(I . LT.  N) CALL PROUT(31H   REMAINDER OF BURST ABORTED. ,31)`20
  336. X      I=N`20
  337. X5707  IF(RANF(0.) .GT. .200000)GO TO 5709`20
  338. XC------- CHECK IF MISFIRE DOES SHIP DAMAGE. IF SO DON'T GIVE TRACK.`20
  339. X      CALL PROUT(35H***PHOTON TUBES DAMAGED BY MISFIRE.,35)
  340. X      DAMAGE(4)=DAMFAC*(1.0+2.0*RANF(0))
  341. X      GO TO 115`20
  342. X5709  IF(SHLDUP.NE.0 .OR. CONDIT.EQ.IHDOC ) R=R+0.001*SHLD*R
  343. X      AC=COURSE(I)+0.25*R`20
  344. X      GO TO 5710
  345. XC*`20
  346. X      ENTRY KPHOTON`20
  347. XC*`20
  348. XC----------- SET FLAG FOR KLINGON    `20
  349. XC--------ENEMY FIRES PHOTON TORPEDO`20
  350. X`09IX=KX(KSHOT)
  351. X`09IY=KY(KSHOT)
  352. X`09I=1
  353. X`09N=1
  354. X`09STARTX=IX
  355. X`09STARTY=IY
  356. X`09DELTX=0.1*(SECTY-STARTY)
  357. X`09DELTY=0.1*(STARTX-SECTX)
  358. X      AC=1.90985932*ATAN2(DELTX,DELTY)
  359. X      TEMP=RANF(0)-0.5
  360. X      R=TEMP*(1.0+0.001*KPOWER(KSHOT))+RANF(0.)*TEMP     `20
  361. X      AC=AC+0.25*R
  362. X      IQUAD=QUAD(IX,IY)`20
  363. X      CALL CRMSENA(IQUAD,0,IX,IY)`20
  364. X      CALL CRAMDMP(22H FIRES PHOTON TORPEDO.  )`20
  365. XC--------CHECK FOR KLINGON MISFIRE
  366. X      IF(ABS(TEMP) .LT. 0.45) GO TO 5710
  367. XC--------ENEMY TORPEDO MISFIRED.  DETERMINE DAMAGE.`20
  368. X      ANGLE=(15.0-AC)*0.5235988      `20
  369. X      HIT=200.0 + 600.0*RANF(0)`20
  370. X      LL=KSHOT
  371. X      CALL PROUT(21H***TORPEDO MISFIRES!    ,21)`20
  372. X      GO TO 68
  373. X 5710 ANGLE=(15.0-AC)*0.5235988`20
  374. X      IF(N .EQ. 1)GO TO  58`20
  375. X      CALL SKIP(1)
  376. X      CALL CRAM(25HTRACK FOR TORPEDO NUMBER )`20
  377. X      CALL CRAMI(J,0)`20
  378. X 5720 CALL CRAM(6H:     )`20
  379. X      GO TO 59
  380. X58    CALL SKIP(1)
  381. X      CALL CRAM(15HTORPEDO TRACK: )`20
  382. X59    DELTAX=-SIN(ANGLE)
  383. X      DELTAY=COS(ANGLE)`20
  384. X      BIGGER=AMAX1(ABS(DELTAX),ABS(DELTAY))`20
  385. X      DELTAX=DELTAX/BIGGER
  386. X      DELTAY=DELTAY/BIGGER
  387. X`09X=STARTX
  388. X`09Y=STARTY
  389. XC--------BEGIN INNER LOOP FOR MOVING A SINGLE TORPEDO`20
  390. X      L=0`20
  391. X 5910 L=L+1`20
  392. X      X=X+DELTAX
  393. X      IX=X+0.5
  394. X      IF(IX .LT. 1 .OR. IX .GT. 10)GO TO 105
  395. X      Y=Y+DELTAY
  396. X      IY=Y+0.5
  397. X      IF(IY .LT. 1 .OR. IY .GT. 10)GO TO 105
  398. X      IF(L .EQ. 4 .OR. L .EQ. 9)CALL CREND
  399. X      CALL CRAMF(X,0,1)`20
  400. X      CALL CRAM(3H - )
  401. X      CALL CRAMF(Y,0,1)`20
  402. X      CALL CRAM(3H   )
  403. X      IQUAD=QUAD(IX,IY)`20
  404. X      IF(IQUAD.EQ.IHDOT) GOTO 5910   `20
  405. XC--------BEGIN HIT CHECKS`20
  406. X      CALL CREND `20
  407. XC--------COMPUTE EXACT ANGLE TO SECTOR HIT, DISTANCE TO SECTOR HIT,`20
  408. XC        NORMAL MISS DISTANCE, AND HIT
  409. X      DIST=SQRT((STARTX-IX)**2 + (STARTY-IY)**2)
  410. X`09DELTX=0.1*(IY-STARTY)
  411. X`09DELTY=0.1*(STARTX-IX)
  412. X      BULSEYE=1.90985932*ATAN2(DELTX,DELTY)`20
  413. X      BULSEYE=(15.0-BULSEYE)*0.5235988
  414. X      SINANG=SIN(ANGLE-BULSEYE)`20
  415. X      DISTN=ABS(SINANG) * DIST
  416. X      HIT=700.0+100.0*RANF(0)-1000.0*DISTN
  417. XC--------TEST FOR AND COPE WITH HIT ON KLINGON,ROMULAN, OR COMMANDER.`20
  418. X      IF(IQUAD .EQ. IHK  .OR.  IQUAD .EQ. IHR) GO TO 62`20
  419. X      IF(IQUAD .NE. IHC  .AND.  IQUAD .NE. IHS) GO TO 70
  420. X      IF(RANF(0) .GT. 0.05) GO TO 62
  421. X      CALL CRMSENA(IQUAD,2,IX,IY)`20
  422. X      CALL CRAMDMP(25H USES ANTI-PHOTON DEVICE;)
  423. X      CALL PROUT(23H   TORPEDO NEUTRALIZED.,23)
  424. X      GO TO 50
  425. X62    DO 65 LL=1,NENHERE
  426. X      IF(IX.EQ.KX(LL) .AND. IY.EQ.KY(LL)) GO TO 68
  427. X65    CONTINUE
  428. X68    KP=KPOWER(LL)`20
  429. X      KPOWER(LL)=KP-SIGN(AMIN1(ABS(KP),HIT),KP)`20
  430. X      IF(KPOWER(LL) .NE. 0.0) GO TO 69
  431. X      CALL DEADKL(IX,IY,IQUAD,IX,IY)
  432. X      GO TO 50
  433. X 69   CALL CRMSENA(IQUAD,2,IX,IY)`20
  434. XC--------IF ENEMY DAMAGED BUT NOT DESTROYED, TRY TO DISPLACE HIM
  435. X 6901 ANG=ANGLE + 2.5*(RANF(0)-0.5)`20
  436. X      TEMP=AMAX1(ABS(-SIN(ANG)),ABS(COS(ANG)))
  437. X      XX=-SIN(ANG) / TEMP`20
  438. X      YY= COS(ANG) / TEMP`20
  439. X      JX=IX+XX+0.5
  440. X      JY=IY+YY+0.5
  441. X      IF(JX.LT.1 .OR. JX.GT.10 .OR. JY.LT.1 .OR. JY.GT.10) GO TO 6905`20
  442. X      IF(QUAD(JX,JY) .NE. '@') GO TO 6903`20
  443. XC--------SOMEONE FALLS INTO A BLACK HOLE
  444. +-+-+-+-+-+-+-+-  END  OF PART 12 +-+-+-+-+-+-+-+-
  445.