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

  1.  
  2. procedure getship;
  3. begin
  4. if credits<t*1E5 then
  5.    begin
  6.    while credits<t*1E5 do t:=t-1;
  7.    writeln('You only had enough to lease a ship for ',t:8:0,' years');
  8.    credits:=credits-t*1E5;
  9.    end;{if}
  10. tspeed:=speedstart;
  11. tlaser:=laserstart;
  12. thull:=hullstart;
  13. speed:=tspeed;
  14. laser:=tlaser;
  15. hull:=thull;
  16. boats:=boatstart;
  17. probes:=probestart;
  18. space:=200;
  19. for index:=1 to holdnum do holdnow[index].category:=0;
  20. writeln;
  21. writeln('You have leased another ship.');
  22. writeln('What will you call her?');
  23. readln(name);
  24. status;
  25. showcash;
  26. shortposts;
  27. newship:=false;
  28. end;{getship}
  29.  
  30. procedure fix;
  31. begin
  32. t:=t-0.02*index;
  33. credits:=credits-realvar;
  34. format(realvar);
  35. writeln(' paid to repair yards;');
  36. if speed<tspeed then
  37.    begin
  38.    speed:=speed+1;
  39.    cspeed:=cspeed+1;
  40.    end;
  41. if speed<tspeed then
  42.    begin
  43.    speed:=speed+1;
  44.    cspeed:=cspeed+1;
  45.    end;
  46. if hull<thull then
  47.    begin
  48.    hull:=hull+1;
  49.    chull:=chull+1;
  50.    end;
  51. if laser<tlaser then
  52.    begin
  53.    laser:=laser+1;
  54.    claser:=claser+1;
  55.    end;
  56. if (speed=tspeed) and (hull=thull) and (laser=tlaser) then
  57.    writeln(name,' in full repair.')
  58. else writeln('only partial repairs were possible in this port.');
  59. status;
  60. if crew<complement-3 then writeln('THIS DOES NOT COUNT CREW SHORTAGE');
  61. end;{fix}
  62.  
  63. procedure repair;
  64. begin
  65. index:=0;
  66. if speed<tspeed-1 then index:=index+2 else if speed<tspeed then index:=index+1;
  67. if hull<thull then index:=index+1;
  68. if laser<tlaser then index:=index+1;
  69. realvar:=(random*6E4+2E4)*index;
  70. if star>7 then begin
  71.    repeat
  72.    showcash;
  73.    write(chr(7),'=> Repairs will cost ');
  74.    format(realvar);
  75.    writeln(' credits. Will you make repairs?');
  76.    readln(yorn);
  77.    if upcase(yorn)='Y' then fix;
  78.    if upcase(yorn)='N' then
  79.       begin
  80.       morale:=morale-2;
  81.       moralebounce:=moralebounce-1;
  82.       end;{ifthen}
  83.    until (upcase(yorn)='Y') or (upcase(yorn)='N');
  84.    end{ifthen on star>7}
  85. else              {ie if star<8}
  86.    begin
  87.    writeln('repairs are mandatory in this jurisdiction');
  88.    fix;
  89.    end;{else}
  90. lasercrew:=complement+1;{this forces shortcrew when underpersoned}
  91. end;{repair}
  92.  
  93.  
  94. procedure map;{travel table}
  95. begin
  96. distance[thistar]:=0;
  97. case thistar of
  98.    1:begin
  99. angle[2]:=324;angle[3]:=252;angle[4]:=321;angle[5]:=291;
  100. angle[6]:=321;angle[7]:=248;angle[8]:=269;angle[9]:=265;angle[10]:=282;
  101. distance[2]:=6;distance[3]:=18;distance[4]:=12;distance[5]:=8;distance[6]:=15;
  102. distance[7]:=15;distance[8]:=15;distance[9]:=17;distance[10]:=18;end;
  103.    2:begin
  104. angle[1]:=144;angle[3]:=231;angle[4]:=316;angle[5]:=236;
  105. angle[6]:=319;angle[7]:=223;angle[8]:=244;angle[9]:=242;angle[10]:=264;
  106. distance[1]:=6;distance[3]:=17;distance[4]:=5;distance[5]:=4;distance[6]:=9;
  107. distance[7]:=15;distance[8]:=12;distance[9]:=15;distance[10]:=14;end;
  108.    3:begin
  109. angle[1]:=72;angle[2]:=51;angle[4]:=34;angle[5]:=50;
  110. angle[6]:=25;angle[7]:=91;angle[8]:=25;angle[9]:=9;angle[10]:=358;
  111. distance[1]:=18;distance[2]:=17;distance[4]:=18;distance[5]:=13;distance[6]:=19;
  112. distance[7]:=3;distance[8]:=6;distance[9]:=4;distance[10]:=9;end;
  113.    4:begin
  114. angle[1]:=141;angle[2]:=136;angle[3]:=214;angle[5]:=180;
  115. angle[6]:=323;angle[7]:=205;angle[8]:=219;angle[9]:=221;angle[10]:=243;
  116. distance[1]:=12;distance[2]:=5;distance[3]:=18;distance[5]:=6;distance[6]:=3;
  117. distance[7]:=16;distance[8]:=12;distance[9]:=14;distance[10]:=12;end;
  118.    5:begin
  119. angle[1]:=111;angle[2]:=56;angle[3]:=230;angle[4]:=360;
  120. angle[6]:=347;angle[7]:=218;angle[8]:=248;angle[9]:=245;angle[10]:=275;
  121. distance[1]:=8;distance[2]:=4;distance[3]:=13;distance[4]:=6;distance[6]:=9;
  122. distance[7]:=11;distance[8]:=8;distance[9]:=10;distance[10]:=10;end;
  123.    6:begin
  124. angle[1]:=141;angle[2]:=139;angle[3]:=205;angle[4]:=143;angle[5]:=167;
  125. angle[7]:=195;angle[8]:=204;angle[9]:=209;angle[10]:=226;
  126. distance[1]:=15;distance[2]:=9;distance[3]:=19;distance[4]:=3;distance[5]:=9;
  127. distance[7]:=18;distance[8]:=13;distance[9]:=15;distance[10]:=11;end;
  128.    7:begin
  129. angle[1]:=68;angle[2]:=43;angle[3]:=271;angle[4]:=25;angle[5]:=38;
  130. angle[6]:=15;angle[8]:=352;angle[9]:=327;angle[10]:=339;
  131. distance[1]:=15;distance[2]:=15;distance[3]:=3;distance[4]:=16;distance[5]:=11;
  132. distance[6]:=18;distance[8]:=6;distance[9]:=5;distance[10]:=10;end;
  133.    8:begin
  134. angle[1]:=89;angle[2]:=64;angle[3]:=205;angle[4]:=39;angle[5]:=68;
  135. angle[6]:=24;angle[7]:=172;angle[9]:=233;angle[10]:=324;
  136. distance[1]:=15;distance[2]:=12;distance[3]:=6;distance[4]:=12;distance[5]:=8;
  137. distance[6]:=13;distance[7]:=6;distance[9]:=2;distance[10]:=5;end;
  138.    9:begin
  139. angle[1]:=85;angle[2]:=62;angle[3]:=189;angle[4]:=41;angle[5]:=65;
  140. angle[6]:=29;angle[7]:=147;angle[8]:=53;angle[10]:=350;
  141. distance[1]:=17;distance[2]:=15;distance[3]:=4;distance[4]:=14;distance[5]:=10;
  142. distance[6]:=15;distance[7]:=5;distance[8]:=2;distance[10]:=5;end;
  143.    10:begin
  144. angle[1]:=102;angle[2]:=84;angle[3]:=176;angle[4]:=63;angle[5]:=95;
  145. angle[6]:=46;angle[7]:=159;angle[8]:=144;angle[9]:=170;
  146. distance[1]:=18;distance[2]:=14;distance[3]:=9;distance[4]:=12;distance[5]:=10;
  147. distance[6]:=11;distance[7]:=10;distance[8]:=5;distance[9]:=5;end;
  148. end;{case}
  149. end;{procedure map}
  150.  
  151.  
  152. procedure firstvisit;
  153. begin;
  154. writeln('Since this is your first visit,');
  155. index:=random(10)+1;
  156. case index of
  157.    1: writeln('the mayor of Portside City gives you a warm handshake.');
  158.    2: writeln('you and your officers get a free cup of pseudotea');
  159.    3: begin
  160.       writeln('you and your crew are challenged to a game of no-gravity football.');
  161.       morale:=morale+5;
  162.       moralebounce:=moralebounce+2;
  163.       end;
  164.    4: writeln('you get a coupon good for a free shipwash');
  165.    5: begin
  166.       realvar:=random*(1E5)+30000;
  167.       credits:=credits+realvar;
  168.       str(realvar:5:0,filename);
  169.       writeln('you are offered ',filename,' credits to paint ads on the ',name);
  170.       end;{case 5}
  171.    6: begin
  172.       writeln('you are presented with a secret speed-enhancing device;');
  173.       jndex:=random(3)+1;
  174.       speed:=speed+jndex;
  175.       tspeed:=tspeed+jndex;
  176.       cspeed:=cspeed+jndex;
  177.       writeln('speed of the good ship ',name,' now ',cspeed);
  178.       end;{case 6}
  179.    7: begin
  180.       writeln('the greatful inhabitants rebuild the ',name);
  181.       jndex:=random(3);
  182.       hull:=hull+jndex;
  183.       thull:=thull+jndex;
  184.       chull:=chull+jndex;
  185.       space:=space+40;
  186.       writeln('Her lifting capacity is improved by 40 tons');
  187.       if jndex>0 then writeln('and hull strength now ',chull);
  188.       end;{case 7}
  189.    8: begin
  190.       writeln('your crew is given free tatoos.');
  191.       morale:=morale+5;
  192.       moralebounce:=moralebounce+5;
  193.       end;
  194.    9: begin
  195.       writeln('you are given a brand new lifeboat.');
  196.       boats:=boats+1;
  197.       end;
  198.    10: begin
  199.        writeln('The crew is so happy that they gladly take a 20% pay cut');
  200.        writeln('in exchange for ground leave.');
  201.        salary:=salary*0.8;
  202.        morale:=morale+4;
  203.        moralebounce:=moralebounce+2;
  204.        end;
  205. end;{case}
  206. end;{firstvisit}
  207.  
  208.  
  209. procedure fine;
  210. begin
  211. realvar:=random*random*random*2E5;
  212. writeln('You are ordered to pay ',realvar:5:0,' credits court expenses');
  213. credits:=credits-realvar;
  214. end;
  215.  
  216. procedure prison;
  217. begin
  218. realvar:=0.01*random;
  219. t:=t-realvar;
  220. writeln('You were held for ',realvar:0:3,' years');
  221. end;
  222.  
  223. procedure localevent;
  224. begin
  225. writeln('-\|/- ');
  226. case star of
  227.    1: local1:=true;
  228.    2: if been[star]=true then
  229.          begin
  230.          writeln('the escheatment laws have changed since your last visit.');
  231.          realvar:=credits*random/12;
  232.          if realvar>0.75E6 then realvar:=0.75E6+((credits-9E6)*random/36);
  233.          if realvar>1E6 then realvar:=0.75E6+((credits-12E6)*random/60);
  234.          realvar:=realvar+0.6E5;
  235.          credits:=credits-realvar;
  236.          write('you lose ');
  237.          format(realvar);
  238.          writeln(' credits.');
  239.          end; {ifthen}
  240.    3: begin
  241.       writeln('You must increase the crew''s salaries to keep them from');
  242.       writeln('jumping ship to take up farming.');
  243.       salary:=salary+random*random*salary;
  244.       write('salary now ');
  245.       format(salary);
  246.       writeln(' credits per year.');
  247.       end;{case 3}
  248.    4: begin
  249.       writeln('You and your crew have been quarentined to prevent the spread of');
  250.       case random(5) of
  251.          0: writeln('tooth decay');
  252.          1: writeln('peculiar ideas');
  253.          2: writeln('outlandish customs');
  254.          3: writeln('chewing gum addiction');
  255.          4: writeln('space rot');
  256.          end;{case}
  257.       dt:=random*random*random*0.1+0.002;
  258.       realvar:=random*random*random*2E6;
  259.       writeln('You will be held for ',dt:0:3,' years');
  260.       write('unless you pay a ');
  261.       format(realvar);
  262.       writeln(' credit sanitation fee');
  263.       writeln('Will you pay?');
  264.       readln(yorn);
  265.       if upcase(yorn)='N' then
  266.          begin
  267.          t:=t-dt;
  268.          morale:=morale-5;
  269.          moralebounce:=moralebounce-2;
  270.          end
  271.       else credits:=credits-realvar;
  272.       end;{case 4}
  273.    5: begin
  274.       write('Your pocket has been picked.');
  275.       if credits<0 then writeln(' Luckily, there was nothing to steal but your tatoos.')
  276.       else
  277.          begin
  278.          realvar:=random*credits/20;
  279.          if realvar>0.5E6 then realvar:=0.5E6-random*(1E5);
  280.          credits:=credits-realvar;
  281.          format(realvar);
  282.          writeln(' credits are missing');
  283.          end;{else}
  284.       end;{case 5}
  285.    6: begin
  286.       writeln('You have been elected to the local Knights of Commerce.');
  287.       writeln('You are offered five more cargoes to buy.');
  288.       local6:=true;
  289.       writeln('<Carraige Return> to continue');
  290.       readln;
  291.       end;{case 6}
  292.    7: local7:=true;
  293.    8: begin
  294.       writeln(chr(7),'A synchronoplastic infundiblium has caused a navigation error.');
  295.       index:=random(10)+1;
  296.       star:=index;
  297.       writeln('You are somewhere near star #',star);
  298.       badguys:=false;
  299.       objectcount:=random(2);
  300.       chain(chnfile);
  301.       end;
  302.    9: begin write('You and your crew are arrested for ');
  303.       case random(9) of
  304.          0: writeln('suspicion of wearing colored underwear');
  305.          1: writeln('applying for a license without a license');
  306.          2: writeln('suspicion of suspicion');
  307.          3: writeln('drug evasion');
  308.          4: writeln('being mugged');
  309.          5: writeln('reversion to type');
  310.          6: writeln('drinking water');
  311.          7: writeln('taking off your hat');
  312.          8: writeln('setting the national anthem to jazz');
  313.          end;{inner case}
  314.       case random(7) of
  315.          0: fine;
  316.          1: confiscation;
  317.          2: prison;
  318.          3: writeln('But the jail janitor lets you go.');
  319.          4: begin fine; prison; end;
  320.          5: begin fine; confiscation; end;
  321.          6: begin fine; prison; confiscation; end;
  322.          end;{inner case}
  323.       end;{case 9}
  324.  
  325.    10: begin
  326.        writeln('You have been picked up on trumped-up charges of monogamy');
  327.        realvar:=random(10)*0.001;
  328.        t:=t-realvar;
  329.        writeln('You are released after waiting ',realvar:0:3,' years for permission');
  330.        writeln('to be arrested.');
  331.        end;
  332. end;{case}
  333. end;{localevent}
  334.  
  335. procedure trader2;
  336. begin
  337. writeln('It''s a trading ship like yours...they want to trade.');
  338. realstar:=star;
  339. star:=random(10)+1;{trader has same prices as this star}
  340. forsale;
  341. evaluate;
  342. repeat
  343.    showcash;
  344.    writeln('       Your command:');
  345.    writeln;
  346.    writeln('1. Show cargo in hold');
  347.    writeln('2. Show cargo for sale');
  348.    writeln('3. Buy cargo');
  349.    writeln('4. Sell cargo');
  350.    writeln('6. Break off contact and continue the journey');
  351.    writeln('8. Status of the ',name);
  352.    inputs;
  353.    mndex:=inp;
  354.    case mndex of
  355.       1: begin
  356.          showhold;
  357.          writeln('<carraige return> to continue');
  358.          readln(yorn);
  359.          end;
  360.       2: showforsale;
  361.       3: buy;
  362.       4: sell;
  363.       6: writeln('Goodbye and good luck!');
  364.       8: status;
  365.       else writeln('Option ',inp,' not available');
  366.       end;{case}
  367.    until mndex=6;
  368. star:=realstar;
  369. traderflag:=false;
  370. end;{trader2}
  371.