SUBROUTINE JMPHYP C C ROUTINE TO JUMP SHIPS THROUGH HYPERSPACE C INCLUDE 'TRKCOMMON.FTN' REAL LAUNCH INTEGER SCAN,WHOM,CREW,HYPER,TORPS,WHO LOGICAL*1 THRU,XSHIP,CLOAK,CLON,OK,FBASE,DESTRY BYTE MESSAG,INITLS,CHAR,SHP C C DO 20000 I=1,8 IF (JMPLOC(I).EQ.0) GOTO 10001 IF (JMPLOC(I).EQ.IUNIV(I)) GOTO 10001 DESTRY=.FALSE. ENERGY(I)=ENERGY(I)-RCNTRL(6) IF (ENERGY(I).LT.0) DESTRY=.TRUE. IF (DESTRY) CALL RESET(I) IF (DESTRY) GOTO 10001 C IF ((RAN(I1,I2)*100).GT.IDAMGE(I,6)) GOTO 10500 EN = -4000 CALL DAMAGE(I,EN,COURSE(I)) C 10500 ENCODE(1,10000,SHP) I 10000 FORMAT (I1) IX=XCORD(I) IY=YCORD(I) CALL UNIV(IX,IY,CHAR,JMPLOC(I)) CALL UNIVIN(IX,IY,'.',IUNIV(I)) C C HIT NOTHING (GOOD JUMP) C IF (CHAR.EQ.'.') GOTO 10005 C C HIT A STAR OR BASE OR BLACK HOLE C IF (CHAR.NE.'*'.AND.CHAR.NE.'B'.AND.CHAR.NE.'#') GOTO 10004 CALL SENT(I,43) CALL RESET(I) GOTO 10001 C C HIT A TORPEDO (HOMING OR OTHER) C 10004 IF (CHAR.NE.'^'.AND.CHAR.NE.'+') GOTO 10010 CALL SENT(I,4) V=300. IF (CHAR.NE.'^') V=500. CALL DAMAGE(I,V,V) CALL TFIND(K,IX,IY,JMPLOC(I)) IF (K.EQ.0.OR.K.EQ.I) GOTO 10005 CALL SENT(K,5) SCORE(K)=SCORE(K)+V IF (ENERGY(I).GT.0) GOTO 10005 CALL SENT(K,22) SCORE(K)=SCORE(K)+2000. CALL RESET(I) GOTO 10001 10005 CALL UNIVIN(IX,IY,SHP,JMPLOC(I)) IUNIV(I)=JMPLOC(I) DOCKED(I)=.FALSE. GOTO 10001 C C HIT ANOTHER SHIP C 10010 IF (CHAR.LT.'1'.OR.CHAR.GT.'8') GOTO 10020 DECODE(1,10000,CHAR) ISHP IF (.NOT.XSHIP(ISHP)) GOTO 10015 CALL SENT(ISHP,10) CALL RESET(ISHP) 10015 CALL RESET(I) CALL UNIVIN(IX,IY,'.',JMPLOC(I)) GOTO 10001 C C HIT A FREIGHTER C 10020 IF (CHAR.NE.'F') GOTO 10030 DO 10021 K=1,8 IF (FLOAD(JMPLOC(I),K).EQ.0) GOTO 10021 KX=FXCORD(JMPLOC(I),K) KY=FYCORD(JMPLOC(I),K) IF (KX.EQ.IX.AND.KY.EQ.IY) GOTO 10022 10021 CONTINUE WRITE (5,10023) I,IX,IY 10023 FORMAT (' MTJMPHYP -- Owner not found for freighter at ',I1,',', 1 I3,',',I3) GOTO 10025 10022 FLOAD(JMPLOC(I),K)=0 CALL SENT(K,39) 10025 SCORE(I)=SCORE(I)-1000 CALL UNIVIN(IX,IY,'.',JMPLOC(I)) GOTO 10001 C C HIT A RANDOM HYPERSPACE PORT C 10030 IF (CHAR.NE.'R') GOTO 10040 CALL SENT(I,19) 10031 KX=RAN(I1,I2)*IMAXX+1. IF (KX.GT.IMAXX) KX=IMAXX KY=RAN(I1,I2)*IMAXY+1. IF (KY.GT.IMAXY) KY=IMAXY KU=RAN(I1,I2)*IUNIMX+1. IF (KU.GT.IUNIMX) KU=IUNIMX CALL UNIV(KX,KY,CHAR,KU) IF (CHAR.NE.'.') GOTO 10031 XCORD(I)=KX YCORD(I)=KY XCORD(I)=XCORD(I)+.5 YCORD(I)=YCORD(I)+.5 WARP(I)=0. CALL UNIVIN(KX,KY,SHP,KU) IUNIV(I)=KU GOTO 10001 C C HIT A FIXED HYPERSPACE PORT C 10040 CALL SENT(I,17) IU=HYPER(I,2) KX=IHYP(IU,HYPER(I,1),1) KY=IHYP(IU,HYPER(I,1),2) DO 10058 II=(KX-1),(KX+1) DO 10058 IJ=(KY-1),(KY+1) CALL UNIV(II,IJ,CHAR,IU) IF (CHAR.NE.'.') GOTO 10058 CALL UNIVIN(II,IJ,SHP,IU) XCORD(I)=II YCORD(I)=IJ XCORD(I)=XCORD(I)+.5 YCORD(I)=YCORD(I)+.5 IUNIV(I)=IU GOTO 10059 10058 CONTINUE CALL SENT(I,18) 10059 WARP(I)=0. C 10001 CONTINUE JMPLOC(I)=0 20000 CONTINUE C RETURN END