SUBROUTINE ATTACK INCLUDE 'TREK.COM/-LI' INCLUDE 'TREK2.COM/-LI' INTEGER PERCNT EQUIVALENCE (CRACKS(1),HIT),(CRACKS(3),IHURT),(CRACKS(4),L) EQUIVALENCE (CRACKS(6),KDIDIT) EQUIVALENCE (KSTUF(1),ITHERE),(KSTUF(2),ITHX),(KSTUF(3),ITHY) IF(ALLDON.NE.0) RETURN IF(ITHERE.NE.0) CALL MOVTHO IF(NEUTZ .EQ. 0) GO TO 1 NEUTZ=0 RETURN 1 IF((((COMHER.NE.0) .OR. (ISHERE.NE.0)).AND.(JUSTIN.EQ.0)).OR. 1(KSTUF(5).EQ.2 + )) CALL MOVCOM IF(NENHER.EQ. 0) RETURN IHURT=0 CALL SKIP(1) C--------ALLOW EACH KLINGON IN TURN TO DO HIS DAMNEDEST HITMAX=0.0 HITTOT=0.0 ATTCKD=0 C--------LOOP FOR ENEMY ATTACKS STARTS HERE L=0 5 L=L+1 IF(L .GT. NENHER) GO TO 80 C--------IF ENTERPRISE IS DOCKED DON'T HIT IT. IF(CONDIT.NE.IHDCKD) GO TO 6 CALL CRAM( +41HENEMIES ATTACK, STARBASE SHIELDS PROTECT ) CALL CRMSHP CALL CREND CALL SKIP(1) RETURN C--------IF KPOWER IS LT ZERO THEN ENEMY CAN'T ATTACK. 6 IF(KPOWER(L) .LT. 0)GO TO 5 ATTCKD=1 C--------COMPUTE HIT STRENGTH AND DIMINISH SHIELD POWER DUSTFC=0.80+0.05*RANF(0) HIT=KPOWER(L)*DUSTFC**KDIST(L) II=KX(L) JJ=KY(L) IQUAD=QUAD(II,JJ) C--------DECIDE IF ENEMY SHOULD FIRE PHOTON TORPEDO IF(HIT .GT. 400.0 .OR. JUSTIN .EQ. 1) GO TO 10 IF(HIT .GT. 300.0 .AND. KDIST(L) .GT. 5.0) GO TO 10 IF(IQUAD .EQ. IHK .AND. RANF(0) .GT. 0.10) GO TO 10 C--------ENEMY FIRES PHOTON TORPEDO. IPHWHO=1 CALL KPHOTN IPHWHO=IHGRN KDIDIT=1 IF(ALLDON .EQ. 1 .OR. GALAXY(QUADX,QUADY) .EQ. 1000) RETURN GO TO 5 C--------ENEMIES FIRE PHASER-LIKE WEAPONS 10 CALL ZAP HITTOT=HITTOT+HIT HITMAX=AMAX1(HITMAX,HIT) C--------LOOP FOR ENEMY ATTACKS ENDS HERE GO TO 5 80 IF(ATTCKD .EQ. 0 .OR. HITTOT .EQ. 0.0) RETURN IF(ENERGY .LE. 0) GO TO 100 PERCNT=100.0*SHLD/INSHLD + 0.5 IF(IHURT.NE.0)GO TO 85 C--------PRINT MESSAGE IF SHIELDS FULLY PROTECTED STARSHIP CALL CRAM(35HENEMIES ATTACK--SHIELDS REDUCED TO ) GO TO 90 C--------PRINT MESSAGE IF STARSHIP ITSELF SUFFERED HITS 85 CALL SKIP(1) CALL CRAM(12HENERGY LEFT ) CALL CRAMF(ENERGY,0,2) CALL CRAM(19H TORPEDOES LEFT ) CALL CRAMI(TORPS,0) CALL CRAM(12H SHIELDS ) IF(SHLDUP.NE.0) CALL CRAM(4HUP, ) IF(SHLDUP .EQ. 0 .AND. DAMAGE(8) .EQ. 0) CALL CRAM(6HDOWN, ) IF(DAMAGE(8) .GT. 0) CALL CRAM(9HDAMAGED, ) 90 CALL CRAMI(PERCNT,0) CALL CRMDMP(1H%) C--------CHECK IF ANYONE WAS HURT IF(HITMAX.LT.200.0 .AND. HITTOT.LT.500.0) GO TO 120 HIT=HITTOT CALL CASULT GO TO 120 C--------RETURNING HOME UPON YOUR SHIELD, NOT WITH IT... 100 CALL FINISH(5) RETURN C--------AFTER ATTACK, SORT OUT ENEMIES 120 CALL SORTKL RETURN END