SUBROUTINE PHASER C C * FIRE PHASERS C INCLUDE 'TRKCOMMON.FTN' REAL LAUNCH,DX(3),DY(3) INTEGER SCAN,WHOM,CREW,HYPER,TORPS LOGICAL*1 THRU,XSHIP,CLOAK,CLON,FBASE,US,DESTRY BYTE MESSAG,INITLS,CHAR C C DO 10001 I=1,8 IF (PHA(I).LT.0) GOTO 10001 C C * FIRE 3 BAND WIDE BEAM (NOTE EACH BAND MAY HIT A TARGET) C DX(1)=XCORD(I) DY(1)=YCORD(I) IF ((PHA(I).GE.45.AND.PHA(I).LT.135).OR. 1 (PHA(I).GE.225.AND.PHA(I).LT.315)) GO TO 10008 GO TO 10006 10008 DX(2)=DX(1)-1. DX(3)=DX(1)+1. DY(2)=DY(1) DY(3)=DY(1) GO TO 10007 10006 DX(2)=DX(1) DX(3)=DX(1) DY(2)=DY(1)-1. DY(3)=DY(1)+1. 10007 DO 10010 IZ=2,3 IF (DX(IZ).GT.IMAXX.OR.DX(IZ).LT.1) DX(IZ)=DX(1) IF (DY(IZ).GT.IMAXY.OR.DY(IZ).LT.1) DY(IZ)=DY(1) 10010 CONTINUE DO 10019 IZ=1,3 X1=DX(IZ) Y1=DY(IZ) DO 10022 IT=1,10 CALL MOVE(X1,Y1,X,Y,PHA(I),10.,CHAR,IMAXX,IMAXY,IUNIV(I)) IF (CHAR.NE.'.') GO TO 10022 X1=X Y1=Y 10022 CONTINUE IX=X IY=Y 10029 IF (CHAR.LT.'1'.OR.CHAR.GT.'8') GOTO 10031 C C * HIT ON SHIP C DECODE(1,10033,CHAR)K 10033 FORMAT (I1) 10028 IF (.NOT.XSHIP(K)) GOTO 10034 C C IF SHIP IS DOCKED, IGNORE THE HIT C IF (DOCKED(K)) GOTO 10019 DIST=((XCORD(I)-X)**2+(YCORD(I)-Y)**2)**.5 EN=900./(4.+DIST) C C * MAKE SURE WE DON'T SHOOT OURSELVES C IF (K.EQ.I) GOTO 10019 CALL DAMAGE(K,EN,PHA(I)) SCORE(I)=SCORE(I)+EN CALL SENT(I,6) CALL SENT(K,14) IF (ENERGY(K).GT.0) GOTO 10019 SCORE(I)=SCORE(I)+2000 CALL SENT(I,22) CALL RESET(K) GOTO 10019 10034 CALL SENT(I,21) GO TO 10019 C C * PHASER HIT ON TORPEDO C 10031 IF (CHAR.NE.'+') GOTO 10043 CALL SENT(I,7) GO TO 10019 C C * PHASER HIT ON SEEKER C 10043 IF (CHAR.NE.'^') GOTO 10045 CALL SENT(I,7) IF (RAN(I1,I2).LE..5) GOTO 10019 CALL UNIVIN(IX,IY,'.',IUNIV(I)) GO TO 10019 C C * PHASER HIT ON STAR C 10045 IF (CHAR.NE.'*') GOTO 10050 CALL SENT(I,11) GO TO 10019 C C * PHASER HIT ON BASE C 10050 IF (CHAR.NE.'B') GOTO 10052 US = .FALSE. IOFF=(IUNIV(I)-1)*20 DO 20000 III=1,20,2 IF (IX.EQ.IBASE(I,IOFF+III).AND.IY.EQ.IBASE(I,IOFF+III+1)) US = .TRUE. 20000 CONTINUE IF (.NOT.US) GOTO 10019 CALL SENT(I,12) GO TO 10019 C C * PHASER HIT ON ANTI-MATTER POD C 10052 IF (CHAR.NE.'@') GOTO 10054 CALL SENT(I,25) GO TO 10019 C C HIT ON FREIGHTER C 10054 IF (CHAR.NE.'F') GOTO 10070 DO 10055, II = 1,8 IF (FLOAD(IUNIV(I),II).EQ.0) GOTO 10055 IIX = FXCORD(IUNIV(I),II) IIY = FYCORD(IUNIV(I),II) IF (IX.NE.IIX.OR.IY.NE.IIY) GOTO 10055 C C FOUND THE OWNER C K = II IF (FNEAR(IUNIV(I),II)) GOTO 10028 CALL FRDAM(II,DESTRY,E,IUNIV(I)) IF (.NOT.DESTRY) CALL SENT (II,37) IF (.NOT.DESTRY) GOTO 10019 SCORE (I) = SCORE (I) + 500 CALL SENT(II,39) FLOAD(IUNIV(I),II) = 0 CALL UNIVIN(IX,IY,'.',IUNIV(I)) GOTO 10019 10055 CONTINUE C CALL VFY (3) GOTO 10019 C C * MISSED C 10070 CALL SENT(I,8) 10019 CONTINUE PHA(I)=-1. IF (CLON(I).AND..NOT.CLOAK(I).AND.IDAMGE(I,4).EQ.0) CLOAK(I)=.TRUE. C 10001 CONTINUE RETURN END