Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!lll-lcc!styx!ames!ucbcad!ic.Berkeley.EDU!edjames
From: edjames@ic.Berkeley.EDU (Ed James)
Newsgroups: net.sources.games
Subject: VMS Empire for VMS: Part 3 of 4
Message-ID: <1184@ucbcad.BERKELEY.EDU>
Date: Sat, 20-Dec-86 16:10:25 EST
Article-I.D.: ucbcad.1184
Posted: Sat Dec 20 16:10:25 1986
Date-Received: Sat, 20-Dec-86 22:30:05 EST
Sender: news@ucbcad.BERKELEY.EDU
Reply-To: edjames@ic.berkeley.edu (Ed James)
Organization: University of California, Berkeley
Lines: 3001
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 : Sit' )
cc call strpos( 7, 25, ': 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(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)