shogun/verbs.zil

4246 lines
105 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

"VERBS for
SHOGUN
(c) Copyright 1988 Infocom, Inc. All Rights Reserved."
<FILE-FLAGS SENTENCE-ENDS?>
<BEGIN-SEGMENT 0>
<CONSTANT J-SHOOT-FRIEND 255>
<DEFMAC B-NOT-STANDING? ()
'<FSET? ,BLACKTHORNE ,SITTING>>
<DEFMAC B-STANDING? ()
'<NOT <FSET? ,BLACKTHORNE ,SITTING>>>
;<GLOBAL LOAD-MAX 150>
<GLOBAL LOAD-ALLOWED 150>
;"stuff to try to save space"
<GLOBAL PERIOD ".|">
<GLOBAL I-DONT-THINK-THAT "I don't think that ">
<GLOBAL IT-LOOKS-LIKE "It looks like ">
<GLOBAL IT-IS-ALREADY "It's already ">
<GLOBAL TOO-DARK "It's too dark to see!|">
<GLOBAL NOTHING-HAPPENS "Nothing happens.|">
<GLOBAL GOOD-TRICK "That would be a good trick.|">
<GLOBAL WASTE-OF-TIME "That would be a waste of time.|">
<GLOBAL THERE-IS-NOTHING "There is nothing ">
<GLOBAL NO-ROOM "There's no room.">
<GLOBAL THERES-NOTHING-TO "There's nothing to ">
<GLOBAL YOU-ARE "You already are">
<GLOBAL YOU-HAVE "You already have ">
<GLOBAL YOU-ARE-NOW "You are now ">
<GLOBAL YOU-CANT "You can't ">
<GLOBAL YOU-FIND-NOTHING "You find nothing">
<GLOBAL YOU-HAVE-TO "You'll have to ">
;<ROUTINE DONT-HAVE-THAT ()
<TELL ,YOU-DONT-HAVE "that" ,PERIOD>>
<ROUTINE YOULL-HAVE-TO (STR)
<TELL ,YOU-HAVE-TO .STR " first!" CR>>
<ROUTINE TO-A-PRSO? ()
<HOW-DO-YOU> <A-PRSO?>>
<ROUTINE CANT-GO ()
<TELL ,YOU-CANT "go that way." CR>>
<ROUTINE NOT-HOLDING (OBJ)
<THIS-IS-IT .OBJ>
<TELL G"You aren't ""holding " THE .OBJ ,PERIOD>>
<ROUTINE ITS-EMPTY ()
<TELL CTHE ,PRSO " is empty" ,PERIOD>>
<ROUTINE ITS-ALREADY-X (X)
<TELL CTHE ,PRSO " is already " .X ,PERIOD>>
<ROUTINE ALREADY-OPEN ()
<ITS-ALREADY-X "open">>
<ROUTINE ALREADY-CLOSED ()
<ITS-ALREADY-X "closed">>
<ROUTINE WITH-PRSI? ()
<TELL "With "><A-PRSI?>>
<ROUTINE TELL-OPEN-CLOSED ("OPTIONAL" (OBJ <>))
<COND (.OBJ <TELL CTHE .OBJ>)
(ELSE
<SET OBJ ,PRSO>
<TELL THE ,PRSO>)>
<TELL IS/ARE .OBJ " ">
<OPEN-CLOSED .OBJ>>
<ROUTINE OPEN-CLOSED (OBJ)
<COND (<FSET? .OBJ ,OPENBIT>
<TELL "open">)
(ELSE
<TELL "closed">)>
<TELL ,PERIOD>>
<ROUTINE THE-PRSO () <TELL THE ,PRSO ,PERIOD>>
<ROUTINE A-PRSO () <TELL A ,PRSO ,PERIOD>>
<ROUTINE A-PRSO? () <TELL A ,PRSO "?" CR>>
<ROUTINE THE-PRSI () <TELL THE ,PRSI ,PERIOD>>
;<ROUTINE A-PRSI () <TELL A ,PRSI ,PERIOD>>
<ROUTINE A-PRSI? () <TELL A ,PRSI "?" CR>>
<ROUTINE YOU-CANT-X-THAT ("OPT" (STR <>))
<TELL ,YOU-CANT <COND (.STR .STR) (ELSE "do")> " ">
<COND (<OR <NOT .STR> <NOT ,PRSO> <NOT <FSET? ,PRSO ,PERSON>>>
<TELL "that!" CR>)
(ELSE
<TELL HIM/HER ,PRSO "!" CR>)>>
<ROUTINE YOU-CANT-X-PRSO (STR)
<TELL ,YOU-CANT .STR " ">
<COND (,PRSO <TELL THE ,PRSO>)
(ELSE <TELL "that">)>
<TELL ,PERIOD>>
;<ROUTINE YOU-CANT-X-PRSI (STR)
<TELL ,YOU-CANT .STR " ">
<COND (,PRSI <TELL THE ,PRSI>)
(ELSE <TELL "that">)>
<TELL ,PERIOD>>
<ROUTINE UNINTERESTED (OBJ)
<COND (<FSET? .OBJ ,DEAD>
<TELL
,YOU-CANT G"expect a response from a dead person!" CR>)
(<EQUAL? .OBJ ,ME>
<TELL-YUKS>)
(ELSE
<TELL CTHE .OBJ IS/ARE .OBJ " uninterested." CR>)>>
<ROUTINE PLURAL? (OBJ)
<COND (<FSET? .OBJ ,PLURAL> <RTRUE>)
(ELSE <RFALSE>)>>
<ROUTINE CANT-REACH-THAT ()
<YOU-CANT-X-THAT "reach">>
;"end of space saving stuff"
;"subtitle game commands"
<GLOBAL VERBOSITY 1>
<GLOBAL DESCRIPTIONS " descriptions">
<ROUTINE V-VERBOSE ()
<SETG VERBOSITY 2>
<TELL "Verbose" ,DESCRIPTIONS ,PERIOD CR>
<V-LOOK>>
<ROUTINE V-BRIEF ()
<SETG VERBOSITY 1>
<TELL "Brief" ,DESCRIPTIONS ,PERIOD>>
<ROUTINE V-SUPER-BRIEF ()
<SETG VERBOSITY <>>
<TELL "Super-brief" ,DESCRIPTIONS ,PERIOD>>
<ROUTINE V-DIAGNOSE ()
<COND (<FSET? ,MARIKO ,RMUNGBIT>
<TELL
"You are still in shock, your ears ringing, eyes hardly seeing, your
face a mass of bruises and powder burns." CR>)
(ELSE
<TELL
"You are " <GET ,HEALTH-TELL <GETP ,BLACKTHORNE ,P?HEALTH>> ,PERIOD>)>>
<GLOBAL HEALTH-TELL
<PTABLE
"suffering from scurvy, weak, and exhausted. You are on your last
reserves of strength"
"suffering from a mild case of scurvy, and very tired. You are
near the end of your strength"
"feeling better from having eaten, but still exhausted. You are
near the end of your strength"
"recovering from scurvy, but still weak"
"still very weak"
"in excellent health">>
<ROUTINE V-INVENTORY ()
<SETG D-BIT <- ,WEARBIT>>
<COND (<NOT <DESCRIBE-CONTENTS ,WINNER
<>
<+ ,D-ALL? ,D-PARA?>>>
<TELL "You are empty-handed.">)>
<SETG D-BIT ,WEARBIT>
<DESCRIBE-CONTENTS ,WINNER
<>
<+ ,D-ALL? ,D-PARA?>>
<SETG D-BIT <>>
<CRLF>>
<ROUTINE V-QUIT ("OPT" (ASK? T) (SCORE? T) "AUX" SCOR)
<COND (.SCORE? <V-SCORE>)>
;<PARSER-REPORT>
<COND (<OR <AND .ASK?
<TELL
G "Do you wish to ""leave the game">
<YES?>>
<NOT .ASK?>>
<QUIT>)
(T
<TELL ,OKAY>)>>
;<ROUTINE V-$SCENE ()
<COND (<AND <PRSO? INTNUM>
<NOT <ZERO? ,P-NUMBER>>
<NOT <G? ,P-NUMBER <GET ,SCENE-NAMES 0>>>>
<GOTO-SCENE ,P-NUMBER>)
(ELSE <TELL G"Failed." CR>)>>
<ROUTINE V-CHOOSE ()
<COND (<ACCESSIBLE? ,STRAW>
<PERFORM ,V?PICK ,STRAW>
<RTRUE>)
(ELSE
<TELL "There's nothing to draw here." CR>)>>
<ROUTINE V-RESTART ()
<V-SCORE T>
<TELL G "Do you wish to ""restart">
<COND (<YES?>
<TELL "Restarting." CR>
<RESTART>
<TELL ,FAILED>)>>
<GLOBAL OKAY "Okay.|">
<GLOBAL FAILED "Failed.|">
<ROUTINE FINISH ("OPT" (EOG? <>))
<UPDATE-STATUS-LINE>
<V-SCORE>
<COND (<NOT .EOG?>
<SETUP-TEXT-AND-STATUS> ;"guarantee status line okay")>
<CRLF>
<SETG GAME-OVER? T>
<PUT ,FINISH-MENU
0
<COND (<OR .EOG? <NOT <FLAG-ON? ,F-UNDO>>> 4)
(ELSE 5)>>
<GET-FROM-MENU "What now?"
,FINISH-MENU
,FINISH-MENU-F>>
<GLOBAL GAME-OVER? <>>
<CONSTANT FINISH-MENU ;"menu when undo doesn't exist drops last element"
<LTABLE
<TABLE (PURE STRING LENGTH) "RESTORE a saved game position ">
<TABLE (PURE STRING LENGTH) "RESTART the game from the beginning ">
<TABLE (PURE STRING LENGTH) "QUIT this session of the game ">
<TABLE (PURE STRING LENGTH) "HINT for something confusing ">
<TABLE (PURE STRING LENGTH) "UNDO the last move ">>>
<ROUTINE FINISH-MENU-F (WHICH MENU)
<COND (<EQUAL? .WHICH 1 ;RESTORE>
<COND (<RESTORE>
<TELL ,OKAY>)
(T
<RESET-MARGIN>
<CLEAR ,S-TEXT>
<TELL ,FAILED>)>)
(<EQUAL? .WHICH 2 ;RESTART>
<RESTART>
<RESET-MARGIN>
<CLEAR ,S-TEXT>
<TELL ,FAILED>)
(<EQUAL? .WHICH 3 ;QUIT>
<COND (,GAME-OVER? <QUIT>)
(ELSE <V-QUIT>)>
<RESET-MARGIN>
<CLEAR ,S-TEXT>)
(<EQUAL? .WHICH 4 ;HINT>
<V-HINT>)
(<EQUAL? .WHICH 5 ;UNDO>
<V-UNDO>
<RESET-MARGIN>
<CLEAR ,S-TEXT>)>
<TYPE-ANY-KEY>
<RFALSE>>
<ROUTINE V-RESTORE ()
<COND (<RESTORE> <RTRUE>)
(T
<TELL ,FAILED>)>>
<GLOBAL RESTORED? <>> ;"result of last RESTORE"
<ROUTINE V-SAVE ("AUX" X LCNT (CRC 0))
<PUTB ,G-INBUF 2 0> ;"make sure AGAIN gets fooled"
<COND (<AND <APPLE?>
<SET CRC <WINGET ,S-TEXT ,WCRCNT>>>
<SET LCNT <WINGET ,S-TEXT ,WLCNT>>)>
<SET X <SAVE>>
<SETG RESTORED? <>>
<COND (<QUEUED? I-SETUP-ANSWER>
<I-SETUP-ANSWER> ;"because interrupts won't run")>
<COND (<EQUAL? .X 0 1>
<COND (.CRC
<SET LCNT <- <WINGET ,S-TEXT ,WLCNT> .LCNT>>
<COND (<OR <L? .LCNT 0>
<G? .LCNT .CRC>>
<COND (<EQUAL? <WINGET ,S-TEXT ,WCRFUNC>
RESET-MARGIN>
<RESET-MARGIN>)
(ELSE
<RESET-MARGIN-1>)>)
(ELSE
<WINPUT ,S-TEXT ,WCRCNT <- .CRC .LCNT>>)>)>
<COND (<ZERO? .X> <TELL ,FAILED>)
(<EQUAL? .X 1> <TELL ,OKAY>)>)
(<EQUAL? .X 2 3>
<COND (<ZERO? <WINGET ,S-FULL ,WHIGH>>
<SET X 3>)>
<SETG RESTORED? .X>
<REPAINT-DISPLAY <COND (<EQUAL? .X 2> T)>>
<RESET-MARGIN>
<CRLF>
<V-FIRST-LOOK>)>>
<ROUTINE V-UNDO ("AUX" VAL)
<COND (<NOT <FLAG-ON? ,F-UNDO>>
<TELL "[UNDO not available.]" CR>)
(<SET VAL <IRESTORE>>
<INIT-STATUS-LINE>)
(ELSE ,FAILED)>>
<CONSTANT TOTAL-SCORE 84>
<CONSTANT SCORE-FACTOR 5>
<ROUTINE V-SCORE ("OPTIONAL" (ASK? T) "AUX" S)
<SET S <GETPT <GET ,SCENE-LOCS ,SCENE> ,P?SCORE>>
<TELL
"Your score is " N <* ,SCORE-FACTOR <GETB .S 0>> " of a possible "
N <* ,SCORE-FACTOR <GETB .S 1>> " in this scene, and "
N <* ,SCORE-FACTOR ,SCORE> " out of " N <* ,SCORE-FACTOR ,TOTAL-SCORE>
" overall, in " N ,MOVES " move">
<COND (<NOT <1? ,MOVES>> <TELL "s">)>
<SET S </ <* ,SCORE ,SCORE-FACTOR> </ ,TOTAL-SCORE 2>>>
<TELL ". You have now achieved a rank of " <GET ,RANKINGS <+ 1 .S>>>
<TELL ,PERIOD>
<RTRUE>>
<GLOBAL RANKINGS
<PLTABLE
"barbarian" ;"0"
"peasant" ;"10"
"samurai" ;"20"
"daimyo" ;"30"
"hatamoto" ;"40"
"hatamoto" ;"50"
"hatamoto" ;"60"
"Regent" ;"70"
"Kwampaku" ;"80"
"Taiko" ;"90"
"Shogun" ;"100">>
<ROUTINE V-SCRIPT ()
<DIROUT ,D-PRINTER-ON>
<COND (<FLAG-ON? ,F-SCRIPT>
<DIROUT ,D-SCREEN-OFF>
<TELL CR
"Start of a transcript of " ,SHOGUN-NAME ,PERIOD>
<V-VERSION>
<DIROUT ,D-SCREEN-ON>)>>
<ROUTINE V-UNSCRIPT ()
<COND (<FLAG-ON? ,F-SCRIPT>
<DIROUT ,D-SCREEN-OFF>
<TELL "End of transcript" ,PERIOD>
<DIROUT ,D-SCREEN-ON>)>
<DIROUT ,D-PRINTER-OFF>
<RTRUE>>
<CONSTANT SHOGUN-NAME "SHOGUN">
<ROUTINE V-VERSION ("OPT" (C? <>))
<COND (.C? <CURSET <+ 1 <* 3 ,FONT-Y>> 1>)>
<HLIGHT ,H-BOLD>
<COND (.C? <DIROUT ,D-TABLE-ON ,DIROUT-TABLE>)>
<TELL ,SHOGUN-NAME>
<COND (.C? <PRINT-CENTER-TABLE>)>
<HLIGHT ,H-NORMAL>
<CRLF>
<COND (.C? <DIROUT ,D-TABLE-ON ,DIROUT-TABLE>)>
<TELL "A Story of Japan">
<COND (.C? <PRINT-CENTER-TABLE>)>
<CRLF>
<COND (.C? <DIROUT ,D-TABLE-ON ,DIROUT-TABLE>)>
<TELL "Copyright (c) 1988 by Infocom">
<COND (.C? <PRINT-CENTER-TABLE>)>
<CRLF>
<COND (.C? <DIROUT ,D-TABLE-ON ,DIROUT-TABLE>)>
<TELL "All rights reserved.">
<COND (.C? <PRINT-CENTER-TABLE>)>
<CRLF>
<COND (.C? <DIROUT ,D-TABLE-ON ,DIROUT-TABLE>)>
<TELL ,SHOGUN-NAME " is a trademark of James Clavell">
<COND (.C? <PRINT-CENTER-TABLE>)>
<CRLF>
<COND (.C? <DIROUT ,D-TABLE-ON ,DIROUT-TABLE>)>
<TELL "Original Literary Work Copyright 1975 by James Clavell">
<COND (.C? <PRINT-CENTER-TABLE>)>
<CRLF>
<COND (.C? <DIROUT ,D-TABLE-ON ,DIROUT-TABLE>)>
<TELL "Licensed by Noble House Trading Limited, London.">
<COND (.C? <PRINT-CENTER-TABLE>)>
<CRLF>
<COND (.C? <DIROUT ,D-TABLE-ON ,DIROUT-TABLE>)>
<TELL "Release ">
<PRINTN <LOWCORE ZORKID>>
<COND (<AND <PICINF 0 ,YX-TBL>
<GET ,YX-TBL 1>>
<TELL " / Pix " N <GET ,YX-TBL 1>>)>
<TELL " / Serial number ">
<LOWCORE-TABLE SERIAL 6 PRINTC>
<COND (.C? <PRINT-CENTER-TABLE>)>
<CRLF>
<COND (.C? <DIROUT ,D-TABLE-ON ,DIROUT-TABLE>)>
<TELL <GET ,MACHINES ,MACHINE> " Interpreter version "
N <LOWCORE (ZVERSION 0)> "." N <LOWCORE INTVR>>
<COND (.C? <PRINT-CENTER-TABLE>)>
<CRLF>>
<CONSTANT MACHINES
<PLTABLE "Debugging"
"Apple IIe"
"Macintosh"
"Amiga"
"Atari ST"
"IBM"
"Commodore 128"
"Commodore 64"
"Apple IIc"
"Apple IIgs">>
<ROUTINE PCENTER (STR "OPT" (STR1 <>) (STR2 <>))
<DIROUT ,D-TABLE-ON ,DIROUT-TABLE>
<TELL .STR>
<COND (.STR1 <TELL .STR1>)>
<COND (.STR2 <TELL .STR2>)>
<PRINT-CENTER-TABLE>
<CRLF>>
<ROUTINE V-CREDITS ()
<HLIGHT ,H-BOLD>
<PCENTER ,SHOGUN-NAME>
<HLIGHT ,H-NORMAL>
<PCENTER "A Story of Japan">
<CRLF>
<PCENTER "Adapted by Dave Lebling">
<CRLF>
<PCENTER "Original Illustrations by Donald Langosy">
<COND (<APPLE?>
<PCENTER "Translated by Tanya Allan">)
(<EQUAL? ,MACHINE ,IBM>
<PCENTER "Translated by Donna Dennison">)>
<CRLF>
<PCENTER "Interpreters by Tim Anderson, Duncan Blanchard,">
<PCENTER "J. D. Arnold, and Scott Fray">
<CRLF>
<PCENTER "English Parser by Stu Galley and Tim Anderson">
<CRLF>
<PCENTER "Quality control by Patti Pizer, Shaun Kelly,">
<PCENTER "Steve Watkins, Adam Levesque, Christian Anthony,">
<PCENTER "Liz Jones, Adam Glass, and many others">
<CRLF>>
<ROUTINE V-$VERIFY ()
<COND (<AND <PRSO? ,INTNUM>
<EQUAL? ,P-NUMBER 1564>>
<TELL N ,SERIAL CR>)
(,PRSO
<DONT-UNDERSTAND>
;<TELL ,NOT-RECOGNIZED CR>)
(ELSE
<TELL "Verifying..." CR>
<COND (<VERIFY> <TELL "The disk is correct." CR>)
(T <TELL CR "** Disk Failure **" CR>)>)>>
;"subtitle real verbs"
<ROUTINE V-WAKE ()
<COND (<PRSO? ,ROOMS>
<NEW-PRSO ,ME>
<RTRUE>)
(T
<TELL
,I-DONT-THINK-THAT THE ,PRSO IS/ARE ,PRSO " sleeping." CR>)>>
<ROUTINE V-ANSWER ()
<COND (<OR ,OMI-QUESTION
,YABU-QUESTION
<AND ,QCONTEXT
<ACCESSIBLE? ,QCONTEXT>>>
<COND (,OMI-QUESTION <TELL CTHE ,OMI>)
(,YABU-QUESTION <TELL CTHE ,YABU>)
(ELSE <TELL CTHE ,QCONTEXT>)>
<TELL
" seems to be expecting a more responsive answer." CR>)
(ELSE
<TELL "Nobody is awaiting your answer." CR>
<END-QUOTE>)>>
"V-ASK-ABOUT -- transform into PRSO, TELL ME ABOUT PRSI"
<ROUTINE PRE-ASK-ABOUT ("AUX" P)
<COND (<AND ,QCONTEXT
<IN? ,QCONTEXT ,HERE>
<NOT <PRSO? ,QCONTEXT>>
<NOT ,PRSI>>
<PERFORM ,PRSA ,QCONTEXT ,PRSO>
<RTRUE>)
(<AND <NOT ,PRSI>
<SET P <FIND-IN ,HERE ,PERSON>>
<NOT <EQUAL? .P ,WINNER>>>
<PERFORM-PRSA .P ,PRSO>
<RTRUE>)>>
<ROUTINE V-ASK-ABOUT ()
<COND (<TRY-QCONTEXT?>
<RTRUE>)
(<PRSO? ,ME>
<NEW-VERB ,V?TELL>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<NEW-WINNER-PRSO ,V?TELL-ME-ABOUT ,PRSI>
<RTRUE>)
(T
<NEW-VERB ,V?TELL>
<RTRUE>)>>
<ROUTINE FIND-IN (WHERE WHAT "OPT" (WHAT-NOT <>) "AUX" W)
<MAP-CONTENTS (W .WHERE)
(END <RFALSE>)
<COND (<AND <FSET? .W .WHAT>
<VISIBLE? .W>>
<COND (<AND <EQUAL? .WHAT ,PERSON>
<EQUAL? .W ,WINNER>>)
(<OR <NOT .WHAT-NOT>
<NOT <FSET? .W .WHAT-NOT>>>
<RETURN .W>)>)>>>
"V-ASK-FOR -- transform into PRSO, GIVE PRSI TO ME"
<ROUTINE PRE-ASK-FOR ()
<PRE-ASK-ABOUT>>
<ROUTINE V-ASK-FOR ()
<COND (<TRY-QCONTEXT?>
<RTRUE>)
(<PRSO? ,ME ,PLAYER>
<PERFORM ,V?TAKE ,PRSI>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<NEW-WINNER-PRSO ,V?GIVE ,PRSI ,ME>
<RTRUE>)
(T
<TELL
"It's unlikely that " THE ,PRSO " will oblige." CR>)>>
<ROUTINE PRE-ATTACK ("AUX" W)
<COND (,PRSI <RFALSE>)
(<SET W <FIND-IN ,WINNER ,WEAPONBIT ,WEARBIT>>
<PERFORM ,PRSA ,PRSO .W>
<RTRUE>)
(ELSE <RFALSE>)>>
<ROUTINE V-ATTACK ()
<IKILL "attack">>
<ROUTINE V-HIT ()
<IKILL "hit">>
<ROUTINE V-BITE ()
<HACK-HACK "Biting">>
<ROUTINE PRE-BOARD ("AUX" AV DIR)
<SET AV <LOC ,WINNER>>
<COND (<PRSO? ,ROOMS> <RFALSE>)
(<FSET? ,PRSO ,VEHBIT>
<COND (<HELD? ,PRSO>
<TELL
,YOU-HAVE-TO "put " THE ,PRSO " down first." CR>)
(<EQUAL? .AV ,PRSO>
<YOU-ARE-IN .AV>)
(<AND <FSET? .AV ,VEHBIT>
<HELD? ,PRSO .AV>>
<TELL ,YOU-HAVE-TO "leave " THE .AV " first" ,PERIOD>)
(T
<RFALSE>)>)
(<AND <IN? ,PRSO ,ROOMS>
<SET DIR <NEXT-ROOM? ,PRSO>>>
<DO-WALK .DIR>
<RTRUE>)
(T
<TELL ,YOU-CANT "get ">
<COND (<FSET? ,PRSO ,PERSON> <TELL "onto ">)
(ELSE <TELL "into ">)>
<TELL THE ,PRSO "!" CR>)>
<RFATAL>>
<ROUTINE YOU-ARE-IN (AV)
<TELL ,YOU-ARE
<COND (<FSET? .AV ,SURFACEBIT> " on ")
(ELSE " in ")>
THE .AV "!" CR>>
<ROUTINE V-BOARD ("AUX" AV)
<TELL ,YOU-ARE-NOW>
<COND (<FSET? ,PRSO ,SURFACEBIT> <TELL "on ">)
(ELSE <TELL "in ">)>
<THE-PRSO>
<MOVE ,WINNER ,PRSO>
<APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>
<RTRUE>>
<ROUTINE V-BURN ()
<COND (<NOT ,PRSI>
<TELL "Your gaze is insufficient." CR>)
(T
<WITH-PRSI?>)>>
<ROUTINE V-CHASTISE ()
<TELL
"Use prepositions instead: LOOK AT the object, LOOK INSIDE it,
LOOK UNDER it, etc." CR>>
<ROUTINE V-CLIMB-DOWN ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?DOWN>)
(T
<TELL ,WASTE-OF-TIME>)>>
<ROUTINE V-CLIMB-FOO ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?UP>)
(T
<TELL ,WASTE-OF-TIME>)>>
<ROUTINE V-CLIMB-ON ()
<COND (<AND <FSET? ,PRSO ,VEHBIT>
<FSET? ,PRSO ,SURFACEBIT>>
<NEW-VERB ,V?BOARD>
<RTRUE>)
(T
<TELL ,YOU-CANT "climb onto "><A-PRSO>)>>
<ROUTINE V-CLIMB-OVER ()
<YOU-CANT-X-THAT>>
<ROUTINE V-CLIMB-UP ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?UP>)
(T
<TELL ,WASTE-OF-TIME>)>>
<ROUTINE V-CLOSE ()
<COND (<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<FSET? ,PRSO ,OPENABLE>>
<ALREADY-CLOSED>
;<TELL CTHE ,PRSO " is already closed." CR>)
(<OR <FSET? ,PRSO ,SURFACEBIT>
<AND <NOT <FSET? ,PRSO ,CONTBIT>>
<NOT <FSET? ,PRSO ,DOORBIT>>>>
<TELL "There's no way to close "><THE-PRSO>)
(<FSET? ,PRSO ,PERSON>
<TELL "Huh?" CR>)
(<NOT <EQUAL? <GETP ,PRSO ,P?CAPACITY> 0>>
<COND (<FSET? ,PRSO ,OPENBIT>
<FCLEAR ,PRSO ,OPENBIT>
<TELL "Closed">
<IN-DARK?>)
(T
<ALREADY-CLOSED>)>)
(<FSET? ,PRSO ,DOORBIT>
<CLOSE-A-DOOR>)
(T
<YOU-CANT-X-THAT "close">)>>
<ROUTINE CLOSE-A-DOOR ()
<COND (<FSET? ,PRSO ,OPENBIT>
<OKAY-THE-PRSO-IS-NOW "closed">
<FCLEAR ,PRSO ,OPENBIT>)
(T
<ALREADY-CLOSED>)>>
<ROUTINE IN-DARK? ("OPT" (DIE? <>) "AUX" OLIT)
<SET OLIT ,LIT>
<SETG LIT <LIT? ,HERE>>
<COND ;(<AND .OLIT <NOT ,LIT>>
<TELL
", leaving you in the dark." CR>
<COND (.DIE?
<CRLF>
<TELL "Not alone, however. ">
<JIGS-UP ;"this string is a duplicate of one in GOTO"
"This is a civilized country, but nonetheless one should never assume
the dark is safe. Someone just grabbed you from behind and strangled
you with a silken cord.">)
(ELSE <RTRUE>)>)
(ELSE <TELL ,PERIOD>)>>
<ROUTINE OKAY-THE-PRSO-IS-NOW (STR)
<TELL CTHE ,PRSO " is now " .STR ,PERIOD>>
<ROUTINE V-COMPARE-MANY ()
<COND (<EQUAL? <GET ,P-PRSO 0> 2>
<SETG P-MULT <>>
<PERFORM ,V?COMPARE <GET ,P-PRSO 1> <GET ,P-PRSO 2>>
<RFATAL>)
(ELSE
<TELL "You can only compare two things." CR>)>>
<ROUTINE V-WASTE-OF-TIME ()
<TELL ,WASTE-OF-TIME>>
<ROUTINE V-COMPARE ()
<COND (ELSE
<TELL ,WASTE-OF-TIME>)>>
;<ROUTINE V-COUNT ()
<TELL ,WASTE-OF-TIME>>
<ROUTINE V-CROSS ()
<YOU-CANT-X-THAT "cross">>
<ROUTINE V-CURSE ()
<COND (<AND <PRSO? <> ROOMS YOU>
<TRY-QCONTEXT?>>
<RTRUE>)
(<FSET? ,PRSO ,DUTCHBIT>
<TELL
'PRSO " makes an anatomically impossible suggestion." CR>)
(ELSE
<TELL
"Fortunately, your swearing is incomprehensible. Your manners are
very bad, even for a barbarian." CR>)>>
<ROUTINE V-CUT ()
<COND (<FSET? ,PRSO ,PERSON>
<NEW-VERB ,V?KILL>
<RTRUE>)
(<OR <NOT ,PRSI> <NOT <FSET? ,PRSI ,WEAPONBIT>>>
<COND (<OR <NOT ,PRSI> <INTRINSIC? ,PRSI>>
<TELL "Your body">)
(ELSE
<TELL CTHE ,PRSI>)>
<TELL
" has an inadequate \"cutting edge.\"" CR>)
(T
<TO-A-PRSO?>)>>
<ROUTINE V-DIG ()
<COND (<AND ,PRSI <FSET? ,PRSI ,TOOLBIT>>
<TELL
"Digging with " THE ,PRSI " would be slow, tiring, and tedious." CR>)
(<PRSO? ,GROUND>
<TELL "You don't have anything to dig with." CR>)
(ELSE
<TELL ,WASTE-OF-TIME>)>>
<ROUTINE V-DISEMBARK ("AUX" AV)
<SET AV <LOC ,WINNER>>
<COND (<OR <NOT ,PRSO>
<PRSO? ,ROOMS>>
<COND (<AND .AV <FSET? .AV ,VEHBIT>>
<NEW-PRSO .AV>
<RTRUE>)
;(<FSET? ,HERE ,RWATERBIT>
<DO-WALK ,P?UP>)
(ELSE
<TELL G"You aren't ""in anything." CR>)>)
(<NOT <IN? ,WINNER ,PRSO>>
<TELL "You aren't in " THE ,PRSO "." CR>)
(<AND .AV
<FSET? .AV ,VEHBIT>>
<COND (<AND <NOT <EQUAL? .AV ,PRSO>>
<NOT <HELD? .AV ,PRSO>>>
<YOU-ARE-IN .AV>
<RFATAL>)
(T
<MOVE ,WINNER <LOC ,PRSO>> ;"for vehicle in vehicle"
<B-STAND>
<TELL ,YOU-ARE-NOW "on your feet." CR>)>)
(<IN? ,PRSO ,ROOMS>
<DO-WALK ,P?OUT>
<RTRUE>)
(<LOC ,PRSO>
<NEW-VERB ,V?TAKE>
<RTRUE>)
(ELSE
<TELL G"It's not in anything." CR>)>>
<ROUTINE V-DRINK ("AUX" S)
<YOU-CANT-X-THAT "drink">>
<ROUTINE V-DRINK-FROM ("AUX" X)
<COND ;(<PRSO? ,WATER>
<PERFORM ,V?DRINK ,PRSO>
<RTRUE>)
(T
<TO-A-PRSO?>)>>
<ROUTINE PRE-DROP ()
<COND (<PRSO? <LOC ,WINNER>>
<NEW-VERB ,V?DISEMBARK>
<RTRUE>)>>
<ROUTINE V-DROP ()
<COND (<PRSO? ,ROOMS>
<TELL G"You aren't "G"hanging from anything." CR>)
(<IDROP>
<TELL "Dropped." CR>)
(ELSE <RTRUE>)>>
<ROUTINE V-EAT ("AUX" H)
<COND (<FSET? ,PRSO ,PERSON>
<TELL
"Cannibalism is not the solution." CR>)
(ELSE
<TELL
"Much as you may miss meat, bread, and grog, there is little
likelihood that " A ,PRSO " will satisfy you." CR>)>>
<ROUTINE V-ENTER ()
<COND (<GETPT ,HERE ,P?IN>
<DO-WALK ,P?IN>)
(ELSE
<V-WALK-AROUND>)>>
<ROUTINE PRE-EXAMINE ("AUX" P)
<COND (<NOT ,LIT> <TELL ,TOO-DARK>)
(<OR <HERE? ,MAZE>
<AND <HERE? ,SECRET-REDOUBT>
<PRSO? MARIKO>>
<AND <HERE? ,CLIFF-PATH>
<PRSO? YABU RODRIGUES>
<NOT <IN? ,PRSO ,HERE>>>>
<RFALSE>)
(<SET P <GETP ,PRSO ,P?PICTURE>>
<MARGINAL-PIC .P>
<RFALSE>)>>
<ROUTINE V-EXAMINE ("AUX" H)
<COND (<EQUAL? ,PRSO ,HERE>
<PERFORM ,V?LOOK>
<RTRUE>)
(<AND <FSET? ,PRSO ,READBIT>
<GETP ,PRSO ,P?TEXT>>
<NEW-VERB ,V?READ>
<RTRUE>)
(<FSET? ,PRSO ,DOORBIT>
<V-LOOK-INSIDE>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<V-LOOK-INSIDE>)
(T
<THIS-IS-IT ,PRSO>
<TELL G "It's closed.|">)>)
(<FSET? ,PRSO ,DEAD>
<TELL CTHE ,PRSO " is dead." CR>)
(<FSET? ,PRSO ,ABSTRACTBIT>
<TELL "You can't see that from here!" CR>)
(T
<PRSO-NOTHING-SPECIAL>)>>
<ROUTINE PRSO-NOTHING-SPECIAL ()
<TELL G "You see nothing special about ">
<THE-PRSO>>
<ROUTINE V-EXIT ()
<COND (,PRSO
<COND (<FSET? ,PRSO ,VEHBIT>
<NEW-VERB ,V?DISEMBARK>
<RTRUE>)
(ELSE
<TELL ,YOU-CANT "exit " THE ,PRSO "." CR>)>)
(<FSET? <LOC ,WINNER> ,VEHBIT>
<PERFORM ,V?DISEMBARK <LOC ,WINNER>>
<RTRUE>)
(<GETPT ,HERE ,P?OUT>
<DO-WALK ,P?OUT>)
(ELSE
<V-WALK-AROUND>)>>
<ROUTINE V-FILL ()
<COND (<NOT ,PRSI>
<TELL
,THERES-NOTHING-TO "fill it with" ,PERIOD>)
(T
<TELL-YUKS>)>>
<ROUTINE V-FIND ("OPT" (WHERE <>) "AUX" L)
<COND (<NOT ,PRSO>
<PERFORM ,V?WHERE ,ME>
<RTRUE>)
(<PRSO? ,PLAYER>
<TELL
"As close as the hairs of your beard">)
(<INTRINSIC? ,PRSO>
<TELL
"Nearby, I'm sure">)
(<IN? ,PRSO ,PLAYER>
<TELL "You have it">)
(<OR <IN? ,PRSO ,HERE>
<PRSO? ,PSEUDO-OBJECT>>
<TELL "Right in front of you">)
(<OR <IN? ,PRSO ,LOCAL-GLOBALS>
<IN? ,PRSO ,GLOBAL-OBJECTS>>
<CPRINT-HE/SHE ,PRSO>
<TELL " could be nearby">)
(<SET L <LOC ,PRSO>>
<COND (<AND <FSET? .L ,PERSON>
<VISIBLE? .L>>
<TELL "I think " THE .L " has it">)
(<ACCESSIBLE? ,PRSO>
<TELL "It's in " THE .L>)
(.WHERE
<TELL "Beats me">)
(T
<TELL ,YOU-HAVE-TO "find " HIM/HER ,PRSO " yourself">)>)
(ELSE
<TELL "You have no idea where to find " THE ,PRSO>)>
<TELL ,PERIOD>>
<ROUTINE V-FOLLOW ("AUX" TMP LP DIR)
<COND (<NOT ,PRSO>
<TELL
,YOU-HAVE-TO " be more specific about whom you want to follow." CR>)
(<AND <SET LP <LOC ,PRSO>>
<IN? .LP ,ROOMS>
<SET DIR <NEXT-ROOM? .LP>>>
<DO-WALK .DIR>)
(<IN? ,WINNER .LP>
<COND (ELSE
<TELL
,YOU-CANT "follow " THE ,PRSO ", because " HE/SHE ,PRSO IS/ARE ,PRSO
" right here!" CR>)>)
(<AND <IN? ,WINNER ,HERE>
<IN? .LP ,HERE>
<FSET? .LP ,VEHBIT>>
<PERFORM ,V?BOARD .LP>
<RTRUE>)
(T
<TELL ,WASTE-OF-TIME>)>>
<ROUTINE PRE-GIVE ()
<COND (<AND <WINNER? ,PLAYER>
<NOT <HELD? ,PRSO>>
<NOT <FSET? ,PRSO ,PERSON>>>
<YOULL-HAVE-TO "get it">)>>
<ROUTINE V-GIVE ()
<COND (<OR <NOT <FSET? ,PRSI ,PERSON>>
<FSET? ,PRSO ,PERSON>>
<TELL ,YOU-CANT "give " A ,PRSO " to " A ,PRSI "!" CR>)
(T
<UNINTERESTED ,PRSI>)>>
<ROUTINE V-GOODBYE ("AUX" OWINNER)
<COND (,PRSO
<COND (<FSET? ,PRSO ,DEAD>
<TELL
,YOU-CANT G"expect a response from a dead person!" CR>)
(<FSET? ,PRSO ,PERSON>
<NEW-WINNER-PRSO ,PRSA>
<RTRUE>)
(T
<TELL
G"In this country, people who say ""\"Goodbye\" to " A ,PRSO " are
considered barbarians." CR>)>)
(T
<TELL "Leaving so soon?" CR>)>>
<ROUTINE V-HELLO ("AUX" OWINNER)
<COND (,PRSO
<COND (<FSET? ,PRSO ,DEAD>
<TELL
,YOU-CANT G"expect a response from a dead person!" CR>)
(<FSET? ,PRSO ,PERSON>
<NEW-WINNER-PRSO ,PRSA>
<RTRUE>)
(T
<TELL
G"In this country, people who say ""\"Hello\" to " A ,PRSO " are
considered crazed." CR>)>)
(<TRY-QCONTEXT?>
<RTRUE>)
(T
<TELL "In good spirits, aren't you?" CR>)>>
<ROUTINE V-HELP ()
<COND (,PRSO
<COND (<FSET? ,PRSO ,PERSON>
<TELL
CTHE ,PRSO G " doesn't appear to ""need help." CR>)
(ELSE
<TELL
"There doesn't seem to be any way to help " THE ,PRSO "." CR>)>)
(<NOT <EQUAL? ,P-PRSA-WORD ,W?HINT>>
<TELL
,YOU-HAVE-TO G"be more specific about ""whom you want to help." CR>)
(ELSE
<V-HINT>)>>
<ROUTINE V-HIDE ()
<COND (<NOT ,PRSO>
<TELL "There's no place to hide here." CR>
<RFATAL>)
(<FSET? ,PRSO ,PERSON>
<TELL
"There doesn't seem any way to hide " THE ,PRSO "." CR>)
(<AND ,PRSI <FSET? ,PRSI ,PERSON>>
<UNINTERESTED ,PRSI>)
(<NOT ,PRSI>
<TELL ,WASTE-OF-TIME> ;"useless")>>
<ROUTINE V-HIDE-BEHIND ("OPT" (STR <>))
<TELL
"There doesn't seem to be enough room ">
<COND (.STR <TELL .STR>)(ELSE <TELL "behind">)>
<TELL " " THE ,PRSO "." CR>>
<ROUTINE V-HIDE-UNDER ()
<V-HIDE-BEHIND "under">>
<ROUTINE V-HIDE-FROM ()
<TELL ,YOU-HAVE-TO "decide where." CR>>
<ROUTINE V-KICK ()
<COND (<OR <NOT <FSET? ,PRSO ,PERSON>>
<FSET? ,PRSO ,DEAD>>
<TELL "Kicking " A ,PRSO " seems a waste of time." CR>)
(<FSET? ,PRSO ,FEMALE>
<TELL
G"Only a motherless coward would attack a woman!" CR>)
(ELSE
<TELL
"A potentially dangerous course of action!" CR>)>>
<ROUTINE V-KILL ()
<COND (<AND <PAST-TENSE?>
<TRY-QCONTEXT?>>
<RTRUE>)
(ELSE <IKILL "kill">)>>
<ROUTINE IKILL (STR)
<COND (<AND <PRSO? ,ROOMS> ,OPPONENT>
<PERFORM ,PRSA ,OPPONENT>
<RTRUE>)
(<PRSO? <> ,ROOMS>
<TELL ,THERES-NOTHING-TO .STR " here." CR>)
(<FSET? ,PRSO ,DOORBIT>
<TELL
"Pounding on a door is of little use." CR>)
(<OR <NOT <FSET? ,PRSO ,PERSON>>
<FSET? ,PRSO ,DEAD>>
<TELL "Attacking " A ,PRSO " seems a waste of time." CR>)
(<FSET? ,PRSO ,FEMALE>
<TELL
G"Only a motherless coward would attack a woman!" CR>)
(<OR <PRSI? <> ,HANDS>
<NOT <FSET? ,PRSI ,WEAPONBIT>>>
<COND (<HELD? ,SWORDS>
<PERFORM ,V?ATTACK ,PRSO ,SWORDS>
<RTRUE>)
(ELSE
<TELL
"Trying to " .STR " " THE ,PRSO " with ">
<COND (<NOT <PRSI? <> ,HANDS>>
<TELL A ,PRSI>)
(ELSE <TELL "your bare hands">)>
<TELL " is suicidal." CR>)>)
(<NOT <IN? ,PRSI ,WINNER>>
<NOT-HOLDING ,PRSI>)
(<PRSI? ,PISTOL>
<PERFORM ,V?SHOOT ,PRSI ,PRSO>
<RTRUE>)
(<PRSI? ,SWORDS>
<TELL
"You swing your sword at " THE ,PRSO>
<COND (<PRSO? ,GRAY-LEADER ,GRAY-CAPTAIN ,SECOND-GRAY
,GRAYS ,BROWNS>
<TELL
", but he parries your attack with little difficulty." CR>)
(ELSE
<TELL
", but " HE/SHE ,PRSI " dodge" S ,PRSI "." CR>)>)
(T
<NOT-TRAINED>)>>
<ROUTINE NOT-TRAINED ("OPT" (WHO ,PRSO))
<TELL
"Your lack of training prevents you from successfully hitting
" THE .WHO "." CR>>
<ROUTINE V-KNOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<COND (<B-NOT-STANDING?>
<YOULL-HAVE-TO "stand up">)
(ELSE
<TELL "Nobody's home." CR>)>)
(T
<TELL "Why knock on "> <A-PRSO?>)>>
<ROUTINE V-KISS ()
<COND (<CREWMAN? ,PRSO>
<TELL
"You've heard that sort of tale about some of the crew, but you've
never been tempted to find out the truth." CR>)
(<FSET? ,PRSO ,PERSON>
<TELL
"In Japan, kissing is not commonly practiced. It is considered somewhat
unclean and barbaric." CR>)
(ELSE <TELL-YUKS>)>>
<ROUTINE V-LAMP-OFF ()
<TO-A-PRSO?> ;"flashlight is only light source">
<ROUTINE V-LAMP-ON ()
<TO-A-PRSO?>>
<ROUTINE V-LEAN-ON ()
<TELL "Tired?" CR>>
<ROUTINE V-LEAP ()
<COND (<B-NOT-STANDING?>
<YOULL-HAVE-TO "stand up">)
(<AND ,PRSO <IN? ,PRSO ,HERE>>
<COND (<EQUAL? ,PRSO ,OPPONENT>
<PERFORM ,V?KICK ,PRSO>
<RTRUE>)
(ELSE
<V-SKIP>)>)
(<AND <NOT ,PRSO> ,OPPONENT>
<PERFORM ,V?DODGE>
<RTRUE>)
(T
<TELL
"You jump a little ways, but then fall back to the ground." CR>)>>
<ROUTINE V-LEAVE ()
<COND (<EQUAL? ,P-PRSA-WORD ,W?WALK>
<TELL
"Please specify which way you want to walk. Use compass directions." CR>)
(ELSE
<DO-WALK ,P?OUT>)>>
<ROUTINE V-LISTEN ()
<COND (<AND ,PRSO <FSET? ,PRSO ,PERSON>>
<TELL
"Right now, " THE ,PRSO IS/ARE ,PRSO "n't saying anything." CR>)
(<AND ,PRSO <NOT <PRSO? ,NOISE>>>
<TELL
"At the moment, " THE ,PRSO IS/ARE ,PRSO " quiet and peaceful." CR>)
(ELSE
<TELL
"You hear nothing unusual." CR>)>>
<ROUTINE CANT-X-WITH-PRSI (STR)
<TELL "You can't " .STR " anything with " A ,PRSI "." CR>>
<ROUTINE V-LOCK ()
<COND (<NOT <PRSI? <> ,KEY>>
<CANT-X-WITH-PRSI "lock">)
(<FSET? ,PRSO ,LOCKED>
<TELL G"It already is." CR>)
(<FSET? ,PRSO ,LOCKABLE>
<COND (<IN? ,KEY ,WINNER>
<FSET ,PRSO ,LOCKED>
<TELL "Done." CR>)
(ELSE
<TELL G"You need a key to do that." CR>)>)
(ELSE
<NO-LOCK>)>>
<ROUTINE NO-LOCK ()
<TELL CTHE ,PRSO " doesn't have a lock." CR>>
<ROUTINE V-INTRODUCE ("AUX" TMP)
<COND (<AND <NOT <FSET? ,HERE ,TOUCHBIT>>
<OR <FSET? ,HERE ,RMUNGBIT>
<AND <SET TMP <GETPT ,HERE ,P?SCENE>>
<EQUAL? ,SCENE <GETB .TMP 0>>>>>
<COND (<SET TMP <GETP ,HERE ,P?PICTURE>>
<MARGINAL-PIC .TMP>)>
<COND (<SET TMP <GETP ,HERE ,P?FDESC>>
<TELL .TMP CR CR>)>
<RTRUE>)>>
<ROUTINE V-AFTER ("AUX" TMP RM)
<COND (<AND ,SCENE
<SET TMP <GETP <GET ,SCENE-LOCS ,SCENE> ,P?AFTER>>>
<CRLF>
<TYPE-ANY-KEY>
<CRLF>
<INTERLUDE-STATUS-LINE>
<TIME-PASSES>
<APPLY .TMP>
<TIME-PASSES>)>>
<ROUTINE TIME-PASSES ()
<CRLF>
<CENTER-PIC-X ,P-TIME>
<CRLF>>
<ROUTINE NEXT-SCENE ()
<NEW-SCENE <+ ,SCENE 1>>>
<ROUTINE FAILED-SCENE ()
<NEW-SCENE <>>>
<ROUTINE NEW-SCENE ("OPT" (SC <>) "AUX" S SA SP)
<UPDATE-STATUS-LINE>
<TELL CR
"[">
<SET S <GETPT <GET ,SCENE-LOCS ,SCENE> ,P?SCORE>>
<SET SA <GETB .S 0>>
<SET SP <GETB .S 1>>
<COND (.SC
<TELL
"Congratulations, you have finished this scene with a score of "
N <* ,SCORE-FACTOR .SA> " out of a possible " N <* ,SCORE-FACTOR .SP>>)
(ELSE
<TELL
"Sorry, this scene is no longer winnable">)>
<TELL ".]" CR CR>
<COND (.SC
<V-AFTER>
<DEQUEUE-ALL>
<SETG NEW-SCENE-NUMBER .SC>)
(ELSE <FINISH>)>>
<GLOBAL NEW-SCENE-NUMBER 0>
<ROUTINE I-NEW-SCENE ("AUX" SC)
<COND (,NEW-SCENE-NUMBER
<SET SC ,NEW-SCENE-NUMBER>
<SETG NEW-SCENE-NUMBER 0>
<GET-FROM-MENU "What now?"
<COND (<EQUAL? <SCORE-HAVE> <SCORE-MAX>>
,CONTINUE-MENU)
(ELSE ,CONTINUE-AND-HINT-MENU)>
,CONTINUE-MENU-F>
<RESET-MARGIN>
<GOTO-SCENE .SC>
<RTRUE>)>>
<ROUTINE SCORE-HAVE ()
<GETB <GETPT <GET ,SCENE-LOCS ,SCENE> ,P?SCORE> 0>>
<ROUTINE SCORE-MAX ()
<GETB <GETPT <GET ,SCENE-LOCS ,SCENE> ,P?SCORE> 1>>
<CONSTANT CONTINUE-MENU
<LTABLE
<TABLE (PURE STRING LENGTH) "CONTINUE to next scene ">
<TABLE (PURE STRING LENGTH) "SAVE this game position ">
<TABLE (PURE STRING LENGTH) "QUIT this session of the game ">>>
<CONSTANT CONTINUE-AND-HINT-MENU
<LTABLE
<TABLE (PURE STRING LENGTH) "CONTINUE to next scene ">
<TABLE (PURE STRING LENGTH) "SAVE this game position ">
<TABLE (PURE STRING LENGTH) "QUIT this session of the game ">
<TABLE (PURE STRING LENGTH) "HINT for something confusing ">>>
<ROUTINE CONTINUE-MENU-F (WHICH MENU)
<COND (<EQUAL? .WHICH 1 ;CONTINUE>
<RTRUE>)
(<EQUAL? .WHICH 2 ;SAVE>
<V-SAVE>)
(<EQUAL? .WHICH 3 ;QUIT>
<V-QUIT>)
(<EQUAL? .WHICH 4 ;HINT>
<V-HINT>)>
<TYPE-ANY-KEY>
<RFALSE>>
<ROUTINE V-FIRST-LOOK ()
<COND (<DESCRIBE-ROOM <G? ,VERBOSITY 1>>
<COND (,VERBOSITY <DESCRIBE-OBJECTS>)>)>>
<ROUTINE V-LOOK ()
<COND (<DESCRIBE-ROOM T>
<DESCRIBE-OBJECTS>)>>
<ROUTINE V-LOOK-BEHIND ()
<COND (<PRSO? ME>
<TELL
"You look back over your shoulder. "G"There's nothing ""there." CR>)
(<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<NOT <FSET? ,PRSO ,SURFACEBIT>>
<OR <FSET? ,PRSO ,CONTBIT>
<FSET? ,PRSO ,DOORBIT>>>
<INSPECTION-REVEALS ,PRSO>)
(ELSE
<TELL ,THERE-IS-NOTHING "behind "><THE-PRSO>)>>
<ROUTINE V-LOOK-DOWN ()
<COND (<NOT ,LIT>
<TELL ,TOO-DARK>)
(<PRSO? <> ,ROOMS ,LG-HOLE>
<COND (<GLOBAL-IN? ,LG-HOLE ,HERE>
<PERFORM ,V?LOOK-INSIDE ,LG-HOLE>)
(ELSE
<PERFORM ,V?EXAMINE ,GROUND>)>
<RTRUE>)
(ELSE
<PRSO-NOTHING-SPECIAL>)>>
<ROUTINE WHAT-CONTENTS ()
<COND (<NOT <DESCRIBE-CONTENTS ,PRSO>>
<TELL "nothing">
<COND (<IN? ,PLAYER ,PRSO>
<TELL " (other than you)">)>)>
<TELL ,PERIOD>>
<ROUTINE V-LOOK-INSIDE ()
<COND (<FSET? ,PRSO ,PERSON>
<PRSO-NOTHING-SPECIAL>)
(<FSET? ,PRSO ,DOORBIT>
<THIS-IS-IT ,PRSO>
<TELL "All you can tell is that ">
<TELL-OPEN-CLOSED>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<PRSO? <LOC ,WINNER>>
<MOVE ,PLAYER ,ROOMS>
<TELL "Aside from you, there's ">
<WHAT-CONTENTS>
<MOVE ,PLAYER ,PRSO>)
(<SEE-INSIDE? ,PRSO>
<TELL CTHE ,PRSO " contains ">
<WHAT-CONTENTS>)
(<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<FIRST? ,PRSO>>
<NEW-VERB ,V?OPEN>
<RTRUE>)
(T
<THIS-IS-IT ,PRSO>
<TELL "It seems ">
<TELL-OPEN-CLOSED>)>)
(T
<YOU-CANT-X-PRSO "look inside">)>>
<ROUTINE V-LOOK-ON ()
<COND (<FSET? ,PRSO ,PERSON>
<PRSO-NOTHING-SPECIAL>)
(<OR <FSET? ,PRSO ,SURFACEBIT>
<FSET? ,PRSO ,FURNITURE>>
<TELL "On " THE ,PRSO " is ">
<WHAT-CONTENTS>)
(T
<TELL "You don't see anything on " THE ,PRSO "." CR>)>>
<ROUTINE V-LOOK-UNDER ()
<COND (<HELD? ,PRSO>
<TELL "You see your hand." CR>)
(T
<TELL ,THERE-IS-NOTHING "there." CR>)>>
<ROUTINE V-LOWER ()
<COND (<PRSO? ,ROOMS>
<PERFORM ,V?SIT>
<RTRUE>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<YOU-CANT-X-THAT "lower">)
(ELSE
<HACK-HACK "Lowering">)>>
<ROUTINE V-MELT ()
<WITH-PRSI?>>
<ROUTINE V-MOVE ()
<COND (<PRSO? <> ROOMS>
<TELL "What moves!" CR>)
(<AND <HELD? ,PRSO>
<NOT <FSET? ,PRSO ,BODY-PART>>>
<TELL
"You're holding " HIM/HER ,PRSO ". Are you planning to juggle " HIM/HER ,PRSO
"?" CR>)
(<AND <FSET? ,PRSO ,TAKEBIT>
<DEAD? ,PRSO>>
<V-TURN-OVER>)
(<FSET? ,PRSO ,DOORBIT>
<PERFORM ,V?OPEN ,PRSO>
<RTRUE>)
(T
<YOU-CANT-X-PRSO "move">)>>
<ROUTINE MOTION-VERB? ()
<VERB? WALK WALK-TO WALK-AROUND
ENTER EXIT
DODGE AVOID
LEAP DIVE DANCE
TURN-AROUND
HIDE HIDE-BEHIND HIDE-UNDER
MOVE BOARD CLIMB-DOWN CLIMB-FOO CLIMB-UP>>
<ROUTINE HOSTILE-VERB? ()
<COND (<VERB? ATTACK BITE CUT HIT KICK KILL
MOVE MUNG PISS PUSH PUSH-OUT RUB
SHAKE SHOOT SPIT SWING THROW TRIP>
<RTRUE>)
(<AND <VERB? TAKE>
<EQUAL? ,P-PRSA-WORD ,W?GRAB ,W?TACKLE ,W?LUNGE>
<FSET? ,PRSO ,PERSON>>
<RTRUE>)
(<AND <VERB? FUCK>
<FSET? ,PRSO ,PERSON>
<NOT <FSET? ,PERSON ,FEMALE>>>
<RTRUE>)>>
<ROUTINE JAPANESE-VERB? ()
<COND (<VERB? DOMO DOZO GENKI-DESU
GOMEN-NASAI HAI ISOGI IYE
KINJIRU KONNICHI-WA KONBANWA MIZU
NIHON-GO-GA TEKI WAKARIMASU>)>>
<ROUTINE ACT-CRAZY? ()
<OR <VERB? YELL YELL-AT DANCE SING LAUGH BABBLE>
<P? ACT CRAZY>>>
"verbs which don't require object to exist/be nearby"
<ROUTINE ABSTRACT-VERB? ()
<OR <EVERYWHERE-VERB?>
<PAST-TENSE?>>>
"verbs with no object or which don't require touching their object."
<ROUTINE PASSIVE-VERB? ()
<OR <ABSTRACT-VERB?>
<VERB? ASK-ABOUT BOW COMPARE COUNT CURSE DIE DISEMBARK
EXAMINE HELLO LAUGH LISTEN LOOK LOOK-BEHIND
LOOK-DOWN LOOK-INSIDE LOOK-UNDER POINT READ
REPLY SAY SCARE SHOW SPEAK TELL TELL-ABOUT
THANK THOU WAIT WAIT-FOR WALK WAVE-AT
YAWN YELL YELL-AT>>>
<ROUTINE V-MUNG ()
<HACK-HACK "Trying to break">>
<ROUTINE PRE-OPEN ()
<COND (<AND <PAST-TENSE?>
<TRY-QCONTEXT?>>
<RTRUE>)
(<AND ,PRSI
<NOT <HELD? ,PRSI>>>
<NOT-HOLDING ,PRSI>)>>
<ROUTINE V-OPEN ("AUX" F STR)
<COND (<FSET? ,PRSO ,DOORBIT>
<SETG P-LAST-OPEN ,PRSO>)>
<COND (<FSET? ,PRSO ,PERSON>
<TELL
,YOU-CANT "open a person, at least not without making a mess." CR>)
(<FSET? ,PRSO ,OPENBIT>
<COND (<FSET? ,PRSO ,OPENABLE>
<ALREADY-OPEN>)
(ELSE
<TELL "It looks open from here." CR>)>)
(<OR <AND <NOT <FSET? ,PRSO ,CONTBIT>>
<NOT <FSET? ,PRSO ,DOORBIT>>>
<FSET? ,PRSO ,SURFACEBIT>>
<COND (<IN? ,PRSO ,ROOMS>
<TELL
,YOU-HAVE-TO "specify a door to open." CR>)
(ELSE <TO-A-PRSO?>)>)
(<NOT <EQUAL? <GETP ,PRSO ,P?CAPACITY> 0>>
<COND (<NOT <FSET? ,PRSO ,OPENBIT>>
<FSET ,PRSO ,OPENBIT>
<FSET ,PRSO ,TOUCHBIT>
<COND (<OR <NOT <FIRST? ,PRSO>>
<FSET? ,PRSO ,TRANSBIT>>
<TELL "Opened." CR>)
(<AND <SET F <FIRST? ,PRSO>>
<NOT <NEXT? .F>>
<SET STR <GETP .F ,P?FDESC>>>
<OKAY-THE-PRSO-IS-NOW "open">
<TELL .STR CR>)
(T
<TELL "Opening ">
<TELL THE ,PRSO " reveals ">
<WHAT-CONTENTS>)>)>)
(T ;"door"
<COND (<FSET? ,PRSO ,OPENBIT>
<ALREADY-OPEN>)
(<FSET? ,PRSO ,LOCKED>
<TELL "It's locked." CR>)
(T
<FSET ,PRSO ,OPENBIT>
<OKAY-THE-PRSO-IS-NOW "open">)>)>>
;<ROUTINE V-PAY ()
<COND (<NOT ,PRSI>
<TELL "Pay with what?" CR>
<RTRUE>)
(T
<WITH-PRSI?>)>>
<ROUTINE V-PICK ()
<YOU-CANT-X-THAT "pick">>
;<ROUTINE V-PLAY ()
<TELL "How peculiar!" CR>>
<ROUTINE V-PLUG ()
<NO-EFFECT> ;"no effect">
<ROUTINE V-POINT ()
<COND (<AND <SCENE? ,S-ANJIRO>
<IN? ,ONNA ,HERE>
<NOT <PRSO? ,ONNA>>>
<PERFORM ,V?SHOW ,PRSO ,ONNA>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<TELL "It is considered impolite to point." CR>)
(ELSE
<TELL "You are now pointing at " A ,PRSO "." CR>)>>
<ROUTINE V-POUR-FROM ()
<COND (<IN? ,PRSO ,PRSI>
<PERFORM ,V?POUR ,PRSO>
<RTRUE>)
(ELSE
<TELL "It's not in that!" CR>)>>
<ROUTINE PRE-POUR ()
<COND (<EQUAL? ,PRSO ,PRSI>
<TELL-YUKS>)>>
<ROUTINE V-POUR ()
<COND (<AND <FSET? ,PRSO ,CONTBIT>
<HELD? ,PRSO>>
<EMPTY-ALL ,PRSO ,PRSI>)
(ELSE
<YOU-CANT-X-THAT "pour">)>>
<ROUTINE EMPTY-ALL (FROM TO "AUX" F N R (1ST? <>))
<MAP-CONTENTS (F N .FROM)
<COND (<FSET? .F ,TAKEBIT>
<SET 1ST? T>
<TELL D .F ": ">
<SET R
<COND (.TO
<PERFORM ,V?PUT .F .TO>)
(ELSE
<PERFORM ,V?DROP .F>)>>
<COND (<EQUAL? .R ,M-FATAL> <RTRUE>)>)>>
<COND (<NOT .1ST?> <TELL CTHE .FROM " is empty." CR>)>
<RTRUE>>
;<ROUTINE V-PUMP ()
<TELL "It's not clear how." CR>>
<ROUTINE V-PUSH ()
<HACK-HACK "Pushing">>
<ROUTINE V-PUSH-TO ()
<COND (<PRSI? INTDIR>
<PERFORM ,V?MOVE ,PRSO>
<RTRUE>)
(ELSE
<TELL
,YOU-CANT "push " THE ,PRSO " into " THE ,PRSI "!" CR>)>>
<ROUTINE PRE-PUT ("AUX" (L <LOC ,PRSO>))
<COND (<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<NOT <FSET? ,PRSO ,TAKEBIT>>>
<TELL "Nice try." CR>)
(<AND <VERB? PUT>
<FSET? ,PRSO ,WEAPONBIT>
<FSET? ,PRSI ,PERSON>>
<SWAP-VERB ,V?ATTACK>
<RTRUE>)
(<IN? ,PRSO ,PRSI>
<TAKE-OUT-FIRST ,PRSO ,PRSI>)
(<IN? ,PRSI ,PRSO>
<TAKE-OUT-FIRST ,PRSI ,PRSO>)
(<FSET? .L ,PERSON> <RFALSE>)
(<AND <FSET? .L ,CONTBIT>
<NOT <FSET? .L ,OPENBIT>>>
<TAKE-OUT-FIRST ,PRSO .L>)>>
<ROUTINE TAKE-OUT-FIRST (OBJ CONT)
<TELL
"You should take " THE .OBJ " out of " THE .CONT " first." CR>>
<ROUTINE V-PUT ("AUX" W)
<COND (<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,DOORBIT>>
<NOT <FSET? ,PRSI ,CONTBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>
<NOT <FSET? ,PRSI ,VEHBIT>>>
<YOU-CANT-X-THAT>
<RTRUE>)
(<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>>
<INSPECTION-REVEALS ,PRSI>)
(<PRSI? ,PRSO>
<TO-A-PRSO?>)
(<IN? ,PRSO ,PRSI>
<TELL "I think ">
<TELL THE ,PRSO " is already in ">
<THE-PRSI>)
(<OR <FSET? ,PRSI ,PERSON>
<AND <FSET? <SET W <LOC ,PRSI>> ,PERSON>
<NOT <EQUAL? .W ,WINNER>>>>
<COND (<NOT .W> <SET W ,PRSI>)>
<TELL
"Don't you think you should ask " THE .W " first?" CR>)
(<PRSO-TOO-BIG?>
<TELL ,NO-ROOM CR>)
(<AND <NOT <HELD? ,PRSO>>
<NOT <EQUAL? <ITAKE> T>>>
<RTRUE>)
(<FSET? ,PRSO ,WEARBIT>
<HAVE-TO-TAKE-OFF>)
(T
<FCLEAR ,PRSO ,WEARBIT>
<MOVE ,PRSO ,PRSI>
<FSET ,PRSO ,TOUCHBIT>
<TELL "Done." CR>)>>
<ROUTINE PRSO-TOO-BIG? ()
<COND (<G? <- <+ <WEIGHT ,PRSI> <WEIGHT ,PRSO>>
<GETP ,PRSI ,P?SIZE>>
<GETP ,PRSI ,P?CAPACITY>>
<RTRUE>)
(ELSE <RFALSE>)>>
<ROUTINE INSPECTION-REVEALS (OBJ)
<THIS-IS-IT .OBJ>
<TELL "Inspection reveals that " THE .OBJ " isn't open." CR>>
<ROUTINE V-PUT-BEHIND ()
<TELL ,YOU-CANT "be sure what's behind there already." CR>>
<ROUTINE V-PUT-ON ()
<COND (<PRSI? ,ME>
<COND (<FSET? ,PRSO ,WEARBIT>
<TELL "You already have " THE ,PRSO " on." CR>)
(ELSE
<PERFORM ,V?WEAR ,PRSO>
<RTRUE>)>)
(<PRSI? ,GROUND>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(<FSET? ,PRSI ,SURFACEBIT>
<V-PUT>)
(<AND <FSET? ,PRSI ,PERSON>
<NOT <FSET? ,PRSO ,DEAD>>>
<COND (<FSET? ,PRSO ,WEARABLE>
<TELL
"Presumably, " THE ,PRSI " would prefer to dress " HIM/HER ,PRSO "self." CR>)
(ELSE
<TELL
CTHE ,PRSI " doesn't look like a table to me." CR>)>)
(T
<NO-GOOD-SURFACE>)>>
<ROUTINE NO-GOOD-SURFACE ()
<TELL "There's no good surface on ">
<THE-PRSI>>
<ROUTINE V-PUT-UNDER ()
<YOU-CANT-X-THAT "put anything under">>
<ROUTINE V-RAISE ()
<COND (<AND <FSET? ,PRSO ,PERSON>
<NOT <PRSO? ,WINNER ,ME>>>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL ,YOU-CANT "raise that." CR>)
(<AND <NOT <IN? <LOC ,PRSO> ,WINNER>>
<G? <+ <WEIGHT ,PRSO> <WEIGHT ,WINNER>> ,LOAD-ALLOWED>>
<TELL CTHE ,PRSO " is too heavy." CR>)
(ELSE <HACK-HACK "Lifting">)>>
<ROUTINE V-REACH-IN ("AUX" OBJ)
<COND (<OR <NOT <FSET? ,PRSO ,CONTBIT>>
<FSET? ,PRSO ,PERSON>>
<TO-A-PRSO?>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL "It's not open." CR>)
(<OR <NOT <SET OBJ <FIRST? ,PRSO>>>
<FSET? .OBJ ,INVISIBLE>
<NOT <FSET? .OBJ ,TAKEBIT>>>
<ITS-EMPTY>)
(T
<TELL
G "You feel something " "in " THE ,PRSO "!" CR>
<RTRUE>)>>
<ROUTINE PRE-READ ()
<COND (<NOT ,LIT>
<TELL ,YOU-CANT "read in the dark." CR>)
(<AND ,PRSI <NOT <FSET? ,PRSI ,TRANSBIT>>>
<HOW-DO-YOU> <A-PRSI?>)>>
<ROUTINE HOW-DO-YOU ()
<TELL "How do you do that with ">>
<ROUTINE V-READ ()
<COND (<AND <FSET? ,PRSO ,READBIT>
<GETP ,PRSO ,P?TEXT>>
<TELL <GETP ,PRSO ,P?TEXT> CR>)
(T
<TO-A-PRSO?>)>>
<ROUTINE V-REPLY ()
<END-QUOTE>
<COND (<PRSO? INTQUOTE>
<TELL
"[Please answer without using quotes.]" CR>)
(<PRSO? ,QCONTEXT>
<COND (<NOT ,PRSI>
<PERFORM ,V?ANSWER>
<RTRUE>)
(ELSE
<PERFORM ,V?REPLY ,PRSI>
<RTRUE>)>)
(<AND <NOT ,PRSI>
<TRY-QCONTEXT?>>
<RTRUE>)
(ELSE
<TELL "You are ignored." CR>)>>
<ROUTINE PRE-SRUB ()
<SWAP-VERB ,V?RUB>
<RTRUE>>
<ROUTINE V-SRUB ()
<RTRUE>>
<ROUTINE V-RUB ("AUX" H)
<COND (<PRSO? ,AIR>
<TELL "It's ">
<COND (<FSET? ,HERE ,OUTSIDE>
<TELL "cold." CR>)
(ELSE
<TELL "warm." CR>)>)
(ELSE
<HACK-HACK "Touching">)>>
<ROUTINE V-SAY ("AUX" V)
<COND (<AND <PRSO? INTQUOTE>
<OR ,OMI-QUESTION
,YABU-QUESTION
,RODRIGUES-QUESTION
,AFTERMATH-QUESTION>>
<HOW-TO-USE-TELL ,PRSI>)
(<TRY-QCONTEXT?> <RTRUE>)
(<PRSO? ,ENGLISH ,PORTUGUESE ,SPANISH
,DUTCH ,LATIN ,JAPANESE>
<PERFORM ,V?SPEAK ,PRSO ,PRSI>
<RTRUE>)
(<NOT ,PRSI>
<TELL
"If you wish to speak to someone, you should say (for example) \"">
<COND (<SET V <FIND-IN ,HERE ,PERSON>>
<TELL D .V>)
(ELSE <TELL I"person">)>
<TELL ", "I"what you want to say""\"" CR>
<END-QUOTE>)>>
<ROUTINE HOW-TO-USE-TELL (WHO)
<TELL
"[The correct way to speak to others is to use their name followed by a comma,
and then what you want to say to them. For example:|
>">
<COND (.WHO <TELL D .WHO>)
(<AND ,QCONTEXT <IN? ,QCONTEXT ,HERE>>
<TELL D ,QCONTEXT>)
(ELSE <TELL I"person">)>
<TELL ", ">
<PRINT-INTQUOTE>
<TELL " ]" CR>
<END-QUOTE>>
<ROUTINE V-SEARCH ()
<COND (<AND ,PRSI <FSET? ,PRSI ,PERSON>>
<PERFORM ,V?FIND ,PRSI>
<RTRUE>)
(<FSET? ,PRSO ,DEAD>
<TELL
CTHE ,PRSO " can't object, being dead, but you find nothing interesting." CR>)
(<FSET? ,PRSO ,PERSON>
<TELL
CTHE ,PRSO " refuse"S ,PRSO "." CR>)
(<NOT <DESCRIBE-CONTENTS ,PRSO
<>
<+ ,D-ALL? ,D-PARA?>>>
<TELL ,THERE-IS-NOTHING "there" ,PERIOD>)>>
<ROUTINE V-SEND ()
<COND (<AND <PAST-TENSE?>
<TRY-QCONTEXT?>>
<RTRUE>)
(<AND <FSET? ,PRSO ,PERSON>
,PRSI
<FSET? ,PRSI ,PERSON>>
<TELL
D ,PRSO " isn't interested in seeing " D ,PRSI "." CR>)
(<AND <FSET? ,PRSO ,PERSON>
<PRSI? <> ,INTDIR>>
<TELL
D ,PRSO G" doesn't seem to want to go." CR>)
(<AND ,PRSI
<FSET? ,PRSI ,PERSON>
<PRSO? ,INTDIR>>
<TELL
D ,PRSI G" doesn't seem to want to go." CR>)
(T
<TELL-YUKS>)>>
<ROUTINE V-SEND-UNDER ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL CTHE ,PRSO " refuses." CR>)
(ELSE
<TELL "Look again, you're giving orders to " A ,PRSO "!" CR>)>>
<ROUTINE PRE-SGIVE ()
<SWAP-VERB ,V?GIVE>
<RTRUE>>
<ROUTINE V-SGIVE ()
<RTRUE>>
<ROUTINE V-SHAKE ("AUX" X)
<COND (<PRSO? ,HEAD>
<PERFORM ,V?NO>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<TELL "Be real." CR>)
;(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL ,YOU-CANT "take it; thus, you can't shake it!" CR>)
(T
<TELL "There's no point in shaking ">
<THAT/THEM ,PRSO>
<TELL "." CR>)>>
<ROUTINE THAT/THEM (OBJ)
<COND (<FSET? .OBJ ,PLURAL> <TELL "them">)
(ELSE <TELL "that">)>>
<ROUTINE V-SHARPEN ()
<TELL "You'll never sharpen anything with ">
<THAT/THEM ,PRSI>
<TELL "!" CR>>
<ROUTINE V-SHOOT-WITH ()
<PERFORM ,V?SHOOT ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE PRE-SHOOT ()
<COND (<AND <PRSO? ,PISTOL>
<FSET? ,PISTOL ,RMUNGBIT>>
<TELL
"You fire, but the pistol just goes \"click!\" It isn't loaded!" CR>)
(<NOT ,PRSI>
<COND (<PRSO? ,PISTOL>
<FSET ,PISTOL ,RMUNGBIT>
<TELL
"You fire " THE ,PRSO " into the air, to little effect." CR>)
(<HELD? ,PISTOL>
<PERFORM ,V?SHOOT ,PISTOL ,PRSO>
<RTRUE>)
(<HELD? ,PRSO>
<TELL
"Few would consider " A ,PRSO " to be an adequate firearm." CR>)
(ELSE
<TELL
"You don't have a weapon to shoot " THE ,PRSO " with." CR>)>)>>
<ROUTINE V-SHOOT ()
<COND (<PRSO? ,PISTOL>
<COND (<PRSI? ,PISTOL>
<TELL
"A difficult maneuver, in fact an impossible one." CR>
<RTRUE>)>
<COND (<OR <NOT <PRSI? MARIKO ETSU CHIMMOKO ACHIKO YABU
KIRITSUBO>>
<FSET? ,PRSI ,DEAD>
<JIGS-UP? ,J-SHOOT-FRIEND
"Why would you want to shoot a friend?">>
<FSET ,PISTOL ,RMUNGBIT>
<TELL
"You fire the pistol at " THE ,PRSI>
<COND (<FSET? ,PRSI ,DEAD>
<TELL ", who was already dead." CR>)
(<FSET? ,PRSI ,PERSON>
<COND (<GETPT ,PRSI ,P?OWNER>
<PUTP ,PRSI ,P?OWNER ,BLACKTHORNE>)>
<TELL ", killing ">
<COND (<NOT <FSET? ,PRSI ,PLURAL>>
<FSET ,PRSI ,DEAD>
<TELL HIM/HER ,PRSI>)
(ELSE
<TELL "one of them">)>
<TELL " instantly." CR>)
(<PRSI? ,GROUND ,WALL>
<TELL ", to no useful effect." CR>)
(ELSE
<TELL ", missing by a mile." CR>)>
<COND (<PRSI? MARIKO ETSU CHIMMOKO ACHIKO YABU>
<CRLF>
<JIGS-UP
"You hear a scream from the others. \"The Anjin-san has gone mad!\" they
yell. You are quickly overcome and dispatched, as a mad dog would be.">)
(ELSE <RTRUE>)>)
(ELSE <RTRUE>)>)
(ELSE
<TELL
"If you had a weapon, you might be able to shoot it. Alas, you don't." CR>)>>
<ROUTINE V-SHOW ()
<COND (<FSET? ,PRSI ,PERSON>
<UNINTERESTED ,PRSI>)
(ELSE <TELL-YUKS>)>>
<ROUTINE V-SKIP ()
<TELL "Anyone who saw you would be unfavorably impressed." CR>>
<ROUTINE V-SLEEP ()
<COND (,OPPONENT
<TELL
"If you can sleep at a time like this, you have nerves of steel!" CR>)
(ELSE
<TELL
"You try to sleep, but you can't let yourself relax now." CR>)>>
<ROUTINE LIKE-A-PRSO (V)
<TELL CHE/SHE ,PRSO " " .V " just like " A ,PRSO "." CR>>
<ROUTINE V-SMELL ()
<COND (,PRSO
<LIKE-A-PRSO "smells">)
(<FSET? <LOC ,WINNER> ,VEHBIT>
<PERFORM-PRSA <LOC ,WINNER>>
<RTRUE>)
(ELSE
<TELL
"There's no noticeable smell here." CR>)>>
;<ROUTINE V-SPAY ()
<SWAP-VERB ,V?PAY>
<RTRUE>>
;<ROUTINE V-SPIN ()
<YOU-CANT-X-THAT "spin">>
<ROUTINE PRE-SSHOW ()
<SWAP-VERB ,V?SHOW>
<RTRUE>>
<ROUTINE V-SSHOW ()
<RTRUE>>
<ROUTINE V-SWING ()
<COND (<NOT ,PRSI>
<TELL "Whoosh!" CR>)
(T
<PERFORM ,V?HIT ,PRSI ,PRSO>
<RTRUE>)>>
<ROUTINE V-SWIM ()
<TELL-YUKS>>
<ROUTINE V-SWIM-TO ()
<PERFORM ,V?WALK-TO ,PRSO>
<RTRUE>>
<ROUTINE PRE-TAKE ()
<COND (<AND <IN? ,PRSO ,WINNER>
<FSET? ,PRSO ,WEARBIT>>
<RFALSE>)
(<AND <IN? ,PRSO ,WINNER>
<NOT <NOUN-USED? ,PRSO ,W?WATER>>>
<TELL ,YOU-HAVE THE ,PRSO "." CR>)
(<AND <NOT <FSET? <LOC ,WINNER> ,VEHBIT>>
<LOC ,PRSO>
<FSET? <LOC ,PRSO> ,CONTBIT>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<CANT-REACH-THAT>
<RTRUE>)
(,PRSI
<COND (<PRSO? ,ME>
<PERFORM ,V?DROP ,PRSI>
<RTRUE>)
(<OR <HELD? ,PRSO ,PRSI>
<EQUAL? ,PRSI <GETP ,PRSO ,P?OWNER>>>
<SETG PRSI <>>
<RFALSE>)
(<FSET? ,PRSI ,PERSON>
<TELL
CTHE ,PRSI " doesn't seem to have " THE ,PRSO "." CR>
<RTRUE>)
(ELSE
<TELL CTHE ,PRSO " isn't there." CR>
<RTRUE>)>)
(<PRSO? <LOC ,WINNER>>
<TELL "You are ">
<COND (<FSET? ,PRSO ,PERSON> <TELL "being carried by">)
(<FSET? ,PRSO ,SURFACEBIT> <TELL "on">)
(ELSE <TELL "in">)>
<TELL " it!" CR>)>>
"return true if prso or prsi is inaccessible from vehicle and verb requires
access to it. e.g.,
>EXAMINE obj-outside-vehicle => rfalse
>TAKE obj-outside-vehicle => rtrue"
;<ROUTINE NOT-REACHABLE? ()
<COND (<PASSIVE-VERB?> <RFALSE>)>
<COND (<NOT-IN-VEHICLE? ,PRSO> <RETURN ,PRSO>)
(<NOT-IN-VEHICLE? ,PRSI> <RETURN ,PRSI>)>>
;<ROUTINE CANT-REACH-FROM-VEHICLE (O)
<TELL
,YOU-CANT "reach " THE .O " from within " THE <LOC ,WINNER> "." CR>>
;<ROUTINE NOT-IN-VEHICLE? (PP "AUX" (V <LOC ,WINNER>))
<COND (<OR <NOT .PP>
<EQUAL? .PP .V ,ROOMS>
<INTRINSIC? .PP>
<HELD? .PP>
<EQUAL? <META-LOC .PP> .V>>
<RFALSE>)
(ELSE <RTRUE>)>>
<ROUTINE V-TAKE ("AUX" SIZ)
<COND (<EQUAL? <ITAKE> T>
<SET SIZ <GETP ,PRSO ,P?SIZE>>
<TELL "Taken">
<COND (<G=? .SIZ 20>
<TELL ", but it's ">
<COND (<G=? .SIZ 100>
<TELL "extremely">)
(<G=? .SIZ 50>
<TELL "very">)>
<TELL " heavy">)>
<TELL "." CR>)>>
<ROUTINE PUT-ON (OBJ "OPT" (WHO ,WINNER))
<MOVE .OBJ .WHO>
<FSET .OBJ ,WEARBIT>>
<ROUTINE TAKE-OFF (OBJ)
<MOVE .OBJ ,HERE>
<FCLEAR .OBJ ,WEARBIT>>
<ROUTINE V-TAKE-OFF ()
<COND (<FSET? ,PRSO ,VEHBIT>
<NEW-VERB ,V?DISEMBARK>
<RTRUE>)
(<FSET? ,PRSO ,WEARABLE>
<COND (<AND <FSET? ,PRSO ,WEARBIT>
<IN? ,PRSO ,WINNER>>
<FCLEAR ,PRSO ,WEARBIT>
<TELL
"You're no longer wearing " THE ,PRSO ,PERIOD>)
(ELSE <TELL G"You aren't ""wearing it." CR>)>)
(ELSE
<NEW-VERB ,V?TAKE>
<RTRUE>)>>
<ROUTINE V-HOLD ("AUX" O)
<COND (<FSET? ,PRSO ,BODY-PART>
<SET O <GET-OWNER ,PRSO>>
<COND (<NOT <EQUAL? .O ,ME ,BLACKTHORNE <>>>
<TELL
"It seems unavailable at the moment." CR>)
(<PRSO? ,HEAD>
<TELL "Do you have a headache?" CR>)
(ELSE
<TELL
"You hold your " D ,PRSO " as best you can." CR>)>)
(<HELD? ,PRSO>
<COND (<IN? ,PRSO ,WINNER>
<COND (<AND <FSET? ,PRSO ,WEARBIT>
<FSET? ,PRSO ,WEAPONBIT>>
<FCLEAR ,PRSO ,WEARBIT>
<TELL
"You take " THE ,PRSO " and prepare to use " HIM/HER ,PRSO "." CR>)
(ELSE
<TELL
"You hold " HIM/HER ,PRSO " tightly." CR>)>)
(ELSE
<TELL
"You take " THE ,PRSO " out of " THE <LOC ,PRSO> " and hold "
HIM/HER ,PRSO "." CR>
<MOVE ,PRSO ,WINNER>
<RTRUE>)>)
(ELSE
<TELL "You don't have " THE ,PRSO "." CR>)>>
<ROUTINE V-TELL ()
<COND (<FSET? ,PRSO ,PERSON>
<COND (<AND <FSET? ,PRSO ,DEAD>
<NOT <PRSO? ,MARIKO>>>
<TELL
,YOU-CANT G"expect a response from a dead person!" CR>
<END-QUOTE>
<RFATAL>)
(,P-CONT
<SETG WINNER ,PRSO>
<RTRUE>)
(T
<TELL
CTHE ,PRSO " wait">
<COND (<NOT <FSET? ,PRSO ,PLURAL>>
<TELL "s">)>
<TELL " for you to say something." CR>
<END-QUOTE>
<RFATAL>)>)
(T
<YOU-CANT-X-PRSO "talk to">
<END-QUOTE>
<RFATAL>)>>
<ROUTINE V-THANK ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(<OR <NOT ,PRSO> <PRSO? ,YOU ,ME>>
<COND (<FSET? ,JAPANESE ,SCOREBIT>
<TELL "You're welcome." CR>)
(ELSE
<TELL "Domo." CR>)>)
(<FSET? ,PRSO ,PERSON>
<COND (<FSET? ,PRSO ,DEAD>
<TELL
CTHE ,PRSO " is beyond all politeness now." CR>)
(<PRSO? ,RODRIGUES>
<TELL
"\"You're welcome, Ingeles.\"" CR>)
(<PRSO? ,SEBASTIO ,OPPONENT>
<TELL
"He ignores your politeness." CR>)
(<NOT <FSET? ,PRSO ,JAPANESEBIT>>
<TELL
CTHE ,PRSO " is surprised by your politeness." CR>)
(ELSE
<COND (<FSET? ,PRSO ,PLURAL>
<TELL CA ,PRSO>)
(ELSE
<TELL CTHE ,PRSO>)>
<TELL " bows and responds \""I"Domo.""\"" CR>)>)
(T
<TO-A-PRSO?>)>>
<ROUTINE V-DOMO ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(ELSE
<TELL "How very kind!" CR>)>>
<ROUTINE V-DOZO ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(ELSE
<TELL "There is no response." CR>)>>
<ROUTINE PRE-THROUGH ()
<COND (<OR <PRSO? ,ROOMS>
<IN? ,PRSO ,ROOMS>
<ACCESSIBLE? ,PRSO>>
<RFALSE>)
(ELSE
<TELL "You can't see any " D ,PRSO " here." CR>)>>
<ROUTINE V-THROUGH ("AUX" M)
<COND (<IN? ,PRSO ,ROOMS>
<PERFORM ,V?WALK-TO ,PRSO>
<RTRUE>)
(<PRSO? ,ROOMS>
<DO-WALK ,P?IN>)
(<FSET? ,PRSO ,VEHBIT>
<NEW-VERB ,V?BOARD>
<RTRUE>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<SET M <FIND-DOOR ,PRSO>>
<DO-WALK .M>)
(ELSE
<TELL
,YOU-HAVE-TO G"be more specific about ""the direction you are going." CR>)>)
(<FSET? ,PRSO ,PERSON>
<TELL ,GOOD-TRICK>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL
"You hit your head against " THE ,PRSO " as you attempt this feat." CR>)
(<IN? ,PRSO ,WINNER>
<TELL "That would involve quite a contortion!" CR>)
(T
<TELL-YUKS>)>>
<ROUTINE FIND-DOOR (DOOR "AUX" DIR PT PTS)
<MAP-DIRECTIONS (DIR PT ,HERE)
<COND (<AND <EQUAL? <PTSIZE .PT> ,DEXIT>
<EQUAL? <GET .PT ,DEXITOBJ> .DOOR>>
<RETURN .DIR>)>>>
<ROUTINE PRE-THROW ()
<COND (<PRSO? ,ANCHOR ,ERASMUS-ANCHOR ,MARIKO ,SAFETY-LINE
,OAR ,LIFE-RING>
<RFALSE>)
(<NOT <HELD? ,PRSO>>
<TELL "You're not carrying " THE ,PRSO "." CR>)
(<PRSO? ,LARGE-KNIFE ,SMALL-KNIFE>
<RFALSE>)
(<FSET? ,PRSO ,WEARBIT>
<YOULL-HAVE-TO "take them off">)>>
<ROUTINE V-THROW ()
<COND (<AND ,PRSI <FSET? ,PRSI ,PERSON>>
<COND (<IN? ,PRSO ,WINNER>
<COND (<IDROP>
<NOT-TRAINED ,PRSI>)>)
(ELSE
<SWAP-VERB ,V?HIT>
<RTRUE>)>)
(<AND ,PRSI
<NOT <PRSI? PSEUDO-OBJECT>>
<FSET? ,PRSO ,WEAPONBIT>>
<SWAP-VERB ,V?HIT>
<RTRUE>)
(<AND ,PRSI
<NOT <FSET? ,PRSI ,DOORBIT>>
<FSET? ,PRSI ,CONTBIT>
<GETP ,PRSI ,P?CAPACITY>>
<NEW-VERB ,V?PUT>
<RTRUE>)
(<IDROP>
<TELL "Thrown." CR>)>>
<ROUTINE V-THROW-OFF ()
<COND (<GLOBAL-IN? ,LG-SEA ,HERE>
<REMOVE ,PRSO>
<TELL
"Splash! " CTHE ,PRSO " is gone for good now!" CR>)
(ELSE
<YOU-CANT-X-THAT "throw anything off">)>>
<ROUTINE V-TIE ()
<COND (<AND <NOT ,PRSI>
<NOT <PRSO? ,YABU-KIMONO>>
<HELD? ,YABU-KIMONO>>
<PERFORM ,V?TIE ,PRSO ,YABU-KIMONO>
<RTRUE>)
(<PRSO? ,MURA-ROPE>
<TELL "You can't get it away from Mura." CR>)
(ELSE
<TO-A-PRSO?>)>>
<ROUTINE V-TIE-UP ()
<TO-A-PRSO?>>
<ROUTINE V-TIME ("AUX" X)
<TELL "You have no easy way to tell time." CR>>
<ROUTINE V-TORTURE ()
<TELL "An appalling idea!" CR>>
<ROUTINE NO-EFFECT () ;"used by others"
<TELL "This has no effect." CR>>
<ROUTINE V-TURN () ;"used by others"
<COND (<AND <PRSO? INTDIR>
<SCENE? ,S-ERASMUS ,S-VOYAGE>>
<TELL "You must be on the bridge to steer!" CR>)
(<AND <NOT ,PRSI>
<PRSO? ,FORESAILS>>
<PERFORM ,V?RAISE ,PRSO>
<RTRUE>)
(ELSE
<NO-EFFECT>)>>
<ROUTINE V-TURN-OVER ()
<TELL "Moving " THE ,PRSO " reveals nothing." CR>>
<ROUTINE V-TURN-AROUND ()
<COND (<PRSO? ,ROOMS>
<PERFORM ,V?LOOK-BEHIND ,ME>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<TELL
"I wouldn't do that, " THE ,PRSO " might get dizzy." CR>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL
,YOU-CANT "turn " THE ,PRSO " around." CR>)
(ELSE
<TELL
"Turning " THE ,PRSO " around gives you a new perspective on it, but
reveals no new information." CR>)>>
<ROUTINE V-UNLOCK ()
<COND (<AND <PAST-TENSE?>
<TRY-QCONTEXT?>>
<RTRUE>)
(<NOT <PRSI? <> ,KEY>>
<CANT-X-WITH-PRSI "unlock">)
(<FSET? ,PRSO ,LOCKABLE>
<COND (<NOT <FSET? ,PRSO ,LOCKED>>
<TELL G"It already is." CR>)
(<IN? ,KEY ,WINNER>
<FCLEAR ,PRSO ,LOCKED>
<TELL "Done." CR>)
(ELSE <TELL G"You need a key to do that." CR>)>)
(ELSE
<NO-LOCK>)>>
<ROUTINE V-UNTIE ()
<TO-A-PRSO?>>
<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
<COND (<AND ,QCONTEXT
<PAST-TENSE?>
<TRY-QCONTEXT?>>
<RTRUE>)
(<PAST-TENSE?>
<TELL
"An interesting fact, indeed." CR>)
(<NOT ,P-WALK-DIR>
<NEW-VERB ,V?WALK-TO>
<RTRUE>)
(<B-NOT-STANDING?>
<YOULL-HAVE-TO "stand up">)
(<SET PT <GETPT ,HERE ,PRSO>>
<SET PTS <PTSIZE .PT>>
<COND (<EQUAL? .PTS ,NEXIT>
<TELL <GET .PT ,NEXITSTR> CR>
<RFATAL>)
(<EQUAL? .PTS ,UEXIT>
<SET RM <GETB .PT ,REXIT>>)
(<EQUAL? .PTS ,FEXIT>
<COND (<NOT <SET RM <APPLY <GET .PT ,FEXITFCN>>>>
<RFATAL>)>)
(<EQUAL? .PTS ,CEXIT>
<COND (<VALUE <GETB .PT ,CEXITFLAG>>
<SET RM <GETB .PT ,REXIT>>)
(<SET STR <GET .PT ,CEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(T
<CANT-GO>
<RFATAL>)>)
(<EQUAL? .PTS ,DEXIT>
<SET OBJ <GET .PT ,DEXITOBJ>>
<COND (<FSET? .OBJ ,INVISIBLE>
<CANT-GO>
<RFATAL>)
(<OR <FSET? .OBJ ,OPENBIT>
<AND <NOT <FSET? .OBJ ,LOCKED>>
<NOT <FSET? .OBJ ,TRYTAKEBIT>>>>
<SET RM <GETB .PT ,DEXITRM>>
<COND (<NOT <FSET? .OBJ ,OPENBIT>>
<FSET .OBJ ,OPENBIT>
<TELL
"You open " THE .OBJ " and go through." CR CR>)>)
(<SET STR <GET .PT ,DEXITSTR>>
<TELL .STR CR>
<THIS-IS-IT .OBJ>
<RFATAL>)
(T
<TELL-OPEN-CLOSED .OBJ>
<THIS-IS-IT .OBJ>
<RFATAL>)>)>
<COND (<SCENE? ,S-NINJA>
<COND (<AND <NOT ,AVOID-CALTROPS?>
<IN? ,CALTROPS ,HERE>>
<COND (<PROB 35>
<JIGS-UP
"The tiny metal balls on the floor have needle spikes. You step on one in
your hurry, and find that they are poisoned! The fiery pain shoots up your
leg, and in no time you fall to the floor in agony.">
<RFATAL>)
(ELSE
<TELL
"As you hurry along, you narrowly miss stepping on a caltrop!" CR CR>)>)
(<IN? ,SMOKE-BOMB ,HERE>
<TELL
"You try to advance, but the acrid, choking smoke prevents you." CR>
<RFATAL>)
(<IN? ,FIRE-BOMB ,HERE>
<TELL
"The floor is covering with burning pitch which sticks to your feet and
drives you back." CR>
<RFATAL>)>)>
<GOTO .RM>)
(<AND <EQUAL? ,PRSO ,P?IN ,P?OUT>
,P-LAST-OPEN
<GLOBAL-IN? ,P-LAST-OPEN ,HERE>>
<PERFORM ,V?THROUGH ,P-LAST-OPEN>
<RTRUE>)
(T
<CANT-GO>
<RFATAL>)>>
<GLOBAL P-LAST-OPEN <>>
<ROUTINE V-WALK-AROUND ()
<TELL "Please use compass directions instead." CR>>
<ROUTINE V-WALK-TO ("AUX" DIR TMP)
<COND (,PRSO
<COND (<AND ,QCONTEXT
<PAST-TENSE?>
<TRY-QCONTEXT?>>
<RTRUE>)
(<PRSO? ,INTDIR>
<DO-WALK ,P-DIRECTION>
<RTRUE>)
(<IN? ,PRSO ,ROOMS>
;"do this first because rooms can be in GLOBALS"
<COND (<SET DIR <NEXT-ROOM? ,PRSO>>
<DO-WALK .DIR>)
(ELSE
<TELL
,YOU-HAVE-TO G"specify a direction." CR>)>)
(<OR <IN? ,PRSO ,HERE>
<GLOBAL-IN? ,PRSO ,HERE>>
<COND (<FSET? ,PRSO ,PERSON>
<COND (<FSET? ,PRSO ,PLURAL>
<TELL "They're">)
(<FSET? ,PRSO ,FEMALE>
<TELL "She's">)
(ELSE <TELL "He's">)>)
(ELSE <TELL "It's">)>
<TELL " here!" CR>)
(<AND <SET TMP <META-LOC ,PRSO>>
<IN? .TMP ,ROOMS>>
<PERFORM ,PRSA .TMP>
<RTRUE>)
(ELSE
<TELL
"I'm not sure how to get to ">
<COND (<FSET? ,PRSO ,PERSON>
<COND (<FSET? ,PRSO ,PLURAL>
<TELL "them">)
(<FSET? ,PRSO ,FEMALE>
<TELL "her">)
(ELSE <TELL "him">)>)
(ELSE
<TELL "that">)>
<TELL "." CR>)>)
(T
<V-WALK-AROUND>)>>
<ROUTINE NEXT-ROOM? (RM "OPT" (STRICT? <>) "AUX" DIR PT PTS OBJ)
<MAP-DIRECTIONS (DIR PT ,HERE)
<SET PTS <PTSIZE .PT>>
<COND (<EQUAL? .PTS ,NEXIT>)
(<AND <EQUAL? .PTS ,UEXIT>
<EQUAL? <GETB .PT ,REXIT> .RM>>
<RETURN .DIR>)
(<AND <EQUAL? .PTS ,CEXIT>
<EQUAL? <GETB .PT ,REXIT> .RM>>
<COND (<OR <NOT .STRICT?>
<VALUE <GETB .PT ,CEXITFLAG>>>
<RETURN .DIR>)>)
(<AND <EQUAL? .PTS ,DEXIT>
<EQUAL? <GETB .PT ,DEXITRM> .RM>>
<SET OBJ <GET .PT ,DEXITOBJ>>
<COND (<OR <NOT .STRICT?>
<AND <NOT <FSET? .OBJ ,INVISIBLE>>
<FSET? .OBJ ,OPENBIT>>>
<RETURN .DIR>)>)
(<AND <EQUAL? .PTS ,FEXIT>
<EQUAL? <APPLY <GET .PT ,FEXITFCN>
,M-ENTER
.STRICT?>
.RM>>
<RETURN .DIR>)>>
<RFALSE>>
<ROUTINE V-WAIT ("AUX" (NUM 3))
<COND (<PRSO? ,INTNUM>
<COND (<G? ,P-NUMBER 100>
<TELL "Too long!" CR>)
(T
<SET NUM ,P-NUMBER>)>)>
<TELL "Time passes..." CR>
<REPEAT ()
<COND (<L? <SET NUM <- .NUM 1>> 0>
<RETURN>)
(<CLOCKER>
<RETURN>)>>
<SETG CLOCK-WAIT T>
<RTRUE>>
<ROUTINE V-WAIT-FOR ()
<COND (<PRSO? INTNUM>
<NEW-VERB ,V?WAIT>
<RTRUE>)
(<EQUAL? <LOC ,PRSO> ,HERE ,WINNER>
<CPRINT-HE/SHE ,PRSO>
<TELL "'s already here!" CR>)
(T
<TELL "You may well wait quite a while." CR>)>>
<ROUTINE V-WAVE ()
<COND (<AND <NOT <HELD? ,PRSO>>
<FSET? ,PRSO ,BODY-PART>>
<YOU-ARENT-HOLDING>)
(ELSE
<HACK-HACK "Waving">)>>
<ROUTINE YOU-ARENT-HOLDING ()
<TELL "You aren't holding " THE ,PRSO "." CR>>
<ROUTINE V-WAVE-AT ()
<COND (<AND <NOT <HELD? ,PRSO>>
<FSET? ,PRSO ,BODY-PART>>
<YOU-ARENT-HOLDING>)
(<PRSO? ,HEAD>
<COND (<NOT ,PRSI>
<PERFORM ,V?NO>
<RTRUE>)
(<FSET? ,PRSI ,PERSON>
<SETG WINNER ,PRSI>
<PERFORM ,V?NO>
<SETG WINNER ,PLAYER>
<RTRUE>)
(ELSE
<TELL
"Shaking one's head at " A ,PRSI " accomplishes little." CR>)>)
(<AND ,PRSI <FSET? ,PRSI ,PERSON>>
<PERFORM ,V?WAVE-AT ,PRSI>
<RTRUE>)
(<PRSO? ,ME>
<TELL "What a peculiar idea!" CR>)
(ELSE
<TELL CTHE ,PRSO IS/ARE ,PRSO "n't likely to respond." CR>)>>
<ROUTINE V-DRESS ("AUX" (OBJ <>) LAST)
<REPEAT ()
<SET LAST .OBJ>
<SET OBJ <>>
<COND (<AND <HELD? ,CLOTHES>
<NOT <FSET? ,CLOTHES ,WEARBIT>>>
<SET OBJ ,CLOTHES>)
(<AND <HELD? ,BOOTS>
<NOT <FSET? ,BOOTS ,WEARBIT>>>
<SET OBJ ,BOOTS>)
(<AND <HELD? ,KIMONO>
<NOT <FSET? ,KIMONO ,WEARBIT>>>
<SET OBJ ,KIMONO>)
(<AND <HELD? ,SOCKS>
<NOT <FSET? ,SOCKS ,WEARBIT>>>
<SET OBJ ,SOCKS>)
(<AND <ACCESSIBLE? ,SANDALS>
<NOT <FSET? ,SANDALS ,WEARBIT>>>
<SET OBJ ,SANDALS>)>
<COND (.OBJ
<FSET .OBJ ,RMUNGBIT> ;"prevents recursion"
<PERFORM ,V?WEAR .OBJ>
<FCLEAR .OBJ ,RMUNGBIT>
<COND (<NOT <FSET? .OBJ ,WEARBIT>>
<RTRUE>)>)
(<NOT .LAST>
<TELL "You don't have anything to wear!" CR>
<RTRUE>)
(ELSE <RTRUE>)>>>
<ROUTINE V-WEAR ()
<COND (<FSET? ,PRSO ,WEARBIT>
<TELL ,YOU-ARE ,PERIOD>)
(<FSET? ,PRSO ,WEARABLE>
<COND (<EQUAL? ,PLAYER <GETP ,PRSO ,P?OWNER>>
<COND (<AND <NOT <HELD? ,PRSO>>
<NOT <ITAKE T>>>
<RTRUE>)
(ELSE
<FSET ,PRSO ,WEARBIT>
<TELL
"You put on " THE ,PRSO "." CR>)>)
(ELSE
<TELL "They don't fit you." CR>)>)
(ELSE
<YOU-CANT-X-PRSO "wear">)>>
;<ROUTINE V-WHAT ()
<TELL "An excellent question." CR>>
;<ROUTINE V-WHERE ()
<COND (<NOT ,PRSO>
<COND (,P-IT-OBJECT
<NEW-PRSO ,P-IT-OBJECT>
<RTRUE>)
(ELSE
<TELL "Why?" CR>)>)
(ELSE
<V-FIND T>)>>
;<ROUTINE PRE-WHO ("AUX" P)
<COND (<AND ,PRSO
<SET P <GETP ,PRSO ,P?PICTURE>>>
<MARGINAL-PIC .P>
<RFALSE>)>>
;<ROUTINE V-WHO ()
<COND (<NOT ,PRSO> <V-WHAT>)
(<FSET? ,PRSO ,PERSON>
<NEW-VERB ,V?WHAT>
<RTRUE>)
(T
<TELL "That's not a person!" CR>)>>
<ROUTINE V-YAWN ()
<V-LEAN-ON>>
<ROUTINE V-YELL-AT ()
<COND (<AND <FSET? ,PRSO ,PERSON>
<NOT <FSET? ,PRSO ,DEAD>>>
<TELL
"You yell at " D ,PRSO " for a while, which improves your disposition,
but not " HIS/HER ,PRSO "." CR>)>>
<ROUTINE V-YELL ()
<COND (<PRSO? ,INTQUOTE>
<TELL
"You yell at out, loud and strong. ">)>
<TELL
"Raising one's voice is very bad manners and very unsettling
to the harmony of those around you." CR>>
<ROUTINE V-LAUGH ()
<COND (<NOT ,PRSO> <TELL "Very funny." CR>)
(<AND <FSET? ,PRSO ,PERSON>
<NOT <FSET? ,PRSO ,DEAD>>>
<TELL CTHE ,PRSO " doesn't seem to get the joke." CR>)
(ELSE
<TELL "Your brand of humor is unusual." CR>)>>
;"subtitle object manipulation"
<CONSTANT FUMBLE-MAX 9>
<GLOBAL FUMBLE-NUMBER 9>
<ROUTINE ITAKE ("OPTIONAL" (VB T) (OBJ 0) "AUX" CNT)
<COND (<ZERO? .OBJ>
<SET OBJ ,PRSO>)>
<COND (<AND <B-NOT-STANDING?>
<FSET? ,PRSO ,TAKEBIT>
<NOT <PRSO? ,CLOTHES ,QUILT ,TRAY ,FOOD ,CHOPSTICKS
,CUP ,GRUEL ,GROUND ,SWORDS>>>
<COND (.VB
<TELL "You are ">
<COND (<FSET? ,WINNER ,SURFACEBIT> <TELL "lying">)
(ELSE <TELL "sitting">)>
<TELL
" down, and " THE ,PRSO IS/ARE ,PRSO " out of reach." CR>)>
<RFALSE>)
(<NOT <FSET? .OBJ ,TAKEBIT>>
<COND (.VB
<COND (<AND <FSET? .OBJ ,PERSON>
<NOT <FSET? .OBJ ,DEAD>>>
<TELL
CHE/SHE .OBJ " twist" S .OBJ " away from you." CR>)
(ELSE
<TELL-YUKS>)>)>
<RFALSE>)
(<IN? .OBJ ,WINNER>
<TELL ,YOU-HAVE THE .OBJ ,PERIOD>
<RFALSE>)
(<IN? ,WINNER .OBJ>
<TELL "You are ">
<COND (<FSET? .OBJ ,SURFACEBIT> <TELL "on">)
(ELSE <TELL "in">)>
<TELL " it." CR>)
(<AND <NOT <IN? <LOC .OBJ> ,WINNER>>
<G? <+ <WEIGHT .OBJ> <WEIGHT ,WINNER>> ,LOAD-ALLOWED>>
<COND (.VB
<COND (<ZERO? <CCOUNT ,WINNER>>
<TELL "It's too heavy to carry">)
(T
<TELL "Your load is too heavy">)>
<COND (<L? <GETP ,WINNER ,P?HEALTH> 4>
<TELL
", especially in light of your exhaustion.">)
(T
<TELL ".">)>
<CRLF>)>
<RFATAL>)
(<G? <SET CNT <CCOUNT ,WINNER>> ,FUMBLE-NUMBER>
<COND (.VB
<TELL
"You're holding too many things and can't quite get them all arranged
to take it as well." CR>)>
<RFATAL>)
(T
<MOVE .OBJ ,WINNER>
<FSET .OBJ ,TOUCHBIT>
<FCLEAR .OBJ ,WEARBIT>
<FCLEAR .OBJ ,NDESCBIT>
<RTRUE>)>>
<GLOBAL NOTIFY-FLAG <>>
<ROUTINE V-NOTIFY ()
<SETG NOTIFY-FLAG <NOT ,NOTIFY-FLAG>>
<COND (,NOTIFY-FLAG
<TELL "Notifying when points are scored." CR>)
(ELSE
<TELL "Keeping quiet when points are scored." CR>)>>
<ROUTINE SCORE-OBJECT ("OPT" (OBJ1 <>) (OBJ2 <>))
<SET OBJ1 <SCORE-OBJECT? .OBJ1>>
<COND (.OBJ2 <SET OBJ2 <SCORE-OBJECT? .OBJ2>>)>
<COND (<OR .OBJ1 .OBJ2>
<COND (,NOTIFY-FLAG
<TELL CR "[Your score just went up.]" CR>)>)>
<RTRUE>>
<ROUTINE SCORE-OBJECT? (OBJ)
<COND (<FSET? .OBJ ,SCOREBIT>
<SETG SCORE <+ ,SCORE 1>>
<FCLEAR .OBJ ,SCOREBIT>
<COND (<AND <SET OBJ <GET ,SCENE-LOCS ,SCENE>>
<SET OBJ <GETPT .OBJ ,P?SCORE>>>
<PUTB .OBJ 0 <+ 1 <GETB .OBJ 0>>>)
;(ELSE
<TELL
"[Problem with scoring in scene " N ,SCENE ", please report as bug!]" CR>)>
<RTRUE>)
(ELSE <RFALSE>)>>
<ROUTINE IDROP ()
<COND (<OR <FSET? ,PRSO ,BODY-PART>
<NOT <HELD? ,PRSO>>>
<TELL G"You aren't ""carrying ">
<THE-PRSO>
<RFALSE>)
(<AND <NOT <IN? ,PRSO ,WINNER>>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<THIS-IS-IT ,PRSO>
<TELL-OPEN-CLOSED <LOC ,PRSO>>
<RFALSE>)
(<FSET? ,PRSO ,WEARBIT>
<HAVE-TO-TAKE-OFF>
<RFALSE>)
(T
<FCLEAR ,PRSO ,WEARBIT>
<MOVE ,PRSO <LOC ,WINNER>>
<RTRUE>)>>
<ROUTINE HAVE-TO-TAKE-OFF ("OPT" (OBJ ,PRSO))
<TELL ,YOU-HAVE-TO G"take off " THE .OBJ " first." CR>>
<ROUTINE CCOUNT (OBJ "AUX" (CNT 0) X)
<MAP-CONTENTS (X .OBJ)
(END <RETURN .CNT>)
<COND (<NOT <FSET? .X ,WEARBIT>>
<SET CNT <+ .CNT 1>>)>>>
;"WEIGHT: Gets sum of SIZEs of supplied object, recursing to nth level."
<ROUTINE WEIGHT (OBJ "AUX" CONT (WT 0))
<COND (<NOT <FSET? .OBJ ,WEARBIT>>
<MAP-CONTENTS (CONT .OBJ)
<SET WT <+ .WT <WEIGHT .CONT>>>>
<+ .WT <GETP .OBJ ,P?SIZE>>)>>
;"subtitle movement"
;<ROUTINE LKP (ITM TBL "AUX" (CNT 0) (LEN <GET .TBL 0>))
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .LEN>
<RFALSE>)
(<EQUAL? <GET .TBL .CNT> .ITM>
<COND (<EQUAL? .CNT .LEN> <RFALSE>)
(T
<RETURN <GET .TBL <+ .CNT 1>>>)>)>>>
<GLOBAL OHERE <>>
<ROUTINE GOTO (RM "OPTIONAL" (V? T) "AUX" OLIT)
<SETG OHERE .RM>
<COND (,HERE <APPLY <GETP ,HERE ,P?ACTION> ,M-LEAVE>)>
<SETG OHERE ,HERE>
<SET OLIT ,LIT>
<COND (<NOT <EQUAL? ,OHERE .RM>>
<B-STAND>)>
<COND (<NOT <IN? <LOC ,WINNER> ,ROOMS>>
<MOVE <LOC ,WINNER> .RM>)
(ELSE
<MOVE ,WINNER .RM>)>
<SETG HERE .RM>
<SETG LIT <LIT? ,HERE>>
;<COND (<AND <NOT .OLIT>
<NOT ,LIT>
<PROB 80>>
<JIGS-UP ;"this string is a duplicate of one in FLASHLIGHT-F"
"This is a civilized country, but nonetheless one should never assume
the dark is safe. Someone just grabbed you from behind and strangled
you with a silken cord.">
<RTRUE>)>
<V-INTRODUCE>
<COND (<EQUAL? <APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER> ,M-FATAL>
<RTRUE>)
(<NOT <EQUAL? ,HERE .RM>>
<RTRUE>)
(.V?
<V-FIRST-LOOK>)>
;<COND (,LIT <SCORE-OBJECT .RM>)>
<RTRUE>>
\
;"subtitle death and stuff"
<GLOBAL STUPID-MOVE <>>
<ROUTINE I-STUPID-MOVE () <SETG STUPID-MOVE <>>>
<ROUTINE JIGS-UP? (N "OPT" (DESC <>))
<COND (<NOT <EQUAL? ,STUPID-MOVE .N>>
<QUEUE I-STUPID-MOVE 2>
<SETG STUPID-MOVE .N>
<COND (.DESC <TELL .DESC CR>)
(ELSE
<TELL
"At the last second, you stop and try to think of something to do that's
less likely to be fatal." CR>)>
<RFALSE>)
(ELSE <RTRUE>)>>
<ROUTINE JIGS-UP ("OPT" (DESC <>))
<SETG MOVES <+ ,MOVES 1>> ;"lie to update-status-line"
<SETG WINNER ,PLAYER>
<COND (.DESC <TELL .DESC>)>
<TELL "|
|
**** You have died ****|
|">
<COND (<SCENE? ,S-ERASMUS>
<TELL
"Are the Japans ahead? Now you will never know. All pilots fear death
by drowning more than any other death, and most die by drowning. A
terrible fate." CR>)
(ELSE
<TELL
"Perhaps in a future existence you will be reborn samurai. Perhaps,
as Father Sebastio would predict, you will burn in hell. Perhaps you
will ascend to heaven. Perhaps none of these things will happen. "I"Karma,
neh?" CR>)>
<CRLF>
<FINISH>>
;<ROUTINE ROB (FROM "OPT" (TO <>) (BIT -1)
"AUX" (F <FIRST? .FROM>) N (1ST? <>))
<REPEAT ()
<COND (.F
<SET N <NEXT? .F>>
<COND (<OR <AND <G=? .BIT 0>
<FSET? .F .BIT>>
<AND <FSET? .F ,TAKEBIT>
<FSET? .F ,TOUCHBIT>>>
<SET 1ST? .F>
<COND (.TO <MOVE .F .TO>)
(ELSE <REMOVE .F>)>)>
<SET F .N>)
(T
<RETURN>)>>
.1ST?>
<ROUTINE MOVE-ALL (FROM "OPT" (TO <>) "AUX" (F <FIRST? .FROM>) N (1ST? <>))
<REPEAT ()
<COND (.F
<SET N <NEXT? .F>>
<SET 1ST? .F>
<COND (.TO <MOVE .F .TO>)
(ELSE <REMOVE .F>)>
<FCLEAR .F ,WEARBIT>
<SET F .N>)
(T
<RETURN>)>>
.1ST?>
;"subtitle useful utility routines"
<ROUTINE THIS-IS-IT (OBJ)
<COND (<FSET? .OBJ ,DONT-IT> <RFALSE>)
(<NOT <EQUAL? .OBJ ,IT ,HIM ,HER ,WHAT ,ROOMS>>
<COND (<OR <FSET? .OBJ ,PERSON>
<EQUAL? .OBJ ,LG-ERASMUS>>
<COND (<OR <AND <EQUAL? .OBJ ,LG-RODRIGUES>
<IN? ,RODRIGUES ,IN-THE-SEA>>
<FSET? .OBJ ,DEAD>>
<COND (<NOT <EQUAL? ,P-IT-OBJECT .OBJ>>
<FCLEAR ,IT ,TOUCHBIT>)>
<SETG P-IT-OBJECT .OBJ>)>
<COND (<OR <FSET? .OBJ ,PLURAL>
<EQUAL? .OBJ ,GRAYS ,BROWNS>>
<COND (<NOT <EQUAL? ,P-THEM-OBJECT .OBJ>>
<FCLEAR ,THEM ,TOUCHBIT>)>
<SETG P-THEM-OBJECT .OBJ>)
(<FSET? .OBJ ,FEMALE>
<COND (<NOT <EQUAL? ,P-HER-OBJECT .OBJ>>
<FCLEAR ,HER ,TOUCHBIT>)>
<SETG P-HER-OBJECT .OBJ>)
(ELSE
<COND (<NOT <EQUAL? ,P-HIM-OBJECT .OBJ>>
<FCLEAR ,HIM ,TOUCHBIT>)>
<SETG P-HIM-OBJECT .OBJ>)>)
(<FSET? .OBJ ,PLURAL>
<COND (<NOT <EQUAL? ,P-THEM-OBJECT .OBJ>>
<FCLEAR ,THEM ,TOUCHBIT>)>
<SETG P-THEM-OBJECT .OBJ>)
(ELSE
<COND (<NOT <EQUAL? ,P-IT-OBJECT .OBJ>>
<FCLEAR ,IT ,TOUCHBIT>)>
<SETG P-IT-OBJECT .OBJ>)>)>
<RTRUE>>
<ROUTINE INTRINSIC? (OBJ)
<EQUAL? .OBJ ,ME ,HANDS ,HEAD ,EYES ,FEET>>
<ROUTINE ACCESSIBLE? (OBJ "AUX" (L <LOC .OBJ>)) ;"can player TOUCH object?"
;"revised 5/2/84 by SEM and SWG"
<COND (<FSET? .OBJ ,INVISIBLE>
<RFALSE>)
(<EQUAL? .OBJ ,PSEUDO-OBJECT>
<COND (<EQUAL? ,LAST-PSEUDO-LOC ,HERE>
<RTRUE>)
(T
<RFALSE>)>)
(<NOT .L>
<RFALSE>)
(<EQUAL? .L ,GLOBAL-OBJECTS ,WINNER ,HERE <LOC ,WINNER>>
<RTRUE>)
(<GLOBAL-IN? .OBJ ,HERE> ;"allows real objs in (global ...)"
<RTRUE>)
(<NOT <EQUAL? <META-LOC .OBJ> ,HERE <LOC ,WINNER>>>
<RFALSE>)
(<AND <FSET? .L ,OPENBIT>
<ACCESSIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE VISIBLE? (OBJ "AUX" (L <LOC .OBJ>)) ;"can player SEE object"
;"revised 5/2/84 by SEM and SWG"
<COND (<ACCESSIBLE? .OBJ>
<RTRUE>)
(<AND <SEE-INSIDE? .L>
<VISIBLE? .L>>
<RTRUE>)(T
<RFALSE>)>>
<ROUTINE HELD? (OBJ "OPTIONAL" (WHO <>))
;"is object carried, or in something carried, by player?"
<COND (<NOT .WHO> <SET WHO ,PLAYER>)>
<COND (<NOT .OBJ> <RFALSE>)
(<AND <VERB? GIVE>
<FSET? .OBJ ,CANT-HOLD>> ;"can't hold but can give"
<RTRUE>)
(<EQUAL? .OBJ .WHO ,ME> <RTRUE>)
(<FSET? .OBJ ,BODY-PART> <RTRUE>)
(<IN? .OBJ .WHO>
<RTRUE>)
(<IN? .OBJ ,ROOMS>
<RFALSE>)
(<IN? .OBJ ,GLOBAL-OBJECTS>
<RFALSE>)
(T
<HELD? <LOC .OBJ> .WHO>)>>
<ROUTINE SEE-INSIDE? (OBJ)
<AND .OBJ
<NOT <FSET? .OBJ ,INVISIBLE>>
<OR <FSET? .OBJ ,TRANSBIT>
<FSET? .OBJ ,OPENBIT>>>>
<ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" TEE)
<COND (<AND .OBJ2
<SET TEE <GETPT .OBJ2 ,P?GLOBAL>>>
<ZMEMQ .OBJ1 .TEE </ <PTSIZE .TEE> 2>>)>>
<ROUTINE DO-WALK (DIR)
<SETG P-WALK-DIR .DIR>
<PERFORM ,V?WALK .DIR>>
;<ROUTINE SOAK-STUFF (OBJ "OPTIONAL" (RECURSE? T)
"AUX" (F <FIRST? .OBJ>) (1ST? T))
<REPEAT ()
<COND (<NOT .F> <RETURN <NOT .1ST?>>)
(<SOAK-OBJ? .F>
<SET 1ST? <>>)
(<AND <NOT .RECURSE?>
<EQUAL? .F ,PLAYER>>
T)
(<AND <FSET? .F ,CONTBIT>
<FSET? .F ,OPENBIT>
<FIRST? .F>>
<COND (<SOAK-STUFF .F>
<SET 1ST? <>>)>)>
<SET F <NEXT? .F>>>>
;<ROUTINE SOAK-OBJ? (F)
<COND (<FSET? .F ,RMUNGBIT> <RFALSE>)>>
<ROUTINE HACK-HACK (STR)
<TELL .STR " " THE ,PRSO " has no effect." CR>>
<ROUTINE TELL-YUKS ()
<TELL <PICK-ONE ,YUKS> CR>>
<CONSTANT YUKS
<LTABLE 0
"Not likely!"
"That would never work!"
"You can't be serious.">>
<ROUTINE PRE-PRY ()
<COND (<AND ,PRSI
<NOT <INTRINSIC? ,PRSI>>
<NOT <HELD? ,PRSI>>
<NOT <IN? ,WINNER ,PRSI>>
<NOT <FSET? ,PRSI ,VEHBIT>>>
<NOT-HOLDING ,PRSI>)>>
<ROUTINE V-PRY ()
<NO-EFFECT>>
<ROUTINE V-BURY ()
<COND (<FSET? ,PRSO ,PERSON>
<COND (<FSET? ,PRSO ,DEAD>
<TELL "Cremation is more normal here." CR>)
(ELSE
<TELL
"Bury " HIM/HER ,PRSO " alive? How barbaric." CR>)>)
(ELSE
<TELL "You might not be able to find it again." CR>)>>
<ROUTINE V-YES ()
<COND (<TRY-QCONTEXT?>
<RTRUE>)
(<AND ,PRSO <NOT <PRSO? ,HEAD>>>
<TELL "You aren't making much sense." CR>)
(ELSE
<TELL "No question was asked that required an answer." CR>)>>
<ROUTINE V-NO ()
<V-YES>>
<ROUTINE V-BUY ()
<UNINTERESTED ,PRSI>>
<ROUTINE PRE-SSELL ()
<SWAP-VERB ,V?SELL>
<RTRUE>>
<ROUTINE V-SSELL () <RTRUE>>
<ROUTINE V-SELL ()
<UNINTERESTED ,PRSI>>
<ROUTINE PRE-TELL-ABOUT ()
<COND (<PRSO? ,ME>
<PERFORM ,V?TELL-ME-ABOUT ,PRSI>
<RTRUE>)>>
<ROUTINE V-TELL-ABOUT ()
<COND (<HELD? ,PRSI>
<SWAP-VERB ,V?SHOW>
<RTRUE>)
(<AND <FSET? ,PRSO ,JAPANESEBIT>
<NOT <PRSO? ,MARIKO>>>
<DIFFICULTY ,PRSO>)
(ELSE
<UNINTERESTED ,PRSO>)>>
<ROUTINE DIFFICULTY (WHO)
<TELL
"You have a great deal of difficulty making yourself understood. " CTHE .WHO
" doesn't seem to understand you very well." CR>>
<ROUTINE V-TELL-ME-ABOUT ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(<WINNER? ,PLAYER>
<PERFORM ,V?WHAT ,PRSO>
<RTRUE>)
(<AND <FSET? ,WINNER ,JAPANESEBIT>
<NOT <WINNER? ,MARIKO>>>
<DIFFICULTY ,WINNER>)
(ELSE
<TELL CTHE ,WINNER " doesn't seem to have anything to say
about that." CR>)>>
<ROUTINE V-TRADE ()
<COND (<AND ,PRSI <FSET? ,PRSI ,PERSON>>
<UNINTERESTED ,PRSI>)
(<AND <WINNER? ,PLAYER>
,PRSI
<NOT <FSET? ,PRSO ,PERSON>>>
<COND ;(<IN? ,HACKER ,HERE>
<SETG WINNER ,HACKER>
<NEW-VERB ,PRSA>
<SETG WINNER ,PLAYER>
<RTRUE>)
(ELSE
<TELL
"No one here is interested in trading." CR>)>)
(ELSE
<V-BARGAIN>)>>
<ROUTINE V-ERASE ()
<TELL-YUKS>>
<ROUTINE V-ADMIRE ()
<TELL "Your taste is unusual." CR>>
<ROUTINE V-BARGAIN ()
<TELL "A preoccupation with money and trading is inappropriate
in this society, very uncultured." CR>>
<ROUTINE V-REPAIR ()
<COND (<FSET? ,PRSO ,RMUNGBIT>
<TELL "You don't know how." CR>)
(<FSET? ,PRSO ,PERSON>
<TELL "You're a pilot, not a doctor." CR>)
(ELSE
<TELL CTHE ,PRSO " isn't broken." CR>)>>
<ROUTINE V-LOOK-UP ()
<COND (<PRSO? ,ROOMS>
<TELL "Don't get a sore neck." CR>)
(<AND <PRSO? INTQUOTE>
<ACCESSIBLE? ,DICTIONARY>>
<PERFORM ,PRSA ,PRSO ,DICTIONARY>
<RTRUE>)
(ELSE
<NEW-VERB ,V?WHAT>
<RTRUE>)>>
<ROUTINE V-PLUG-IN ()
<YOU-CANT-X-THAT "plug in">>
<ROUTINE V-UNPLUG ()
<YOU-CANT-X-THAT "unplug">>
;<ROUTINE V-EDIT ()
<YOU-CANT-X-THAT "edit">>
;<ROUTINE V-CLICK ()
<TELL ,NOTHING-HAPPENS>>
<ROUTINE V-WALK-UNDER ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?DOWN>)
(ELSE
<TELL "Only a snake could get under " A ,PRSO "!" CR>)>>
<ROUTINE V-SCARE ()
<TELL "I don't think you scared " THE ,PRSO " very much." CR>>
<ROUTINE V-WEDGE ()
<TELL ,YOU-CANT "wedge open " A ,PRSO " with " A ,PRSI ,PERIOD>>
<ROUTINE PRE-SWEDGE ()
<SWAP-VERB ,V?WEDGE>
<RTRUE>>
<ROUTINE V-SWEDGE ()
<RTRUE>>
<ROUTINE V-PUT-BETWEEN ()
<TELL ,YOU-CANT "put " A ,PRSO " between " A ,PRSI ,PERIOD>>
<ROUTINE V-TASTE ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL
"You have got to be kidding." CR>)
(ELSE
<TELL "It tastes exactly as you'd expect " A ,PRSO " to taste,
only worse." CR>)>>
<ROUTINE V-DIE ()
<PERFORM ,V?KILL ,ME>
<RTRUE>>
<ROUTINE V-COOK ()
<TELL
"Most people cook things in ovens." CR>>
<ROUTINE V-DRIVE-ON ()
<COND (<FSET? ,PRSI ,PERSON>
<TELL CTHE ,PRSI " moves out of the way." CR>)
(ELSE
<TELL ,GOOD-TRICK>)>>
<ROUTINE V-DRIVE-TO ()
<COND (<AND <IN? ,WINNER ,PRSO>
<PRSI? INTDIR>>
<DO-WALK ,P-DIRECTION>)
(ELSE
<TELL ,GOOD-TRICK>)>>
<ROUTINE V-STEP-ON ()
<COND (<FSET? ,PRSO ,VEHBIT>
<NEW-VERB ,V?BOARD>
<RTRUE>)
(ELSE
<TELL ,WASTE-OF-TIME>)>>
<ROUTINE V-STOP ()
<TELL ,NOTHING-HAPPENS>>
<ROUTINE V-RELEASE ()
<NEW-VERB ,V?DROP>
<RTRUE>>
<ROUTINE V-PUSH-DOWN ()
<PUSH-FOO "down">>
<ROUTINE V-PUSH-UP ()
<PUSH-FOO "up">>
<ROUTINE V-PUSH-OUT ()
<PUSH-FOO "out">>
<ROUTINE PUSH-FOO (DIR)
<COND (<PRSI? ,ROOMS>
<TELL
"You push " THE ,PRSO ", but nothing happens." CR>)
(ELSE
<TELL
,YOU-CANT "push " THE ,PRSO " " .DIR " " THE ,PRSI "." CR>)>>
<ROUTINE V-PRAY ()
<TELL
"You know that in any Catholic court in the world you would have been
damned long since for heresy. And in most, if not all, Protestant
courts. But you pray anyway." CR>>
<ROUTINE PRE-SPUT-ON ()
<SWAP-VERB ,V?PUT-ON>
<RTRUE>>
<ROUTINE V-SPUT-ON ()
<RTRUE>>
<ROUTINE V-LOVE ()
<TELL "Your feelings aren't reciprocated." CR>>
<ROUTINE V-THOU ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(ELSE
<TELL "How formal." CR>)>>
<ROUTINE V-WRITE ()
<YOU-CANT-X-THAT "write on">>
<ROUTINE V-RING ()
<YOU-CANT-X-THAT "ring">>
<ROUTINE V-BOW ("AUX" W)
<COND (<B-LYING?>
<TELL "You can't bow while lying down!" CR>)
(<PRSO? <> ,ROOMS ,HEAD>
<COND (<AND ,OPPONENT <IN? ,OPPONENT ,HERE>>
<SET W ,OPPONENT>)
(<AND ,QCONTEXT <IN? ,QCONTEXT ,HERE>>
<SET W ,QCONTEXT>)
(ELSE
<SET W <FIND-IN ,HERE ,JAPANESEBIT>>)>
<COND (.W
<PERFORM ,V?BOW .W>
<RTRUE>)
(ELSE
<TELL
"Good practice!" CR>)>)
(<PRSO? ME>
<TELL
"An action not unlike clapping with one hand." CR>)
(<FSET? ,PRSO ,PERSON>
<COND (<FSET? ,PRSO ,DEAD>
<TELL
"You show your respect for the dead " D ,PRSO "." CR>)
(<FSET? ,PRSO ,DUTCHBIT>
<TELL
"\"What are you, Pilot? Some kind of God-cursed courtier?\" grumbles "
THE ,PRSO "." CR>)
(ELSE
<TELL
CTHE ,PRSO " returns your bow, instinctively knowing exactly the correct
degree of deference to show." CR>)>)
(ELSE
<TELL
"You show " THE ,PRSO " all due respect." CR>)>>
<ROUTINE V-SORRY ()
<COND (<AND ,PRSO <FSET? ,PRSO ,PERSON>>
<NEW-WINNER-PRSO ,PRSA>
<RTRUE>)
(ELSE
<TELL
"I'd be sorry, too." CR>)>>
<ROUTINE V-PISS ()
<COND (<AND ,PRSO
<OR <FSET? ,PRSO ,PERSON>
<FSET? ,PRSO ,BODY-PART>>>
<TELL
"You decide not to do that to " THE ,PRSO ". It's very bad manners." CR>)
(<OR <FSET? ,PRSO ,FOODBIT>
<PRSO? ,FLAGON ,CUP>>
<TELL "What a disgusting idea." CR>)
(<SCENE? ,S-ERASMUS>
<TELL
"You feel much better, now." CR>)
(<FSET? ,HERE ,OUTSIDE>
<TELL
"As you have seen the Japanese do, you turn politely away from any possible
watchers and then do your business." CR>)
(ELSE
<TELL
"What a barbaric idea! You decide to hold on a little longer." CR>)>>
<ROUTINE V-LOAD ()
<COND (<AND <NOT ,PRSO>
<HELD? ,PISTOL>>
<PERFORM ,V?LOAD ,PISTOL>
<RTRUE>)
(ELSE
<TELL "You can't load that." CR>)>>
<ROUTINE V-STRAIGHTEN ()
<TELL "You can't straighten that!" CR>>
<ROUTINE V-LAUNCH ()
<TELL "You can't launch anything here." CR>>
<ROUTINE V-BLESS ()
<COND (<FSET? ,PRSO ,DEAD>
<TELL
"You can't be sure it does any good, but you pray that it's at least
the right thing to do." CR>)
(ELSE
<TELL "What an odd thing to do." CR>)>>
<ROUTINE V-MAKE ()
<COND (<PRSO? ,SIGN-OF-CROSS>
<COND (<NOT ,PRSI>
<TELL
"An unusual gesture for someone of your religious beliefs." CR>)
(<FSET? ,PRSI ,PERSON>
<PERFORM ,V?BLESS ,PRSI>
<RTRUE>)
(ELSE
<TELL
"It's generally considered blasphemous to make the sign of the cross
over " A ,PRSI "." CR>)>)
(ELSE
<TELL "You can't make " A ,PRSO "!" CR>)>>
<ROUTINE V-ACT ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL
"Your imitation is unconvincing." CR>)
(ELSE
<TELL
"You will never make it in " I "noh" " plays, that's certain." CR>)>>
<ROUTINE V-DANCE ()
<COND (,PRSO
<TELL CTHE ,PRSO " doesn't seem to want to dance." CR>)
(ELSE
<TELL
"You dance foolishly for a while, then stop, embarrassed." CR>)>>
<ROUTINE V-TEAR ()
<YOU-CANT-X-THAT "tear">>
<ROUTINE V-SHIP ()
<YOU-CANT-X-THAT "ship">>
<ROUTINE V-SORT ()
<TELL CTHE ,PRSO " seems pretty well sorted already." CR>>
<ROUTINE V-ROW ()
<COND (<EQUAL? ,HERE ,MAIN-DECK ,GALLEY>
<TELL
"You could as easily sail the "I"Erasmus"" by blowing on the sails." CR>)
(<NOT <FSET? <LOC ,WINNER> ,VEHBIT>>
<TELL
"You aren't in a boat!" CR>)
(<PRSI? INTDIR>
<COND (<IN? ,WINNER ,PRSO>
<DO-WALK ,P-DIRECTION>
<RTRUE>)
(ELSE
<TELL "You aren't in " THE ,PRSO "!" CR>)>)
(<PRSO? INTDIR>
<DO-WALK ,P-DIRECTION>
<RTRUE>)
(,PRSI
<COND (<IN? ,WINNER ,PRSO>
<PERFORM ,V?WALK-TO ,PRSI>
<RTRUE>)
(ELSE
<TELL "You aren't in " THE ,PRSO "!" CR>)>)
(<NOT ,PRSO>
<TELL
"Gently down the stream..." CR>)
(<FSET? ,PRSO ,VEHBIT>
<COND (<NOT <IN? ,WINNER ,PRSO>>
<TELL
"You aren't in " THE ,PRSO "!" CR>)
(ELSE
<TELL
,YOU-HAVE-TO G"specify a direction." CR>)>)
(,PRSO
<TELL "You can't row that!" CR>)>>
<ROUTINE V-TAKE-OVER ()
<TELL "There's nothing to take over here!" CR>>
<ROUTINE V-SHUT-UP ()
<COND (<PRSO? ROOMS>
<TELL "You stifle yourself." CR>)
(ELSE
<TELL CTHE ,PRSO " doesn't respond." CR>)>>
<ROUTINE V-USE ()
<TELL ,YOU-HAVE-TO G"be more specific about ""how you want
to use " THE ,PRSO "." CR>>
<ROUTINE V-STEER-BY ()
<TELL "You'll get nowhere that way!" CR>>
<ROUTINE FORMAL-SCENE? ()
<COND (<SCENE? S-TORANAGA S-MARIKO S-ESCAPE S-OCHIBA
S-DEPARTURE S-SEPPUKU S-AFTERMATH>
<RTRUE>)>>
<ROUTINE V-STRIP ("AUX" (F <FIRST? ,WINNER>) N (1ST? T) (LAST <>))
<COND (<FORMAL-SCENE?>
<TELL
"You would expose yourself to ridicule." CR>)
(ELSE
<REPEAT ()
<COND (.F
<SET N <NEXT? .F>>
<COND (<FSET? .F ,WEARBIT>
<COND (.LAST
<COND (.1ST?
<SET 1ST? <>>
<TELL G"You have removed">)
(ELSE
<TELL ",">)>
<TELL " " THE .LAST>)>
<SET LAST .F>
<FCLEAR .F ,WEARBIT>
;<MOVE .F ,HERE>)>
<SET F .N>)
(T
<COND (.LAST
<COND (.1ST?
<SET 1ST? <>>
<TELL G"You have removed">)
(ELSE
<TELL ", and">)>
<TELL " " THE .LAST "." CR>)
(ELSE
<TELL
"You aren't wearing anything." CR>)>
<RETURN>)>>)>>
<ROUTINE V-TRANSLATE ()
<COND (<HELD? ,DICTIONARY>
<PERFORM ,V?LOOK-UP ,PRSO ,DICTIONARY>
<RTRUE>)
(<LOC ,DICTIONARY>
<TELL "You should use the dictionary." CR>)
(ELSE
<TELL "It's still unintelligible." CR>)>>
<ROUTINE SETUP-ANSWER (STR)
<COND (<NOT <EQUAL? .STR ,ORPHAN-ANSWER>>
<SETG ORPHAN-ANSWER .STR>
<COND (.STR
<SETUP-ORPHAN ,ORPHAN-ANSWER>)>)>
<COND (.STR
<QUEUE I-SETUP-ANSWER -1 T>)
(ELSE <DEQUEUE I-SETUP-ANSWER>)>>
<GLOBAL ORPHAN-ANSWER <>>
<ROUTINE I-SETUP-ANSWER ()
<COND (,ORPHAN-ANSWER
<SETUP-ORPHAN ,ORPHAN-ANSWER>)
(ELSE
<DEQUEUE I-SETUP-ANSWER>)>
<RFALSE>>
<ROUTINE V-SMILE ()
<TELL "You smile">
<COND (,PRSO <TELL " at " THE ,PRSO>)>
<TELL ", showing your bad teeth and rotten gums." CR>>
<ROUTINE V-WINK ()
<TELL "You wink">
<COND (,PRSO <TELL " at " THE ,PRSO>)>
<TELL ", but get no reaction." CR>>
<ROUTINE V-CLEAR ()
<COND (<AND <FSET? ,PRSO ,FURNITURE>
<FSET? ,PRSO ,SURFACEBIT>>
<EMPTY-ALL ,PRSO <LOC ,WINNER>>)
(ELSE
<TELL
"I don't see how you propose to do that." CR>)>>
<ROUTINE V-TURN-TOWARD ()
<V-TURN-AWAY>>
<ROUTINE V-TURN-AWAY ()
<TELL ,YOU-HAVE-TO G"supply a direction, instead." CR>>
<ROUTINE V-REACH-FOR ()
<TELL G"You can't reach " THE ,PRSO " with " THE ,PRSI "." CR>>
<ROUTINE V-HUG ()
<COND (<AND <FSET? ,PRSO ,PERSON>
<NOT <FSET? ,PRSO ,DEAD>>>
<COND (<FSET? ,PRSO ,DUTCHBIT>
<TELL
"\"I'm no god-cursed sodomite!\" growls " THE ,PRSO "." CR>)
(ELSE
<TELL
"Such public displays of affection are considered barbaric in Japan." CR>)>)
(ELSE
<TELL
"Only a barbarian would try to hug " A ,PRSO "!" CR>)>>
<ROUTINE V-SOOTHE ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL
"Your efforts don't seem to have much effect." CR>)
(ELSE
<TELL
"You can't soothe " A ,PRSO "." CR>)>>
<ROUTINE V-HAI ()
<V-IYE>>
<ROUTINE V-IYE ()
<COND (<TRY-QCONTEXT?>
<RTRUE>)
(ELSE
<TELL "Your accent is atrocious." CR>)>>
<ROUTINE V-HOLD-ON ()
<COND (<PRSO? ROOMS>
<TELL "There's nothing to hold onto here!" CR>)
(ELSE
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)>>
<ROUTINE V-RINSE ()
<V-BATHE>>
<ROUTINE V-BATHE ()
<TELL "A fine idea, but there are no facilities here." CR>>
<ROUTINE V-REPLACE ()
<COND (<HELD? ,PRSO>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(ELSE
<TELL
CTHE ,PRSO " is irreplaceable." CR>)>>
<ROUTINE V-ESCAPE ()
<TELL
"A fine idea, but the details of your plan seem rather sketchy." CR>>
<ROUTINE V-PLEAD ()
<COND (,PRSO
<TELL CTHE ,PRSO " ignores your pleas." CR>)
(ELSE
<TELL "Your pleas seem to fall on deaf ears." CR>)>>
<ROUTINE V-COMMIT ()
<COND (<PRSO? SUICIDE>
<PERFORM ,V?KILL ,ME>
<RTRUE>)
(ELSE
<TELL
"It's you that should be committed." CR>)>>
<ROUTINE V-ACCUSE ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL "\"Never!\"" CR>)
(ELSE
<TELL "You are obviously going a bit paranoid." CR>)>>
<ROUTINE V-SPIT ()
<TELL "What an uncouth idea." CR>>
<ROUTINE V-TEKI ()
<COND (<FSET? ,TEKI ,RMUNGBIT>
<TELL "In Japanese, "I"teki"" means 'enemy.'" CR>)
(ELSE
<TELL "That's not a word you know." CR>)>>
<ROUTINE GET-INTQUOTE (N "AUX" (NP <GET-NP ,INTQUOTE>) LEN)
<SET LEN
<- </ <- <NP-LEXEND .NP> <NP-LEXBEG .NP>>
,LEXV-ELEMENT-SIZE-BYTES>
1>>
<SET N <* .N 2>>
<COND (<G? .N .LEN> <RFALSE>)
(ELSE
<ZGET <ZREST <NP-LEXBEG .NP> ,LEXV-ELEMENT-SIZE-BYTES>
.N>)>>
<ROUTINE PRE-SSPEAK ()
<SWAP-VERB ,V?SPEAK>
<RTRUE>>
<ROUTINE V-SSPEAK ()
<RTRUE>>
<ROUTINE V-SPEAK ()
<COND (<PRSO? ENGLISH>
<TELL
"English is your native tongue. You speak the English of London,
and have fond memories of the plays of Jonson and Shakespeare." CR>)
(<PRSO? DUTCH>
<TELL
"Your mother was Dutch, and your men are mostly Dutch, so you speak
it fluently. Holland is England's only ally against the treacherous
Spanish." CR>)
(<PRSO? PORTUGUESE>
<TELL
"Your Portuguese is excellent." CR>)
(<PRSO? SPANISH>
<TELL
"You can speak the language of the hated Spaniards like a native." CR>)
(<PRSO? LATIN>
<TELL
"Like all educated men, you speak Latin." CR>)
(<PRSO? JAPANESE>
<COND (<SCENE? ,S-ERASMUS ,S-ANJIRO>
<TELL "You don't know any Japanese." CR>)
(ELSE
<TELL
"Your accent is atrocious, and your vocabulary small, but you are
learning fast." CR>)>)
(ELSE
<TELL
"That's not a language you know." CR>)>>
<ROUTINE V-AIM ("AUX" W)
<COND (<NOT ,PRSI>
<COND (<FSET? ,PRSO ,PERSON>
<COND (<SET W <FIND-IN ,WINNER ,WEAPONBIT>>
<PERFORM ,PRSA .W ,PRSO>
<RTRUE>)
(ELSE
<TELL
"You sight carefully along your finger..." CR>)>)
(ELSE
<TELL "How strange." CR>)>)
(ELSE
<TELL "You aim " THE ,PRSO " at " THE ,PRSI "." CR>)>>
<ROUTINE V-EXPLODE ()
<COND (,PRSI
<TELL
"A " ,PRSI " doesn't make a very good explosive!" CR>)
(ELSE
<TELL ,YOU-HAVE-TO "use an explosive." CR>)>>
<GLOBAL HINTS-OFF:NUMBER -1>
<END-SEGMENT ;"0">
<BEGIN-SEGMENT HINTS>
<REPLACE-DEFINITION INIT-HINT-SCREEN
<ROUTINE INIT-HINT-SCREEN ()
;<TOUCH-SEG ,P-HINT-LOC>
<SCREEN ,S-FULL>
<CLEAR ,S-FULL>
<RESET-MARGIN>
<COND (<NOT <APPLE?>>
<DISPLAY-BORDER ,P-HINT-BORDER <>>)
(ELSE <DISPLAY ,P-HINT-BORDER <+ 1 <* 3 ,FONT-Y>> 1>)>
<SETUP-TEXT-AND-STATUS ,P-HINT-LOC>
<SCREEN ,S-TEXT>
<MARGIN 0 0>
,S-STATUS>>
<REPLACE-DEFINITION LEAVE-HINT-SCREEN
<ROUTINE LEAVE-HINT-SCREEN ()
<RFALSE>>>
<END-SEGMENT ;"0+HINTS">
<BEGIN-SEGMENT 0>
<ROUTINE V-HINT ()
<COND (<EQUAL? ,HINTS-OFF -1>
<SETG HINTS-OFF 0>
<TELL
"Warning: We strongly recommend that you not use hints unless you're definitely
stuck. Peeking at hints prematurely will invariably make you enjoy
the story less. If you want to avoid reading any hints for the rest of this
session, you may at any time during the story type HINTS OFF.|
|
Do you still want a hint">
<COND (<NOT <YES?>>
<RFATAL>)>)
(,HINTS-OFF
<PERFORM ,V?HINTS-OFF ,ROOMS>
<RFATAL>)>
<COND (<G? ,SCENE ,S-ESCAPE> ;"default chapter is current scene"
<SETG H-CHAPT-NUM <+ ,SCENE 1>>)
(ELSE <SETG H-CHAPT-NUM ,SCENE>)>
<TOUCH-SEG ,P-HINT-BORDER>
<DO-HINTS>
<REPAINT-DISPLAY>
<TELL "Back to the story..." CR>>
<ROUTINE V-HINTS-OFF ()
<COND (<NOT <PRSO? ,ROOMS>>
<TELL "[Sorry, I don't understand.]" CR>
<RTRUE>)
(<G? ,HINTS-OFF 0>
<TELL "[You've already deactivated">)
(T
<SETG HINTS-OFF T>
<TELL "[Okay, you will no longer have access to">)>
<TELL " help in this session.]" CR>>
<ROUTINE V-PICK-UP ()
<TELL
CTHE ,PRSI " doesn't seem to be much help in getting " THE ,PRSO "." CR>>
<ROUTINE V-COME-FROM ()
<COND (<TRY-QCONTEXT?>
<RTRUE>)
(ELSE
<TELL "So, you c">
<COND (<PAST-TENSE?>
<TELL !\a>)
(T
<TELL !\o>)>
<TELL "me from " D ,PRSO "." CR>)>>
<ROUTINE PAST-TENSE? ()
<BAND ,PAST-TENSE <WORD-FLAGS ,P-PRSA-WORD>>>
<ROUTINE PRE-COME-TO-FROM ()
<COND (<PRSO? ,GLOBAL-HERE ,JAPAN>
<PERFORM ,V?COME-FROM ,PRSI>
<RTRUE>)>>
<ROUTINE V-COME-TO-FROM ()
<TELL "That's very interesting." CR>>
<ROUTINE V-PARRY ()
<TELL "There doesn't seem to be anything to parry." CR>>
<ROUTINE V-TEACH ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(<FSET? ,PRSO ,PERSON>
<TELL "You do your best to teach " THE ,PRSO "." CR>)
(ELSE
<TELL "You can't teach " A ,PRSO "!" CR>)>>
<ROUTINE V-LEARN ()
<COND (<TRY-QCONTEXT?>
<RTRUE>)
(ELSE
<TELL "Perhaps you should ask someone to teach you." CR>)>>
<ROUTINE V-LOOK-OUT ()
<COND (<PRSO? ,ROOMS>
<COND (<FSET? ,HERE ,OUTSIDE>
<TELL
"You are outside already!" CR>)
(ELSE
<TELL
,YOU-HAVE-TO "go outside to look outside." CR>)>)
(ELSE
<PERFORM ,V?EXAMINE ,PRSO>
<RTRUE>)>>
"standing, sitting, kneeling, and lying down"
<ROUTINE B-STAND ()
<FCLEAR ,BLACKTHORNE ,SITTING>
<FCLEAR ,BLACKTHORNE ,TRANSBIT>
<FCLEAR ,BLACKTHORNE ,SURFACEBIT>>
<ROUTINE B-SITTING? ()
<AND <FSET? ,BLACKTHORNE ,SITTING>
<NOT <FSET? ,BLACKTHORNE ,TRANSBIT>>
<NOT <FSET? ,BLACKTHORNE ,SURFACEBIT>>>>
<ROUTINE B-SIT ()
<FSET ,BLACKTHORNE ,SITTING>
<FCLEAR ,BLACKTHORNE ,TRANSBIT>
<FCLEAR ,BLACKTHORNE ,SURFACEBIT>>
<ROUTINE B-KNEELING? ()
<AND <FSET? ,BLACKTHORNE ,SITTING>
<FSET? ,BLACKTHORNE ,TRANSBIT>>>
<ROUTINE B-KNEEL ()
<FSET ,BLACKTHORNE ,SITTING>
<FSET ,BLACKTHORNE ,TRANSBIT>
<FCLEAR ,BLACKTHORNE ,SURFACEBIT>>
<ROUTINE B-LYING? ()
<AND <FSET? ,BLACKTHORNE ,SITTING>
<FSET? ,BLACKTHORNE ,SURFACEBIT>>>
<ROUTINE B-LIE-DOWN ()
<FSET ,BLACKTHORNE ,SITTING>
<FCLEAR ,BLACKTHORNE ,TRANSBIT>
<FSET ,BLACKTHORNE ,SURFACEBIT>>
<ROUTINE V-STAND ("AUX" AV)
<COND (<PRSO? <> ,ROOMS>
<SET AV <LOC ,WINNER>>
<COND (<AND <FSET? .AV ,VEHBIT>
<NOT <EQUAL? .AV ,QUILT>>>
<TELL
"You shouldn't stand up inside " A .AV "." CR>)
(<B-NOT-STANDING?>
<B-STAND>
<TELL
"You stand up." CR>)
(T
<TELL ,YOU-ARE " standing." CR>)>)
(ELSE
<HACK-HACK "Holding up">)>>
<ROUTINE V-SIT ()
<COND (<NOT <PRSO? <> ,ROOMS>>
<TELL ,WASTE-OF-TIME>)
(<B-NOT-STANDING?>
<COND (<B-SITTING?>
<TELL G"You already are." CR>)
(ELSE
<B-SIT>
<TELL "You sit up." CR>)>)
(ELSE
<B-SIT>
<TELL "You sit down." CR>)>>
<ROUTINE V-KNEEL ()
<COND (<B-KNEELING?>
<TELL G"You already are." CR>)
(ELSE
<B-KNEEL>
<TELL G"You kneel abjectly." CR>)>>
<ROUTINE V-KNEEL-ON ()
<COND (<OR <PRSO? ,GROUND>
<FSET? ,PRSO ,FURNITURE>>
<PERFORM ,V?KNEEL>
<RTRUE>)
(ELSE
<TELL "You can't kneel on that!" CR>)>>
<ROUTINE V-LIE-DOWN ()
<COND (<PRSO? ,ROOMS ,GROUND>
<COND (<B-LYING?>
<TELL G"You already are." CR>)
(ELSE
<B-LIE-DOWN>
<TELL "You lie down." CR>)>)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)>>
<ROUTINE V-LIE ()
<TELL
"A duplicitous idea, but you'll have to be more specific." CR>>
<ROUTINE V-AVOID ()
<COND (<PRSO? OPPONENT>
<PERFORM ,V?DODGE>
<RTRUE>)
(ELSE <TELL "You're doing the best you can." CR>)>>
<ROUTINE V-FUCK ()
<COND (<AND <PRSO? YOU>
<TRY-QCONTEXT?>>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<COND (<FSET? ,PRSO ,FEMALE>
<TELL
"What an indelicate, even coarse, suggestion!" CR>)
(ELSE
<TELL
"Your predelictions are unusual, even given the local attitudes on
these matters." CR>)>)
(ELSE
<TELL "An unusual idea." CR>)>>
<ROUTINE V-KNOW ()
<TELL "I don't know." CR>>
<ROUTINE V-TRAIN ()
<COND (<TRY-QCONTEXT?>
<RTRUE>)
(ELSE
<TELL "It'll take a lot of training." CR>)>>
<ROUTINE V-BETRAY ()
<COND (<AND <PAST-TENSE?> <TRY-QCONTEXT?>>
<RTRUE>)
(ELSE
<TELL
"There's no one to betray " THE ,PRSO " to." CR>)>>
<ROUTINE V-LET-IN ()
<COND (<TRY-QCONTEXT?>
<RTRUE>)
(ELSE
<TELL
,YOU-HAVE-TO G"be more specific about ""how you are doing that." CR>)>>
<ROUTINE V-PUT-AWAY ()
<COND (<PRSI? ,ROOMS>
<TELL ,YOU-HAVE-TO G"be more specific about ""where you want
to put " THE ,PRSO "." CR>)
(ELSE
<PERFORM ,V?PUT ,PRSO ,PRSI>
<RTRUE>)>>
<ROUTINE V-DODGE ()
<COND (<AND <PRSO? ROOMS <> OPPONENT> ,OPPONENT>
<TELL
"You try to get out of the way of " THE ,OPPONENT "'s attack." CR>)
(<PRSO? ROOMS <>>
<TELL "There's nothing to duck." CR>)
(ELSE
<TELL "You don't need to dodge " THE ,PRSO "." CR>)>>
<ROUTINE V-WAKARIMASU ()
<TELL "That's nice." CR>>
;<ROUTINE V-WAKARIMASEN ()
<TELL "That's too bad." CR>>
<ROUTINE V-MIZU ()
<COND (<G=? ,SCENE ,S-PRISON>
<TELL "That's Japanese for 'water.'" CR>)
(ELSE
<TELL "What's that mean?" CR>)>>
<ROUTINE V-QUIET ()
<TELL "There doesn't seem to be anyone paying attention." CR>>
"changing color"
<SYNTAX COLOR = V-COLOR>
<GLOBAL COLOR-NOTE <>>
<GLOBAL FG-COLOR 1>
<GLOBAL BG-COLOR 1>
<ROUTINE V-COLOR ("AUX" (DEFAULT <>) FG BG)
<COND (<APPLE?>
<TELL
"[Sorry, the Apple II doesn't support color selection.]" CR>
<RTRUE>)
(<AND <NOT ,COLOR-NOTE>
<EQUAL? ,MACHINE ,MACINTOSH>
<MAC-II?>>
<SETG COLOR-NOTE T>
<TELL
"If your Mac II displays fewer than 256 colors, you probably won't get
the color you ask for. Do you still want to go ahead">
<COND (<NOT <YES?>> <RTRUE>)>)>
<CRLF>
<SET FG ,FG-COLOR>
<SET BG ,BG-COLOR>
<REPEAT ()
<DO-COLOR>
<TELL
"You will get " <GET ,COLOR-TABLE ,FG-COLOR> " text on a "
<GET ,COLOR-TABLE ,BG-COLOR> " background.|
Is that what you want">
<COND (<YES?>
<NORMAL-COLOR>
<SCREEN ,S-FULL>
<NORMAL-COLOR>
<SCREEN ,S-TEXT>
<V-$REFRESH>
<RTRUE>)
(ELSE
<SETG FG-COLOR .FG>
<SETG BG-COLOR .BG>
<TELL CR "Do you want to pick again">
<COND (<YES?> <CRLF>)
(ELSE <RTRUE>)>)>>>
<ROUTINE MAC-II? ()
<COND (<AND <EQUAL? ,MACHINE ,MACINTOSH>
<EQUAL? <WINGET ,S-FULL ,WWIDE> 640>>)>>
<ROUTINE DO-COLOR ()
<PUT ,COLOR-MENU 0
<COND (<EQUAL? ,MACHINE ,AMIGA> 11)
(<AND <EQUAL? ,MACHINE ,IBM>
<EQUAL? <LOWCORE HWRD> 320>>
9)
(ELSE 8 ;"cut out grays")>>
<COND (<OR ;<NOT <BTST <LOWCORE ZVERSION> ,M-COLOR>>
<NOT <BTST <LOWCORE FLAGS> ,F-COLOR>>
<AND <EQUAL? ,MACHINE ,MACINTOSH>
<NOT <MAC-II?>>>> ;"b&w Mac"
<COND (<EQUAL? ,BG-COLOR ,C-BLACK>
<SETG BG-COLOR ,C-WHITE>
<SETG FG-COLOR ,C-BLACK>)
(T
<SETG BG-COLOR ,C-BLACK>
<SETG FG-COLOR ,C-WHITE>)>)
(T
<SETG FG-COLOR <PICK-COLOR ,FG-COLOR "text" T>>
<SETG BG-COLOR <PICK-COLOR ,BG-COLOR "background">>)>
<RTRUE>>
<ROUTINE PICK-COLOR (WHICH STRING "OPTIONAL" (SETTING-FG <>) "AUX" CHAR)
<TELL
"The current " .STRING " color is " <GET ,COLOR-TABLE .WHICH> "." CR>
<COND (<EQUAL? .WHICH 1>
<COND (.SETTING-FG <SET WHICH ,C-BLACK>)
(ELSE <SET WHICH ,C-WHITE>)>)>
<REPEAT ()
<SET CHAR
<GET-FROM-MENU "Pick a color:"
,COLOR-MENU
,COLOR-MENU-F
<COLOR-OFFSET .WHICH>>>
<COND (<AND <NOT .SETTING-FG>
<EQUAL? .CHAR ,FG-COLOR>>
<TELL CR
"You can't make the background the same
color as the text! Pick another color." CR>)
(T
<RETURN>)>>
<CRLF>
<CRLF>
<RETURN .CHAR>>
<ROUTINE COLOR-OFFSET (TMP)
<COND (<EQUAL? .TMP ,C-WHITE> <SET TMP 1>)
(<G? .TMP ,C-WHITE> <SET TMP <- .TMP 1>>)>
.TMP>
<ROUTINE COLOR-MENU-F (TMP M)
<COND (<EQUAL? .TMP 1> ;"white is really 9, not 1"
<SET TMP ,C-WHITE>)
(<G? .TMP 8>
<SET TMP <+ .TMP 1>>)>
.TMP>
<CONSTANT COLOR-MENU
<LTABLE <TABLE (PURE STRING LENGTH) "White "> ;1
<TABLE (PURE STRING LENGTH) "Black ">
<TABLE (PURE STRING LENGTH) "Red ">
<TABLE (PURE STRING LENGTH) "Green ">
<TABLE (PURE STRING LENGTH) "Yellow ">
<TABLE (PURE STRING LENGTH) "Blue ">
<TABLE (PURE STRING LENGTH) "Magenta ">
<TABLE (PURE STRING LENGTH) "Cyan ">
<TABLE (PURE STRING LENGTH) "Gray "> ;9
<TABLE (PURE STRING LENGTH) "Medium Gray "> ;10
<TABLE (PURE STRING LENGTH) "Dark Gray "> ;11>>
<CONSTANT COLOR-TABLE
<TABLE ;0 "no change"
;1 "the default color"
;2 "black"
;3 "red"
;4 "green"
;5 "yellow"
;6 "blue"
;7 "magenta"
;8 "cyan"
;9 "white"
;10 "light gray"
;11 "gray"
;12 "dark gray">>
<ROUTINE V-SHRUG ()
<TELL "An eloquent gesture." CR>>
<ROUTINE V-SING ()
<COND (<PRSO? <> ,ME>
<TELL
"You sing an old sea chanty.">
<COND (<G? ,SCENE 1>
<TELL " It's a good thing no Japanese understand
English.">)>
<CRLF>)
(<FSET? ,PRSO ,PERSON>
<TELL
CTHE ,PRSO " doesn't seem impressed." CR>)
(ELSE
<TELL "You can't sing that." CR>)>>
<ROUTINE V-DISTRACT ()
<TELL "You are unsuccessful." CR>>
<ROUTINE V-JOIN ()
<COND (<FSET? ,PRSO ,PERSON>
<PERFORM ,V?WALK-TO ,PRSO>
<RTRUE>)
(ELSE
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)>>
<ROUTINE OUTSIDE-TUB? (TUB)
<AND <NOT <GAME-VERB?>>
<NOT <PASSIVE-VERB?>>
,PRSO
<NOT <HELD? ,PRSO>>
<NOT <PRSO? .TUB ,ME ,ROOMS>>
<NOT <IN? ,PRSO .TUB>>
<NOT <FSET? ,PRSO ,BODY-PART>>
<NOT <PRSO? LATIN SPANISH PORTUGUESE DUTCH>>>>
<ROUTINE V-DRAW ()
<COND (<AND <FSET? ,PRSO ,WEAPONBIT>
<HELD? ,PRSO>>
<PERFORM ,V?USE ,PRSO>
<RTRUE>)
(ELSE
<TELL
"The result reveals that it's a good thing you became a Pilot
instead of an artist." CR>)>>
<ROUTINE V-DIVE ()
<COND (,PRSO
<COND (<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,DOORBIT>
<PERFORM ,V?THROUGH ,PRSO>
<RTRUE>)
(<IN? ,PRSO ,ROOMS>
<PERFORM ,V?WALK-TO ,PRSO>
<RTRUE>)
(ELSE
<TELL "You can't dive into " THE ,PRSO "." CR>)>)
(ELSE
<TELL "Taking a dive, eh?" CR>)>>
<ROUTINE V-BABBLE ()
<TELL "You babble nonsense for a while." CR>>
<ROUTINE V-TRIP ()
<TELL "You are unsuccessful." CR>>
<ROUTINE V-NIHON-GO-GA ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(<PRSO? ,HANASE-MASEN>
<TELL "True enough, but you're getting better." CR>)
(ELSE
<TELL G"You are making little sense." CR>)>>
<ROUTINE V-GENKI-DESU ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(<PRSO? ,ROOMS>
<TELL "It's good to know you're feeling well." CR>)
(ELSE
<TELL G"You are making little sense." CR>)>>
<ROUTINE V-GOMEN-NASAI ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(<PRSO? ,ROOMS>
<TELL "No one seems to be expecting an apology." CR>)
(ELSE
<TELL G"You are making little sense." CR>)>>
<ROUTINE V-ISOGI ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(ELSE
<TELL "No one seems to be listening." CR>)>>
<ROUTINE V-KONBANWA ()
<PERFORM ,V?KONNICHI-WA ,ROOMS>
<RTRUE>>
<ROUTINE V-KONNICHI-WA ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(<PRSO? ,ROOMS>
<TELL "Good practice! Your accent is getting better." CR>)
(ELSE
<TELL G"You are making little sense." CR>)>>
<ROUTINE V-KINJIRU ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(ELSE
<TELL G"It's not clear what you are getting at." CR>)>>
<ROUTINE V-DRY ()
<TELL CTHE ,PRSO " doesn't seem to want to be dried." CR>>
<ROUTINE V-WARN ()
<COND (<NOT <FSET? ,PRSO ,PERSON>>
<YOU-CANT-X-PRSO "warn">)
(<FSET? ,PRSO ,DEAD>
<TELL
,YOU-CANT G"expect a response from a dead person!" CR>)
(,PRSI
<TELL
CTHE ,PRSO " doesn't seem worried about " THE ,PRSI "." CR>)
(,OPPONENT
<PERFORM ,V?WARN ,PRSO ,OPPONENT>
<RTRUE>)
(ELSE
<TELL
CTHE ,PRSO " doesn't seem worried." CR>)>>
<ROUTINE V-PULL-BEHIND ()
<YOU-CANT-X-PRSO "pull">>
<ROUTINE V-TOMO ()
<COND (<TRY-QCONTEXT?> <RTRUE>)
(ELSE
<TELL G"It's not clear what you are getting at." CR>)>>
<ROUTINE V-NEH ()
<TELL "\"Neh.\"" CR>>
<END-SEGMENT ;"0">