FUNCTION MOVCOR 1 (IFO,ITURN,Z6,MOVE,IH1,IS1,AGGR,OWN1,EXPLOR,DIR,DEST,ORIG,HMAX) C INCLUDE 'EMPIRE.INC/NOLIST' C C CHECK FOR IMPOSSIBLE CONDITION FOR MOVE C C IF ((.NOT.PASS).OR.(IABS(MOVE).LE.8)) GOTO 100 C CALL LIBPGE(1,1) C TYPE 999,OWN1,Z6,MOVE,IFO C999 FORMAT(1X,A1,' @ ',I4,' ATTEMPTED ',I,' WITH IFO ',I4) C 100 MOVE=IABS(MOVE) C IF (ITURN.EQ.1) BLAH=0 !** IF (BLAH.LT.0) MOVE=ICORR(I2+RND(3)-1) !** C C CHECK FOR SOMETHING TO ATTACK, OR, SOMETHING TO RUN FROM C BLAH.LT.0: RUN C BLAH.GE.0: ATTACK C DO 200 IX=1,8 I1=IX LOC=Z6+IARROW(I1+1) !** CALL MAP(2) AB=RMAP(LOC) CALL MAP(3) IF (OMAP(LOC).NE.'.') GOTO 200 IF ((AB.LT.'B').OR.(AB.GT.'T')) GOTO 200 !IF SH/PL, LOOK BLAH=ATTACK(OWN1,AB,IH1,AGGR) IF (BLAH.GE.0) GOTO 1200 !** ATTACK IT GOTO 300 !RUN FROM IT 200 CONTINUE I1=0 !NOTHING OF INTEREST HERE GOTO 800 C C SELECT AN APPROPRIATE ESCAPE MOVE C 300 IS=RND(3) CALL MAP(2) DO 600 IN=1,8 I2=IN IF ((IS.EQ.0).OR.(IN.GT.3)) GOTO 500 IF (IS.NE.1) GOTO 400 IF (IN.EQ.1) I2=2 IF (IN.EQ.2) I2=3 IF (IN.EQ.3) I2=1 GOTO 500 400 IF (IN.EQ.1) I2=3 IF (IN.EQ.2) I2=1 IF (IN.EQ.3) I2=2 500 I=IARROW(ISCAPE(I2,I1)+1)+Z6 !** IF ((RMAP(I).EQ.'.').AND.(ORDER(I).EQ.0)) GOTO 700 600 CONTINUE I1=0 GOTO 800 700 I1=ISCAPE(I2,I1) CALL MAP(3) IF (OMAP(I).NE.'.') CALL STROUT('ISCAPE ERROR',1) GOTO 1200 C 800 IF (EXPLOR.EQ.0) GOTO 1000 !** EXPMAX=0 DO 900 IX=MOVE,MOVE+7 I1=ICORR(IX) LOC1=Z6+IARROW(I1+1) !** IF (ORDER(LOC1).NE.0) GOTO 900 CALL MAP(2) IF (RMAP(LOC1).NE.'.') GOTO 900 IF (DEST.GT.0) THEN IF (IDIST(Z6,DEST).LT.IDIST(LOC1,DEST)) GOTO 900 ENDIF NEXP=0 CALL MAP(1) IF (EMAP(LOC1+IARROW(I1+1)).EQ.' ') NEXP=1 !** IF (EMAP(LOC1+IARROW(ICORR(I1-1)+1)).EQ.' ') NEXP=NEXP+1 !** IF (EMAP(LOC1+IARROW(ICORR(I1+1)+1)).EQ.' ') NEXP=NEXP+1 !** IF (EMAP(LOC1+IARROW(ICORR(I1+2)+1)).EQ.' ') NEXP=NEXP+1 !** IF (EMAP(LOC1+IARROW(ICORR(I1-2)+1)).EQ.' ') NEXP=NEXP+1 !** IF (NEXP.EQ.5) GOTO 1200 IF (NEXP.LE.EXPMAX) GOTO 900 EXPMAX=NEXP I11=I1 900 CONTINUE I1=0 IF (EXPMAX.EQ.0) GOTO 1000 I1=I11 GOTO 1200 1000 I2=MOVE LOC1=Z6+IARROW(MOVE+1) !** CALL MAP(2) AB=RMAP(LOC1) IF (LOC1.NE.ORIG) THEN IF (((AB.EQ.'.').OR.(AB.EQ.'X')).AND.(ORDER(LOC1).EQ.0)) GOTO 1200 ENDIF M=MOVE IA=ICORR(M-DIR*3) CALL MAP(2) IF (RMAP(Z6+IARROW(IA+1)).NE.'.') M=IA !** DO 1100 I=0,7*DIR,DIR I2=ICORR(M+I) I3=Z6+IARROW(I2+1) !** IF ((RMAP(I3).EQ.'.').AND.(ORDER(I3).EQ.0).AND.(I3.NE.ORIG)) GOTO 1200 1100 CONTINUE I2=0 1200 CALL MAP(2) IF (I1.NE.0) I2=I1 IF (RMAP(Z6+IARROW(MOVE+1)).NE.'X') MOVE=I2 !** IF ((RMAP(Z6).EQ.'X').AND.(IH1.LT.HMAX)) MOVE=0 MOVCOR=MOVE RETURN END FUNCTION IPORT(Z6) C INCLUDE 'EMPIRE.INC/NOLIST' C IPORT=0 ID=500 DO 100 I=1,70 IF (X(I).EQ.0) GOTO 100 CALL MAP(2) IF (RMAP(X(I)).NE.'X') GOTO 100 IF (EDGER(Z6).EQ.0) GOTO 100 IF (IDIST(X(I),Z6).GE.ID) GOTO 100 IPORT=X(I) ID=IDIST(X(I),Z6) 100 CONTINUE IF (IPORT.NE.0) RETURN IPORT=RND(5798)+102 RETURN END FUNCTION ATTACK(OWN1,OWN2,IH1,AGGR) IMPLICIT INTEGER(A-Z) BYTE OWN1,OWN2 C H1=IH1 C1=COST(OWN1,H1) C2=COST(OWN2,0) S1=1 S2=1 IF (OWN1.EQ.'s') S1=3 IF (OWN2.EQ.'S') S2=3 H2=HITS(OWN2) H1=(H1+S2-1)/S2 H2=(H2+S1-1)/S1 ATTACK=(((C2*100)*H1)/H2)-(C1*100)+(AGGR*100) RETURN END