Initial import. master
authorSimon Morgan <sjm@sjm.io>
Fri, 6 Nov 2015 17:51:34 +0000 (17:51 +0000)
committerSimon Morgan <sjm@sjm.io>
Fri, 6 Nov 2015 17:51:34 +0000 (17:51 +0000)
SOFTP1.INC [new file with mode: 0644]
SOFTP2.INC [new file with mode: 0644]
SOFTP3.INC [new file with mode: 0644]
SOFTP4.INC [new file with mode: 0644]
SOFTP5.INC [new file with mode: 0644]
SOFTP6.INC [new file with mode: 0644]
SOFTPACK.PAS [new file with mode: 0644]
SOFTPORN.PAS [new file with mode: 0644]
SOFTPORN.TXT [new file with mode: 0644]

diff --git a/SOFTP1.INC b/SOFTP1.INC
new file mode 100644 (file)
index 0000000..a4eb12a
--- /dev/null
@@ -0,0 +1,515 @@
+{ SoftPorn Adventure, include file # 1 (variable declarations) }\r
+\r
+\r
+const   word_name_length   = 4;\r
+\r
+type\r
+  str10  = string[10];\r
+  str15  = string[15];\r
+  str25  = string[25];\r
+  str80  = string[80];\r
+  str120 = string[120];\r
+\r
+  messg_string = str80;\r
+\r
+  object_name_string    = string[30];\r
+  place_name_string     = string[35];\r
+  direction_name_string = string[6];\r
+  verb_name_string      = string[10];\r
+  word_name_string      = string[word_name_length];\r
+  command_string        = string[80];\r
+  synonym               = record\r
+                            orig : word_name_string;\r
+                            repl : word_name_string;\r
+                          end;\r
+\r
+  set_of_char  = set of char;\r
+\r
+  directions = ( north, south, east, west, up, down, _no_direction );\r
+\r
+  objects = (\r
+    _desk,         _washbasin,  _graffiti,  _mirror,        _toilet,\r
+    _businessman,  _button,     _bartender, _pimp,          _hooker,\r
+    _billboard,    _preacher,   _TV,        _slot_machines, _cards,\r
+    _ashtray,      _blonde,     _bed,       _bum,           _peephole,\r
+    _door_west,    _waitress,   _table,     _telephone,     _closet,\r
+    _sink,         _elevator,   _dealer,    _cabinet,       _bushes,\r
+    _tree,         _window,     _sign,      _girl,          _newspaper,\r
+    _ring,         _whiskey,    _beer,      _hammer,        _garbage,\r
+    _flowers,      _apple_core, _seeds,     _candy,         _pills,\r
+    _plant,        _passcard,   _radio,     _knife,         _magazine,\r
+    _rubber,       _wine,       _wallet,    _doll,          _apple,\r
+    _pitcher,      _stool,      _rope,      _rack,          _mushroom,\r
+    _control_unit, _curtain,    _water,\r
+    _taxi,         _inventory,  _all,       _on,            _off,\r
+    _you,          _no_object   );\r
+\r
+  places  = (\r
+    (* ==================== BAR =================== *)\r
+    b_hallwy, b_bathrm, b_bar,    b_street, b_backrm,\r
+    b_g_dump, b_inroom, b_wledge, b_bedrm,  b_balcny,\r
+    (* =================== CASINO ================= *)\r
+    c_street, c_marryc, c_casino, c_21room, c_lobby,\r
+    c_hmoons, c_hallwy, c_balcny, c_htdesk,\r
+    (* =================== DISCO ================== *)\r
+    d_telbth, d_disco,  d_street, d_entrnc, d_phrmcy,\r
+    (* ================= PENTHOUSE ================ *)\r
+    p_pntfoy, p_jacuzi, p_kitchn, p_garden, p_livrom,\r
+    p_pntpch,\r
+    (* ================= ELSEWHERE ================ *)\r
+    youhavit, nowhere );\r
+\r
+\r
+\r
+  verbs   = (\r
+    go, hail, take, drop, look, flush, open, inflate, play,\r
+    press, enter, eat, drink, buy, climb, water, fill, pour,\r
+    listen, close, jump,\r
+    marry, fuck, wear, answer, call, break, cut, dance,\r
+    kill, pay, smoke, show, smell, help, kiss, stab, say, quit,\r
+    show_score, save, restore, _no_verb );\r
+\r
+{ True constants: }\r
+const   max_carried        = 7;\r
+        first_direction    = north;\r
+        last_direction     = down;\r
+        first_object       = _desk;\r
+        last_object        = _no_object;\r
+        first_place        = b_hallwy;\r
+        last_place         = nowhere;\r
+        first_verb         = go;\r
+        last_verb          = _no_verb;\r
+\r
+type    path_array = array[places,first_direction..last_direction] of places;\r
+\r
+\r
+{ Typed constants = initialized variables: }\r
+const\r
+ bar_area       : set of places = [ b_hallwy .. b_balcny ];\r
+ casino_area    : set of places = [ c_street .. c_htdesk ];\r
+ disco_area     : set of places = [ d_telbth .. d_phrmcy ];\r
+ penthouse_area : set of places = [ p_pntfoy .. p_pntpch ];\r
+\r
+ public_places  : set of places =\r
+ [ c_street, c_casino, c_21room, c_lobby, c_htdesk, d_street, d_entrnc ];\r
+\r
+ takeable_objects : set of objects\r
+  = [ _newspaper, _ring, _whiskey, _beer, _hammer, _garbage, _flowers,\r
+      _apple_core, _seeds, _candy, _pills, _plant, _passcard, _radio, _knife,\r
+      _magazine, _rubber, _wine, _wallet, _doll, _apple, _pitcher, _stool,\r
+      _rope, _rack, _mushroom, _control_unit, _water ];\r
+\r
+\r
+{Verbs that may be entered witout nouns }\r
+\r
+stand_alone_verbs : set of verbs\r
+        = [ look, jump, dance, help, quit, show_score, save, restore ];\r
+\r
+{Verbs with special nouns }\r
+\r
+special_verbs : set of verbs =\r
+    [ take {inven}, hail {taxi}, call {number}, play {slot/21}, buy,\r
+      save, restore ];\r
+\r
+\r
+vowels : set of char = [ 'A', 'O', 'U', 'E', 'I', 'Y',\r
+                         'a', 'o', 'u', 'e', 'i', 'y' ];\r
+\r
+\r
+\r
+ direction_name : array[directions] of direction_name_string\r
+           = ( 'North', 'South', 'East', 'West', 'Up', 'Down', 'No direction');\r
+\r
+ object_name : array[objects] of object_name_string\r
+       = ( 'A Desk',\r
+           'A Washbasin',\r
+           'Graffiti',\r
+           'A Mirror',\r
+           'A Toilet',\r
+           'A Businessman',\r
+           'A Button',\r
+           'The Bartender',\r
+           'A Big Dude!',\r
+           'A Funky Hooker',\r
+           'A Billboard',\r
+           'A Preacher',\r
+           'A TV',\r
+           'Slot Machines',\r
+           'Cards',\r
+           'An Ashtray',\r
+           'A Voluptous Blonde',\r
+           'A Bed',\r
+           'A Bum',\r
+           'A Peep Hole',\r
+           'A Door to the West',\r
+           'A Waitress',\r
+           'A Table',\r
+           'A Telephone',\r
+           'A Closet',\r
+           'A Sink',\r
+           'An Elevator',\r
+           'A Dealer',\r
+           'A Cabinet',\r
+           'Bushes',\r
+           'A Tree',\r
+           'A Window',\r
+           'A Sign',\r
+           'A Girl',\r
+           'A Newspaper',\r
+           'A Wedding Ring',\r
+           'A Shot of Whiskey',\r
+           'A Beer',\r
+           'A Hammer',\r
+           'Garbage',\r
+           'Flowers',\r
+           'The Core of an Apple',\r
+           'Seeds',\r
+           'Candy',\r
+           'Pills',\r
+           'A Plant',\r
+           'A Passcard',\r
+           'A Radio',\r
+           'A Pocket Knife',\r
+           'AdventureBoy Magazine',\r
+           'A Rubber',\r
+           'A Bottle of Wine',\r
+           'A Wallet',\r
+           'An Inflatable Doll',\r
+           'An Apple',\r
+           'A Pitcher',\r
+           'A Stool',\r
+           'A Rope',\r
+           'A Display Rack',\r
+           'A Mushroom',\r
+           'A Remote Control Unit',\r
+           'A Curtain',\r
+           'Water',\r
+           'A Taxi',\r
+           'Inventory',\r
+           'All',\r
+           'On',\r
+           'Off',\r
+           'Yourself',\r
+           'No object'\r
+         );\r
+\r
+ orig_object_place : array[objects] of places  = (\r
+     {A Desk}                   b_hallwy,\r
+     {A Washbasin}              b_bathrm,\r
+     {Graffiti}                 b_bathrm,\r
+     {A Mirror}                 b_bathrm,\r
+     {A Toilet}                 b_bathrm,\r
+     {A Businessman}            b_hallwy,\r
+     {A Button}                 c_htdesk,  {and p_pntfoy}\r
+     {The Bartender}            b_bar,\r
+     {A Big Dude!}              b_backrm,\r
+     {A Funky Hooker}           b_bedrm,\r
+     {A Billboard}              b_balcny,\r
+     {A Preacher}               c_marryc,\r
+     {A TV}                     b_backrm,\r
+     {Slot Machines}            c_casino,\r
+     {Cards}                    c_21room,\r
+     {An Ashtray}               c_hallwy,\r
+     {A Voluptous Blonde}       c_htdesk,\r
+     {A Bed}                    c_hmoons,\r
+     {A Bum}                    d_street,\r
+     {A Peep Hole}              c_balcny,\r
+     {A Door to the West}       d_entrnc,\r
+     {A Waitress}               d_disco,\r
+     {A Table}                  d_disco,\r
+     {A Telephone}              d_telbth,\r
+     {A Closet}                 p_livrom,\r
+     {A Sink}                   p_kitchn,\r
+     {An Elevator}              c_htdesk,  {and p_pntfoy}\r
+     {A Dealer}                 c_21room,\r
+     {A Cabinet}                p_kitchn,\r
+     {Bushes}                   nowhere,   {seen behind bushes}\r
+     {A Tree}                   nowhere,   {grown in garden}\r
+     {A Window}                 b_wledge,\r
+     {A Sign}                   b_street,  {and c_street and d_street}\r
+     {A Girl}                   d_disco,   {c_marryc, c_hmoons, p_jacuzi}\r
+     {A Newspaper}              nowhere,   {seen in drawer in b_hallwy}\r
+     {A Wedding Ring}           nowhere,   {seen in washbasin in b_bathrm}\r
+     {A Shot of Whiskey}        nowhere,   {bought in bar}\r
+     {A Beer}                   nowhere,   {bought in bar}\r
+     {A Hammer}                 p_garden,\r
+     {Garbage}                  b_g_dump,\r
+     {Flowers}                  b_hallwy,\r
+     {The Core of an Apple}     nowhere,   {found in garbage}\r
+     {Seeds}                    nowhere,   {found in apple core}\r
+     {Candy}                    b_bedrm,\r
+     {Pills}                    b_inroom,\r
+     {A Plant}                  c_lobby,\r
+     {A Passcard}               nowhere,   {found in ashtray in c_hallwy}\r
+     {A Radio}                  c_balcny,\r
+     {A Pocket Knife}           nowhere,   {given by bum}\r
+     {AdventureBoy Magazine}    nowhere,   {found in rack in d_phrmcy}\r
+     {A Rubber}                 d_phrmcy,\r
+     {A Bottle of Wine}         nowhere,   {bought in disco, ordered by phone}\r
+     {A Wallet}                 youhavit,\r
+     {An Inflatable Doll}       nowhere,   {in closet in p_livrom}\r
+     {An Apple}                 nowhere,   {on tree grown in p_garden}\r
+     {A Pitcher}                nowhere,   {in cabinet in p_kitchn}\r
+     {A Stool}                  p_garden,\r
+     {A Rope}                   nowhere,   {innocent girl ties you with it}\r
+     {A Display Rack}           d_phrmcy,\r
+     {A Mushroom}               p_garden,\r
+     {A Remote Control Unit}    nowhere,   {given by businessman}\r
+     {A Curtain}                b_bar,\r
+     {Water}                    nowhere,   {Can get it by Water On}\r
+     {A Taxi}                   nowhere,   {Used in Hail taxi}\r
+     {Inventory}                nowhere,   {Used in Take Inventory}\r
+     {All}                      nowhere,   {Used in Take All, Drop All}\r
+     {On, Off}              nowhere, nowhere, {Used in Water On, Water Off}\r
+     {You}                      nowhere,\r
+     {No object}                nowhere\r
+         );\r
+\r
+ verb_name : array[verbs] of word_name_string\r
+      = ( 'GO  ', 'HAIL', 'TAKE', 'DROP', 'LOOK',\r
+          'FLUS', 'OPEN', 'INFL', 'PLAY', 'PRES',\r
+          'ENTE', 'EAT ', 'DRIN', 'BUY ', 'CLIM',\r
+          'WATE', 'FILL', 'POUR', 'LIST', 'CLOS',\r
+          'JUMP', 'MARR', 'FUCK', 'WEAR', 'ANSW',\r
+          'CALL', 'BREA', 'CUT ', 'DANC', 'KILL',\r
+          'PAY ', 'SMOK', 'SHOW', 'SMEL', 'HELP',\r
+          'KISS', 'STAB', 'SAY ', 'QUIT',\r
+          'SCOR', 'SAVE', 'REST', '' );\r
+\r
+ obj_name : array[objects] of word_name_string\r
+      = ( 'DESK', 'WASH', 'GRAF', 'MIRR', 'TOIL',\r
+          'BUSI', 'BUTT', 'BART', 'DUDE', 'HOOK',\r
+          'BILL', 'PREA', 'TV  ', 'SLOT', 'CARD',\r
+          'ASHT', 'VOLU', 'BED ', 'BUM ', 'HOLE',\r
+          'DOOR', 'WAIT', 'TABL', 'TELE', 'CLOS',\r
+          'SINK', 'ELEV', 'DEAL', 'CABI', 'BUSH',\r
+          'TREE', 'WIND', 'SIGN', 'GIRL', 'NEWS',\r
+          'RING', 'WHIS', 'BEER', 'HAMM', 'GARB',\r
+          'FLOW', 'CORE', 'SEED', 'CAND', 'PILL',\r
+          'PLAN', 'PASS', 'RADI', 'KNIF', 'MAGA',\r
+          'RUBB', 'WINE', 'WALL', 'DOLL', 'APPL',\r
+          'PITC', 'STOO', 'ROPE', 'RACK', 'MUSH',\r
+          'CONT', 'CURT', 'WATE',\r
+          'TAXI', 'INVE', 'ALL ', 'ON  ', 'OFF ',\r
+          'YOU ', ''\r
+         );\r
+\r
+\r
+ syn_verbs = 20;\r
+\r
+ syn_verb : array[1..syn_verbs] of synonym\r
+      = ( ( orig:'GET ';  repl:'TAKE' ),\r
+          ( orig:'GRAB'; repl:'TAKE' ),\r
+          ( orig:'LEAV'; repl:'DROP' ),\r
+          ( orig:'PLAN'; repl:'DROP' ),\r
+          ( orig:'GIVE'; repl:'DROP' ),\r
+          ( orig:'SEAR'; repl:'LOOK' ),\r
+          ( orig:'EXAM'; repl:'LOOK' ),\r
+          ( orig:'READ'; repl:'LOOK' ),\r
+          ( orig:'WATC'; repl:'LOOK' ),\r
+          ( orig:'PULL'; repl:'OPEN' ),\r
+          ( orig:'PUSH'; repl:'PRES' ),\r
+          ( orig:'ORDE'; repl:'BUY ' ),\r
+          ( orig:'SEDU'; repl:'FUCK' ),\r
+          ( orig:'RAPE'; repl:'FUCK' ),\r
+          ( orig:'SCRE'; repl:'FUCK' ),\r
+          ( orig:'USE '; repl:'WEAR' ),\r
+          ( orig:'DIAL'; repl:'CALL' ),\r
+          ( orig:'SMAS'; repl:'BREA' ),\r
+          ( orig:'STOP'; repl:'QUIT' ),\r
+          ( orig:'BYE '; repl:'QUIT' )\r
+         );\r
+\r
+\r
+ syn_nouns = 17;\r
+\r
+ syn_noun : array[1..syn_nouns] of synonym\r
+      = ( ( orig:'CAB '; repl:'TAXI'),\r
+          ( orig:'PEEP'; repl:'HOLE'),\r
+          ( orig:'DRAW'; repl:'DESK'),\r
+          ( orig:'BASI'; repl:'WASH'),\r
+          ( orig:'PIMP'; repl:'DUDE'),\r
+          ( orig:'MACH'; repl:'SLOT'),\r
+          ( orig:'21  '; repl:'CARD'),\r
+          ( orig:'BLAC'; repl:'CARD'),\r
+          ( orig:'DISP'; repl:'RACK'),\r
+          ( orig:'PHON'; repl:'TELE'),\r
+          ( orig:'WEDD'; repl:'RING'),\r
+          ( orig:'BLON'; repl:'VOLU'),\r
+          ( orig:'EVE '; repl:'GIRL'),\r
+          ( orig:'PAPE'; repl:'NEWS'),\r
+          ( orig:'SHOT'; repl:'WHIS'),\r
+          ( orig:'TRAS'; repl:'GARB'),\r
+          ( orig:'UNIT'; repl:'CONT')\r
+         );\r
+\r
+\r
+gl_words = 9;\r
+\r
+glue_words : array[1..gl_words] of word_name_string\r
+      = ( 'A   ', 'AN  ', 'THE ', 'THIS', 'THAT',\r
+          'AT  ', 'TO  ', 'FROM', 'WITH'  );\r
+\r
+dir_name : array[directions] of word_name_string\r
+      = ( 'NORT', 'SOUT', 'EAST', 'WEST', 'UP  ', 'DOWN', '' );\r
+\r
+place_name : array[places] of place_name_string\r
+      = ( 'I''m in a Hallway',\r
+          'I''m in a Bathroom',\r
+          'I''m in a Sleazy Bar',\r
+          'I''m on a Street outside the Bar',\r
+          'I''m in the Backroom',\r
+          'I''m in a Filthy Dumpster',\r
+          'I''m inside the room I broke into!',\r
+          'I''m on a Window Ledge',\r
+          'I''m in a Hooker''s Bedroom',\r
+          'I''m on a Hooker''s Balcony',\r
+          'I''m on a Downtown Street',\r
+          'I''m in a Quickie Marriage Center',\r
+          'I''m in the Main Casino Room',\r
+          'I''m in the ''21'' Room',\r
+          'I''m in the Lobby of the Hotel',\r
+          'I''m in the Honeymoon Suite',\r
+          'I''m in the Hotel Hallway',\r
+          'I''m on the Honeymooner''s Balcony',\r
+          'I''m at the Hotel Desk',\r
+          'I''m in a Telephone Booth',\r
+          'I''m in the Disco',\r
+          'I''m on a Residential Street',\r
+          'I''m in the Disco''s Entrance',\r
+          'I''m in the Pharmacy',\r
+          'I''m in the Penthouse Foyer',\r
+          'I''m in the Jacuzzi',\r
+          'I''m in the Kitchen',\r
+          'I''m in the Garden',\r
+          'I''m in the Living Room',\r
+          'I''m on the Penthouse Porch',\r
+          'Nowhere',\r
+          'Carried by You'\r
+        );\r
+\r
+orig_path: path_array = (\r
+\r
+{ Place Path to   North     South     East      West      Up        Down    }\r
+\r
+                    (* ==================== BAR =================== *)\r
+{b_hallwy}   (   b_bathrm, nowhere,  b_bar,    nowhere,  nowhere,  nowhere  ),\r
+{b_bathrm}   (   nowhere,  b_hallwy, nowhere,  nowhere,  nowhere,  nowhere  ),\r
+{b_bar}      (   b_street, nowhere,  nowhere,  b_hallwy, nowhere,  nowhere  ),\r
+{b_street}   (   nowhere,  b_bar,    nowhere,  nowhere,  nowhere,  nowhere  ),\r
+{b_backrm}   (   nowhere,  nowhere,  nowhere,  b_bar,    b_bedrm,  nowhere  ),\r
+{b_g_dump}   (   nowhere,  nowhere,  nowhere,  b_street, nowhere,  nowhere  ),\r
+{b_inroom}   (   b_wledge, nowhere,  nowhere,  nowhere,  nowhere,  nowhere  ),\r
+{b_wledge}   (   nowhere,  nowhere,  b_balcny, nowhere,  nowhere,  nowhere  ),\r
+{b_bedrm}    (   b_balcny, nowhere,  nowhere,  nowhere,  nowhere,  b_backrm ),\r
+{b_balcny}   (   nowhere,  b_bedrm,  nowhere,  b_wledge, nowhere,  b_g_dump ),\r
+                    (* =================== CASINO ================= *)\r
+{c_street}   (   c_marryc, nowhere,  c_casino, nowhere,  nowhere,  nowhere  ),\r
+{c_marryc}   (   nowhere,  c_street, nowhere,  nowhere,  nowhere,  nowhere  ),\r
+{c_casino}   (   c_21room, nowhere,  c_lobby,  c_street, nowhere,  nowhere  ),\r
+{c_21room}   (   nowhere,  c_casino, nowhere,  nowhere,  nowhere,  nowhere  ),\r
+{c_lobby}    (   nowhere,  nowhere,  nowhere,  c_casino, c_htdesk, nowhere  ),\r
+{c_hmoons}   (   c_hallwy, nowhere,  c_balcny, nowhere,  nowhere,  nowhere  ),\r
+{c_hallwy}   (   nowhere,  nowhere,  c_htdesk, nowhere,  nowhere,  nowhere  ),\r
+{c_balcny}   (   nowhere,  nowhere,  nowhere,  c_hmoons, nowhere,  nowhere  ),\r
+{c_htdesk}   (   nowhere,  nowhere,  nowhere,  c_hallwy, nowhere,  c_lobby  ),\r
+                    (* =================== DISCO ================== *)\r
+{d_telbth}   (   d_disco,  nowhere,  nowhere,  nowhere,  nowhere,  nowhere  ),\r
+{d_disco}    (   nowhere,  d_telbth, d_entrnc, nowhere,  nowhere,  nowhere  ),\r
+{d_street}   (   d_entrnc, nowhere,  d_phrmcy, nowhere,  nowhere,  nowhere  ),\r
+{d_entrnc}   (   nowhere,  d_street, nowhere,  nowhere,  nowhere,  nowhere  ),\r
+{d_phrmcy}   (   nowhere,  nowhere,  nowhere,  d_street, nowhere,  nowhere  ),\r
+                    (* ================= PENTHOUSE ================ *)\r
+{p_pntfoy}   (   nowhere,  nowhere,  p_kitchn, nowhere,  p_livrom, nowhere  ),\r
+{p_jacuzi}   (   nowhere,  nowhere,  nowhere,  nowhere,  p_pntpch, nowhere  ),\r
+{p_kitchn}   (   nowhere,  nowhere,  nowhere,  p_pntfoy, nowhere,  nowhere  ),\r
+{p_garden}   (   nowhere,  nowhere,  nowhere,  nowhere,  nowhere,  nowhere  ),\r
+{p_livrom}   (   p_pntpch, nowhere,  nowhere,  nowhere,  nowhere,  p_pntfoy ),\r
+{p_pntpch}   (   nowhere,  p_livrom, nowhere,  nowhere,  nowhere,  p_jacuzi ),\r
+                    (* ================= ELSEWHERE ================ *)\r
+{youhavit}   (   nowhere,  nowhere,  nowhere,  nowhere,  nowhere,  nowhere  ),\r
+{nowhere}    (   nowhere,  nowhere,  nowhere,  nowhere,  nowhere,  nowhere  )\r
+          );\r
+\r
+\r
+\r
+\r
+type gamepos = record\r
+                 first_var            : byte;\r
+                 object_place         : array[objects] of places;\r
+                 place_visited        : array[places] of boolean;\r
+                 path                 : path_array;\r
+                 your_place,\r
+                 new_place            : places;\r
+                 inven                : array[1..max_carried] of objects;\r
+                 carrying             : 1..max_carried;\r
+                 noun                 : objects;\r
+                 verb                 : verbs;\r
+                 direction            : directions;\r
+                 command              : command_string;\r
+                 verbnam,\r
+                 objnam               : word_name_string;\r
+                 game_ended           : boolean;\r
+                 yesno                : char;\r
+                 objects_carried,\r
+                 money,\r
+                 score,\r
+                 TV_channel           : integer;\r
+                 rope_in_use,\r
+                 window_broken,\r
+                 toilet_flushed,\r
+                 called_555_0987,\r
+                 called_555_6969,\r
+                 called_555_0439,\r
+                 rubber_worn,\r
+                 hooker_fucked,\r
+                 door_W_open,\r
+                 radio_listened,\r
+                 wine_ordered,\r
+                 telephone_ringing,\r
+                 telephone_answered,\r
+                 hole_peeped,\r
+                 girl_2_fucked,\r
+                 tied_to_bed,\r
+                 drawer_open,\r
+                 closet_open,\r
+                 cabinet_open,\r
+                 doll_inflated,\r
+                 stool_climbed,\r
+                 water_on,\r
+                 pitcher_full,\r
+                 seeds_planted,\r
+                 seeds_watered,\r
+                 apple_given,\r
+                 candy_given,\r
+                 flowers_given,\r
+                 ring_given,\r
+                 married_to_girl      : boolean;\r
+                 girl_name,\r
+                 girl_part,\r
+                 girl_do,\r
+                 your_part,\r
+                 your_object,\r
+                 rubber_color,\r
+                 rubber_flavor,\r
+                 rubber_lubricated,\r
+                 rubber_ribbed        : str15\r
+               end;\r
+\r
+ var    game_position        : gamepos;\r
+        i                    : integer;\r
+        p                    : integer;\r
+        iores                : integer;\r
+        line_from_kbd        : str120;\r
+        verb_only,\r
+        no_verb,\r
+        no_object,\r
+        no_direction         : boolean;\r
+        full_verb,\r
+        full_noun            : str25;\r
+        save_file            : file of gamepos;\r
+        taxi_destination     : str10;\r
+        password             : str10;\r
+        _noun                : objects;    {loop variable}\r
+        anything_carried     : boolean;\r
+\r\1a
\ No newline at end of file
diff --git a/SOFTP2.INC b/SOFTP2.INC
new file mode 100644 (file)
index 0000000..2439596
--- /dev/null
@@ -0,0 +1,556 @@
+{ Softporn Adventure, include file # 2 }\r
+\r
+\r
+\r
+function locase( c : char ) : char;\r
+(*===============================*)\r
+begin\r
+  case c of\r
+    'A'..'Z':  c := chr( ord(c) + $20 );\r
+    '\8f':       c := '\86';\r
+    '\8e':       c := '\84';\r
+    '\99':       c := '\94';\r
+  end;\r
+  locase := c;\r
+end;\r
+\r
+\r
+procedure read_key ( var ch : char; cset : set_of_char );\r
+(*=====================================================*)\r
+var ch_up : char;\r
+begin\r
+  repeat\r
+    read( kbd, ch );\r
+    ch_up := upcase(ch);\r
+    if ch_up in cset then\r
+      writeln( ch )\r
+    else\r
+      write(#7);\r
+  until ch_up in cset;\r
+  ch := ch_up;\r
+end;  { Read key }\r
+\r
+\r
+procedure write_long_messg( messg_no : integer );\r
+(*=============================================*)\r
+\r
+const  EOL     = #$0D;\r
+       NULL    = #0;\r
+\r
+var    i, j       : integer;\r
+       c          : char;\r
+\r
+begin\r
+  seek( messg_file, messg_no-1 );\r
+  read( messg_file, messg_rec );\r
+  for i:=1 to recsize-1 do\r
+    begin\r
+      c := messg_rec[i];\r
+      if c=EOL then\r
+        writeln\r
+      else if c>=' ' then\r
+        begin\r
+          write(pred(c));\r
+          if messg_no in [39,58,69] then\r
+            delay(150);\r
+        end;\r
+    end; { for i=1 to recsize-1 do }\r
+end;  { Write long messg }\r
+\r
+\r
+procedure write_long_message( messg_no : integer );\r
+(*===============================================*)\r
+begin\r
+  writeln;\r
+  write_long_messg( messg_no );\r
+end;  { Write long message }\r
+\r
+\r
+procedure write_message( message : messg_string );\r
+(*==============================================*)\r
+begin\r
+  writeln;\r
+  writeln(message);\r
+end;\r
+\r
+\r
+procedure wait_for_space;\r
+(*=====================*)\r
+var c : char;\r
+begin\r
+  write('                    Press  <SPACE>  to continue  ');\r
+  repeat\r
+    read(kbd,c);\r
+    if c<>' ' then write(#7);\r
+  until c=' ';\r
+end;\r
+\r
+\r
+procedure cursor_to_bottom;\r
+(*=======================*)\r
+begin\r
+  gotoXY(1,bottom_line);\r
+end;\r
+\r
+\r
+procedure cursor_next_to_bottom;\r
+(*============================*)\r
+begin\r
+  gotoXY(1,bottom_line-1);\r
+end;\r
+\r
+\r
+procedure give_help;\r
+(*================*)\r
+var message : integer;\r
+begin\r
+  clrscr;\r
+  writeln;\r
+  writeln;\r
+  for message:=70 to 72 do\r
+    write_long_messg( message );\r
+  writeln;\r
+  wait_for_space;\r
+  clrscr;\r
+  cursor_to_bottom;\r
+end;\r
+\r
+\r
+procedure look_graffiti;\r
+(*====================*)\r
+var message : integer;\r
+begin\r
+  clrscr;\r
+  for message:=59 to 62 do\r
+    begin\r
+      write_long_messg( message );\r
+    end;\r
+  wait_for_space;\r
+  clrscr;\r
+  cursor_to_bottom;\r
+end;  { Look graffiti }\r
+\r
+\r
+procedure purgatory;\r
+(*================*)\r
+var choice, door : integer;\r
+    c : char;\r
+begin\r
+  delay(700);\r
+  door := 0;\r
+  repeat\r
+    if door=0 then\r
+      write_long_message( 65 )\r
+    else\r
+      begin\r
+        writeln;\r
+        writeln('You''re still here!');\r
+        writeln;\r
+      end;\r
+    write('Choose your door: 1, 2 or 3??  ');\r
+    read_key( c, ['1'..'3'] );\r
+    choice := ord(c) - ord('0');\r
+    door := ( random(3) + choice ) mod 3;\r
+    game_position.game_ended := door=1;\r
+  until door<>2;\r
+end;  { Purgatory }\r
+\r
+\r
+procedure bum_tells_story;\r
+(*======================*)\r
+var i,j : integer;\r
+begin\r
+  writeln;\r
+  writeln('He looks at me and starts to speak:');\r
+  delay(400);\r
+  write_long_message( 39 );\r
+  writeln;\r
+  delay(300);\r
+  for i:=0 to 128 do\r
+    begin\r
+      for j:=1 to i do\r
+        write(' ');\r
+      writeln('Like I did!!');\r
+    end;\r
+  for i:=1 to 5 do\r
+    writeln;\r
+  delay(500);\r
+  writeln('He throws up and gives me back the bottle of wine.');\r
+  writeln;\r
+end;  { Bum tells story }\r
+\r
+\r
+procedure watch_TV ( var TV_channel : integer );\r
+(*============================================*)\r
+var ch      : char;\r
+begin\r
+  repeat\r
+    write('Which channel? (1-9) ');\r
+    read_key( ch, ['1'..'9'] );\r
+    TV_channel := ord(ch) - ord('0');\r
+    write_long_message( 40 + TV_channel );\r
+    writeln;\r
+    write('Change the channel?  (y/n) ');\r
+    read_key( ch, ['Y','N'] );\r
+  until ch='N';\r
+end;  { Watch TV }\r
+\r
+\r
+procedure wine_in_taxi;\r
+(*===================*)\r
+begin\r
+  write_long_message( 58 );\r
+  delay(500);\r
+  writeln;\r
+  write('What shall I do? ');\r
+  delay(1000);\r
+  writeln;\r
+  writeln;\r
+  writeln('The idiot cab driver backs over me and kills me!!!!!!');\r
+  purgatory;\r
+end;  { Wine in taxi }\r
+\r
+\r
+procedure stab_someone;\r
+(*===================*)\r
+begin\r
+  writeln;\r
+  writeln('OK - warmonger!');\r
+  delay(1000);\r
+  writeln('Parry!!');\r
+  delay(500);\r
+  writeln('Thrust!!!');\r
+  delay(1000);\r
+  writeln('I just got myself!!');\r
+  purgatory;\r
+end;  { Stab }\r
+\r
+\r
+procedure falling_down;\r
+(*===================*)\r
+var i : integer;\r
+begin\r
+  for i:=1 to 50 do\r
+    writeln('Aaaaaeeeeeiiiiiiii!!!!!!!!');\r
+  delay(300);\r
+  writeln('Splaaatttttt!!!!!');\r
+  if game_position.verb<>jump then\r
+    begin\r
+      delay(500);\r
+      writeln;\r
+      writeln('I should have used safety rope!!!!!!!!');\r
+    end;\r
+  purgatory;\r
+end;  { Falling down }\r
+\r
+\r
+procedure play_slot( var money : integer );\r
+(*=======================================*)\r
+const slot : array[0..4] of char = ( '!', '#', '*', '$', '^' );\r
+      slot_figs = 5;\r
+var answer : char;\r
+    i, x1, x2, x3 : integer;\r
+begin\r
+  writeln;\r
+  writeln('This will cost $100 each time');\r
+  repeat\r
+    randomize;\r
+    write('You have $',money,'00.  Would you like to play?  (y/n)  ');\r
+    read_key( answer, ['Y','N'] );\r
+    if answer='Y' then\r
+      begin\r
+        for i:=1 to 30 do\r
+          begin\r
+            x1 := random(slot_figs);\r
+            x2 := random(slot_figs);\r
+            x3 := random(slot_figs);\r
+            delay(30);\r
+            write( #13, slot[x1]:1, slot[x2]:5, slot[x3]:5 );\r
+          end;\r
+        writeln;\r
+        if (x1=x2) and (x2=x3) then\r
+          begin\r
+            writeln('Triples!!!!!! You win $1500');\r
+            money := money + 15;\r
+          end\r
+        else if (x1=x2) or (x2=x3) or (x3=x1) then\r
+          begin\r
+            writeln('A pair!  You win $300');\r
+            money := money + 3;\r
+          end\r
+        else\r
+          begin\r
+            writeln('You lose!');\r
+            money := money - 1;\r
+          end;\r
+      end;\r
+  until (money<1) or (answer='N');\r
+  writeln;\r
+  if money<1 then\r
+    begin\r
+      writeln('I''m broke!!! -- that means death!!!!!!!');\r
+      purgatory;\r
+    end;\r
+end;  { Play slot }\r
+\r
+\r
+procedure play_21( var money : integer );\r
+(*=====================================*)\r
+const card_name : array[1..13] of string[7]\r
+   = ( 'an Ace', 'a 2', 'a 3', 'a 4', 'a 5', 'a 6', 'a 7',\r
+       'an 8', 'a 9', 'a 10', 'a Jack', 'a Queen', 'a King' );\r
+      delay_21 = 400;\r
+var answer : char;\r
+    dollars, code, mi, md, yd, ym, ad, am, a, y, z, ac, i : integer;\r
+    answer_ok, game_over : boolean;\r
+    dollar_string, doll_00 : string[20];\r
+    card : string[7];\r
+\r
+procedure deal_card;\r
+(*----------------*)\r
+begin\r
+  z := random(13) + 1;\r
+  y := 0;\r
+  ac := 0;\r
+  card := card_name[z];\r
+  if z>10 then z := 10;\r
+  if z=1  then z := 11;\r
+  if z>9  then y := 1;\r
+  if z=11 then ac := 1;\r
+end;\r
+\r
+procedure check;\r
+(*------------*)\r
+begin\r
+  if (md>21) and (ad>0) then\r
+    begin\r
+      ad := ad - 1;\r
+      md := md - 10;\r
+    end;\r
+    delay(delay_21);\r
+    writeln('The dealer has ',md);\r
+    if md<17 then\r
+      a := 6\r
+    else if (md>21) or (mi>md) then\r
+      begin\r
+        delay(delay_21);\r
+        writeln('You win!!');\r
+        money := money + dollars;\r
+        game_over := true;\r
+      end\r
+    else if mi<md then\r
+      begin\r
+        delay(delay_21);\r
+        writeln('You lose!');\r
+        money := money - dollars;\r
+        game_over := true;\r
+      end\r
+    else {if mi=md then}\r
+      begin\r
+        delay(delay_21);\r
+        writeln('Tie!');\r
+        game_over := true;\r
+      end;\r
+end;\r
+\r
+procedure check_hit;\r
+(*----------------*)\r
+begin\r
+  if (mi>21) and (am>0) then\r
+    begin\r
+      am := am - 1;\r
+      mi := mi - 10;\r
+    end;\r
+  delay(delay_21);\r
+  writeln('Your total is ',mi,'.');\r
+  if mi>21 then\r
+    begin\r
+      delay(delay_21);\r
+      writeln('Busted!');\r
+      money := money - dollars;\r
+      game_over := true;\r
+    end\r
+  else if (ym=2) and (mi=21) then\r
+    begin\r
+      delay(delay_21);\r
+      writeln('You''ve got a ***BLACKJACK***');\r
+      money := money + dollars + dollars;\r
+      game_over := true;\r
+    end\r
+  else if (yd=2) and (md=21) then\r
+    begin\r
+      delay(delay_21);\r
+      writeln('The dealer has a ***BLACKJACK***');\r
+      money := money - dollars;\r
+      game_over := true;\r
+    end\r
+  else\r
+    begin\r
+      delay(delay_21);\r
+      write('Would you like a hit?  (y/n)  ');\r
+      read_key( answer, ['Y','N']);\r
+      if answer='N' then check;\r
+    end;\r
+end;\r
+\r
+begin\r
+  writeln;\r
+  repeat\r
+    randomize;\r
+    mi := 0;\r
+    md := 0;\r
+    yd := 0;\r
+    ym := 0;\r
+    ad := 0;\r
+    am := 0;\r
+    repeat\r
+      answer_ok := false;\r
+      write('You have $',money,'00.  How many dollars would you like to bet? ');\r
+      readln(dollar_string);\r
+      repeat\r
+        i := pos( ' ', dollar_string);\r
+        if i>0 then delete( dollar_string, i, 1 );\r
+      until i=0;\r
+      i := length(dollar_string);\r
+      if i>2 then\r
+        begin\r
+          doll_00 := copy( dollar_string, i-1, 2 );\r
+          delete( dollar_string, i-1, 2 );\r
+        end\r
+      else\r
+        begin\r
+          doll_00 := dollar_string;\r
+          dollar_string := '';\r
+        end;\r
+      val( doll_00, dollars, code );\r
+      if code=0 then val( dollar_string, dollars, code );\r
+      if (code<>0) or (dollars<=0) then\r
+        writeln('Huh?')\r
+      else if doll_00 <> '00' then\r
+        writeln('$100 increments only!!')\r
+      else if dollars > money then\r
+        writeln('You don''t have that much!!!')\r
+      else\r
+        answer_ok := true;\r
+    until answer_ok;\r
+\r
+    a := 1;\r
+    game_over := false;\r
+    repeat\r
+      deal_card;\r
+      delay(delay_21);\r
+      case a of\r
+        1,3 : begin\r
+                mi := mi + z;\r
+                writeln('You''re dealt ',card);\r
+                ym := ym + y;\r
+                am := am + ac;\r
+                a := a + 1;\r
+              end;\r
+        2   : begin\r
+                md := md + z;\r
+                writeln('The dealer gets a card down');\r
+                yd := yd + y;\r
+                ad := ad + ac;\r
+                a := a + 1;\r
+              end;\r
+        4   : begin\r
+                md := md + z;\r
+                writeln('The dealer gets ',card);\r
+                a := 5;\r
+                ad := ad + ac;\r
+                yd := yd + y;\r
+                check_hit;\r
+              end;\r
+        5   : begin\r
+                mi := mi + z;\r
+                writeln('You get ',card);\r
+                am := am + ac;\r
+                check_hit;\r
+              end;\r
+        6   : begin\r
+                md := md + z;\r
+                writeln('The dealer gets ',card);\r
+                ad := ad + ac;\r
+                check;\r
+              end;\r
+      end;\r
+    until game_over;\r
+    if money<1 then\r
+      begin\r
+        writeln('You''re out of money!!!  So long!!!!!!!!!!');\r
+        purgatory;\r
+      end\r
+    else\r
+      begin\r
+        write('Play again?? (y/n)  ');\r
+        read_key( answer, ['Y','N'] );\r
+      end;\r
+  until (answer='N') or (money<1);\r
+end;  { Play 21 }\r
+\r
+\r
+procedure buy_rubber;\r
+(*=================*)\r
+var answer : char;\r
+    i      : integer;\r
+begin\r
+  with game_position do\r
+    begin\r
+      rubber_lubricated := 'non-lubricated';\r
+      rubber_ribbed := 'non-ribbed';\r
+      writeln;\r
+      writeln('The man leans over the counter and whispers:');\r
+      write('What color? ');  readln(rubber_color);\r
+      for i:=1 to length(rubber_color) do\r
+        rubber_color[i] := locase(rubber_color[i]);\r
+      write('And for a flavor? ');  readln(rubber_flavor);\r
+      for i:=1 to length(rubber_flavor) do\r
+        rubber_flavor[i] := locase(rubber_flavor[i]);\r
+      write('Lubricated or not? (y/n) ');\r
+      read_key( answer, ['Y','N'] );\r
+      if answer='Y' then delete( rubber_lubricated, 1, 4 );\r
+      write('Ribbed? (y/n) ');\r
+      read_key( answer, ['Y','N'] );\r
+      if answer='Y' then delete( rubber_ribbed, 1, 4 );\r
+      writeln('He yells -- This pervert just bought a ',rubber_color,', ');\r
+      writeln(rubber_flavor,'-flavored, ',rubber_lubricated,', ',\r
+              rubber_ribbed,' rubber!!!!');\r
+      writeln('A lady walks by and looks at me in disgust!!!!');\r
+      writeln;\r
+    end;\r
+end;  { Buy rubber }\r
+\r
+\r
+procedure OK;\r
+(*=========*)\r
+begin\r
+  write_message('OK');\r
+end;\r
+\r
+\r
+procedure _open( var object_open : boolean );\r
+(*=========================================*)\r
+begin\r
+  if object_open then\r
+    write_message('It''s already open!!')\r
+  else\r
+    begin\r
+      OK;\r
+      object_open := true;\r
+    end;\r
+end;\r
+\r
+\r
+procedure _close( var object_open : boolean );\r
+(*=========================================*)\r
+begin\r
+  if not object_open then\r
+    write_message('It''s already closed!!')\r
+  else\r
+    begin\r
+      OK;\r
+      object_open := false;\r
+    end;\r
+end;\r
+\1a
\ No newline at end of file
diff --git a/SOFTP3.INC b/SOFTP3.INC
new file mode 100644 (file)
index 0000000..2f9a8ed
--- /dev/null
@@ -0,0 +1,638 @@
+{ Softporn Adventure, include file # 3 }\r
+\r
+\r
+\r
+procedure newlines( lines : integer );\r
+(*==================================*)\r
+var i : integer;\r
+begin\r
+  for i:=1 to lines do writeln;\r
+end;\r
+\r
+\r
+procedure I_cant_go_that_way;\r
+(*=========================*)\r
+begin\r
+  write_message( 'I can''t go that way!' );\r
+end;\r
+\r
+\r
+procedure cant_do_that;\r
+(*===================*)\r
+var messg : integer;\r
+begin\r
+  messg := random(8) + 1;\r
+  case messg of\r
+    1: writeln('Huh?');\r
+    2: writeln('Ummm......huh?');\r
+    3: writeln('You''re nuts!');\r
+    4: writeln('You can''t be serious!!');\r
+    5: writeln('Not bloody likely!!');\r
+    6: writeln('I don''t know how to.');\r
+    7: writeln('An interesting idea....');\r
+    8: writeln('I can''t do that.');\r
+  end;\r
+end;\r
+\r
+\r
+procedure huh;\r
+(*==========*)\r
+begin\r
+  write_message('Huh?');\r
+end;\r
+\r
+\r
+procedure I_cant_do_that;\r
+(*=====================*)\r
+begin\r
+  writeln;\r
+  cant_do_that;\r
+end;\r
+\r
+\r
+procedure I_dont_know_that_word;\r
+(*============================*)\r
+begin\r
+  write_message( 'I don''t know that word!' );\r
+end;\r
+\r
+\r
+procedure find_me_one;\r
+(*==================*)\r
+var messg : integer;\r
+begin\r
+  messg := random(4) + 1;\r
+  writeln;\r
+  case messg of\r
+    1: writeln('Find me one!!');\r
+    2: writeln('I don''t see it here!');\r
+    3: writeln('I can''t find it here!');\r
+    4: writeln('You have to find it first!');\r
+  end;\r
+end;\r
+\r
+\r
+procedure I_dont_have_it;\r
+(*=====================*)\r
+begin\r
+  write_message('I don''t have it!!');\r
+end;\r
+\r
+\r
+procedure I_already_have_it;\r
+(*========================*)\r
+begin\r
+  with game_position do\r
+    write_message( 'I already have it!!');\r
+end;\r
+\r
+\r
+procedure I_see_nothing_special;\r
+(*============================*)\r
+begin\r
+  write_message('I see nothing special');\r
+end;\r
+\r
+\r
+procedure I_see_something( object : objects; messg : str25 );\r
+(*=========================================================*)\r
+begin\r
+  with game_position do\r
+    begin\r
+      if object_place[object]=nowhere then\r
+        begin\r
+          write_message('I see something!!!');\r
+          object_place[object] := your_place;\r
+        end\r
+      else if messg='' then\r
+        I_see_nothing_special\r
+      else\r
+        write_message( messg )\r
+    end;\r
+end;\r
+\r
+\r
+procedure not_yet_but_maybe_later;\r
+(*==============================*)\r
+begin\r
+  write_message('Not yet but maybe later!');\r
+end;\r
+\r
+\r
+procedure sorry_no_money;\r
+(*=====================*)\r
+begin\r
+  write_message('Sorry -- no money!!');\r
+end;\r
+\r
+\r
+function is_here ( obj : objects ) : boolean;\r
+(*=========================================*)\r
+begin\r
+  with game_position do\r
+    is_here := object_place[obj] = your_place;\r
+end;\r
+\r
+\r
+function is_carried ( obj : objects ) : boolean;\r
+(*============================================*)\r
+begin\r
+  with game_position do\r
+    is_carried := object_place[obj] = youhavit;\r
+end;\r
+\r
+\r
+function you_are_in ( place : places ) : boolean;\r
+(*=============================================*)\r
+begin\r
+  with game_position do\r
+    you_are_in := your_place = place;\r
+end;\r
+\r
+\r
+\r
+function save_file_name( objnam : word_name_string ) : str25;\r
+(*=========================================================*)\r
+var i         : integer;\r
+    file_name : str25;\r
+begin\r
+  file_name := 'SOFTP' + copy(objnam,1,3);\r
+  repeat\r
+    i := pos( ' ', file_name );\r
+    if i>0 then\r
+      delete( file_name, i, 1 );\r
+  until i=0;\r
+  if file_name='SOFTP' then\r
+    file_name := 'SOFTPORN';\r
+  save_file_name := file_name + '.SAV';\r
+end;\r
+\r
+\r
+\r
+procedure init_new_game;\r
+(*====================*)\r
+\r
+var yesno     : char;\r
+    place     : places;\r
+    direction : directions;\r
+    i         : integer;\r
+\r
+begin\r
+  clrscr;\r
+  cursor_to_bottom;\r
+  writeln ('Welcome to SOFTPORN ADVENTURE!!'); newlines(2);\r
+  write   ( 'Do you need instructions? (y/n) '); read_key( yesno, ['Y','N'] );\r
+  if yesno='Y' then\r
+    give_help\r
+  else\r
+    newlines(2);\r
+\r
+  with game_position do\r
+    begin\r
+\r
+      line_from_kbd := '';\r
+\r
+      object_place := orig_object_place;\r
+\r
+      path := orig_path;\r
+\r
+      for place:=first_place to last_place do\r
+        place_visited[place] := false;\r
+\r
+      your_place         := b_bar;\r
+\r
+      objects_carried    := 0;\r
+      TV_channel         := 0;\r
+      money              := 10;   { $1000 }\r
+      score              := 0;\r
+\r
+      rope_in_use        := false;\r
+      window_broken      := false;\r
+      toilet_flushed     := false;\r
+      called_555_0987    := false;\r
+      called_555_6969    := false;\r
+      called_555_0439    := false;\r
+      rubber_worn        := false;\r
+      hooker_fucked      := false;\r
+      door_W_open        := false;\r
+      radio_listened     := false;\r
+      wine_ordered       := false;\r
+      telephone_ringing  := false;\r
+      telephone_answered := false;\r
+      hole_peeped        := false;\r
+      girl_2_fucked      := false;\r
+      tied_to_bed        := false;\r
+      drawer_open        := false;\r
+      closet_open        := false;\r
+      cabinet_open       := false;\r
+      doll_inflated      := false;\r
+      stool_climbed      := false;\r
+      water_on           := false;\r
+      pitcher_full       := false;\r
+      seeds_planted      := false;\r
+      seeds_watered      := false;\r
+      apple_given        := false;\r
+      candy_given        := false;\r
+      flowers_given      := false;\r
+      ring_given         := false;\r
+      married_to_girl    := false;\r
+\r
+    end;\r
+\r
+end;      { Init new game }\r
+\r
+\r
+procedure look_around;\r
+(*==================*)\r
+var objcount  : integer;\r
+    obj       : objects;\r
+    exits,\r
+    exitcount : integer;\r
+    exit      : directions;\r
+    anyexit   : boolean;\r
+    i,j,\r
+    hpos,\r
+    namelen   : integer;\r
+\r
+begin\r
+  with game_position do\r
+    begin\r
+      if not place_visited[your_place] then\r
+        write_long_message( integer(your_place)+1 );\r
+      if (your_place=p_pntpch) and called_555_0439 then\r
+        begin\r
+          if not telephone_answered and (random(4)=2) then\r
+            telephone_ringing := true;\r
+          if telephone_ringing then\r
+            write_message('The telephone rings');\r
+        end;\r
+      place_visited[your_place] := true;\r
+      newlines(2);\r
+\r
+      gotoXY(1,1);\r
+      clreol;\r
+      writeln( place_name[your_place] );\r
+\r
+      clreol;\r
+      write( 'Items in sight are:  ' );\r
+      hpos := 23;\r
+      objcount := 0;\r
+      for obj := first_object to last_object do\r
+        begin\r
+          if is_here(obj) then\r
+            begin\r
+              if objcount>0 then\r
+                begin\r
+                  write(', ');\r
+                  hpos := hpos + 2;\r
+                end;\r
+              objcount := objcount + 1;\r
+              namelen := length(object_name[obj]);\r
+              if ( hpos + 3 + namelen ) > 80 then\r
+                begin\r
+                  writeln;\r
+                  clreol;\r
+                  write( '                     ' );\r
+                  hpos := 23;\r
+                end;\r
+              write(object_name[obj]);\r
+              hpos := hpos + namelen;\r
+            end;\r
+        end;\r
+      if objcount=0 then\r
+        writeln( 'Nothing interesting.')\r
+      else\r
+        writeln;\r
+\r
+      clreol;\r
+      write( 'Other areas are:  ');\r
+      exitcount := 0;\r
+      for exit := first_direction to last_direction do\r
+        if path[your_place,exit] <> nowhere then\r
+          exitcount := exitcount + 1;\r
+      exits := exitcount;\r
+      if exits=0 then\r
+        write('By magic!')\r
+      else\r
+        for exit := first_direction to last_direction do\r
+          if path[your_place,exit] <> nowhere then\r
+            begin\r
+              if exitcount<exits then\r
+                begin\r
+                  if exitcount>1 then\r
+                    write(', ')\r
+                  else if exits>1 then\r
+                    write(' and ');\r
+                end;\r
+              exitcount := exitcount - 1;\r
+              write( direction_name[exit]);\r
+            end;\r
+\r
+      writeln;\r
+      clreol;\r
+      for i:=1 to 79 do\r
+        write('=');\r
+      writeln;\r
+      clreol;\r
+\r
+      cursor_next_to_bottom;\r
+\r
+    end;  { with }\r
+\r
+end;  { look_around }\r
+\r
+\r
+\r
+procedure take_inventory;\r
+(*=====================*)\r
+var objcount  : integer;\r
+    obj       : objects;\r
+\r
+begin\r
+  with game_position do\r
+    begin\r
+      writeln;\r
+      writeln( 'I''m carrying: ');\r
+      objcount := 0;\r
+      for obj := first_object to last_object do\r
+        begin\r
+          if is_carried(obj) then\r
+            begin\r
+              objcount := objcount + 1;\r
+              writeln(object_name[obj]);\r
+            end;\r
+        end;\r
+      if objcount=0 then writeln('Nothing') else writeln;\r
+    end;\r
+\r
+end;  { take_inventory }\r
+\r
+\r
+\r
+procedure replace( object, replacement : str10; target : str120 );\r
+(*==============================================================*)\r
+var i : integer;\r
+begin\r
+  if object<>replacement then\r
+    repeat\r
+      i := pos( object, target );\r
+      if i>0 then\r
+        begin\r
+          delete( target, i, length(object) );\r
+          insert( replacement, target, i );\r
+        end;\r
+    until i=0;\r
+end;  { replace }\r
+\r
+\r
+procedure replace_with_space( object : str10; target : str120 );\r
+(*============================================================*)\r
+begin\r
+  replace( object, ' ', target );\r
+end;  { replace_with_space }\r
+\r
+\r
+procedure remove_leading_spaces( var str : str120 );\r
+(*================================================*)\r
+var i             : integer;\r
+    leading_space : boolean;\r
+begin\r
+  repeat\r
+    i := length(str);\r
+    leading_space := (i>0) and (str[1]=' ');\r
+    if leading_space then\r
+      delete( str,1,1);\r
+  until not leading_space;\r
+end;  { remove_leading_spaces }\r
+\r
+\r
+procedure remove_leading_spaces_and_periods( var str : str120 );\r
+(*============================================================*)\r
+var i                    : integer;\r
+    leading_space_period : boolean;\r
+begin\r
+  repeat\r
+    i := length(str);\r
+    leading_space_period := (i>0) and ( (str[1]=' ') or (str[1]='.') );\r
+    if leading_space_period then\r
+      delete( str,1,1);\r
+  until not leading_space_period;\r
+end;  { remove_leading_spaces_and_periods }\r
+\r
+\r
+procedure remove_trailing_spaces( var str : str120 );\r
+(*=================================================*)\r
+var i              : integer;\r
+    trailing_space : boolean;\r
+begin\r
+  repeat\r
+    i := length(str);\r
+    trailing_space := (i>0) and (str[1]=' ');\r
+    if trailing_space then\r
+      delete( str,i,1);\r
+  until not trailing_space;\r
+end;  { remove_trailing_spaces }\r
+\r
+\r
+procedure remove_multiple_spaces( var str : str120 );\r
+(*=================================================*)\r
+var i : integer;\r
+begin\r
+  repeat\r
+    i := pos( '  ', str );\r
+    if i>0 then\r
+      delete( str, i, 1 );\r
+  until i=0;\r
+end;  { remove_multiple_spaces }\r
+\r
+\r
+procedure expand_abbreviations( var str : str120 );\r
+(*===============================================*)\r
+var ch1 : char;\r
+    str4 : string[4];\r
+    i    : integer;\r
+begin\r
+  str4 := copy( str+'    ', 1, 4 );\r
+  for i:=1 to length(str4) do\r
+    str4[i] := upcase(str4[i]);\r
+  if str4 = 'INVE' then\r
+    str := 'I';\r
+  if length(str)=1 then\r
+    begin\r
+      ch1 := upcase(str[1]);\r
+           if ch1='I' then str := 'TAKE INVE'\r
+      else if ch1='N' then str := 'GO NORT'\r
+      else if ch1='S' then str := 'GO SOUT'\r
+      else if ch1='E' then str := 'GO EAST'\r
+      else if ch1='W' then str := 'GO WEST'\r
+      else if ch1='U' then str := 'GO UP'\r
+      else if ch1='D' then str := 'GO DOWN'\r
+      else if ch1='L' then str := 'LOOK';\r
+    end;\r
+end;  { expand abbreviations }\r
+\r
+\r
+procedure add_definite_article_to( var full_noun : str25 );\r
+(*=======================================================*)\r
+begin\r
+  if full_noun[1] in vowels then\r
+    full_noun := ' an ' + full_noun\r
+  else\r
+    full_noun := ' a '  + full_noun;\r
+end;\r
+\r
+\r
+procedure split_up_in_verb_and_noun( command : str120;\r
+                   var verb, noun : word_name_string;\r
+                   var full_verb, full_noun : str25 );\r
+(*==================================================*)\r
+const spaces = '    ';\r
+var i, p, k   : integer;\r
+    glue_word : boolean;\r
+    word      : word_name_string;\r
+    full_word : str25;\r
+begin\r
+  verb := spaces;\r
+  noun := spaces;\r
+  full_verb := '';\r
+  full_noun := '';\r
+  remove_leading_spaces(command);\r
+  for i:=1 to 2 do\r
+    begin\r
+      repeat\r
+        p := pos( ' ', command );\r
+        if p=0 then\r
+          begin\r
+            full_word := command;\r
+            command := '';\r
+          end\r
+        else\r
+          begin\r
+            full_word := copy ( command, 1, p-1 );\r
+            delete( command, 1, p );\r
+            remove_leading_spaces(command);\r
+          end;\r
+        word := full_word + spaces;\r
+        for k:=1 to length(word) do\r
+          word[k] := upcase(word[k]);\r
+        glue_word := false;\r
+        for k:=1 to gl_words do\r
+          if word=glue_words[k] then\r
+            glue_word := true;\r
+      until not glue_word;\r
+      if i=1 then\r
+        begin\r
+          verb := word;\r
+          full_verb := full_word;\r
+        end\r
+      else\r
+        begin\r
+          noun := word;\r
+          full_noun := full_word;\r
+        end;\r
+    end;  { for i:=1 to 2 do }\r
+  for i:=1 to syn_verbs do\r
+    if verb=syn_verb[i].orig then\r
+      verb := syn_verb[i].repl;\r
+  for i:=1 to syn_nouns do\r
+    if noun=syn_noun[i].orig then\r
+      noun := syn_noun[i].repl;\r
+end;  { split up in verb and noun }\r
+\r
+\r
+\r
+procedure read_and_parse_command( var verb, noun : word_name_string;\r
+                                  var full_verb, full_noun : str25 );\r
+(*=================================================================*)\r
+\r
+var i, sppos   : integer;\r
+    command    : str120;\r
+    command_ok : boolean;\r
+\r
+begin\r
+\r
+  repeat\r
+\r
+    if line_from_kbd='' then\r
+      begin\r
+        repeat\r
+          look_around;\r
+          repeat\r
+            writeln;\r
+            write( 'What shall I do? ' );\r
+            readln( line_from_kbd );\r
+            if line_from_kbd='' then\r
+              write_message('Beg pardon?');\r
+          until line_from_kbd<>'';\r
+          repeat\r
+            i := pos( '-', line_from_kbd );\r
+            if i>0 then\r
+              delete( line_from_kbd, i, 1 );\r
+          until i=0;\r
+          for i := 1 to length(line_from_kbd) do\r
+            begin\r
+              if line_from_kbd[i] in [ '!', '?', ',' ] then\r
+                line_from_kbd[i] := '.'\r
+              else if line_from_kbd[i] in [ '!'..'-', '/', ':'..'?' ] then\r
+                line_from_kbd[i] := ' ';\r
+            end;\r
+          remove_leading_spaces_and_periods(line_from_kbd);\r
+          remove_trailing_spaces(line_from_kbd);\r
+          remove_multiple_spaces(line_from_kbd);\r
+          if line_from_kbd=' ' then\r
+            line_from_kbd := '';\r
+          if line_from_kbd='' then\r
+            I_cant_do_that;\r
+        until line_from_kbd<>'';\r
+      end;\r
+\r
+\r
+    i := pos( '.', line_from_kbd );\r
+    if i>0 then\r
+      begin\r
+        command := copy( line_from_kbd, 1, i-1 );\r
+        delete( line_from_kbd, 1, i );\r
+        remove_leading_spaces_and_periods( line_from_kbd );\r
+        remove_trailing_spaces( command );\r
+      end\r
+    else\r
+      begin\r
+        command := line_from_kbd;\r
+        line_from_kbd := '';\r
+      end;\r
+\r
+    expand_abbreviations(command);\r
+\r
+    repeat\r
+      i := pos( '555', command );\r
+      if i>0 then\r
+        delete( command, i, 3 );\r
+    until i=0;\r
+\r
+    split_up_in_verb_and_noun( command, verb, noun, full_verb, full_noun );\r
+\r
+    command_ok := verb <> '    ';\r
+\r
+    if noun='LADY' then\r
+      begin\r
+        write_message('That''s no Lady!!!  That''s my sister!!!!');\r
+        command_ok := false;\r
+      end\r
+    else if verb='SAY ' then\r
+      begin\r
+        write_message('OK');\r
+        writeln( copy( command, 5, 120 ) );\r
+        command_ok := false;\r
+      end\r
+    else if (verb='TKAE') or (verb='TAEK') then\r
+      begin\r
+        write_message('Learn to spell, idiot!!!');\r
+        command_ok := false;\r
+      end;\r
+\r
+  until command_ok;\r
+\r
+\r
+end;    { read_and_parse_command }\r
+\r
+\1a
\ No newline at end of file
diff --git a/SOFTP4.INC b/SOFTP4.INC
new file mode 100644 (file)
index 0000000..5e7c44d
--- /dev/null
@@ -0,0 +1,721 @@
+{ Softporn Adventure, include file 4 }\r
+\r
+\r
+\r
+go :\r
+{========}\r
+  begin\r
+\r
+    if tied_to_bed then\r
+      write_message('But I''m tied to the bed!!!!!')\r
+\r
+    else if not no_direction then\r
+      begin\r
+\r
+        if (your_place=b_bedrm) and (direction=north) and\r
+           (not hooker_fucked) then\r
+          write_message\r
+            ('The Hooker says:  ''Don''t go there ... do me first!!''')\r
+\r
+        else if (your_place=c_hallwy) and (direction=south) and\r
+                (not married_to_girl) then\r
+          write_message('The door is locked shut!')\r
+\r
+        else if (your_place=d_entrnc) and (direction=west) and\r
+                (not door_W_open) then\r
+          write_message('The door is closed!')\r
+\r
+        else if (your_place=b_backrm) and (direction=up) and\r
+                (TV_channel<>6) then\r
+          begin\r
+            if (money<20) or (not is_carried(_wallet)) then\r
+              write_message('The Pimp says I can''t until I get $2000')\r
+            else if hooker_fucked then\r
+              write_message\r
+                ('The Pimp says ''No -- the hooker can''t take it anymore!''')\r
+            else\r
+              begin\r
+                write_message('The Pimp takes $2000 and says OK');\r
+                money := money - 20;\r
+                your_place := b_bedrm;\r
+              end\r
+          end\r
+\r
+        else if (your_place=b_balcny) and (direction=west) and\r
+                (not rope_in_use) then\r
+          falling_down\r
+\r
+        else\r
+          begin\r
+            new_place := path[your_place,direction];\r
+            if new_place <> nowhere then\r
+              begin\r
+                your_place := new_place;\r
+              end\r
+            else\r
+              I_cant_go_that_way;\r
+          end;\r
+      end\r
+\r
+    else\r
+      I_cant_do_that\r
+\r
+  end; {go}\r
+\r
+\r
+hail :\r
+{========}\r
+  begin\r
+\r
+    if noun<>_taxi then\r
+      write_message('Who are you kidding?  You''re pulling at straws, fool!!')\r
+\r
+    else if not (your_place in [ b_street, c_street, d_street ]) then\r
+      write_message('I''m not in the street, fool!!')\r
+\r
+    else\r
+      begin\r
+        write_long_message( 36 );\r
+        readln( taxi_destination );\r
+        while (length(taxi_destination)>0) and (taxi_destination[1]=' ') do\r
+          delete( taxi_destination, 1, 1 );\r
+        for i:=1 to length(taxi_destination) do\r
+          taxi_destination[i] := upcase(taxi_destination[i]);\r
+        taxi_destination := copy( taxi_destination+' ', 1, 4 );\r
+        if taxi_destination = 'DISC' then\r
+          new_place := d_street\r
+        else if taxi_destination = 'CASI' then\r
+          new_place := c_street\r
+        else if taxi_destination = 'BAR ' then\r
+          new_place := b_street\r
+        else\r
+          new_place := nowhere;\r
+        if new_place in [your_place,nowhere] then\r
+          write_message('Huh? - Hail another!')\r
+        else if is_carried(_wine) then\r
+          begin\r
+            wine_in_taxi;\r
+            your_place := new_place;\r
+            object_place[_wine] := nowhere;\r
+            objects_carried := objects_carried - 1;\r
+          end\r
+        else\r
+          begin\r
+            write_message('We arrive and I get out.');\r
+            your_place := new_place;\r
+          end;\r
+      end;\r
+\r
+  end; {hail}\r
+\r
+\r
+take : { get, grab }\r
+{========}\r
+  begin\r
+\r
+    if noun=_inventory then\r
+      begin\r
+        anything_carried := false;\r
+        for _noun:=first_object to last_object do\r
+          if is_carried(_noun) then\r
+            begin\r
+              if not anything_carried then\r
+                write_message('I''m carrying the following:');\r
+              anything_carried := true;\r
+              write(object_name[_noun]);\r
+              if (_noun=_wallet) and (money>0) then\r
+                writeln(' with $',money,'00')\r
+              else\r
+                writeln;\r
+            end;\r
+        if not anything_carried then\r
+          write_message('I''m not carrying anything!!');\r
+      end\r
+\r
+    else if noun=_off then\r
+      write_message('You''re not a bird, fool!!')\r
+\r
+    else if noun=_all then\r
+      begin\r
+        write_message('You hog!!!');\r
+        delay(300);\r
+        writeln;\r
+        for _noun:=first_object to last_object do\r
+          if is_here(_noun) then\r
+            begin\r
+              write(object_name[_noun],': ');\r
+              if objects_carried >= max_carried then\r
+                writeln('I''m carrying too much!!!')\r
+              else if _noun in takeable_objects then\r
+                begin\r
+                  if (your_place=d_phrmcy) and\r
+                     (_noun in [_magazine,_rubber]) then\r
+                    begin\r
+                      writeln('The man says ''Shoplifter!!'' and shoots me');\r
+                      purgatory;\r
+                    end\r
+                  else\r
+                    begin\r
+                      object_place[_noun] := youhavit;\r
+                      objects_carried := objects_carried + 1;\r
+                      if _noun=_water then pitcher_full := true;\r
+                      if (_noun=_pitcher) and pitcher_full then\r
+                        object_place[_water] := youhavit;\r
+                      writeln('Taken');\r
+                    end\r
+                end\r
+              else\r
+                cant_do_that;\r
+            end;\r
+        end\r
+\r
+    else if is_carried(noun) then\r
+      I_already_have_it\r
+\r
+    else if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else if objects_carried >= max_carried then\r
+      write_message('I''m carrying too much!!!')\r
+\r
+    else if not (noun in takeable_objects) then\r
+      I_cant_do_that\r
+\r
+    else if (your_place=d_phrmcy) and ( noun in [_magazine,_rubber] ) then\r
+      begin\r
+        write_message('The man says ''Shoplifter!!'' and shoots me');\r
+        purgatory;\r
+      end\r
+\r
+    else if (noun=_water) and (not is_carried(_pitcher)) then\r
+      write_message('Get me the pitcher so I don''t spill it!')\r
+\r
+    else if (noun=_candy) and (your_place=b_bedrm) and (not hooker_fucked) then\r
+          write_message\r
+            ('The Hooker says:  ''Don''t take it ... do me first!!''')\r
+\r
+    else if (noun=_rope) and rope_in_use then\r
+      write_message('It is tied to the balcony')\r
+\r
+    else\r
+      begin\r
+        OK;\r
+        object_place[noun] := youhavit;\r
+        objects_carried := objects_carried + 1;\r
+        if noun=_water then pitcher_full := true;\r
+        if (noun=_pitcher) and pitcher_full then\r
+          object_place[_water] := youhavit;\r
+      end\r
+\r
+  end; {take}\r
+\r
+\r
+drop : { leave, plant (seeds), give }\r
+{========}\r
+  begin\r
+\r
+    if noun in [_inventory,_taxi,_on,_off] then\r
+      huh\r
+\r
+    else if noun=_all then\r
+      begin\r
+        anything_carried := false;\r
+        writeln;\r
+        for _noun:=first_object to last_object do\r
+          if is_carried(_noun) then\r
+            begin\r
+              anything_carried := true;\r
+              writeln(object_name[_noun],': Dropped');\r
+              object_place[_noun] := your_place;\r
+              objects_carried := objects_carried - 1;\r
+            end;\r
+        if not anything_carried then\r
+          writeln('I did''t carry anything!!');\r
+      end\r
+\r
+    else if not is_carried(noun) then\r
+      I_dont_have_it\r
+\r
+    else\r
+      begin\r
+        object_place[noun] := your_place;\r
+        objects_carried := objects_carried - 1;\r
+        if (noun=_pitcher) and pitcher_full then\r
+          object_place[_water] := your_place\r
+        else if noun=_rubber then\r
+          rubber_worn := false\r
+        else if (your_place=d_disco) and (is_here(_girl)) and\r
+           (noun in [_candy,_flowers,_ring]) then\r
+          begin\r
+            case noun of\r
+              _candy:\r
+                begin\r
+                  write_message('She smiles and eats a couple!!');\r
+                  candy_given := true;\r
+                end;\r
+              _flowers:\r
+                begin\r
+                  write_message\r
+                     ('She blushes profusely and puts them in her hair!');\r
+                  flowers_given := true;\r
+                  object_place[_flowers] := nowhere;\r
+                end;\r
+              _ring:\r
+                begin\r
+                  write_message('She blushes and puts it in her purse.');\r
+                  ring_given := true;\r
+                  object_place[_ring] := nowhere;\r
+                end;\r
+            end; { case noun of }\r
+            if candy_given and flowers_given and ring_given then\r
+              begin\r
+                write_message\r
+                  ('She says: ''See you at the Marriage Center!!''');\r
+                object_place[_girl] := c_marryc;\r
+              end;\r
+          end\r
+        else if is_here(_bum) and (noun=_wine) then\r
+          begin\r
+            if object_place[_knife]=nowhere then\r
+              begin\r
+                bum_tells_story;\r
+                object_place[_knife] := your_place;\r
+              end\r
+            else\r
+              write_message('The bum mutters ' +\r
+                    '''That stuff made me puke!!  Get out of here!!!''');\r
+          end\r
+        else if is_here(_businessman) and (noun=_whiskey) and\r
+                (object_place[_control_unit]=nowhere) then\r
+          begin\r
+            write_message('The guy gives me a TV controller!!');\r
+            object_place[_control_unit] := your_place;\r
+          end\r
+        else if is_here(_blonde) and (noun=_pills) then\r
+          begin\r
+            write_long_message( 57 );\r
+            object_place[_blonde] := nowhere;\r
+            object_place[_pills] := nowhere;\r
+          end\r
+        else if (noun=_apple) and (your_place=p_jacuzi) and is_here(_girl) then\r
+          begin\r
+            write_long_message( 50 );\r
+            apple_given := true;\r
+          end\r
+        else\r
+          OK;\r
+      end;\r
+\r
+  end; {drop}\r
+\r
+\r
+look : { search, examine, read, watch }\r
+{========}\r
+  begin\r
+\r
+    if no_object then\r
+      write_long_message( integer(your_place)+1 )\r
+\r
+    else if noun=_all then\r
+      write_message('That''s too much, one item at a time, please!!')\r
+\r
+    else if noun in [_inventory,_on,_off] then\r
+      huh\r
+\r
+    else if (not is_here(noun)) and\r
+            (not is_carried(noun)) then\r
+      find_me_one\r
+\r
+    else\r
+      case noun of\r
+\r
+      _desk:\r
+        begin\r
+          if drawer_open then\r
+            I_see_something(_newspaper,'')\r
+          else\r
+            write_message('It''s drawer is shut');\r
+        end;\r
+\r
+      _washbasin:\r
+         I_see_something(_ring,'Dead cockroaches...');\r
+\r
+      _graffiti:\r
+        look_graffiti;\r
+\r
+      _mirror:\r
+        write_message('There''s a pervert looking back at me!!');\r
+\r
+      _toilet:\r
+        write_message('Hasn''t been flushed in ages!  Stinks!!!');\r
+\r
+      _businessman:\r
+        write_message('He looks like a whiskey drinker to me!!');\r
+\r
+      _button:\r
+        write_message('Says Push.');\r
+\r
+      _bartender:\r
+        write_message('He''s waiting for me to buy something!');\r
+\r
+      _pimp:\r
+        begin\r
+          write_message('He''s wearing a button proclaiming -- ' +\r
+                        'Support your local Pimp, gimme $2000!!!');\r
+        end;\r
+\r
+      _hooker:\r
+        write_long_message( 31 );\r
+\r
+      _billboard:\r
+        write_long_message( 63 );\r
+\r
+      _TV:\r
+        begin\r
+         if not is_carried(_control_unit) then\r
+           write_message('To watch TV, I need the remote control unit!!')\r
+         else if not hooker_fucked then\r
+           write_message('The Pimp says I can''t watch TV')\r
+         else\r
+           watch_TV( TV_channel );\r
+        end;\r
+\r
+      _slot_machines:\r
+        write_message('Playing them might be more fun....');\r
+\r
+      _ashtray:\r
+        I_see_something(_passcard,'');\r
+\r
+      _blonde:\r
+        write_long_message( 40 );\r
+\r
+      _bum:\r
+        write_message\r
+          ('He grumbles -- I''ll tell you a story for a bottle of wine.....');\r
+\r
+      _peephole:\r
+        if hole_peeped then\r
+          write_message ('All windows at the hotel across the road ' +\r
+                         'have their curtains shut.')\r
+        else\r
+          begin\r
+            write_long_message( 55 );\r
+              hole_peeped := true;\r
+          end;\r
+\r
+      _door_west:\r
+        begin\r
+          if door_W_open then\r
+            write_message('The door is open')\r
+          else\r
+            begin\r
+              write_message('The sign on the door says ');\r
+              writeln('''Entry by showing passcard - ' +\r
+                       'Club members and their guests only!''');\r
+            end\r
+        end;\r
+\r
+      _waitress:\r
+        write_message('She ignores you!');\r
+\r
+      _telephone:\r
+        begin\r
+          if your_place=d_telbth then\r
+            write_message('A number is there - Call 555-6969 for a good time!')\r
+          else\r
+            I_see_nothing_special\r
+        end;\r
+\r
+      _closet:\r
+        begin\r
+          if closet_open then\r
+            I_see_something(_doll,'It''s open')\r
+          else\r
+            write_message('It''s closed')\r
+        end;\r
+\r
+      _sink:\r
+        write_message\r
+            ('The sign over the sink says ''Water on or off to operate''');\r
+\r
+      _elevator:\r
+        write_message('It''s doors are closed');\r
+\r
+      _dealer:\r
+        write_message('He''s waiting for me to play');\r
+\r
+      _cabinet:\r
+        begin\r
+          if stool_climbed then\r
+            begin\r
+              if cabinet_open then\r
+                I_see_something(_pitcher,'It''s open')\r
+              else\r
+                write_message('It''s closed');\r
+            end\r
+          else\r
+            I_see_nothing_special\r
+        end;\r
+\r
+      _bushes:\r
+        write_message('Entering them would be kinky!!!!');\r
+\r
+      _tree:\r
+        I_see_something(_apple,'');\r
+\r
+      _sign:\r
+        write_message('It says ''Hail taxi here''');\r
+\r
+      _girl:\r
+        begin\r
+          if your_place=p_jacuzi then\r
+            write_long_message( 35 )\r
+          else if (your_place=d_disco) or (your_place=c_marryc) then\r
+            write_long_message( 34 )\r
+          else\r
+            write_message('She slaps me and yells ''Pervert!!!!!''')\r
+        end;\r
+\r
+      _newspaper:\r
+        begin\r
+          if is_carried(_newspaper) then\r
+            write_long_message( 32 )\r
+          else\r
+            I_dont_have_it\r
+        end;\r
+\r
+      _garbage:\r
+        I_see_something(_apple_core,'');\r
+\r
+      _flowers:\r
+        write_message('They look beautiful!!!');\r
+\r
+      _apple_core:\r
+        I_see_something(_seeds,'');\r
+\r
+      _pills:\r
+        begin\r
+          write_message('The label on the bottle says');\r
+          writeln('''Want to drive someone crazy with lust??  Try this!!!!''');\r
+        end;\r
+\r
+      _plant:\r
+        begin\r
+          if object_place[_bushes]=nowhere then\r
+            begin\r
+              write_message('There''s a group of bushes behind it!!');\r
+              object_place[_bushes] := your_place;\r
+            end\r
+          else\r
+            I_see_nothing_special\r
+        end;\r
+\r
+      _radio:\r
+        write_message('Maybe I should listen...');\r
+\r
+      _magazine:\r
+        begin\r
+          if is_carried(_magazine) then\r
+            write_long_message( 33 )\r
+          else\r
+            I_dont_have_it\r
+        end;\r
+\r
+      _rubber:\r
+        begin\r
+          if is_carried(_rubber) then\r
+            write_message('It''s ' + rubber_color + ', ' + rubber_flavor +\r
+              '-flavored, ' + rubber_lubricated + ', and ' + rubber_ribbed )\r
+          else\r
+            I_dont_have_it\r
+        end;\r
+\r
+      _wallet:\r
+        begin\r
+          if money>0 then\r
+            begin\r
+              writeln;\r
+              writeln('It contains $',money,'00.');\r
+            end\r
+          else\r
+            write_message('It''s empty');\r
+        end;\r
+\r
+      _doll:\r
+        begin\r
+          if doll_inflated then\r
+            write_message('It''s inflated')\r
+          else\r
+            write_message('It''s rolled up in a little ball');\r
+        end;\r
+\r
+      _pitcher:\r
+        begin\r
+          if pitcher_full then\r
+            write_message('It''s full of water')\r
+          else\r
+            write_message('It''s empty');\r
+        end;\r
+\r
+      _rack:\r
+        I_see_something(_magazine,'');\r
+\r
+      _curtain:\r
+        write_message('It''s on the east wall');\r
+\r
+      else\r
+        I_see_nothing_special;\r
+\r
+      end; {case noun of}\r
+\r
+  end; {look}\r
+\r
+\r
+flush :\r
+{========}\r
+  begin\r
+\r
+    if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else if noun=_toilet then\r
+      begin\r
+        write_long_message( 69 );\r
+        delay(300);\r
+        write_message('I''m dead from the germs!!');\r
+        purgatory;\r
+      end\r
+    else\r
+      I_cant_do_that\r
+\r
+  end; {flush}\r
+\r
+\r
+open : { pull }\r
+{========}\r
+  begin\r
+\r
+    if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else case noun of\r
+\r
+      _window:\r
+        write_message('Won''t budge');\r
+\r
+      _desk:\r
+        _open(drawer_open);\r
+\r
+      _door_west:\r
+        begin\r
+          if door_W_open then\r
+            write_message('It''s already open!!')\r
+          else\r
+            begin\r
+              write_message\r
+                 ('A voice asks ''Passcard?''  I search in my pockets and...');\r
+              if is_carried(_passcard) then\r
+                begin\r
+                  writeln('I have it!  The door opens!');\r
+                  door_W_open := true;\r
+                  path[d_entrnc,west] := d_disco;\r
+                end\r
+              else\r
+                writeln('I don''t have it!!');\r
+            end;\r
+        end;\r
+\r
+      _curtain:\r
+        write_message('It seems to be remotely controlled');\r
+\r
+      _elevator:\r
+        write_message('Push the button to open elevator');\r
+\r
+      _closet:\r
+        _open(closet_open);\r
+\r
+      _cabinet:\r
+        if stool_climbed then\r
+          _open(cabinet_open)\r
+        else\r
+          write_message('I can''t reach it!!');\r
+\r
+      else\r
+        I_cant_do_that\r
+\r
+    end;\r
+\r
+  end; {open}\r
+\r
+\r
+inflate :\r
+{========}\r
+  begin\r
+\r
+    if noun=_doll then\r
+      begin\r
+        if is_carried(_doll) then\r
+          begin\r
+            if doll_inflated then\r
+              write_message('You''ve already inflated it, stupid!!')\r
+            else\r
+              begin\r
+                OK;\r
+                doll_inflated := true;\r
+              end;\r
+          end\r
+        else if is_here(_doll) then\r
+          write_message('I can''t unless I''m holding it close')\r
+        else\r
+          find_me_one;\r
+      end\r
+\r
+    else\r
+      write_message('But the prime rate is already 257%!!');\r
+\r
+  end; {inflate}\r
+\r
+\r
+play :\r
+{========}\r
+  begin\r
+\r
+    if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else if noun=_slot_machines then\r
+      begin\r
+        if is_here(_slot_machines) then\r
+          begin\r
+            if (money>0) and (is_carried(_wallet)) then\r
+              play_slot( money )\r
+            else\r
+              sorry_no_money\r
+          end\r
+        else\r
+          write_message('OK, show me your slot....');\r
+      end\r
+\r
+    else if noun=_cards then\r
+      begin\r
+        if your_place=c_21room then\r
+          begin\r
+            if (money>0) and (is_carried(_wallet)) then\r
+              play_21( money )\r
+            else\r
+              sorry_no_money\r
+          end\r
+        else\r
+          not_yet_but_maybe_later;\r
+      end\r
+\r
+    else\r
+      write_message('Playful bugger, eh??');\r
+\r
+  end; {play}\r
+\r
+\r
+\r
+\r\r
+\r
+\r\1a
\ No newline at end of file
diff --git a/SOFTP5.INC b/SOFTP5.INC
new file mode 100644 (file)
index 0000000..01ba607
--- /dev/null
@@ -0,0 +1,456 @@
+{ Softporn Adventure, include file 5 }\r
+\r
+\r
+\r
+press : { push }\r
+{========}\r
+  begin\r
+\r
+    if noun=_button then\r
+      begin\r
+        if your_place=b_bar then\r
+          begin\r
+            writeln;\r
+            write('A voice says  ''What''s the password?''  (one word) ');\r
+            readln(password);\r
+            for i:=1 to length(password) do\r
+              password[i] := upcase(password[i]);\r
+            if copy(password,1,6)='BELLYB' then\r
+              begin\r
+                write_message('The curtain pulls back!!');\r
+                path[b_bar,east] := b_backrm;\r
+              end\r
+            else\r
+              write_message('Wrong!!');\r
+          end\r
+        else if your_place in [ c_htdesk, p_pntfoy ] then\r
+          begin\r
+            if is_here(_blonde) then\r
+              write_message('The blonde says  ''You can''t go there!''')\r
+            else\r
+              begin\r
+                write_long_message( 37 );\r
+                if your_place=c_htdesk then\r
+                  your_place := p_pntfoy\r
+                else\r
+                  your_place := c_htdesk;\r
+              end;\r
+          end\r
+        else\r
+          not_yet_but_maybe_later\r
+      end {press/push button}\r
+\r
+    else\r
+      write_message('Pushy chump, eh???');\r
+\r
+  end; {press}\r
+\r
+\r
+enter :\r
+{========}\r
+  begin\r
+\r
+    if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else if noun=_bushes then\r
+      your_place := p_garden\r
+\r
+    else if noun=_window then\r
+      begin\r
+        if window_broken then\r
+          your_place := b_inroom\r
+        else\r
+          not_yet_but_maybe_later;\r
+      end\r
+\r
+    else if noun=_door_west then\r
+      begin\r
+        if door_W_open then\r
+          your_place := d_disco\r
+        else\r
+          write_message('The door is closed')\r
+      end\r
+\r
+    else if noun=_elevator then\r
+      write_message('Push the button to enter the elevator')\r
+\r
+    else\r
+      I_cant_do_that\r
+\r
+  end; {enter}\r
+\r
+\r
+eat :\r
+{========}\r
+  begin\r
+\r
+    if (not is_here(noun)) and (not is_carried(noun)) then\r
+      find_me_one\r
+\r
+    else if noun in [ _blonde, _waitress, _hooker, _girl ] then\r
+      begin\r
+        write_long_message( 38 );\r
+        purgatory;\r
+      end\r
+\r
+    else if noun=_mushroom then\r
+      begin\r
+        write_long_message( 64 );\r
+        your_place := places( random(3) );\r
+        delay(600);\r
+        write_long_message( integer(your_place)+1 );\r
+      end\r
+\r
+    else if noun in [ _garbage, _apple_core ] then\r
+      write_message('Too moldy!')\r
+\r
+    else if noun=_apple then\r
+      write_message('Sorry ... not hungry!')\r
+\r
+    else if noun=_pills then\r
+      begin\r
+        write_long_message( 56 );\r
+        purgatory;\r
+      end\r
+\r
+    else\r
+      write_message('Tastes awful!');\r
+\r
+  end; {eat}\r
+\r
+\r
+drink :\r
+{========}\r
+  begin\r
+\r
+    if not is_carried(noun) then\r
+      I_dont_have_it\r
+\r
+    else\r
+      begin\r
+        case noun of\r
+          _whiskey: write_message\r
+            ('This stuff is rot-gut!  Give it to someone ... I don''t want it.');\r
+          _beer:    write_message('Heh...heh...hey!!!!  This stuff''s OK!');\r
+          _wine:    write_message('Sour grapes....');\r
+          _water:   write_message('Thanks!');\r
+          else      write_message('Get your head examined!!!!');\r
+        end;\r
+        if noun in [_beer,_water] then\r
+          begin\r
+            object_place[noun] := nowhere;\r
+            objects_carried := objects_carried - 1;\r
+          end;\r
+      end;\r
+\r
+  end;\r
+\r
+\r
+buy : { order }\r
+{========}\r
+  begin\r
+\r
+    if (money<1) or (not is_carried(_wallet)) then\r
+      sorry_no_money\r
+    else\r
+\r
+      case noun of\r
+\r
+        _whiskey,_beer:\r
+          begin\r
+            if (your_place<>b_bar) then\r
+              not_yet_but_maybe_later\r
+            else\r
+              begin\r
+                if object_place[noun]<>nowhere then\r
+                  write_message('Sorry ... all out!')\r
+                else\r
+                  begin\r
+                    write_message ('I give the bartender $100 and ' +\r
+                                   'he places it on the bar.');\r
+                    money := money - 1;\r
+                    object_place[noun] := your_place;\r
+                  end;\r
+              end\r
+          end;\r
+\r
+        _wine:\r
+          begin\r
+            if (your_place<>d_disco) then\r
+              not_yet_but_maybe_later\r
+            else\r
+              begin\r
+                if object_place[noun]<>nowhere then\r
+                  write_message('All out!')\r
+                else\r
+                  begin\r
+                    write_message\r
+                        ('The waitress takes $100 and says she''ll return');\r
+                    delay(3000);\r
+                    write_message('Poor service!!!');\r
+                    delay(2000);\r
+                    money := money - 1;\r
+                    object_place[noun] := your_place;\r
+                  end;\r
+              end\r
+          end;\r
+\r
+        _rubber,_magazine:\r
+          begin\r
+            if (your_place<>d_phrmcy) then\r
+              not_yet_but_maybe_later\r
+            else\r
+              begin\r
+                if is_here(noun) then\r
+                  begin\r
+                    if noun=_rubber then\r
+                      buy_rubber\r
+                    else\r
+                      write_message('He takes $100 and gives me the magazine');\r
+                    money := money - 1;\r
+                    object_place[noun] := youhavit;\r
+                  end\r
+                else\r
+                  write_message('Sorry!!! --- sold out!');\r
+              end\r
+          end;\r
+\r
+        _hooker:\r
+          begin\r
+            if is_here(_hooker) then\r
+              write_message('You''ve already paid the pimp, stupid!!!!')\r
+            else\r
+              find_me_one;\r
+          end;\r
+\r
+        else\r
+          write_message('Money can''t buy everything!!!!');\r
+\r
+      end; {case}\r
+\r
+  end; {buy}\r
+\r
+\r
+climb :\r
+{========}\r
+  begin\r
+\r
+    if noun=_stool then\r
+      begin\r
+        if is_here(_stool) then\r
+          begin\r
+            OK;\r
+            stool_climbed := true;\r
+          end\r
+        else\r
+          write_message('It''s not on the floor here!');\r
+      end\r
+\r
+    else if is_here(noun) or is_carried(noun) then\r
+     I_cant_do_that\r
+\r
+    else\r
+      find_me_one;\r
+\r
+  end; {climb}\r
+\r
+\r
+water :\r
+{========}\r
+  begin\r
+\r
+    if noun in [_on,_off] then\r
+      begin\r
+        if not is_here(_sink) then\r
+          write_message('Find a working sink!')\r
+        else\r
+          begin\r
+            water_on := noun=_on;\r
+            if water_on then\r
+              begin\r
+                write_message('Water is running in the sink');\r
+                object_place[_water] := your_place;\r
+              end\r
+            else if not pitcher_full then\r
+              begin\r
+                OK;\r
+                object_place[_water] := nowhere;\r
+              end;\r
+          end;\r
+      end\r
+\r
+    else if not is_carried(_water) then\r
+      write_message('I have no water!')\r
+\r
+    else if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else if noun=_seeds then\r
+      begin\r
+        object_place[_water] := nowhere;\r
+        pitcher_full := false;\r
+        if your_place=p_garden then\r
+          begin\r
+            write_message('A tree sprouts!!');\r
+            object_place[_tree] := your_place;\r
+            object_place[_seeds] := nowhere;\r
+          end\r
+        else\r
+          write_message('The seeds need better soil to grow.');\r
+      end\r
+\r
+    else\r
+      begin\r
+        write_message('It pours into the ground.');\r
+        object_place[_water] := nowhere;\r
+        pitcher_full := false;\r
+      end;\r
+\r
+  end; {water}\r
+\r
+\r
+fill :\r
+{========}\r
+  begin\r
+\r
+    if not (noun=_pitcher) then\r
+      I_cant_do_that\r
+\r
+    else if not is_carried(_pitcher) then\r
+      write_message('I don''t have it!')\r
+\r
+    else if not is_here(_sink) then\r
+      write_message('Find a working sink!!')\r
+\r
+    else if not water_on then\r
+      write_message('No water!!')\r
+\r
+    else if pitcher_full then\r
+      write_message('The pithcer is already full!')\r
+\r
+    else\r
+      begin\r
+        OK;\r
+        pitcher_full := true;\r
+      end\r
+\r
+  end; {fill}\r
+\r
+\r
+pour :\r
+{========}\r
+  begin\r
+\r
+    if not (noun=_water) then\r
+      I_cant_do_that\r
+\r
+    else if not is_carried(_pitcher) then\r
+      write_message('You have nothing to pour it with!')\r
+\r
+    else if not pitcher_full then\r
+      write_message('The pitcher is empty.')\r
+\r
+    else if (your_place<>p_garden) or (not is_here(_seeds)) then\r
+      write_message('It pours into the ground.')\r
+\r
+    else\r
+      begin\r
+        write_message('A tree sprouts!!');\r
+        object_place[_tree] := your_place;\r
+      end\r
+  end; {pour}\r
+\r
+\r
+listen :\r
+{========}\r
+  begin\r
+\r
+    if (not is_here(noun)) and (not is_carried(noun)) then\r
+      find_me_one\r
+\r
+    else if noun=_radio then\r
+      begin\r
+        if is_carried(_radio) then\r
+          begin\r
+            if radio_listened then\r
+              write_message('Punk rock!!!!!')\r
+            else\r
+              begin\r
+                write_message('An advertisement says  ' +\r
+                            '''Call 555-0987 for all your liquor needs!!!!''');\r
+                radio_listened := true;\r
+              end;\r
+          end\r
+        else\r
+          write_message('Take it and put it next to my ear!');\r
+      end\r
+\r
+    else\r
+      write_message('Quiet as a mouse in heat!');\r
+\r
+  end; {listen}\r
+\r
+\r
+close :\r
+{========}\r
+  begin\r
+\r
+    if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else case noun of\r
+\r
+      _desk:\r
+        begin\r
+          _close(drawer_open);\r
+          if is_here(_newspaper) then\r
+            object_place[_newspaper] := nowhere;\r
+        end;\r
+\r
+      _closet:\r
+        begin\r
+          _close(closet_open);\r
+          if is_here(_doll) then\r
+            object_place[_doll] := nowhere;\r
+        end;\r
+\r
+      _cabinet:\r
+        if stool_climbed then\r
+          begin\r
+            _close(cabinet_open);\r
+            if is_here(_pitcher) then\r
+              object_place[_pitcher] := nowhere;\r
+          end\r
+        else\r
+          write_message('I can''t reach it!');\r
+\r
+      _door_west:\r
+        begin\r
+          _close(door_W_open);\r
+          path[d_entrnc,west] := nowhere;\r
+        end;\r
+      else\r
+        I_cant_do_that;\r
+\r
+    end;\r
+\r
+  end; {close}\r
+\r
+\r
+jump :\r
+{========}\r
+  begin\r
+\r
+    if your_place in [ b_balcny, b_wledge ] then\r
+      falling_down\r
+\r
+    else\r
+      write_message('Whoooopeeeee!!!');\r
+\r
+  end; {jump}\r
+\r
+\r
+\r
+\r
+\r\1a
\ No newline at end of file
diff --git a/SOFTP6.INC b/SOFTP6.INC
new file mode 100644 (file)
index 0000000..4a0dc37
--- /dev/null
@@ -0,0 +1,581 @@
+{ Softporn Adventure, include file 6 }\r
+\r
+\r
+\r
+marry :\r
+{========}\r
+  begin\r
+\r
+    if noun<>_girl then\r
+      write_message('No way, weirdo!!')\r
+\r
+    else if not is_here(_girl) then\r
+      write_message('No girl!!')\r
+\r
+    else if your_place<>c_marryc then\r
+      not_yet_but_maybe_later\r
+\r
+    else if (money<30) or (not is_carried(_wallet)) then\r
+      begin\r
+        if (money<20) or (not is_carried(_wallet)) then\r
+          write_message( 'The girl says: ' +\r
+              '''But you''ll need $2000 for the honeymoon suite!''');\r
+        write_message('The preacher says ''I''ll need $1000 too!!''');\r
+      end\r
+    else\r
+      begin\r
+        write_long_message( 66 );\r
+        money := money - 30;\r
+        object_place[_girl] := c_hmoons;\r
+        married_to_girl := true;\r
+        path[c_hallwy,south] := c_hmoons;\r
+      end;\r
+\r
+  end; {marry}\r
+\r
+\r
+fuck : { seduce, rape, screw }\r
+{========}\r
+  begin\r
+\r
+    if (not is_here(noun)) and (not is_carried(noun)) and (noun<>_you) then\r
+      find_me_one\r
+\r
+    else case noun of\r
+\r
+      _hooker:\r
+        begin\r
+          if hooker_fucked then\r
+            write_message('She can''t take it any more!!!!')\r
+          else\r
+            begin\r
+              if rubber_worn then\r
+                begin\r
+                  hooker_fucked := true;\r
+                  score := score + 1;\r
+                  write_long_message( 51 )\r
+                end\r
+              else\r
+                begin\r
+                  write_message('Oh no!!! ' +\r
+                    'I''ve got the dreaded atomic clap!!! I''m dead!!');\r
+                  purgatory;\r
+                end\r
+            end;\r
+        end;\r
+\r
+      _doll:\r
+        begin\r
+          if is_carried(_doll) then\r
+            if doll_inflated then\r
+              begin\r
+                write_long_message( 52 );\r
+                object_place[_doll] := nowhere;\r
+                objects_carried := objects_carried - 1;\r
+              end\r
+            else\r
+              write_message('Inflate it first -- stupid!!!')\r
+          else\r
+            write_message('I can''t unless I''m holding it close');\r
+        end;\r
+\r
+      _girl:\r
+        begin\r
+          case your_place of\r
+            c_hmoons:\r
+              begin\r
+                if wine_ordered then\r
+                  begin\r
+                    write_long_message( 54 );\r
+                    girl_2_fucked := true;\r
+                    score := score + 1;\r
+                    tied_to_bed := true;\r
+                    object_place[_girl] := p_jacuzi;\r
+                    object_place[_rope] := your_place;\r
+                  end\r
+                else\r
+                  write_message('She says  ''Get me wine!!!  I''m nervous!!''');\r
+              end;\r
+            p_jacuzi:\r
+              begin\r
+                if apple_given then\r
+                  begin\r
+                    score := score + 1;\r
+                    write_long_message( 53 );\r
+                    game_ended := true;\r
+                  end\r
+                else\r
+                  not_yet_but_maybe_later\r
+              end;\r
+            else  not_yet_but_maybe_later\r
+          end; { case your_place of }\r
+        end;\r
+\r
+      _bartender:\r
+        begin\r
+          write_message('He jumps over the bar and kills me!!');\r
+          purgatory;\r
+        end;\r
+\r
+      _you:      write_message('Not tonight -- I have a headache!!');\r
+      _waitress: write_message\r
+                ('She kicks me in the groin and says ''Wise up - Buster!!''');\r
+      _blonde:   write_message('She says ''I''m working! Leave me alone!!''');\r
+      _pimp:     write_message('He says ''You''ll never have enough money ' +\r
+                               'for me - fool!''.  I guess he''s gay!');\r
+      _bum:      write_message('To do that I need vaseline!!');\r
+      _businessman: write_message('No way!!!  You''re weird!!');\r
+      _off:      write_message('Fuck off yourself, asshole!!!');\r
+\r
+      else       write_message('Pervert!');\r
+\r
+    end;  { case noun of }\r
+\r
+  end; {fuck}\r
+\r
+\r
+wear : { use }\r
+{========}\r
+  begin\r
+\r
+    if (not is_here(noun)) and (not is_carried(noun)) and (noun<>_knife) then\r
+      find_me_one\r
+\r
+    else case noun of\r
+\r
+      _rubber:\r
+        begin\r
+          write_message('It tickles!!');\r
+          rubber_worn := true;\r
+          object_place[_rubber] := youhavit;\r
+        end;\r
+\r
+      _toilet:\r
+        begin\r
+          write_message('.....I got those constipation blues..........');\r
+          writeln('Ahhh...relief! Thanks');\r
+        end;\r
+\r
+      _bed:\r
+        begin\r
+          write_message('Ahhhhh.......sleep!!!!');\r
+          delay(1000);\r
+          writeln('No, I can''t sleep!  Have to find me a girl!!!!');\r
+        end;\r
+\r
+      _rope:\r
+        begin\r
+          if is_carried(_rope) then\r
+            begin\r
+              if your_place=b_balcny then\r
+                begin\r
+                  object_place[_rope] := your_place;\r
+                  rope_in_use := true;\r
+                  write_message('You tie the safety rope to the balcony');\r
+                end\r
+              else\r
+                not_yet_but_maybe_later\r
+            end\r
+          else\r
+            I_dont_have_it\r
+        end;\r
+\r
+      _passcard:\r
+        begin\r
+          if is_carried(_passcard) then\r
+            begin\r
+              if your_place=d_entrnc then\r
+                begin\r
+                  write_message('I show my passcard and the door opens');\r
+                  path[d_entrnc,west] := d_disco;\r
+                end\r
+              else\r
+                not_yet_but_maybe_later\r
+            end\r
+          else\r
+            I_dont_have_it\r
+        end;\r
+\r
+      _knife:\r
+        begin\r
+          write_message('Let me see if I still have the knife!');\r
+          delay(600);\r
+          if is_carried(_knife) then\r
+            begin\r
+              if tied_to_bed then\r
+                begin\r
+                  write_message('I do and it worked! Thanks!');\r
+                  tied_to_bed := false;\r
+                end\r
+              else\r
+                begin\r
+                  write_message('Samurai sex fiend!!!!!!!!!!!!!!!!!!!');\r
+                  delay(600);\r
+                  writeln('I stab myself in extacy!');\r
+                  purgatory;\r
+                end;\r
+            end\r
+          else\r
+            I_dont_have_it\r
+        end;\r
+\r
+      else\r
+        I_cant_do_that\r
+\r
+    end;\r
+\r
+  end; {wear/use}\r
+\r
+\r
+answer :\r
+{========}\r
+  begin\r
+\r
+    if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else if noun<>_telephone then\r
+      I_cant_do_that\r
+\r
+    else if telephone_ringing then\r
+      begin\r
+        writeln;\r
+        writeln('A girl says  ''Hi honey!  This is ',girl_name,'. Dear, why');\r
+        writeln('don''t you forget this game and ',girl_do,' with me????');\r
+        writeln('After all, your ',your_part,' has always turned me on!!!!');\r
+        writeln('So bring a ',your_object,' and come play with my ',girl_part,\r
+                '!''');\r
+        writeln('She hangs up!');\r
+        telephone_ringing := false;\r
+        telephone_answered := true;\r
+      end\r
+\r
+    else\r
+      write_message('It''s not ringing!');\r
+\r
+  end; {answer}\r
+\r
+\r
+call : { dial }\r
+{========}\r
+  begin\r
+\r
+    if your_place=p_pntpch then\r
+      write_message('This only takes incoming calls!!')\r
+\r
+    else if (full_noun='6969') and (not called_555_6969) then\r
+      begin\r
+        writeln;\r
+        writeln('A voice says ''Hello, please answer the questions ',\r
+                'with one word answers:');\r
+        write('What''s your favorite girls name?  '); readln(girl_name);\r
+        write('Name a nice part of her anatomy!  ');  readln(girl_part);\r
+        write('What do you like to do with her?  ');  readln(girl_do);\r
+        write('And the best part of your body?   ');  readln(your_part);\r
+        write('Finally, your favorite object?    ');  readln(your_object);\r
+        writeln('He hangs up!');\r
+        called_555_6969 := true;\r
+        for i:=1 to length(girl_name) do\r
+          girl_name[i] :=locase(girl_name[i]);\r
+        girl_name[1] := upcase(girl_name[1]);\r
+        for i:=1 to length(girl_part) do\r
+          girl_part[i] :=locase(girl_part[i]);\r
+        for i:=1 to length(girl_do) do\r
+          girl_do[i] :=locase(girl_do[i]);\r
+        for i:=1 to length(your_part) do\r
+          your_part[i] :=locase(your_part[i]);\r
+        for i:=1 to length(your_object) do\r
+          your_object[i] :=locase(your_object[i]);\r
+      end\r
+\r
+    else if (full_noun='0439') and (not called_555_0439) then\r
+      begin\r
+        write_long_message( 67 );\r
+        called_555_0439 := true;\r
+      end\r
+\r
+    else if (full_noun='0987') and married_to_girl and\r
+            (not called_555_0987) then\r
+      begin\r
+        write_long_message( 68 );\r
+        wine_ordered := true;\r
+        called_555_0987 := true;\r
+        object_place[_wine] := c_hmoons;\r
+      end\r
+\r
+    else\r
+      write_message('Nobody answers');\r
+\r
+  end; {call/dial}\r
+\r
+\r
+break : { smash }\r
+{========}\r
+  begin\r
+\r
+    if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else if noun=_window then\r
+      begin\r
+        write_message('Let me see if I have a hammer');\r
+        delay(400);\r
+        if is_carried(_hammer) then\r
+          begin\r
+            write_message('The window smashes to pieces');\r
+            path[b_wledge,south] := b_inroom;\r
+          end\r
+        else\r
+          I_dont_have_it\r
+      end\r
+\r
+    else\r
+      I_cant_do_that\r
+\r
+  end; {break/smash}\r
+\r
+\r
+cut :\r
+{========}\r
+  begin\r
+\r
+    write_message('Let me see if I still have the knife!');\r
+    delay(600);\r
+\r
+    if is_carried(_knife) then\r
+      begin\r
+        if (noun=_rope) and tied_to_bed then\r
+          begin\r
+            write_message('I do and it worked! Thanks!');\r
+            tied_to_bed := false;\r
+          end\r
+        else\r
+          begin\r
+            write_message('Samurai sex fiend!!!!!!!!!!!!!!!!!!!');\r
+            delay(600);\r
+            writeln('I stab myself in extacy!');\r
+            purgatory;\r
+          end;\r
+      end\r
+\r
+    else\r
+      I_dont_have_it;\r
+\r
+  end; {cut}\r
+\r
+\r
+dance :\r
+{========}\r
+  begin\r
+\r
+    writeln;\r
+    for i:=1 to 3 do\r
+      begin\r
+        delay(500);\r
+        writeln('Boogie Woogie!!!');\r
+        delay(500);\r
+        writeln('Yeh Yeh Yeh!!!');\r
+      end;\r
+    writeln('I got the steps, man!!');\r
+\r
+  end; {dance}\r
+\r
+\r
+kill :\r
+{========}\r
+  write_message('Try using a knife!!!');\r
+\r
+\r
+pay :\r
+{========}\r
+  begin\r
+\r
+    if not is_here(noun) then\r
+      find_me_one\r
+\r
+    else case noun of\r
+\r
+      _pimp:\r
+        begin\r
+          if hooker_fucked then\r
+            write_message('He says ''I don''t want your money - stud!''')\r
+          else\r
+            write_message('Try going up -- he''ll take the money then');\r
+        end;\r
+\r
+      _hooker:\r
+        write_message('You already paid the Pimp, stupid!!');\r
+\r
+      _blonde,_waitress,_girl:\r
+        begin\r
+          write_message('She yells ''I''m not a whore!!!'' and kills me!');\r
+          purgatory;\r
+        end;\r
+\r
+      _preacher:\r
+        write_message\r
+            ('Bring a girl here to marry -- he''ll take the money then!');\r
+\r
+      _businessman:\r
+        write_message('He''s too drunk to do business right now!');\r
+\r
+      _bartender:\r
+        write_message('Buy something -- he''ll take the money then');\r
+\r
+      _dealer:\r
+        write_message('Why not play 21 instead?  You''ll lose anyway, fool!');\r
+\r
+    else\r
+      I_cant_do_that;\r
+\r
+    end;\r
+\r
+  end; {pay}\r
+\r
+\r
+smoke :\r
+{========}\r
+  begin\r
+\r
+    if noun=_plant then\r
+      begin\r
+        write_message('A cop beats me over the head!!!!');\r
+        purgatory;\r
+      end\r
+\r
+    else\r
+      I_cant_do_that;\r
+\r
+  end; {smoke}\r
+\r
+\r
+show :\r
+{========}\r
+  begin\r
+\r
+    if noun=_passcard then\r
+      begin\r
+        if is_carried(_passcard) then\r
+          begin\r
+            if your_place=d_entrnc then\r
+              begin\r
+                write_message('I show my passcard and the door opens');\r
+                path[d_entrnc,west] := d_disco;\r
+              end\r
+            else\r
+              not_yet_but_maybe_later\r
+          end\r
+        else\r
+          I_dont_have_it\r
+      end\r
+\r
+    else\r
+      I_cant_do_that;\r
+\r
+  end; {show}\r
+\r
+\r
+smell :\r
+{========}\r
+  begin\r
+\r
+    if (not is_here(noun)) and (not is_carried(noun)) then\r
+      find_me_one\r
+\r
+    else case noun of\r
+      _blonde:  write_message('Hmmm.....nice!!!!');\r
+      _hooker:  write_message('OK, who''s eating tuna fish?!?!?!');\r
+      _toilet:  write_message('Arghhh...I''m going to puke!!!!!!');\r
+      _plant:   write_message('Ahhh..chooo!!!!!!  I guess I''m allergic!');\r
+      _garbage: write_message('Yechhhhh!!!!!');\r
+      _flowers: write_message('Smells like perfume!!!');\r
+      else      write_message('Smells OK');\r
+    end;\r
+\r
+  end; {smell}\r
+\r
+\r
+help :\r
+{========}\r
+  begin\r
+    give_help;\r
+  end; {help}\r
+\r
+\r
+kiss :\r
+{========}\r
+  begin\r
+    write_message('Don''t do that!!!!  It gets me excited!!');\r
+  end; {kiss}\r
+\r
+\r
+stab :\r
+{========}\r
+  begin\r
+    stab_someone;\r
+  end; {stab}\r
+\r
+\r
+quit : { stop, bye }\r
+{========}\r
+  begin\r
+    game_ended := true;\r
+  end; {quit}\r
+\r
+show_score :\r
+{========}\r
+  begin\r
+    writeln;\r
+    writeln('Your score is ''',score,''' out of a possible ''3''');\r
+  end; {show_score}\r
+\r
+\r
+save :\r
+{========}\r
+  begin\r
+    p := pos(' ',objnam);\r
+    if p>0 then objnam := copy(objnam,1,p-1);\r
+    assign( save_file, save_file_name(objnam) );\r
+    rewrite( save_file );\r
+    write( save_file, game_position );\r
+    close( save_file );\r
+    write_message( save_file_name(objnam) + ' saved' );\r
+  end; {save}\r
+\r
+\r
+restore :\r
+{========}\r
+  begin\r
+    p := pos(' ',objnam);\r
+    if p>0 then objnam := copy(objnam,1,p-1);\r
+    {$I-}\r
+    write_message( 'Restoring from ' + save_file_name(objnam) );\r
+    writeln;\r
+    assign( save_file, save_file_name(objnam) );\r
+    reset( save_file );\r
+    iores := IoResult;\r
+    if iores=0 then\r
+      begin\r
+        read( save_file, game_position );\r
+        iores := IoResult;\r
+      end;\r
+    {$I+}\r
+    if iores=1 then\r
+      write_message( save_file_name(objnam) + ' never saved' )\r
+    else if (iores=$90) or (iores=$91) then\r
+      write_message( save_file_name(objnam) + ' is bad' )\r
+    else if iores<>0 then\r
+      begin\r
+        writeln;\r
+        writeln( 'I/O error ', iores );\r
+      end\r
+    else\r
+      write_long_message( integer(your_place) + 1 );\r
+    close( save_file );\r
+  end; {restore}\r
+\r
+\r
+  else {anything else}\r
+    I_cant_do_that;\r
+\r
+\r\1a
\ No newline at end of file
diff --git a/SOFTPACK.PAS b/SOFTPACK.PAS
new file mode 100644 (file)
index 0000000..1d70069
--- /dev/null
@@ -0,0 +1,92 @@
+{$C+}\r
+{$R+}\r
+{$U+}\r
+\r
+program PACK;\r
+\r
+const  recsize      = 450;\r
+       EOL          = #$0D;\r
+       infile_name  = 'SOFTPORN.TXT';\r
+       outfile_name = 'SOFTPORN.MSG';\r
+\r
+type   rectype = array[1..recsize] of char;\r
+       str     = string[120];\r
+\r
+var line    : str;\r
+    rec     : rectype;\r
+    infile  : text;\r
+    outfile : file of rectype;\r
+    i       : integer;\r
+    recpos  : integer;\r
+\r
+\r
+\r
+procedure clearrec;\r
+var i : integer;\r
+begin\r
+  recpos := 1;\r
+  for i:=1 to recsize do\r
+    rec[i] := chr(0);\r
+end;\r
+\r
+\r
+procedure addrec( c : char);\r
+begin\r
+  if recpos>recsize then\r
+    begin\r
+      writeln('Record overflow in :');\r
+      writeln(line);\r
+      halt;\r
+    end;\r
+  rec[recpos] := c;\r
+  recpos := recpos + 1;\r
+end;\r
+\r
+\r
+procedure dumprec;\r
+begin\r
+  if recpos>1 then\r
+    begin\r
+      write( outfile, rec );\r
+      write( recpos:4 );\r
+    end;\r
+  clearrec;\r
+end;\r
+\r
+\r
+begin  { Main program }\r
+\r
+  writeln('Converting ',infile_name,' to ',outfile_name,'. Recsize=',recsize);\r
+  writeln;\r
+\r
+  assign(infile,infile_name);\r
+  assign(outfile,outfile_name);\r
+\r
+  reset(infile);\r
+  rewrite(outfile);\r
+\r
+  clearrec;\r
+\r
+  randomize;\r
+\r
+  while not eof(infile) do\r
+    begin\r
+      readln( infile, line );\r
+      if copy(line,1,3)='###' then\r
+        dumprec\r
+      else if line<>'' then\r
+        begin\r
+          for i:=1 to length(line) do\r
+            addrec(succ(line[i]));\r
+          addrec(EOL);\r
+        end;\r
+    end;\r
+\r
+  dumprec;\r
+\r
+  close(infile);\r
+  close(outfile);\r
+  writeln;\r
+\r
+end.\r
+\1a\1a
\ No newline at end of file
diff --git a/SOFTPORN.PAS b/SOFTPORN.PAS
new file mode 100644 (file)
index 0000000..6815125
--- /dev/null
@@ -0,0 +1,170 @@
+program softporn_adventure;\r
+\r
+const  bottom_line = 25;    { 24 for CP/M, 25 for IBM PC }\r
+\r
+label  quit_game;\r
+\r
+{$C+}\r
+{$R+}\r
+{$U+}\r
+\r
+const    recsize = 450;\r
+\r
+type     rectype = array[1..recsize] of char;\r
+\r
+var      messg_rec  : rectype;\r
+         messg_file : file of rectype;\r
+         ioerr      : integer;\r
+\r
+{$I SOFTP1.INC }\r
+{$I SOFTP2.INC }\r
+{$I SOFTP3.INC }\r
+\r
+\r
+begin   { main program }\r
+\r
+  lowvideo;\r
+\r
+  {$I-}\r
+  assign(messg_file,'SOFTPORN.MSG');\r
+  reset(messg_file);\r
+  {$I+}\r
+  ioerr := IOresult;\r
+  if ioerr<>0 then\r
+    begin\r
+      writeln('Cannot open SOFTPORN.MSG, file missing?');\r
+      halt;\r
+    end;\r
+\r
+  with game_position do\r
+    begin\r
+\r
+      repeat\r
+\r
+        init_new_game;\r
+\r
+        game_ended := false;\r
+\r
+        repeat { until game_ended }\r
+\r
+          if your_place in bar_area then\r
+            begin\r
+              object_place[_sign]      := b_street;\r
+              object_place[_button]    := b_bar;\r
+            end\r
+          else if your_place in casino_area then\r
+            begin\r
+              object_place[_sign]      := c_street;\r
+              object_place[_button]    := c_htdesk;\r
+              object_place[_elevator]  := c_htdesk;\r
+            end\r
+          else if your_place in disco_area then\r
+            begin\r
+              object_place[_sign]      := d_street;\r
+              object_place[_telephone] := d_telbth;\r
+            end\r
+          else if your_place in penthouse_area then\r
+            begin\r
+              object_place[_button]    := p_pntfoy;\r
+              object_place[_elevator]  := p_pntfoy;\r
+              object_place[_telephone] := p_pntpch;\r
+            end;\r
+\r
+          if your_place<>b_bar then\r
+            path[b_bar,east] := nowhere;\r
+\r
+          if your_place<>d_entrnc then\r
+            begin\r
+              path[d_entrnc,west] := nowhere;\r
+              door_W_open := false;\r
+            end;\r
+\r
+          if not is_here(_stool) then\r
+            stool_climbed := false;\r
+\r
+          if rubber_worn and (your_place in public_places) then\r
+            if random(8)=5 then\r
+              begin\r
+                write_message('A passerby kills me ' +\r
+                              'for wearing my kinky rubber in public!');\r
+                purgatory;\r
+                if game_ended then\r
+                  goto quit_game;\r
+              end;\r
+\r
+\r
+          read_and_parse_command( verbnam, objnam, full_verb, full_noun );\r
+\r
+          verb_only := objnam[1]=' ';\r
+\r
+          verb := first_verb;\r
+          while ( verbnam <> verb_name[verb] ) and ( verb < last_verb ) do\r
+            verb := succ(verb);\r
+          no_verb := verb = _no_verb;\r
+\r
+          noun := first_object;\r
+          while ( objnam <> obj_name[noun] ) and ( noun < last_object ) do\r
+            noun := succ(noun);\r
+          no_object := noun = _no_object;\r
+\r
+          direction := first_direction;\r
+          while ( objnam<>dir_name[direction] ) and\r
+                ( direction<=last_direction ) do\r
+            direction := succ(direction);\r
+          no_direction := direction = _no_direction;\r
+\r
+          if noun=_sign then\r
+            begin\r
+              if your_place=d_entrnc then  {sign on door to west}\r
+                noun := _door_west;\r
+              if your_place=p_kitchn then  {sign on sink}\r
+                noun := _sink;\r
+            end;\r
+\r
+          if no_verb then\r
+            write_message('I don''t know how to ' + full_verb + ' something!')\r
+          else if verb_only and (not (verb in stand_alone_verbs)) then\r
+            write_message('Gimme a noun!!')\r
+          else if (not verb_only) and ( no_object and no_direction and\r
+                  (not (verb in special_verbs)) )  then\r
+            begin\r
+              add_definite_article_to( full_noun );\r
+              write_message\r
+                    ('I don''t know how to ' + full_verb + full_noun + '!');\r
+            end\r
+          else\r
+            begin\r
+\r
+              case verb of\r
+\r
+                {$I SOFTP4.INC }\r
+                {$I SOFTP5.INC }\r
+                {$I SOFTP6.INC }\r
+\r
+              end;\r
+\r
+            end;        { If }\r
+\r
+\r
+        until game_ended;\r
+\r
+    quit_game:\r
+\r
+        writeln;\r
+        writeln('You scored ''',score,''' out of a possible ''3''');\r
+\r
+        newlines(2);\r
+        write( 'Thanks for playing.  Would you like to play again? ');\r
+        read_key( yesno, ['Y','N'] );\r
+\r
+      until yesno='N';\r
+\r
+      write_message( 'Good-Bye!!' ); writeln;\r
+\r
+\r
+    end;  { with }\r
+\r
+  close(messg_file);\r
+\r
+end.\r
+\1a
\ No newline at end of file
diff --git a/SOFTPORN.TXT b/SOFTPORN.TXT
new file mode 100644 (file)
index 0000000..4397e13
--- /dev/null
@@ -0,0 +1,586 @@
+### M 1   P 1    in a Hallway\r
+\r
+I'm in a dimly lit hallway.\r
+The paint is peeling off the walls and the floor hasn't been cleaned in months.\r
+Cockroaches run across the floor - jumping as the loosely installed lightbulb\r
+crackles and flickers.\r
+An old desk sits pushed against the wall.  A businessman sits on a broken chair\r
+next to the desk.  Seems kind of drunk!\r
+\r
+### M 2   P 2    in a Bathroom\r
+\r
+I'm in a bathroom.\r
+The stench is unbelievable!!!!  Graffiti is all over the walls.  Cockroaches\r
+don't seem to survive in this place - their dead bodies are strewn everywhere.\r
+The sink's faucets are broken - in fact the sink hangs from the wall by its\r
+rusted plumbing.\r
+A toilet sits in the corner.  This baby looks dangerous!!\r
+\r
+### M 3   P 3    in a Sleazy Bar\r
+\r
+I'm in a sleazy bar.\r
+Behind the bar sits a bartender.\r
+A sign hanging over him says:  'Beer $100  Whiskey $100'.\r
+The place isn't furnished too well.  A curtain hangs on one wall.\r
+Next to the curtain is a button.\r
+A fan whirls slowly overhead - moving the stagnant air around.\r
+\r
+### M 4   P 4    on a Street outside the Bar\r
+\r
+I'm on the sidewalk outside the bar.\r
+A couple stray dogs wander around.  A cat is crouched in the entrance watching\r
+the dogs.\r
+Old beat-up cars drive by.  The sirens of police cars and ambulances wail in\r
+the distance.\r
+Some paper blows by - from the overfilled garbage dumpster next to me.\r
+I just miss stepping on a dogs "calling card".  The dogs look at me -\r
+I hope they don't think I'm a fire hydrant!\r
+\r
+### M 5   P 5    in the Backroom\r
+\r
+I'm in the backroom of the bar.\r
+There's this big dude in here with me.\r
+He's wearing a button.  I can't see what it says ... maybe I should take\r
+a closer look at him ...\r
+Stairs lead up to the second floor.  There's a TV in the corner also.\r
+I get the feeling loitering is not encouraged here!\r
+\r
+### M 6   P 6    in a Filthy Dumpster!\r
+\r
+There's a fire escape ladder above me which lowers automatically whenever\r
+weight is put on it.  As a result I find myself in the garbage dumpster\r
+which some fool placed under it!  The trash in this thing is foul!!\r
+I'm sitting in a sea of coffee grinds and egg shells.  Various pieces of\r
+trash surround me................................\r
+I don't like this - I think I may throw up!!!!\r
+\r
+### M 7   P 7    inside the Room I broke into\r
+\r
+I'm in the room I broke into!\r
+The entrance (on the far side of the room) is locked shut.  Through the door's\r
+peephole I see a hallway with people in it.  So that won't make a good exit!\r
+The plaster's falling off the wall ..... the usual decor for this building.\r
+Through the window leads the safety rope I'm using.\r
+\r
+### M 8   P 8    on a Window Ledge\r
+\r
+I'm on a window ledge.\r
+My safety rope leads back to the fire escape.  While it helps me some I could\r
+still fall and kill myself ... so be careful!!!!\r
+The window looks into a room.  But I can't see too much from here.\r
+\r
+### M 9   P 9    in a Hooker's Bedroom\r
+\r
+I'm in a seedy bedroom.\r
+There's a hooker in here also.  The bed's a mess and the hooker's about\r
+the same!\r
+The room is painted bright pink and the ceiling is covered with mirrors!\r
+A fire exit is to the north.\r
+A sign says:  'Take precautions!  The clap could be fatal!'\r
+\r
+### M 10  P 10   on a Hooker's Balcony\r
+\r
+I'm on a balcony.\r
+Off in the distance I see a brightly lite billboard.  A fire escape ladder\r
+is at one end of the balcony.  A sign says  'Use only in extreme emergency!!!'\r
+Looking over towards the west end of the balcony I see a window ledge.\r
+It looks too dangerous to go there - I might fall!\r
+\r
+### M 11  P 11   on a Downtown Street\r
+\r
+I'm on a downtown street.\r
+People from all walks of life are milling about.  Cadillacs, Limos and\r
+Mercedes sportcars drive up and down the street bringing gamblers to\r
+and from the casinos.\r
+To the north is an establishment - an advertiesemnt says:\r
+'Use our services to enter into a blissful life!'\r
+To the east is 'The Adventurers Hotel'.  Seems like quite the classy place!\r
+\r
+### M 12  P 12   in a Quickie Marriage Center\r
+\r
+I'm in a quickie marriage center.\r
+A flashing neon sign says:  'Why wait?  Marry the girl of your dream today!!!\r
+You provide the girl - we provide a legal marriage for only $1000!!'.\r
+A plaque hangs below the sign, procaliming - 'Over 1 million served!!!'\r
+\r
+### M 13  P 13   in the Main Casino Room\r
+\r
+I'm in the main casino room.\r
+Row upon row of slot machines fill the room.  The bells of the slot machines\r
+clamor as winnings are paid out to the winners.  The police cart off one of\r
+the losers.  Vagrancy is not tolerated here - vagrants are exterminated ...\r
+keeps the crime rate low ...!  But everyone seems happy here .. it's a\r
+gambler's paradise!!!!\r
+\r
+### M 14  P 14   in the '21' Room\r
+\r
+I'm in the 'Twenty-one room'.\r
+Tables for playing blackjack are everywhere.  The noise of people winning\r
+and losing fortunes fills the room.  A table stands in front of me - the\r
+dealer waits for me to join in.\r
+People gather ... they want to see me gamble my fortune away!\r
+A voice within me says: 'Go for it -- fool!'.\r
+\r
+### M 15  P 15   in the Lobby of the Hotel\r
+\r
+I'm in the main lobby.\r
+There's a stairway going up to the hotel desk.  The only other exit leads back\r
+to the casino.  Over in the corner is a flourishing plant which is sitting\r
+in a pot.  Couchs and tables are also in the room - as are other items one\r
+would normally find in a lobby.\r
+The lobby is empty - everybody is out gambling.\r
+\r
+### M 16  P 16   in the Honeymoon Suite\r
+\r
+I'm in the honeymoon suite of the hotel.\r
+The decor is fabulous!!!  A giant heart shaped bed sits in one corner of the\r
+room.  The floor is covered with a deep shag rug.\r
+A tiffany lamp provides just the right amount of light to complete the\r
+atmosphere.\r
+A breeze flows through the curtains on the east wall.\r
+\r
+### M 17  P 17   in the Hotel Hallway\r
+\r
+I'm in a hallway.\r
+Doors line each side - most have 'Do not disturb' hung on the doorknobs.\r
+Waiters from room service pass by bringing food and drink to the hotel guests.\r
+An ashtray stands next to the wall.  To the south is the entrance to the\r
+Honeymoon Suite.\r
+\r
+### M 18  P 18   on the Honeymooner's Balcony\r
+\r
+I'm out on a porch.\r
+A high wooden fence surrounds the porch.  There's a little hole in the fence.\r
+An arrow points at it - written next to it is a message - 'Look here!'.\r
+The sun is out - it's rays beat down on the porch making it very hot.\r
+\r
+### M 19  P 19   at the Hotel Desk\r
+\r
+I'm at the registration counter of the hotel.\r
+A sign says 'No vacancy'.  There's an elevator next to the counter marked\r
+'Penthouse - private'.  A button is next to the elevator.\r
+The smell of perfume fills the air!\r
+\r
+### M 20  P 20   in a Telephone Booth\r
+\r
+I'm in a telephone booth.\r
+The directory is all ripped up and piled on the floor.  There's some numbers\r
+scribbled on the side of the telephone.  The only ones which are legible read\r
+'555-6969' and '555-0439'.\r
+\r
+### M 21  P 21   in the Disco\r
+\r
+I'm in the 'Swinging Singles Disco'.\r
+There's a crazy DJ playing the newest hits.  The dance floor is filled with\r
+guys and gals doin' the best steps in town.  The crowd is really getting into\r
+it - everybody's having fun.  There's a table to stand at over by the dance\r
+floor.\r
+A little cardboard sign at the table says: 'Wine - $100'.\r
+\r
+### M 22  P 22   on a Residential Street\r
+\r
+I'm standing on a sidewalk.\r
+To the north is a fancy doorway - the entrance to the Disco Club.\r
+An old bum sits by the entrance - he's definitley seen better days.\r
+The guy really looks tormented!\r
+To the east is a pharmacy.  Apartment houses and homes line the rest of\r
+the street.\r
+\r
+### M 23  P 23   in the Disco's Entrance\r
+\r
+I'm in the entrance to the disco.\r
+Pictures line the entrance way - showing the happy singles\r
+who attend the club.\r
+Singles pass by me into the club.\r
+Couples wander out - kissing and making eyes at each other.\r
+A door is to the west.  The door has a sign on it.\r
+\r
+### M 24  P 24   in the Pharmacy\r
+\r
+I'm in a pharmacy.\r
+A pharmacist sits behing the counter.  On one wall sits a magazine rack.\r
+A sign reads 'This is not a library - no reading'.\r
+A mirror to protect against shoplifting is mounted in the corner.\r
+Kids stop and buy candy.  Others buy newspapers/cigarettes etc.\r
+\r
+### M 25  P 25   in the Penthouse Foyer\r
+\r
+I'm in the foyer of the penthouse.\r
+Over in the corner is a spiral staircase.  Next to the elevator is a button.\r
+The place is nicely decorated - no expense spared.\r
+The kitchen is to the east.\r
+\r
+### M 26  P 26   in the Jacuzzi\r
+\r
+I'm in a jacuzzi!!!\r
+Oh boy - does this feel good!!!\r
+Water swirls around me - its warmth soaks into my body.  The feeling of\r
+relaxation is almost numbing.  Over on the other side of the jacuzzi is\r
+a most beautiful girl!!!!\r
+I hope she doesn't mind me being here.\r
+\r
+### M 27  P 27   in the Kitchen\r
+\r
+I'm in the kitchen.\r
+There's a sink to one side.  High over the sink is mounted a cabinet.\r
+There's no dishes in sight - the place is kept quite tidy.  Real nice.\r
+There's a little sign over the sink.\r
+\r
+### M 28  P 28   in the Garden\r
+\r
+I'm in a lush garden!!!\r
+The air is filled with the aroma of all sorts of plants.  Green ferns are\r
+everywhere.  Roses and other flowers emit their wonderful fragrances.\r
+If ever there was a garden of Eden - this certainly has to be the place!!\r
+The entrance disappeared just as I walked in!!!\r
+Hmmm ... how do I get out of here!?!?!?!?!?!?\r
+\r
+### M 29  P 29   in the Living Room\r
+\r
+I'm in a living room.\r
+There's a closet on one wall.\r
+Nobody is here - but I think there is a gurgling noise coming from somewhere.\r
+A very nice place!\r
+\r
+### M 30  P 30   on the Penthouse Porch\r
+\r
+I'm outside on an expansive rooftop.\r
+The sun shines in amongst the plants and trees - birds flutter about.\r
+There's a jacuzzi in the middle of the porch!!  Well - there's the source\r
+of the gurgling noise!!\r
+A wooden fence surrounds the area.\r
+\r
+\r
+\r
+### M 31  A 1    Look hooker\r
+\r
+Oh no!!!  I paid for this?!?!?!  This beast is really ugly!!!!  Jeezzzz....\r
+I hope I don't get the clap from this hooker.................  Well ... she\r
+seems to be annoyed that I haven't jumped on her yet ... go to it, stud!!!!\r
+\r
+### M 32  A 2    Read newspaper (in hallway in bar)\r
+\r
+It's the gambler's gazette!!\r
+There's an article here which tells how to activate the games at the\r
+Adventurer's Hotel.  It says that Blackjack can be played by entering\r
+'Play 21'.  The slot machines can be started with 'Play Slot'.\r
+\r
+### M 33  A 3    Read magazine (in pharmacy)\r
+\r
+Hmmmm ..... an interesting magazine with a nice centerfold!\r
+The feature article is about how to pick up an innocent girl at a disco.\r
+It says - 'Shower her with presents.  Dancing won't hurt either.  And wine\r
+is always good to get thing moving!'\r
+\r
+### M 34  A 4    Look girl (in disco)\r
+\r
+Cute and innocent!!  Just the way I like my women.\r
+Oh - this girl is great!  She has a beautiful California tan ... and pert\r
+little breasts ... a trim waist ..... and well rounded hips!!\r
+I dream about getting this nice a girl.  I hope you play this game well\r
+enough so I can have my jolly with her!\r
+You could make your puppet a very happy man...................\r
+\r
+### M 35  A 5    Look girl (in jacuzzi)\r
+\r
+What a beautiful face!!!  She's leaning back in the jacuzzi with her eyes\r
+closed and seems extremely relaxed.  The water is bubbling up around her...\r
+She's so beautiful ........ a guy really could fall in love with a girl\r
+like this.  I presume her name is 'Eve' ... at least that's what the towel\r
+next to her has embrodiered on it.\r
+\r
+### M 36  A 6    Hail taxi\r
+\r
+A taxi pulls up and screeches to a halt!  I get in the back and sit down.\r
+A sign says  'We service 3 destinations.  When asked, please specify -\r
+Disco ... Casino ... or Bar'.\r
+The driver turns and asks:  'Where to Mac???'\r
+\r
+### M 37  A 7    Press button (at hotel desk or in penthouse foyer)\r
+\r
+The elevator door open ... I get in.\r
+As the doors close the music starts playing - it's the usual elevator stuff\r
+... boring!  We start to move ... after a few seconds the elevator stops.\r
+The doors open and I get out.\r
+\r
+### M 38  A 8    Eat girl\r
+\r
+She says 'Me first!!!!'\r
+She takes my throbbing tool into her mouth!!!\r
+She starts going to work ... feels so good!!!!!!\r
+Then she smiles and bites it off!  She says 'No oral sex in this game!!!!!!'\r
+Suffer!!!!!\r
+\r
+### M 39  A 9    Give wine (to bum, who then tells his story)\r
+\r
+Well, my son ... here's my story.\r
+I came here many years ago - and my goals were the same as yours ... but this\r
+adventure was too much for me!\r
+Here's a gift ... carry it with you at all times!!!!  There's some kinky girls\r
+in this town!!  And you never know when you may need to use this to defend\r
+yourself!!!!  After all you may get in a program bug ......\r
+\r
+### M 40  A 10   Look girl (voluptuous blonde)\r
+\r
+She's wearing the tightest jeans!  Wow ... what a body!!!!!  36-24-35!!  This\r
+girls derriere is sensational!!  And the shirt?  See through - and what I see\r
+I like!\r
+As my eyes reluctantly roam from her body, I see bright blue eyes - and a\r
+smile that dazzles me.  I think she likes me!\r
+\r
+### M 41  A 11   TV channel 1\r
+\r
+A masked man runs across the screen.  Jumping up he lands on his horse and\r
+yells  'Hi-ho plutonium!!!!!'  He rides off into a green sky.....\r
+Nothing like a good old western to pass the time.\r
+\r
+### M 42  A 12   TV channel 2\r
+\r
+It's 'The price is fright!!!!'\r
+'And now for out favorite host ..... Haunty Male!!!!!!!!!!'\r
+Haunty jumps up the stage - he asks 'And who's our first lucky contestant?'\r
+The announcer points out a lady ... the crowd screams in ecstacy as she's\r
+dragged to the stage...........\r
+\r
+### M 43  A 13   TV channel 3\r
+\r
+Captain Jerk looks at this door from which behind the noise is coming.\r
+Throwing open the door - his face turns a deep red!!!!!!!!!\r
+He says:  'Scotty!  What are you doing??'\r
+Scotty replies:  'Byt Captain!?!?  My girl and I - we're engaged!!!!'\r
+Jerk commands:  'Well, then disengage!'\r
+... as the starship thrusted forward ... penetrating deeper into space ....\r
+\r
+### M 44  A 14   TV channel 4\r
+\r
+The News!!  Today the prime rate was raised once again ... to 257%!  This\r
+does not come near the record set in 1996 - when it broke the 1000% mark....\r
+The birth rate has taken a dramatic fall ... this is due to the increased\r
+usage of computers as sexual partners..  However ... rapes of innocent people\r
+are on the increase!  And who is the rapist??  Computerized banking machines\r
+lead the list ... followed by home computers ....\r
+\r
+### M 45  A 15   TV channel 5\r
+\r
+Mr Rodjerk jumps up with his big sneakers and says in his cherry voice:\r
+'Guess what, boys and girls????  Today we're going to learn about suckers!!\r
+Susie .. see the lolly-pop???  Can you stick it in your mouth???  That's\r
+right!  That's a nice lolly-pop ... nice and hardright?!?!?!?!?......'\r
+\r
+### M 46  A 16   TV channel 6\r
+\r
+Cable TV!!!!!!!!\r
+They're showing the kinkiest X-rated movies!!!!\r
+This one's titled 'Deep Nostril'.  The Pimp likes this one!!!!\r
+He's engrossed in the action he sees!!!  Seems distracted.............\r
+\r
+### M 47  A 17   TV channel 7\r
+\r
+It's Happy Daze!!!!!\r
+Richie turns to Gonzy and says 'But you always had it made with the girls....\r
+What's your secret???'\r
+The Gonz says 'Aayyyyyy .. I didn't get my name for nuthin!'\r
+reaching into his pocket he pulls out a funny looking cigarette.........\r
+\r
+### M 48  A 18   TV channel 8\r
+\r
+Mrs Smith and mrs Jones are comparing detergents ........ see this bluse?\r
+We're making it this dirty to see who's works better...\r
+(A dog is thrown onto the blouse.  In his excitement he deficates all over it)\r
+Do you think yours will work, mrs Smith?\r
+(The camera pans to mrs Smith.  She throws up.)\r
+Mrs Jones???\r
+(A shot shows her taking the dog and........... )\r
+\r
+### M 49  A 19   TV channel 9\r
+\r
+It's the super bowl!!!!\r
+The center snaps the ball!!\r
+The quarterback fades back!!\r
+It's a bomb!!!!!\r
+The ball sails through the air ... the receiver runs to get it.........\r
+It explodes in his hands!!!!!  What a bomb!!!!!\r
+Tell me, Howard, have you ever seen this before???\r
+\r
+### M 50  A 20   Give apple (to girl in jacuzzi)\r
+\r
+She takes the apple and raises it to her mouth.  With an outrageously innocent\r
+look she takes a small bite out of it.  A smile comes across her face!  She's\r
+really starting to look quite sexy!!!!  She winks and lays back in the jacuzzi\r
+\r
+### M 51  A 21   Fuck hooker (with rubber)\r
+\r
+It's a good thing I was wearing that rubber!!!!!\r
+She was OK - but really ... can't you do better that this??\r
+The score is now '1' out of a possible of '3' ... so congratulations!!!!!\r
+Well ... go to it - you stud!!!  Find me another girl!\r
+\r
+### M 52  A 22   Fuck doll (must inflate it first)\r
+\r
+Oh boy!!!! - it's got 3 spots to try!!!  I thrust into the doll - kinky .. eh?\r
+I start to increase my tempo ... faster and faster I go!!!!\r
+Suddenly there's a flatulent noise and the doll becomes a popped balloon\r
+soaring around the room!  It flies out of the room and disappears!\r
+\r
+### M 53  A 23   Fuck girl (in jacuzzi, must give apple first)\r
+\r
+She hops out of the tub - the steam rising from her skin ... her body is\r
+the best looking I've ever seen!!!\r
+Then she comes up to me and gives the best time of my life!!!\r
+Well ... I guess that's it!  As your puppet in this game I thank you for\r
+the pleasure you have brought me ... so long ... I've got to get back to\r
+my new girl here!  Keep it up!\r
+\r
+### M 54  A 24   Fuck girl (innocent girl from disco)\r
+\r
+She says  'Lay down honey - let me give you a special surprise!!!'\r
+I lay down and she says  'OK - now close your eyes'.\r
+I close my eyes and she starts to go to work on me.......\r
+I'm really enjoying myself when suddenly she ties me to the bed!!!!\r
+Then she says  'So long - Turkey!'  and runs out of the room!!!\r
+Well - the score is now '2' out of a possible '3'.............\r
+.......but I'm also tied to the bed and can't move!!!!!!!\r
+\r
+### M 55  A 25   Look hole (peephole on honeymooner's balcony)\r
+\r
+Hmmmm ..... this is a Peeping Tom's paradise!!!!!\r
+Across the road is another hotel.  Aha!  The curtains are open at one window!\r
+The bathroom door opens and a girl walks out.  Holy cow!  Her boobs are huge -\r
+and look at the sway as she strides across the room!\r
+Now she's taking a large sausage-shaped object and looks at it longinly!\r
+Damn!  She shuts the curtain!\r
+\r
+### M 56  A 26   Eat pills (don't do it, give to blonde instead)\r
+\r
+This stuff is good!  I'm breathing heavily - I've never been this horny!!!!!\r
+I've just got to do something..............\r
+Ah ... there goes a female german shepard!!  That gives me an idea!.......\r
+Kinky dog!!!!  Chewed me to death!!!!\r
+\r
+### M 57  A 27   Give pills (to voluptuous blonde)\r
+\r
+The blonde looks at the pills and says  'Thanks!!!  I love this stuff!'\r
+She takes a pill .... her nipples start to stand up!  Wow!!!!\r
+She's breathing heavily .... I hope she rapes me!!!!!\r
+She says  'So long!!!  I'm going to see my boyfriend!'\r
+She disappears down the stairs.....\r
+\r
+### M 58  A 28   (whenever bringing wine into a taxi)\r
+\r
+The driver looks at me and says  'Hey!!  What's that you got ... wine????'\r
+He grabs the bottle and guzzles the wine down!!!!!!!!!!!!!!\r
+Oh no!!!!  He's swerving towards a huge truck!!!!!\r
+I grab the wheel...............................\r
+We struggle....................................\r
+The truck just misses us!!!!!!!\r
+\r
+### M 59  A 29   Look graffiti (in bathroom)\r
+\r
++-------------------------------------------------------------------+\r
+|                                                                   |\r
+|        At my PC is where I sit                                    |\r
+|         when I feel like fondling it's bits!           I  h       |\r
+|                                                        '  e       |\r
+|       C                            The password is:    d  r       |\r
+\r
+### M 60  A 30\r
+\r
+|        o       A       a                                          |\r
+|         m        S       n           Bellybutton       l  f       |\r
+|      P   p         C       d                           i  l       |\r
+|       e   u          I             r                   k  o       |\r
+|        e   t           I     y       e                 e  p       |\r
+|     t   k   e                  e       c                  p       |\r
+\r
+### M 61  A 31\r
+\r
+|      h       r                           e             t  i       |\r
+|       e   b                      s         i           o  e       |\r
+|        y   e   f                   h         e            s       |\r
+|             f   r                    a         v       n          |\r
+|          P   o   e                     l         e     i          |\r
+|           o   r   a                      l             b          |\r
+\r
+### M 62  A 32\r
+\r
+|            k   e   k                                   b          |\r
+|             e       s                                  l          |\r
+|                                                        e          |\r
+|                                                                   |\r
++-------------------------------------------------------------------+\r
+\r
+### M 63  A 33    Look billboard (from hooker's balcony)\r
+\r
++---------------------------------------------------+\r
+|          For those who desire the best:           |\r
+|    Announcing, the most exclusive, the exciting,  |\r
+|             the hottest spot in town,             |\r
+|            ***************************            |\r
+|            * SWINGING SINGLE'S DISCO *            |\r
+|            ***************************            |\r
++---------------------------------------------------+\r
+\r
+### M 64  A 34    Eat mushroom (transports to rooms 1, 2 or 3)\r
+\r
+Holy Cow!  Psychedelic!!!!\r
+Pretty colors appear and I'm elsewhere!\r
+\r
+### M 65  A 35    When killed\r
+\r
+Welcome to Purgatory!!  Here at this crossroad you have three options:\r
+Before you are three doors.  Each will bring you to a different place -\r
+A - To Hell (where the game ends)\r
+B - Back to life, unharmed\r
+C - You stay here and must choose again\r
+The doors are randomly different each time!!\r
+\r
+### M 66  A 36    When married\r
+\r
+OK.\r
+Why am I doing this?\r
+The Preacher takes $1000 and winks!\r
+The girl grabs $2000 and says:\r
+'Meet me at the Honeymoon Suite!!  I've got connections to get a room there!!'\r
+\r
+### M 67  A 37    Call 555-0439\r
+\r
+Hi there!!!  This is Chuck (the author of this absurd game).  If you're a\r
+voluptous blonde who's looking for a good time, then call me immedeatley!!\r
+\r
+### M 68  A 38    Call 555-0987\r
+\r
+A voice answers and says  'Wine for the nervous newlyweds!  Coming right up!!'\r
+\r
+### M 69  A 39    Flush toilet\r
+\r
+Ok, here goes .......\r
+Oh no!!!!  It's overflowing!!!!!!!!!!!!!!!!!\r
+It's filling the room with gross sewage!!!!!\r
+\r
+### M 70  A 40    Help text\r
+\r
+The object of SOFTPORN ADVENTURE is to find -- and seduce -- three different\r
+girls.  They have very different personalities, so tricks that work on one\r
+girl usually won't work on another girl.\r
+The game has three different areas -- Disco, Casino and Bar.  You start off\r
+in the Bar with $1000.  You'll need more money than that, so you'll have to\r
+make more money during the game.\r
+\r
+### M 71  A 41    Help text\r
+\r
+You give your puppet commands like 'Go north', 'Buy beer' etc.  A phrase like\r
+'Look at the table' is equivalent to 'Look table'. Some commands can be abbre-\r
+viated, like 'N' for 'Go north', 'L' for 'Look', 'I' for 'Inventory' etc.\r
+To see how well you're doing, type 'Score'. To save and restore a game posi-\r
+tion, type 'Save' and 'Restore', followed (optionally) by up to 3 characters,\r
+specifying different saved game positions.\r
+\r
+### M 72  A 42    Help text\r
+\r
+If you're stuck, try looking at everything in sight, object by object. This\r
+will usually help you find missing objects and/or clues etc.\r
+The 'Help' command will repeat this message.\r
+Several commands can be entered on the same line, but must then be separated\r
+by commas or periods.\r
+            ========= ******** GOOD LUCK !!! ******** ========\r
+\1a
\ No newline at end of file