SUBROUTINE FRGHT C C HANDLES FREIGHTER MOVEMENT FOR MTREK C INCLUDE 'TRKCOMMON.FTN' REAL LAUNCH INTEGER SCAN,WHOM,CREW,HYPER,TORPS,WHO LOGICAL*1 THRU,XSHIP,CLOAK,CLON,OK,FBASE,US,DESTRY,DEST BYTE MESSAG,INITLS,CHAR C C DO 10500 K=1,IUNIMX DO 10001 I=1,8 IF (.NOT.XSHIP(I).OR.FLOAD(K,I).EQ.0) GOTO 10001 C C TRY TO MOVE THE FREIGHTER. THE FIRST THING THAT SHOULD BE DONE IS C TO CHECK AND SEE IF THE COURSE SHOULD BE ADJUSTED (I.E. IF WE CAN C GO DIRECTLY TO THE DESTINATION BASE), THEN MOVE. C CALL LOOK(I,K) XI=FXCORD(K,I) YI=FYCORD(K,I) CALL MOVE(XI,YI,X,Y,FCOURS(K,I),5.,CHAR,IMAXX,IMAXY,K) IX=X IY=Y JX=XI JY=YI KX=FXDEST(K,I) KY=FYDEST(K,I) C C IS THE SHIP AT THE DESTINATION? IF IT IS AND THE DESTINATION IS THE C BASE, UNLOAD THE SHIP AND MAKE THE FREIGHTER GO AWAY. IF THE SHIP HAS C HIT SOMETHING, WE CAN ASSUME THAT IT IS SOMETHING THAT WILL EVENTUALLY C MOVE, SINCE WE ARE GUARANTEED THAT NO IMMOVABLE OBJECT SHOULD LIE IN C THE PATH OF THE FREIGHTER. IN THIS CASE, SIMPLY WAIT FOR THE OBJECT C TO MOVE. C IF (IX.EQ.KX.AND.IY.EQ.KY) GOTO 10010 IF (CHAR.NE.'.') GOTO 10002 IF (FLOAD(K,I).GT.0) CALL UNIVIN(JX,JY,'.',K) CALL UNIVIN(IX,IY,'F',K) FXCORD(K,I)=X FYCORD(K,I)=Y FLOAD(K,I)=ABS(FLOAD(K,I)) GOTO 10001 C C IF HERE, THEN IT'S HIT SOMETHING WE CAN ASSUME WILL MOVE. SPECIAL C CASES, HOWEVER, HAVE TO BE MADE FOR BLACK HOLES AND TOPEDOES. IN THESE C CASES, SOMETHING BAD WILL HAPPEN TO THE FREIGHTER. C C DID IT HIT A BLACK HOLE? C 10002 IF (CHAR.NE.'#') GOTO 10003 FLOAD(K,I)=0 CALL SENT(I,39) GOTO 10001 C C HOW ABOUT A TORPEDO (HOMING OR OTHERWISE)? C 10003 IF (CHAR.NE.'^'.AND.CHAR.NE.'+') GOTO 10100 V=300. IF (CHAR.EQ.'+') V=500. CALL FRDAM(I,DESTRY,V,K) CALL TFIND(KK,IX,IY) IF (KK.GT.0.OR.KK.EQ.I) GOTO 10004 CALL SENT(KK,40) SCORE(KK)=SCORE(KK)+V IF (DESTRY) GOTO 10005 GOTO 10001 10004 SCORE(I)=SCORE(I)-200. IF (.NOT.DESTRY) CALL SENT(I,40) IF (.NOT.DESTRY) GOTO 10001 10005 FLOAD(K,I)=0 CALL UNIVIN(IX,IY,'.',K) CALL SENT(I,39) GOTO 10001 C C 10100 IF (CHAR.EQ.'@') GOTO 10001 IF (CHAR.LT.'1'.OR.CHAR.GT.'8') GOTO 10101 DECODE (1,10102,CHAR) IIX 10102 FORMAT (I1) IF (XSHIP(IIX)) GOTO 10001 XCORD(IIX)=JX YCORD(IIY)=JY 10101 FXCORD(K,I)=IX FYCORD(K,I)=IY CALL UNIVIN(IX,IY,'F',K) CALL UNIVIN(JX,JY,CHAR,K) GOTO 10001 C C SEE IF IT'S OUR BASE. NOTIFY THE OWNER OF THE FREIGHTER AND C TRANSFER IT'S LOAD TO THE BASE, THEN MAKE THE FREIGHTER GO AWAY C IF THE DESTINATION WAS THE BASE. OTHERWISE, MAKE THE DESTINATION C THE BASE NOW, AND SET BASE COURSE TO FALSE, SO A NEW COURSE WILL C BE CALCULATED NEXT TIME THROUGH. C 10010 IOFF=(K-1)*20 IIX=IBASE(I,IOFF+(FDBASE(K,I)*2)-1) IIY=IBASE(I,IOFF+(FDBASE(K,I)*2)) IF (KX.EQ.IIX.AND.KY.EQ.IIY) GOTO 10020 BCRS(K,I)=.FALSE. FXDEST(K,I)=IIX FYDEST(K,I)=IIY GOTO 10001 10020 BASEN(I,IOFF/2+FDBASE(K,I)) = BASEN(I,IOFF/2+FDBASE(K,I)) 1 + FLOAD(K,I) FLOAD(K,I)=0 CALL UNIVIN(JX,JY,'.',K) CALL SENT(I,38) C 10001 CONTINUE 10500 CONTINUE C RETURN END