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 / STAR3.PRO < prev    next >
Text File  |  1989-09-27  |  7KB  |  251 lines

  1. procedure hirecrew;
  2. begin
  3. index:=random(complement-crew)+1;
  4. if index>5 then index:=5;
  5. realvar:=random*random*credits;
  6. if realvar<0 then realvar:=0;
  7. realvar:=realvar+1E5;
  8. writeln(chr(7),'You have found ',index,' crewmen in port.');
  9. write('They will sign on for a bonus of ');
  10. format(realvar);
  11. writeln(' credits.');
  12. repeat
  13.    writeln('Will you take them on?');
  14.    readln(yorn);
  15.    if upcase(yorn)='Y' then
  16.       begin
  17.       credits:=credits-realvar;
  18.       crew:=crew+index;
  19.       writeln('Crew=',crew);
  20.       end;{ifthen}
  21.    if upcase(yorn)='N' then morale:=morale-3;
  22.    until (upcase(yorn)='Y') or (upcase(yorn)='N');
  23. end;
  24.  
  25. procedure arrive;
  26. begin
  27. if cspeed=0 then
  28.    begin
  29.    writeln('Your drive is worthless');
  30.    if prize=true then
  31.       begin
  32.       writeln('and you must use the captive bandit ship to tow you in');
  33.       cspeed:=10;
  34.       end
  35.    else
  36.       begin
  37.       realvar:=random*random;
  38.       t:=t-realvar;
  39.       write('You are rescued after only ');
  40.       format(realvar);
  41.       writeln(' years.');
  42.       end;{else}
  43.    end;{if cspeed=0}
  44. writeln('You have arrived at star number ',star);
  45. writeln('Expenses were:');
  46. writeln('  Docking Reservation 5000 credits');
  47. triplength:=distance[star];
  48. if cspeed>0 then dt:=(0.02+triplength*0.025)/(cspeed/10)
  49.    else dt:=realvar; {if no drive then time is rescue time}
  50. leave:=false;
  51. t:=t-dt;
  52. realvar:=salary*dt;
  53. write('  Salaries');
  54. format(realvar);
  55. writeln;
  56. credits:=credits-(realvar+5000);
  57. realvar:=triplength*2E3;
  58. credits:=credits-realvar;
  59. write('  Fuel and supplies, taxes and Old Spacers'' Fund');
  60. format(realvar);
  61. writeln;
  62. if newship=true then getship;
  63. thistar:=star;
  64. map;
  65. local1:=false;
  66. local6:=false;
  67. local7:=false;
  68. if random>0.7 then localevent;
  69. forsale;
  70. if been[star]=false then firstvisit;
  71. been[star]:=true;
  72. evaluate;
  73. if local1=true then
  74. begin
  75.    writeln(chr(7),'DISREGARD THE PRICES ABOVE');
  76.    writeln('Shortages are rampant--prices are up everywhere');
  77.    realvar:=1.1+(random(10))/10;
  78.    for index:=1 to holdnum do with holdnow[index] do
  79.       begin
  80.       if category>0 then
  81.          begin
  82.          percent:=percent*realvar;
  83.          aprice:=aprice*realvar;
  84.          end{if}
  85.       end;{with,for}
  86.    for index:=1 to forsalenum do with availnow[index] do
  87.       begin
  88.       percent:=percent*realvar;
  89.       aprice:=aprice*realvar;
  90.       end;{with,for}
  91.    end;{ifthen on local1}
  92. if local7=true then
  93.    begin
  94.    index:=random(holdnum)+1;  {find a random full hold}
  95.    jndex:=index;
  96.    repeat
  97.       index:=index-1;
  98.       if index=0 then index:=20;
  99.       until((index=jndex) or (holdnow[index].category<>0));
  100.    with holdnow[index] do    {add to price}
  101.       begin
  102.       realvar:=1.1+random(12)/5;
  103.       realround(aprice);
  104.       aprice:=aprice*realvar;
  105.       percent:=percent*realvar;
  106.       if index<>jndex then
  107.          begin
  108.          writeln('Contacts at the local Crawlspace Festival offer you more');
  109.          writeln('than portside prices for the cargo in hold #',index);
  110.          end;{ifthen}
  111.       end;{with}
  112.    end;{ifthen}
  113. if random>0.7 then boathere:=true else boathere:=false;
  114. if random>0.8 then probehere:=true else probehere:=false;
  115. if ((speed<tspeed) or (hull<thull) or (laser<tlaser)) and (newship=false) then repair;
  116. morale:=morale+1;
  117. if moralebounce>0 then {temporary morale effects wear off}
  118.    begin
  119.    moralebounce:=moralebounce-1;
  120.    morale:=morale-1;
  121.    end;{ifthen}
  122. if moralebounce<0 then
  123.    begin
  124.    moralebounce:=moralebounce+1;
  125.    morale:=morale+1;
  126.    end;{ifthen}
  127. showcash;
  128. if (morale<120) and (random*random*random*crew*sqr(morale)/complement<100) then jumpship;
  129. if (complement-crew>random(6)) and (random>0.6) then hirecrew;
  130. if crew=0 then
  131.    begin
  132.    writeln('You have no crewmen, and you are out of the trading business.');
  133.    credits:=credits+(gamelength-t)*5E4;
  134.    writeln('You get half the unused lease money back');
  135.    t:=0;
  136.    end;{ifthen}
  137. if (morale<100) and (crew<complement) then
  138.    begin
  139.    morale:=morale-2;
  140.    moralebounce:=moralebounce-1;
  141.    end;{ifhten}
  142. end;{procedure arrive}
  143.  
  144. procedure travel;
  145. begin
  146. if boats=0 then
  147.    begin
  148.    morale:=morale-3;
  149.    moralebounce:=moralebounce-1;
  150.    writeln('Lifting with no lifeboats');
  151.    end;{ifthen on boats}
  152. navy:=false;
  153. objectcount:=0;
  154. badguys:=false;
  155. prize:=false;
  156. if crew>6 then cspeed:=speed else
  157.    begin
  158.    lasercrew:=0;
  159.    hullcrew:=0;
  160.    drivecrew:=crew;
  161.    shortposts;
  162.    writeln('speed=',cspeed,' with all ',crew,' crew on navigation.');
  163.    end;
  164. if cspeed<1 then repair;
  165. while triplength*chance/10*random*random*random>1 do
  166.       objectcount:=objectcount+1;
  167. if triplength*danger/10*random*random*random/(cspeed/10)>1 then badguys:=true;
  168. if (objectcount>0) or (badguys=true) or (crew<7) then chain(chnfile);
  169. arrive;       {in case of chaining, arrive is provided by the main}
  170. end;{travel}
  171.  
  172. procedure test;
  173. {debugging test routine}
  174. begin
  175. (*credits:=credits*30;*)
  176. end;
  177.  
  178. procedure menu;
  179. begin
  180. writeln('       COMMANDS:');
  181. writeln;
  182. writeln('1:  list of cargo in hold');
  183. writeln('2:  list of cargo for sale');
  184. writeln('3:  buy');
  185. writeln('4:  sell');
  186. writeln('5:  star travel data');
  187. writeln('6:  drop to another star');
  188. writeln('7:  buy or sell probes or small craft');
  189. writeln('8:  status of the ',name);
  190. writeln('9:  quit the trading business');
  191. writeln('10: give the crew extra groundleave');
  192. writeln('98: PROGRAMMER''S TEMPORARY TEST ROUTINE');
  193. writeln('type anything else to see this menu');
  194. writeln;
  195. end;
  196.  
  197. procedure command;
  198. begin
  199. writeln('Your command?            (0 for the command list)');
  200. inputs;
  201. case inp of
  202.    1: showhold;
  203.    2: showforsale;
  204.    3: buy;
  205.    4: sell;
  206.    5: showstars;
  207.    6: begin
  208.       if credits<0 then
  209.          begin
  210.          writeln('Port authorities will not let you lift without clearing your debts.');
  211.          showhold;
  212.          exit;
  213.          end;{ifthen on credits}
  214.       writeln('what star number');
  215.       inputs;
  216.       star:=inp;
  217.       if (star>10) or (star<1) then
  218.          begin
  219.          writeln(chr(7),'No such star number');
  220.          exit;
  221.          end;
  222.       if star=thistar then
  223.          begin
  224.          writeln('You are already at ',star);
  225.          exit;
  226.          end;{ifthen}
  227.       travel;
  228.       inp:=99;
  229.       end;{case 6}
  230.    7: lifeboats;
  231.    8: status;
  232.    9: begin
  233.       writeln('Do you really want to quit?');
  234.       readln(yorn);
  235.       if upcase(yorn)='Y' then quitter:=true;
  236.       end;
  237.    10:if leave=true then writeln('A second leave won''t help.')
  238.       else begin
  239.          writeln('The crew feels better after .3 years in port.');
  240.          t:=t-0.3;
  241.          morale:=morale+1+random(4);
  242.          leave:=true;
  243.          end;{else and case 10}
  244.    98:test;
  245.    else menu;
  246.    end;{case}
  247. if inp<>99 then showcash;
  248. if ((inp=3) or (inp=4) or (inp=7)) and
  249.    (random*random*random<5*credits/(salary*morale)) then strike;
  250. end;{command}
  251.