SUBROUTINE NOVA(IX,IY) INCLUDE 'TREK.COM/-LI' INCLUDE 'TREK2.COM/-LI' INTEGER BURST,HITS(10,2),BOT,TOP,TOP2 DIMENSION COURSE(9) EQUIVALENCE (CRACKS(1),HIT),(CRACKS(4),KSHOT),(SHIP,ISHIP) DATA COURSE/ 10.5, 12.0, 1.5, 9.0, 0.0, 3.0, 7.5, 6.0, 4.5 / C--------CHECK FOR SUPERNOVA POSSIBILITY IF(RANF(0) .GE. 0.05) GO TO 76 CALL SNOVA(IX,IY) RETURN C--------PRINT NOVA MESSAGE FOR INITIAL STAR AT LOCATION (IX,IY) 76 QUAD(IX,IY)=IHDOT CALL CRMSNA(IHSTAR,2,IX,IY) CALL CRMDMP(7H NOVAS.) GALAXY(QUADX,QUADY)=GALAXY(QUADX,QUADY)-1 C-------IF ENTERPRISE DESTROYS STAR, TAKE OFF POINTS IF(IPHWHO.NE.1) STARKL=STARKL+1 C--------SET UP STACK TO RECURSIVELY TRIGGER ADJACENT STARS BOT=1 TOP=1 TOP2=1 KOUNT=0 ICX=0 ICY=0 HITS(BOT,1)=IX HITS(BOT,2)=IY 78 DO 90 MM=BOT,TOP DO 90 NN=1,3 DO 90 J=1,3 IF((J*NN) .EQ. 4)GO TO 90 II=HITS(MM,1)+NN-2 JJ=HITS(MM,2)+J-2 IF(II .LT. 1 .OR. II .GT. 10)GO TO 90 IF(JJ .LT. 1 .OR. JJ .GT. 10)GO TO 90 IQUAD=QUAD(II,JJ) IF(IQUAD.EQ.IHDOT .OR. IQUAD.EQ.IHQUST .OR. IQUAD.EQ.IHBLNK) + GO TO 90 IF(IQUAD.EQ.IHNUM) GO TO 90 IF(IQUAD.EQ.IHT) GO TO 90 IF(IQUAD .NE. IHSTAR) GO TO 80 C--------ANOTHER STAR AFFECTED BY A NOVA IF(RANF(0.) .GE. .05)GO TO 79 CALL SNOVA(II,JJ) RETURN 79 TOP2=TOP2+1 HITS(TOP2,1)=II HITS(TOP2,2)=JJ GALAXY(QUADX,QUADY)=GALAXY(QUADX,QUADY)-1 IF(IPHWHO.NE.1) STARKL=STARKL+1 CALL CRMSNA(IHSTAR,2,II,JJ) CALL CRAM(7H NOVAS.) GO TO 8905 80 IF(IQUAD .NE. IHP) GO TO 8002 C--------PLANET DESTROYED BY NOVA. NUSTUF(QUADX,QUADY)=NUSTUF(QUADX,QUADY) -1 NPLNKL=NPLNKL+1 CALL CRMSNA(IHP,2,II,JJ) CALL CRAM(11H DESTROYED.) DO 8001 I=1,5 8001 PLNETS(IPLNET,I)=0 IPLNET=0 PLNETX=0 PLNETY=0 IF(LANDED .NE. 1) GO TO 8905 CALL FINISH GO TO 95 8002 IF(IQUAD .NE. IHB) GO TO 82 C----------NOVA DESTROYS STARBASE GALAXY(QUADX,QUADY)=GALAXY(QUADX,QUADY)-10 DO 81 LLL=1,RMBASE IF(BASEQX(LLL).NE.QUADX .OR. BASEQY(LLL).NE.QUADY) GO TO 81 BASEQX(LLL)=BASEQX(RMBASE) BASEQY(LLL)=BASEQY(RMBASE) 81 CONTINUE RMBASE=RMBASE-1 BASEX=0 BASEY=0 IF(IPHWHO.NE.1) BASEKL=BASEKL+1 CALL NUCOND CALL CRMSNA(IHB,2,II,JJ) CALL CRAM(12H DESTROYED. ) GO TO 8905 82 HIT=800.0 + 800.0*RANF(0) IF(IQUAD .NE.ISHIP) GO TO 87 C----------STARSHIP IN A NOVA CALL PROUT(29H***STARSHIP BUFFETED BY NOVA.,29) KSHOT=0 CALL ZAP C-------CHECK IF STARSHIP SURVIVED NOVA IF(ENERGY .GT. 0)GO TO 86 CALL FINISH(7) RETURN C--------ADD IN COURSE NOVA CONTRIBUTES TO KICKING STARSHIP 86 ICX=ICX+SECTX-HITS(MM,1) ICY=ICY+SECTY-HITS(MM,2) KOUNT=KOUNT+1 GO TO 90 C--------ENEMY DESTROYED OR DAMAGED ; BUFFETED BY NOVA. 87 IF(IQUAD .EQ. IHK) GO TO 88 DO 8701 LL=1,NENHERE IF(KX(LL).EQ.II .AND. KY(LL).EQ.JJ) GO TO 8702 8701 CONTINUE 8702 KPOWER(LL)=KPOWER(LL)-HIT IF(KPOWER(LL) .LE. 0) GO TO 88 NEWCX=II+II-HITS(MM,1) NEWCY=JJ+JJ-HITS(MM,2) CALL CRMSNA(IQUAD,2,II,JJ) CALL CRAM(8H DAMAGED) IF(NEWCX.LT.1 .OR. NEWCX.GT.10 .OR. + NEWCY.LT.1 .OR. NEWCY.GT.10) GO TO 8703 IQUAD1=QUAD(NEWCX,NEWCY) IF(IQUAD1 .NE. IHBLNK) GO TO 87025 C--------ENEMY DISPLACED INTO BLACK HOLE CALL CRMDMP(26H, BLASTED INTO BLACK HOLE.) CALL DEADKL(II,JJ,IQUAD,NEWCX,NEWCY) GO TO 90 87025 IF(IQUAD1 .NE. IHDOT) GO TO 8703 CALL CRAM(13H, BUFFETED TO) CALL CRMLOC(2,NEWCX,NEWCY) QUAD(II,JJ)=IHDOT QUAD(NEWCX,NEWCY)=IQUAD KX(LL)=NEWCX KY(LL)=NEWCY KDIST(LL)= SQRT(FLOAT((SECTX-NEWCX)**2+(SECTY-NEWCY)**2)) 8703 CALL CREND GO TO 90 C--------ENEMY DESTROYED BY NOVA. 88 CALL DEADKL(II,JJ,IQUAD,II,JJ) GO TO 90 8905 CALL CREND QUAD(II,JJ)=IHDOT 90 CONTINUE C--------IF MORE STARS AFFECTED BY NOVA GO FIND WHAT THEY GOT IF(TOP .EQ. TOP2)GO TO 93 BOT=TOP+1 TOP=TOP2 GO TO 78 93 IF(KOUNT .EQ. 0)RETURN C--------STARSHIP AFFECTED BY NOVA - KICK IT AWAY. DIST=KOUNT*.1 IF(ICX .NE. 0) ICX=ISIGN(1,ICX) IF(ICY .NE. 0) ICY=ISIGN(1,ICY) INDEX=3*(ICX+1)+ICY+2 DIREC=COURSE(INDEX) IF(DIREC .EQ. 0) DIST=0 IF(DIST .EQ. 0)RETURN TIME=12.0*DIST CALL SKIP(1) CALL PROUT(34HFORCE OF NOVA DISPLACES STARSHIP. ,34) CALL MOVE 95 RETURN END