|
|
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 m
Length: 2696 (0xa88)
Types: TextFile
Names: »movcor.f«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Empire/movcor.f«
FUNCTION MOVCOR
1 (IFO,ITURN,Z6,MOVE,IH1,IS1,AGGR,OWN1,EXPLOR,DIR,DEST,ORIG,HMAX)
C
IMPLICIT INTEGER(A-Z)
include 'common.h'
character ab
C
C
C CHECK FOR IMPOSSIBLE CONDITION FOR MOVE
C
IF ((.NOT.PASS).OR.(IABS(MOVE).LE.8)) GOTO 100
call clear
call topini
PRINT 999,OWN1,Z6,MOVE,IFO
999 FORMAT(1X,A1,' @ ',I4,' ATTEMPTED ',I,' WITH IFO ',I4)
C
100 MOVE=IABS(MOVE)
C
IF (ITURN.EQ.1) BLAH=0
comment **
IF (BLAH.LT.0) MOVE=ICORR(I2+irand(3)-1)
comment **
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)
comment **
AB=RMAP(LOC)
IF (OMAP(LOC).NE.'.') GOTO 200
IF ((AB.LT.'B').OR.(AB.GT.'T')) GOTO 200
comment IF SH/PL, LOOK
BLAH=ATTACK(OWN1,AB,IH1,AGGR)
IF (BLAH.GE.0) GOTO 1200
comment ** ATTACK IT
GOTO 300
comment RUN FROM IT
200 CONTINUE
I1=0
comment NOTHING OF INTEREST HERE
GOTO 800
C
C SELECT AN APPROPRIATE ESCAPE MOVE
C
300 IS=irand(3)
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
comment **
IF ((RMAP(I).EQ.'.').AND.(ORDER(I).EQ.0)) GOTO 700
600 CONTINUE
I1=0
GOTO 800
700 I1=ISCAPE(I2,I1)
IF (OMAP(I).NE.'.') call topmsg ( 3, 'ISCAPE ERROR' )
GOTO 1200
C
800 IF (EXPLOR.EQ.0) GOTO 1000
comment **
EXPMAX=0
DO 900 IX=MOVE,MOVE+7
I1=ICORR(IX)
LOC1=Z6+IARROW(I1+1)
comment **
IF (ORDER(LOC1).NE.0) GOTO 900
IF (RMAP(LOC1).NE.'.') GOTO 900
IF (DEST.GT.0) THEN
IF (IDIST(Z6,DEST).LT.IDIST(LOC1,DEST)) GOTO 900
ENDIF
NEXP=0
IF (EMAP(LOC1+IARROW(I1+1)).EQ.' ') NEXP=1
comment **
IF (EMAP(LOC1+IARROW(ICORR(I1-1)+1)).EQ.' ') NEXP=NEXP+1
comment **
IF (EMAP(LOC1+IARROW(ICORR(I1+1)+1)).EQ.' ') NEXP=NEXP+1
comment **
IF (EMAP(LOC1+IARROW(ICORR(I1+2)+1)).EQ.' ') NEXP=NEXP+1
comment **
IF (EMAP(LOC1+IARROW(ICORR(I1-2)+1)).EQ.' ') NEXP=NEXP+1
comment **
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)
comment **
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)
IF (RMAP(Z6+IARROW(IA+1)).NE.'.') M=IA
comment **
DO 1100 I=0,7*DIR,DIR
I2=ICORR(M+I)
I3=Z6+IARROW(I2+1)
comment **
IF ((RMAP(I3).EQ.'.').AND.(ORDER(I3).EQ.0).AND.(I3.NE.ORIG)) GOTO 1200
1100 CONTINUE
I2=0
1200 IF (I1.NE.0) I2=I1
IF (RMAP(Z6+IARROW(MOVE+1)).NE.'X') MOVE=I2
comment **
IF ((RMAP(Z6).EQ.'X').AND.(IH1.LT.HMAX)) MOVE=0
MOVCOR=MOVE
RETURN
END