|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T f
Length: 6476 (0x194c) Types: TextFile Names: »fightr.f«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Empire/fightr.f«
SUBROUTINE FIGHTR C C THIS SUBROUTINE HANDLES ENEMY FIGHTER MOVES C IMPLICIT INTEGER(A-Z) include 'common.h' C 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 IF (CODER.EQ.2) PRINT 999 999 FORMAT(' FIGHTER CODES') DO 3600 Y=1,LIMIT(10) DO 3500 I1=1,4 Z6=RLMAP(2000+Y) IF (Z6.EQ.0) GOTO 3600 C DIR=MOD(Y,2)*2-1 comment UNUSED MONKEY=Y STOPF=1 P=0 Z7=Z6 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 IF ((AB.EQ.'X').OR.(AB.EQ.'c')) RANG(Y)=20 IF (RANG(Y).NE.0) GOTO 200 RMAP(Z6)=OMAP(Z6) GOTO 3400 C C MOVE SELECTION C 200 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 GOTO (1100,300,600,700,800,900,1000) IFO GOTO 1100 C 300 IF (irand(100).LT.5) ILA=ICORR(ILA+1) comment ** 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 (irand(100).LT.10) ILA=ICORR(ILA+1) comment ** 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 IF (Z6.EQ.RLMAP(ILA+2800)) GOTO 1100 comment IF LANDED IF (RLMAP(ILA+2800).EQ.0) GOTO 1100 comment IF CARRIER DOESN'T EXIST IF (IDIST(Z6,RLMAP(ILA+2800)).GT.RANG(Y)) GOTO 1100 comment IF OUT OF RANG GOTO 2600 C 1000 IF (Z6.EQ.ILA) GOTO 1100 comment IF LANDED IF (IDIST(Z6,ILA).GT.RANG(Y)) GOTO 1100 comment IF OUT OF RANG GOTO 2600 C C NEW CODE SELECTION C 1200 FUEL=RANG(Y) comment NO CHOICE BUT BE KAMIKAZE GOTO 1400 comment START LOOKING FOR ENEMY TROOP TRANS. 1100 IF (AB.EQ.'f') GOTO 2100 comment IF FIGHTER IS AIRBORNE ID=0 1300 FUEL=RANG(Y)/2 comment DO THIS SO CRAFT CAN RETURN TO REFUEL IF (irand(100).LT.5) FUEL=RANG(Y) comment ** 1 IN 20 IS KAMIKAZE 1400 ISHIPT=3 comment ENEMY TROOP TRANSPORTS C C LOOK FOR ENEMY TROOP TRANSPORTS, THEN SUBMARINES C 1500 DO 1600 I=1,5 IF (TROOPT(ISHIPT,I).EQ.0) GOTO 1600 IF (IDIST(Z6,TROOPT(ISHIPT,I)).GT.FUEL) GOTO 1600 comment OUT OF RANG IFO=5 IF (FUEL.EQ.RANG(Y)) IFO=4 ILA=TROOPT(ISHIPT,I) GOTO 2600 comment PROCEED TO MOVE CORRECTION 1600 CONTINUE IF (ISHIPT.EQ.2) GOTO 1700 comment IF ALREADY LOOKED FOR SUBS ISHIPT=2 GOTO 1500 comment NOW LOOK FOR SUBS 1700 IF (ID.EQ.1000) GOTO 1900 comment IF NO REFUELING SPOT WITHIN RANG IF (irand(100).LT.33) GOTO 1900 comment ** LOOK FOR ENEMY CONCENTRATIONS IF (irand(100).LT.50) GOTO 2100 comment ** MOVE TOWARDS CITY OR CARRIER C C MOVE IN A RANDOM DIRECTION C 1800 IFO=3 ILA=irand(8)+1 IF (irand(100).LT.5) IFO=2 comment ** ONE OUT OF 20 WILL BE KAMIKAZE IF (NUMBER(2).LE.2) IFO=3 GOTO 2600 comment PROCEED TO MOVE CORRECTION C C MOVE TOWARD AN ENEMY CONCENTRATION WITHIN RANG C 1900 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 comment IF OUT OF RANG IFO=5 IF (FUEL.EQ.RANG(Y)) IFO=4 comment KAMIKAZE ILA=LOCI(I,J) GOTO 2600 comment PROCEED TO MOVE CORRECTION 2000 CONTINUE IF (ID.EQ.1000) GOTO 1800 comment 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=irand(70+LIMIT(15))+1 comment ** 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 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 IF (RLMAP(2800+IB).EQ.0) GOTO 2500 IF (IDIST(Z6,RLMAP(2800+IB)).GT.RANG(Y)) GOTO 2500 IF (IDIST(RLMAP(2800+IB),LOC).GE.ID) GOTO 2500 IF ((RANG(Y).EQ.20).AND.(IDIST(Z6,RLMAP(2800+IB)).GT.12) 1 .AND.(CODEFU(1300+IB).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 IF (IFO.EQ.6) IZOT=MOV(Z6,RLMAP(2800+ILA)) IF ((IFO.LT.4).AND.(irand(100).LT.5)) IZOT=ICORR(IZOT+1) comment ** DO 2700 I=1,8 AC=RMAP(Z6+IARROW(I+1)) comment ** 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 comment IF LOW ON FUEL IZOT2=IZOT comment STORE IZOT A MOMENT Z62=Z6+IARROW(ICORR(IZOT2+1)+1) comment ** IF (ORDER(Z62).NE.0) GOTO 2800 comment IF ON THE EDGE OF THE MAP IF (EMAP(Z62).EQ.' ') IZOT=ICORR(IZOT2+1) comment IF Z62 IS UNEXPLORED 2800 Z62=Z6+IARROW(ICORR(IZOT2-1)+1) comment **TRY OTHER SIDE IF (ORDER(Z62).NE.0) GOTO 2900 comment IF ON THE EDGE OF THE MAP IF (EMAP(Z62).EQ.' ') IZOT=ICORR(IZOT2-1) comment IF Z62 IS UNEXPLORED C 2900 DESTIN=ILA IF (IFO.EQ.6) DESTIN=RLMAP(2800+ILA) ID=IZOT DO 3000 I=0,7 IZOT=ICORR(ID+I) NEWLOC=Z6+IARROW(IZOT+1) comment ** IF (IFO.GT.3) THEN IF (IDIST(Z6,DESTIN).LE.IDIST(NEWLOC,DESTIN)) GOTO 3000 ENDIF 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 CODEFU(IFI2-1500+Y)=IFO CODELA(IFI2-1500+Y)=ILA IF (IFO.LT.4) CODELA(IFI2-1500+Y)=IZOT IF (CODER.EQ.2) PRINT 998,IFO,CODELA(IFI2-1500+Y) 998 FORMAT(I) IF (MOOV.NE.0) IZOT=MOOV Z6=Z6+IARROW(IZOT+1) comment ** C C MOVE EVALUATION C IF (AB.EQ.'f') RMAP(Z7)=OMAP(Z7) AB=RMAP(Z6) IF ((AB.EQ.'.').OR.(AB.EQ.'+')) GOTO 3200 IF ((AB.EQ.'X').OR.(AB.EQ.'c')) GOTO 3300 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 RMAP(Z6)='f' STOPF=0 3300 RANG(Y)=RANG(Y)-1 IF (I1.EQ.1) NUMBER(2)=NUMBER(2)+1 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 RLMAP(2000+Y)=0 CALL SONAR(Z6) IF (P.EQ.1) CALL SENSOR(Z6) 3600 CONTINUE RETURN END