SUBROUTINE INIT(GATHER,ITMAX) C C ROUTINE TO INITIALIZE MTREK C INCLUDE 'TRKCOMMON.FTN' REAL LAUNCH,SECNDS EQUIVALENCE (HDRAIN,RCNTRL(7)),(CDRAIN,RCNTRL(8)) INTEGER SCAN,WHOM,CREW,HYPER,TORPS BYTE GINBUF(200),MESSAG,INITLS,CHAR LOGICAL*1 THRU,XSHIP,CLOAK,CLON,FBASE COMMON /ACCUM/ ACCUME COMMON /STATS/SEN(8),IPHA(8),IFRGHT(8),IPODS(8),IHOM(8),ITORP(8), 1 IMESS(8),IDEST(8),IOEN(8),GMTIM,IJMPS(8) LOGICAL*1 OK,YES,CNF,GATHER,ACCUME,CONTIN COMMON /TORPES/ XHOM(8,15),YHOM(8,15),TLOCS(8,15,3),TDIR(8,15) C C CALL GETCHR ACCUME=.TRUE. WRITE (5,800) 800 FORMAT (/,' Welcome to MULTI-TREK-PLUS') WRITE (5,10000) 10000 FORMAT ('$Do you want to gather game statistics ?') CALL YESNO(GATHER) WRITE (5,10003) 10003 FORMAT ('$Enter universe verification frequency in minutes ? ') CALL GETINT(ITMAX,OK,3,15) IF (.NOT.OK) ITMAX=10 ITMAX = ITMAX * 150 WRITE (5,10001) 10001 FORMAT ('$Are you continuing an existing game ?') CALL YESNO(CONTIN) IF (CONTIN) GOTO 10002 WRITE (5,31000) 31000 FORMAT ('$Use a configuration file ?') CALL YESNO(CNF) IF (CNF) CALL AUTCNF(CNF,STARS,BASES,N) 10002 IF (CONTIN.OR..NOT.CNF) CALL MANCNF(CONTIN,CNF,STARS,BASES,N) C C ATTACH THE UNIVERSE C CALL ATTUNI(I) C C * INITIALIZE SHIPS AS UNOWNED AND NOT CLOAKED C DO 10006 I=1,8 SEN(I)=0 IPHA(I)=0 PHA(I)=-1. IFRGHT(I)=0 IPODS(I)=0 IHOM(I)=0 ITORP(I)=0 IMESS(I)=0 IDEST(I)=0 IOEN(I)=0 IJMPS(I)=0 LAUNCH(I)=-1 XSHIP(I)=.FALSE. PAUS(I)=.FALSE. ITRAC(I)=0 CLOAK(I)=.FALSE. CLON(I)=.FALSE. JMPLOC(I)=0 DO 30103, J=1,50 IF (J.LE.10) ISENT (I,J) = 0 IF (J.LE.15) LHOM(I,J)=0 IF (.NOT.CONTIN) BASEN(I,J)=RCNTRL(1) IF (.NOT.CONTIN) IBASE(I,(J*2)-1)=0 IF (.NOT.CONTIN) IBASE(I,J*2)=0 IF (J.LE.8) IDAMGE(I,J)=0 IF (J.LE.IUNIMX) FLOAD(J,I)=0 30103 CONTINUE FBASE(I)=.FALSE. DOCKED(I)=.FALSE. SCAN(I)=10 INITLS(I,1)=' ' INITLS(I,2)=' ' IHOME(I) = 0 NHOM(I)=ICNTRL(4) IACTRP(I)=0 IACTN(I)=0 DO 10511 II=1,15 LHOM(I,II)=0 10511 CONTINUE 10006 CONTINUE C C IF CONTINUING A GAME DON'T SET EVERYTHING UP, IT'S DONE C WRITE (5,30000) 30000 FORMAT(/,' Initializing the universe') C C * GET THE COMPUTER TIME AND MAKE IT INTO AN INTEGER < 32 K C T1=SECNDS(0.0) 10024 IF (T1.LE.32000) GO TO 10025 T1 = T1/13. GO TO 10024 10025 CONTINUE I2=T1 C C * NOW GENERATE THE UNIVERSE C DO 10029 K=1,IUNIMX DO 10028 I=1,IMAXX DO 10028 J=1,IMAXY RNDOM=RAN(I1,I2) CALL UNIVIN(I,J,'.',K) IF (RNDOM.GT.(IMAXX-STARS)/IMAXX) CALL UNIVIN(I,J,'*',K) 10028 CONTINUE TYPE *,' Stars generated for universe ',K 10029 CONTINUE C C * PUT IN THE HYPERSPACE PORTS C DO 10500 K=1,IUNIMX IHYP(K,1,1)=IMAXX/5 IHYP(K,1,2)=3*(IMAXY/4) IHYP(K,2,1)=IMAXX/2 IHYP(K,2,2)=7*(IMAXY/10) IHYP(K,3,1)=4*IHYP(K,1,1) IHYP(K,3,2)=IHYP(K,1,2) IHYP(K,4,1)=IHYP(K,1,1) IHYP(K,4,2)=IMAXY/4 IHYP(K,5,1)=IHYP(K,2,1) IHYP(K,5,2)=3*(IMAXX/10) IHYP(K,6,1)=IHYP(K,3,1) IHYP(K,6,2)=IHYP(K,4,2) DO 10031 I=1,6 CALL UNIVIN(IHYP(K,I,1),IHYP(K,I,2),'H',K) 10031 CONTINUE TYPE *,' Hyperspace ports generated for universe ',K 10500 CONTINUE C C * PUT IN THE MOBILE "BLACK HOLES" C DO 10501 K=1,IUNIMX DO 10030, I=1,IHOLE(K) 10032 IX=RAN(I1,I2)*IMAXX+1. IF (IX.GT.IMAXX) IX=IMAXX IY=RAN(I1,I2)*IMAXY+1. IF (IY.GT.IMAXY) IY=IMAXY CALL UNIV(IX,IY,CHAR,K) IF (CHAR.EQ.'.') GO TO 10034 GO TO 10032 10034 CALL UNIVIN(IX,IY,'#',K) HX(K,I)=IX HY(K,I)=IY 10030 CONTINUE TYPE *,' Black holes generated for universe ',K 10501 CONTINUE C C * PUT IN THE RANDOM HYPER-SPACE PORTS C DO 10502 K=1,IUNIMX DO 10043 I=1,N OK=.FALSE. GO TO 10047 10045 IF (OK) GO TO 10043 10047 IX=RAN(I1,I2)*IMAXX+1. IF (IX.GT.IMAXX) IX=IMAXX IY=RAN(I1,I2)*IMAXY+1. IF (IY.GT.IMAXY) IY=IMAXY CALL UNIV(IX,IY,CHAR,K) IF (CHAR.EQ.'.') GO TO 10056 GO TO 10045 10056 CALL UNIVIN(IX,IY,'R',K) OK=.TRUE. GO TO 10045 10043 CONTINUE TYPE *,' Random hyperspace ports generated for universe ',K 10502 CONTINUE C C * PUT IN THE STAR SHIPS C DO 10058 I=1,8 OK=.FALSE. GO TO 10062 10060 IF (OK) GO TO 10058 10062 IX=RAN(I1,I2)*IMAXX+1. IF (IX.GT.IMAXX) IX=IMAXX IY=RAN(I1,I2)*IMAXY+1. IF (IY.GT.IMAXY) IY=IMAXY IU=RAN(I1,I2)*IUNIMX+1 IF (IU.GT.IUNIMX) IU=IUNIMX CALL UNIV(IX,IY,CHAR,IU) IF (CHAR.NE.'.') GO TO 10060 ENCODE(1,10072,CHAR) I 10072 FORMAT (I1) CALL UNIVIN(IX,IY,CHAR,IU) XCORD(I)=IX YCORD(I)=IY XCORD(I)=XCORD(I)+.5 YCORD(I)=YCORD(I)+.5 IUNIV(I)=IU OK=.TRUE. GO TO 10060 10058 CONTINUE TYPE *,' Ships seeded' C C * INITIALIZE STAR BASE POSIITIONS * C DO 10503 K=1,IUNIMX DO 10036 I=1,8 DO 10036 J=1,BASES*2,2 IOFF=(K-1)*20 10037 X=(RAN(I1,I2)*IMAXX)+1 Y=(RAN(I1,I2)*IMAXY)+1 IIX=X IIY=Y CALL UNIV(IIX,IIY,CHAR,K) IF (CHAR.NE.'.') GOTO 10037 CALL UNIVIN(IIX,IIY,'B',K) IBASE(I,IOFF+J)=X IBASE(I,IOFF+J+1)=Y 10036 CONTINUE TYPE *,' Starbase seeding finished for universe ',K 10503 CONTINUE C C * INITIALIZE STARTING STATUS OF THE STAR SHIPS C DO 10074 I=1,8 ENERGY(I)=10000 TORPS(I)=ICNTRL(5) IPOD(I)=0 WPOD(I)=5. CREW(I)=400 WARP(I)=0. MESSAG(I*60-59)=' ' SCORE(I)=0 HYPER(I,1)=3 HYPER(I,2)=1 SHIELD(I)=0 DO 10074 K=1,10 TDIR(I,K)=-1. TLOCS(I,K,1)=1 TLOCS(I,K,2)=1 TLOCS(I,K,3)=1 IF (K.LE.8) IDAMGE(I,K)=0. 10074 CONTINUE 30010 CONTINUE C C C SET THE INITIAL BASE LEVEL TO 1 C CALL GINSYS(GINBUF,IDS) IBLEV = 1 IF (GINBUF(15).EQ.'2') IBLEV = 2 WRITE (5,10087) IBLEV 10087 FORMAT (' MULTI-TREK-PLUS V',I1,' initialized') THRU=.FALSE. DIP(1)=.FALSE. C C DETACH THE TERMINAL C CALL WTQIO ("2000,5,1) RETURN END