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 UNIV,MESSAG,INITLS,CHAR C C DO 10001 I=1,8 IF (.NOT.XSHIP(I).OR.FLOAD(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) D TYPE *, 'MTFRGHT -- AFTER LOOK' XI=FXCORD(I) YI=FYCORD(I) CALL MOVE(XI,YI,X,Y,FCOURS(I),5.,CHAR,UNIV) IX=X IY=Y JX=XI JY=YI KX=FXDEST(I) KY=FYDEST(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(I).GT.0) UNIV(JX,JY)='.' UNIV(IX,IY)='F' FXCORD(I)=X FYCORD(I)=Y FLOAD(I)=ABS(FLOAD(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(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 10001 V=300. IF (CHAR.EQ.'+') V=500. CALL FRDAM(I,DESTRY,V) CALL TFIND(K,IX,IY) IF (K.GT.0.OR.K.EQ.I) GOTO 10004 CALL SENT(K,40) SCORE(K)=SCORE(K)+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(I)=0 UNIV(IX,IY)='.' CALL SENT(I,39) 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 IIX=IBASE(I,(FDBASE(I)*2)-1) IIY=IBASE(I,FDBASE(I)*2) IF (KX.EQ.IIX.AND.KY.EQ.IIY) GOTO 10020 BCRS(I)=.FALSE. FXDEST(I)=IIX FYDEST(I)=IIY GOTO 10001 10020 BASEN(I,FDBASE(I)) = BASEN(I,FDBASE(I)) + FLOAD(I) FLOAD(I)=0 UNIV(JX,JY)='.' CALL SENT(I,38) C 10001 CONTINUE RETURN END