home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / GAMES / STARSHIP.ARC / E2.PRO < prev    next >
Text File  |  1989-09-27  |  11KB  |  393 lines

  1. procedure handfight(localbyte:byte);
  2. begin
  3. roll:=false;
  4. if (crew+10*localbyte)<2 then mndex:=2 else mndex:=crew+10*localbyte;
  5. case random(mndex) of
  6.    0: begin
  7.       writeln('You and your crew are killed!');
  8.       halt;
  9.       end;
  10.    1: begin
  11.       writeln('you are overcome and captured');
  12.       surrender;
  13.       end;
  14.    2..8:
  15.       begin
  16.       crewloss(random(4)+1);
  17.       writeln('several enemy are killed and the rest flee');
  18.       morale:=morale+5;
  19.       moralebounce:=moralebounce+5;
  20.       end;
  21.    9..15:
  22.       begin
  23.       crewloss(random(4)+1);
  24.       writeln('several enemy are killed and the rest surrender');
  25.       roll:=true;
  26.       morale:=morale+5;
  27.       moralebounce:=moralebounce+4;
  28.       end;
  29.    else
  30.       begin
  31.       writeln('the enemy are all killed.');
  32.       roll:=true;
  33.       morale:=morale+6;
  34.       moralebounce:=moralebounce+3;
  35.       end;
  36. end;{case}
  37. end;{handfight}
  38.  
  39. procedure strikefirst;
  40. begin
  41. if random>0.7 then writeln('Your unexpected attack scatters the enemy')
  42. else handfight(2);
  43. morale:=morale+2;
  44. moralebounce:=moralebounce+1;
  45. end;
  46.  
  47. procedure dlaser;
  48. begin
  49. write(' hit on lasers, ');
  50. if laser<1 then writeln('but they were worthless anyway')
  51. else begin
  52.    laser:=laser-1;
  53.    if claser<1 then claser:=1;
  54.    claser:=claser-1;
  55.    writeln('laser power now ',claser);
  56.    end;{else}
  57. end;
  58.  
  59. procedure dspeed;
  60. begin
  61. write(' drive section hit, ');
  62. if speed<1 then writeln('but you had no drive anyway, speed still 0')
  63. else begin
  64.    if hull=0 then mndex:=random(4)+1 else mndex:=1;
  65.    if speed<mndex then speed:=mndex;
  66.    speed:=speed-mndex;
  67.    if cspeed<mndex then cspeed:=mndex;
  68.    cspeed:=cspeed-mndex;
  69.    writeln('speed of the ',name,' now ',cspeed);
  70.    end;{else}
  71. end;
  72.  
  73. procedure dhull;
  74. begin
  75. write(' hull integrity damaged, ');
  76. hull:=hull-1;
  77. if chull<1 then chull:=1;
  78. chull:=chull-1;
  79. writeln('hullpoints of the ',name,' now ',chull);
  80. end;
  81.  
  82. procedure dboats;
  83. begin
  84. write(' lifeboat bays hit, ');
  85. if boats<1 then writeln('but you had no boats anyway.')
  86. else begin
  87.    boats:=boats-1;
  88.    writeln(boats,' boats left.');
  89.    end;{else}
  90. end;
  91.  
  92. procedure dprobes;
  93. begin
  94. write(' probe launchers hit, ');
  95. if probes<1 then writeln('but you had no probes anyway.')
  96. else begin
  97.    probes:=probes-1;
  98.    writeln(probes,' probes left.');
  99.    end;{else}
  100. end;
  101.  
  102. procedure minordamage;
  103. begin
  104. writeln(name,' damaged;');
  105. kndex:=random(20);
  106. case kndex of
  107.    0..3:   dspeed;
  108.    4..7:   dlaser;
  109.    8:      if random>0.5 then dprobes else dboats;
  110.    9:      crewloss(random(3)+1);
  111.    10..19: if hull<1 then
  112.       begin
  113.       case kndex-9 of
  114.          0..3: if speed>0 then dspeed else dlaser;
  115.          4..7: if laser>0 then dlaser else dspeed;
  116.          8:    if boats>0 then dboats else dspeed;
  117.          9:    if probes>0 then dprobes else dspeed;
  118.          10:   crewloss(random(3)+1);
  119.          end;{case on kndex-7}
  120.       end{ifthen on hull}
  121.       else dhull;
  122.       end;{case 10..19}
  123. end;{minordamage}
  124.  
  125.  
  126. procedure majordamage;
  127. begin
  128. writeln('the ',name,' is shaken from stem to stern.');
  129. for mndex:=1 to random(5)+1 do minordamage;
  130. end;
  131.  
  132. procedure damage;
  133. begin
  134. if random>0.93 then majordamage else minordamage;
  135. if (hull=0) and (speed=0) and (laser=0) then
  136.    begin
  137.    writeln('The good ship ',name,' is a cloud of various particles,');
  138.    battle:=false;
  139.    if boats>0 then
  140.       begin
  141.       writeln('but you have escaped her destruction.');
  142.       abandon;
  143.       end{if on boats}
  144.    else
  145.       begin
  146.       writeln('and there are no boats left.');
  147.       writeln('Your loved ones will probably never learn your fate.');
  148.       halt;
  149.       end;{else}
  150.    end;{ifthen on 000}
  151. end;{damage}
  152.  
  153. procedure Esurrender;
  154. var pndex: byte;
  155. begin
  156. write('The enemy has surrendered. You get a reward of ');
  157. format(OrigEpower*3000.0);
  158. writeln;
  159. realvar:=Epower*random*3E4;
  160. writeln('And ',realvar:6:0,' credits for bringing in their ship.');
  161. writeln('If, of course, you get to a civilized star.');
  162. credits:=credits+(3000.0*OrigEpower)+realvar;
  163. battle:=false;
  164. prize:=true;
  165. morale:=morale+5;
  166. moralebounce:=moralebounce+2;
  167. if random>0.7 then
  168.    begin;
  169.    pndex:=random(3)+2;
  170.    writeln('There were ',pndex,' captive vacuumariners aboard, and they join you.');
  171.    crew:=crew+pndex;
  172.    morale:=morale+5*pndex;
  173.    moralebounce:=moralebounce+2*pndex;
  174.    end;{if}
  175. end;{Esurrender}
  176.  
  177. procedure negotiate;
  178. begin;
  179. index:=random(Epower)+1;
  180. if index>10 then index:=10;
  181. if index<10 then writeln('Captian, there is a message coming in. It says:');
  182. case index of
  183.    1: begin
  184.       writeln('Help! don''t hurt us!');
  185.       Esurrender;
  186.       end;{case 1}
  187.    2: begin
  188.       writeln('We were only kidding');
  189.       battle:=false;
  190.       end;{case 2}
  191.    3: begin
  192.       writeln('Let''s settle this peacably.');
  193.       battle:=false;
  194.       end;{case 3}
  195.    4: begin
  196.       writeln('You''re a trader, not a fighter. Give us one cargo (Y or N)');
  197.       readln(yorn);
  198.       if upcase(yorn)='Y' then
  199.          begin
  200.          confiscation;
  201.          battle:=false;
  202.          end;{if}
  203.       end;{case 4}
  204.    5: begin
  205.       writeln('Why struggle against us? Just hand over three cargos. (Y or N)');
  206.       readln(yorn);
  207.       if upcase(yorn)='Y' then
  208.          begin
  209.          confiscation;
  210.          confiscation;
  211.          confiscation;
  212.          battle:=false;
  213.          end;{if}
  214.       end;{case 5}
  215.    6,7: begin
  216.       writeln('We''ll have three cargos from you, or your miserable lives. Answer "Y" at once.');
  217.       if boats>0 then writeln('And I believe we''ll be taking a boat, too.');
  218.       readln(yorn);
  219.       if upcase(yorn)='Y' then
  220.          begin
  221.          confiscation;
  222.          confiscation;
  223.          confiscation;
  224.          battle:=false;
  225.          if boats>0 then boats:=boats-1;
  226.          end;{if}
  227.       end;{case 7}
  228.    8: begin
  229.       writeln('Give up, and we may let you live. Answer "Y" now, we''re tired of waiting.');
  230.       readln(yorn);
  231.       if upcase(yorn)='Y' then surrender;
  232.       end;{case 8}
  233.    9: writeln('Eat high-intensity light, scum');
  234.    10: if nomessage=false then writeln('No reply, Captain');
  235.    end;{case}
  236. action:=true;
  237. end;{negotiate}
  238.  
  239. procedure Edamage(weapon:byte);
  240. var pndex: byte;
  241. begin
  242. if weapon<1 then               {this is a redundant check}
  243.    begin                           {but it gets used}
  244.    writeln('Ship''s computer erroneously allowed you to attack with useless weapon.');
  245.    exit;
  246.    end;
  247. pndex:=random(weapon*5);
  248. Epower:=Epower-pndex;
  249. writeln(pndex,' points damage to enemy vessel');
  250. if Epower<1 then
  251.    begin
  252.    writeln('enemy destroyed');
  253.    battle:=false;
  254.    writeln('There was a reward of ',3000.0*OrigEpower:6:0);
  255.    credits:=credits+3000.0*OrigEpower;
  256.    morale:=morale+4;
  257.    moralebounce:=moralebounce+2;
  258.    end{if}
  259. else if (pndex>0) and ((Epower/OrigEpower)<0.4*random) then
  260.    begin
  261.    battle:=false;
  262.    writeln('Message coming in, Captain. It says "Ouch! We give up."');
  263.    Esurrender;
  264.    end{else,ifthen}
  265. else if (OrigEpower*random>(Epower-pndex)*random+5) then
  266.    begin
  267.    nomessage:=true;
  268.    negotiate;
  269.    end;{else}
  270. end;{edamage}
  271.  
  272.  
  273. procedure bandit;
  274. begin
  275. writeln;
  276. writeln('Ship approaching on intercept course.......SPACE BANDITS');
  277. if navy=true then begin writeln('Needleship melts bandits'); exit end;
  278. if jump=true then Edamage(claser);
  279. if (crew<complement) and (crew<>drivecrew+lasercrew+hullcrew) then shortcrew
  280.    else status;
  281. battle:=true;
  282. moraleflag:=false;
  283. OrigEpower:=random(60)+1;
  284. Epower:=OrigEpower;
  285. while battle=true do
  286.    begin
  287.    nomessage:=false;
  288.    if random*random*random*(100-morale)>10 then
  289.       begin
  290.       writeln('Your demoralized crew surrenders.');
  291.       battle:=false;
  292.       surrender;
  293.       exit;
  294.       end;{if}
  295.    writeln;writeln;
  296.    writeln('You may:');
  297.    if claser>0 then writeln('1. Attack with lasers');
  298.    if cspeed>0 then writeln('2. Try to escape');
  299.    writeln('3. Negotiate');
  300.    if (cspeed>0) and (chull>0) then writeln('4. Try to ram');
  301.    if boats>0 then writeln('5. Abandon ship');
  302.    writeln('6. Surrender');
  303.    writeln('7. Re-assign crew');
  304.    writeln('               Your orders, Captain?');
  305.    inputs;
  306.    action:=false;
  307.    case inp of
  308.       1: if claser<1 then writeln('No lasers')
  309.          else
  310.             begin
  311.             writeln('fire control computer aims and fires lasers');
  312.             edamage(claser);
  313.             action:=true;
  314.             moraleflag:=true;
  315.             end;{else}
  316.       2: if cspeed<1 then writeln('Drive useless')
  317.          else
  318.             begin
  319.             action:=true;
  320.             if sqr(sqr(cspeed))<random*20000 then writeln('the other ship follows you!')
  321.             else
  322.                begin
  323.                battle:=false;
  324.                writeln('You got away.');
  325.                writeln('The bandit takes a parting shot');
  326.                if chull+10*random>9 then writeln('They missed you')
  327.                else damage
  328.                end{inside else}
  329.          end;{main else}
  330.         3: negotiate;
  331.         4: if chull<1 then writeln('it would be like batting them with a sponge.')
  332.             else
  333.                if cspeed=0 then writeln('No drive')
  334.                else
  335.                   begin
  336.                   moraleflag:=true;
  337.                   if random(cspeed)>2 then
  338.                      begin
  339.                      writeln('Collision!');
  340.                      impact:=chull;
  341.                      damage;
  342.                      damage;
  343.                      writeln('Ship''s engineer estimates');
  344.                      writeln('6 to 10 points internal damage to enemy vessel. We can plainly see');
  345.                      Epower:=Epower-8;
  346.                      edamage(impact)
  347.                      end{ifthen}
  348.                   else writeln('The other ship avoids you.');
  349.                   action:=true
  350.                   end;{else on cspeed}
  351.        5: if boats> 0 then begin
  352.              abandon;
  353.              battle:=false;
  354.              end{ifthen}
  355.           else writeln('There are no boats to leave the ship in');
  356.        6: surrender;
  357.        7: shortcrew;
  358. end;{case}
  359. if (battle=true) and (action=true) then
  360.    begin
  361.    write('The other ship attacks with ');
  362.    jndex:=random(5);
  363.    case jndex of
  364.       1: writeln('lasers');
  365.       2: writeln('a flood of tiny rockets');
  366.       3: writeln('a flash missile');
  367.       4: writeln('an ion beam');
  368.       0: writeln('a haze of antimatter particles');
  369.       end;{case}
  370.    if chull+random(10)>9 then
  371.       begin
  372.       index:=random(3);
  373.          case index of
  374.          0: writeln('No effect on the ',name);
  375.          1: writeln('Misfire');
  376.          2: writeln('a near miss');
  377.          end;{case}
  378.       end{if}
  379.    else damage;
  380.    end;{ifthen}
  381.    status;
  382.    end;{whiledo}
  383. if moraleflag=true then
  384.    begin
  385.    morale:=morale+5;
  386.    moralebounce:=moralebounce+5;
  387.    end;{if}
  388. writeln;
  389. writeln('Crisis over');
  390. writeln('<Carriage Return> to continue');
  391. readln(yorn);
  392. end;{procedure bandit}
  393.