├── SOFTP2.INC ├── SOFTPACK.PAS ├── SOFTPORN.PAS ├── SOFTP5.INC ├── SOFTP6.INC ├── SOFTP3.INC ├── SOFTP1.INC ├── SOFTP4.INC └── SOFTPORN.TXT /SOFTP2.INC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/videogamepreservation/softporn/HEAD/SOFTP2.INC -------------------------------------------------------------------------------- /SOFTPACK.PAS: -------------------------------------------------------------------------------- 1 | {$C+} 2 | {$R+} 3 | {$U+} 4 | 5 | program PACK; 6 | 7 | const recsize = 450; 8 | EOL = #$0D; 9 | infile_name = 'SOFTPORN.TXT'; 10 | outfile_name = 'SOFTPORN.MSG'; 11 | 12 | type rectype = array[1..recsize] of char; 13 | str = string[120]; 14 | 15 | var line : str; 16 | rec : rectype; 17 | infile : text; 18 | outfile : file of rectype; 19 | i : integer; 20 | recpos : integer; 21 | 22 | 23 | 24 | procedure clearrec; 25 | var i : integer; 26 | begin 27 | recpos := 1; 28 | for i:=1 to recsize do 29 | rec[i] := chr(0); 30 | end; 31 | 32 | 33 | procedure addrec( c : char); 34 | begin 35 | if recpos>recsize then 36 | begin 37 | writeln('Record overflow in :'); 38 | writeln(line); 39 | halt; 40 | end; 41 | rec[recpos] := c; 42 | recpos := recpos + 1; 43 | end; 44 | 45 | 46 | procedure dumprec; 47 | begin 48 | if recpos>1 then 49 | begin 50 | write( outfile, rec ); 51 | write( recpos:4 ); 52 | end; 53 | clearrec; 54 | end; 55 | 56 | 57 | begin { Main program } 58 | 59 | writeln('Converting ',infile_name,' to ',outfile_name,'. Recsize=',recsize); 60 | writeln; 61 | 62 | assign(infile,infile_name); 63 | assign(outfile,outfile_name); 64 | 65 | reset(infile); 66 | rewrite(outfile); 67 | 68 | clearrec; 69 | 70 | randomize; 71 | 72 | while not eof(infile) do 73 | begin 74 | readln( infile, line ); 75 | if copy(line,1,3)='###' then 76 | dumprec 77 | else if line<>'' then 78 | begin 79 | for i:=1 to length(line) do 80 | addrec(succ(line[i])); 81 | addrec(EOL); 82 | end; 83 | end; 84 | 85 | dumprec; 86 | 87 | close(infile); 88 | close(outfile); 89 | writeln; 90 | 91 | end. 92 |  -------------------------------------------------------------------------------- /SOFTPORN.PAS: -------------------------------------------------------------------------------- 1 | program softporn_adventure; 2 | 3 | const bottom_line = 25; { 24 for CP/M, 25 for IBM PC } 4 | 5 | label quit_game; 6 | 7 | {$C+} 8 | {$R+} 9 | {$U+} 10 | 11 | const recsize = 450; 12 | 13 | type rectype = array[1..recsize] of char; 14 | 15 | var messg_rec : rectype; 16 | messg_file : file of rectype; 17 | ioerr : integer; 18 | 19 | {$I SOFTP1.INC } 20 | {$I SOFTP2.INC } 21 | {$I SOFTP3.INC } 22 | 23 | 24 | begin { main program } 25 | 26 | lowvideo; 27 | 28 | {$I-} 29 | assign(messg_file,'SOFTPORN.MSG'); 30 | reset(messg_file); 31 | {$I+} 32 | ioerr := IOresult; 33 | if ioerr<>0 then 34 | begin 35 | writeln('Cannot open SOFTPORN.MSG, file missing?'); 36 | halt; 37 | end; 38 | 39 | with game_position do 40 | begin 41 | 42 | repeat 43 | 44 | init_new_game; 45 | 46 | game_ended := false; 47 | 48 | repeat { until game_ended } 49 | 50 | if your_place in bar_area then 51 | begin 52 | object_place[_sign] := b_street; 53 | object_place[_button] := b_bar; 54 | end 55 | else if your_place in casino_area then 56 | begin 57 | object_place[_sign] := c_street; 58 | object_place[_button] := c_htdesk; 59 | object_place[_elevator] := c_htdesk; 60 | end 61 | else if your_place in disco_area then 62 | begin 63 | object_place[_sign] := d_street; 64 | object_place[_telephone] := d_telbth; 65 | end 66 | else if your_place in penthouse_area then 67 | begin 68 | object_place[_button] := p_pntfoy; 69 | object_place[_elevator] := p_pntfoy; 70 | object_place[_telephone] := p_pntpch; 71 | end; 72 | 73 | if your_place<>b_bar then 74 | path[b_bar,east] := nowhere; 75 | 76 | if your_place<>d_entrnc then 77 | begin 78 | path[d_entrnc,west] := nowhere; 79 | door_W_open := false; 80 | end; 81 | 82 | if not is_here(_stool) then 83 | stool_climbed := false; 84 | 85 | if rubber_worn and (your_place in public_places) then 86 | if random(8)=5 then 87 | begin 88 | write_message('A passerby kills me ' + 89 | 'for wearing my kinky rubber in public!'); 90 | purgatory; 91 | if game_ended then 92 | goto quit_game; 93 | end; 94 | 95 | 96 | read_and_parse_command( verbnam, objnam, full_verb, full_noun ); 97 | 98 | verb_only := objnam[1]=' '; 99 | 100 | verb := first_verb; 101 | while ( verbnam <> verb_name[verb] ) and ( verb < last_verb ) do 102 | verb := succ(verb); 103 | no_verb := verb = _no_verb; 104 | 105 | noun := first_object; 106 | while ( objnam <> obj_name[noun] ) and ( noun < last_object ) do 107 | noun := succ(noun); 108 | no_object := noun = _no_object; 109 | 110 | direction := first_direction; 111 | while ( objnam<>dir_name[direction] ) and 112 | ( direction<=last_direction ) do 113 | direction := succ(direction); 114 | no_direction := direction = _no_direction; 115 | 116 | if noun=_sign then 117 | begin 118 | if your_place=d_entrnc then {sign on door to west} 119 | noun := _door_west; 120 | if your_place=p_kitchn then {sign on sink} 121 | noun := _sink; 122 | end; 123 | 124 | if no_verb then 125 | write_message('I don''t know how to ' + full_verb + ' something!') 126 | else if verb_only and (not (verb in stand_alone_verbs)) then 127 | write_message('Gimme a noun!!') 128 | else if (not verb_only) and ( no_object and no_direction and 129 | (not (verb in special_verbs)) ) then 130 | begin 131 | add_definite_article_to( full_noun ); 132 | write_message 133 | ('I don''t know how to ' + full_verb + full_noun + '!'); 134 | end 135 | else 136 | begin 137 | 138 | case verb of 139 | 140 | {$I SOFTP4.INC } 141 | {$I SOFTP5.INC } 142 | {$I SOFTP6.INC } 143 | 144 | end; 145 | 146 | end; { If } 147 | 148 | 149 | until game_ended; 150 | 151 | quit_game: 152 | 153 | writeln; 154 | writeln('You scored ''',score,''' out of a possible ''3'''); 155 | 156 | newlines(2); 157 | write( 'Thanks for playing. Would you like to play again? '); 158 | read_key( yesno, ['Y','N'] ); 159 | 160 | until yesno='N'; 161 | 162 | write_message( 'Good-Bye!!' ); writeln; 163 | 164 | 165 | end; { with } 166 | 167 | close(messg_file); 168 | 169 | end. 170 |  -------------------------------------------------------------------------------- /SOFTP5.INC: -------------------------------------------------------------------------------- 1 | { Softporn Adventure, include file 5 } 2 | 3 | 4 | 5 | press : { push } 6 | {========} 7 | begin 8 | 9 | if noun=_button then 10 | begin 11 | if your_place=b_bar then 12 | begin 13 | writeln; 14 | write('A voice says ''What''s the password?'' (one word) '); 15 | readln(password); 16 | for i:=1 to length(password) do 17 | password[i] := upcase(password[i]); 18 | if copy(password,1,6)='BELLYB' then 19 | begin 20 | write_message('The curtain pulls back!!'); 21 | path[b_bar,east] := b_backrm; 22 | end 23 | else 24 | write_message('Wrong!!'); 25 | end 26 | else if your_place in [ c_htdesk, p_pntfoy ] then 27 | begin 28 | if is_here(_blonde) then 29 | write_message('The blonde says ''You can''t go there!''') 30 | else 31 | begin 32 | write_long_message( 37 ); 33 | if your_place=c_htdesk then 34 | your_place := p_pntfoy 35 | else 36 | your_place := c_htdesk; 37 | end; 38 | end 39 | else 40 | not_yet_but_maybe_later 41 | end {press/push button} 42 | 43 | else 44 | write_message('Pushy chump, eh???'); 45 | 46 | end; {press} 47 | 48 | 49 | enter : 50 | {========} 51 | begin 52 | 53 | if not is_here(noun) then 54 | find_me_one 55 | 56 | else if noun=_bushes then 57 | your_place := p_garden 58 | 59 | else if noun=_window then 60 | begin 61 | if window_broken then 62 | your_place := b_inroom 63 | else 64 | not_yet_but_maybe_later; 65 | end 66 | 67 | else if noun=_door_west then 68 | begin 69 | if door_W_open then 70 | your_place := d_disco 71 | else 72 | write_message('The door is closed') 73 | end 74 | 75 | else if noun=_elevator then 76 | write_message('Push the button to enter the elevator') 77 | 78 | else 79 | I_cant_do_that 80 | 81 | end; {enter} 82 | 83 | 84 | eat : 85 | {========} 86 | begin 87 | 88 | if (not is_here(noun)) and (not is_carried(noun)) then 89 | find_me_one 90 | 91 | else if noun in [ _blonde, _waitress, _hooker, _girl ] then 92 | begin 93 | write_long_message( 38 ); 94 | purgatory; 95 | end 96 | 97 | else if noun=_mushroom then 98 | begin 99 | write_long_message( 64 ); 100 | your_place := places( random(3) ); 101 | delay(600); 102 | write_long_message( integer(your_place)+1 ); 103 | end 104 | 105 | else if noun in [ _garbage, _apple_core ] then 106 | write_message('Too moldy!') 107 | 108 | else if noun=_apple then 109 | write_message('Sorry ... not hungry!') 110 | 111 | else if noun=_pills then 112 | begin 113 | write_long_message( 56 ); 114 | purgatory; 115 | end 116 | 117 | else 118 | write_message('Tastes awful!'); 119 | 120 | end; {eat} 121 | 122 | 123 | drink : 124 | {========} 125 | begin 126 | 127 | if not is_carried(noun) then 128 | I_dont_have_it 129 | 130 | else 131 | begin 132 | case noun of 133 | _whiskey: write_message 134 | ('This stuff is rot-gut! Give it to someone ... I don''t want it.'); 135 | _beer: write_message('Heh...heh...hey!!!! This stuff''s OK!'); 136 | _wine: write_message('Sour grapes....'); 137 | _water: write_message('Thanks!'); 138 | else write_message('Get your head examined!!!!'); 139 | end; 140 | if noun in [_beer,_water] then 141 | begin 142 | object_place[noun] := nowhere; 143 | objects_carried := objects_carried - 1; 144 | end; 145 | end; 146 | 147 | end; 148 | 149 | 150 | buy : { order } 151 | {========} 152 | begin 153 | 154 | if (money<1) or (not is_carried(_wallet)) then 155 | sorry_no_money 156 | else 157 | 158 | case noun of 159 | 160 | _whiskey,_beer: 161 | begin 162 | if (your_place<>b_bar) then 163 | not_yet_but_maybe_later 164 | else 165 | begin 166 | if object_place[noun]<>nowhere then 167 | write_message('Sorry ... all out!') 168 | else 169 | begin 170 | write_message ('I give the bartender $100 and ' + 171 | 'he places it on the bar.'); 172 | money := money - 1; 173 | object_place[noun] := your_place; 174 | end; 175 | end 176 | end; 177 | 178 | _wine: 179 | begin 180 | if (your_place<>d_disco) then 181 | not_yet_but_maybe_later 182 | else 183 | begin 184 | if object_place[noun]<>nowhere then 185 | write_message('All out!') 186 | else 187 | begin 188 | write_message 189 | ('The waitress takes $100 and says she''ll return'); 190 | delay(3000); 191 | write_message('Poor service!!!'); 192 | delay(2000); 193 | money := money - 1; 194 | object_place[noun] := your_place; 195 | end; 196 | end 197 | end; 198 | 199 | _rubber,_magazine: 200 | begin 201 | if (your_place<>d_phrmcy) then 202 | not_yet_but_maybe_later 203 | else 204 | begin 205 | if is_here(noun) then 206 | begin 207 | if noun=_rubber then 208 | buy_rubber 209 | else 210 | write_message('He takes $100 and gives me the magazine'); 211 | money := money - 1; 212 | object_place[noun] := youhavit; 213 | end 214 | else 215 | write_message('Sorry!!! --- sold out!'); 216 | end 217 | end; 218 | 219 | _hooker: 220 | begin 221 | if is_here(_hooker) then 222 | write_message('You''ve already paid the pimp, stupid!!!!') 223 | else 224 | find_me_one; 225 | end; 226 | 227 | else 228 | write_message('Money can''t buy everything!!!!'); 229 | 230 | end; {case} 231 | 232 | end; {buy} 233 | 234 | 235 | climb : 236 | {========} 237 | begin 238 | 239 | if noun=_stool then 240 | begin 241 | if is_here(_stool) then 242 | begin 243 | OK; 244 | stool_climbed := true; 245 | end 246 | else 247 | write_message('It''s not on the floor here!'); 248 | end 249 | 250 | else if is_here(noun) or is_carried(noun) then 251 | I_cant_do_that 252 | 253 | else 254 | find_me_one; 255 | 256 | end; {climb} 257 | 258 | 259 | water : 260 | {========} 261 | begin 262 | 263 | if noun in [_on,_off] then 264 | begin 265 | if not is_here(_sink) then 266 | write_message('Find a working sink!') 267 | else 268 | begin 269 | water_on := noun=_on; 270 | if water_on then 271 | begin 272 | write_message('Water is running in the sink'); 273 | object_place[_water] := your_place; 274 | end 275 | else if not pitcher_full then 276 | begin 277 | OK; 278 | object_place[_water] := nowhere; 279 | end; 280 | end; 281 | end 282 | 283 | else if not is_carried(_water) then 284 | write_message('I have no water!') 285 | 286 | else if not is_here(noun) then 287 | find_me_one 288 | 289 | else if noun=_seeds then 290 | begin 291 | object_place[_water] := nowhere; 292 | pitcher_full := false; 293 | if your_place=p_garden then 294 | begin 295 | write_message('A tree sprouts!!'); 296 | object_place[_tree] := your_place; 297 | object_place[_seeds] := nowhere; 298 | end 299 | else 300 | write_message('The seeds need better soil to grow.'); 301 | end 302 | 303 | else 304 | begin 305 | write_message('It pours into the ground.'); 306 | object_place[_water] := nowhere; 307 | pitcher_full := false; 308 | end; 309 | 310 | end; {water} 311 | 312 | 313 | fill : 314 | {========} 315 | begin 316 | 317 | if not (noun=_pitcher) then 318 | I_cant_do_that 319 | 320 | else if not is_carried(_pitcher) then 321 | write_message('I don''t have it!') 322 | 323 | else if not is_here(_sink) then 324 | write_message('Find a working sink!!') 325 | 326 | else if not water_on then 327 | write_message('No water!!') 328 | 329 | else if pitcher_full then 330 | write_message('The pithcer is already full!') 331 | 332 | else 333 | begin 334 | OK; 335 | pitcher_full := true; 336 | end 337 | 338 | end; {fill} 339 | 340 | 341 | pour : 342 | {========} 343 | begin 344 | 345 | if not (noun=_water) then 346 | I_cant_do_that 347 | 348 | else if not is_carried(_pitcher) then 349 | write_message('You have nothing to pour it with!') 350 | 351 | else if not pitcher_full then 352 | write_message('The pitcher is empty.') 353 | 354 | else if (your_place<>p_garden) or (not is_here(_seeds)) then 355 | write_message('It pours into the ground.') 356 | 357 | else 358 | begin 359 | write_message('A tree sprouts!!'); 360 | object_place[_tree] := your_place; 361 | end 362 | end; {pour} 363 | 364 | 365 | listen : 366 | {========} 367 | begin 368 | 369 | if (not is_here(noun)) and (not is_carried(noun)) then 370 | find_me_one 371 | 372 | else if noun=_radio then 373 | begin 374 | if is_carried(_radio) then 375 | begin 376 | if radio_listened then 377 | write_message('Punk rock!!!!!') 378 | else 379 | begin 380 | write_message('An advertisement says ' + 381 | '''Call 555-0987 for all your liquor needs!!!!'''); 382 | radio_listened := true; 383 | end; 384 | end 385 | else 386 | write_message('Take it and put it next to my ear!'); 387 | end 388 | 389 | else 390 | write_message('Quiet as a mouse in heat!'); 391 | 392 | end; {listen} 393 | 394 | 395 | close : 396 | {========} 397 | begin 398 | 399 | if not is_here(noun) then 400 | find_me_one 401 | 402 | else case noun of 403 | 404 | _desk: 405 | begin 406 | _close(drawer_open); 407 | if is_here(_newspaper) then 408 | object_place[_newspaper] := nowhere; 409 | end; 410 | 411 | _closet: 412 | begin 413 | _close(closet_open); 414 | if is_here(_doll) then 415 | object_place[_doll] := nowhere; 416 | end; 417 | 418 | _cabinet: 419 | if stool_climbed then 420 | begin 421 | _close(cabinet_open); 422 | if is_here(_pitcher) then 423 | object_place[_pitcher] := nowhere; 424 | end 425 | else 426 | write_message('I can''t reach it!'); 427 | 428 | _door_west: 429 | begin 430 | _close(door_W_open); 431 | path[d_entrnc,west] := nowhere; 432 | end; 433 | else 434 | I_cant_do_that; 435 | 436 | end; 437 | 438 | end; {close} 439 | 440 | 441 | jump : 442 | {========} 443 | begin 444 | 445 | if your_place in [ b_balcny, b_wledge ] then 446 | falling_down 447 | 448 | else 449 | write_message('Whoooopeeeee!!!'); 450 | 451 | end; {jump} 452 | 453 | 454 | 455 | 456 |  -------------------------------------------------------------------------------- /SOFTP6.INC: -------------------------------------------------------------------------------- 1 | { Softporn Adventure, include file 6 } 2 | 3 | 4 | 5 | marry : 6 | {========} 7 | begin 8 | 9 | if noun<>_girl then 10 | write_message('No way, weirdo!!') 11 | 12 | else if not is_here(_girl) then 13 | write_message('No girl!!') 14 | 15 | else if your_place<>c_marryc then 16 | not_yet_but_maybe_later 17 | 18 | else if (money<30) or (not is_carried(_wallet)) then 19 | begin 20 | if (money<20) or (not is_carried(_wallet)) then 21 | write_message( 'The girl says: ' + 22 | '''But you''ll need $2000 for the honeymoon suite!'''); 23 | write_message('The preacher says ''I''ll need $1000 too!!'''); 24 | end 25 | else 26 | begin 27 | write_long_message( 66 ); 28 | money := money - 30; 29 | object_place[_girl] := c_hmoons; 30 | married_to_girl := true; 31 | path[c_hallwy,south] := c_hmoons; 32 | end; 33 | 34 | end; {marry} 35 | 36 | 37 | fuck : { seduce, rape, screw } 38 | {========} 39 | begin 40 | 41 | if (not is_here(noun)) and (not is_carried(noun)) and (noun<>_you) then 42 | find_me_one 43 | 44 | else case noun of 45 | 46 | _hooker: 47 | begin 48 | if hooker_fucked then 49 | write_message('She can''t take it any more!!!!') 50 | else 51 | begin 52 | if rubber_worn then 53 | begin 54 | hooker_fucked := true; 55 | score := score + 1; 56 | write_long_message( 51 ) 57 | end 58 | else 59 | begin 60 | write_message('Oh no!!! ' + 61 | 'I''ve got the dreaded atomic clap!!! I''m dead!!'); 62 | purgatory; 63 | end 64 | end; 65 | end; 66 | 67 | _doll: 68 | begin 69 | if is_carried(_doll) then 70 | if doll_inflated then 71 | begin 72 | write_long_message( 52 ); 73 | object_place[_doll] := nowhere; 74 | objects_carried := objects_carried - 1; 75 | end 76 | else 77 | write_message('Inflate it first -- stupid!!!') 78 | else 79 | write_message('I can''t unless I''m holding it close'); 80 | end; 81 | 82 | _girl: 83 | begin 84 | case your_place of 85 | c_hmoons: 86 | begin 87 | if wine_ordered then 88 | begin 89 | write_long_message( 54 ); 90 | girl_2_fucked := true; 91 | score := score + 1; 92 | tied_to_bed := true; 93 | object_place[_girl] := p_jacuzi; 94 | object_place[_rope] := your_place; 95 | end 96 | else 97 | write_message('She says ''Get me wine!!! I''m nervous!!'''); 98 | end; 99 | p_jacuzi: 100 | begin 101 | if apple_given then 102 | begin 103 | score := score + 1; 104 | write_long_message( 53 ); 105 | game_ended := true; 106 | end 107 | else 108 | not_yet_but_maybe_later 109 | end; 110 | else not_yet_but_maybe_later 111 | end; { case your_place of } 112 | end; 113 | 114 | _bartender: 115 | begin 116 | write_message('He jumps over the bar and kills me!!'); 117 | purgatory; 118 | end; 119 | 120 | _you: write_message('Not tonight -- I have a headache!!'); 121 | _waitress: write_message 122 | ('She kicks me in the groin and says ''Wise up - Buster!!'''); 123 | _blonde: write_message('She says ''I''m working! Leave me alone!!'''); 124 | _pimp: write_message('He says ''You''ll never have enough money ' + 125 | 'for me - fool!''. I guess he''s gay!'); 126 | _bum: write_message('To do that I need vaseline!!'); 127 | _businessman: write_message('No way!!! You''re weird!!'); 128 | _off: write_message('Fuck off yourself, asshole!!!'); 129 | 130 | else write_message('Pervert!'); 131 | 132 | end; { case noun of } 133 | 134 | end; {fuck} 135 | 136 | 137 | wear : { use } 138 | {========} 139 | begin 140 | 141 | if (not is_here(noun)) and (not is_carried(noun)) and (noun<>_knife) then 142 | find_me_one 143 | 144 | else case noun of 145 | 146 | _rubber: 147 | begin 148 | write_message('It tickles!!'); 149 | rubber_worn := true; 150 | object_place[_rubber] := youhavit; 151 | end; 152 | 153 | _toilet: 154 | begin 155 | write_message('.....I got those constipation blues..........'); 156 | writeln('Ahhh...relief! Thanks'); 157 | end; 158 | 159 | _bed: 160 | begin 161 | write_message('Ahhhhh.......sleep!!!!'); 162 | delay(1000); 163 | writeln('No, I can''t sleep! Have to find me a girl!!!!'); 164 | end; 165 | 166 | _rope: 167 | begin 168 | if is_carried(_rope) then 169 | begin 170 | if your_place=b_balcny then 171 | begin 172 | object_place[_rope] := your_place; 173 | rope_in_use := true; 174 | write_message('You tie the safety rope to the balcony'); 175 | end 176 | else 177 | not_yet_but_maybe_later 178 | end 179 | else 180 | I_dont_have_it 181 | end; 182 | 183 | _passcard: 184 | begin 185 | if is_carried(_passcard) then 186 | begin 187 | if your_place=d_entrnc then 188 | begin 189 | write_message('I show my passcard and the door opens'); 190 | path[d_entrnc,west] := d_disco; 191 | end 192 | else 193 | not_yet_but_maybe_later 194 | end 195 | else 196 | I_dont_have_it 197 | end; 198 | 199 | _knife: 200 | begin 201 | write_message('Let me see if I still have the knife!'); 202 | delay(600); 203 | if is_carried(_knife) then 204 | begin 205 | if tied_to_bed then 206 | begin 207 | write_message('I do and it worked! Thanks!'); 208 | tied_to_bed := false; 209 | end 210 | else 211 | begin 212 | write_message('Samurai sex fiend!!!!!!!!!!!!!!!!!!!'); 213 | delay(600); 214 | writeln('I stab myself in extacy!'); 215 | purgatory; 216 | end; 217 | end 218 | else 219 | I_dont_have_it 220 | end; 221 | 222 | else 223 | I_cant_do_that 224 | 225 | end; 226 | 227 | end; {wear/use} 228 | 229 | 230 | answer : 231 | {========} 232 | begin 233 | 234 | if not is_here(noun) then 235 | find_me_one 236 | 237 | else if noun<>_telephone then 238 | I_cant_do_that 239 | 240 | else if telephone_ringing then 241 | begin 242 | writeln; 243 | writeln('A girl says ''Hi honey! This is ',girl_name,'. Dear, why'); 244 | writeln('don''t you forget this game and ',girl_do,' with me????'); 245 | writeln('After all, your ',your_part,' has always turned me on!!!!'); 246 | writeln('So bring a ',your_object,' and come play with my ',girl_part, 247 | '!'''); 248 | writeln('She hangs up!'); 249 | telephone_ringing := false; 250 | telephone_answered := true; 251 | end 252 | 253 | else 254 | write_message('It''s not ringing!'); 255 | 256 | end; {answer} 257 | 258 | 259 | call : { dial } 260 | {========} 261 | begin 262 | 263 | if your_place=p_pntpch then 264 | write_message('This only takes incoming calls!!') 265 | 266 | else if (full_noun='6969') and (not called_555_6969) then 267 | begin 268 | writeln; 269 | writeln('A voice says ''Hello, please answer the questions ', 270 | 'with one word answers:'); 271 | write('What''s your favorite girls name? '); readln(girl_name); 272 | write('Name a nice part of her anatomy! '); readln(girl_part); 273 | write('What do you like to do with her? '); readln(girl_do); 274 | write('And the best part of your body? '); readln(your_part); 275 | write('Finally, your favorite object? '); readln(your_object); 276 | writeln('He hangs up!'); 277 | called_555_6969 := true; 278 | for i:=1 to length(girl_name) do 279 | girl_name[i] :=locase(girl_name[i]); 280 | girl_name[1] := upcase(girl_name[1]); 281 | for i:=1 to length(girl_part) do 282 | girl_part[i] :=locase(girl_part[i]); 283 | for i:=1 to length(girl_do) do 284 | girl_do[i] :=locase(girl_do[i]); 285 | for i:=1 to length(your_part) do 286 | your_part[i] :=locase(your_part[i]); 287 | for i:=1 to length(your_object) do 288 | your_object[i] :=locase(your_object[i]); 289 | end 290 | 291 | else if (full_noun='0439') and (not called_555_0439) then 292 | begin 293 | write_long_message( 67 ); 294 | called_555_0439 := true; 295 | end 296 | 297 | else if (full_noun='0987') and married_to_girl and 298 | (not called_555_0987) then 299 | begin 300 | write_long_message( 68 ); 301 | wine_ordered := true; 302 | called_555_0987 := true; 303 | object_place[_wine] := c_hmoons; 304 | end 305 | 306 | else 307 | write_message('Nobody answers'); 308 | 309 | end; {call/dial} 310 | 311 | 312 | break : { smash } 313 | {========} 314 | begin 315 | 316 | if not is_here(noun) then 317 | find_me_one 318 | 319 | else if noun=_window then 320 | begin 321 | write_message('Let me see if I have a hammer'); 322 | delay(400); 323 | if is_carried(_hammer) then 324 | begin 325 | write_message('The window smashes to pieces'); 326 | path[b_wledge,south] := b_inroom; 327 | end 328 | else 329 | I_dont_have_it 330 | end 331 | 332 | else 333 | I_cant_do_that 334 | 335 | end; {break/smash} 336 | 337 | 338 | cut : 339 | {========} 340 | begin 341 | 342 | write_message('Let me see if I still have the knife!'); 343 | delay(600); 344 | 345 | if is_carried(_knife) then 346 | begin 347 | if (noun=_rope) and tied_to_bed then 348 | begin 349 | write_message('I do and it worked! Thanks!'); 350 | tied_to_bed := false; 351 | end 352 | else 353 | begin 354 | write_message('Samurai sex fiend!!!!!!!!!!!!!!!!!!!'); 355 | delay(600); 356 | writeln('I stab myself in extacy!'); 357 | purgatory; 358 | end; 359 | end 360 | 361 | else 362 | I_dont_have_it; 363 | 364 | end; {cut} 365 | 366 | 367 | dance : 368 | {========} 369 | begin 370 | 371 | writeln; 372 | for i:=1 to 3 do 373 | begin 374 | delay(500); 375 | writeln('Boogie Woogie!!!'); 376 | delay(500); 377 | writeln('Yeh Yeh Yeh!!!'); 378 | end; 379 | writeln('I got the steps, man!!'); 380 | 381 | end; {dance} 382 | 383 | 384 | kill : 385 | {========} 386 | write_message('Try using a knife!!!'); 387 | 388 | 389 | pay : 390 | {========} 391 | begin 392 | 393 | if not is_here(noun) then 394 | find_me_one 395 | 396 | else case noun of 397 | 398 | _pimp: 399 | begin 400 | if hooker_fucked then 401 | write_message('He says ''I don''t want your money - stud!''') 402 | else 403 | write_message('Try going up -- he''ll take the money then'); 404 | end; 405 | 406 | _hooker: 407 | write_message('You already paid the Pimp, stupid!!'); 408 | 409 | _blonde,_waitress,_girl: 410 | begin 411 | write_message('She yells ''I''m not a whore!!!'' and kills me!'); 412 | purgatory; 413 | end; 414 | 415 | _preacher: 416 | write_message 417 | ('Bring a girl here to marry -- he''ll take the money then!'); 418 | 419 | _businessman: 420 | write_message('He''s too drunk to do business right now!'); 421 | 422 | _bartender: 423 | write_message('Buy something -- he''ll take the money then'); 424 | 425 | _dealer: 426 | write_message('Why not play 21 instead? You''ll lose anyway, fool!'); 427 | 428 | else 429 | I_cant_do_that; 430 | 431 | end; 432 | 433 | end; {pay} 434 | 435 | 436 | smoke : 437 | {========} 438 | begin 439 | 440 | if noun=_plant then 441 | begin 442 | write_message('A cop beats me over the head!!!!'); 443 | purgatory; 444 | end 445 | 446 | else 447 | I_cant_do_that; 448 | 449 | end; {smoke} 450 | 451 | 452 | show : 453 | {========} 454 | begin 455 | 456 | if noun=_passcard then 457 | begin 458 | if is_carried(_passcard) then 459 | begin 460 | if your_place=d_entrnc then 461 | begin 462 | write_message('I show my passcard and the door opens'); 463 | path[d_entrnc,west] := d_disco; 464 | end 465 | else 466 | not_yet_but_maybe_later 467 | end 468 | else 469 | I_dont_have_it 470 | end 471 | 472 | else 473 | I_cant_do_that; 474 | 475 | end; {show} 476 | 477 | 478 | smell : 479 | {========} 480 | begin 481 | 482 | if (not is_here(noun)) and (not is_carried(noun)) then 483 | find_me_one 484 | 485 | else case noun of 486 | _blonde: write_message('Hmmm.....nice!!!!'); 487 | _hooker: write_message('OK, who''s eating tuna fish?!?!?!'); 488 | _toilet: write_message('Arghhh...I''m going to puke!!!!!!'); 489 | _plant: write_message('Ahhh..chooo!!!!!! I guess I''m allergic!'); 490 | _garbage: write_message('Yechhhhh!!!!!'); 491 | _flowers: write_message('Smells like perfume!!!'); 492 | else write_message('Smells OK'); 493 | end; 494 | 495 | end; {smell} 496 | 497 | 498 | help : 499 | {========} 500 | begin 501 | give_help; 502 | end; {help} 503 | 504 | 505 | kiss : 506 | {========} 507 | begin 508 | write_message('Don''t do that!!!! It gets me excited!!'); 509 | end; {kiss} 510 | 511 | 512 | stab : 513 | {========} 514 | begin 515 | stab_someone; 516 | end; {stab} 517 | 518 | 519 | quit : { stop, bye } 520 | {========} 521 | begin 522 | game_ended := true; 523 | end; {quit} 524 | 525 | show_score : 526 | {========} 527 | begin 528 | writeln; 529 | writeln('Your score is ''',score,''' out of a possible ''3'''); 530 | end; {show_score} 531 | 532 | 533 | save : 534 | {========} 535 | begin 536 | p := pos(' ',objnam); 537 | if p>0 then objnam := copy(objnam,1,p-1); 538 | assign( save_file, save_file_name(objnam) ); 539 | rewrite( save_file ); 540 | write( save_file, game_position ); 541 | close( save_file ); 542 | write_message( save_file_name(objnam) + ' saved' ); 543 | end; {save} 544 | 545 | 546 | restore : 547 | {========} 548 | begin 549 | p := pos(' ',objnam); 550 | if p>0 then objnam := copy(objnam,1,p-1); 551 | {$I-} 552 | write_message( 'Restoring from ' + save_file_name(objnam) ); 553 | writeln; 554 | assign( save_file, save_file_name(objnam) ); 555 | reset( save_file ); 556 | iores := IoResult; 557 | if iores=0 then 558 | begin 559 | read( save_file, game_position ); 560 | iores := IoResult; 561 | end; 562 | {$I+} 563 | if iores=1 then 564 | write_message( save_file_name(objnam) + ' never saved' ) 565 | else if (iores=$90) or (iores=$91) then 566 | write_message( save_file_name(objnam) + ' is bad' ) 567 | else if iores<>0 then 568 | begin 569 | writeln; 570 | writeln( 'I/O error ', iores ); 571 | end 572 | else 573 | write_long_message( integer(your_place) + 1 ); 574 | close( save_file ); 575 | end; {restore} 576 | 577 | 578 | else {anything else} 579 | I_cant_do_that; 580 | 581 |  -------------------------------------------------------------------------------- /SOFTP3.INC: -------------------------------------------------------------------------------- 1 | { Softporn Adventure, include file # 3 } 2 | 3 | 4 | 5 | procedure newlines( lines : integer ); 6 | (*==================================*) 7 | var i : integer; 8 | begin 9 | for i:=1 to lines do writeln; 10 | end; 11 | 12 | 13 | procedure I_cant_go_that_way; 14 | (*=========================*) 15 | begin 16 | write_message( 'I can''t go that way!' ); 17 | end; 18 | 19 | 20 | procedure cant_do_that; 21 | (*===================*) 22 | var messg : integer; 23 | begin 24 | messg := random(8) + 1; 25 | case messg of 26 | 1: writeln('Huh?'); 27 | 2: writeln('Ummm......huh?'); 28 | 3: writeln('You''re nuts!'); 29 | 4: writeln('You can''t be serious!!'); 30 | 5: writeln('Not bloody likely!!'); 31 | 6: writeln('I don''t know how to.'); 32 | 7: writeln('An interesting idea....'); 33 | 8: writeln('I can''t do that.'); 34 | end; 35 | end; 36 | 37 | 38 | procedure huh; 39 | (*==========*) 40 | begin 41 | write_message('Huh?'); 42 | end; 43 | 44 | 45 | procedure I_cant_do_that; 46 | (*=====================*) 47 | begin 48 | writeln; 49 | cant_do_that; 50 | end; 51 | 52 | 53 | procedure I_dont_know_that_word; 54 | (*============================*) 55 | begin 56 | write_message( 'I don''t know that word!' ); 57 | end; 58 | 59 | 60 | procedure find_me_one; 61 | (*==================*) 62 | var messg : integer; 63 | begin 64 | messg := random(4) + 1; 65 | writeln; 66 | case messg of 67 | 1: writeln('Find me one!!'); 68 | 2: writeln('I don''t see it here!'); 69 | 3: writeln('I can''t find it here!'); 70 | 4: writeln('You have to find it first!'); 71 | end; 72 | end; 73 | 74 | 75 | procedure I_dont_have_it; 76 | (*=====================*) 77 | begin 78 | write_message('I don''t have it!!'); 79 | end; 80 | 81 | 82 | procedure I_already_have_it; 83 | (*========================*) 84 | begin 85 | with game_position do 86 | write_message( 'I already have it!!'); 87 | end; 88 | 89 | 90 | procedure I_see_nothing_special; 91 | (*============================*) 92 | begin 93 | write_message('I see nothing special'); 94 | end; 95 | 96 | 97 | procedure I_see_something( object : objects; messg : str25 ); 98 | (*=========================================================*) 99 | begin 100 | with game_position do 101 | begin 102 | if object_place[object]=nowhere then 103 | begin 104 | write_message('I see something!!!'); 105 | object_place[object] := your_place; 106 | end 107 | else if messg='' then 108 | I_see_nothing_special 109 | else 110 | write_message( messg ) 111 | end; 112 | end; 113 | 114 | 115 | procedure not_yet_but_maybe_later; 116 | (*==============================*) 117 | begin 118 | write_message('Not yet but maybe later!'); 119 | end; 120 | 121 | 122 | procedure sorry_no_money; 123 | (*=====================*) 124 | begin 125 | write_message('Sorry -- no money!!'); 126 | end; 127 | 128 | 129 | function is_here ( obj : objects ) : boolean; 130 | (*=========================================*) 131 | begin 132 | with game_position do 133 | is_here := object_place[obj] = your_place; 134 | end; 135 | 136 | 137 | function is_carried ( obj : objects ) : boolean; 138 | (*============================================*) 139 | begin 140 | with game_position do 141 | is_carried := object_place[obj] = youhavit; 142 | end; 143 | 144 | 145 | function you_are_in ( place : places ) : boolean; 146 | (*=============================================*) 147 | begin 148 | with game_position do 149 | you_are_in := your_place = place; 150 | end; 151 | 152 | 153 | 154 | function save_file_name( objnam : word_name_string ) : str25; 155 | (*=========================================================*) 156 | var i : integer; 157 | file_name : str25; 158 | begin 159 | file_name := 'SOFTP' + copy(objnam,1,3); 160 | repeat 161 | i := pos( ' ', file_name ); 162 | if i>0 then 163 | delete( file_name, i, 1 ); 164 | until i=0; 165 | if file_name='SOFTP' then 166 | file_name := 'SOFTPORN'; 167 | save_file_name := file_name + '.SAV'; 168 | end; 169 | 170 | 171 | 172 | procedure init_new_game; 173 | (*====================*) 174 | 175 | var yesno : char; 176 | place : places; 177 | direction : directions; 178 | i : integer; 179 | 180 | begin 181 | clrscr; 182 | cursor_to_bottom; 183 | writeln ('Welcome to SOFTPORN ADVENTURE!!'); newlines(2); 184 | write ( 'Do you need instructions? (y/n) '); read_key( yesno, ['Y','N'] ); 185 | if yesno='Y' then 186 | give_help 187 | else 188 | newlines(2); 189 | 190 | with game_position do 191 | begin 192 | 193 | line_from_kbd := ''; 194 | 195 | object_place := orig_object_place; 196 | 197 | path := orig_path; 198 | 199 | for place:=first_place to last_place do 200 | place_visited[place] := false; 201 | 202 | your_place := b_bar; 203 | 204 | objects_carried := 0; 205 | TV_channel := 0; 206 | money := 10; { $1000 } 207 | score := 0; 208 | 209 | rope_in_use := false; 210 | window_broken := false; 211 | toilet_flushed := false; 212 | called_555_0987 := false; 213 | called_555_6969 := false; 214 | called_555_0439 := false; 215 | rubber_worn := false; 216 | hooker_fucked := false; 217 | door_W_open := false; 218 | radio_listened := false; 219 | wine_ordered := false; 220 | telephone_ringing := false; 221 | telephone_answered := false; 222 | hole_peeped := false; 223 | girl_2_fucked := false; 224 | tied_to_bed := false; 225 | drawer_open := false; 226 | closet_open := false; 227 | cabinet_open := false; 228 | doll_inflated := false; 229 | stool_climbed := false; 230 | water_on := false; 231 | pitcher_full := false; 232 | seeds_planted := false; 233 | seeds_watered := false; 234 | apple_given := false; 235 | candy_given := false; 236 | flowers_given := false; 237 | ring_given := false; 238 | married_to_girl := false; 239 | 240 | end; 241 | 242 | end; { Init new game } 243 | 244 | 245 | procedure look_around; 246 | (*==================*) 247 | var objcount : integer; 248 | obj : objects; 249 | exits, 250 | exitcount : integer; 251 | exit : directions; 252 | anyexit : boolean; 253 | i,j, 254 | hpos, 255 | namelen : integer; 256 | 257 | begin 258 | with game_position do 259 | begin 260 | if not place_visited[your_place] then 261 | write_long_message( integer(your_place)+1 ); 262 | if (your_place=p_pntpch) and called_555_0439 then 263 | begin 264 | if not telephone_answered and (random(4)=2) then 265 | telephone_ringing := true; 266 | if telephone_ringing then 267 | write_message('The telephone rings'); 268 | end; 269 | place_visited[your_place] := true; 270 | newlines(2); 271 | 272 | gotoXY(1,1); 273 | clreol; 274 | writeln( place_name[your_place] ); 275 | 276 | clreol; 277 | write( 'Items in sight are: ' ); 278 | hpos := 23; 279 | objcount := 0; 280 | for obj := first_object to last_object do 281 | begin 282 | if is_here(obj) then 283 | begin 284 | if objcount>0 then 285 | begin 286 | write(', '); 287 | hpos := hpos + 2; 288 | end; 289 | objcount := objcount + 1; 290 | namelen := length(object_name[obj]); 291 | if ( hpos + 3 + namelen ) > 80 then 292 | begin 293 | writeln; 294 | clreol; 295 | write( ' ' ); 296 | hpos := 23; 297 | end; 298 | write(object_name[obj]); 299 | hpos := hpos + namelen; 300 | end; 301 | end; 302 | if objcount=0 then 303 | writeln( 'Nothing interesting.') 304 | else 305 | writeln; 306 | 307 | clreol; 308 | write( 'Other areas are: '); 309 | exitcount := 0; 310 | for exit := first_direction to last_direction do 311 | if path[your_place,exit] <> nowhere then 312 | exitcount := exitcount + 1; 313 | exits := exitcount; 314 | if exits=0 then 315 | write('By magic!') 316 | else 317 | for exit := first_direction to last_direction do 318 | if path[your_place,exit] <> nowhere then 319 | begin 320 | if exitcount1 then 323 | write(', ') 324 | else if exits>1 then 325 | write(' and '); 326 | end; 327 | exitcount := exitcount - 1; 328 | write( direction_name[exit]); 329 | end; 330 | 331 | writeln; 332 | clreol; 333 | for i:=1 to 79 do 334 | write('='); 335 | writeln; 336 | clreol; 337 | 338 | cursor_next_to_bottom; 339 | 340 | end; { with } 341 | 342 | end; { look_around } 343 | 344 | 345 | 346 | procedure take_inventory; 347 | (*=====================*) 348 | var objcount : integer; 349 | obj : objects; 350 | 351 | begin 352 | with game_position do 353 | begin 354 | writeln; 355 | writeln( 'I''m carrying: '); 356 | objcount := 0; 357 | for obj := first_object to last_object do 358 | begin 359 | if is_carried(obj) then 360 | begin 361 | objcount := objcount + 1; 362 | writeln(object_name[obj]); 363 | end; 364 | end; 365 | if objcount=0 then writeln('Nothing') else writeln; 366 | end; 367 | 368 | end; { take_inventory } 369 | 370 | 371 | 372 | procedure replace( object, replacement : str10; target : str120 ); 373 | (*==============================================================*) 374 | var i : integer; 375 | begin 376 | if object<>replacement then 377 | repeat 378 | i := pos( object, target ); 379 | if i>0 then 380 | begin 381 | delete( target, i, length(object) ); 382 | insert( replacement, target, i ); 383 | end; 384 | until i=0; 385 | end; { replace } 386 | 387 | 388 | procedure replace_with_space( object : str10; target : str120 ); 389 | (*============================================================*) 390 | begin 391 | replace( object, ' ', target ); 392 | end; { replace_with_space } 393 | 394 | 395 | procedure remove_leading_spaces( var str : str120 ); 396 | (*================================================*) 397 | var i : integer; 398 | leading_space : boolean; 399 | begin 400 | repeat 401 | i := length(str); 402 | leading_space := (i>0) and (str[1]=' '); 403 | if leading_space then 404 | delete( str,1,1); 405 | until not leading_space; 406 | end; { remove_leading_spaces } 407 | 408 | 409 | procedure remove_leading_spaces_and_periods( var str : str120 ); 410 | (*============================================================*) 411 | var i : integer; 412 | leading_space_period : boolean; 413 | begin 414 | repeat 415 | i := length(str); 416 | leading_space_period := (i>0) and ( (str[1]=' ') or (str[1]='.') ); 417 | if leading_space_period then 418 | delete( str,1,1); 419 | until not leading_space_period; 420 | end; { remove_leading_spaces_and_periods } 421 | 422 | 423 | procedure remove_trailing_spaces( var str : str120 ); 424 | (*=================================================*) 425 | var i : integer; 426 | trailing_space : boolean; 427 | begin 428 | repeat 429 | i := length(str); 430 | trailing_space := (i>0) and (str[1]=' '); 431 | if trailing_space then 432 | delete( str,i,1); 433 | until not trailing_space; 434 | end; { remove_trailing_spaces } 435 | 436 | 437 | procedure remove_multiple_spaces( var str : str120 ); 438 | (*=================================================*) 439 | var i : integer; 440 | begin 441 | repeat 442 | i := pos( ' ', str ); 443 | if i>0 then 444 | delete( str, i, 1 ); 445 | until i=0; 446 | end; { remove_multiple_spaces } 447 | 448 | 449 | procedure expand_abbreviations( var str : str120 ); 450 | (*===============================================*) 451 | var ch1 : char; 452 | str4 : string[4]; 453 | i : integer; 454 | begin 455 | str4 := copy( str+' ', 1, 4 ); 456 | for i:=1 to length(str4) do 457 | str4[i] := upcase(str4[i]); 458 | if str4 = 'INVE' then 459 | str := 'I'; 460 | if length(str)=1 then 461 | begin 462 | ch1 := upcase(str[1]); 463 | if ch1='I' then str := 'TAKE INVE' 464 | else if ch1='N' then str := 'GO NORT' 465 | else if ch1='S' then str := 'GO SOUT' 466 | else if ch1='E' then str := 'GO EAST' 467 | else if ch1='W' then str := 'GO WEST' 468 | else if ch1='U' then str := 'GO UP' 469 | else if ch1='D' then str := 'GO DOWN' 470 | else if ch1='L' then str := 'LOOK'; 471 | end; 472 | end; { expand abbreviations } 473 | 474 | 475 | procedure add_definite_article_to( var full_noun : str25 ); 476 | (*=======================================================*) 477 | begin 478 | if full_noun[1] in vowels then 479 | full_noun := ' an ' + full_noun 480 | else 481 | full_noun := ' a ' + full_noun; 482 | end; 483 | 484 | 485 | procedure split_up_in_verb_and_noun( command : str120; 486 | var verb, noun : word_name_string; 487 | var full_verb, full_noun : str25 ); 488 | (*==================================================*) 489 | const spaces = ' '; 490 | var i, p, k : integer; 491 | glue_word : boolean; 492 | word : word_name_string; 493 | full_word : str25; 494 | begin 495 | verb := spaces; 496 | noun := spaces; 497 | full_verb := ''; 498 | full_noun := ''; 499 | remove_leading_spaces(command); 500 | for i:=1 to 2 do 501 | begin 502 | repeat 503 | p := pos( ' ', command ); 504 | if p=0 then 505 | begin 506 | full_word := command; 507 | command := ''; 508 | end 509 | else 510 | begin 511 | full_word := copy ( command, 1, p-1 ); 512 | delete( command, 1, p ); 513 | remove_leading_spaces(command); 514 | end; 515 | word := full_word + spaces; 516 | for k:=1 to length(word) do 517 | word[k] := upcase(word[k]); 518 | glue_word := false; 519 | for k:=1 to gl_words do 520 | if word=glue_words[k] then 521 | glue_word := true; 522 | until not glue_word; 523 | if i=1 then 524 | begin 525 | verb := word; 526 | full_verb := full_word; 527 | end 528 | else 529 | begin 530 | noun := word; 531 | full_noun := full_word; 532 | end; 533 | end; { for i:=1 to 2 do } 534 | for i:=1 to syn_verbs do 535 | if verb=syn_verb[i].orig then 536 | verb := syn_verb[i].repl; 537 | for i:=1 to syn_nouns do 538 | if noun=syn_noun[i].orig then 539 | noun := syn_noun[i].repl; 540 | end; { split up in verb and noun } 541 | 542 | 543 | 544 | procedure read_and_parse_command( var verb, noun : word_name_string; 545 | var full_verb, full_noun : str25 ); 546 | (*=================================================================*) 547 | 548 | var i, sppos : integer; 549 | command : str120; 550 | command_ok : boolean; 551 | 552 | begin 553 | 554 | repeat 555 | 556 | if line_from_kbd='' then 557 | begin 558 | repeat 559 | look_around; 560 | repeat 561 | writeln; 562 | write( 'What shall I do? ' ); 563 | readln( line_from_kbd ); 564 | if line_from_kbd='' then 565 | write_message('Beg pardon?'); 566 | until line_from_kbd<>''; 567 | repeat 568 | i := pos( '-', line_from_kbd ); 569 | if i>0 then 570 | delete( line_from_kbd, i, 1 ); 571 | until i=0; 572 | for i := 1 to length(line_from_kbd) do 573 | begin 574 | if line_from_kbd[i] in [ '!', '?', ',' ] then 575 | line_from_kbd[i] := '.' 576 | else if line_from_kbd[i] in [ '!'..'-', '/', ':'..'?' ] then 577 | line_from_kbd[i] := ' '; 578 | end; 579 | remove_leading_spaces_and_periods(line_from_kbd); 580 | remove_trailing_spaces(line_from_kbd); 581 | remove_multiple_spaces(line_from_kbd); 582 | if line_from_kbd=' ' then 583 | line_from_kbd := ''; 584 | if line_from_kbd='' then 585 | I_cant_do_that; 586 | until line_from_kbd<>''; 587 | end; 588 | 589 | 590 | i := pos( '.', line_from_kbd ); 591 | if i>0 then 592 | begin 593 | command := copy( line_from_kbd, 1, i-1 ); 594 | delete( line_from_kbd, 1, i ); 595 | remove_leading_spaces_and_periods( line_from_kbd ); 596 | remove_trailing_spaces( command ); 597 | end 598 | else 599 | begin 600 | command := line_from_kbd; 601 | line_from_kbd := ''; 602 | end; 603 | 604 | expand_abbreviations(command); 605 | 606 | repeat 607 | i := pos( '555', command ); 608 | if i>0 then 609 | delete( command, i, 3 ); 610 | until i=0; 611 | 612 | split_up_in_verb_and_noun( command, verb, noun, full_verb, full_noun ); 613 | 614 | command_ok := verb <> ' '; 615 | 616 | if noun='LADY' then 617 | begin 618 | write_message('That''s no Lady!!! That''s my sister!!!!'); 619 | command_ok := false; 620 | end 621 | else if verb='SAY ' then 622 | begin 623 | write_message('OK'); 624 | writeln( copy( command, 5, 120 ) ); 625 | command_ok := false; 626 | end 627 | else if (verb='TKAE') or (verb='TAEK') then 628 | begin 629 | write_message('Learn to spell, idiot!!!'); 630 | command_ok := false; 631 | end; 632 | 633 | until command_ok; 634 | 635 | 636 | end; { read_and_parse_command } 637 | 638 |  -------------------------------------------------------------------------------- /SOFTP1.INC: -------------------------------------------------------------------------------- 1 | { SoftPorn Adventure, include file # 1 (variable declarations) } 2 | 3 | 4 | const word_name_length = 4; 5 | 6 | type 7 | str10 = string[10]; 8 | str15 = string[15]; 9 | str25 = string[25]; 10 | str80 = string[80]; 11 | str120 = string[120]; 12 | 13 | messg_string = str80; 14 | 15 | object_name_string = string[30]; 16 | place_name_string = string[35]; 17 | direction_name_string = string[6]; 18 | verb_name_string = string[10]; 19 | word_name_string = string[word_name_length]; 20 | command_string = string[80]; 21 | synonym = record 22 | orig : word_name_string; 23 | repl : word_name_string; 24 | end; 25 | 26 | set_of_char = set of char; 27 | 28 | directions = ( north, south, east, west, up, down, _no_direction ); 29 | 30 | objects = ( 31 | _desk, _washbasin, _graffiti, _mirror, _toilet, 32 | _businessman, _button, _bartender, _pimp, _hooker, 33 | _billboard, _preacher, _TV, _slot_machines, _cards, 34 | _ashtray, _blonde, _bed, _bum, _peephole, 35 | _door_west, _waitress, _table, _telephone, _closet, 36 | _sink, _elevator, _dealer, _cabinet, _bushes, 37 | _tree, _window, _sign, _girl, _newspaper, 38 | _ring, _whiskey, _beer, _hammer, _garbage, 39 | _flowers, _apple_core, _seeds, _candy, _pills, 40 | _plant, _passcard, _radio, _knife, _magazine, 41 | _rubber, _wine, _wallet, _doll, _apple, 42 | _pitcher, _stool, _rope, _rack, _mushroom, 43 | _control_unit, _curtain, _water, 44 | _taxi, _inventory, _all, _on, _off, 45 | _you, _no_object ); 46 | 47 | places = ( 48 | (* ==================== BAR =================== *) 49 | b_hallwy, b_bathrm, b_bar, b_street, b_backrm, 50 | b_g_dump, b_inroom, b_wledge, b_bedrm, b_balcny, 51 | (* =================== CASINO ================= *) 52 | c_street, c_marryc, c_casino, c_21room, c_lobby, 53 | c_hmoons, c_hallwy, c_balcny, c_htdesk, 54 | (* =================== DISCO ================== *) 55 | d_telbth, d_disco, d_street, d_entrnc, d_phrmcy, 56 | (* ================= PENTHOUSE ================ *) 57 | p_pntfoy, p_jacuzi, p_kitchn, p_garden, p_livrom, 58 | p_pntpch, 59 | (* ================= ELSEWHERE ================ *) 60 | youhavit, nowhere ); 61 | 62 | 63 | 64 | verbs = ( 65 | go, hail, take, drop, look, flush, open, inflate, play, 66 | press, enter, eat, drink, buy, climb, water, fill, pour, 67 | listen, close, jump, 68 | marry, fuck, wear, answer, call, break, cut, dance, 69 | kill, pay, smoke, show, smell, help, kiss, stab, say, quit, 70 | show_score, save, restore, _no_verb ); 71 | 72 | { True constants: } 73 | const max_carried = 7; 74 | first_direction = north; 75 | last_direction = down; 76 | first_object = _desk; 77 | last_object = _no_object; 78 | first_place = b_hallwy; 79 | last_place = nowhere; 80 | first_verb = go; 81 | last_verb = _no_verb; 82 | 83 | type path_array = array[places,first_direction..last_direction] of places; 84 | 85 | 86 | { Typed constants = initialized variables: } 87 | const 88 | bar_area : set of places = [ b_hallwy .. b_balcny ]; 89 | casino_area : set of places = [ c_street .. c_htdesk ]; 90 | disco_area : set of places = [ d_telbth .. d_phrmcy ]; 91 | penthouse_area : set of places = [ p_pntfoy .. p_pntpch ]; 92 | 93 | public_places : set of places = 94 | [ c_street, c_casino, c_21room, c_lobby, c_htdesk, d_street, d_entrnc ]; 95 | 96 | takeable_objects : set of objects 97 | = [ _newspaper, _ring, _whiskey, _beer, _hammer, _garbage, _flowers, 98 | _apple_core, _seeds, _candy, _pills, _plant, _passcard, _radio, _knife, 99 | _magazine, _rubber, _wine, _wallet, _doll, _apple, _pitcher, _stool, 100 | _rope, _rack, _mushroom, _control_unit, _water ]; 101 | 102 | 103 | {Verbs that may be entered witout nouns } 104 | 105 | stand_alone_verbs : set of verbs 106 | = [ look, jump, dance, help, quit, show_score, save, restore ]; 107 | 108 | {Verbs with special nouns } 109 | 110 | special_verbs : set of verbs = 111 | [ take {inven}, hail {taxi}, call {number}, play {slot/21}, buy, 112 | save, restore ]; 113 | 114 | 115 | vowels : set of char = [ 'A', 'O', 'U', 'E', 'I', 'Y', 116 | 'a', 'o', 'u', 'e', 'i', 'y' ]; 117 | 118 | 119 | 120 | direction_name : array[directions] of direction_name_string 121 | = ( 'North', 'South', 'East', 'West', 'Up', 'Down', 'No direction'); 122 | 123 | object_name : array[objects] of object_name_string 124 | = ( 'A Desk', 125 | 'A Washbasin', 126 | 'Graffiti', 127 | 'A Mirror', 128 | 'A Toilet', 129 | 'A Businessman', 130 | 'A Button', 131 | 'The Bartender', 132 | 'A Big Dude!', 133 | 'A Funky Hooker', 134 | 'A Billboard', 135 | 'A Preacher', 136 | 'A TV', 137 | 'Slot Machines', 138 | 'Cards', 139 | 'An Ashtray', 140 | 'A Voluptous Blonde', 141 | 'A Bed', 142 | 'A Bum', 143 | 'A Peep Hole', 144 | 'A Door to the West', 145 | 'A Waitress', 146 | 'A Table', 147 | 'A Telephone', 148 | 'A Closet', 149 | 'A Sink', 150 | 'An Elevator', 151 | 'A Dealer', 152 | 'A Cabinet', 153 | 'Bushes', 154 | 'A Tree', 155 | 'A Window', 156 | 'A Sign', 157 | 'A Girl', 158 | 'A Newspaper', 159 | 'A Wedding Ring', 160 | 'A Shot of Whiskey', 161 | 'A Beer', 162 | 'A Hammer', 163 | 'Garbage', 164 | 'Flowers', 165 | 'The Core of an Apple', 166 | 'Seeds', 167 | 'Candy', 168 | 'Pills', 169 | 'A Plant', 170 | 'A Passcard', 171 | 'A Radio', 172 | 'A Pocket Knife', 173 | 'AdventureBoy Magazine', 174 | 'A Rubber', 175 | 'A Bottle of Wine', 176 | 'A Wallet', 177 | 'An Inflatable Doll', 178 | 'An Apple', 179 | 'A Pitcher', 180 | 'A Stool', 181 | 'A Rope', 182 | 'A Display Rack', 183 | 'A Mushroom', 184 | 'A Remote Control Unit', 185 | 'A Curtain', 186 | 'Water', 187 | 'A Taxi', 188 | 'Inventory', 189 | 'All', 190 | 'On', 191 | 'Off', 192 | 'Yourself', 193 | 'No object' 194 | ); 195 | 196 | orig_object_place : array[objects] of places = ( 197 | {A Desk} b_hallwy, 198 | {A Washbasin} b_bathrm, 199 | {Graffiti} b_bathrm, 200 | {A Mirror} b_bathrm, 201 | {A Toilet} b_bathrm, 202 | {A Businessman} b_hallwy, 203 | {A Button} c_htdesk, {and p_pntfoy} 204 | {The Bartender} b_bar, 205 | {A Big Dude!} b_backrm, 206 | {A Funky Hooker} b_bedrm, 207 | {A Billboard} b_balcny, 208 | {A Preacher} c_marryc, 209 | {A TV} b_backrm, 210 | {Slot Machines} c_casino, 211 | {Cards} c_21room, 212 | {An Ashtray} c_hallwy, 213 | {A Voluptous Blonde} c_htdesk, 214 | {A Bed} c_hmoons, 215 | {A Bum} d_street, 216 | {A Peep Hole} c_balcny, 217 | {A Door to the West} d_entrnc, 218 | {A Waitress} d_disco, 219 | {A Table} d_disco, 220 | {A Telephone} d_telbth, 221 | {A Closet} p_livrom, 222 | {A Sink} p_kitchn, 223 | {An Elevator} c_htdesk, {and p_pntfoy} 224 | {A Dealer} c_21room, 225 | {A Cabinet} p_kitchn, 226 | {Bushes} nowhere, {seen behind bushes} 227 | {A Tree} nowhere, {grown in garden} 228 | {A Window} b_wledge, 229 | {A Sign} b_street, {and c_street and d_street} 230 | {A Girl} d_disco, {c_marryc, c_hmoons, p_jacuzi} 231 | {A Newspaper} nowhere, {seen in drawer in b_hallwy} 232 | {A Wedding Ring} nowhere, {seen in washbasin in b_bathrm} 233 | {A Shot of Whiskey} nowhere, {bought in bar} 234 | {A Beer} nowhere, {bought in bar} 235 | {A Hammer} p_garden, 236 | {Garbage} b_g_dump, 237 | {Flowers} b_hallwy, 238 | {The Core of an Apple} nowhere, {found in garbage} 239 | {Seeds} nowhere, {found in apple core} 240 | {Candy} b_bedrm, 241 | {Pills} b_inroom, 242 | {A Plant} c_lobby, 243 | {A Passcard} nowhere, {found in ashtray in c_hallwy} 244 | {A Radio} c_balcny, 245 | {A Pocket Knife} nowhere, {given by bum} 246 | {AdventureBoy Magazine} nowhere, {found in rack in d_phrmcy} 247 | {A Rubber} d_phrmcy, 248 | {A Bottle of Wine} nowhere, {bought in disco, ordered by phone} 249 | {A Wallet} youhavit, 250 | {An Inflatable Doll} nowhere, {in closet in p_livrom} 251 | {An Apple} nowhere, {on tree grown in p_garden} 252 | {A Pitcher} nowhere, {in cabinet in p_kitchn} 253 | {A Stool} p_garden, 254 | {A Rope} nowhere, {innocent girl ties you with it} 255 | {A Display Rack} d_phrmcy, 256 | {A Mushroom} p_garden, 257 | {A Remote Control Unit} nowhere, {given by businessman} 258 | {A Curtain} b_bar, 259 | {Water} nowhere, {Can get it by Water On} 260 | {A Taxi} nowhere, {Used in Hail taxi} 261 | {Inventory} nowhere, {Used in Take Inventory} 262 | {All} nowhere, {Used in Take All, Drop All} 263 | {On, Off} nowhere, nowhere, {Used in Water On, Water Off} 264 | {You} nowhere, 265 | {No object} nowhere 266 | ); 267 | 268 | verb_name : array[verbs] of word_name_string 269 | = ( 'GO ', 'HAIL', 'TAKE', 'DROP', 'LOOK', 270 | 'FLUS', 'OPEN', 'INFL', 'PLAY', 'PRES', 271 | 'ENTE', 'EAT ', 'DRIN', 'BUY ', 'CLIM', 272 | 'WATE', 'FILL', 'POUR', 'LIST', 'CLOS', 273 | 'JUMP', 'MARR', 'FUCK', 'WEAR', 'ANSW', 274 | 'CALL', 'BREA', 'CUT ', 'DANC', 'KILL', 275 | 'PAY ', 'SMOK', 'SHOW', 'SMEL', 'HELP', 276 | 'KISS', 'STAB', 'SAY ', 'QUIT', 277 | 'SCOR', 'SAVE', 'REST', '' ); 278 | 279 | obj_name : array[objects] of word_name_string 280 | = ( 'DESK', 'WASH', 'GRAF', 'MIRR', 'TOIL', 281 | 'BUSI', 'BUTT', 'BART', 'DUDE', 'HOOK', 282 | 'BILL', 'PREA', 'TV ', 'SLOT', 'CARD', 283 | 'ASHT', 'VOLU', 'BED ', 'BUM ', 'HOLE', 284 | 'DOOR', 'WAIT', 'TABL', 'TELE', 'CLOS', 285 | 'SINK', 'ELEV', 'DEAL', 'CABI', 'BUSH', 286 | 'TREE', 'WIND', 'SIGN', 'GIRL', 'NEWS', 287 | 'RING', 'WHIS', 'BEER', 'HAMM', 'GARB', 288 | 'FLOW', 'CORE', 'SEED', 'CAND', 'PILL', 289 | 'PLAN', 'PASS', 'RADI', 'KNIF', 'MAGA', 290 | 'RUBB', 'WINE', 'WALL', 'DOLL', 'APPL', 291 | 'PITC', 'STOO', 'ROPE', 'RACK', 'MUSH', 292 | 'CONT', 'CURT', 'WATE', 293 | 'TAXI', 'INVE', 'ALL ', 'ON ', 'OFF ', 294 | 'YOU ', '' 295 | ); 296 | 297 | 298 | syn_verbs = 20; 299 | 300 | syn_verb : array[1..syn_verbs] of synonym 301 | = ( ( orig:'GET '; repl:'TAKE' ), 302 | ( orig:'GRAB'; repl:'TAKE' ), 303 | ( orig:'LEAV'; repl:'DROP' ), 304 | ( orig:'PLAN'; repl:'DROP' ), 305 | ( orig:'GIVE'; repl:'DROP' ), 306 | ( orig:'SEAR'; repl:'LOOK' ), 307 | ( orig:'EXAM'; repl:'LOOK' ), 308 | ( orig:'READ'; repl:'LOOK' ), 309 | ( orig:'WATC'; repl:'LOOK' ), 310 | ( orig:'PULL'; repl:'OPEN' ), 311 | ( orig:'PUSH'; repl:'PRES' ), 312 | ( orig:'ORDE'; repl:'BUY ' ), 313 | ( orig:'SEDU'; repl:'FUCK' ), 314 | ( orig:'RAPE'; repl:'FUCK' ), 315 | ( orig:'SCRE'; repl:'FUCK' ), 316 | ( orig:'USE '; repl:'WEAR' ), 317 | ( orig:'DIAL'; repl:'CALL' ), 318 | ( orig:'SMAS'; repl:'BREA' ), 319 | ( orig:'STOP'; repl:'QUIT' ), 320 | ( orig:'BYE '; repl:'QUIT' ) 321 | ); 322 | 323 | 324 | syn_nouns = 17; 325 | 326 | syn_noun : array[1..syn_nouns] of synonym 327 | = ( ( orig:'CAB '; repl:'TAXI'), 328 | ( orig:'PEEP'; repl:'HOLE'), 329 | ( orig:'DRAW'; repl:'DESK'), 330 | ( orig:'BASI'; repl:'WASH'), 331 | ( orig:'PIMP'; repl:'DUDE'), 332 | ( orig:'MACH'; repl:'SLOT'), 333 | ( orig:'21 '; repl:'CARD'), 334 | ( orig:'BLAC'; repl:'CARD'), 335 | ( orig:'DISP'; repl:'RACK'), 336 | ( orig:'PHON'; repl:'TELE'), 337 | ( orig:'WEDD'; repl:'RING'), 338 | ( orig:'BLON'; repl:'VOLU'), 339 | ( orig:'EVE '; repl:'GIRL'), 340 | ( orig:'PAPE'; repl:'NEWS'), 341 | ( orig:'SHOT'; repl:'WHIS'), 342 | ( orig:'TRAS'; repl:'GARB'), 343 | ( orig:'UNIT'; repl:'CONT') 344 | ); 345 | 346 | 347 | gl_words = 9; 348 | 349 | glue_words : array[1..gl_words] of word_name_string 350 | = ( 'A ', 'AN ', 'THE ', 'THIS', 'THAT', 351 | 'AT ', 'TO ', 'FROM', 'WITH' ); 352 | 353 | dir_name : array[directions] of word_name_string 354 | = ( 'NORT', 'SOUT', 'EAST', 'WEST', 'UP ', 'DOWN', '' ); 355 | 356 | place_name : array[places] of place_name_string 357 | = ( 'I''m in a Hallway', 358 | 'I''m in a Bathroom', 359 | 'I''m in a Sleazy Bar', 360 | 'I''m on a Street outside the Bar', 361 | 'I''m in the Backroom', 362 | 'I''m in a Filthy Dumpster', 363 | 'I''m inside the room I broke into!', 364 | 'I''m on a Window Ledge', 365 | 'I''m in a Hooker''s Bedroom', 366 | 'I''m on a Hooker''s Balcony', 367 | 'I''m on a Downtown Street', 368 | 'I''m in a Quickie Marriage Center', 369 | 'I''m in the Main Casino Room', 370 | 'I''m in the ''21'' Room', 371 | 'I''m in the Lobby of the Hotel', 372 | 'I''m in the Honeymoon Suite', 373 | 'I''m in the Hotel Hallway', 374 | 'I''m on the Honeymooner''s Balcony', 375 | 'I''m at the Hotel Desk', 376 | 'I''m in a Telephone Booth', 377 | 'I''m in the Disco', 378 | 'I''m on a Residential Street', 379 | 'I''m in the Disco''s Entrance', 380 | 'I''m in the Pharmacy', 381 | 'I''m in the Penthouse Foyer', 382 | 'I''m in the Jacuzzi', 383 | 'I''m in the Kitchen', 384 | 'I''m in the Garden', 385 | 'I''m in the Living Room', 386 | 'I''m on the Penthouse Porch', 387 | 'Nowhere', 388 | 'Carried by You' 389 | ); 390 | 391 | orig_path: path_array = ( 392 | 393 | { Place Path to North South East West Up Down } 394 | 395 | (* ==================== BAR =================== *) 396 | {b_hallwy} ( b_bathrm, nowhere, b_bar, nowhere, nowhere, nowhere ), 397 | {b_bathrm} ( nowhere, b_hallwy, nowhere, nowhere, nowhere, nowhere ), 398 | {b_bar} ( b_street, nowhere, nowhere, b_hallwy, nowhere, nowhere ), 399 | {b_street} ( nowhere, b_bar, nowhere, nowhere, nowhere, nowhere ), 400 | {b_backrm} ( nowhere, nowhere, nowhere, b_bar, b_bedrm, nowhere ), 401 | {b_g_dump} ( nowhere, nowhere, nowhere, b_street, nowhere, nowhere ), 402 | {b_inroom} ( b_wledge, nowhere, nowhere, nowhere, nowhere, nowhere ), 403 | {b_wledge} ( nowhere, nowhere, b_balcny, nowhere, nowhere, nowhere ), 404 | {b_bedrm} ( b_balcny, nowhere, nowhere, nowhere, nowhere, b_backrm ), 405 | {b_balcny} ( nowhere, b_bedrm, nowhere, b_wledge, nowhere, b_g_dump ), 406 | (* =================== CASINO ================= *) 407 | {c_street} ( c_marryc, nowhere, c_casino, nowhere, nowhere, nowhere ), 408 | {c_marryc} ( nowhere, c_street, nowhere, nowhere, nowhere, nowhere ), 409 | {c_casino} ( c_21room, nowhere, c_lobby, c_street, nowhere, nowhere ), 410 | {c_21room} ( nowhere, c_casino, nowhere, nowhere, nowhere, nowhere ), 411 | {c_lobby} ( nowhere, nowhere, nowhere, c_casino, c_htdesk, nowhere ), 412 | {c_hmoons} ( c_hallwy, nowhere, c_balcny, nowhere, nowhere, nowhere ), 413 | {c_hallwy} ( nowhere, nowhere, c_htdesk, nowhere, nowhere, nowhere ), 414 | {c_balcny} ( nowhere, nowhere, nowhere, c_hmoons, nowhere, nowhere ), 415 | {c_htdesk} ( nowhere, nowhere, nowhere, c_hallwy, nowhere, c_lobby ), 416 | (* =================== DISCO ================== *) 417 | {d_telbth} ( d_disco, nowhere, nowhere, nowhere, nowhere, nowhere ), 418 | {d_disco} ( nowhere, d_telbth, d_entrnc, nowhere, nowhere, nowhere ), 419 | {d_street} ( d_entrnc, nowhere, d_phrmcy, nowhere, nowhere, nowhere ), 420 | {d_entrnc} ( nowhere, d_street, nowhere, nowhere, nowhere, nowhere ), 421 | {d_phrmcy} ( nowhere, nowhere, nowhere, d_street, nowhere, nowhere ), 422 | (* ================= PENTHOUSE ================ *) 423 | {p_pntfoy} ( nowhere, nowhere, p_kitchn, nowhere, p_livrom, nowhere ), 424 | {p_jacuzi} ( nowhere, nowhere, nowhere, nowhere, p_pntpch, nowhere ), 425 | {p_kitchn} ( nowhere, nowhere, nowhere, p_pntfoy, nowhere, nowhere ), 426 | {p_garden} ( nowhere, nowhere, nowhere, nowhere, nowhere, nowhere ), 427 | {p_livrom} ( p_pntpch, nowhere, nowhere, nowhere, nowhere, p_pntfoy ), 428 | {p_pntpch} ( nowhere, p_livrom, nowhere, nowhere, nowhere, p_jacuzi ), 429 | (* ================= ELSEWHERE ================ *) 430 | {youhavit} ( nowhere, nowhere, nowhere, nowhere, nowhere, nowhere ), 431 | {nowhere} ( nowhere, nowhere, nowhere, nowhere, nowhere, nowhere ) 432 | ); 433 | 434 | 435 | 436 | 437 | type gamepos = record 438 | first_var : byte; 439 | object_place : array[objects] of places; 440 | place_visited : array[places] of boolean; 441 | path : path_array; 442 | your_place, 443 | new_place : places; 444 | inven : array[1..max_carried] of objects; 445 | carrying : 1..max_carried; 446 | noun : objects; 447 | verb : verbs; 448 | direction : directions; 449 | command : command_string; 450 | verbnam, 451 | objnam : word_name_string; 452 | game_ended : boolean; 453 | yesno : char; 454 | objects_carried, 455 | money, 456 | score, 457 | TV_channel : integer; 458 | rope_in_use, 459 | window_broken, 460 | toilet_flushed, 461 | called_555_0987, 462 | called_555_6969, 463 | called_555_0439, 464 | rubber_worn, 465 | hooker_fucked, 466 | door_W_open, 467 | radio_listened, 468 | wine_ordered, 469 | telephone_ringing, 470 | telephone_answered, 471 | hole_peeped, 472 | girl_2_fucked, 473 | tied_to_bed, 474 | drawer_open, 475 | closet_open, 476 | cabinet_open, 477 | doll_inflated, 478 | stool_climbed, 479 | water_on, 480 | pitcher_full, 481 | seeds_planted, 482 | seeds_watered, 483 | apple_given, 484 | candy_given, 485 | flowers_given, 486 | ring_given, 487 | married_to_girl : boolean; 488 | girl_name, 489 | girl_part, 490 | girl_do, 491 | your_part, 492 | your_object, 493 | rubber_color, 494 | rubber_flavor, 495 | rubber_lubricated, 496 | rubber_ribbed : str15 497 | end; 498 | 499 | var game_position : gamepos; 500 | i : integer; 501 | p : integer; 502 | iores : integer; 503 | line_from_kbd : str120; 504 | verb_only, 505 | no_verb, 506 | no_object, 507 | no_direction : boolean; 508 | full_verb, 509 | full_noun : str25; 510 | save_file : file of gamepos; 511 | taxi_destination : str10; 512 | password : str10; 513 | _noun : objects; {loop variable} 514 | anything_carried : boolean; 515 |  -------------------------------------------------------------------------------- /SOFTP4.INC: -------------------------------------------------------------------------------- 1 | { Softporn Adventure, include file 4 } 2 | 3 | 4 | 5 | go : 6 | {========} 7 | begin 8 | 9 | if tied_to_bed then 10 | write_message('But I''m tied to the bed!!!!!') 11 | 12 | else if not no_direction then 13 | begin 14 | 15 | if (your_place=b_bedrm) and (direction=north) and 16 | (not hooker_fucked) then 17 | write_message 18 | ('The Hooker says: ''Don''t go there ... do me first!!''') 19 | 20 | else if (your_place=c_hallwy) and (direction=south) and 21 | (not married_to_girl) then 22 | write_message('The door is locked shut!') 23 | 24 | else if (your_place=d_entrnc) and (direction=west) and 25 | (not door_W_open) then 26 | write_message('The door is closed!') 27 | 28 | else if (your_place=b_backrm) and (direction=up) and 29 | (TV_channel<>6) then 30 | begin 31 | if (money<20) or (not is_carried(_wallet)) then 32 | write_message('The Pimp says I can''t until I get $2000') 33 | else if hooker_fucked then 34 | write_message 35 | ('The Pimp says ''No -- the hooker can''t take it anymore!''') 36 | else 37 | begin 38 | write_message('The Pimp takes $2000 and says OK'); 39 | money := money - 20; 40 | your_place := b_bedrm; 41 | end 42 | end 43 | 44 | else if (your_place=b_balcny) and (direction=west) and 45 | (not rope_in_use) then 46 | falling_down 47 | 48 | else 49 | begin 50 | new_place := path[your_place,direction]; 51 | if new_place <> nowhere then 52 | begin 53 | your_place := new_place; 54 | end 55 | else 56 | I_cant_go_that_way; 57 | end; 58 | end 59 | 60 | else 61 | I_cant_do_that 62 | 63 | end; {go} 64 | 65 | 66 | hail : 67 | {========} 68 | begin 69 | 70 | if noun<>_taxi then 71 | write_message('Who are you kidding? You''re pulling at straws, fool!!') 72 | 73 | else if not (your_place in [ b_street, c_street, d_street ]) then 74 | write_message('I''m not in the street, fool!!') 75 | 76 | else 77 | begin 78 | write_long_message( 36 ); 79 | readln( taxi_destination ); 80 | while (length(taxi_destination)>0) and (taxi_destination[1]=' ') do 81 | delete( taxi_destination, 1, 1 ); 82 | for i:=1 to length(taxi_destination) do 83 | taxi_destination[i] := upcase(taxi_destination[i]); 84 | taxi_destination := copy( taxi_destination+' ', 1, 4 ); 85 | if taxi_destination = 'DISC' then 86 | new_place := d_street 87 | else if taxi_destination = 'CASI' then 88 | new_place := c_street 89 | else if taxi_destination = 'BAR ' then 90 | new_place := b_street 91 | else 92 | new_place := nowhere; 93 | if new_place in [your_place,nowhere] then 94 | write_message('Huh? - Hail another!') 95 | else if is_carried(_wine) then 96 | begin 97 | wine_in_taxi; 98 | your_place := new_place; 99 | object_place[_wine] := nowhere; 100 | objects_carried := objects_carried - 1; 101 | end 102 | else 103 | begin 104 | write_message('We arrive and I get out.'); 105 | your_place := new_place; 106 | end; 107 | end; 108 | 109 | end; {hail} 110 | 111 | 112 | take : { get, grab } 113 | {========} 114 | begin 115 | 116 | if noun=_inventory then 117 | begin 118 | anything_carried := false; 119 | for _noun:=first_object to last_object do 120 | if is_carried(_noun) then 121 | begin 122 | if not anything_carried then 123 | write_message('I''m carrying the following:'); 124 | anything_carried := true; 125 | write(object_name[_noun]); 126 | if (_noun=_wallet) and (money>0) then 127 | writeln(' with $',money,'00') 128 | else 129 | writeln; 130 | end; 131 | if not anything_carried then 132 | write_message('I''m not carrying anything!!'); 133 | end 134 | 135 | else if noun=_off then 136 | write_message('You''re not a bird, fool!!') 137 | 138 | else if noun=_all then 139 | begin 140 | write_message('You hog!!!'); 141 | delay(300); 142 | writeln; 143 | for _noun:=first_object to last_object do 144 | if is_here(_noun) then 145 | begin 146 | write(object_name[_noun],': '); 147 | if objects_carried >= max_carried then 148 | writeln('I''m carrying too much!!!') 149 | else if _noun in takeable_objects then 150 | begin 151 | if (your_place=d_phrmcy) and 152 | (_noun in [_magazine,_rubber]) then 153 | begin 154 | writeln('The man says ''Shoplifter!!'' and shoots me'); 155 | purgatory; 156 | end 157 | else 158 | begin 159 | object_place[_noun] := youhavit; 160 | objects_carried := objects_carried + 1; 161 | if _noun=_water then pitcher_full := true; 162 | if (_noun=_pitcher) and pitcher_full then 163 | object_place[_water] := youhavit; 164 | writeln('Taken'); 165 | end 166 | end 167 | else 168 | cant_do_that; 169 | end; 170 | end 171 | 172 | else if is_carried(noun) then 173 | I_already_have_it 174 | 175 | else if not is_here(noun) then 176 | find_me_one 177 | 178 | else if objects_carried >= max_carried then 179 | write_message('I''m carrying too much!!!') 180 | 181 | else if not (noun in takeable_objects) then 182 | I_cant_do_that 183 | 184 | else if (your_place=d_phrmcy) and ( noun in [_magazine,_rubber] ) then 185 | begin 186 | write_message('The man says ''Shoplifter!!'' and shoots me'); 187 | purgatory; 188 | end 189 | 190 | else if (noun=_water) and (not is_carried(_pitcher)) then 191 | write_message('Get me the pitcher so I don''t spill it!') 192 | 193 | else if (noun=_candy) and (your_place=b_bedrm) and (not hooker_fucked) then 194 | write_message 195 | ('The Hooker says: ''Don''t take it ... do me first!!''') 196 | 197 | else if (noun=_rope) and rope_in_use then 198 | write_message('It is tied to the balcony') 199 | 200 | else 201 | begin 202 | OK; 203 | object_place[noun] := youhavit; 204 | objects_carried := objects_carried + 1; 205 | if noun=_water then pitcher_full := true; 206 | if (noun=_pitcher) and pitcher_full then 207 | object_place[_water] := youhavit; 208 | end 209 | 210 | end; {take} 211 | 212 | 213 | drop : { leave, plant (seeds), give } 214 | {========} 215 | begin 216 | 217 | if noun in [_inventory,_taxi,_on,_off] then 218 | huh 219 | 220 | else if noun=_all then 221 | begin 222 | anything_carried := false; 223 | writeln; 224 | for _noun:=first_object to last_object do 225 | if is_carried(_noun) then 226 | begin 227 | anything_carried := true; 228 | writeln(object_name[_noun],': Dropped'); 229 | object_place[_noun] := your_place; 230 | objects_carried := objects_carried - 1; 231 | end; 232 | if not anything_carried then 233 | writeln('I did''t carry anything!!'); 234 | end 235 | 236 | else if not is_carried(noun) then 237 | I_dont_have_it 238 | 239 | else 240 | begin 241 | object_place[noun] := your_place; 242 | objects_carried := objects_carried - 1; 243 | if (noun=_pitcher) and pitcher_full then 244 | object_place[_water] := your_place 245 | else if noun=_rubber then 246 | rubber_worn := false 247 | else if (your_place=d_disco) and (is_here(_girl)) and 248 | (noun in [_candy,_flowers,_ring]) then 249 | begin 250 | case noun of 251 | _candy: 252 | begin 253 | write_message('She smiles and eats a couple!!'); 254 | candy_given := true; 255 | end; 256 | _flowers: 257 | begin 258 | write_message 259 | ('She blushes profusely and puts them in her hair!'); 260 | flowers_given := true; 261 | object_place[_flowers] := nowhere; 262 | end; 263 | _ring: 264 | begin 265 | write_message('She blushes and puts it in her purse.'); 266 | ring_given := true; 267 | object_place[_ring] := nowhere; 268 | end; 269 | end; { case noun of } 270 | if candy_given and flowers_given and ring_given then 271 | begin 272 | write_message 273 | ('She says: ''See you at the Marriage Center!!'''); 274 | object_place[_girl] := c_marryc; 275 | end; 276 | end 277 | else if is_here(_bum) and (noun=_wine) then 278 | begin 279 | if object_place[_knife]=nowhere then 280 | begin 281 | bum_tells_story; 282 | object_place[_knife] := your_place; 283 | end 284 | else 285 | write_message('The bum mutters ' + 286 | '''That stuff made me puke!! Get out of here!!!'''); 287 | end 288 | else if is_here(_businessman) and (noun=_whiskey) and 289 | (object_place[_control_unit]=nowhere) then 290 | begin 291 | write_message('The guy gives me a TV controller!!'); 292 | object_place[_control_unit] := your_place; 293 | end 294 | else if is_here(_blonde) and (noun=_pills) then 295 | begin 296 | write_long_message( 57 ); 297 | object_place[_blonde] := nowhere; 298 | object_place[_pills] := nowhere; 299 | end 300 | else if (noun=_apple) and (your_place=p_jacuzi) and is_here(_girl) then 301 | begin 302 | write_long_message( 50 ); 303 | apple_given := true; 304 | end 305 | else 306 | OK; 307 | end; 308 | 309 | end; {drop} 310 | 311 | 312 | look : { search, examine, read, watch } 313 | {========} 314 | begin 315 | 316 | if no_object then 317 | write_long_message( integer(your_place)+1 ) 318 | 319 | else if noun=_all then 320 | write_message('That''s too much, one item at a time, please!!') 321 | 322 | else if noun in [_inventory,_on,_off] then 323 | huh 324 | 325 | else if (not is_here(noun)) and 326 | (not is_carried(noun)) then 327 | find_me_one 328 | 329 | else 330 | case noun of 331 | 332 | _desk: 333 | begin 334 | if drawer_open then 335 | I_see_something(_newspaper,'') 336 | else 337 | write_message('It''s drawer is shut'); 338 | end; 339 | 340 | _washbasin: 341 | I_see_something(_ring,'Dead cockroaches...'); 342 | 343 | _graffiti: 344 | look_graffiti; 345 | 346 | _mirror: 347 | write_message('There''s a pervert looking back at me!!'); 348 | 349 | _toilet: 350 | write_message('Hasn''t been flushed in ages! Stinks!!!'); 351 | 352 | _businessman: 353 | write_message('He looks like a whiskey drinker to me!!'); 354 | 355 | _button: 356 | write_message('Says Push.'); 357 | 358 | _bartender: 359 | write_message('He''s waiting for me to buy something!'); 360 | 361 | _pimp: 362 | begin 363 | write_message('He''s wearing a button proclaiming -- ' + 364 | 'Support your local Pimp, gimme $2000!!!'); 365 | end; 366 | 367 | _hooker: 368 | write_long_message( 31 ); 369 | 370 | _billboard: 371 | write_long_message( 63 ); 372 | 373 | _TV: 374 | begin 375 | if not is_carried(_control_unit) then 376 | write_message('To watch TV, I need the remote control unit!!') 377 | else if not hooker_fucked then 378 | write_message('The Pimp says I can''t watch TV') 379 | else 380 | watch_TV( TV_channel ); 381 | end; 382 | 383 | _slot_machines: 384 | write_message('Playing them might be more fun....'); 385 | 386 | _ashtray: 387 | I_see_something(_passcard,''); 388 | 389 | _blonde: 390 | write_long_message( 40 ); 391 | 392 | _bum: 393 | write_message 394 | ('He grumbles -- I''ll tell you a story for a bottle of wine.....'); 395 | 396 | _peephole: 397 | if hole_peeped then 398 | write_message ('All windows at the hotel across the road ' + 399 | 'have their curtains shut.') 400 | else 401 | begin 402 | write_long_message( 55 ); 403 | hole_peeped := true; 404 | end; 405 | 406 | _door_west: 407 | begin 408 | if door_W_open then 409 | write_message('The door is open') 410 | else 411 | begin 412 | write_message('The sign on the door says '); 413 | writeln('''Entry by showing passcard - ' + 414 | 'Club members and their guests only!'''); 415 | end 416 | end; 417 | 418 | _waitress: 419 | write_message('She ignores you!'); 420 | 421 | _telephone: 422 | begin 423 | if your_place=d_telbth then 424 | write_message('A number is there - Call 555-6969 for a good time!') 425 | else 426 | I_see_nothing_special 427 | end; 428 | 429 | _closet: 430 | begin 431 | if closet_open then 432 | I_see_something(_doll,'It''s open') 433 | else 434 | write_message('It''s closed') 435 | end; 436 | 437 | _sink: 438 | write_message 439 | ('The sign over the sink says ''Water on or off to operate'''); 440 | 441 | _elevator: 442 | write_message('It''s doors are closed'); 443 | 444 | _dealer: 445 | write_message('He''s waiting for me to play'); 446 | 447 | _cabinet: 448 | begin 449 | if stool_climbed then 450 | begin 451 | if cabinet_open then 452 | I_see_something(_pitcher,'It''s open') 453 | else 454 | write_message('It''s closed'); 455 | end 456 | else 457 | I_see_nothing_special 458 | end; 459 | 460 | _bushes: 461 | write_message('Entering them would be kinky!!!!'); 462 | 463 | _tree: 464 | I_see_something(_apple,''); 465 | 466 | _sign: 467 | write_message('It says ''Hail taxi here'''); 468 | 469 | _girl: 470 | begin 471 | if your_place=p_jacuzi then 472 | write_long_message( 35 ) 473 | else if (your_place=d_disco) or (your_place=c_marryc) then 474 | write_long_message( 34 ) 475 | else 476 | write_message('She slaps me and yells ''Pervert!!!!!''') 477 | end; 478 | 479 | _newspaper: 480 | begin 481 | if is_carried(_newspaper) then 482 | write_long_message( 32 ) 483 | else 484 | I_dont_have_it 485 | end; 486 | 487 | _garbage: 488 | I_see_something(_apple_core,''); 489 | 490 | _flowers: 491 | write_message('They look beautiful!!!'); 492 | 493 | _apple_core: 494 | I_see_something(_seeds,''); 495 | 496 | _pills: 497 | begin 498 | write_message('The label on the bottle says'); 499 | writeln('''Want to drive someone crazy with lust?? Try this!!!!'''); 500 | end; 501 | 502 | _plant: 503 | begin 504 | if object_place[_bushes]=nowhere then 505 | begin 506 | write_message('There''s a group of bushes behind it!!'); 507 | object_place[_bushes] := your_place; 508 | end 509 | else 510 | I_see_nothing_special 511 | end; 512 | 513 | _radio: 514 | write_message('Maybe I should listen...'); 515 | 516 | _magazine: 517 | begin 518 | if is_carried(_magazine) then 519 | write_long_message( 33 ) 520 | else 521 | I_dont_have_it 522 | end; 523 | 524 | _rubber: 525 | begin 526 | if is_carried(_rubber) then 527 | write_message('It''s ' + rubber_color + ', ' + rubber_flavor + 528 | '-flavored, ' + rubber_lubricated + ', and ' + rubber_ribbed ) 529 | else 530 | I_dont_have_it 531 | end; 532 | 533 | _wallet: 534 | begin 535 | if money>0 then 536 | begin 537 | writeln; 538 | writeln('It contains $',money,'00.'); 539 | end 540 | else 541 | write_message('It''s empty'); 542 | end; 543 | 544 | _doll: 545 | begin 546 | if doll_inflated then 547 | write_message('It''s inflated') 548 | else 549 | write_message('It''s rolled up in a little ball'); 550 | end; 551 | 552 | _pitcher: 553 | begin 554 | if pitcher_full then 555 | write_message('It''s full of water') 556 | else 557 | write_message('It''s empty'); 558 | end; 559 | 560 | _rack: 561 | I_see_something(_magazine,''); 562 | 563 | _curtain: 564 | write_message('It''s on the east wall'); 565 | 566 | else 567 | I_see_nothing_special; 568 | 569 | end; {case noun of} 570 | 571 | end; {look} 572 | 573 | 574 | flush : 575 | {========} 576 | begin 577 | 578 | if not is_here(noun) then 579 | find_me_one 580 | 581 | else if noun=_toilet then 582 | begin 583 | write_long_message( 69 ); 584 | delay(300); 585 | write_message('I''m dead from the germs!!'); 586 | purgatory; 587 | end 588 | else 589 | I_cant_do_that 590 | 591 | end; {flush} 592 | 593 | 594 | open : { pull } 595 | {========} 596 | begin 597 | 598 | if not is_here(noun) then 599 | find_me_one 600 | 601 | else case noun of 602 | 603 | _window: 604 | write_message('Won''t budge'); 605 | 606 | _desk: 607 | _open(drawer_open); 608 | 609 | _door_west: 610 | begin 611 | if door_W_open then 612 | write_message('It''s already open!!') 613 | else 614 | begin 615 | write_message 616 | ('A voice asks ''Passcard?'' I search in my pockets and...'); 617 | if is_carried(_passcard) then 618 | begin 619 | writeln('I have it! The door opens!'); 620 | door_W_open := true; 621 | path[d_entrnc,west] := d_disco; 622 | end 623 | else 624 | writeln('I don''t have it!!'); 625 | end; 626 | end; 627 | 628 | _curtain: 629 | write_message('It seems to be remotely controlled'); 630 | 631 | _elevator: 632 | write_message('Push the button to open elevator'); 633 | 634 | _closet: 635 | _open(closet_open); 636 | 637 | _cabinet: 638 | if stool_climbed then 639 | _open(cabinet_open) 640 | else 641 | write_message('I can''t reach it!!'); 642 | 643 | else 644 | I_cant_do_that 645 | 646 | end; 647 | 648 | end; {open} 649 | 650 | 651 | inflate : 652 | {========} 653 | begin 654 | 655 | if noun=_doll then 656 | begin 657 | if is_carried(_doll) then 658 | begin 659 | if doll_inflated then 660 | write_message('You''ve already inflated it, stupid!!') 661 | else 662 | begin 663 | OK; 664 | doll_inflated := true; 665 | end; 666 | end 667 | else if is_here(_doll) then 668 | write_message('I can''t unless I''m holding it close') 669 | else 670 | find_me_one; 671 | end 672 | 673 | else 674 | write_message('But the prime rate is already 257%!!'); 675 | 676 | end; {inflate} 677 | 678 | 679 | play : 680 | {========} 681 | begin 682 | 683 | if not is_here(noun) then 684 | find_me_one 685 | 686 | else if noun=_slot_machines then 687 | begin 688 | if is_here(_slot_machines) then 689 | begin 690 | if (money>0) and (is_carried(_wallet)) then 691 | play_slot( money ) 692 | else 693 | sorry_no_money 694 | end 695 | else 696 | write_message('OK, show me your slot....'); 697 | end 698 | 699 | else if noun=_cards then 700 | begin 701 | if your_place=c_21room then 702 | begin 703 | if (money>0) and (is_carried(_wallet)) then 704 | play_21( money ) 705 | else 706 | sorry_no_money 707 | end 708 | else 709 | not_yet_but_maybe_later; 710 | end 711 | 712 | else 713 | write_message('Playful bugger, eh??'); 714 | 715 | end; {play} 716 | 717 | 718 | 719 | 720 | 721 |  -------------------------------------------------------------------------------- /SOFTPORN.TXT: -------------------------------------------------------------------------------- 1 | ### M 1 P 1 in a Hallway 2 | 3 | I'm in a dimly lit hallway. 4 | The paint is peeling off the walls and the floor hasn't been cleaned in months. 5 | Cockroaches run across the floor - jumping as the loosely installed lightbulb 6 | crackles and flickers. 7 | An old desk sits pushed against the wall. A businessman sits on a broken chair 8 | next to the desk. Seems kind of drunk! 9 | 10 | ### M 2 P 2 in a Bathroom 11 | 12 | I'm in a bathroom. 13 | The stench is unbelievable!!!! Graffiti is all over the walls. Cockroaches 14 | don't seem to survive in this place - their dead bodies are strewn everywhere. 15 | The sink's faucets are broken - in fact the sink hangs from the wall by its 16 | rusted plumbing. 17 | A toilet sits in the corner. This baby looks dangerous!! 18 | 19 | ### M 3 P 3 in a Sleazy Bar 20 | 21 | I'm in a sleazy bar. 22 | Behind the bar sits a bartender. 23 | A sign hanging over him says: 'Beer $100 Whiskey $100'. 24 | The place isn't furnished too well. A curtain hangs on one wall. 25 | Next to the curtain is a button. 26 | A fan whirls slowly overhead - moving the stagnant air around. 27 | 28 | ### M 4 P 4 on a Street outside the Bar 29 | 30 | I'm on the sidewalk outside the bar. 31 | A couple stray dogs wander around. A cat is crouched in the entrance watching 32 | the dogs. 33 | Old beat-up cars drive by. The sirens of police cars and ambulances wail in 34 | the distance. 35 | Some paper blows by - from the overfilled garbage dumpster next to me. 36 | I just miss stepping on a dogs "calling card". The dogs look at me - 37 | I hope they don't think I'm a fire hydrant! 38 | 39 | ### M 5 P 5 in the Backroom 40 | 41 | I'm in the backroom of the bar. 42 | There's this big dude in here with me. 43 | He's wearing a button. I can't see what it says ... maybe I should take 44 | a closer look at him ... 45 | Stairs lead up to the second floor. There's a TV in the corner also. 46 | I get the feeling loitering is not encouraged here! 47 | 48 | ### M 6 P 6 in a Filthy Dumpster! 49 | 50 | There's a fire escape ladder above me which lowers automatically whenever 51 | weight is put on it. As a result I find myself in the garbage dumpster 52 | which some fool placed under it! The trash in this thing is foul!! 53 | I'm sitting in a sea of coffee grinds and egg shells. Various pieces of 54 | trash surround me................................ 55 | I don't like this - I think I may throw up!!!! 56 | 57 | ### M 7 P 7 inside the Room I broke into 58 | 59 | I'm in the room I broke into! 60 | The entrance (on the far side of the room) is locked shut. Through the door's 61 | peephole I see a hallway with people in it. So that won't make a good exit! 62 | The plaster's falling off the wall ..... the usual decor for this building. 63 | Through the window leads the safety rope I'm using. 64 | 65 | ### M 8 P 8 on a Window Ledge 66 | 67 | I'm on a window ledge. 68 | My safety rope leads back to the fire escape. While it helps me some I could 69 | still fall and kill myself ... so be careful!!!! 70 | The window looks into a room. But I can't see too much from here. 71 | 72 | ### M 9 P 9 in a Hooker's Bedroom 73 | 74 | I'm in a seedy bedroom. 75 | There's a hooker in here also. The bed's a mess and the hooker's about 76 | the same! 77 | The room is painted bright pink and the ceiling is covered with mirrors! 78 | A fire exit is to the north. 79 | A sign says: 'Take precautions! The clap could be fatal!' 80 | 81 | ### M 10 P 10 on a Hooker's Balcony 82 | 83 | I'm on a balcony. 84 | Off in the distance I see a brightly lite billboard. A fire escape ladder 85 | is at one end of the balcony. A sign says 'Use only in extreme emergency!!!' 86 | Looking over towards the west end of the balcony I see a window ledge. 87 | It looks too dangerous to go there - I might fall! 88 | 89 | ### M 11 P 11 on a Downtown Street 90 | 91 | I'm on a downtown street. 92 | People from all walks of life are milling about. Cadillacs, Limos and 93 | Mercedes sportcars drive up and down the street bringing gamblers to 94 | and from the casinos. 95 | To the north is an establishment - an advertiesemnt says: 96 | 'Use our services to enter into a blissful life!' 97 | To the east is 'The Adventurers Hotel'. Seems like quite the classy place! 98 | 99 | ### M 12 P 12 in a Quickie Marriage Center 100 | 101 | I'm in a quickie marriage center. 102 | A flashing neon sign says: 'Why wait? Marry the girl of your dream today!!! 103 | You provide the girl - we provide a legal marriage for only $1000!!'. 104 | A plaque hangs below the sign, procaliming - 'Over 1 million served!!!' 105 | 106 | ### M 13 P 13 in the Main Casino Room 107 | 108 | I'm in the main casino room. 109 | Row upon row of slot machines fill the room. The bells of the slot machines 110 | clamor as winnings are paid out to the winners. The police cart off one of 111 | the losers. Vagrancy is not tolerated here - vagrants are exterminated ... 112 | keeps the crime rate low ...! But everyone seems happy here .. it's a 113 | gambler's paradise!!!! 114 | 115 | ### M 14 P 14 in the '21' Room 116 | 117 | I'm in the 'Twenty-one room'. 118 | Tables for playing blackjack are everywhere. The noise of people winning 119 | and losing fortunes fills the room. A table stands in front of me - the 120 | dealer waits for me to join in. 121 | People gather ... they want to see me gamble my fortune away! 122 | A voice within me says: 'Go for it -- fool!'. 123 | 124 | ### M 15 P 15 in the Lobby of the Hotel 125 | 126 | I'm in the main lobby. 127 | There's a stairway going up to the hotel desk. The only other exit leads back 128 | to the casino. Over in the corner is a flourishing plant which is sitting 129 | in a pot. Couchs and tables are also in the room - as are other items one 130 | would normally find in a lobby. 131 | The lobby is empty - everybody is out gambling. 132 | 133 | ### M 16 P 16 in the Honeymoon Suite 134 | 135 | I'm in the honeymoon suite of the hotel. 136 | The decor is fabulous!!! A giant heart shaped bed sits in one corner of the 137 | room. The floor is covered with a deep shag rug. 138 | A tiffany lamp provides just the right amount of light to complete the 139 | atmosphere. 140 | A breeze flows through the curtains on the east wall. 141 | 142 | ### M 17 P 17 in the Hotel Hallway 143 | 144 | I'm in a hallway. 145 | Doors line each side - most have 'Do not disturb' hung on the doorknobs. 146 | Waiters from room service pass by bringing food and drink to the hotel guests. 147 | An ashtray stands next to the wall. To the south is the entrance to the 148 | Honeymoon Suite. 149 | 150 | ### M 18 P 18 on the Honeymooner's Balcony 151 | 152 | I'm out on a porch. 153 | A high wooden fence surrounds the porch. There's a little hole in the fence. 154 | An arrow points at it - written next to it is a message - 'Look here!'. 155 | The sun is out - it's rays beat down on the porch making it very hot. 156 | 157 | ### M 19 P 19 at the Hotel Desk 158 | 159 | I'm at the registration counter of the hotel. 160 | A sign says 'No vacancy'. There's an elevator next to the counter marked 161 | 'Penthouse - private'. A button is next to the elevator. 162 | The smell of perfume fills the air! 163 | 164 | ### M 20 P 20 in a Telephone Booth 165 | 166 | I'm in a telephone booth. 167 | The directory is all ripped up and piled on the floor. There's some numbers 168 | scribbled on the side of the telephone. The only ones which are legible read 169 | '555-6969' and '555-0439'. 170 | 171 | ### M 21 P 21 in the Disco 172 | 173 | I'm in the 'Swinging Singles Disco'. 174 | There's a crazy DJ playing the newest hits. The dance floor is filled with 175 | guys and gals doin' the best steps in town. The crowd is really getting into 176 | it - everybody's having fun. There's a table to stand at over by the dance 177 | floor. 178 | A little cardboard sign at the table says: 'Wine - $100'. 179 | 180 | ### M 22 P 22 on a Residential Street 181 | 182 | I'm standing on a sidewalk. 183 | To the north is a fancy doorway - the entrance to the Disco Club. 184 | An old bum sits by the entrance - he's definitley seen better days. 185 | The guy really looks tormented! 186 | To the east is a pharmacy. Apartment houses and homes line the rest of 187 | the street. 188 | 189 | ### M 23 P 23 in the Disco's Entrance 190 | 191 | I'm in the entrance to the disco. 192 | Pictures line the entrance way - showing the happy singles 193 | who attend the club. 194 | Singles pass by me into the club. 195 | Couples wander out - kissing and making eyes at each other. 196 | A door is to the west. The door has a sign on it. 197 | 198 | ### M 24 P 24 in the Pharmacy 199 | 200 | I'm in a pharmacy. 201 | A pharmacist sits behing the counter. On one wall sits a magazine rack. 202 | A sign reads 'This is not a library - no reading'. 203 | A mirror to protect against shoplifting is mounted in the corner. 204 | Kids stop and buy candy. Others buy newspapers/cigarettes etc. 205 | 206 | ### M 25 P 25 in the Penthouse Foyer 207 | 208 | I'm in the foyer of the penthouse. 209 | Over in the corner is a spiral staircase. Next to the elevator is a button. 210 | The place is nicely decorated - no expense spared. 211 | The kitchen is to the east. 212 | 213 | ### M 26 P 26 in the Jacuzzi 214 | 215 | I'm in a jacuzzi!!! 216 | Oh boy - does this feel good!!! 217 | Water swirls around me - its warmth soaks into my body. The feeling of 218 | relaxation is almost numbing. Over on the other side of the jacuzzi is 219 | a most beautiful girl!!!! 220 | I hope she doesn't mind me being here. 221 | 222 | ### M 27 P 27 in the Kitchen 223 | 224 | I'm in the kitchen. 225 | There's a sink to one side. High over the sink is mounted a cabinet. 226 | There's no dishes in sight - the place is kept quite tidy. Real nice. 227 | There's a little sign over the sink. 228 | 229 | ### M 28 P 28 in the Garden 230 | 231 | I'm in a lush garden!!! 232 | The air is filled with the aroma of all sorts of plants. Green ferns are 233 | everywhere. Roses and other flowers emit their wonderful fragrances. 234 | If ever there was a garden of Eden - this certainly has to be the place!! 235 | The entrance disappeared just as I walked in!!! 236 | Hmmm ... how do I get out of here!?!?!?!?!?!? 237 | 238 | ### M 29 P 29 in the Living Room 239 | 240 | I'm in a living room. 241 | There's a closet on one wall. 242 | Nobody is here - but I think there is a gurgling noise coming from somewhere. 243 | A very nice place! 244 | 245 | ### M 30 P 30 on the Penthouse Porch 246 | 247 | I'm outside on an expansive rooftop. 248 | The sun shines in amongst the plants and trees - birds flutter about. 249 | There's a jacuzzi in the middle of the porch!! Well - there's the source 250 | of the gurgling noise!! 251 | A wooden fence surrounds the area. 252 | 253 | 254 | 255 | ### M 31 A 1 Look hooker 256 | 257 | Oh no!!! I paid for this?!?!?! This beast is really ugly!!!! Jeezzzz.... 258 | I hope I don't get the clap from this hooker................. Well ... she 259 | seems to be annoyed that I haven't jumped on her yet ... go to it, stud!!!! 260 | 261 | ### M 32 A 2 Read newspaper (in hallway in bar) 262 | 263 | It's the gambler's gazette!! 264 | There's an article here which tells how to activate the games at the 265 | Adventurer's Hotel. It says that Blackjack can be played by entering 266 | 'Play 21'. The slot machines can be started with 'Play Slot'. 267 | 268 | ### M 33 A 3 Read magazine (in pharmacy) 269 | 270 | Hmmmm ..... an interesting magazine with a nice centerfold! 271 | The feature article is about how to pick up an innocent girl at a disco. 272 | It says - 'Shower her with presents. Dancing won't hurt either. And wine 273 | is always good to get thing moving!' 274 | 275 | ### M 34 A 4 Look girl (in disco) 276 | 277 | Cute and innocent!! Just the way I like my women. 278 | Oh - this girl is great! She has a beautiful California tan ... and pert 279 | little breasts ... a trim waist ..... and well rounded hips!! 280 | I dream about getting this nice a girl. I hope you play this game well 281 | enough so I can have my jolly with her! 282 | You could make your puppet a very happy man................... 283 | 284 | ### M 35 A 5 Look girl (in jacuzzi) 285 | 286 | What a beautiful face!!! She's leaning back in the jacuzzi with her eyes 287 | closed and seems extremely relaxed. The water is bubbling up around her... 288 | She's so beautiful ........ a guy really could fall in love with a girl 289 | like this. I presume her name is 'Eve' ... at least that's what the towel 290 | next to her has embrodiered on it. 291 | 292 | ### M 36 A 6 Hail taxi 293 | 294 | A taxi pulls up and screeches to a halt! I get in the back and sit down. 295 | A sign says 'We service 3 destinations. When asked, please specify - 296 | Disco ... Casino ... or Bar'. 297 | The driver turns and asks: 'Where to Mac???' 298 | 299 | ### M 37 A 7 Press button (at hotel desk or in penthouse foyer) 300 | 301 | The elevator door open ... I get in. 302 | As the doors close the music starts playing - it's the usual elevator stuff 303 | ... boring! We start to move ... after a few seconds the elevator stops. 304 | The doors open and I get out. 305 | 306 | ### M 38 A 8 Eat girl 307 | 308 | She says 'Me first!!!!' 309 | She takes my throbbing tool into her mouth!!! 310 | She starts going to work ... feels so good!!!!!! 311 | Then she smiles and bites it off! She says 'No oral sex in this game!!!!!!' 312 | Suffer!!!!! 313 | 314 | ### M 39 A 9 Give wine (to bum, who then tells his story) 315 | 316 | Well, my son ... here's my story. 317 | I came here many years ago - and my goals were the same as yours ... but this 318 | adventure was too much for me! 319 | Here's a gift ... carry it with you at all times!!!! There's some kinky girls 320 | in this town!! And you never know when you may need to use this to defend 321 | yourself!!!! After all you may get in a program bug ...... 322 | 323 | ### M 40 A 10 Look girl (voluptuous blonde) 324 | 325 | She's wearing the tightest jeans! Wow ... what a body!!!!! 36-24-35!! This 326 | girls derriere is sensational!! And the shirt? See through - and what I see 327 | I like! 328 | As my eyes reluctantly roam from her body, I see bright blue eyes - and a 329 | smile that dazzles me. I think she likes me! 330 | 331 | ### M 41 A 11 TV channel 1 332 | 333 | A masked man runs across the screen. Jumping up he lands on his horse and 334 | yells 'Hi-ho plutonium!!!!!' He rides off into a green sky..... 335 | Nothing like a good old western to pass the time. 336 | 337 | ### M 42 A 12 TV channel 2 338 | 339 | It's 'The price is fright!!!!' 340 | 'And now for out favorite host ..... Haunty Male!!!!!!!!!!' 341 | Haunty jumps up the stage - he asks 'And who's our first lucky contestant?' 342 | The announcer points out a lady ... the crowd screams in ecstacy as she's 343 | dragged to the stage........... 344 | 345 | ### M 43 A 13 TV channel 3 346 | 347 | Captain Jerk looks at this door from which behind the noise is coming. 348 | Throwing open the door - his face turns a deep red!!!!!!!!! 349 | He says: 'Scotty! What are you doing??' 350 | Scotty replies: 'Byt Captain!?!? My girl and I - we're engaged!!!!' 351 | Jerk commands: 'Well, then disengage!' 352 | ... as the starship thrusted forward ... penetrating deeper into space .... 353 | 354 | ### M 44 A 14 TV channel 4 355 | 356 | The News!! Today the prime rate was raised once again ... to 257%! This 357 | does not come near the record set in 1996 - when it broke the 1000% mark.... 358 | The birth rate has taken a dramatic fall ... this is due to the increased 359 | usage of computers as sexual partners.. However ... rapes of innocent people 360 | are on the increase! And who is the rapist?? Computerized banking machines 361 | lead the list ... followed by home computers .... 362 | 363 | ### M 45 A 15 TV channel 5 364 | 365 | Mr Rodjerk jumps up with his big sneakers and says in his cherry voice: 366 | 'Guess what, boys and girls???? Today we're going to learn about suckers!! 367 | Susie .. see the lolly-pop??? Can you stick it in your mouth??? That's 368 | right! That's a nice lolly-pop ... nice and hardright?!?!?!?!?......' 369 | 370 | ### M 46 A 16 TV channel 6 371 | 372 | Cable TV!!!!!!!! 373 | They're showing the kinkiest X-rated movies!!!! 374 | This one's titled 'Deep Nostril'. The Pimp likes this one!!!! 375 | He's engrossed in the action he sees!!! Seems distracted............. 376 | 377 | ### M 47 A 17 TV channel 7 378 | 379 | It's Happy Daze!!!!! 380 | Richie turns to Gonzy and says 'But you always had it made with the girls.... 381 | What's your secret???' 382 | The Gonz says 'Aayyyyyy .. I didn't get my name for nuthin!' 383 | reaching into his pocket he pulls out a funny looking cigarette......... 384 | 385 | ### M 48 A 18 TV channel 8 386 | 387 | Mrs Smith and mrs Jones are comparing detergents ........ see this bluse? 388 | We're making it this dirty to see who's works better... 389 | (A dog is thrown onto the blouse. In his excitement he deficates all over it) 390 | Do you think yours will work, mrs Smith? 391 | (The camera pans to mrs Smith. She throws up.) 392 | Mrs Jones??? 393 | (A shot shows her taking the dog and........... ) 394 | 395 | ### M 49 A 19 TV channel 9 396 | 397 | It's the super bowl!!!! 398 | The center snaps the ball!! 399 | The quarterback fades back!! 400 | It's a bomb!!!!! 401 | The ball sails through the air ... the receiver runs to get it......... 402 | It explodes in his hands!!!!! What a bomb!!!!! 403 | Tell me, Howard, have you ever seen this before??? 404 | 405 | ### M 50 A 20 Give apple (to girl in jacuzzi) 406 | 407 | She takes the apple and raises it to her mouth. With an outrageously innocent 408 | look she takes a small bite out of it. A smile comes across her face! She's 409 | really starting to look quite sexy!!!! She winks and lays back in the jacuzzi 410 | 411 | ### M 51 A 21 Fuck hooker (with rubber) 412 | 413 | It's a good thing I was wearing that rubber!!!!! 414 | She was OK - but really ... can't you do better that this?? 415 | The score is now '1' out of a possible of '3' ... so congratulations!!!!! 416 | Well ... go to it - you stud!!! Find me another girl! 417 | 418 | ### M 52 A 22 Fuck doll (must inflate it first) 419 | 420 | Oh boy!!!! - it's got 3 spots to try!!! I thrust into the doll - kinky .. eh? 421 | I start to increase my tempo ... faster and faster I go!!!! 422 | Suddenly there's a flatulent noise and the doll becomes a popped balloon 423 | soaring around the room! It flies out of the room and disappears! 424 | 425 | ### M 53 A 23 Fuck girl (in jacuzzi, must give apple first) 426 | 427 | She hops out of the tub - the steam rising from her skin ... her body is 428 | the best looking I've ever seen!!! 429 | Then she comes up to me and gives the best time of my life!!! 430 | Well ... I guess that's it! As your puppet in this game I thank you for 431 | the pleasure you have brought me ... so long ... I've got to get back to 432 | my new girl here! Keep it up! 433 | 434 | ### M 54 A 24 Fuck girl (innocent girl from disco) 435 | 436 | She says 'Lay down honey - let me give you a special surprise!!!' 437 | I lay down and she says 'OK - now close your eyes'. 438 | I close my eyes and she starts to go to work on me....... 439 | I'm really enjoying myself when suddenly she ties me to the bed!!!! 440 | Then she says 'So long - Turkey!' and runs out of the room!!! 441 | Well - the score is now '2' out of a possible '3'............. 442 | .......but I'm also tied to the bed and can't move!!!!!!! 443 | 444 | ### M 55 A 25 Look hole (peephole on honeymooner's balcony) 445 | 446 | Hmmmm ..... this is a Peeping Tom's paradise!!!!! 447 | Across the road is another hotel. Aha! The curtains are open at one window! 448 | The bathroom door opens and a girl walks out. Holy cow! Her boobs are huge - 449 | and look at the sway as she strides across the room! 450 | Now she's taking a large sausage-shaped object and looks at it longinly! 451 | Damn! She shuts the curtain! 452 | 453 | ### M 56 A 26 Eat pills (don't do it, give to blonde instead) 454 | 455 | This stuff is good! I'm breathing heavily - I've never been this horny!!!!! 456 | I've just got to do something.............. 457 | Ah ... there goes a female german shepard!! That gives me an idea!....... 458 | Kinky dog!!!! Chewed me to death!!!! 459 | 460 | ### M 57 A 27 Give pills (to voluptuous blonde) 461 | 462 | The blonde looks at the pills and says 'Thanks!!! I love this stuff!' 463 | She takes a pill .... her nipples start to stand up! Wow!!!! 464 | She's breathing heavily .... I hope she rapes me!!!!! 465 | She says 'So long!!! I'm going to see my boyfriend!' 466 | She disappears down the stairs..... 467 | 468 | ### M 58 A 28 (whenever bringing wine into a taxi) 469 | 470 | The driver looks at me and says 'Hey!! What's that you got ... wine????' 471 | He grabs the bottle and guzzles the wine down!!!!!!!!!!!!!! 472 | Oh no!!!! He's swerving towards a huge truck!!!!! 473 | I grab the wheel............................... 474 | We struggle.................................... 475 | The truck just misses us!!!!!!! 476 | 477 | ### M 59 A 29 Look graffiti (in bathroom) 478 | 479 | +-------------------------------------------------------------------+ 480 | | | 481 | | At my PC is where I sit | 482 | | when I feel like fondling it's bits! I h | 483 | | ' e | 484 | | C The password is: d r | 485 | 486 | ### M 60 A 30 487 | 488 | | o A a | 489 | | m S n Bellybutton l f | 490 | | P p C d i l | 491 | | e u I r k o | 492 | | e t I y e e p | 493 | | t k e e c p | 494 | 495 | ### M 61 A 31 496 | 497 | | h r e t i | 498 | | e b s i o e | 499 | | y e f h e s | 500 | | f r a v n | 501 | | P o e l e i | 502 | | o r a l b | 503 | 504 | ### M 62 A 32 505 | 506 | | k e k b | 507 | | e s l | 508 | | e | 509 | | | 510 | +-------------------------------------------------------------------+ 511 | 512 | ### M 63 A 33 Look billboard (from hooker's balcony) 513 | 514 | +---------------------------------------------------+ 515 | | For those who desire the best: | 516 | | Announcing, the most exclusive, the exciting, | 517 | | the hottest spot in town, | 518 | | *************************** | 519 | | * SWINGING SINGLE'S DISCO * | 520 | | *************************** | 521 | +---------------------------------------------------+ 522 | 523 | ### M 64 A 34 Eat mushroom (transports to rooms 1, 2 or 3) 524 | 525 | Holy Cow! Psychedelic!!!! 526 | Pretty colors appear and I'm elsewhere! 527 | 528 | ### M 65 A 35 When killed 529 | 530 | Welcome to Purgatory!! Here at this crossroad you have three options: 531 | Before you are three doors. Each will bring you to a different place - 532 | A - To Hell (where the game ends) 533 | B - Back to life, unharmed 534 | C - You stay here and must choose again 535 | The doors are randomly different each time!! 536 | 537 | ### M 66 A 36 When married 538 | 539 | OK. 540 | Why am I doing this? 541 | The Preacher takes $1000 and winks! 542 | The girl grabs $2000 and says: 543 | 'Meet me at the Honeymoon Suite!! I've got connections to get a room there!!' 544 | 545 | ### M 67 A 37 Call 555-0439 546 | 547 | Hi there!!! This is Chuck (the author of this absurd game). If you're a 548 | voluptous blonde who's looking for a good time, then call me immedeatley!! 549 | 550 | ### M 68 A 38 Call 555-0987 551 | 552 | A voice answers and says 'Wine for the nervous newlyweds! Coming right up!!' 553 | 554 | ### M 69 A 39 Flush toilet 555 | 556 | Ok, here goes ....... 557 | Oh no!!!! It's overflowing!!!!!!!!!!!!!!!!! 558 | It's filling the room with gross sewage!!!!! 559 | 560 | ### M 70 A 40 Help text 561 | 562 | The object of SOFTPORN ADVENTURE is to find -- and seduce -- three different 563 | girls. They have very different personalities, so tricks that work on one 564 | girl usually won't work on another girl. 565 | The game has three different areas -- Disco, Casino and Bar. You start off 566 | in the Bar with $1000. You'll need more money than that, so you'll have to 567 | make more money during the game. 568 | 569 | ### M 71 A 41 Help text 570 | 571 | You give your puppet commands like 'Go north', 'Buy beer' etc. A phrase like 572 | 'Look at the table' is equivalent to 'Look table'. Some commands can be abbre- 573 | viated, like 'N' for 'Go north', 'L' for 'Look', 'I' for 'Inventory' etc. 574 | To see how well you're doing, type 'Score'. To save and restore a game posi- 575 | tion, type 'Save' and 'Restore', followed (optionally) by up to 3 characters, 576 | specifying different saved game positions. 577 | 578 | ### M 72 A 42 Help text 579 | 580 | If you're stuck, try looking at everything in sight, object by object. This 581 | will usually help you find missing objects and/or clues etc. 582 | The 'Help' command will repeat this message. 583 | Several commands can be entered on the same line, but must then be separated 584 | by commas or periods. 585 | ========= ******** GOOD LUCK !!! ******** ======== 586 |  --------------------------------------------------------------------------------