-+-+-+-+-+-+-+-+ START OF PART 4 -+-+-+-+-+-+-+-+ X2300`09IF (AB.NE.'O') GOTO 2400 X`09FIPATH(CITFND(Z6))=J+6100 X`09GOTO 200 X2400`09H2=30 X`09CALL FIND(AB,Z6,MOVFLG,H2) X`09MYCODE(MOVFLG)=J+6100 X`09GOTO 200 XC`20 XC M: SAY WE WANT TO MOVE TO A LOCATION XC X2500`09AB=RMAP(Z6) X`09IF ((AB.LT.'A').OR.(AB.GT.'T')) GOTO 4500 X`09IF (AB.NE.'O') GOTO 2600 X`09WHTFLG='CI' X`09MOVFLG=CITFND(Z6) X`09GOTO 200 X2600`09H2=30 X`09CALL FIND(AB,Z6,MOVFLG,H2) X`09WHTFLG='UN' X`09GOTO 200 XC`20 XC K: WAKE UP ANYTHING AND EVERYTHING XC X2700`09AB=RMAP(Z6) X`09IF ((AB.LT.'A').OR.(AB.GT.'T')) GOTO 4500 X`09IF (AB.NE.'O') GOTO 2800 X`09FIPATH(CITFND(Z6))=0`09`09!IF CITY, KILL FLIGHT PATH X`09DO 2750 I=501,1500`09`09!WAKE ANY FIGHTERS OR SHIPS X`09IF (RLMAP(I).EQ.Z6) MYCODE(I)=0 X2750`09CONTINUE X`09GOTO 200 X2800`09H2=30`09`09`09`09!NOT A CITY, FIND THE UNIT X`09CALL FIND(AB,Z6,MOVFLG,H2) X`09MYCODE(MOVFLG)=0`09`09!ZERO ANY FUNCTION CODE X`09IF (AB.NE.'T') GOTO 2817`09!IF TRANSPORT, WAKE ARMIES ABOARD X`09DO 2816 J=1,500 X2816`09IF (RLMAP(J).EQ.Z6) MYCODE(J)=0 X`09GOTO 200 X2817`09IF (AB.NE.'C') GOTO 200`09`09!IF CARRIER, WAKE FIGHTERS ABOARD X`09DO 2818 J=501,700 X2818`09IF (RLMAP(J).EQ.Z6) MYCODE(J)=0 X`09GOTO 200 XC`20 XC N: GO HERE XC X2900`09IF (WHTFLG.NE.'CI') GOTO 3000 X`09FIPATH(MOVFLG)=Z6 X`09GOTO 200 X3000`09IF (WHTFLG.NE.'UN') GOTO 4500 X`09MYCODE(MOVFLG)=Z6 X`09GOTO 200 XC`20 XC S: GOTO SLEEP XC X3100`09AB=RMAP(Z6) X`09IF ((AB.LT.'A').OR.(AB.GT.'T')) GOTO 4500 X`09IF (AB.EQ.'O') GOTO 4500 X`09H2=30 X`09CALL FIND(AB,Z6,MOVFLG,H2) X`09MYCODE(MOVFLG)=50 X`09GOTO 200 XC`20 XC ?: REQUEST INFO XC X3200`09AB=RMAP(Z6) X`09IF (AB.EQ.'O') GOTO 3800 X`09IF ((AB.EQ.'X').AND.(PASS)) GOTO 3800 X`09IF ((AB.GE.'A').AND.(AB.LE.'T')) GOTO 3250 X`09IF ((AB.GE.'a').AND.(AB.LE.'t').AND.(PASS)) GOTO 3250 X`09GOTO 4500 X X3250`09H2=30 X`09CALL FIND(AB,Z6,MOVFLG,H2) X`09IF (MOVFLG.LE.1500) THEN X`09 DO 3300 I=1,8 X3300`09 IF (AB.EQ. PHAZE(I)) RELNUM=MOVFLG-CRALOC(PH(I)) X`09 CALL HEAD(AB,RELNUM,MOVFLG,Z6,H2)`09!DISPLAY STANDARD HEADER X`09 ELSE X`09 CALL LIB$SET_CURSOR(1,1) X`09 TYPE 989,MOVFLG,CODEFU(MOVFLG-1500),CODELA(MOVFLG-1500),H2 X989`09 FORMAT('+ UNIT=',I5,' FUNCTION=',I5,' SUB FUNC=',I5, X`091 ' HITS=',I2,$) X`09 CALL LIB$ERASE_LINE X`09ENDIF X`09IF ((AB.EQ.'A').OR.(AB.EQ.'F').OR.(AB.EQ.'a').OR.(AB.EQ.'f')) GOTO 200 XC`09CALL LIB$SET_CURSOR(2,1)`09`09`09!DO HITS FOR SHIPS XC`09CALL STROUT(' Hits left:',10) XC`09CALL DECPRT(H2) XC`09CALL LIB$ERASE_LINE X`09N=0 X`09BASE=0 X`09IF (MOVFLG.GT.1500) BASE=1500 X`09IF ((AB.NE.'T').AND.(AB.NE.'t')) GOTO 3500 X`09DO 3400 I=1,500`09`09`09`09!COUNT ARMIES X3400`09IF (RLMAP(I+BASE).EQ.Z6) N=N+1 X`09IF (N.EQ.0) GOTO 3700 X`09IF (MODE.EQ.1) CALL LIB$SET_CURSOR(3,1) X`09CALL DECPRT(N) X`09CALL STROUT(' armies aboard.',1) X`09GOTO 200 X3500`09IF ((AB.NE.'C').AND.(AB.NE.'c')) GOTO 200 X`09DO 3600 I=1,200`09`09`09`09!COUNT FIGHTERS X3600`09IF (RLMAP(I+500+BASE).EQ.Z6) N=N+1 X`09IF (N.EQ.0) GOTO 3700 X`09IF (MODE.EQ.1) CALL LIB$SET_CURSOR(3,1) X`09CALL DECPRT(N) X`09CALL STROUT(' fighters aboard.',1) X`09GOTO 200 X3700`09IF (MODE.EQ.1) CALL LIB$SET_CURSOR(3,1)`09`09!NOTHING THERE X`09CALL STROUT('Nothing aboard.',1) X`09GOTO 200 XC XC`09DISPLAY CITIES INFO XC X3800`09J=CITFND(Z6)`09`09`09`09!FIND CITY X`09BASE=0 X`09IF (OWNER(J).EQ.2) BASE=1500 X`09N=0 X`09DO 3900 I=BASE+501,BASE+700`09`09!COUNT FIGHTERS X3900`09IF (RLMAP(I).EQ.Z6) N=N+1 X`09CALL LIB$SET_CURSOR(2,1) X`09CALL STROUT(' Fighters landed:',10) X`09CALL DECPRT(N) X`09N=0`09 X`09DO 4000 I=BASE+701,BASE+1500`09`09!COUNT SHIPS X4000`09IF (RLMAP(I).EQ.Z6) N=N+1 X`09CALL STROUT(' Ships docked:',10) X`09CALL DECPRT(N) X`09CALL LIB$ERASE_LINE X4150`09CALL LIB$SET_CURSOR(1,1)`09`09!EXPLAIN PRODUCTION X`09CALL STROUT(' City at location:',10)`20 X`09CALL DECPRT(Z6) X`09CALL STROUT(' Producing:',10) X`09DO 4100 I=1,8 X4100`09IF (PHASE(J).EQ.PH(I)) TYPE 997,PHAZE(I) X997`09FORMAT('+',A1,$) X`09CALL STROUT(' Completion:',10)`20 X`09CALL DECPRT(FOUND(J)) X`09CALL STROUT(' Fpath:',10) X`09IF (FIPATH(J).LT.100) CALL STROUT('sit',0) X`09IF ((FIPATH(J).GT.100).AND.(FIPATH(J).LT.6000)) X`091`09CALL DECPRT(FIPATH(J)) X`09IF (FIPATH(J).GT.6100) TYPE 997, COMM(FIPATH(J)-6100) X`09CALL LIB$ERASE_LINE X`09GOTO 200 XC`20 XC Y: ENTER NEW CITY PRODUCTION XC X4200`09AB=RMAP(Z6) X`09IF (AB.NE.'O') GOTO 4500 X`09J=CITFND(Z6) X`09CALL LIB$SET_CURSOR(2,40) X`09CALL STROUT(' New Production:',13) X`09CALL PHASIN(J,E) X`09TYPE 999,E X`09GOTO 4150 XC`20 XC R: SET ARMY TO MOVE AT RANDOM XC X4300`09AB=RMAP(Z6) X`09IF (AB.NE.'A') GOTO 4500 X`09H2=30 X`09CALL FIND(AB,Z6,MOVFLG,H2) X`09MYCODE(MOVFLG)=100 X`09GOTO 200 XC`20 XC H: GET HELP XC X4400`09CALL HELP X`09E=GETCHX() X`09ISEC=-1 X`09CALL SECTOR(PMAP(1)) X`09ISEC=-1 X`09GOTO 100 XC`20 X4500`09CALL HUH X`09GOTO 200 X`09END X`0C X`09SUBROUTINE MVE(OWN1,XXXMDATE,RELNUM,NUM,N2,Z6,Z7,DISAS,JURSOR) XC XC`09INPUTS: XC`09`09OWN1 = CHAR OF PIECE (IE: 'A' FOR ARMY) XC`09`09XXXMDATE = ROUND NUMBER XC`09`09RELNUM = RELATIVE PIECE NUMBER TO TYPE XC`09`09NUM = PIECE INDEX TO RLMAP XC`09`09N2 = PIECE INDEX TO HITS XC`09`09Z6 = LOCATION, RETURN NEW LOCATION XC`09`09Z7 = OLD LOCATION XC`09`09DISAS = 0:OK, -2:STASIS XC`09`09JURSOR = CURRENT CURSOR XC X`09INCLUDE 'EMPIRE.INC/NOLIST' XC XC HANDLE PLAYER MOVE MODE XC X`09DISAS=0 XC GET COMMAND CHARACTER WITH NO ECHO X100`09CALL SECTOR(PMAP(1)) X`09IB=J1TS(N2) X`09CALL HEAD(OWN1,RELNUM,NUM,Z6,IB)`09`09!DISPLAY HEADER X`09IF (GIGI.NE.0) CALL REGIS_ON X`09CALL CURSOR(JURSOR) X`09IF (GIGI.NE.0) CALL CENTER_CURSOR X`09E=GETCHX() X`09IF (GIGI.NE.0) CALL REGIS_OFF X`09CALL LIB$ERASE_LINE(2,1) X`09CALL LIB$ERASE_LINE(3,1) XC`20 XC LOOK AT THE COMMAND XC X`09Z7=Z6 X`09DO 300 I=1,9 X`09IND=I X300`09IF (E.EQ.KBTBL(IND)) GOTO 400 X`09GOTO 500`09`09`09!COMMAND IS NOT A DIRECTION X400`09Z6=Z6+KBFUDG(IND) X`09GOTO 4200 XC`20 X500`09END=16 X`09IF (PASS) END=20 X`09DO 600 I=1,END X600`09IF (E.EQ.COMMAN(I)) GOTO 700 X`09I=0 XC`09 S,R,I,K,O,L,F,G,P, H, Y, T, V, J, ?, U, 0, B, N, + X700`09GOTO (900,1000,1100,1500,1900,2000,2300,2400,2500,2600, X`091 2700,2900,2900,3200,3300,2800,800,3800,3900,2600) I X800`09GOTO 100 XC`20 XC S: PUT TO SLEEP XC X900`09IF (RMAP(Z6).EQ.'O') RETURN X`09MYCODE(NUM)=50 X`09RETURN XC`20 XC R: RANDOM MOVEMENT XC X1000`09IF (OWN1.NE.'A') GOTO 100`09`09!ONLY FOR ARMIES X`09MYCODE(NUM)=100 X`09Z6=Z6+IARROW(JIGGLE(Z6,NUM)+1)`09`09!** X`09RETURN XC`20 XC I: PUT IN DIRECTIONAL STASIS XC X1100`09IF (GIGI.NE.0) CALL REGIS_ON X`09CALL CURSOR(JURSOR)`09`09!CUZ OF CLEAR LINES ABOVE X`09IF (GIGI.NE.0) CALL CENTER_CURSOR X`09E=GETCHX() X`09IF (GIGI.NE.0) CALL REGIS_OFF X`09DO 1200 I=1,9 X`09IF (E .EQ. KBTBL(I)) GOTO 1300 X1200`09CONTINUE X`09GOTO 1400 X1300`09MYCODE(NUM)=CMYTBL(I) X1400`09IF (MYCODE(NUM).EQ.0) GOTO 100 X`09DISAS=-2 X`09RETURN XC`20 XC K: KILL STASIS NUMBER ON PIECE XC X1500`09MYCODE(NUM)=0`09`09`09!ZERO FUNCTION CODE FOR ANYTHING X X`09IF (OWN1.NE.'T') GOTO 1700`09!IF TRANSPORT, WAKE ARMIES ABOARD X`09DO 1600 J=1,500 X1600`09IF (RLMAP(J).EQ.Z6) MYCODE(J)=0 X`09GOTO 100 X1700`09IF (OWN1.NE.'C') GOTO 100`09!IF CARRIER, WAKE FIGHTERS ABOARD X`09DO 1800 J=501,700 X1800`09IF (RLMAP(J).EQ.Z6) MYCODE(J)=0 X`09GOTO 100 XC`20 XC O: CANCEL AUTO MOVE MODE XC X1900`09AUTOMV=.FALSE. X`09CALL LIB$SET_CURSOR(3,1) X`09CALL STROUT(' Auto move mode canceled.',3) X`09GOTO 100 XC`20 XC L: SET UP CITY STASIS NUMBERS XC X2000`09IF (OMAP(Z6).NE.'*') GOTO 2300`09`09!BETTER BE A CITY X`09E=GETCHX() X`09DO 2100 I=1,9 X`09IF (E .EQ. KBTBL(I)) GOTO 2200 X2100`09CONTINUE X`09GOTO 4100 X2200`09FIPATH(CITFND(Z6))=CMYTBL(I)`09`09!SET STASIS NUMBER X`09DISAS=-2 X`09RETURN XC`20 XC F: XC X2300`09CALL DIREC X`09GOTO 4100 XC`20 XC G: PUT T/C TO SLEEP XC X2400`09IF ((OWN1.NE.'T').AND.(OWN1.NE.'C')) GOTO 100 X`09MYCODE(NUM)=9997 X`09DISAS=-2 X`09RETURN XC`20 XC P: SECTOR PRINTOUT XC X2500`09ISEC=-1 X`09CALL SECTOR(PMAP(1)) X`09GOTO 4100 XC`20 XC H: GET HELP XC X2600`09CALL HELP X`09E=GETCHX() X`09ISEC=-1 X`09GOTO 4100 XC`20 XC Y: CHANGE PHASE OF A CITY XC X2700`09CALL DIREC X`09GOTO 4100 XC XC U: RETURN FIGHTER TO CLOSEST LANDING AREA XC X2800`09CONTINUE X`09IF (OWN1.NE.'F') GOTO 100 X`09DIST=21 X`09DO 2820 I=1,LIMIT(7) X`09LOC=ICA+I X`09Z8=RLMAP(LOC) X`09IF (Z8.EQ.0) GOTO 2820 X`09IF (IDIST(Z6,Z8).GE.DIST) GOTO 2820 X`09IF (IDIST(Z6,Z8).GT.RANGE(RELNUM)) GOTO 2820 X`09DIST=IDIST(Z6,Z8) X`09TARG=Z8 X`09IF (DIST+3.LT.RANGE(RELNUM)) GOTO 2850 X2820`09CONTINUE X`09DO 2840 I=1,70 X`09IF (OWNER(I).NE.1) GOTO 2840 X`09Z8=X(I) X`09IF (IDIST(Z6,Z8).GE.DIST) GOTO 2840 X`09IF (IDIST(Z6,Z8).GT.RANGE(RELNUM)) GOTO 2840 X`09DIST=IDIST(Z6,Z8) X`09TARG=Z8 X2840`09CONTINUE X2850`09IF (DIST.EQ.21) GOTO 100 X`09DISAS=-2 X`09MYCODE(NUM)=TARG X`09RETURN XC`20 XC T: BLOCK PRINTOUT XC XC`09CALL CLEAR XC`09CALL BLOCK(PMAP(1)) XC`09ISEC=-1 XC`09GOTO 4100 X2900`09CALL DIREC X`09GOTO 100 XC`20 XC J: PUT IN EDIT MODE XC X3200`09CALL EDIT(Z6) X`09DISAS=-2 X`09RETURN XC`20 XC ?: HOW MANY HITS? LOADED? XC X3300`09IF ((OWN1.EQ.'A').OR.(OWN1.EQ.'F')) GOTO 100 X`09IB=J1TS(N2)`09`09`09`09!DISPLAY HITS LEFT X`09IF (MODE.EQ.1) CALL LIB$SET_CURSOR(2,1) XC`09CALL STROUT(' Hits left:',10) XC`09CALL DECPRT(IB) X`09CALL LIB$ERASE_LINE X`09N=0`09`09`09`09`09!COUNT ARMIES X`09IF (OWN1.NE.'T') GOTO 3500 X`09DO 3400 I=1,500 X3400`09IF (RLMAP(I).EQ.Z6) N=N+1 X`09IF (N.EQ.0) GOTO 3700 X`09IF (MODE.EQ.1) CALL LIB$SET_CURSOR(3,1) X`09CALL DECPRT(N) X`09CALL STROUT(' armies aboard.',1) X`09GOTO 4100 X X3500`09IF (OWN1.NE.'C') GOTO 4100 X`09DO 3600 I=1,200`09`09`09`09!COUNT FIGHTERS X3600`09IF (RLMAP(I+500).EQ.Z6) N=N+1 X`09IF (N.EQ.0) GOTO 3700 X`09IF (MODE.EQ.1) CALL LIB$SET_CURSOR(3,1) X`09CALL DECPRT(N) X`09CALL STROUT(' fighters aboard.',1) X`09GOTO 4100 X X3700`09IF (MODE.EQ.1) CALL LIB$SET_CURSOR(3,1)`09`09!NOTHING ABOARD X`09CALL STROUT('Nothing aboard.',1) X`09GOTO 4100 XC`20 XC B: CALL REFERENCE MAP XC X3800`09ISEC=-1 X`09CALL SECTOR(RMAP(1)) X`09GOTO 4100 XC`20 XC N: CALL ENEMY MAP XC X3900`09ISEC=-1 X`09CALL SECTOR(EMAP(1)) X`09GOTO 4100 XC`20 XC +: BLOCK PRINT REF. MAP XC X4000`09CALL ERASE_PAGE(1,1) X`09ISEC=-1 X`09CALL BLOCK(RMAP(1)) X`09E=GETCHX() X`09GOTO 4100 XC`20 X4100`09CALL LTR(Z6,2) X`09GOTO 100 X4200`09IF (ORDER(Z6).EQ.0) GOTO 4300 X`09IF (MODE.EQ.1) CALL LIB$SET_CURSOR(3,1) X`09CALL STROUT('You cannot move onto the edge of the world.',1) X`09Z6=Z7 X`09GOTO 4100 X4300`09RETURN X`09END XC`20 X`09SUBROUTINE LTR(Z6,ITURN) XC XC DOES SHORT RANGE SCAN AROUND LOCATION Z6 XC X`09INCLUDE 'EMPIRE.INC/NOLIST' XC X`09IF (MODE.NE.1) GOTO 100 X`09CALL SENSOR(Z6) X`09RETURN X100`09IF (ITURN.NE.1) GOTO 700 X`09DO 200 I7=1,8 X`09I8=Z6+IARROW(I7+1)`09`09`09!** X200`09IF (RMAP(I8).NE.PMAP(I8)) GOTO 300 X`09GOTO 700 X300`09TYPE 999 X999`09FORMAT(' BEFORE SENSOR PROBE') X`09L6=Z6 X`09IF (L6.LT.101) L6=L6+100 X`09IF (L6.GT.5900) L6=L6-100 X`09IF (L6/100*100.EQ.L6) L6=L6-1 X`09IF (L6/100*100+1.EQ.L6) L6=L6+1 X`09DO 600 I=-101,99,100 X`09DO 400 I9=0,2 X400`09D2(I9+1)=OMAP(L6+I+I9)`09`09`09!** X`09DO 500 I9=0,2 X500`09G2(I9+1)=PMAP(L6+I+I9)`09`09`09!** X600`09TYPE 998,(G2(J),J=1,3),(D2(J),J=1,3) X998`09FORMAT(1X,3A1,3X,3A1) X`09CALL SENSOR(Z6) X`09TYPE 997 X997`09FORMAT(' AFTER SENSOR PROBE') X700`09L6=Z6 X`09IF (L6.LT.301) L6=L6+300-(L6-1)/100*100 X`09IF (L6.GT.5700) L6=L6-(L6-1)/100*100+5600 X`09IF ((L6-1)/100*100+97.LT.L6) L6=97+(L6-1)/100*100 X`09IF ((L6-1)/100*100+4.GT.L6) L6=L6/100*100+4 X`09DO 900 I=-303,297,100 X`09DO 800 I9=0,6 X800`09G2(I9+1)=PMAP(L6+I+I9)`09`09`09!** X900`09TYPE 996, (G2(J),J=1,7) X996`09FORMAT(1X,7A1) X1000`09CALL STROUT(0,1) X`09RETURN X`09END X`0C X`09SUBROUTINE FGHT(Z6,H1,H2,OWN1,OWN2) XC X`09INCLUDE 'EMPIRE.INC/NOLIST' XC X`09IF ((OWN2.LT.'A').OR.(OWN2.GT.'T')) GOTO 100 X`09IF (MODE.EQ.1) CALL LIB$SET_CURSOR(2,1) X`09CALL IDEN(OWN2) X`09CALL STROUT('is under attack at',10) X`09CALL DECPRT(Z6) X`09CALL STROUT('.',1) X100`09CALL LIB$SET_CURSOR(3,1) X`09S1=1 X`09S2=1 X`09IF ((OWN1.EQ.'S').OR.(OWN1.EQ.'s')) S1=3 X`09IF ((OWN2.EQ.'S').OR.(OWN2.EQ.'s')) S2=3 X`09IF (H2.EQ.0) GOTO 300 X200`09IF (RND(100).LE.50) GOTO 300`09`09!** X`09H1=H1-S2 X`09H=H2 X`09IF (H1.GT.0) GOTO 200 X`09OWN=OWN1 X`09CALL IDEN(OWN) X`09OWN=OWN2 X`09CALL STROUT('destroyed,',10) X`09GOTO 400 X300`09H2=H2-S1 X`09H=H1 X`09IF (H2.GT.0) GOTO 200 X`09OWN=OWN2 X`09CALL IDEN(OWN) X`09OWN=OWN1 X`09CALL STROUT('destroyed,',10) X400`09CALL IDEN(OWN) X`09CALL STROUT('has',10) X`09CALL DECPRT(H) X`09CALL STROUT(' hits left.',2) X`09IF (MODE.EQ.0) CALL STROUT(0,1) X`09RETURN X`09END X`0C X`09FUNCTION PATH(BEG,END,DIR,OKVECT,FLAG) XC XC PATH SUBROUTINE FOR EMPIRE XC FINDS DIRECTION TO MOVE UNIT, FROM BEG TO END, OKVECT SPECIFIES OK TERRAI VN. XC X`09INCLUDE 'EMPIRE.INC/NOLIST' X`09BYTE`09OKVECT(5) XC X`09BACKUP=1 X`09TDIR=DIR`09`09! GET A DIRECTION TO FIDDLE WITH X`09DIR3=TDIR*3 X`09Z6=BEG X`09MAXMVE=IDIST(BEG,END)+1 X`09I=2 X`09IF (RND(100).LE.12) I=3 X`09MAXMVE=MIN(100,I * MAXMVE) ! COMPUTE MAX MOVES TO GET THERE X`09MOVNUM=MAXMVE X100`09DO 200 I=1,100`09`09! CLEAR G2 ARRAY X`09G2(I)=0 X200`09CONTINUE X XC STRGHT:`09`09`09! TRY STRAIGHT MOVE FIRST X300`09MOOVE= MOV(Z6,END) X`09Z62=Z6+IARROW(MOOVE+1) X`09AB=EMAP(Z62) X`09IF (COMPAR(AB,Z62,OKVECT).EQ.0) GOTO 900 !IF NO GOOD, FOLLOW SHORE X XC OKSET:`09`09`09! STRAGHT MOVE WORKING X400`09BAKADR=1 X XC OKMOVE: X500`09IF (Z6 .EQ. BEG) MOVE1=MOOVE X`09Z6=Z62 X`09IF (FLAG.GE.1000) CALL TEST4(Z6,FLAG,TDIR,MOVE1,MOVNUM,BEG, X`091 END,G2,BAKADR) X`09IF (Z6 .EQ. END) GOTO 800 `09! IF Z6=END, WE'RE DONE X XC DOMORE: X600`09MOVNUM=MOVNUM-1 X`09IF (MOVNUM .EQ. 0) GOTO 700`09! REACHED MAX MOVES, TRY NEW DIRECTION XC`09`09STRGHT,`09CHKNXT X`09GOTO`09(300,`091300), BAKADR`09! CONTINUE, IN SAME MANNER X XC TRYDIR:: X700`09DIR3=-DIR3`09`09`09! NEGATE CURRENT DIRECTION X`09TDIR=-TDIR X`09IF (TDIR .EQ. DIR) GOTO 1200`09! GIVE UP IF BACK TO START X`09MOVNUM=MAXMVE`09`09`09! ELSE, TRY AGAIN X`09BACKUP=1 X`09Z6=BEG X`09GOTO 100 X XC SUCCES:`09`09`09`09SUCCESS, RETURN X800`09PATH=MOVE1 X`09SUCCES=SUCCES+1 X`09FLAG=1 X`09RETURN X XC FOLSHR:`09`09`09`09FOLLOW THE SHORE X900`09MOV1=ICORR(MOOVE-DIR3)`09`09! TRY AGAIN X`09Z62=Z6+IARROW(MOV1+1) +-+-+-+-+-+-+-+- END OF PART 4 +-+-+-+-+-+-+-+-