|
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 a
Length: 6667 (0x1a0b) Types: TextFile Names: »armyen.f«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Empire/armyen.f«
subroutine armyen c c This subroutine handles enemy army moves c IMPLICIT INTEGER(A-Z) include 'common.h' C cc integer irand monkey=0 number(1)=0 if (coder.eq.1) print 999 999 format(' army codes') c c start army move loop c do 4200 y=1,limit(9) z6=rlmap(iar2+y) if (z6.eq.0) goto 4200 if (coder.eq.0) goto 200 ptr = 0 call addint ( y, jnkbuf, ptr ) call addstr ( ' ', jnkbuf, ptr ) call addint ( npath, jnkbuf, ptr ) npath=0 200 z7=z6 monkey=y c comment set dir to 1 or -1 dir=mod(y,2)*2-1 p=0 c comment set ab=what is showing where the army is ab=rmap(z6) ac= '\0' if ((ab.ne.'a').AND.(AB.NE.'t').and.(ab.ne.'X')) goto 3700 c c Age ar2s c if ((ar2s(y).le.100).or.(ar2s(y).gt.1000)) ar2s(y)=ar2s(y)-1 if ((ar2s(y).lt.0).or.(ar2s(y).eq.1000)) ar2s(y)=0 if (ab.eq.'a') goto 300 if (ab.eq.'X') then do 250 i=1,limit(13) if (rlmap(itt2+i).eq.z6) goto 270 250 continue goto 300 endif 270 if (armjmp(z6,ar2s(y)).eq.0) goto 4150 c c Move selection c 300 ifo=codefu(y) ila=codela(y) c c If a priority move exists, pick it and don't bother slugging c through code selection and move selection c move1=priori(z6,ifo,ila,dir,ab) if (move1.ne.0) goto 2400 c c ifo = 0 move in certain direction, or follow shore c ifo = 1 move towards target city c ifo = 2 move towards an enemy army c ifo = 3 move towards a troop transport c goto ( 400, 500, 600, 700 ) ifo + 1 c comment look for targets, loci, tt's 400 goto 800 500 if (rmap(ila).eq.'X') goto 800 c comment city has been captured goto 1600 c comment move 600 if (ila.eq.z6) goto 800 c comment arrived at enemy concentration goto 1600 c comment move 700 if (ila.gt.100) goto 800 c comment invalid value for ila if (codefu(ila+itt2-1500).ge.6) goto 1200 if (rlmap(ila+itt2).eq.0) goto 1200 c comment tt sunk if (j1ts(ila+itt2h).lt.3) goto 1200 c tt damaged goto 1700 c c Select a new code c 800 continue c c Look for target city c if (number(10).eq.0) goto 1050 ia=irand(number(10))+1 ib=ia+number(10)-1 do 1000 ic=ia,ib i=ic if (i.gt.number(10)) i=i-number(10) if (target(i).eq.0) goto 1000 if (idist(z6,target(i)).gt.14) goto 1000 move=path(z6,target(i),dir,okb,flag) npath=npath+1 if (flag.eq.0) goto 1000 c comment can't get to it ifo=1 ila=target(i) goto 1800 c comment move 1000 continue c c Look for an army that is on your continent c 1050 if (loci(10,11).ne.0) loci(10,11)=0 do 1100 i=1,10 temp=irand(10)+2 if (loci(i,temp).eq.0) temp=2 if (loci(i,temp).eq.0) goto 1100 temp=loci(i,temp) move=path(z6,temp,dir,okb,flag) npath=npath+1 if (flag.eq.0) goto 1100 ifo=2 ila=temp goto 1800 1100 continue c c Look for tt that is short of armies c 1200 if ((ar2s(y).ne.0) .or. (limit(13) .eq. 0)) goto 1400 c added or here c comment ineligible to get on a tt ia=irand(limit(13))+1 do 1300 ic=ia,ia+limit(13) i=ic if (i.gt.limit(13)) i=i-limit(13) if (rlmap(itt2+i).eq.0) goto 1300 c comment tt doesn't exist if (j1ts(itt2h+i).lt.3) goto 1300 c comment damaged, i.e. unsuitable if (iabs(codefu(itt2+i-1500)).ge.6) goto 1300 if (idist(z6,rlmap(itt2+i)).gt.20) goto 1300 c comment too far away move=path(z6,rlmap(itt2+i),dir,okb,flag) npath=npath+1 if (flag.eq.0) goto 1300 comment can't get to it move=mov(z6,rlmap(itt2+i)) ifo=3 ila=i codela(itt2+i-1500)=y goto 1800 1300 continue c c Pick a random direction (ifo=0) c 1400 if ((ifo.eq.0).and.(ila.ne.0)) goto 1500 comment if already ass'd direc ifo=0 ila=irand(8)+1 comment ** 1500 move=ila i1=icorr(move-dir*3) if (rmap(z6+iarrow(i1+1)).ne.'+') move=i1 comment ** goto 1800 1600 move=path(z6,ila,dir,okb,flag) npath=npath+1 if (flag.eq.0) goto 1400 goto 1800 1700 move=path(z6,rlmap(ila+itt2),dir,okb,flag) npath=npath+1 1800 do 2300 i=0,7*dir,dir move1=icorr(move+i) loc=z6+iarrow(move1+1) comment ** ac=rmap(loc) if (ac.ne.'t') goto 2200 if (ifo.eq.3) ifo=0 if (ar2s(y).ne.0) goto 2300 numarm=0 do 1900 iz=itt2+1,limit(13)+itt2 1900 if (rlmap(iz).eq.loc) goto 2000 2000 if (j1ts(itt2h-itt2+iz).lt.3) goto 2300 do 2100 iy=iar2+1,limit(9)+iar2 if (rlmap(iy).eq.loc) numarm=numarm+1 2100 if (numarm.ge.6) goto 2300 goto 2400 2200 if ((ac.eq.'+').and.(order(loc).eq.0)) goto 2400 2300 continue move1=0 c 2400 if (ifo.eq.0) ila=iabs(move1) codefu(y)=ifo codela(y)=ila if (coder.eq.1) print 998,ifo,ila 998 format(1x,7i,3x) z6=z6+iarrow(move1+1) comment ** c ac=rmap(z6) if (ab.ne.'t') goto 2500 if (ac.eq.'t') goto 3600 codefu(y)=0 codela(y)=0 ar2s(y)=1020 goto 2600 2500 if (omap(z7).ne.'*') rmap(z7)=omap(z7) if (ac.ne.'t') goto 2600 ar2s(y)=100 goto 3600 2600 if (ac.eq.'+') goto 3500 if ((ac.eq.'X').or.(ac.eq.'.')) goto 3700 if (omap(z6).ne.'*') goto 3400 if (irand(100).lt.50) then id=10 do 2650 i=1,limit(9) if (rlmap(iar2+i).eq.0) goto 2650 if (i.eq.y) goto 2650 if (codefu(i).ne.0) goto 2650 if (idist(rlmap(iar2+i),z6).ge.id) goto 2650 move=path(rlmap(iar2+i),z6,1,okb,flag) npath=npath+1 if (flag.eq.0) goto 2650 comment can't get to it id=idist(rlmap(iar2+i),z6) iy=i 2650 continue if (id.lt.10) then ifo=1 ila=z6 endif goto 3700 endif do 2700 i=1,70 2700 if (target(i).eq.z6) target(i)=0 do 2800 i=1,limit(9) 2800 if (codefu(i).ne.1.or.codela(i).ne.z6) goto 2900 codefu(i)=0 codela(i)=0 2900 do 3000 i=1,100 3000 if (x(i).eq.z6) goto 3100 3100 owner(i)=2 phase(i)=0 if (((ac.eq.'O').or.(ar2s(y).gt.0)).and.(edger(z6).lt.8)) * phase(i)=-1 if (ac.ne.'O') goto 3200 ptr = 0 call addstr ( 'City at ', jnkbuf, ptr ) call addint ( z6, jnkbuf, ptr ) call addstr ( ' surrendered to enemy forces', jnkbuf, ptr ) jnkbuf ( ptr + 1 ) = '\0' call topmsg ( 3, jnkbuf ) call cflush call delay(30) rmap(z6)='X' call sensor(z6) goto 3700 3200 rmap(z6)='X' goto 3700 3300 ar2s(y)=100 goto 3600 3400 h1=1 if (z7.eq.z6) goto 3600 997 format(1h+,/,' Error: attacked ',a1,4i,1x) p=1 own1='a' own2=ac h2=30 call find(own2,z6,z8,h2) call fght(z6,h1,h2,own1,own2) call find(own2,z6,z8,h2) if (h1.le.0) goto 3700 rmap(z6)=omap(z6) if (rmap(z6).eq.'.') goto 3700 3500 rmap(z6)='a' 3600 rlmap(iar2+y)=z6 if (p.eq.1) call sensor(z6) goto 4100 3700 rlmap(iar2+y)=0 if (ac.ne.'X') goto 3900 do 3800 i=1,70 3800 if (x(i).eq.z6) phase(i)=0 3900 if (p.eq.1) call sensor(z6) if (rmap(z6).ne.'O') goto 4000 ptr = 0 call addstr ( 'City at ', jnkbuf, ptr ) call addint ( z6, jnkbuf, ptr ) call addstr ( ' repelled enemy invasion', jnkbuf, ptr ) jnkbuf(ptr + 1) = '\0' call topmsg ( 3, jnkbuf ) call cflush call delay(30) 4000 codefu(y)=0 codela(y)=0 ar2s(y)=0 4100 call sonar(z6) 4150 if (rlmap(iar2+y).ne.0) number(1)=number(1)+1 4200 continue limit(9)=monkey return end