home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / FORTRAN / SUPERT87.ZIP / EPMOVE.FOR < prev    next >
Encoding:
Text File  |  1986-12-15  |  14.6 KB  |  196 lines

  1.       SUBROUTINE EPMOVE(IS)                                             1420
  2.  
  3. c    include 'tcommon.for'
  4.     %include tcommon.for
  5.  
  6.       IF(IS.LT.0)GO TO 8001                                             1448
  7.       IS=0                                                              1449
  8.       PRSPD=PSP                                                         1450
  9. C     ...DETERMINE WHICH DRIVE TO USE DEPENDING ON DAMAGE IF ANY        1451
  10.       ACCE=EWRP                                                         1452
  11.       DCHG=DGWP                                                         1453
  12.       DVEL=DVWP                                                         1454
  13. C     ...IF UNDER ALIEN CONTROL, USE W DRIVE EVEN IF DAMAGED.           1455
  14.       IF(NDRA.EQ.1)GO TO 2005                                           1456
  15.       IF(NBASES.EQ.99)DVEL=DVWP*2.                                      1457
  16.       IF(IDMG(1).EQ.0)GO TO 2005                                        1458
  17.       DSP=AMIN1(DSP,AMAX1(PSP,SIM))                                     1459
  18.       NBASES=0                                                          1460
  19.       ACCE=EIMP                                                         1461
  20.       DCHG=DGIMP                                                        1462
  21.       DVEL=DVIMP                                                        1463
  22. C     ...IF BOTH DAMAGED, COME TO DEAD STOP.                            1464
  23.       IF(IDMG(2).NE.0)DSP=PSP                                           1465
  24. C     ...E MOVEMENT. CHECK WHETHER ACCELERATING OR NOT.                 1466
  25. 2005  IF(PSP.EQ.DSP.AND.PDEG.EQ.DDEG)GO TO 2090                         1467
  26. C     ...ACCELERATION. DCHG IS DEGREES CHANGE PER STEP; DVEL-VEL. CHG.  1468
  27.       DELTA=0.                                                          1469
  28.       IF(DDEG.EQ.PDEG)GO TO 2010                                        1470
  29.       DELTA=DDEG-PDEG                                                   1471
  30.       IF(ABS(DELTA).GT.180.)DELTA=DELTA-SIGN(360.,DELTA)                1472
  31.       IF(ABS(DELTA).GT.DCHG)DELTA=SIGN(DCHG,DELTA)                      1473
  32.       PDEG=PDEG+DELTA                                                   1474
  33.       IF(PDEG.GE.360.)PDEG=PDEG-360.                                    1475
  34.       IF(PDEG.LT.0.)PDEG=PDEG+360.                                      1476
  35.       IF(PDEG.NE.DDEG)GO TO 2010                                        1477
  36.       WRITE(6,2009)PDEG                                                 1478
  37. 2009  FORMAT(' A DESIRED BEARING OF ',F4.0,' HAS BEEN ATTAINED')        1479
  38. 2010  DELV=0.                                                           1480
  39.       IF(PSP.EQ.DSP)GO TO 2020                                          1481
  40.       DELV=SIGN(DVEL,DSP-PSP)                                           1482
  41.       IF(ABS(DSP-PSP).LT.ABS(DELV))DELV=DSP-PSP                         1483
  42.       PSP=PSP+DELV                                                      1484
  43.       IF(PSP.NE.DSP)GO TO 2020                                          1485
  44.       WRITE(6,2019)PSP                                                  1486
  45. 2019  FORMAT(' A DESIRED SPEED OF ',F5.3,' HAS BEEN ATTAINED')          1487
  46. 2020  IF(PRSPD.GE.1..OR.PSP.LT.1.)GO TO 2017                            1488
  47.       WRITE(6,2018)                                                     1489
  48. 2018  FORMAT(' ENTERING HYPERSPACE')                                    1490
  49. C     ...DELETE SCHEDULED ACTIVITIES IF ENTERING HYPERSPACE             1491
  50.       ETR(1)=0.                                                         1492
  51.       EFP(1)=0.                                                         1493
  52.       EFT(1,1)=0.                                                       1494
  53.       IHERE=0                                                           1495
  54.       ITORP=ITORP+ITFIRE                                                1496
  55.       ITFIRE=0                                                          1497
  56. C     ...CALCULATE ENERGY USAGE. PROP TO CHG IN VEL SQRD.               1498
  57. 2017  ENERGY=ENERGY-((((PSP-DELV)/2.)**2)*(2.-2.*COSD(ABS(DELTA)))+DELV*1499
  58.      1DELV)*ACCE                                                        1500
  59.       IF(ENERGY.LE.0.)CALL RATING(2)                                    1501
  60. C     ...CALCULATE POSITION CHANGE                                      1502
  61.       DX=COSD(PDEG-DELTA/2.)*(PSP-DELV/2.)                              1503
  62.       DY=SIND(PDEG-DELTA/2.)*(PSP-DELV/2.)                              1504
  63. C     ...E UNDER ALIEN CONTROL. RANDOM COURSE AND SPEED                 1505
  64. C     ...CHANGES AT WARP SPEEDS.                                        1506
  65.       IF(NDRA.NE.1)GO TO 20231                                          1507
  66. 20237 IF(RAN(IZZ).GE..3)GO TO 20232                                     1508
  67.       DDEG=RAN(IZZ)*360.                                                1509
  68.       DSP=1.+RAN(IZZ)                                                   1510
  69. 20232 IF(RAN(IZZ).GE.DRL)GO TO 20231                                    1511
  70.       SDAYS=RAN(IZZ)*DRD+.5                                             1512
  71.       IDMG(1)=IDMG(1)+SDAYS*100.                                        1513
  72.       WRITE(6,2998)NAMD(1),PSP                                          1514
  73. 2998  FORMAT(' CHIEF SURGEON DESTROYS ENERGY FORMS WITH ANTIMATTER VIRUS1515
  74.      1'/      ' BUT ',A10,' DAMAGED. DRIFTING...PRESENT SPEED: ',F5.3)  1516
  75.       DSP=PSP                                                           1517
  76.       NDRA=0                                                            1518
  77.       GO TO 2021                                                        1519
  78. 20231 IF(NBASES.NE.99)GO TO 2021                                        1520
  79.       IF(PSP.NE.1.1)GO TO 2021                                          1521
  80.       NBASES=0                                                          1522
  81. C     ...CHECK IF DAMAGED IN EMERG. EVSV. MANEUVERS.                    1523
  82.       IF(RAN(IZZ).GT.XKTIME)GO TO 2021                                  1524
  83.       SDAYS=RAN(IZZ)*XKTIME*5.                                          1525
  84.       IDMG(1)=IDMG(1)+SDAYS*100.                                        1526
  85.       WRITE(6,2999)NAMD(1)                                              1527
  86. 2999  FORMAT(1X,A10,' DAMAGED DURING EMERGENCY EVASIVE MANEUVERS.')     1528
  87. C     ...MOVE E.                                                        1529
  88. 2021  XQE=XQE+DX                                                        1530
  89.       YQE=YQE+DY                                                        1531
  90.       IF(IDOCK.NE.2)GO TO 2022                                          1532
  91.       IS=1                                                              1533
  92.       IF(RANGE(XQE,BASE(1),YQE,BASE(2)).GT.RADEB)IDOCK=0                1534
  93. C     ...CHECK IF LEAVING QUADRANT OR GALAXY                            1535
  94. 2022  IF(XQE.LT.10.5)GO TO 2030                                         1536
  95.       L=ICE                                                             1537
  96.       ICE=ICE+1                                                         1538
  97.       IF(ICE.GT.NQUAD)GO TO 8001                                        1539
  98.       CALL BPAGE                                                        1540
  99.       WRITE(6,2029)L,JCE,ICE,JCE                                        1541
  100. 2029  FORMAT(' LEAVING QUADRANT  ',I2,',',I2/' ENTERING QUADRANT ',     1542
  101.      1      I2,',',I2)                                                  1543
  102. C     ...CORRECT POSITION IN NEW QUADRANT. SET SCAN POINTER TO GENERATE 1544
  103. C     RS.                                                               1545
  104.       XQE=XQE-10.                                                       1546
  105.       ISCAN=1                                                           1547
  106.       IHERE=0                                                           1548
  107.       GO TO 2040                                                        1549
  108. 2030  IF(XQE.GE..5)GO TO 2040                                           1550
  109.       L=ICE                                                             1551
  110.       ICE=ICE-1                                                         1552
  111.       IF(ICE.EQ.0)GO TO 8001                                            1553
  112.       CALL BPAGE                                                        1554
  113.       WRITE(6,2029)L,JCE,ICE,JCE                                        1555
  114.       XQE=XQE+10.                                                       1556
  115.       ISCAN=1                                                           1557
  116.       IHERE=0                                                           1558
  117. 2040  IF(YQE.LT.10.5)GO TO 2050                                         1559
  118.       L=JCE                                                             1560
  119.       JCE=JCE+1                                                         1561
  120.       IF(JCE.GT.NQUAD)GO TO 8001                                        1562
  121.       CALL BPAGE                                                        1563
  122.       WRITE(6,2029)ICE,L,ICE,JCE                                        1564
  123.       YQE=YQE-10.                                                       1565
  124.       ISCAN=1                                                           1566
  125.       IHERE=0                                                           1567
  126.       GO TO 2100                                                        1568
  127. 2050  IF(YQE.GE..5)GO TO 2100                                           1569
  128.       L=JCE                                                             1570
  129.       JCE=JCE-1                                                         1571
  130.       IF(JCE.EQ.0)GO TO 8001                                            1572
  131.       CALL BPAGE                                                        1573
  132.       WRITE(6,2029)ICE,L,ICE,JCE                                        1574
  133.       YQE=YQE+10.                                                       1575
  134.       ISCAN=1                                                           1576
  135.       IHERE=0                                                           1577
  136.       GO TO 2100                                                        1578
  137. C     ...MOVEMENT WITHOUT ACCELERATION.                                 1579
  138. 2090  DX=COSD(PDEG)*PSP                                                 1580
  139.       DY=SIND(PDEG)*PSP                                                 1581
  140.       IF(NDRA.EQ.1)GO TO 20237                                          1582
  141.       GO TO 2021                                                        1583
  142. C     ...END OF E MOVEMENT. IF WARP 1 OR HIGHER, NO ACT. EXC. E DMG RPR.1584
  143. C     ..BE SURE TO SET SCAN POINTER IF REMATERIALIZING IN SAME QUAD.    1585
  144. 2100  IF(PSP.GE.1..OR.PRSPD.LT.1.)GO TO 2105                            1586
  145.       IF(ISCAN.EQ.1)GO TO 2110                                          1587
  146.       IHERE=1                                                           1588
  147.       GO TO 2110                                                        1589
  148. 2105  IF(PSP.GE.1.)GO TO 2800                                           1590
  149. C     ...GENERATE SCAN IF NECESSARY.                                    1591
  150.       IF(ISCAN.EQ.0)GO TO 2150                                          1592
  151. 2110  ISCAN=0                                                           1593
  152.       CALL SCAN                                                         1594
  153.       CALL QTIME(JTIME)                                                 1595
  154.       ISTART=JTIME                                                      1596
  155. 2800  IS=1                                                              1597
  156. 2150  RETURN                                                            1598
  157. 8001  WRITE(6,8002)                                                     1599
  158. 8002  FORMAT(' GALACTIC LIMITS EXCEEDED! SPACE-TIME WARP!!')            1600
  159.       Y=DEFL                                                            1601
  160.       X=PSP*ZMIN                                                        1602
  161.       CALL DAMAGE(0,X)                                                  1603
  162.       DEFL=Y                                                            1604
  163. C     ...YOU MAY GAIN OR LOSE TIME.                                     1605
  164.       Y=RAN(IZZ)*3.                                                     1606
  165.       IF(RAN(IZZ).LE.XKTIME)Y=-Y                                        1607
  166.       XTIME=XTIME-Y                                                     1608
  167.       IF(XTIME.LE.0.)CALL RATING(3)                                     1609
  168.       SDATE=SDATE+Y                                                     1610
  169.       IF(IS.GE.0)GO TO 8003                                             1611
  170.       KCE=IBL(ICE,JCE)/100                                              1612
  171.       LCE=IBL(ICE,JCE)-(KCE*100)                                        1613
  172.       GO TO 8035                                                        1614
  173. 8003  KCE=RAN(IZZ)*NQUAD+1.                                             1615
  174.       LCE=RAN(IZZ)*NQUAD+1.                                             1616
  175.       IF(ICE.EQ.KCE.AND.LCE.EQ.JCE)GO TO 8003                           1617
  176. 8035  ICE=KCE                                                           1618
  177.       JCE=LCE                                                           1619
  178.       WRITE(6,8004)ICE,JCE                                              1620
  179. 8004  FORMAT(' NOW IN QUADRANT ',I2,',',I2)                             1621
  180.       IHERE=0                                                           1622
  181.       EFT(1,1)=0.                                                       1623
  182.       ETR(1)=0.                                                         1624
  183.       EFP(1)=0.                                                         1625
  184.       PNRGY=0.                                                          1626
  185.       ITORP=ITORP+ITFIRE                                                1627
  186.       ITFIRE=0                                                          1628
  187.       IX=AMIN1(RAN(IZZ)*10.+1.,10.)                                     1629
  188.       IY=AMIN1(RAN(IZZ)*10.+1.,10.)                                     1630
  189.       XQE=IX                                                            1631
  190.       YQE=IY                                                            1632
  191.       CALL SCAN                                                         1633
  192.       IF(NDRA.EQ.1)DSP=1.+RAN(IZZ)                                      1634
  193.       IS=2                                                              1635
  194.       GO TO 2150                                                        1636
  195.       END                                                               1637
  196.