SUBROUTINE ROMULN C** ROUTINE TO CONTROL MOVEMENT OF ROMULAN C** IN SEARCH OF THE ENTERPRISE AND DESTROY IT COMMON/GENDTA/SDATE,COND(2),KLING,TMLEFT,ITORP,ENERGY,SHELDS COMMON/QUAD/IQAD(8,8),IQX,IQY COMMON/SECT/SEC(64,64),ISX,ISY,ISX8,ISY8 COMMON/DAMAGS/IRPARS(10,2),IRAND,IRATE,IDMGD,TSTRT,GTIME COMMON/RMULN/IRMLN,IRMX,IRMY,IHTMS DIMENSION DIST(4),DIRCT(4) C********************************************************************* IF(IRMX .EQ. 0)GO TO 999 C** BLANK OUT LAST LOCATION IF(SEC(IRMX,IRMY) .EQ. '(R)') SEC(IRMX,IRMY) = ' ' C** FIND MOST DIRECT ROUTE TO ENTERPRISE. IEX = ISX IEY = ISY C** CHECK UP FIRST IF(IEY .LT. IRMY)IEY = IEY + 64 IRTRN = 1 GO TO 100 C** CHECK DOWN NOW 20 IEY = ISY IF(IEY .GT. IRMY)IEY = IEY - 64 IRTRN = 2 GO TO 100 C** CHECK LEFT 30 IEY = ISY IEX = ISX IF(IEX .GT. IRMX)IEX = IEX - 64 IRTRN = 3 GO TO 100 C** CHECK RIGHT 40 IEX = ISX IF(IEX .LT. IRMX)IEX = IEX + 64 IRTRN = 4 C** COMPUTE DISTANCE AND DIRECTION 100 DELX = IEX - IRMX DELY = IEY - IRMY DIRCT(IRTRN) = ATAN2(DELY,DELX) IF(DIRCT(IRTRN) .LT. 0.0)DIRCT(IRTRN) = DIRCT(IRTRN)+2.*3.14159 DIST(IRTRN) = SQRT(DELX**2 + DELY**2) GO TO (20,30,40,120),IRTRN TYPE *,' *** RUMULN RETURN ERROR ***' C** FIND MINIMUM DIST 120 AMDIS = 10000. DO 150 I=1,4 IF(DIST(I) .GT. AMDIS)GO TO 150 ISMALL = I AMDIS = DIST(I) 150 CONTINUE C** SAVE MIN. DISTC = DIST(ISMALL) DIREC = DIRCT(ISMALL) COSANG = COS(DIREC) SINANG = SIN(DIREC) DELX = COSANG * DISTC DELY = SINANG * DISTC C** DIAGNOSTIC CDIAG TYPE 9001,IRMX,IRMY,DISTC,DIREC C** IF IRMLN = 2, PRIOR CONTACT AND PURSUE DIRECTLY IF(IRMLN .EQ. 2)GO TO 153 C** CHECK FOR ENTERPRISE WITHIN LONG SCAN IF(DELX .LE. 12. .AND. DELX .GE. 2.0 * .AND. DELY .LE. 12.0 .AND. DELY .GE. 2.0)GO TO 153 C** MOVE IN A RANDOM FASHION DIREC = RANDOM(IRAND)*8.0 + 1.0 COSANG = COS(DIREC) SINANG = SIN(DIREC) WARP = 10.0 IF(DISTC .LE. 2.5)WARP = 2.0 C** INSERT THE FOLLOWING CARD TO ALLOW THE ENTERPRISE C** TO ESCAPE AFTER INITIAL CONTACT. C** IF(DISTC .GT. 3.0)IHTMS = 0 GO TO 154 C** PERSUE ENTERPRISE DIRECTLY 153 IRMLN = 2 WARP = DISTC*.5 IF(WARP .GT. 8.0)WARP = 8.0 154 IRMX = IRMX + COSANG*WARP + 0.5 IRMY = IRMY + SINANG*WARP + 0.5 DISTC = DISTC - WARP DELX = COSANG * DISTC DELY = SINANG * DISTC IF(IRMX .GT. 64)IRMX = IRMX - 64 IF(IRMY .GT. 64)IRMY = IRMY - 64 155 IF(IRMX .LE. 0)IRMX = 64 + IRMX IF(IRMY .LE. 0)IRMY = 64 + IRMY IF(SEC(IRMX,IRMY) .EQ. ' ')GO TO 160 IRMX = IRMX - 1 GO TO 155 C** IF ENTERPRISE IN RANGE FIRE 160 IF(DELX .GT. 3.1 .OR. DELY .GT. 3.1)GO TO 300 C** DO NOT FIRE IF ENTERPRISE DOCKED IF(COND(1) .EQ. 'DOCK')GO TO 300 C** ROMULAN FIRE LAZAR CANNONS C** WHICH WILL NOT DEMINISH OVER DISTANCE AFFECT = RANDOM(IRAND)*100. + 250. SHELDS = SHELDS - AFFECT C** CHECK FOR END DUE TO ILLEGAL ENTERPRISE MOVE IF(COND(1) .EQ. 'END')GO TO 999 COND(1) = 'RED ' COND(2) = ' ' IHTMS = IHTMS + 1 165 IF(SHELDS .GT. 1500.)GO TO 170 C** INFLICT DAMAGES IF SHELDS ARE DOWN IDMGD = 1 CALL DAMGED C** SORT OUT MESSAGES 170 IF(IHTMS .EQ. 1)GO TO 162 IF(IHTMS .EQ. 3)GO TO 200 IF(IHTMS .EQ. 5)GO TO 220 IF(IHTMS .EQ. 7)GO TO 230 IF(IHTMS .GT. 7)GO TO 240 TYPE *,' THE ENTERPRISE RECIEVES ANOTHER HIT FROM' TYPE *,' THE UNIDENTIFIED SOURCE WITHIN THE QUADRANT.' GO TO 275 162 TYPE *,' THE ENTERPRISE GOES ON AUTOMATIC RED ALERT.' TYPE *,' SENSORS REPORT A SEVERE HIT FROM AN' TYPE *,' UNIDENTIFIED SOURCE WITHIN THE QUADRANT.' GO TO 275 C** 200 TYPE *,' LT. UHURA REPORTS A MESSAGE FROM STAR FLEET' TYPE *,' STATING THAT THE ROMULANS HAVE DEVELOPED AN' TYPE *,' EFFECTIVE CLOAKING DEVICE.' GO TO 275 C** 220 TYPE *,' MR. SPOCK REPORTS HE AND MR. SCOTT HAVE' TYPE *,' DEVELOPED A DEVICE TO COUNTER THE ROMULAN' TYPE *,' CLOAKING AND IT WILL SOON BE INSTALLED.' GO TO 275 C** 230 TYPE *,' MR. SPOCK REPORTS THAT THE COUNTER-CLOAKING' TYPE *,' DEVICE IS INSTALLED AND WORKING AS BEST IT CAN.' GO TO 250 C** 240 TYPE *,' THE ENTERPRISE RECIEVES ANOTHER HIT FROM' TYPE *,' THE ROMULAN SHIP WITHIN RANGE OF THE ENTERPRISE.' C** LOCATE ROMULAN ON SHORT SCAN 250 SEC(IRMX,IRMY) = '(R)' 275 TYPE 1001,SHELDS 1001 FORMAT(' ENERGY LEFT TO YOUR SHIELDS = ',F7.2) 300 CONTINUE 999 CONTINUE CDIAG TYPE 9001,IRMX,IRMY,DISTC,DIREC C9001 FORMAT(' ROMULAN AT = ',2I5,2F10.4) RETURN END