SOFTP2.INC 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. { Softporn Adventure, include file # 2 }
  2. function locase( c : char ) : char;
  3. (*===============================*)
  4. begin
  5. case c of
  6. 'A'..'Z': c := chr( ord(c) + $20 );
  7. '�': c := '†';
  8. 'Ž': c := '„';
  9. '™': c := '”';
  10. end;
  11. locase := c;
  12. end;
  13. procedure read_key ( var ch : char; cset : set_of_char );
  14. (*=====================================================*)
  15. var ch_up : char;
  16. begin
  17. repeat
  18. read( kbd, ch );
  19. ch_up := upcase(ch);
  20. if ch_up in cset then
  21. writeln( ch )
  22. else
  23. write(#7);
  24. until ch_up in cset;
  25. ch := ch_up;
  26. end; { Read key }
  27. procedure write_long_messg( messg_no : integer );
  28. (*=============================================*)
  29. const EOL = #$0D;
  30. NULL = #0;
  31. var i, j : integer;
  32. c : char;
  33. begin
  34. seek( messg_file, messg_no-1 );
  35. read( messg_file, messg_rec );
  36. for i:=1 to recsize-1 do
  37. begin
  38. c := messg_rec[i];
  39. if c=EOL then
  40. writeln
  41. else if c>=' ' then
  42. begin
  43. write(pred(c));
  44. if messg_no in [39,58,69] then
  45. delay(150);
  46. end;
  47. end; { for i=1 to recsize-1 do }
  48. end; { Write long messg }
  49. procedure write_long_message( messg_no : integer );
  50. (*===============================================*)
  51. begin
  52. writeln;
  53. write_long_messg( messg_no );
  54. end; { Write long message }
  55. procedure write_message( message : messg_string );
  56. (*==============================================*)
  57. begin
  58. writeln;
  59. writeln(message);
  60. end;
  61. procedure wait_for_space;
  62. (*=====================*)
  63. var c : char;
  64. begin
  65. write(' Press <SPACE> to continue ');
  66. repeat
  67. read(kbd,c);
  68. if c<>' ' then write(#7);
  69. until c=' ';
  70. end;
  71. procedure cursor_to_bottom;
  72. (*=======================*)
  73. begin
  74. gotoXY(1,bottom_line);
  75. end;
  76. procedure cursor_next_to_bottom;
  77. (*============================*)
  78. begin
  79. gotoXY(1,bottom_line-1);
  80. end;
  81. procedure give_help;
  82. (*================*)
  83. var message : integer;
  84. begin
  85. clrscr;
  86. writeln;
  87. writeln;
  88. for message:=70 to 72 do
  89. write_long_messg( message );
  90. writeln;
  91. wait_for_space;
  92. clrscr;
  93. cursor_to_bottom;
  94. end;
  95. procedure look_graffiti;
  96. (*====================*)
  97. var message : integer;
  98. begin
  99. clrscr;
  100. for message:=59 to 62 do
  101. begin
  102. write_long_messg( message );
  103. end;
  104. wait_for_space;
  105. clrscr;
  106. cursor_to_bottom;
  107. end; { Look graffiti }
  108. procedure purgatory;
  109. (*================*)
  110. var choice, door : integer;
  111. c : char;
  112. begin
  113. delay(700);
  114. door := 0;
  115. repeat
  116. if door=0 then
  117. write_long_message( 65 )
  118. else
  119. begin
  120. writeln;
  121. writeln('You''re still here!');
  122. writeln;
  123. end;
  124. write('Choose your door: 1, 2 or 3?? ');
  125. read_key( c, ['1'..'3'] );
  126. choice := ord(c) - ord('0');
  127. door := ( random(3) + choice ) mod 3;
  128. game_position.game_ended := door=1;
  129. until door<>2;
  130. end; { Purgatory }
  131. procedure bum_tells_story;
  132. (*======================*)
  133. var i,j : integer;
  134. begin
  135. writeln;
  136. writeln('He looks at me and starts to speak:');
  137. delay(400);
  138. write_long_message( 39 );
  139. writeln;
  140. delay(300);
  141. for i:=0 to 128 do
  142. begin
  143. for j:=1 to i do
  144. write(' ');
  145. writeln('Like I did!!');
  146. end;
  147. for i:=1 to 5 do
  148. writeln;
  149. delay(500);
  150. writeln('He throws up and gives me back the bottle of wine.');
  151. writeln;
  152. end; { Bum tells story }
  153. procedure watch_TV ( var TV_channel : integer );
  154. (*============================================*)
  155. var ch : char;
  156. begin
  157. repeat
  158. write('Which channel? (1-9) ');
  159. read_key( ch, ['1'..'9'] );
  160. TV_channel := ord(ch) - ord('0');
  161. write_long_message( 40 + TV_channel );
  162. writeln;
  163. write('Change the channel? (y/n) ');
  164. read_key( ch, ['Y','N'] );
  165. until ch='N';
  166. end; { Watch TV }
  167. procedure wine_in_taxi;
  168. (*===================*)
  169. begin
  170. write_long_message( 58 );
  171. delay(500);
  172. writeln;
  173. write('What shall I do? ');
  174. delay(1000);
  175. writeln;
  176. writeln;
  177. writeln('The idiot cab driver backs over me and kills me!!!!!!');
  178. purgatory;
  179. end; { Wine in taxi }
  180. procedure stab_someone;
  181. (*===================*)
  182. begin
  183. writeln;
  184. writeln('OK - warmonger!');
  185. delay(1000);
  186. writeln('Parry!!');
  187. delay(500);
  188. writeln('Thrust!!!');
  189. delay(1000);
  190. writeln('I just got myself!!');
  191. purgatory;
  192. end; { Stab }
  193. procedure falling_down;
  194. (*===================*)
  195. var i : integer;
  196. begin
  197. for i:=1 to 50 do
  198. writeln('Aaaaaeeeeeiiiiiiii!!!!!!!!');
  199. delay(300);
  200. writeln('Splaaatttttt!!!!!');
  201. if game_position.verb<>jump then
  202. begin
  203. delay(500);
  204. writeln;
  205. writeln('I should have used safety rope!!!!!!!!');
  206. end;
  207. purgatory;
  208. end; { Falling down }
  209. procedure play_slot( var money : integer );
  210. (*=======================================*)
  211. const slot : array[0..4] of char = ( '!', '#', '*', '$', '^' );
  212. slot_figs = 5;
  213. var answer : char;
  214. i, x1, x2, x3 : integer;
  215. begin
  216. writeln;
  217. writeln('This will cost $100 each time');
  218. repeat
  219. randomize;
  220. write('You have $',money,'00. Would you like to play? (y/n) ');
  221. read_key( answer, ['Y','N'] );
  222. if answer='Y' then
  223. begin
  224. for i:=1 to 30 do
  225. begin
  226. x1 := random(slot_figs);
  227. x2 := random(slot_figs);
  228. x3 := random(slot_figs);
  229. delay(30);
  230. write( #13, slot[x1]:1, slot[x2]:5, slot[x3]:5 );
  231. end;
  232. writeln;
  233. if (x1=x2) and (x2=x3) then
  234. begin
  235. writeln('Triples!!!!!! You win $1500');
  236. money := money + 15;
  237. end
  238. else if (x1=x2) or (x2=x3) or (x3=x1) then
  239. begin
  240. writeln('A pair! You win $300');
  241. money := money + 3;
  242. end
  243. else
  244. begin
  245. writeln('You lose!');
  246. money := money - 1;
  247. end;
  248. end;
  249. until (money<1) or (answer='N');
  250. writeln;
  251. if money<1 then
  252. begin
  253. writeln('I''m broke!!! -- that means death!!!!!!!');
  254. purgatory;
  255. end;
  256. end; { Play slot }
  257. procedure play_21( var money : integer );
  258. (*=====================================*)
  259. const card_name : array[1..13] of string[7]
  260. = ( 'an Ace', 'a 2', 'a 3', 'a 4', 'a 5', 'a 6', 'a 7',
  261. 'an 8', 'a 9', 'a 10', 'a Jack', 'a Queen', 'a King' );
  262. delay_21 = 400;
  263. var answer : char;
  264. dollars, code, mi, md, yd, ym, ad, am, a, y, z, ac, i : integer;
  265. answer_ok, game_over : boolean;
  266. dollar_string, doll_00 : string[20];
  267. card : string[7];
  268. procedure deal_card;
  269. (*----------------*)
  270. begin
  271. z := random(13) + 1;
  272. y := 0;
  273. ac := 0;
  274. card := card_name[z];
  275. if z>10 then z := 10;
  276. if z=1 then z := 11;
  277. if z>9 then y := 1;
  278. if z=11 then ac := 1;
  279. end;
  280. procedure check;
  281. (*------------*)
  282. begin
  283. if (md>21) and (ad>0) then
  284. begin
  285. ad := ad - 1;
  286. md := md - 10;
  287. end;
  288. delay(delay_21);
  289. writeln('The dealer has ',md);
  290. if md<17 then
  291. a := 6
  292. else if (md>21) or (mi>md) then
  293. begin
  294. delay(delay_21);
  295. writeln('You win!!');
  296. money := money + dollars;
  297. game_over := true;
  298. end
  299. else if mi<md then
  300. begin
  301. delay(delay_21);
  302. writeln('You lose!');
  303. money := money - dollars;
  304. game_over := true;
  305. end
  306. else {if mi=md then}
  307. begin
  308. delay(delay_21);
  309. writeln('Tie!');
  310. game_over := true;
  311. end;
  312. end;
  313. procedure check_hit;
  314. (*----------------*)
  315. begin
  316. if (mi>21) and (am>0) then
  317. begin
  318. am := am - 1;
  319. mi := mi - 10;
  320. end;
  321. delay(delay_21);
  322. writeln('Your total is ',mi,'.');
  323. if mi>21 then
  324. begin
  325. delay(delay_21);
  326. writeln('Busted!');
  327. money := money - dollars;
  328. game_over := true;
  329. end
  330. else if (ym=2) and (mi=21) then
  331. begin
  332. delay(delay_21);
  333. writeln('You''ve got a ***BLACKJACK***');
  334. money := money + dollars + dollars;
  335. game_over := true;
  336. end
  337. else if (yd=2) and (md=21) then
  338. begin
  339. delay(delay_21);
  340. writeln('The dealer has a ***BLACKJACK***');
  341. money := money - dollars;
  342. game_over := true;
  343. end
  344. else
  345. begin
  346. delay(delay_21);
  347. write('Would you like a hit? (y/n) ');
  348. read_key( answer, ['Y','N']);
  349. if answer='N' then check;
  350. end;
  351. end;
  352. begin
  353. writeln;
  354. repeat
  355. randomize;
  356. mi := 0;
  357. md := 0;
  358. yd := 0;
  359. ym := 0;
  360. ad := 0;
  361. am := 0;
  362. repeat
  363. answer_ok := false;
  364. write('You have $',money,'00. How many dollars would you like to bet? ');
  365. readln(dollar_string);
  366. repeat
  367. i := pos( ' ', dollar_string);
  368. if i>0 then delete( dollar_string, i, 1 );
  369. until i=0;
  370. i := length(dollar_string);
  371. if i>2 then
  372. begin
  373. doll_00 := copy( dollar_string, i-1, 2 );
  374. delete( dollar_string, i-1, 2 );
  375. end
  376. else
  377. begin
  378. doll_00 := dollar_string;
  379. dollar_string := '';
  380. end;
  381. val( doll_00, dollars, code );
  382. if code=0 then val( dollar_string, dollars, code );
  383. if (code<>0) or (dollars<=0) then
  384. writeln('Huh?')
  385. else if doll_00 <> '00' then
  386. writeln('$100 increments only!!')
  387. else if dollars > money then
  388. writeln('You don''t have that much!!!')
  389. else
  390. answer_ok := true;
  391. until answer_ok;
  392. a := 1;
  393. game_over := false;
  394. repeat
  395. deal_card;
  396. delay(delay_21);
  397. case a of
  398. 1,3 : begin
  399. mi := mi + z;
  400. writeln('You''re dealt ',card);
  401. ym := ym + y;
  402. am := am + ac;
  403. a := a + 1;
  404. end;
  405. 2 : begin
  406. md := md + z;
  407. writeln('The dealer gets a card down');
  408. yd := yd + y;
  409. ad := ad + ac;
  410. a := a + 1;
  411. end;
  412. 4 : begin
  413. md := md + z;
  414. writeln('The dealer gets ',card);
  415. a := 5;
  416. ad := ad + ac;
  417. yd := yd + y;
  418. check_hit;
  419. end;
  420. 5 : begin
  421. mi := mi + z;
  422. writeln('You get ',card);
  423. am := am + ac;
  424. check_hit;
  425. end;
  426. 6 : begin
  427. md := md + z;
  428. writeln('The dealer gets ',card);
  429. ad := ad + ac;
  430. check;
  431. end;
  432. end;
  433. until game_over;
  434. if money<1 then
  435. begin
  436. writeln('You''re out of money!!! So long!!!!!!!!!!');
  437. purgatory;
  438. end
  439. else
  440. begin
  441. write('Play again?? (y/n) ');
  442. read_key( answer, ['Y','N'] );
  443. end;
  444. until (answer='N') or (money<1);
  445. end; { Play 21 }
  446. procedure buy_rubber;
  447. (*=================*)
  448. var answer : char;
  449. i : integer;
  450. begin
  451. with game_position do
  452. begin
  453. rubber_lubricated := 'non-lubricated';
  454. rubber_ribbed := 'non-ribbed';
  455. writeln;
  456. writeln('The man leans over the counter and whispers:');
  457. write('What color? '); readln(rubber_color);
  458. for i:=1 to length(rubber_color) do
  459. rubber_color[i] := locase(rubber_color[i]);
  460. write('And for a flavor? '); readln(rubber_flavor);
  461. for i:=1 to length(rubber_flavor) do
  462. rubber_flavor[i] := locase(rubber_flavor[i]);
  463. write('Lubricated or not? (y/n) ');
  464. read_key( answer, ['Y','N'] );
  465. if answer='Y' then delete( rubber_lubricated, 1, 4 );
  466. write('Ribbed? (y/n) ');
  467. read_key( answer, ['Y','N'] );
  468. if answer='Y' then delete( rubber_ribbed, 1, 4 );
  469. writeln('He yells -- This pervert just bought a ',rubber_color,', ');
  470. writeln(rubber_flavor,'-flavored, ',rubber_lubricated,', ',
  471. rubber_ribbed,' rubber!!!!');
  472. writeln('A lady walks by and looks at me in disgust!!!!');
  473. writeln;
  474. end;
  475. end; { Buy rubber }
  476. procedure OK;
  477. (*=========*)
  478. begin
  479. write_message('OK');
  480. end;
  481. procedure _open( var object_open : boolean );
  482. (*=========================================*)
  483. begin
  484. if object_open then
  485. write_message('It''s already open!!')
  486. else
  487. begin
  488. OK;
  489. object_open := true;
  490. end;
  491. end;
  492. procedure _close( var object_open : boolean );
  493. (*=========================================*)
  494. begin
  495. if not object_open then
  496. write_message('It''s already closed!!')
  497. else
  498. begin
  499. OK;
  500. object_open := false;
  501. end;
  502. end;
  503.