SUBROUTINE FIGHTR C C THIS SUBROUTINE HANDLES ENEMY FIGHTER MOVES C INCLUDE 'EMPIRE.INC/NOLIST' BYTE I100 INTEGER I20 C C IFO=7: CITY LOCATION C IFO=6: CARRIER NUMBER C IFO=5: TARGET LOCATION C IFO=4: TARGET LOCATION, KAMIKAZE MISSION C IFO=3: DIRECTIONAL C IFO=2: DIRECTIONAL, KAMIKAZE MISSION C MONKEY=0 NUMBER(2)=0 C IF (CODER.EQ.2) TYPE 999 C999 FORMAT(' FIGHTER CODES') DO 3600 Y=1,LIMIT(10) DO 3500 I1=1,4 CALL MAP(4) Z6=RLMAP(2000+Y) IF (Z6.EQ.0) GOTO 3600 C DIR=MOD(Y,2)*2-1 !UNUSED MONKEY=Y STOPF=1 P=0 Z7=Z6 CALL MAP(2) AB=RMAP(Z6) DO 100 IA=1,6 DO 100 IB=1,5 100 IF (TROOPT(IA,IB).EQ.Z6) TROOPT(IA,IB)=0 IF ((AB.NE.'f').AND.(AB.NE.'X').AND.(AB.NE.'c')) GOTO 3400 CALL MAP(7) IF ((AB.EQ.'X').OR.(AB.EQ.'c')) RANG(Y)=20 IF (RANG(Y).NE.0) GOTO 200 CALL MAP(3) I100=OMAP(Z6) CALL MAP(2) RMAP(Z6)=I100 GOTO 3400 C C MOVE SELECTION C 200 CALL MAP(6) IF (CODELA(Y+IFI2-1500).EQ.Z6) GOTO 1100 IFO=CODEFU(Y+IFI2-1500) ILA=CODELA(Y+IFI2-1500) C C DOES A NEW CODE NEED TO BE SELECTED? 1100:YES, 2600:NO C CALL MAP(7) GOTO (1100,300,600,700,800,900,1000) IFO GOTO 1100 C 300 IF (RND(100).LT.5) ILA=ICORR(ILA+1) !** IF (RANG(Y).GT.10) GOTO 2600 DO 400 I=1,70 IF (X(I).EQ.0.OR.OWNER(I).NE.2) GOTO 400 IF (IDIST(Z6,X(I)).GT.RANG(Y)) GOTO 400 IFO=7 ILA=X(I) GOTO 2600 400 CONTINUE C 600 IF (RND(100).LT.10) ILA=ICORR(ILA+1) !** IF (RANG(Y).LE.11) GOTO 1100 GOTO 2600 C 700 IF (ILA.EQ.Z6) GOTO 1100 GOTO 2600 C 800 IF ((ILA.EQ.Z6).OR.(RANG(Y).LE.11)) GOTO 1100 GOTO 2600 C 900 I20=RANG(Y) CALL MAP(4) IF (Z6.EQ.RLMAP(ILA+2800)) GOTO 1100 !IF LANDED IF (RLMAP(ILA+2800).EQ.0) GOTO 1100 !IF CARRIER DOESN'T EXIST IF (IDIST(Z6,RLMAP(ILA+2800)).GT.I20) GOTO 1100 !IF OUT OF RANG GOTO 2600 C 1000 IF (Z6.EQ.ILA) GOTO 1100 !IF LANDED IF (IDIST(Z6,ILA).GT.RANG(Y)) GOTO 1100 !IF OUT OF RANG GOTO 2600 C C NEW CODE SELECTION C 1200 CALL MAP(7) FUEL=RANG(Y) !NO CHOICE BUT BE KAMIKAZE GOTO 1400 !START LOOKING FOR ENEMY TROOP TRANS. 1100 IF (AB.EQ.'f') GOTO 2100 !IF FIGHTER IS AIRBORNE ID=0 1300 CALL MAP(7) FUEL=RANG(Y)/2 !DO THIS SO CRAFT CAN RETURN TO REFUEL IF (RND(100).LT.5) FUEL=RANG(Y) !** 1 IN 20 IS KAMIKAZE 1400 ISHIPT=3 !ENEMY TROOP TRANSPORTS C C LOOK FOR ENEMY TROOP TRANSPORTS, THEN SUBMARINES C 1500 CALL MAP(7) DO 1600 I=1,5 IF (TROOPT(ISHIPT,I).EQ.0) GOTO 1600 IF (IDIST(Z6,TROOPT(ISHIPT,I)).GT.FUEL) GOTO 1600 !OUT OF RANG IFO=5 IF (FUEL.EQ.RANG(Y)) IFO=4 ILA=TROOPT(ISHIPT,I) GOTO 2600 !PROCEED TO MOVE CORRECTION 1600 CONTINUE IF (ISHIPT.EQ.2) GOTO 1700 !IF ALREADY LOOKED FOR SUBS ISHIPT=2 GOTO 1500 !NOW LOOK FOR SUBS 1700 IF (ID.EQ.1000) GOTO 1900 !IF NO REFUELING SPOT WITHIN RANG IF (RND(100).LT.33) GOTO 1900 !** LOOK FOR ENEMY CONCENTRATIONS IF (RND(100).LT.50) GOTO 2100 !** MOVE TOWARDS CITY OR CARRIER C C MOVE IN A RANDOM DIRECTION C 1800 IFO=3 ILA=RND(8)+1 IF (RND(100).LT.5) IFO=2 !** ONE OUT OF 20 WILL BE KAMIKAZE IF (NUMBER(2).LE.2) IFO=3 GOTO 2600 !PROCEED TO MOVE CORRECTION C C MOVE TOWARD AN ENEMY CONCENTRATION WITHIN RANG C 1900 CALL MAP(7) DO 2000 I=1,10 DO 2000 J=2,11 IF (LOCI(I,J).EQ.0) GOTO 2000 IF (IDIST(Z6,LOCI(I,J)).GT.FUEL) GOTO 2000 !IF OUT OF RANG IFO=5 IF (FUEL.EQ.RANG(Y)) IFO=4 !KAMIKAZE ILA=LOCI(I,J) GOTO 2600 !PROCEED TO MOVE CORRECTION 2000 CONTINUE IF (ID.EQ.1000) GOTO 1800 !IF NO CITY OR CARRIER IS WITHIN RANG C C NOW MOVE TOWARDS A CITY CLOSEST TO ENEMY CONCENTRATION C 2100 IA=MOD(Y,10)+1 DO 2200 IB=IA,IA+9 I=IB IF (I.GT.10) I=I-10 IF (LOCI(I,2).EQ.0) GOTO 2200 LOC=LOCI(I,2) ID=IDIST(Z6,LOCI(I,2)) GOTO 2300 2200 CONTINUE LOC=EXPL() 2300 ID=1000 IGARBG=RND(70+LIMIT(15))+1 !** DO 2500 ILOOP=IGARBG,IGARBG+70+LIMIT(15) IA=ILOOP IF (IA.GT.70+LIMIT(15)) IA=IA-70-LIMIT(15) IF (IA.GT.70) GOTO 2400 IF (OWNER(IA).NE.2) GOTO 2500 CALL MAP(7) IF (IDIST(Z6,X(IA)).GT.RANG(Y)) GOTO 2500 IF (IDIST(X(IA),LOC).GE.ID) GOTO 2500 IFO=7 ILA=X(IA) ID=IDIST(X(IA),LOC) GOTO 2500 2400 IB=IA-70 CALL MAP(6) I30=CODEFU(1300+IB) CALL MAP(7) I20=RANG(Y) CALL MAP(4) IF (RLMAP(2800+IB).EQ.0) GOTO 2500 IF (IDIST(Z6,RLMAP(2800+IB)).GT.I20) GOTO 2500 IF (IDIST(RLMAP(2800+IB),LOC).GE.ID) GOTO 2500 IF ((I20.EQ.20).AND.(IDIST(Z6,RLMAP(2800+IB)).GT.12) 1 .AND.(I30.NE.9)) GOTO 2500 IFO=6 ILA=IB ID=IDIST(RLMAP(2800+IB),LOC) 2500 CONTINUE IF (ID.EQ.1000) GOTO 1200 GOTO 2600 C C MOVE CORRECTION C 2600 IZOT=0 MOOV=0 IF (ILA.GT.100) IZOT=MOV(Z6,ILA) IF (ILA.LT.10) IZOT=ILA CALL MAP(4) IF (IFO.EQ.6) IZOT=MOV(Z6,RLMAP(2800+ILA)) IF ((IFO.LT.4).AND.(RND(100).LT.5)) IZOT=ICORR(IZOT+1) !** CALL MAP(2) DO 2700 I=1,8 AC=RMAP(Z6+IARROW(I+1)) !** IF ((AC.NE.'D').AND.(AC.NE.'S').AND.(AC.NE.'T') 1 .AND.(AC.NE.'F').AND.(AC.NE.'A')) GOTO 2700 MOOV=I GOTO 3100 2700 CONTINUE C C LOOK FOR TERRITORY TO EXPLOR IN FRONT C IF (RANG(Y).LE.10) GOTO 2900 !IF LOW ON FUEL IZOT2=IZOT !STORE IZOT A MOMENT Z62=Z6+IARROW(ICORR(IZOT2+1)+1) !** IF (ORDER(Z62).NE.0) GOTO 2800 !IF ON THE EDGE OF THE MAP CALL MAP(1) IF (EMAP(Z62).EQ.' ') IZOT=ICORR(IZOT2+1) !IF Z62 IS UNEXPLORED 2800 Z62=Z6+IARROW(ICORR(IZOT2-1)+1) !**TRY OTHER SIDE IF (ORDER(Z62).NE.0) GOTO 2900 !IF ON THE EDGE OF THE MAP CALL MAP(1) IF (EMAP(Z62).EQ.' ') IZOT=ICORR(IZOT2-1) !IF Z62 IS UNEXPLORED C 2900 DESTIN=ILA CALL MAP(4) IF (IFO.EQ.6) DESTIN=RLMAP(2800+ILA) ID=IZOT DO 3000 I=0,7 IZOT=ICORR(ID+I) NEWLOC=Z6+IARROW(IZOT+1) !** IF (IFO.GT.3) THEN IF (IDIST(Z6,DESTIN).LE.IDIST(NEWLOC,DESTIN)) GOTO 3000 ENDIF CALL MAP(2) AC=RMAP(NEWLOC) IF ((((AC.GE.'A').AND.(AC.LE.'T')).OR. 1 (AC.EQ.'X').OR.(AC.EQ.'.').OR. 1 (AC.EQ.'c').OR.(AC.EQ.'+')).AND.(ORDER(NEWLOC).EQ.0)) 1 GOTO 3100 3000 CONTINUE IZOT=0 3100 CALL MAP(6) CODEFU(IFI2-1500+Y)=IFO CODELA(IFI2-1500+Y)=ILA IF (IFO.LT.4) CODELA(IFI2-1500+Y)=IZOT C IF (CODER.EQ.2) TYPE 998,IFO,CODELA(IFI2-1500+Y) C998 FORMAT(I) IF (MOOV.NE.0) IZOT=MOOV Z6=Z6+IARROW(IZOT+1) !** C C MOVE EVALUATION C CALL MAP(3) I100=OMAP(Z7) CALL MAP(2) IF (AB.EQ.'f') RMAP(Z7)=I100 AB=RMAP(Z6) IF ((AB.EQ.'.').OR.(AB.EQ.'+')) GOTO 3200 IF ((AB.EQ.'X').OR.(AB.EQ.'c')) GOTO 3300 CALL MAP(3) IF (OMAP(Z6).EQ.'*') GOTO 3400 H2=30 P=1 H1=1 OWN1='f' OWN2=AB CALL FIND(OWN2,Z6,Z8,H2) CALL FGHT(Z6,H1,H2,OWN1,OWN2) CALL FIND(OWN2,Z6,Z8,H2) IF (H1.LE.0) GOTO 3400 3200 CALL MAP(2) RMAP(Z6)='f' STOPF=0 3300 CALL MAP(7) RANG(Y)=RANG(Y)-1 IF (I1.EQ.1) NUMBER(2)=NUMBER(2)+1 CALL MAP(4) RLMAP(2000+Y)=Z6 CALL SONAR(Z6) IF (P.EQ.1) CALL SENSOR(Z6) IF (STOPF.EQ.1) GOTO 3600 3500 CONTINUE GOTO 3600 3400 CALL MAP(4) RLMAP(2000+Y)=0 CALL SONAR(Z6) IF (P.EQ.1) CALL SENSOR(Z6) 3600 CONTINUE RETURN END