SUBROUTINE ARMYMV C C THIS SUBROUTINE HANDLES PLAYER'S ARMY MOVES C INCLUDE 'EMPIRE.INC/NOLIST' LOGICAL FATAL BYTE I100 C ITURN=1 DO 2700 Y=1,LIMIT(1) CALL MAP(8) IF (MOVEDFLAG(Y).NE.0) GOTO 2700 CALL MAP(4) Z6=RLMAP(Y) IF (Z6.EQ.0) GOTO 2700 CALL MAP(7) MYCOD=MYCODE(Y) C IF ((MODE.EQ.1).AND.(POSCHK(Z6,'A').EQ.0)) GOTO 2700 IF (POSCHK(Z6,'A').EQ.0) GOTO 2700 CALL MAP(8) MOVEDFLAG(Y)=1 Z7=Z6 CALL MAP(2) AB=RMAP(Z6) IF ((AB.EQ.'A').OR.(AB.EQ.'T').OR.(AB.EQ.'O')) GOTO 200 100 CALL LIBCUR(3,1) CALL STROUT('Army #',10) CALL DECPRT(Y) CALL STROUT(' destroyed.',1) GOTO 2500 C 200 IF (AB.NE.'T') GOTO 400 DO 300 I=1,8 CALL MAP(2) IF (RMAP(Z6+IARROW(I+1)).EQ.'T') GOTO 400 CALL MAP(3) 300 IF (OMAP(Z6+IARROW(I+1)).NE.'.') GOTO 400 !DON'T ASK IF NOWHERE TO GO GOTO 2700 400 IF (MYCOD.EQ.0) GOTO 1000 IF (MYCOD.NE.100) GOTO 500 Z6=Z6+IARROW(JIGGLE(Z6,Y)+1) ! DO RANDOM MOVE GOTO 1200 500 CALL STASIS(Z6,Y) ! WAKE UP IF NEAR ENEMY 600 CALL MAP(7) MYCOD=MYCODE(Y) IF (MYCOD.EQ.0) GOTO 1000 IF ((MYCOD.LT.100).OR.(MYCOD.GT.6108)) GOTO 1200 IF (MYCOD.GT.6100) GOTO 800 IF (MYCOD.LE.6000) GOTO 700 GOTO 1200 700 Z6=Z6+IARROW(MOV(Z6,MYCOD)+1) ! DO A MOVE TOWARD A LOCATION GOTO 900 800 Z6=Z6+IARROW(MYCOD-6100+1) ! DO DIRECTION MOVES 900 CALL MAP(2) AD=RMAP(Z6) IF (((AD.EQ.'+').OR.(AD.EQ.'T')).AND.(ORDER(Z6).EQ.0)) GOTO 1200 Z6=Z7 1000 CALL MAP(5) CALL SECTOR(PMAP(1)) CALL LTR(Z6,ITURN) 1100 CALL MVE('A',MDATE,Y,Y,1,Z6,Z7,DISAS,Z6-IADJST) IF (DISAS.EQ.-2) GOTO 600 !JUST PUT INTO STASIS C C MOVE EVALUATION, Z6=TO, Z7=FROM, CHECK OUT NEW LOCATION C 1200 CALL MAP(7) IF (Z6.EQ.MYCODE(Y)) MYCODE(Y)=0 CALL MAP(3) I100=OMAP(Z7) AO=OMAP(Z6) CALL MAP(2) IF ((RMAP(Z7).NE.'T').AND.(I100.NE.'*')) RMAP(Z7)=I100 AC=RMAP(Z6) IF (AC.EQ.'T') GOTO 1400 !GETTING ON A TRANSPORT? IF ((RMAP(Z7).NE.'T').OR.(AO.NE.'.')) GOTO 1300 IF (.NOT. FATAL(1)) GOTO 2800 !CANNOT ATTACK ON TRANSPORTS,ASK CALL LIBCUR(2,1) CALL STROUT('You are incapable of attack while 1 on a transport.',1) CALL STROUT('Your army jumped into the briny and drowned.',1) GOTO 2500 1300 IF (AO.NE.'.') GOTO 1600 !MAKE SURE NOT SEA IF (.NOT. FATAL(1)) GOTO 2800 !ASK ABOUT DROWNING IF (AC.NE.'.') GOTO 1800 CALL LIBCUR(3,1) CALL STROUT('Your army marched dutifully into the 1 sea and drowned.',1) GOTO 2500 1400 H1=30 !CHECK IF ROOM ON TRANSPORT CALL FIND(AC,Z6,Z8,H1) N=0 CALL MAP(4) DO 1500 I=1,LIMIT(1) IF (RLMAP(I).NE.Z6) GOTO 1500 IF (I.EQ.Y) GOTO 1500 !DONT COUNT OURSELF N=N+1 1500 CONTINUE IF (N.LT.H1*2) GOTO 1700 IF (.NOT. FATAL(6)) GOTO 2800 CALL MAP(7) IF (MYCODE(Y).GT.50) MYCODE(Y)=0 GOTO 1700 1600 IF (AC.NE.'+') GOTO 1800 !CHECK IF CLEAR CALL MAP(2) RMAP(Z6)='A' !PUT ARMY ON THE MAP 1700 CALL MAP(4) RLMAP(Y)=Z6 !RECORD NEW LOCATION GOTO 2600 C WE'RE ATTACKING SOMETHING 1800 H1=1 !ARMIES HAVE ONE HIT CALL MAP(3) IF (OMAP(Z6).NE.'*') GOTO 2400 DO 2300 IY=1,70 !IT'S A CITY, FIND WHO OWNS IT IF (X(IY).NE.Z6) GOTO 2300 IF (OWNER(IY).NE.1) GOTO 1900 CALL MAP(4) DO 1850 JY=1,LIMIT(5) IF (Z6.EQ.RLMAP(ITT+JY)) GOTO 1400 1850 CONTINUE IF (.NOT. FATAL(5)) GOTO 2800 !ASK ABOUT FATAL MOVE CALL MAP(2) RMAP(Z6)='O' CALL LIBCUR(2,1) CALL STROUT('BASTARDO! You attacked your own city!',1) CALL STROUT('Your impertinent attacking army was liquidated.',1) GOTO 2500 1900 IF (RND(100).LT.50) GOTO 2000 CALL LIBCUR(3,1) CALL STROUT('The scum defending the city has crushed 1 your attacking blitzkrieger!',1) GOTO 2300 2000 CALL MAP(5) CALL SECTOR(PMAP(1)) CALL LIBCUR(2,1) CALL STROUT('City #',10) CALL DECPRT(IY) CALL STROUT(' has been subjugated!',10) CALL STROUT('The army has been dispersed to enforce 1 control.',1) CALL STROUT('What are your production demands for this city?',3) CALL MAP(2) RMAP(Z6)='O' CALL SENSOR(Z6) CALL CURSOR(Z6-IADJST) PHASE(IY)=0 FOUND(IY)=10000 CALL PHASIN(IY,E) CALL LIBCUR(3,49) TYPE 999,E 999 FORMAT('+',A1,$) IF (OWNER(IY).NE.2) GOTO 2200 !IF ENEMY OWNED IT, TELL HIM CALL SONAR(Z6) DO 2100 I=1,70 IF (TARGET(I).EQ.Z6) GOTO 2200 IF (TARGET(I).NE.0) GOTO 2100 TARGET(I)=Z6 GOTO 2200 2100 CONTINUE 2200 OWNER(IY)=1 2300 CONTINUE GOTO 2500 C ATTACKING ANOTHER UNIT 2400 IF ((AC.GE.'A').AND.(AC.LE.'T')) THEN IF (.NOT.FATAL(2)) GOTO 2800 ENDIF OWN1='A' OWN2=AC H1=1 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 2500 ! DID I LOSE?, YES, WIPE UP CALL MAP(2) RMAP(Z6)='A' IF ((OWN2.GE.'a').AND.(OWN2.LE.'t')) CALL SONAR(Z6) IF (AO.EQ.'+') GOTO 1700 RMAP(Z6)=AO IF ((OWN2.GE.'a').AND.(OWN2.LE.'t')) CALL SONAR(Z6) CALL LIBCUR(2,1) CALL STROUT('Your army regretfully drowns after its successful 1 assault',1) 2500 CALL MAP(4) RLMAP(Y)=0 !"KILL" MY ARMY CALL MAP(7) MYCODE(Y)=0 2600 CALL SENSOR(Z6) 2700 CONTINUE RETURN C C RECOVER FROM FATAL MOVE, AND TRY AGAIN C 2800 Z6=Z7 ! GO BACK TO OLD LOCATION CALL MAP(2) RMAP(Z6)=AB ! CHANGE IT BACK TO PREVIOUS GOTO 1000 END