SUBROUTINE MANTI C C * DEAL WITH ANTI-MATTER C C C MOVE ANTI-MATTER PODS C C COMMON PARAMETER MAXSHP = 8, MAXHOM = 4, MAXTRP = 10 COMMON/TORPE/TLOCS(MAXSHP, MAXTRP, 2), TDIR(MAXSHP, MAXTRP), IT(MA *XSHP) COMMON/TRKDAT/ENERGY(MAXSHP), SHIELD(MAXSHP), XCORD(MAXSHP), YCORD *(MAXSHP), TORPS(MAXSHP), HOLX, HOLY, HOLW, CDRAIN, NDRAIN, TDRAIN, * SCAN(MAXSHP), PHA(MAXSHP), I1, I2, HYPER(MAXSHP), ISENT(MAXSHP, 1 *0), XPOD(MAXSHP), YPOD(MAXSHP), DPOD(MAXSHP), IPODST(MAXSHP), WPOD *(MAXSHP), XHOM(MAXSHP, MAXHOM), YHOM(MAXSHP, MAXHOM), WHOM(MAXSHP, * MAXHOM), NHOM(MAXSHP), TRBEAM(MAXSHP), SCORE(MAXSHP), CREW(MAXSHP *), DIR(MAXSHP), WARP(MAXSHP), LAUNCH(MAXSHP), UNIV(100, 100), MESS *AG(480), THRU, SHPACT(MAXSHP), CLOAK(MAXSHP), NET(MAXSHP), SHPNAM( *10, MAXSHP) REAL LAUNCH, NDRAIN INTEGER*2SCAN, WHOM, CREW, HYPER, TORPS, TRBEAM LOGICAL*1THRU, SHPACT, CLOAK, NET BYTE UNIV, MESSAG BYTE SHPNAM C NOTE: BHOLE AND EMPTY ARE THE CHARACTERS FOR THE BLACK HOLE C AND EMPTY SPACE. C END COMMON COMMON/DOLOOP/SHIPS INTEGER SHIPS(8) BYTE CHAR CEXPLOSION SIZE PARAMETER XSIZE = 20 INTEGER IPX(XSIZE), IPY(XSIZE) C C * THE FOLLOWING DATA DESCIBES THE EXPLOSION PATTERN FOR C ANTI-MATTER PODS C DATA IPX/ - 1, - 1, - 1, 0, 0, 1, 1, 1, - 3, - 2, - 2, - 2, *0, 0, 0, 0, 2, 2, 2, 3/ DATA IPY/1, 0, - 1, 1, - 1, 1, 0, - 1, 0, 2, 0, - 2, 3, 2, - *2, - 3, 2, 0, - 2, 0/ INTEGER*2HYPERX(6), HYPERY(6) DATA HYPERX/20, 50, 80, 20, 50, 80/ DATA HYPERY/75, 70, 75, 25, 30, 25/ CALL PERM(SHIPS, I1, I2) DO 2000 ISHP = 1, 8 I = SHIPS(ISHP) IF (.NOT.(IPODST(I) .EQ. 1)) GOTO 2020 C pod launch requested CALL MOVE(XCORD(I), YCORD(I), X1, Y1, DPOD(I), 10., CHAR, UNIV *, ' ') IX = X1 IY = Y1 KX = XCORD(I) KY = YCORD(I) C make sure it clears the ship IF (.NOT.((KX .EQ. IX) .AND. (KY .EQ. IY))) GOTO 2040 CALL MOVE(X1, Y1, X, Y, DPOD(I), 10., CHAR, UNIV, ' ') GOTO 2050 2040 CONTINUE X = X1 Y = Y1 2050 CONTINUE IX = X IY = Y IF (.NOT.(CHAR .EQ. ' ')) GOTO 2060 C successul launch UNIV(IX, IY) = '@' XPOD(I) = X YPOD(I) = Y C move at warp 5 WPOD(I) = 5. IPODST(I) = 2 C pod launched CALL SENT(I, 28) GOTO 2070 2060 CONTINUE C pod blocked CALL SENT(I, 23) IPODST(I) = 0 2070 CONTINUE 2020 CONTINUE IF (.NOT.(IPODST(I) .EQ. 2)) GOTO 2080 C pod is on the move IX = XPOD(I) IY = YPOD(I) IF (.NOT.(UNIV(IX, IY) .NE. '@')) GOTO 2100 C pod destroyed CALL SENT(I, 24) IPODST(I) = 4 GOTO 2110 2100 CONTINUE CALL MOVE(XPOD(I), YPOD(I), X, Y, DPOD(I), WPOD(I), CHAR, UN *IV, ' ') I2120=(CHAR) GOTO 2120 2140 CONTINUE UNIV(IX, IY) = ' ' IX = X IY = Y UNIV(IX, IY) = '@' XPOD(I) = X YPOD(I) = Y CIF IT HIT A TORP, REQUEST DETONATION IF (.NOT.((CHAR .EQ. '+') .OR. (CHAR .EQ. '^'))) GOTO 2150 IPODST(I) = 3 2150 CONTINUE GOTO 2130 2170 CONTINUE KX = HYPERX(HYPER(I)) KY = HYPERY(HYPER(I)) DO 2180 II = (KX - 1), (KX + 1) DO 2200 IJ = (KY - 1), (KY + 1) IF (.NOT.(UNIV(II, IJ) .EQ. ' ')) GOTO 2220 UNIV(II, IJ) = '@' UNIV(IX, IY) = ' ' XPOD(I) = II YPOD(I) = IJ XPOD(I) = XPOD(I) + .5 YPOD(I) = YPOD(I) + .5 IPODST(I) = 3 GOTO 2190 2220 CONTINUE 2200 CONTINUE 2210 CONTINUE 2180 CONTINUE 2190 CONTINUE GOTO 2130 2240 CONTINUE 2250 CONTINUE KX = RAN(I1, I2)*100. + 1. KY = RAN(I1, I2)*100. + 1. 2260 IF (.NOT.(UNIV(KX, KY) .EQ. ' ')) GOTO 2250 2270 CONTINUE XPOD(I) = KX YPOD(I) = KY XPOD(I) = XPOD(I) + .5 YPOD(I) = YPOD(I) + .5 UNIV(IX, IY) = ' ' UNIV(KX, KY) = '@' IPODST(I) = 3 GOTO 2130 2280 CONTINUE C hit something solid, deflect pod & maybe detonate DPOD(I) = DPOD(I) + (RAN(I1, I2) - 0.5)*360. IF (.NOT.(RAN(I1, I2) .LT. .25)) GOTO 2290 IPODST(I) = 3 2290 CONTINUE GOTO 2130 2120 CONTINUE IF (I2120.EQ.32)GOTO 2140 IF (I2120.EQ.43)GOTO 2140 IF (I2120.EQ.72)GOTO 2170 IF (I2120.EQ.82)GOTO 2240 IF (I2120.EQ.94)GOTO 2140 GOTO 2280 2130 CONTINUE 2110 CONTINUE 2080 CONTINUE IF (.NOT.(IPODST(I) .EQ. 3)) GOTO 2310 C pod detonation requested IX = XPOD(I) IY = YPOD(I) IF (.NOT.(UNIV(IX, IY) .NE. '@')) GOTO 2330 C pod destroyed CALL SENT(I, 24) IPODST(I) = 4 GOTO 2340 2330 CONTINUE IPODST(I) = 4 UNIV(IX, IY) = ' ' C pod detonated CALL SENT(I, 29) DO 2350 L1 = 1, XSIZE Ccheck each char cell in explosion pattern KX = IX + IPX(L1) IF (.NOT.(KX .GE. 101)) GOTO 2370 KX = KX - 100 2370 CONTINUE IF (.NOT.(KX .LT. 1)) GOTO 2390 KX = KX + 100 2390 CONTINUE KY = IY + IPY(L1) IF (.NOT.(KY .GE. 101)) GOTO 2410 KY = KY - 100 2410 CONTINUE IF (.NOT.(KY .LT. 1)) GOTO 2430 KY = KY + 100 2430 CONTINUE CHAR = UNIV(KX, KY) C what did explosion hit? I2450=(CHAR) GOTO 2450 2470 CONTINUE Chandle hits on ships by distance later CONTINUE GOTO 2460 2480 CONTINUE CONTINUE GOTO 2460 2490 CONTINUE C randomly relocate the base if within 1 unit IF (.NOT.(L1 .LE. 8)) GOTO 2500 UNIV(KX, KY) = ' ' 2520 CONTINUE IIX = RAN(I1, I2)*100. + 1. IIY = RAN(I1, I2)*100. + 1. 2530 IF (.NOT.(UNIV(IIX, IIY) .EQ. ' ')) GOTO 2520 2540 CONTINUE UNIV(IIX, IIY) = 'B' 2500 CONTINUE GOTO 2460 2550 CONTINUE C ieeeee! CALL SENT(I, 31) UNIV(KX, KY) = ' ' 2560 CONTINUE IIX = RAN(I1, I2)*100. + 1. IIY = RAN(I1, I2)*100. + 1. 2570 IF (.NOT.(UNIV(IIX, IIY) .EQ. ' ')) GOTO 2560 2580 CONTINUE HOLX = IIX HOLY = IIY UNIV(IIX, IIY) = '#' GOTO 2460 2590 CONTINUE C chain reaction - detonate other pod CALL PFIND(IP, KX, KY) IPODST(IP) = 3 GOTO 2460 2600 CONTINUE C everything else get's destroyed UNIV(KX, KY) = ' ' GOTO 2460 2450 CONTINUE IF (I2450.EQ.35)GOTO 2550 IF (I2450.GE.49.AND.I2450.LE.56)GOTO 2470 IF (I2450.EQ.64)GOTO 2590 IF (I2450.EQ.66)GOTO 2490 IF (I2450.EQ.72)GOTO 2480 GOTO 2600 2460 CONTINUE Cend of explosion pattern loop C C figure ship damage 2350 CONTINUE 2360 CONTINUE DO 2610 IZ = 1, 8 D = DSTNCE(XCORD(IZ), YCORD(IZ), XPOD(I), YPOD(I)) IF (.NOT.(D .GT. 4)) GOTO 2630 C ship's out of range GOTO 2610 2630 CONTINUE IS = 7. - D E = 1500. - D*300. IF (.NOT.(SHPACT(IZ))) GOTO 2650 IF (.NOT.(I .NE. IZ)) GOTO 2670 C pod hit alien CALL SENT(I, 32) 2670 CONTINUE C pod explosion! CALL SENT(IZ, 30) SCAN(IZ) = MAX(SCAN(IZ) - IS, 0) CALL DAMAGE(I, IZ, E, 500.) GOTO 2660 2650 CONTINUE C hit ghost ship CALL SENT(I, 21) 2660 CONTINUE 2610 CONTINUE 2620 CONTINUE 2340 CONTINUE GOTO 2320 2310 CONTINUE C other pod status requires no action CONTINUE 2320 CONTINUE 2000 CONTINUE 2010 CONTINUE RETURN END SUBROUTINE PFIND(IOWNR, IPX, IPY) C COMMON PARAMETER MAXSHP = 8, MAXHOM = 4, MAXTRP = 10 COMMON/TORPE/TLOCS(MAXSHP, MAXTRP, 2), TDIR(MAXSHP, MAXTRP), IT(MA *XSHP) COMMON/TRKDAT/ENERGY(MAXSHP), SHIELD(MAXSHP), XCORD(MAXSHP), YCORD *(MAXSHP), TORPS(MAXSHP), HOLX, HOLY, HOLW, CDRAIN, NDRAIN, TDRAIN, * SCAN(MAXSHP), PHA(MAXSHP), I1, I2, HYPER(MAXSHP), ISENT(MAXSHP, 1 *0), XPOD(MAXSHP), YPOD(MAXSHP), DPOD(MAXSHP), IPODST(MAXSHP), WPOD *(MAXSHP), XHOM(MAXSHP, MAXHOM), YHOM(MAXSHP, MAXHOM), WHOM(MAXSHP, * MAXHOM), NHOM(MAXSHP), TRBEAM(MAXSHP), SCORE(MAXSHP), CREW(MAXSHP *), DIR(MAXSHP), WARP(MAXSHP), LAUNCH(MAXSHP), UNIV(100, 100), MESS *AG(480), THRU, SHPACT(MAXSHP), CLOAK(MAXSHP), NET(MAXSHP), SHPNAM( *10, MAXSHP) REAL LAUNCH, NDRAIN INTEGER*2SCAN, WHOM, CREW, HYPER, TORPS, TRBEAM LOGICAL*1THRU, SHPACT, CLOAK, NET BYTE UNIV, MESSAG BYTE SHPNAM C NOTE: BHOLE AND EMPTY ARE THE CHARACTERS FOR THE BLACK HOLE C AND EMPTY SPACE. C END COMMON C C * FIND OUT WHO OWNS THE POD AT A GIVEN X, Y C DO 2690 ISHP = 1, 8 IF (.NOT.(IPODST(ISHP) .EQ. 2)) GOTO 2710 IX = XPOD(ISHP) IY = YPOD(ISHP) IF (.NOT.((IX .EQ. IPX) .AND. (IY .EQ. IPY))) GOTO 2730 IOWNR = ISHP RETURN 2730 CONTINUE 2710 CONTINUE 2690 CONTINUE 2700 CONTINUE CGHOST POD? IOWNR = 0 RETURN END