edjames@ic.Berkeley.EDU (Ed James) (12/21/86)
GOTO 1000 ELSE IF (SET(I,J,LAREA,'+',1200).EQ.1) GOTO 900 C TYPE 997 C WRITE (1,997) C997 FORMAT(' FAILED SINGLE LAND MASS TEST') GOTO 100 ENDIF 900 LAREA=LAREA+1 1000 CONTINUE IF (LAREA.GE.10.AND.LAREA.LE.30) GOTO 1100 C TYPE 996 C WRITE(1,996) C996 FORMAT(' FAILED SEPARATION TEST') GOTO 100 C1100 TYPE 995,(('@'+OWNER(I,J),I=1,100),J=1,60) C WRITE(1,995) (('@'+OWNER(I,J),I=1,100),J=1,60) C995 FORMAT(1X,100A1) 1100 DO 1300 I=1,128 1300 SIZES(I)=0 DO 1400 I=2,99 DO 1400 J=2,59 SIZES(OWNER(I,J))=SIZES(OWNER(I,J))+1 1400 CONTINUE SCOUNT=COUNT*40/50 DO 1500 SEA=33,WAREA 1500 IF (SIZES(SEA).GE.SCOUNT) GOTO 1600 C TYPE 994 C WRITE (1,994) C994 FORMAT(' FAILURE- OCEANS ARE SEPARATED') GOTO 100 1600 CITS=(6000-COUNT)/50+1 CITS=MAX(52,CITS) CITS=MIN(70,CITS) SEACITS=CITS*60/100+irand(12) LANDCITS=CITS-SEACITS DO 2100 K=1,SEACITS 1700 I=irand(98)+2 J=irand(58)+2 IF (MAP(I,J).NE.'+') GOTO 1700 DO 1800 L=MAX(2,I-1),MIN(99,I+1) DO 1800 M=MAX(2,J-1),MIN(59,J+1) IF (OWNER(L,M).EQ.SEA) GOTO 1900 1800 CONTINUE GOTO 1700 1900 DO 2000 L=MAX(2,I-3),MIN(99,I+3) DO 2000 M=MAX(2,J-3),MIN(59,J+3) IF (OWNER(L,M).NE.OWNER(I,J)) GOTO 2000 IF (MAP(L,M).EQ.'*') GOTO 1700 2000 CONTINUE MAP(I,J)='*' CITIES(OWNER(I,J))=CITIES(OWNER(I,J))+100 2100 CONTINUE DO 2500 K=1,LANDCITS 2200 I=irand(98)+2 J=irand(58)+2 IF (MAP(I,J).NE.'+') GOTO 2200 DO 2300 L=MAX(2,I-1),MIN(99,I+1) DO 2300 M=MAX(2,J-1),MIN(59,J+1) IF (MAP(L,M).EQ.'.') GOTO 2200 2300 CONTINUE DO 2400 L=MAX(2,I-2),MIN(99,I+2) DO 2400 M=MAX(2,J-2),MIN(59,J+2) IF (OWNER(L,M).NE.OWNER(I,J)) GOTO 2400 IF (MAP(L,M).EQ.'*') GOTO 2200 2400 CONTINUE MAP(I,J)='*' CITIES(OWNER(I,J))=CITIES(OWNER(I,J))+1 2500 CONTINUE C TYPE 993,((MAP(I,J),I=1,100),J=1,60) D WRITE(1,993) ((MAP(I,J),I=1,100),J=1,60) D993 FORMAT(1X,100A1) END ccc getchx - read a character with no echo integer function getchx c c synopsis c c char = getchx() c byte char call getstrq(char, 1, count) call tupper(char, 1) getchx = char return end subroutine head ( own1, y, num, z6, h1 ) IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C integer i ptr = 0 call addidt ( own1, jnkbuf, ptr ) call addstr ( ' ', jnkbuf, ptr ) call addint ( y, jnkbuf, ptr ) call addstr ( ' at ', jnkbuf, ptr ) call addint ( z6, jnkbuf, ptr ) do 100, i = ptr + 1, 40 jnkbuf (i) = ' ' 100 continue ptr = 39 call addsts ( mycode ( num ), jnkbuf, ptr ) if ( own1 .eq. 'A' ) goto 500 do 200, i = ptr + 1, 60 jnkbuf (i) = ' ' 200 continue ptr = 59 if ( own1 .ne. 'F' ) goto 250 call addstr ( 'Range: ', jnkbuf, ptr ) call addint ( range ( y ), jnkbuf, ptr ) goto 500 250 continue call addstr ( 'Hits left: ', jnkbuf, ptr ) call addint ( h1, jnkbuf, ptr ) 500 continue jnkbuf ( ptr + 1 ) = 0 call topmsg ( 1, jnkbuf ) call flush return end ccc help - give help subroutine help call clear call topini cc call topmsg ( 'EMPIRE.HLP (see EMPIRE.DOC for more detail)' ) call topmsg ( 2, 'ORDERS MODE----------- * MOVE MODE------------- EDIT MODE-------------' ) call strpos ( 7, 1, 'A: Stay in Move mode' ) call strpos ( 8, 1, 'C: Give 1 free move' ) call strpos ( 9, 1, 'H: This text' ) call strpos ( 10, 1, 'J: Enter edit mode' ) call strpos ( 11, 1, 'M: Enter move mode' ) call strpos ( 12, 1, 'N: Give n free moves' ) call strpos ( 13, 1, 'P: Refresh sector' ) call strpos ( 14, 1, 'Q: Quit game' ) call strpos ( 15, 1, 'R: Display round #' ) call strpos ( 16, 1, 'S: Clear screen' ) call strpos ( 17, 1, 'T: Print out map' ) call strpos ( 18, 1, 'V: Save game' ) call flush call strpos( 4, 25, 'QWE: Movement' ) call strpos( 5, 25, 'A D direction' ) call strpos( 6, 25, 'ZXC <space>: Sit' ) cc call strpos( 7, 25, '<space>: Sit' ) call strpos( 8, 25, 'G: Sleep till full T,C' ) call strpos( 9, 25, 'H: This text' ) call strpos( 10, 25, 'I: Set direction' ) call strpos( 11, 25, 'J: Enter edit mode' ) call strpos( 12, 25, 'K: Wake piece' ) call strpos( 13, 25, 'L: Set city direction' ) call strpos( 14, 25, 'O: Cancel auto moves' ) call strpos( 15, 25, 'P: Refresh screen' ) call strpos( 16, 25, 'R: Random for armies' ) call strpos( 17, 25, 'S: Sentry' ) call strpos( 18, 25, '?: Display function' ) call flush cc call strpos( 4, 49, 'QWE: Cursor' ) cc call strpos( 5, 49, 'A D direction' ) cc call strpos( 6, 49, 'ZXC' ) cc call strpos( 8, 49, 'G: Sleep til full T,C' ) call strpos( 8, 49, 'H: This text' ) call strpos( 9, 49, 'I: Set direction' ) call strpos( 10, 49, 'K: Wake anything' ) call strpos( 11, 49, 'M: Set path start' ) call strpos( 12, 49, 'N: Set path end' ) call strpos( 13, 49, 'O: Exit edit mode' ) call strpos( 14, 49, 'P: Change sector' ) call strpos( 15, 49, 'R: Random for armies' ) call strpos( 16, 49, 'S: Sentry ' ) call strpos( 17, 49, 'Y: Set city production' ) call strpos( 18, 49, '?: Display function' ) call flush call strpos ( 20, 1, 'Piece---Yours-Enemy-Moves-Hits-Cost * Piece---Yours-Enemy-Moves-Hits-Cost' ) call strpos ( 21, 1, 'army A a 1 1 5 * transport T t 2 3 30' ) call strpos ( 22, 1, 'fighter F f 4 1 10 * cruiser R r 2 8 50' ) call strpos ( 23, 1, 'destroyer D d 2 3 20 * carrier C c 2 8 60' ) call strpos ( 24, 1, 'submarine S s 2 2 25 * battleship B b 2 12 75' ) call flush return end INTEGER FUNCTION HITS(OWN) IMPLICIT INTEGER(A-Z) INTEGER B(8) BYTE ATYP(8),OWN DATA ATYP/'A','F','D','S','T','R','C','B'/ DATA B/ 1 , 1, 3, 2, 3, 8, 8, 12 / C HITS=0 DO 100 I=1,8 IF (OWN.EQ.ATYP(I)) GOTO 200 100 CONTINUE RETURN 200 HITS=B(I) RETURN END subroutine huh call topmsg ( 2, 'Huh?' ) call flush return end FUNCTION ICORR(N) IMPLICIT INTEGER(A-Z) ICORR=N IF (ICORR.GT.8) ICORR=ICORR-8 IF (ICORR.LT.1) ICORR=ICORR+8 RETURN END FUNCTION IDIST(N1,N2) C C RETURN DISTANCE BETWEEN LOCATION N1 AND N2 C IMPLICIT INTEGER(A-Z) X1=IABS(MOD(N1-1,100)-MOD(N2-1,100)) Y1=IABS(((N1-1)/100)-((N2-1)/100)) IDIST=MAX0(X1,Y1) RETURN END subroutine initia(flag) IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C byte decode external decode do 300 i=1,6000 if (flag.ne.0) omap(i)=decode(i) if (omap(i).ne.'*') goto 300 n1=irand(70)+1 !** do 100 n3=n1,n1+70 n=n3 if (n.gt.70) n=n-70 100 if (x(n).eq.0) goto 200 200 x(n)=i 300 continue return end ccc iphase - return integer of ascii i as a sector number integer function iphase ( i ) integer i integer j parameter zero = "60 parameter nine = "71 j = 0 j = i .and. "177 if (( j .ge. zero ) .and. ( j .le. nine )) j = j - zero iphase = j return end FUNCTION IPORT(Z6) IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C IPORT=0 ID=500 DO 100 I=1,70 IF (X(I).EQ.0) GOTO 100 IF (RMAP(X(I)).NE.'X') GOTO 100 IF (EDGER(Z6).EQ.0) GOTO 100 IF (IDIST(X(I),Z6).GE.ID) GOTO 100 IPORT=X(I) ID=IDIST(X(I),Z6) 100 CONTINUE IF (IPORT.NE.0) RETURN IPORT=irand(5798)+102 RETURN END FUNCTION ISCAPE(I,M) IMPLICIT INTEGER(A-Z) C C: I = NUMBER OF TIMES ONE HAS TRIED TO ESCAPE CM: DIRECTION IN WHICH DANGER LIES C INTEGER ITAB(8) BYTE PASS COMMON/PASS/PASS DATA ITAB/4,5,3,6,2,7,1,0/ C ISC=M IF ((PASS).AND.((I.LT.1).OR.(I.GT.8))) GOTO 100 IF ((PASS).AND.((ISC.LT.1).OR.(ISC.GT.8))) GOTO 100 ISC=ICORR(M+ITAB(I)) ISCAPE=ISC RETURN 100 TYPE 999,ISC,I,M 999 FORMAT(' ISCAPE- ISC,M,I:',3I) RETURN END FUNCTION JIGGLE(Z6,NUM) C C DO RANDOM MOVE FOR PLAYER'S ARMY C IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C C DO 100 I=1,9 100 AB9(I)=RMAP(Z6+IARROW(I+1)) !** IF (AB9(9).NE.'T') GOTO 200 JIGGLE=0 MYCODE(NUM)=0 RETURN C 200 DO 300 I1=1,9 300 IF ((AB9(I1).EQ.'*').OR.(AB9(I1).EQ.'X')) GOTO 400 I1=9 400 DO 500 I2=1,9 500 IF ((AB9(I2).GE.'a').AND.(AB9(I2).LE.'t')) GOTO 600 I2=9 600 DO 700 I3=1,9 700 IF (AB9(I3).EQ.'T') GOTO 800 I3=9 800 M1=irand(8)+1 !** M2=M1+7 DO 900 I4=M1,M2 I5=ICORR(I4) I=Z6+IARROW(I5+1) !** 900 IF ((ORDER(I).EQ.0).AND.(AB9(I5).EQ.'+')) GOTO 1000 I4=0 1000 M=I1 IF (M.EQ.9) M=I3 IF (M.EQ.9) M=I2 IF (M.EQ.9) M=I5 IF (I4.EQ.0) M=9 JIGGLE=M RETURN END function kline(ki,jector) implicit integer (a-z) ki = 0 ject = jector if ( jector .le. 4 ) goto 13 ki = 30 ject = ject - 5 13 continue kline = ( ject * 10 ) * 100 return end subroutine ltr(z6,iturn) c c Does short range scan around location z6 c IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C if (mode.ne.1) goto 100 call sensor(z6) return 100 if (iturn.ne.1) goto 700 do 200 i7=1,8 i8=z6+iarrow(i7+1) !** 200 if ( rmap ( i8 ) .eq. pmap ( i8 )) goto 700 call cr call strout ( 'Before sensor probe' ) l6=z6 if (l6.lt.101) l6=l6+100 if (l6.gt.5900) l6=l6-100 if (l6/100*100.eq.l6) l6=l6-1 if (l6/100*100+1.eq.l6) l6=l6+1 do 600 i=-101,99,100 do 400 i9=0,2 400 d2(i9+1)=omap(l6+i+i9) !** do 500 i9=0,2 500 g2(i9+1)=pmap(l6+i+i9) !** 600 continue call putc ( g2 ( 1 )) call putc ( g2 ( 2 )) call putc ( g2 ( 3 )) call putc ( d2 ( 1 )) call putc ( d2 ( 2 )) call putc ( d2 ( 3 )) call sensor(z6) call cr call strout ( 'After sensor probe' ) 700 continue l6=z6 if (l6.lt.301) l6=l6+300-(l6-1)/100*100 if (l6.gt.5700) l6=l6-(l6-1)/100*100+5600 if ((l6-1)/100*100+97.lt.l6) l6=97+(l6-1)/100*100 if ((l6-1)/100*100+4.gt.l6) l6=l6/100*100+4 do 900 i=-303,297,100 do 800 i9=0,6 g2(i9+1)=pmap(l6+i+i9) !** jnkbuf ( i9 + 1 ) = g2( i9 + 1 ) 800 continue call bufout ( jnkbuf, 7 ) call cr 900 continue 1000 continue return end SUBROUTINE MAKELAND IMPLICIT INTEGER(A-Z) BYTE SUBMAP(39,39) REAL DIVER,RAD,COSANG,SINANG COMMON/SMAP/SUBMAP DO 100 I=1,39 DO 100 J=1,39 SUBMAP(I,J)=' ' 100 CONTINUE SUBMAP(20,20)='+' VARY=2+irand(3) RADIUS=irand(4)+irand(3) START=90-irand(180) DO 400 ROT=START,START+360,3 IF (RADIUS.LE.0) GOTO 300 COSANG=COS(FLOAT(ROT)/3.14159) SINANG=SIN(FLOAT(ROT)/3.14159) RAD=0 DIVER=.5/(ABS(COSANG)+ABS(SINANG)) 200 IF (RAD.GT.RADIUS) GOTO 300 RAD=RAD+DIVER SUBMAP(20+RAD*COSANG,20+RAD*SINANG)='+' GOTO 200 300 IF (MOD(ROT,10).NE.0) GOTO 400 RADIUS=RADIUS+irand(VARY)-(VARY/2) IF ((VARY.AND.1).EQ.0) RADIUS=RADIUS+irand(2) IF (RADIUS.GE.12) RADIUS=11 400 CONTINUE RETURN END FUNCTION MOV(I6,I7) C C RETURNS THE INDEX-1 INTO IARROW FOR THE DIRECTION OF THE MOVE C FROM I6 TO I7 C IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C LOGICAL XMAJOR C IY6=(I6-1)/100 IY7=(I7-1)/100 IX6=I6-(100*IY6) IX7=I7-(100*IY7) IY=IY7-IY6 IX=IX7-IX6 C SCREEN OUT TRIVIAL CASES IF (IX.EQ.0) THEN DIR=SIGN(100,IY) GOTO 100 ENDIF IF (IY.EQ.0) THEN DIR=SIGN(1,IX) GOTO 100 ENDIF C THIS ATTEMPTS A LINE-OF-SIGHT APPROXIMATION C unfortunately a true LOS requires knowing where you came from! C this routine currently tries to keep near a 3 to 1 ratio. DX=ABS(IX) !GET DELTA X DY=ABS(IY) !GET DELTA Y XMAJOR=.TRUE. !ASSUME X IS MAJOR CHANGE IF (DY.GT.DX) THEN ! IF WRONG, SWITCH DX=DY DY=ABS(IX) XMAJOR=.FALSE. ENDIF C ! the divisor determines the slope C ! perfect case would be delta y at start IF (IFIX(FLOAT(DX)/3+.5).GT.DY) THEN !IF MAJOR IS LONG, GO STRAIGHT IF (XMAJOR) THEN DIR=SIGN(1,IX) ELSE DIR=SIGN(100,IY) ENDIF ELSE !OTHERWISE, TAKE DIAGONAL DIR=SIGN(100,IY)+SIGN(1,IX) ENDIF 100 DO 200 I=1,9 !FIND THE INDEX 200 IF (IARROW(I).EQ.DIR) GOTO 300 300 MOV=I-1 !FOR COMPATIBILITY (?) C OLD WAY: FOR HISTORIANS C THIS DOES NOT DO A "TRUE" LINE OF SIGHT, FAVORS DIAGONALS C IF ((IY.LT.0).AND.(IX.GT.0)) MOV=2 C IF ((IY.LT.0).AND.(IX.EQ.0)) MOV=3 C IF ((IY.LT.0).AND.(IX.LT.0)) MOV=4 C IF ((IY.EQ.0).AND.(IX.LT.0)) MOV=5 C IF ((IY.GT.0).AND.(IX.LT.0)) MOV=6 C IF ((IY.GT.0).AND.(IX.EQ.0)) MOV=7 C IF ((IY.GT.0).AND.(IX.GT.0)) MOV=8 C IF ((IY.EQ.0).AND.(IX.GT.0)) MOV=1 C IF ((IX.EQ.0).AND.(IY.EQ.0)) MOV=0 RETURN END FUNCTION MOVCOR 1 (IFO,ITURN,Z6,MOVE,IH1,IS1,AGGR,OWN1,EXPLOR,DIR,DEST,ORIG,HMAX) C IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C C C CHECK FOR IMPOSSIBLE CONDITION FOR MOVE C IF ((.NOT.PASS).OR.(IABS(MOVE).LE.8)) GOTO 100 call clear call topini TYPE 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 !** IF (BLAH.LT.0) MOVE=ICORR(I2+irand(3)-1) !** 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) !** AB=RMAP(LOC) IF (OMAP(LOC).NE.'.') GOTO 200 IF ((AB.LT.'B').OR.(AB.GT.'T')) GOTO 200 !IF SH/PL, LOOK BLAH=ATTACK(OWN1,AB,IH1,AGGR) IF (BLAH.GE.0) GOTO 1200 !** ATTACK IT GOTO 300 !RUN FROM IT 200 CONTINUE I1=0 !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 !** 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 !** EXPMAX=0 DO 900 IX=MOVE,MOVE+7 I1=ICORR(IX) LOC1=Z6+IARROW(I1+1) !** 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 !** IF (EMAP(LOC1+IARROW(ICORR(I1-1)+1)).EQ.' ') NEXP=NEXP+1 !** IF (EMAP(LOC1+IARROW(ICORR(I1+1)+1)).EQ.' ') NEXP=NEXP+1 !** IF (EMAP(LOC1+IARROW(ICORR(I1+2)+1)).EQ.' ') NEXP=NEXP+1 !** IF (EMAP(LOC1+IARROW(ICORR(I1-2)+1)).EQ.' ') NEXP=NEXP+1 !** 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) !** 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 !** DO 1100 I=0,7*DIR,DIR I2=ICORR(M+I) I3=Z6+IARROW(I2+1) !** 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 !** IF ((RMAP(Z6).EQ.'X').AND.(IH1.LT.HMAX)) MOVE=0 MOVCOR=MOVE RETURN END ccc mve - handle player move mode subroutine mve(own1,xxxmdate,relnum,num,n2,z6,z7,disas,jursor) c c inputs: c own1 = char of piece (ie: 'a' for army) c xxxmdate = round number c relnum = relative piece number to type c num = piece index to rlmap c n2 = piece index to hits c z6 = location, return new location c z7 = old location c disas = 0:ok, -2:stasis c jursor = current cursor c IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C disas=0 c c Get command character with no echo c 100 call sector ( pmap ( 1 )) ib = j1ts ( n2 ) call head ( own1, relnum, num, z6, ib ) ! display header call cursor ( jursor ) 200 e = getchx() call topmsg ( 2, 0 ) ! clear line call topmsg ( 3, 0 ) ! clear line call flush c c Look at the command c z7 = z6 do 300 i = 1, 9 ind = i 300 if ( e .eq. kbtbl ( ind )) goto 400 goto 500 ! command is not a direction 400 z6 = z6 + kbfudg ( ind ) goto 4200 500 end = 15 if ( pass ) end = 20 do 600 i = 1, end 600 if ( e .eq. comman ( i )) goto 700 i = 0 c c s, r, i, k, o, l, f, g, p, h, y, t, v, j, ?, 0, 0, u, n, + c 700 goto ( 900, 1000, 1100, 1500, 1900, 2000, 2300, 2400, 2500, 2600, * 2700, 2800, 2900, 3200, 3300, 800, 800, 3800, 3900, 2600 ) i 800 goto 100 c c s: put to sleep c 900 if ( rmap ( z6 ) .eq. 'O' ) return mycode ( num ) = 50 return c c r: random movement c 1000 if ( own1 .ne. 'A' ) goto 100 ! only for armies mycode ( num ) = 100 z6 = z6 + iarrow ( jiggle ( z6, num ) + 1 ) return c c i: put in directional stasis c 1100 call cursor(jursor) !cuz of clear lines above e=getchx() do 1200 i=1,9 if (e .eq. kbtbl(i)) goto 1300 1200 continue goto 1400 1300 mycode(num)=cmytbl(i) 1400 if (mycode(num).eq.0) goto 100 disas=-2 return c c k: kill stasis number on piece c 1500 mycode(num)=0 ! zero function code for anything if (own1.ne.'T') goto 1700 ! if transport, wake armies aboard do 1600 j=1,500 1600 if (rlmap(j).eq.z6) mycode(j)=0 goto 100 1700 if (own1.ne.'C') goto 100 ! if carrier, wake fighters aboard do 1800 j=501,700 1800 if (rlmap(j).eq.z6) mycode(j)=0 goto 100 c c o: cancel auto move mode c 1900 continue if ( .not. automv ) goto 1913 automv = .false. call topmsg ( 3, 'Auto move mode canceled' ) goto 100 1913 continue call topmsg ( 3, 'Not in auto mode!' ) goto 100 C C L: SET UP CITY STASIS NUMBERS C 2000 IF (OMAP(Z6).NE.'*') GOTO 2300 !BETTER BE A CITY E=GETCHX() DO 2100 I=1,9 IF (E .EQ. KBTBL(I)) GOTO 2200 2100 CONTINUE GOTO 4100 2200 FIPATH(CITFND(Z6))=CMYTBL(I) !SET STASIS NUMBER DISAS=-2 RETURN C C F: C 2300 CALL DIREC GOTO 4100 C C G: PUT T/C TO SLEEP C 2400 IF ((OWN1.NE.'T').AND.(OWN1.NE.'C')) GOTO 100 MYCODE(NUM)=9997 DISAS=-2 RETURN C C P: SECTOR PRINTOUT C 2500 ISEC=-1 CALL SECTOR(PMAP(1)) GOTO 4100 c c h: get help c 2600 call help e = getchx() isec = -1 goto 4100 C C Y: CHANGE PHASE OF A CITY C 2700 CALL DIREC GOTO 4100 C C T: BLOCK PRINTOUT C C2800 CALL CLEAR C CALL BLOCK(PMAP(1)) C ISEC=-1 C GOTO 4100 C C V: SAVE GAME C C2900 CALL GAME(1,NUM) !NOT SURE THIS WILL WORK AS PLAYERS EXPECT 2800 CONTINUE 2900 CALL DIREC GOTO 100 C C J: PUT IN EDIT MODE C 3200 CALL EDIT(Z6) IF (MYCODE(NUM).EQ.0) GOTO 100 DISAS=-2 RETURN c c ?: how many hits? loaded? c 3300 if ((own1.eq.'A').or.(own1.eq.'F')) goto 100 ib=j1ts(n2) ! display hits left ptr = 0 C CALL sstrout ( ' Hits left:',10) n = 0 ! count armies if ( own1 .ne. 'T' ) goto 3500 do 3400 i = 1, 500 3400 if ( rlmap ( i ) .eq. z6 ) n = n + 1 if ( n .eq. 0 ) goto 3700 cc if (mode.eq.1) call tpos(3,1) call addint ( n, jnkbuf, ptr ) if ( n .eq. 1 ) call addstr ( ' army', jnkbuf, ptr ) if ( n .gt. 1 ) call addstr ( ' armies', jnkbuf, ptr ) goto 1313 3500 if ( own1 .ne. 'C' ) goto 4100 do 3600 i = 1, 200 ! count fighters 3600 if ( rlmap ( i + 500 ) .eq. z6 ) n = n + 1 if ( n .eq. 0 ) goto 3700 cc if (mode.eq.1) call tpos(3,1) call addstr ( ' fighter', jnkbuf, ptr ) if ( n .gt. 1 ) call addstr ( 's', jnkbuf, ptr ) 1313 continue call addstr ( ' aboard', jnkbuf, ptr ) jnkbuf(ptr + 1) = 0 call topmsg ( 3, jnkbuf ) call flush goto 4100 3700 continue ! nothing aboard cc if (mode.eq.1) call tpos(3,1) call topmsg ( 3, 'Nothing aboard' ) call flush GOTO 4100 C C U: CALL REFERENCE MAP C 3800 ISEC=-1 CALL SECTOR(RMAP(1)) GOTO 4100 C C N: CALL ENEMY MAP C 3900 ISEC=-1 CALL SECTOR(EMAP(1)) GOTO 4100 C C +: BLOCK PRINT REF. MAP C 4000 call clear call topini ISEC=-1 CALL BLOCK(RMAP(1)) E=GETCHX() GOTO 4100 C 4100 call ltr(z6,2) call flush goto 100 4200 if (order(z6).eq.0) goto 4300 cc if (mode.eq.1) call tpos(3,1) call topmsg ( 3, 'You cannot move onto the edge of the world' ) z6 = z7 goto 4100 4300 return end FUNCTION ORDER(I6) C C RETURN =1 IF OFF THE EDGE OF THE MAP C IMPLICIT INTEGER(A-Z) ORDER=1 IF ((I6.LE.101).OR.(I6.GE.5900)) RETURN IF (MOD(I6,100).LE.1) RETURN ORDER=0 RETURN END FUNCTION PATH(BEG,END,DIR,OKVECT,FLAG) C C PATH SUBROUTINE FOR EMPIRE C FINDS DIRECTION TO MOVE UNIT, FROM BEG TO END, OKVECT SPECIFIES OK TERRAIN. C IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C BYTE OKVECT(5) C BACKUP=1 TDIR=DIR ! GET A DIRECTION TO FIDDLE WITH DIR3=TDIR*3 Z6=BEG MAXMVE=(2 * IDIST(BEG,END))+1 ! COMPUTE MAX MOVES TO GET THERE MOVNUM=MAXMVE 100 DO 200 I=1,100 ! CLEAR G2 ARRAY G2(I)=0 200 CONTINUE C STRGHT: ! TRY STRAIGHT MOVE FIRST 300 MOOVE= MOV(Z6,END) Z62=Z6+IARROW(MOOVE+1) AB=EMAP(Z62) IF (COMPAR(AB,Z62,OKVECT).EQ.0) GOTO 900 !IF NO GOOD, FOLLOW SHORE C OKSET: ! STRAGHT MOVE WORKING 400 BAKADR=1 C OKMOVE: 500 IF (Z6 .EQ. BEG) MOVE1=MOOVE Z6=Z62 IF (FLAG.GE.1000) CALL TEST4(Z6,FLAG,TDIR,MOVE1,MOVNUM,BEG, 1 END,G2,BAKADR) IF (Z6 .EQ. END) GOTO 800 ! IF Z6=END, WE'RE DONE C DOMORE: 600 MOVNUM=MOVNUM-1 IF (MOVNUM .EQ. 0) GOTO 700 ! REACHED MAX MOVES, TRY NEW DIRECTION C STRGHT, CHKNXT GOTO (300, 1300), BAKADR ! CONTINUE, IN SAME MANNER C TRYDIR:: 700 DIR3=-DIR3 ! NEGATE CURRENT DIRECTION TDIR=-TDIR IF (TDIR .EQ. DIR) GOTO 1200 ! GIVE UP IF BACK TO START MOVNUM=MAXMVE ! ELSE, TRY AGAIN BACKUP=1 Z6=BEG GOTO 100 C SUCCES: SUCCESS, RETURN 800 PATH=MOVE1 SUCCES=SUCCES+1 FLAG=1 RETURN C FOLSHR: FOLLOW THE SHORE 900 MOV1=ICORR(MOOVE-DIR3) ! TRY AGAIN Z62=Z6+IARROW(MOV1+1) AB=EMAP(Z62) IF (COMPAR(AB,Z62,OKVECT).EQ.1) MOV1=MOOVE ! ??? C STFOL: 1000 DO 1100 IVAR= MOV1,MOV1+7*TDIR,TDIR MOOVE=ICORR(IVAR) Z62=Z6+IARROW(MOOVE+1) IF (ORDER(Z62) .NE. 0) GOTO 1100 AB=EMAP(Z62) IF (COMPAR(AB,Z62,OKVECT).EQ.0) GOTO 1100 C OKSET2: BAKADR=2 GOTO 500 1100 CONTINUE C FAILUR: 1200 PATH=MOV(BEG,END) FAILUR=FAILUR+1 FLAG=0 RETURN C CHKNXT: 1300 T1=MOV(Z6,END) Z62=Z6+IARROW(T1+1) AB=EMAP(Z62) IF (COMPAR(AB,Z62,OKVECT).EQ.0) GOTO 900 DO 1400 IVAR=BACKUP,1,-1 IF (Z6 .EQ. G2(IVAR)) GOTO 900 1400 CONTINUE G2(BACKUP)=Z6 BACKUP=BACKUP+1 IF (BACKUP .LE. 100) GOTO 300 GOTO 700 END subroutine phasin(num,e) c c Prompt for city production type, set prod accordingly c IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C e = getchx() do 200 i=1,8 200 if ( e .eq. phaze ( i )) goto 300 call huh e = ' ' return !if he doesn't do it right, leave it 300 phase ( num) = phazee ( i ) found ( num ) = mdate + 6 * phase ( num ) return end FUNCTION POSCHK(Z6,OWN) C C DETERMINES IF Z6 IS IN CURRENT UPDATE SECTOR SHOWING C 0=NO, 1=YES C IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C INTEGER LOWSCRS(5),HIGHSCRS(5) DATA LOWSCRS/1,14,24,34,44/ DATA HIGHSCRS/15,25,35,45,58/ C IF (MODE.EQ.1) GOTO 100 POSCHK=1 GOTO 400 100 JECT=JECTOR POSCHK=0 IY=(Z6-1)/100 IX=Z6-IY*100 ADJUST=1 IF (OWN.EQ.'F') ADJUST=0 IF (JECT.GT.4) GOTO 200 IF (IX.GT.(64+ADJUST)) GOTO 400 GOTO 300 200 IF (IX.LT.(36-ADJUST)) GOTO 400 JECT=JECT-5 300 IF ((IY.LT.(LOWSCRS(JECT+1)-ADJUST)).OR. 1 (IY.GT.(HIGHSCRS(JECT+1)+ADJUST))) GOTO 400 POSCHK=1 400 RETURN END FUNCTION PRIORI(Z6,IFO,ILA,DIR,AC) C IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C BYTE GROUND,OK C DO 100 I=1,7 100 PRIOR(I)=0 EXPMAX=0 C C NOW MAKE A GUESS AS TO WHAT THE MOVE WILL BE C MOVE1=ILA IF (IFO.EQ.1.OR.IFO.EQ.2) MOVE1=MOV(Z6,ILA) IF (IFO.EQ.3) MOVE1=MOV(Z6,RLMAP(ITT2+ILA)) C C NOW SEE IF ANY PRIORITY MOVES EXIST C DO 200 I=0,7*DIR,DIR MOVE=ICORR(MOVE1+I) LOC=Z6+IARROW(MOVE+1) !** IF (ORDER(LOC).NE.0) GOTO 200 AB=RMAP(LOC) C C CHECK IF ARMY CAN ATTACK SOMETHING OVER WATER C GROUND=OMAP(LOC) OK='Y' IF ((AC.EQ.'t').AND.(GROUND.EQ.'.')) OK='N' C IF (AB.EQ.'O') PRIOR(1)=MOVE IF ((AB.EQ.'T').AND.(OK.EQ.'Y')) PRIOR(3)=MOVE IF (AB.EQ.'*') PRIOR(2)=MOVE IF (AB.EQ.'A') PRIOR(5)=MOVE IF ((AB.EQ.'S').AND.(OK.EQ.'Y')) PRIOR(6)=MOVE IF ((IFO.EQ.0).AND.(AB.GE.'A').AND.(AB.LE.'T').AND.(OK.EQ.'Y')) 1 PRIOR(7)=MOVE C IF (GROUND.NE.'+') GOTO 200 N=0 IF (EMAP(LOC+IARROW(ICORR(MOVE-2)+1)).EQ.' ') N=1 !** IF (EMAP(LOC+IARROW(ICORR(MOVE-1)+1)).EQ.' ') N=N+1 !** IF (EMAP(LOC+IARROW(MOVE+1)).EQ.' ') N=N+1 !** IF (EMAP(LOC+IARROW(ICORR(MOVE+1)+1)).EQ.' ') N=N+1 !** IF (EMAP(LOC+IARROW(ICORR(MOVE+2)+1)).EQ.' ') N=N+1 !** C TYPE 999,N,EXPMAX C999 FORMAT(' N:',I2,' EXPMAX:',I2) IF (N.LE.EXPMAX) GOTO 200 PRIOR(4)=MOVE EXPMAX=N 200 CONTINUE C TYPE 998 C998 FORMAT(' XXXXXXXXXXXXXXXX') C C NOW SELECT THE HIGHEST PRIORITY MOVE C DO 300 I=1,7 300 IF (PRIOR(I).NE.0) GOTO 400 PRIORI=0 RETURN 400 PRIORI=PRIOR(I) RETURN END subroutine prod ( ahits, z6, alimit, acrahit, acraloc, alopmax, * aar2s, j, arange, string, point ) IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C byte string ( 80 ) integer point integer aar2s(500),arange(200) do 1000 i = acraloc + 1, alopmax + acraloc if ( rlmap ( i ) .ne. 0 ) goto 1000 if ( i .gt. alimit + acraloc ) alimit = i - acraloc rlmap ( i ) = z6 if ( ahits .gt. 1 ) j1ts ( acrahit + i - acraloc ) = ahits if ( j .gt. 1 ) mycode ( i ) = 0 if ( j .lt. 2 ) codefu ( i - 1500 ) = 0 if ( j .lt. 2 ) codela ( i - 1500 ) = 0 if ( j .eq. 1 ) aar2s ( i - 1500 ) = 0 if ( acraloc .eq. 2000 ) arange ( i - 2000 ) = 20 if ( j .eq. 3 ) arange ( i - 500 ) = 20 cc if (( j .le. 1 ) .or. ( j .ge. 10 )) return call addrock ( j, string, point ) return 1000 continue return end subroutine read(beg,lim,num) IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C do 100 j = beg + 1, beg + lim read ( 1 ) k rlmap ( j ) = k if (num .lt. 9) read ( 1 ) mycode(j) if (num .gt. 8) read ( 1 ) codefu(j-1500),codela(j-1500) if (num .eq. 9) read ( 1 ) ar2s(j-1500) if (num .eq. 2) read ( 1 ) range(j-500) if (num .eq. 10) read ( 1 ) rang(j-2000) 100 continue return end ccc irand - produce a random number integer function irand(ihigh) integer ihigh integer rndint irand = rndint ( 0, ihigh - 1 ) return end ccc round - display the round number subroutine round ( mdate ) integer mdate byte jnkbuf ( 10 ) integer i do 100 i = 1, 3 jnkbuf ( i ) = ' ' 100 continue i = 0 call addint ( mdate, jnkbuf, i ) ! date in jnkbuf call bufpos ( 20, 78, jnkbuf ( 1 ), 1 ) call bufpos ( 21, 78, jnkbuf ( 2 ), 1 ) call bufpos ( 22, 78, jnkbuf ( 3 ), 1 ) return end FUNCTION SCRCHK(Z6) C C DETERMINES IF Z6 IS IN CURRENT SCREEN SECTOR SHOWING C 0=NO, 1=YES C IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C C IF (MODE.EQ.1) GOTO 100 SCRCHK=1 GOTO 400 100 JECT=JECTOR SCRCHK=0 IY=(Z6-1)/100 IX=Z6-IY*100 IF (JECT.GT.4) GOTO 200 !CHECK X COORD FIRST IF (IX.GT.70) GOTO 400 GOTO 300 200 IF (IX.LT.30) GOTO 400 JECT=JECT-5 300 IF ((IY.LT.(JECT*10)).OR.(IY.GT.(JECT*10+19))) GOTO 400 SCRCHK=1 !PASSED, IT'S GOOD 400 RETURN END subroutine sector ( amap ) c c This subroutine display sector jector from map ii c if isec=jector, map will not be displayed again c IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9) BYTE COMM(30),PHAZE(8) BYTE IFILE(11),KILL BYTE COMMAN(20),OKA(5),OKB(5),OKC(5) BYTE TTY(20) BYTE MOVEDFLAG(1500) BYTE J1TS(1600) BYTE EMAP(6000),RMAP(6000),PMAP(6000),OMAP(6000) BYTE PAMELA(8),REEED(9) byte jnkbuf ( 80 ) INTEGER RLMAP(3000) LOGICAL AUTOMV COMMON/AB9/AB9,PRIOR,NSHPRF COMMON/ARMTOT/ARMTOT COMMON/CHRT/COMMAN,COMM,COMSCN,KBTBL COMMON/CHR2/IFILE,KILL,TTY COMMON/CITY/FOUND(70),OWNER(70),PHASE(70) COMMON/CMYTBL/CMYTBL,KBFUDG COMMON/COD/CODER COMMON/CODE/CODEFU,CODELA COMMON/CRAHL/HITS,TIPE,CRAHIT,CRALOC COMMON/FIPATH/FIPATH(70) COMMON/G2/G2 COMMON/IARROW/IARROW(10),ARROW,INDEX,LOPMAX COMMON/IOTAB/IOTAB COMMON/J1TS/J1TS COMMON/KXK/IADJST COMMON/MAP/D COMMON/MAPBLK/EMAP,RMAP,PMAP,RLMAP COMMON/OMAP/OMAP COMMON/MISC1/TARGET,AR2S,RANGE,RANG COMMON/MISC2/LOCI(10,11),NUMBER(18),LIMIT,MDATE,VERSION COMMON/MODE/MODE,JECTOR,ISEC,NEWRND COMMON/MFLAGS/MOVEDFLAG COMMON/MYCOD/D2,MYCODE COMMON/OKS/OKA,OKB,OKC COMMON/OVRPOP/OVRPOP COMMON/P1/PHAZE,PHAZEE,PH COMMON/DAYTIM/PAMELA,REEED COMMON/PASS/PASS,SPECAL,AUTOMV COMMON/SAVBUF/SAVBUF COMMON/SPS/STEP,POSIT,START COMMON/TEST2/SUCCES,FAILUR,FULL COMMON/TROOP/TROOPT(6,5) COMMON/X/X(70) common /jnkbuf/ jnkbuf, ptr C C AGGR: THIS IS A MEASURE OF THE ENEMY SHIPS AGGRESSIVENESS, C THIS VALUE IS ADDED TO THE COST-EFFECTIVENESS OF ATTACKING AN C ENEMY UNIT TO DETERMINE IF THE SHIP WILL ATTACK OR RUN FROM THE C ENEMY. C ALL CITIES ARE REFERENCED BY CITY NUMBER, AS IN X(N)=LOC OF CITY #N C CODFU/CODELA: CONTAINS A NUMBER THAT DETERMINES WHAT THAT COMPUTER CRAFT C IS ASSIGNED TO DO, IS SEPERATED INTO 2 NUMBERS, IFO AND ILA. IFO C GIVES THE FUNCTION, ILA GIVES DETAILS. C CODER: USED FOR DEBUG FLAG C CROWD: USED IF CITY IS SURROUNDED BY ARMIES C D: ORIGINAL MAP, ENCODED IN MOD 3 C EXPLOR: THIS IS SET TO 1 IF THE ENEMY SHIP IS TO EXPLORE UNKNOWN C TERRITORY ADJACENT TO IT, 0 IF NOT. C FIPATH: STASIS # TO BE GIVEN TO FIGHTER IN THAT CITY C FOUND: COMPLETION DATES FOR CITIES C IADJST: SUBTRACTED FROM Z6 SO CURSOR WILL NOT BE MOVED OFF SCREEN C IARROW: ADDED TO Z6 SO MOVES [1,2,3,4,5,6,7,8,9] ARE CONVERTED C TO [+1,-99,-100,-101,ETC.] C ISEC: SECTOR TERMINAL IS SHOWING C IZAP: .TRUE.=SAVE GAME, .FALSE.=INITIALIZE C JECTOR: SECTOR PROGRAM IS LOOKING AT C KURSOR: SET TO POSITION OF CURSOR C MODE: 1=IN MODE 2, 0=IN MODE 1 C OWNER: WHO OWNS THE CITY: 0>NOBODY, 1>PLAYER, 2>COMPUTER C PASS: SET TO .TRUE. IF IT IS A PRIVILEGED USER C PHASE: PHASE OF CITY C X: LOCATIONS OF CITIES C byte amap ( 6000 ) if ( jector .eq. -1 ) goto 200 if ( mode .ne. 1 ) return if ( isec .ne. jector ) goto 100 if ( newrnd .eq. 1 ) goto 1300 return 100 isec=jector goto 300 200 call topmsg ( 1, 'Sector? ' ) jector=iphase(getchx()) if ((jector.lt.0).or.(jector.gt.9)) goto 200 isec=jector jector=-1 ! let main know that updating sector isn't used 300 continue call flush call delay ( 45 ) ! delay before zapping old sector call clear call topini line=kline(ki,isec) linefi=line+2000 ! linefi=line after last line of sector linec=line-100 ! get set for line 400 400 linec=linec+100 ! goto next line if (linec.ge.linefi) goto 1000 ! check for end of sector kstart = ki + 1 ! if line is broken, kstart will be modified 500 do 600 j=kstart,ki+70 ! ki itself is not in sector ab = amap ( j + linec ) ! get character 600 if (ab.ne.' ') goto 700 ! find first non-blank spot goto 400 ! no characters in this line 700 kinit = j ! ab is already calculated g2(j)=ab ! avoids repitition do 800 j=kinit+1,ki+70 ! look for blank character ab=amap(j+linec) ! get character if (ab.eq.' ') goto 900 ! exit loop if blank 800 g2(j)=ab ! put char. string in an array 900 kfinal=j-1 !set end of char. string call cursor(kinit-line+linec-ki+300) ! position cursor encode (kfinal-kinit+2,999,jnkbuf)(g2(j),j=kinit,kfinal),0 999 format(<kfinal-kinit+2>a1) call strout ( jnkbuf ) if (kfinal.ge.ki+70) goto 400 ! next line kstart = kfinal + 1 ! look at rest of line goto 500 1000 kursor = 2300 c c Print x coordinates c do 1100 i = ki, ki + 70, 10 call cursor ( kursor ) ptr = 0 call addint ( i, jnkbuf, ptr ) jnkbuf ( ptr + 1 ) = 0 call strout ( jnkbuf ) kursor = kursor + 10 1100 continue c c Print y coordinates c kursor=372 do 1200 i=line/100,line/100+19,2 call cursor ( kursor ) ptr = 0 call addint ( i, jnkbuf, ptr ) jnkbuf ( ptr + 1 ) = 0 call strout ( jnkbuf ) kursor=kursor+200 1200 continue call flush cc do 1314 ptr = 1, 3 cc jnkbuf ( ptr ) = ' ' cc1314 continue cc ptr = 1 cc call addint ( mdate, jnkbuf, ptr ) ! date in jnkbuf call strpos ( 5, 78, 'S' ) call strpos ( 6, 78, 'e' ) call strpos ( 7, 78, 'c' ) call strpos ( 8, 78, 't' ) call strpos ( 9, 78, 'o' ) call strpos ( 10, 78, 'r' ) call bufpos ( 12, 78, isec + "60, 1 ) call strpos ( 14, 78, 'R' ) call strpos ( 15, 78, 'o' ) call strpos ( 16, 78, 'u' ) call strpos ( 17, 78, 'n' ) call strpos ( 18, 78, 'd' ) cc call bufpos ( 20, 78, jnkbuf ( 1 ), 1 ) cc call bufpos ( 21, 78, jnkbuf ( 2 ), 1 ) cc call bufpos ( 22, 78, jnkbuf ( 3 ), 1 ) call round ( mdate ) call flush 1300 continue newrnd = 0 return end subroutine sensor(z6) c c Updates player's map around location z6 c and screen if current sector is displayed c IMPLICIT INTEGER(A-Z) PARAMETER IAR=0,IFI=500,IDE=700,ISU=900,ITT=1100, 1 ICR=1200,ICA=1300,IBA=1400 PARAMETER IAR2=1500,IFI2=2000,IDE2=2200,ISU2=2400,ITT2=2600, 1 ICR2=2700,ICA2=2800,IBA2=2900 PARAMETER IDEH=0,ISUH=200,ITTH=400,ICRH=500,ICAH=600,IBAH=700 PARAMETER IDE2H=800,ISU2H=1000,ITT2H=1200,ICR2H=1300, 1 ICA2H=1400,IBA2H=1500 INTEGER G2(100) INTEGER HITS(15),TIPE(15),CRAHIT(15),CRALOC(15) INTEGER INDEX(15) INTEGER CMYTBL(9),KBFUDG(9) INTEGER LOPMAX(15),COMSCN(40) INTEGER NSHPRF(4,6) INTEGER PH(8),OVRPOP(16,2) INTEGER PRIOR(7) INTEGER RANGE(200),AR2S(500) INTEGER ARMTOT(20),CODEFU(1500),CODELA(1500),TARGET(70),LIMIT(16) INTEGER ARROW(9) INTEGER D2(3) INTEGER*2 D(667) INTEGER MYCODE(1500) INTEGER RANG(200) INTEGER IOTAB(16) INTEGER PHAZEE(8) integer ptr BYTE SPECAL,PASS BYTE AB,AC,AD,AO,E,OWN1,OWN2,OWN !AVOID WORD REFERENCES TO THESE BYTE KBTBL(9),AB9(9)