|
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 e
Length: 4333 (0x10ed) Types: TextFile Names: »enemym.f«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Empire/enemym.f«
SUBROUTINE ENEMYM(OWN1,HITMAX,ACRAHIT,ACRALOC,NUM) C C THIS SUBROUTINE HANDLES ENEMY SHIP MOVES OTHER THAN T'S AND C'S C IMPLICIT INTEGER(A-Z) character p include 'common.h' C C C NSHPRF IS AN ARRAY WHICH IS REFERENCED TO DETERMINE C WHETHER A CERTAIN SHIP (D=1,S=2,R=3,B=4) WANTS TO ATTACK C ANOTHER CERTAIN TYPE OF SHIP. 1 MEANS YES, 0 MEANS NO. C SECOND VARIABLE: 1=D,2=S,3=T,4=R,5=C,6=B C DATA NSHPRF/1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1/ C CTHE FOLLOWING NUMBERS ARE IFO VARIABLES RELATING TO C CERTAIN TYPES OF MOVEMENT (CODES) C 7: RANDOM DIRECTION C 3: CITY TARGET LOC. C 4: TT NUMBER ESCORT C 5: TARGET C 8: DAMAGED C 10: LOOK AT UNEXPLORED TERRITORY C IF (NUM.EQ.3) NUMSHP=1 IF (NUM.EQ.4) NUMSHP=2 IF (NUM.EQ.6) NUMSHP=3 IF (NUM.EQ.8) NUMSHP=4 C NUMBER(NUM)=0 IF (CODER.EQ.NUM) PRINT 999,OWN1 999 FORMAT(1X,A1,' CODES') MONKEY=0 C DO 2400 Y=1,LIMIT(NUM+8) Z6=RLMAP(Y+ACRALOC) IF (Z6.EQ.0) GOTO 2400 DIR=MOD(Y,2)*2-1 H1=J1TS(Y+ACRAHIT) AB=RMAP(Z6) IF (AB.EQ.'X') H1=H1+1 IF (H1.GT.HITMAX) H1=HITMAX C ORIG=Z6 DO 2300 ITURN=1,2 P='N' IF ((ITURN.EQ.2).AND.(H1.LE.HITMAX/2)) GOTO 2400 Z7=Z6 C C MOVE SELECTION C IFO=CODEFU(Y+ACRALOC-1500) ILA=CODELA(Y+ACRALOC-1500) C C DOES A NEW CODE NEED TO BE SELECTED? 800:YES, 1600:NO C IF ((IFO.EQ.8).AND.(H1.EQ.HITMAX)) IFO=0 IF (IFO.EQ.8) GOTO 1600 IF (H1.EQ.HITMAX) GOTO 100 IFO=8 ILA=IPORT(Z6) GOTO 1600 100 GOTO (800,200,300,400,500,800,800,800,800,700) IFO GOTO 800 C 200 GOTO 800 C 300 IF (RMAP(ILA).EQ.'X') GOTO 800 IF (IDIST(Z6,ILA).EQ.1) GOTO 800 GOTO 1600 C 400 IF (RLMAP(2600+ILA).EQ.0) GOTO 800 IF (CODEFU(1100+ILA).LT.7) GOTO 800 GOTO 1600 C 500 IF (ILA.NE.Z6) GOTO 1600 DO 600 I1=1,6 DO 600 I2=1,5 IF (TROOPT(I1,I2).NE.ILA) GOTO 600 TROOPT(I1,I2)=0 600 CONTINUE GOTO 800 C 700 IF (EMAP(ILA).NE.' ') GOTO 800 GOTO 1600 C C NEW CODE SELECTION C 5:TARGET C 800 ID=500 DO 900 N=1,6 IF (NSHPRF(NUMSHP,N).EQ.0) GOTO 900 DO 900 N2=1,5 IF (TROOPT(N,N2).EQ.0) GOTO 900 IF (IDIST(Z6,TROOPT(N,N2)).GE.ID) GOTO 900 ID=IDIST(Z6,TROOPT(N,N2)) ILA=TROOPT(N,N2) IFO=5 900 CONTINUE IF (ID.NE.500) GOTO 1600 IF (irand(100).GT.40) GOTO 1200 comment ** C C 3:CITY TARGET LOC. C IA=irand(20)+1 comment ** IB=IA+70 DO 1100 IC=IA,IB I=IC IF (I.GT.70) I=IC-70 IF (TARGET(I).EQ.0) GOTO 1100 IF (RMAP(TARGET(I)).NE.'O') GOTO 1100 IF (EDGER(TARGET(I)).EQ.0) GOTO 1100 IFO=3 ILA=TARGET(I) GOTO 1600 1100 CONTINUE C C 4:TT NUMBER ESCORT C 1200 IA=irand(LIMIT(13))+1 comment ** IB=IA+LIMIT(13) DO 1300 IC=IA,IB I=IC IF (I.GT.LIMIT(13)) I=IC-LIMIT(13) IF (RLMAP(2600+I).EQ.0) GOTO 1300 IF (CODEFU(1100+I).LT.9) GOTO 1300 IFO=4 ILA=I GOTO 1600 1300 CONTINUE C C 10: EXPLORE C 1400 I1=EXPL() IF (I1.EQ.0) GOTO 1500 ILA=I1 IFO=10 GOTO 1600 C C 1: RANDOM DIRECTION C 1500 IF (IFO.EQ.7) GOTO 1600 ILA=irand(8)+1 comment ** IFO=7 C C MOVE CORRECTION C 1600 IF (IFO.EQ.7) MOOV=ILA FLAG=1 IF ((IFO.EQ.8).OR.(IFO.EQ.3).OR.(IFO.EQ.5)) 1 MOOV=PATH(Z6,ILA,DIR,OKC,FLAG) IF (IFO.EQ.4) MOOV=PATH(Z6,RLMAP(ITT2+ILA),DIR,OKC,FLAG) IF (FLAG.EQ.0) GOTO 1400 IF (IFO.EQ.10) MOOV=PATH(Z6,ILA,DIR,OKC,FLAG) IF (FLAG.EQ.0) GOTO 1500 IF (IFO.NE.2) GOTO 1700 MOOV=0 IF (IDIST(Z6,ILA).GT.4) MOOV=MOV(Z6,ILA) IF (IDIST(Z6,ILA).LT.4) MOOV=ICORR(MOV(Z6,ILA)-4) 1700 AGGR=0 IS1=1 IF (OWN1.EQ.'s') IS1=2 MOOV=MOOV*DIR MOOV=MOVCOR(IFO,ITURN,Z6,MOOV,H1,IS1,AGGR,OWN1,1,DIR,-1,ORIG,HITMAX) IF (IFO.EQ.7) ILA=IABS(MOOV) CODEFU(Y+ACRALOC-1500)=IFO CODELA(Y+ACRALOC-1500)=ILA MOOV=IABS(MOOV) IF (CODER.EQ.NUM) PRINT 998,IFO,ILA 998 FORMAT(I) C C MOVE EVALUATION C Z6=Z6+IARROW(MOOV+1) comment ** IF (OMAP(Z7).NE.'*') RMAP(Z7)=OMAP(Z7) AD=RMAP(Z6) IF (AD.EQ.'.') GOTO 1900 IF (AD.EQ.'X') GOTO 2000 IF ((AD.GE.'A').AND.(AD.LE.'T')) GOTO 1800 PRINT 997,OWN1,Z6,AD 997 FORMAT(' ENEMY ',A1,' AT ',I4,' RAN AGROUND ON ',A1) GOTO 2100 1800 H2=30 P='S' OWN2=AD CALL FIND(OWN2,Z6,Z8,H2) CALL FGHT(Z6,H1,H2,OWN1,OWN2) CALL FIND(OWN2,Z6,Z8,H2) IF (H1.LE.0) GOTO 2100 1900 RMAP(Z6)=OWN1 2000 RLMAP(Y+ACRALOC)=Z6 J1TS(Y+ACRAHIT)=H1 IF (ITURN.EQ.1) NUMBER(NUM)=NUMBER(NUM)+1 MONKEY=Y GOTO 2200 2100 RLMAP(Y+ACRALOC)=0 CODEFU(Y+ACRALOC-1500)=0 CODELA(Y+ACRALOC-1500)=0 J1TS(Y+ACRAHIT)=0 2200 CALL SONAR(Z6) IF (P.EQ.'S') CALL SENSOR(Z6) 2300 CONTINUE 2400 CONTINUE LIMIT(NUM+8)=MONKEY RETURN END