532 lines
9.4 KiB
Plaintext
532 lines
9.4 KiB
Plaintext
;"***************************************************************************"
|
|
; "game : Arthur"
|
|
; "file : BE.ZIL"
|
|
; "auth : $Author: DEB $"
|
|
; "date : $Date: 12 May 1989 0:47:36 $"
|
|
; "revs : $Revision: 1.10 $"
|
|
; "vers : 1.0"
|
|
;"---------------------------------------------------------------------------"
|
|
; "Be verbs"
|
|
; "Copyright (C) 1989 Infocom, Inc. All rights reserved."
|
|
;"***************************************************************************"
|
|
|
|
;"---------------------------------------------------------------------------"
|
|
; "BE verbs"
|
|
;"---------------------------------------------------------------------------"
|
|
|
|
<SYNTAX BE OBJECT (EVERYWHERE) = V-BE>
|
|
<SYNTAX BE OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-BE>
|
|
|
|
<SYNTAX BE? OBJECT (EVERYWHERE) = V-BE?>
|
|
<SYNTAX BE? OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-BE?>
|
|
<SYNTAX WHO OBJECT (EVERYWHERE) = V-WHO>
|
|
<SYNTAX WHO OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHO>
|
|
<SYNTAX WHAT OBJECT (EVERYWHERE) = V-WHAT>
|
|
<SYNTAX WHAT OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHAT>
|
|
<SYNTAX WHERE OBJECT (EVERYWHERE) = V-WHERE>
|
|
<SYNTAX WHERE OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHERE>
|
|
;<SYNTAX WHEN OBJECT (EVERYWHERE) = V-WHEN>
|
|
;<SYNTAX WHEN OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHEN>
|
|
;<SYNTAX WHY OBJECT (EVERYWHERE) = V-WHY>
|
|
;<SYNTAX WHY OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-WHY>
|
|
;<SYNTAX HOW OBJECT (EVERYWHERE) = V-HOW>
|
|
;<SYNTAX HOW OBJECT (EVERYWHERE) OBJECT (EVERYWHERE) = V-HOW>
|
|
|
|
;<SYNTAX CAN OBJECT (EVERYWHERE) = V-CAN?>
|
|
;<SYNTAX MAY OBJECT (EVERYWHERE) = V-MAY?>
|
|
;<SYNTAX DO OBJECT (EVERYWHERE) = V-DO?>
|
|
;<SYNTAX COULD OBJECT (EVERYWHERE) = V-COULD?>
|
|
;<SYNTAX WOULD OBJECT (EVERYWHERE) = V-WOULD?>
|
|
;<SYNTAX SHOULD OBJECT (EVERYWHERE) = V-SHOULD?>
|
|
;<SYNTAX MIGHT OBJECT (EVERYWHERE) = V-MIGHT?>
|
|
;<SYNTAX WILL OBJECT (EVERYWHERE) = V-WILL?>
|
|
;<SYNTAX MUST OBJECT (EVERYWHERE) = V-MUST?>
|
|
|
|
;"---------------------------------------------------------------------------"
|
|
; "BE verb routines"
|
|
;"---------------------------------------------------------------------------"
|
|
|
|
<CONSTANT QACTIONS
|
|
<TABLE (PURE LENGTH)
|
|
V-BE V-BE? 0
|
|
>
|
|
>
|
|
|
|
<ROUTINE V-BE ("AUX" TMP NOT? ADJ? LOC? OBJ PREP)
|
|
<SET NOT? <ANDB ,PARSE-NOT <PARSE-FLAGS ,PARSE-RESULT>>>
|
|
<SET ADJ? <PARSE-ADJ ,PARSE-RESULT>>
|
|
<SET LOC? <PARSE-LOC ,PARSE-RESULT>>
|
|
<COND
|
|
(<VERB? BE? WHO WHAT WHERE ;WHY ;WHEN ;HOW>
|
|
<COND
|
|
(<MC-PRSI? ,INTADJ>
|
|
<TELL The+verb ,PRSO "are">
|
|
<COND
|
|
(<NOT <IS-PRSO-ADJ? .ADJ?>>
|
|
<TELL "n't">
|
|
)
|
|
>
|
|
<TELL " ">
|
|
<PRINTB .ADJ?>
|
|
<TELL "." CR>
|
|
)
|
|
(<MC-PRSI? ,INTPP>
|
|
<COND
|
|
(<AND <SET PREP <P-PP-PREP>>
|
|
<SET OBJ <P-PP-OBJ>>
|
|
>
|
|
<COND
|
|
(<VERB? BE?>
|
|
<TELL The+verb ,PRSO "are">
|
|
<COND
|
|
(<NOT <RIGHT-PREP? .PREP ,PRSO .OBJ>>
|
|
<TELL "n't">
|
|
)
|
|
>
|
|
<TELL " ">
|
|
<PRINTB .PREP>
|
|
<TELL the .OBJ "." CR>
|
|
)
|
|
(T
|
|
<TELL "You want to know ">
|
|
<TELL-Q-WORD>
|
|
<PRSO-IS .NOT?>
|
|
<TELL " ">
|
|
<PRINTB .PREP>
|
|
<TELL the .OBJ "." CR>
|
|
)
|
|
>
|
|
)
|
|
(T
|
|
<TELL "You want to know ">
|
|
<TELL-Q-WORD>
|
|
<PRSO-IS .NOT?>
|
|
<TELL " ">
|
|
<PRINTB <PP-PREP .LOC?>>
|
|
<TELL " ">
|
|
<NP-PRINT <PP-NOUN .LOC?>>
|
|
<TELL "." CR>
|
|
)
|
|
>
|
|
)
|
|
(<AND <NOT ,PRSI>
|
|
<VERB? WHERE>
|
|
>
|
|
<SET LOC? <LOC ,PRSO>>
|
|
<COND
|
|
(<IN? ,PRSO ,HERE>
|
|
<PRSO-IS <> T>
|
|
<TELL " here." CR>
|
|
)
|
|
(<EQUAL? .LOC? ,GLOBAL-OBJECTS>
|
|
<TELL "No doubt" the ,PRSO verb ,PRSO "are" " around here somewhere." CR>
|
|
)
|
|
(<AND <EQUAL? .LOC? ,LOCAL-GLOBALS>
|
|
<RT-GLOBAL-IN? ,PRSO ,HERE>
|
|
>
|
|
<TELL The+verb ,PRSO "are" " nearby." CR>
|
|
)
|
|
(<FSET? .LOC? ,FL-PERSON>
|
|
<TELL The+verb .LOC? "have" the ,PRSO "." CR>
|
|
)
|
|
(<EQUAL? <META-LOC ,PRSO> ,HERE>
|
|
<TELL The+verb ,PRSO "are" in .LOC? the .LOC? "." CR>
|
|
)
|
|
(<IN? .LOC? ,ROOMS>
|
|
<TELL The ,PRSO " is probably ">
|
|
<COND
|
|
(<FSET? ,PRSO ,TOUCHBIT>
|
|
<TELL "still in" the .LOC? "." CR>
|
|
)
|
|
(T
|
|
<TELL "lying around somewhere." CR>
|
|
)
|
|
>
|
|
)
|
|
(T
|
|
<SETG GL-QUESTION 1>
|
|
<TELL "That's an excellent question. Just where" verb ,PRSO "are" the ,PRSO "?" CR>
|
|
)
|
|
>
|
|
)
|
|
(T
|
|
<SETG GL-QUESTION 1>
|
|
<TELL "You want to know ">
|
|
<TELL-Q-WORD>
|
|
<PRSO-IS .NOT?>
|
|
<COND
|
|
(,PRSI
|
|
<TELL a ,PRSI>
|
|
)
|
|
>
|
|
<TELL "?" CR>
|
|
)
|
|
>
|
|
)
|
|
(T
|
|
<COND
|
|
(<MC-PRSI? ,INTADJ>
|
|
<COND
|
|
(<IS-PRSO-ADJ? .ADJ?>
|
|
<COND
|
|
(.NOT?
|
|
<TELL "Wrong,">
|
|
)
|
|
(T
|
|
<TELL "Right,">
|
|
)
|
|
>
|
|
<PRSO-IS <>>
|
|
)
|
|
(T
|
|
<COND
|
|
(.NOT?
|
|
<TELL "Right,">
|
|
)
|
|
(T
|
|
<TELL "Wrong,">
|
|
)
|
|
>
|
|
<PRSO-IS T>
|
|
)
|
|
>
|
|
<TELL " ">
|
|
<PRINTB .ADJ?>
|
|
<TELL "." CR>
|
|
)
|
|
(<MC-PRSI? ,INTPP>
|
|
<TELL "So, you say">
|
|
<PRSO-IS .NOT?>
|
|
<COND
|
|
(<AND <SET PREP <P-PP-PREP>>
|
|
<SET OBJ <P-PP-OBJ>>
|
|
>
|
|
<PRINTB .PREP>
|
|
<TELL the .OBJ>
|
|
)
|
|
(T
|
|
<PRINTB <PP-PREP .LOC?>>
|
|
<TELL the <NP-PRINT <PP-NOUN .LOC?>>>
|
|
)
|
|
>
|
|
<TELL "." CR>
|
|
)
|
|
(T
|
|
<SETG GL-QUESTION 1>
|
|
<TELL "So you think">
|
|
<PRSO-IS .NOT?>
|
|
<COND
|
|
(,PRSI
|
|
<TELL a ,PRSI>
|
|
)
|
|
>
|
|
<TELL "?" CR>
|
|
)
|
|
>
|
|
)
|
|
>
|
|
>
|
|
|
|
;<ROUTINE P-NEGATIVE? ()
|
|
<ANDB ,PARSE-NOT <PARSE-FLAGS ,PARSE-RESULT>>
|
|
>
|
|
|
|
<ROUTINE TELL-Q-WORD ()
|
|
<COND
|
|
(<VERB? BE?>
|
|
<TELL "if">
|
|
)
|
|
; (<VERB? WHY>
|
|
<TELL "why">
|
|
)
|
|
(<VERB? WHO>
|
|
<TELL "who">
|
|
)
|
|
(<VERB? WHAT>
|
|
<TELL "what">
|
|
)
|
|
(<VERB? WHERE>
|
|
<TELL "where">
|
|
)
|
|
; (<VERB? WHEN>
|
|
<TELL "when">
|
|
)
|
|
; (<VERB? HOW>
|
|
<TELL "how">
|
|
)
|
|
(T
|
|
<PRINTB ,P-PRSA-WORD>
|
|
)
|
|
>
|
|
>
|
|
|
|
<ROUTINE RIGHT-PREP? (PREP OBJ CONT)
|
|
<COND
|
|
(<NOT <RT-META-IN? .OBJ .CONT>>
|
|
<RFALSE>
|
|
)
|
|
(<EQUAL? .PREP ,W?IN ,W?INSIDE>
|
|
<COND
|
|
(<SEE-INSIDE? .CONT>
|
|
<RTRUE>
|
|
)
|
|
(T
|
|
<RFALSE>
|
|
)
|
|
>
|
|
)
|
|
(<AND <EQUAL? .PREP ,W?ON>
|
|
<FSET? .CONT ,FL-SURFACE>
|
|
>
|
|
<RTRUE>
|
|
)
|
|
>
|
|
>
|
|
|
|
<CONSTANT ADJ-TABLE
|
|
<TABLE (PURE LENGTH)
|
|
<VOC "OUT" ;"OUTSIDE" ADJ> ; "OUTSIDE is a synonym of OUT"
|
|
IS-OUTSIDE?
|
|
; <VOC "INSIDE" ADJ>
|
|
; IS-INSIDE?
|
|
<VOC "OPEN" ADJ>
|
|
IS-OPEN?
|
|
<VOC "CLOSED" ADJ>
|
|
IS-CLOSED?
|
|
<VOC "LOCKED" ADJ>
|
|
IS-LOCKED?
|
|
<VOC "UNLOCKED" ADJ>
|
|
IS-UNLOCKED?
|
|
<VOC "DEAD" ADJ>
|
|
IS-DEAD?
|
|
<VOC "ALIVE" ADJ>
|
|
IS-ALIVE?
|
|
<VOC "QUIET" ADJ>
|
|
IS-QUIET?
|
|
<VOC "HERE" ADJ>
|
|
IS-HERE?
|
|
>
|
|
>
|
|
|
|
<ROUTINE IS-QUIET? (OBJ)
|
|
<RTRUE>
|
|
>
|
|
|
|
<ROUTINE IS-OUTSIDE? (OBJ)
|
|
<NOT <FSET? ,HERE ,FL-INDOORS>>
|
|
>
|
|
|
|
;<ROUTINE IS-INSIDE? (OBJ)
|
|
<FSET? ,HERE ,FL-INDOORS>
|
|
>
|
|
|
|
<ROUTINE IS-OPEN? (OBJ)
|
|
<AND
|
|
<FSET? .OBJ ,FL-OPENABLE>
|
|
<FSET? .OBJ ,FL-OPEN>
|
|
>
|
|
>
|
|
|
|
<ROUTINE IS-CLOSED? (OBJ)
|
|
<AND
|
|
<FSET? .OBJ ,FL-OPENABLE>
|
|
<NOT <FSET? .OBJ ,FL-OPEN>>
|
|
>
|
|
>
|
|
|
|
<ROUTINE IS-LOCKED? (OBJ)
|
|
<AND
|
|
<FSET? .OBJ ,FL-OPENABLE>
|
|
<FSET? .OBJ ,FL-LOCKED>
|
|
>
|
|
>
|
|
|
|
<ROUTINE IS-UNLOCKED? (OBJ)
|
|
<AND
|
|
<FSET? .OBJ ,FL-OPENABLE>
|
|
<NOT <FSET? .OBJ ,FL-LOCKED>>
|
|
>
|
|
>
|
|
|
|
<ROUTINE IS-DEAD? (OBJ)
|
|
<NOT <FSET? .OBJ ,FL-ALIVE>>
|
|
>
|
|
|
|
<ROUTINE IS-ALIVE? (OBJ)
|
|
<FSET? .OBJ ,FL-ALIVE>
|
|
>
|
|
|
|
<ROUTINE IS-HERE? (OBJ "AUX" L)
|
|
<SET L <LOC .OBJ>>
|
|
<REPEAT ()
|
|
<COND
|
|
(<OR <ZERO? .L>
|
|
<EQUAL? .L ,GLOBAL-OBJECTS ,LOCAL-GLOBALS ,ROOMS>
|
|
>
|
|
<RFALSE>
|
|
)
|
|
(<EQUAL? .L ,HERE>
|
|
<RTRUE>
|
|
)
|
|
(T
|
|
<SET L <LOC .L>>
|
|
)
|
|
>
|
|
>
|
|
>
|
|
|
|
<ROUTINE PRSO-IS (NOT? "OPT" (CAP? <>))
|
|
<COND
|
|
(.CAP?
|
|
<TELL The ,PRSO>
|
|
)
|
|
(T
|
|
<TELL the ,PRSO>
|
|
)
|
|
>
|
|
<TELL verb ,PRSO "are">
|
|
<COND
|
|
(.NOT?
|
|
<TELL "n't">
|
|
)
|
|
>
|
|
>
|
|
|
|
<ROUTINE IS-PRSO-ADJ? (ADJ "AUX" TMP)
|
|
<COND
|
|
(<AND <SET TMP <GETPT ,PRSO ,P?ADJECTIVE>>
|
|
<INTBL? .ADJ .TMP </ <PTSIZE .TMP> 2>>
|
|
>
|
|
<RTRUE>
|
|
)
|
|
(<AND <SET TMP <INTBL? .ADJ ,ADJ-TABLE <GET ,ADJ-TABLE 0>>>
|
|
<APPLY <GET .TMP 1> ,PRSO>
|
|
>
|
|
<RTRUE>
|
|
)
|
|
>
|
|
>
|
|
|
|
;<ROUTINE PP? (P N "AUX" (TMP <PARSE-LOC ,PARSE-RESULT>))
|
|
<COND
|
|
(<NOT .TMP>
|
|
<RFALSE>
|
|
)
|
|
(<NOT <AND
|
|
.P
|
|
<EQUAL? .P <P-PP-PREP>>
|
|
>
|
|
>
|
|
<RFALSE>
|
|
)
|
|
(<NOT <AND
|
|
.N
|
|
<EQUAL? .N <P-PP-OBJ>>
|
|
>
|
|
>
|
|
<RFALSE>
|
|
)
|
|
(T
|
|
<RTRUE>
|
|
)
|
|
>
|
|
>
|
|
|
|
;<ROUTINE YES-BUT? (STR1 STR2)
|
|
<COND
|
|
(<NOT <PARSE-QW ,PARSE-RESULT>>
|
|
<TELL The ,PRSO " " .STR1 ", but " .STR2 he ,PRSO "?" CR>
|
|
)
|
|
>
|
|
>
|
|
|
|
;<ROUTINE V-CAN? ()
|
|
<YES-BUT? "can" "may">
|
|
>
|
|
|
|
;<ROUTINE V-MAY? ()
|
|
<YES-BUT? "may" "can">
|
|
>
|
|
|
|
<ROUTINE V-STATEMENT ()
|
|
<V-DO?>
|
|
>
|
|
|
|
<ROUTINE V-DO? ()
|
|
<COND
|
|
(<NOT <PARSE-QW ,PARSE-RESULT>>
|
|
<TELL The+verb ,PRSO "do" ", but why?" CR>
|
|
)
|
|
>
|
|
>
|
|
|
|
;<ROUTINE V-COULD? ()
|
|
<YES-BUT? "could" "would">
|
|
>
|
|
|
|
;<ROUTINE V-WOULD? ()
|
|
<YES-BUT? "would" "could">
|
|
>
|
|
|
|
;<ROUTINE V-SHOULD? ()
|
|
<YES-BUT? "should" "will">
|
|
>
|
|
|
|
;<ROUTINE V-MIGHT? ()
|
|
<YES-BUT? "might" "will">
|
|
>
|
|
|
|
;<ROUTINE V-WILL? ()
|
|
<YES-BUT? "will" "should">
|
|
>
|
|
|
|
;<ROUTINE V-MUST? ()
|
|
<YES-BUT? "must" "can">
|
|
>
|
|
|
|
<ROUTINE V-BE? ()
|
|
<V-BE>
|
|
>
|
|
|
|
<ROUTINE V-WHO ("AUX" ASK)
|
|
; <V-BE>
|
|
<COND
|
|
(<EQUAL? ,WINNER ,CH-PLAYER>
|
|
<SET ASK <FIND-A-WINNER>>
|
|
)
|
|
(T
|
|
<SET ASK ,WINNER>
|
|
)
|
|
>
|
|
<SETG WINNER ,CH-PLAYER>
|
|
<SETG PRSI-NP ,PRSO-NP>
|
|
<SETG PRSO-NP <>>
|
|
<PERFORM ,V?ASK-ABOUT .ASK ,PRSO>
|
|
>
|
|
|
|
<ROUTINE V-WHAT ()
|
|
; <V-BE>
|
|
<V-WHO>
|
|
>
|
|
|
|
;<ROUTINE V-WHEN ()
|
|
<V-BE>
|
|
>
|
|
|
|
<ROUTINE V-WHERE ()
|
|
<V-BE>
|
|
>
|
|
|
|
;<ROUTINE V-WHY ()
|
|
<V-BE>
|
|
>
|
|
|
|
;<ROUTINE V-HOW ()
|
|
<V-BE>
|
|
>
|
|
|
|
;"***************************************************************************"
|
|
; "end of file"
|
|
;"***************************************************************************"
|
|
|