|
|
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 c
Length: 3558 (0xde6)
Types: TextFile
Names: »carier.f«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Empire/carier.f«
subroutine carier
c
c This subroutine handles enemy carrier moves
c
IMPLICIT INTEGER(A-Z)
character P
include 'common.h'
C
NUMBER(7)=0
IF (CODER.EQ.7) PRINT 999
999 FORMAT(' CARRIER CODES')
OWN1='c'
MONKEY=0
c
c Begin loop
c
DO 2700 Y=1,LIMIT(15)
Z6=RLMAP(ICA2+Y)
IF (Z6.EQ.0) GOTO 2700
DIR=MOD(Y,2)*2-1
H1=J1TS(ICA2H+Y)
IF (RMAP(Z6).EQ.'X') H1=H1+1
IF (H1.GT.8) H1=8
C
ORIG=Z6
DO 2600 TURN=1,2
IF ((TURN.EQ.2).AND.(H1.LE.4)) GOTO 2700
comment MOVE AT 1/2 SPEED
P='N'
N=0
Z7=Z6
AB=RMAP(Z6)
IF ((AB.NE.'c').AND.(AB.NE.'X')) GOTO 1800
C
C MOVE SELECTION
C
IFO=CODEFU(Y+ICA2-1500)
ILA=CODELA(Y+ICA2-1500)
IF (H1.EQ.8) GOTO 100
IFO=8
ILA=IPORT(Z6)
GOTO 1300
C
C IFO=7: RANDOM DIRECTION
C IFO=6: HEADING TOWARDS STATION
C IFO=8: DAMAGED
C IFO=9: STATIONED
C
C DOES A NEW CODE NEED TO BE SELETED? 800:YES, 1300:NO
C
100 GOTO (200,300,400,500) IFO-5
GOTO 800
C
200 GOTO 1300
C
300 GOTO 800
C
400 IF (H1.EQ.8) GOTO 800
GOTO 1300
C
500 DO 600 I=1,70
IF (TARGET(I).EQ.0) GOTO 600
IF ((EMAP(TARGET(I)).EQ.'O').AND.(IDIST(Z6,TARGET(I)).LE.10))
1 GOTO 1300
600 CONTINUE
DO 700 I=1,10
700 IF (IDIST(Z6,LOCI(I,2)).LE.10) GOTO 1300
GOTO 800
C
C NEW CODE SELECTION
C
800 DO 1200 J=1,10
IF (LOCI(J,2).EQ.0) GOTO 1200
LOC=LOCI(J,2)
KDORK=0
ID=500
DO 900 K=1,70
IF (OWNER(K).NE.2) GOTO 900
IF (IDIST(X(K),LOC).GE.ID) GOTO 900
ID=IDIST(X(K),LOC)
IF (ID.LT.10) GOTO 1200
KDORK=X(K)
900 CONTINUE
DO 1000 K=ICA2+1,ICA2+LIMIT(15)
IS=RLMAP(K)
IF (IS.EQ.0) GOTO 1000
IF (IDIST(IS,LOC).GE.ID) GOTO 1000
IF (CODEFU(K-1500).NE.9) GOTO 1000
ID=IDIST(IS,LOC)
IF (ID.LT.10) GOTO 1200
KDORK=IS
1000 CONTINUE
IF (KDORK.EQ.0) GOTO 1200
1100 IF (IDIST(KDORK,LOC).LT.1) GOTO 1200
LOC=LOC+IARROW(MOV(LOC,KDORK)+1)
comment **
IF (IDIST(KDORK,LOC).GT.19) GOTO 1100
AD=EMAP(LOC)
IF ((AD.NE.' ').AND.(AD.NE.'.')) GOTO 1100
IFO=6
ILA=LOC
GOTO 1300
1200 CONTINUE
C
C RANDOM DIRECTION SELECTION
C
IF (IFO.EQ.7) GOTO 1300
IFO=7
KDORK=0
ILA=irand(8)+1
comment **
C
C NOW PICK THE MOVE SPECIFIED BY IFO AND ILA
C
1300 IF (IFO.EQ.8) GOTO 1500
IF (IFO.NE.7) GOTO 1400
MOVE=ILA
GOTO 1700
1400 IF (IFO.NE.6) GOTO 1600
IF (ILA.NE.Z6) GOTO 1500
IFO=9
GOTO 1600
1500 MOVE=PATH(Z6,ILA,DIR,OKC,FLAG)
GOTO 1700
1600 IF (Z6.NE.ILA) MOVE=MOV(Z6,ILA)
IF (Z6.EQ.ILA) MOVE=irand(8)+1
comment **
C
C MOVE CORRECTION
C
1700 AGGR=0
IF ((NUMBER(7).GT.3).AND.(IFO.NE.9)) AGGR=5
MOVE=MOVCOR(IFO,TURN,Z6,MOVE,H1,1,AGGR,'c',1,DIR,-1,ORIG,8)
IF (IFO.EQ.7) ILA=IABS(MOVE)
CODEFU(Y+ICA2-1500)=IFO
CODELA(Y+ICA2-1500)=ILA
IF (CODER.EQ.7) PRINT 998,IFO,ILA
998 FORMAT(1X,I)
C
C MOVE EVALUATION
C
Z6=Z6+IARROW(IABS(MOVE)+1)
IF (OMAP(Z7).NE.'*') RMAP(Z7)=OMAP(Z7)
AB=RMAP(Z6)
IF (AB.EQ.'.') GOTO 2000
IF (AB.EQ.'X') GOTO 2100
IF ((AB.GE.'A').AND.(AB.LE.'T')) GOTO 1900
PRINT 997,OWN1,Z6,AB
997 FORMAT(' ENEMY ',A1,' AT ',I4,' RAN AGROUND ON ',A1)
1800 H1=0
GOTO 2200
1900 H2=30
P='S'
OWN2=AB
CALL FIND(OWN2,Z6,Z8,H2)
CALL FGHT(Z6,H1,H2,'c',OWN2)
CALL FIND(OWN2,Z6,Z8,H2)
IF (H1.LE.0) GOTO 2200
2000 RMAP(Z6)=OWN1
2100 RLMAP(Y+ICA2)=Z6
J1TS(Y+ICA2H)=H1
IF (TURN.EQ.1) NUMBER(7)=NUMBER(7)+1
2200 N=0
IF (P.EQ.'S') CALL SENSOR(Z6)
DO 2300 I=1,LIMIT(10)
IF (Z7.NE.RLMAP(I+2000)) GOTO 2300
IF (N+1.GT.H1) THEN
IF (RMAP(Z7).NE.'X') RLMAP(I+2000)=0
GOTO 2300
ENDIF
N=N+1
RLMAP(I+2000)=Z6
2300 CONTINUE
IF (H1.LE.0) GOTO 2400
MONKEY=Y
GOTO 2500
2400 RLMAP(Y+ICA2)=0
CODEFU(Y+ICA2-1500)=0
CODELA(Y+ICA2-1500)=0
J1TS(ICA2H+Y)=0
2500 CALL SONAR(Z6)
2600 CONTINUE
2700 CONTINUE
LIMIT(15)=MONKEY
RETURN
END