SUBROUTINE FIGHMV C C THIS SUBROUTINE HANDLES PLAYER'S FIGHTER MOVES C INCLUDE 'EMPIRE.INC/NOLIST' LOGICAL FATAL BYTE I100 C DO 2100 Y=1,LIMIT(2) LOC=500+Y CALL MAP(8) IF (MOVEDFLAG(LOC).NE.0) GOTO 2100 CALL MAP(4) Z6=RLMAP(LOC) IF (Z6.EQ.0) GOTO 2100 IF ((MODE.EQ.1).AND.(POSCHK(Z6,'F').EQ.0)) GOTO 2100 CALL MAP(8) MOVEDFLAG(LOC)=1 Z3=MIN(RANGE(Y),4) IF (Z3.EQ.0) Z3=4 DO 1900 ITURN=1,Z3 10 LOC=500+Y CALL MAP(4) Z6=RLMAP(LOC) IF (Z6.EQ.0) GOTO 2100 CALL MAP(2) AB=RMAP(Z6) C C NOW CHECK TO SEE IF FIGHTER IS IN A CITY, IF IT IS CHANGE THE C STASIS NUMBER OF THE FIGHTER TO THAT SPECIFIED BY FIPATH(I) C IF (AB.NE.'O') GOTO 300 !IF FIGHTER NOT IN CITY DO 100 I=1,70 100 IF (X(I).EQ.Z6) GOTO 200 !FIND CITY AT Z6 200 CALL MAP(7) MYCODE(LOC)=FIPATH(I) !CHANGE STASIS OF FIGHTER C C CHECK FOR FIGHTERS DESTROYED ALONG WITH CARRIER OR CITY C 300 IF ((AB.EQ.'C').OR.(AB.EQ.'F').OR.(AB.EQ.'O')) GOTO 400 CALL LIBCUR(3,1) CALL STROUT('Fighter #',0) CALL DECPRT(Y) CALL STROUT(' destroyed.',1) GOTO 1700 400 Z7=Z6 CALL STASIS(Z6,LOC) 500 CALL MAP(8) IF (RANGE(Y).NE.0) GOTO 600 !CHECK FOR FUEL CALL HEAD('F',Y,LOC,Z6,1) CALL LIBCUR(3,1) CALL STROUT('Ran out of fuel and crashed.',1) CALL MAP(3) I100=OMAP(Z6) CALL MAP(2) IF ((AB.NE.'C').AND.(I100.NE.'*')) RMAP(Z6)=I100 GOTO 1700 600 CALL MAP(7) MYCOD=MYCODE(LOC) !GET MY FUNCTION CODE IF (MYCOD.EQ.0) GOTO 1100 !NONE, SKIP AHEAD IF ((MYCOD.LT.101).OR.(MYCOD.GT.6108)) GOTO 1300 IF (MYCOD.LE.6000) GOTO 700 IF (MYCOD.GT.6100) GOTO 800 GOTO 1300 700 Z6=Z6+IARROW(MOV(Z6,MYCOD)+1) !DESTINATION FUNCTION CALL MAP(8) IF ((RANGE(Y).EQ.10).AND.(IDIST(Z6,MYCOD).LE.10)) GOTO 902 GOTO 900 800 Z6=Z6+IARROW(MYCOD-6100+1) !DIRECTIONAL FUNCTIONS 900 CALL MAP(8) IF (RANGE(Y).EQ.10) GOTO 1000 902 IF (ORDER(Z6).NE.0) GOTO 1000 CALL MAP(2) AD=RMAP(Z6) !CHECK NEW LOCATION IF ((AD.EQ.'C').OR.(AD.EQ.'O')) GOTO 1300 IF ((AD.EQ.'+').OR.(AD.EQ.'.')) GOTO 1300 1000 Z6=Z7 1100 CALL MAP(5) CALL SECTOR(PMAP(1)) CALL LTR(Z6,ITURN) 1200 CALL MVE('F',MDATE,Y,LOC,1,Z6,Z7,DISAS,Z6-IADJST) IF (DISAS.EQ.-2) GOTO 500 C C MOVE EVALUATION C 1300 CALL MAP(2) AC=RMAP(Z6) CALL MAP(3) I100=OMAP(Z7) AO=OMAP(Z6) CALL MAP(7) IF (Z6.EQ.MYCODE(LOC)) MYCODE(LOC)=0 !ARRIVED AT DESTINATION CALL MAP(8) IF ((AC.NE.'O').AND.(AC.NE.'C')) RANGE(Y)=RANGE(Y)-1 IF (Z7.EQ.Z6) GOTO 2000 !DIDNT GO ANYWHERE, END MOVE CALL MAP(2) IF ((AB.NE.'C').AND.(I100.NE.'*')) RMAP(Z7)=I100 !CHANGE PREV LOC IF (AO.EQ.'*') GOTO 1400 !CHECK ON CITIES IF (AC.EQ.'C') GOTO 1350 !LANDING ON A CARRIER IF ((AC.NE.'.').AND.(AC.NE.'+')) GOTO 1800 !ATTACK ANY OTHER UNITS RMAP(Z6)='F' !NORMAL MOVE CALL MAP(4) RLMAP(LOC)=Z6 GOTO 1900 1350 CALL MAP(4) N=0 DO 1370 I20=501,700 IF (RLMAP(I20) .EQ. Z6) N=N+1 1370 CONTINUE H1=30 CALL FIND('C',Z6,Z8,H1) IF (N.LT.H1) GOTO 1500 IF (.NOT. FATAL(7)) GOTO 1390 CALL STROUT('Fighter crashed into the sea.',1) CALL MAP(4) RLMAP(Y)=0 CALL MAP(7) MYCODE(Y)=0 GOTO 2000 1390 CALL MAP(2) IF ((RMAP(Z7).NE.'O').AND.(RMAP(Z7).NE.'C')) RMAP(Z7)='F' Z6=Z7 GOTO 10 1400 IF (AC.NE.'O') GOTO 1600 ! IS IT MY CITY? 1500 CALL LIBCUR(3,1) !LANDED IN A CITY OR CARRIER CALL MAP(7) IF (MYCODE(LOC).EQ.0) CALL STROUT('Landing confirmed.',1) MYCODE(LOC)=0 !ZERO MY FUNCTION CALL MAP(4) RLMAP(LOC)=Z6 CALL MAP(8) RANGE(Y)=20 GOTO 2000 1600 IF (.NOT.FATAL(3)) GOTO 2200 !ASK ABOUT FLYING OVER ENEMY CITY CALL LIBCUR(3,1) CALL STROUT('Fighter shot down.',1) 1700 CALL MAP(4) RLMAP(LOC)=0 GOTO 2000 C ATTACKING A UNIT 1800 IF ((AC.GE.'A').AND.(AC.LE.'T')) THEN IF (.NOT.FATAL(2)) GOTO 2200 ENDIF H1=1 OWN1='F' OWN2=AC H2=30 CALL FIND(OWN2,Z6,Z8,H2) CALL FGHT(Z6,H1,H2,OWN1,OWN2) CALL FIND(OWN2,Z6,Z8,H2) IF (H1.LE.0) GOTO 1700 CALL MAP(2) RMAP(Z6)='F' CALL MAP(4) RLMAP(LOC)=Z6 IF ((OWN2.GE.'a').AND.(OWN2.LE.'t')) CALL SONAR(Z6) 1900 CALL SENSOR(Z6) !BOTTOM OF PER TURN LOOP 2000 CALL SENSOR(Z6) !BOTTOM OF PER UNIT LOOP 2100 CONTINUE RETURN C C RECOVER FROM FATAL MOVE C 2200 Z6=Z7 !GO BACK TO OLD LOCATION CALL MAP(2) RMAP(Z6)=AB !RESTORE MAP TO PREVIOUS CALL MAP(8) RANGE(Y)=RANGE(Y)+1 !GET YOUR FUEL BACK GOTO 1200 END