cutthroats/main.zil
historicalsource 6af9d8816e Final Revision
2019-04-13 20:21:35 -04:00

582 lines
16 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"MAIN for
TOA #2
Copyright (c) 1984 Infocom, Inc. All Rights Reserved.
"
<GLOBAL PLAYER <>>
<GLOBAL P-WON <>>
<CONSTANT M-FATAL 2>
<CONSTANT M-HANDLED 1>
<CONSTANT M-NOT-HANDLED <>>
<CONSTANT M-OBJECT <>>
<CONSTANT M-BEG 1>
<CONSTANT M-END 6>
<CONSTANT M-ENTER 2>
<CONSTANT M-LOOK 3>
<CONSTANT M-FLASH 4>
<CONSTANT M-OBJDESC 5>
<CONSTANT M-CONT 7>
<CONSTANT M-NAME 8>
<ROUTINE GO ()
<PUTB ,P-LEXV 0 59>
;"put interrupts on clock chain"
<ENABLE <QUEUE I-UNWOUND 20>>
<ENABLE <QUEUE I-BUSINESS-HOURS 60>>
<ENABLE <QUEUE I-FERRY-APPROACHING 117>>
<ENABLE <QUEUE I-FERRY 120>>
<ENABLE <QUEUE I-HUNGER 15>>
<ENABLE <QUEUE I-THIRST 25>>
<ENABLE <QUEUE I-TIRED 929>>
<ENABLE <QUEUE I-LIVER 10>>
<QUEUE I-DRILL 5>
<QUEUE I-MM-COMPRESSOR 80>
<ENABLE <QUEUE I-PLOT-NEVER-STARTS 60>>
;"set up and go"
%<COND (<NOT <GASSIGNED? PREDGEN>>
'(;<SETG XTELLCHAN <OPEN "READB" ,XTELLFILE>>
<SETG LIT T>))
('<SETG LIT T>)>
<SETG SCORE 8>
<SETG WINNER ,ADVENTURER>
<SETG PLAYER ,WINNER>
<SETG SAMPLE-TREASURE ,GLOBAL-OBJECTS>
<PUT-IN-TABLE ,ENVELOPE ,MCGINTY-HQ ,GLOBAL-SURFACE>
<SETG HERE ,BEDROOM>
;<SETG P-IT-LOC ,HERE>
<SETG P-IT-OBJECT <>>
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
<START-MOVEMENT>
<TELL-START-STR>
<CRLF>
<V-VERSION>
<CRLF>)>
<MOVE ,WINNER ,BED>
<V-LOOK>
;<USL>
<MAIN-LOOP>
<AGAIN>>
<ROUTINE MAIN-VERB-PRINT ("AUX" TMP)
<SET TMP <GET ,P-ITBL ,P-VERBN>>
<COND (,P-OFLAG
<PRINTB <GET .TMP 0>>)
(T
<WORD-PRINT <GETB .TMP 2>
<GETB .TMP 3>>)>>
<ROUTINE MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL V PTBL OBJ1 TMP PLACE)
#DECL ((CNT OCNT ICNT NUM) FIX (OBJ) <OR FALSE OBJECT>
(OBJ1) OBJECT (TBL) TABLE (PTBL) <OR FALSE ATOM>)
<REPEAT ()
<SET CNT 0>
<SET OBJ <>>
<SET PTBL T>
<SETG WAITED? <>>
<SETG P-WALK-DIR <>>
;<SETG GROGGIED <>>
<COND (<NOT <==? ,HERE ,QCONTEXT-ROOM>>
<SETG QCONTEXT <>>)>
<COND (<SETG P-WON <PARSER>>
<SETG LAST-PLAYER-LOC <LOC ,PLAYER>>
<SET ICNT <GET ,P-PRSI ,P-MATCHLEN>>
<SET OCNT <GET ,P-PRSO ,P-MATCHLEN>>
<COND (<AND ,P-IT-OBJECT <ACCESSIBLE? ,P-IT-OBJECT>>
<SET TMP <>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .ICNT>
<RETURN>)
(T
<COND (<EQUAL? <GET ,P-PRSI .CNT> ,IT>
<PUT ,P-PRSI .CNT ,P-IT-OBJECT>
<SET TMP T>
<RETURN>)>)>>
<COND (<NOT .TMP>
<SET CNT 0>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .OCNT>
<RETURN>)
(T
<COND (<EQUAL? <GET ,P-PRSO .CNT> ,IT>
<PUT ,P-PRSO .CNT ,P-IT-OBJECT>
<RETURN>)>)>>)>
<SET CNT 0>)>
<SET NUM
<COND (<0? .OCNT> .OCNT)
(<G? .OCNT 1>
<SET TBL ,P-PRSO>
<COND (<0? .ICNT> <SET OBJ <>>)
(T <SET OBJ <GET ,P-PRSI 1>>)>
.OCNT)
(<G? .ICNT 1>
<SET PTBL <>>
<SET TBL ,P-PRSI>
<SET OBJ <GET ,P-PRSO 1>>
.ICNT)
(T 1)>>
<COND (<AND <NOT .OBJ> <1? .ICNT>> <SET OBJ <GET ,P-PRSI 1>>)>
<COND (<AND <==? ,PRSA ,V?WALK> ,P-WALK-DIR>
<SET V <PERFORM ,PRSA ,PRSO>>)
(<0? .NUM>
<COND (<0? <BAND <GETB ,P-SYNTAX ,P-SBITS> ,P-SONUMS>>
<SET V <PERFORM ,PRSA>>
<SETG PRSO <>>)
(<NOT ,LIT>
<TELL-TOO-DARK>)
(T
;"** M" <COND (.OBJ
<COND (<==? .OBJ ,NOT-HERE-OBJECT>
<GLOBAL-NOT-HERE-PRINT .OBJ>)
(<FSET?
<SET PLACE <LOC ,WINNER>>
,VEHBIT>
<COND (<NOT <EQUAL? .PLACE
;<LOC ,WINNER>
<LOC .OBJ>>>
<TELL "You should get ">
<COND (<FSET? .PLACE ,SURFACEBIT>
<TELL "off">)
(T <TELL "out">)>
<TELL " of ">
<THE? .PLACE>
<TELL D .PLACE " first." CR>
<SET V <>>)>)
(<VERB? GIVE>
<TELL-NOTHING "to ">
<MAIN-VERB-PRINT>
<TELL "." CR>
<SET V <>>)
(<AND <FSET? .OBJ ,CONTBIT>
<NOT <FSET? .OBJ ,OPENBIT>>>
<TELL "Better open the " D .OBJ
" first." CR>
<SETG P-IT-OBJECT .OBJ>
<SET V <>>)
(<NOT <FSET? .OBJ ,CONTBIT>>
<TELL-NOTHING "in that" T>
<SET V <>>)
(T
<TELL "It's not in that." CR>
<SET V <>>)>)
(<VERB? $CALL>
<V-CALL-LOSE>
<SET V <>>)
(,P-NONE
<TELL "I can't find any here!" CR>
<SET V <>>)
(T
<TELL "There isn't anything to ">
<MAIN-VERB-PRINT>
<TELL " here!" CR>
<SET V <>>)>)>)
(T
<SETG P-NOT-HERE 0>
<SETG P-MULT <>>
<COND (<G? .NUM 1> <SETG P-MULT T>)>
<SET TMP <>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .NUM>
<COND (<G? ,P-NOT-HERE 0>
<TELL "The ">
<COND (<NOT <EQUAL? ,P-NOT-HERE .NUM>>
<TELL "other ">)>
<TELL "object">
<COND (<NOT <EQUAL? ,P-NOT-HERE 1>>
<TELL "s">)>
<TELL " that you mentioned ">
<COND (<NOT <EQUAL? ,P-NOT-HERE 1>>
<TELL "are">)
(T <TELL "is">)>
<TELL "n't here." CR>)
(<NOT .TMP>
<TELL
"I don't know what you're referring to." CR>)>
<RETURN>)
(T
<COND (.PTBL <SET OBJ1 <GET ,P-PRSO .CNT>>)
(T <SET OBJ1 <GET ,P-PRSI .CNT>>)>
<SETG PRSO <COND (.PTBL .OBJ1) (T .OBJ)>>
<SETG PRSI <COND (.PTBL .OBJ) (T .OBJ1)>>
;<COND (<EQUAL? ,HERE ,P-IT-LOC>
<COND (<EQUAL? ,PRSO ,IT>
<SETG PRSO ,P-IT-OBJECT>
<COND (.PTBL
<SET OBJ1 ,PRSO>
<PUT ,P-PRSO
.CNT ,PRSO>)
(T
<SET OBJ ,PRSO>
<PUT ,P-PRSO 1 ,PRSO>)>)
(<EQUAL? ,PRSI ,IT>
<SETG PRSI ,P-IT-OBJECT>
<COND (.PTBL
<SET OBJ ,PRSI>
<PUT ,P-PRSI 1 ,PRSI>)
(T
<SET OBJ1 ,PRSI>
<PUT ,P-PRSI
.CNT ,PRSI>)>)>)>
<COND ;(<VERB? COMPARE> T)
(<G? .NUM 1>
<COND (<EQUAL? .OBJ1
,NOT-HERE-OBJECT>
<SETG P-NOT-HERE
<+ ,P-NOT-HERE 1>>
<AGAIN>)
(<AND <VERB? TAKE>
,PRSI
<EQUAL? <GET <GET ,P-ITBL
,P-NC1>
0>
,W?ALL>
<NOT <IN? ,PRSO ,PRSI>>>
<AGAIN>)
(<AND <EQUAL? ,P-GETFLAGS
,P-ALL>
<VERB? TAKE>
<OR <AND <NOT <EQUAL?
<LOC .OBJ1>
,WINNER
,HERE>>
<NOT <FSET?
<LOC .OBJ1>
,TRANSBIT>>>
<NOT <OR <FSET?
.OBJ1
,TAKEBIT>
<FSET?
.OBJ1
,TRYTAKEBIT>>>>>
<AGAIN>)
(<AND <EQUAL? ,P-GETFLAGS
,P-ALL>
<VERB? DROP>
<NOT <IN? .OBJ1 ,WINNER>>
<NOT <IN? ,P-IT-OBJECT
,WINNER>>>
<AGAIN>)
(T
<COND (<EQUAL? .OBJ1 ,IT>
<DPRINT ,P-IT-OBJECT>)
(T <DPRINT .OBJ1>)>
<TELL ": ">)>)>
<SET V <QCONTEXT-CHECK <COND (.PTBL .OBJ1)
(T .OBJ)>>>
<SET TMP T>
<SET V <PERFORM ,PRSA ,PRSO ,PRSI>>
<COND (<==? .V ,M-FATAL> <RETURN>)>)>>)>
<COND (<NOT <==? .V ,M-FATAL>>
;<COND (<==? <LOC ,WINNER> ,PRSO>
<SETG PRSO <>>)>
;"Removing this code should fix the problem that AGAIN
loses when in a vehicle and it is the PRSO."
<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-END>>)>
<COND (<OR <VERB? AGAIN WALK FOLLOW>
<VERB? WAIT>
<GAME-COMMAND?>>
T)
(T
<SETG L-PRSA ,PRSA>
<SETG L-PRSO ,PRSO>
<SETG L-PRSI ,PRSI>
<SETG L-WALK-DIR ,P-WALK-DIR>
<SETG L-WINNER ,WINNER>)>
<COND (<==? .V ,M-FATAL> <SETG P-CONT <>>)>)
(T
<SETG P-CONT <>>)>
<COND (,P-WON
<COND (<GAME-COMMAND?>
T)
(<AND <VERB? TELL>
<NOT ,PRSI>>
T)
(<OR ,CLOCK-WAIT <0? ,I-WAIT-DURATION>>
<SET V <CLOCKER>>
<SET V <DETECTOR-NOISE>>)
(T
<SETG I-WAIT-FLAG <V-WAIT ,I-WAIT-DURATION <>>>
<COND (,I-WAIT-FLAG
<APPLY ,I-WAIT-RTN>
<SETG I-WAIT-FLAG <>>)
(T <SETG I-WAIT-DURATION 0> <SET V <CLOCKER>>)>
<SET V <DETECTOR-NOISE>>)>)>
<SETG PRSA <>>
<SETG PRSO <>>
<SETG PRSI <>>>>
<ROUTINE GAME-COMMAND? ()
<COND (<VERB? BRIEF SUPER-BRIEF VERBOSE SAVE RESTORE RESTART
QUIT SCRIPT UNSCRIPT $VERIFY VERSION SCORE TIME>
<RTRUE>)>>
<ROUTINE QCONTEXT-CHECK (PRSO "AUX" OTHER (WHO <>) (N 0))
<COND (<OR <VERB? HELP LATITUDE LONGITUDE>
<AND <VERB? SHOW TELL GIVE> <==? .PRSO ,PLAYER>>> ;"? more?"
<SET OTHER <FIRST? ,HERE>>
<REPEAT ()
<COND (<NOT .OTHER> <RETURN>)
(<AND <FSET? .OTHER ,PERSON>
<NOT <==? .OTHER ,PLAYER>>>
<SET N <+ 1 .N>>
<SET WHO .OTHER>)>
<SET OTHER <NEXT? .OTHER>>>
<COND (<AND <==? 1 .N> <NOT ,QCONTEXT>>
<SAID-TO .WHO>)>
<COND (<AND ,QCONTEXT
<IN? ,QCONTEXT ,HERE>
<==? ,QCONTEXT-ROOM ,HERE>
<==? ,WINNER ,PLAYER>> ;"? more?"
<SETG WINNER ,QCONTEXT>
<TELL "(said to " D ,QCONTEXT ")" CR>)>)>>
<ROUTINE SAID-TO (WHO)
<SETG WINNER .WHO>
<SETG QCONTEXT .WHO>
<SETG QCONTEXT-ROOM ,HERE>>
<GLOBAL P-MULT <>>
<GLOBAL P-NOT-HERE 0>
<GLOBAL L-PRSA <>>
<GLOBAL L-PRSO <>>
<GLOBAL L-PRSI <>>
<GLOBAL L-WINNER <>>
<GLOBAL LAST-PLAYER-LOC <>>
;"PERFORM without DEBUG"
<ROUTINE PERFORM (A "OPTIONAL" (O <>) (I <>) "AUX" V OA OO OI)
#DECL ((A) FIX (O) <OR FALSE OBJECT FIX> (I) <OR FALSE OBJECT> (V) ANY)
<SET OA ,PRSA>
<SET OO ,PRSO>
<SET OI ,PRSI>
<COND (<AND <NOT <==? .A ,V?WALK>>
<EQUAL? ,IT .I .O>>
;<AND <EQUAL? ,IT .I .O>
<NOT <EQUAL? ,P-IT-LOC ,HERE>>>
<TELL "I don't see what you are referring to." CR>
<RFATAL>)>
;<COND (<==? .O ,IT> <SET O ,P-IT-OBJECT>)>
;<COND (<==? .I ,IT> <SET I ,P-IT-OBJECT>)>
<SETG PRSA .A>
<SETG PRSO .O>
<COND (<AND ,PRSO <NOT <EQUAL? ,PRSI ,IT>> <NOT <VERB? WALK>>>
<SETG P-IT-OBJECT ,PRSO>
;<SETG P-IT-LOC ,HERE>)>
<SETG PRSI .I>
<COND (<AND <EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
<NOT <VERB? WALK>>
<SET V <NOT-HERE-OBJECT-F>>>
<SETG P-WON <>>
.V)
(T
<SET O ,PRSO>
<SET I ,PRSI>
<COND
(<SET V <APPLY <GETP ,WINNER ,P?ACTION>>> .V)
(<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-BEG>> .V)
(<SET V <APPLY <GET ,PREACTIONS .A>>> .V)
(<AND <SET I ,PRSI> .I <SET V <APPLY <GETP .I ,P?ACTION>>>> .V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<LOC .O>
<SET V <APPLY <GETP <LOC .O> ,P?CONTFCN> ,M-CONT>>>
.V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<SET V <APPLY <GETP .O ,P?ACTION>>>>
.V)
(<SET V <APPLY <GET ,ACTIONS .A>>> .V)>)>
<COND (<NOT <==? .V ,M-FATAL>>
<COND (<==? <LOC ,WINNER> ,PRSO>
<SETG PRSO <>>)>
<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-END>>)>
<SETG PRSA .OA>
<SETG PRSO .OO>
<SETG PRSI .OI>
.V>
;"PERFORM with DEBUG"
;<ROUTINE PERFORM (A "OPTIONAL" (O <>) (I <>) "AUX" V OA OO OI)
#DECL ((A) FIX (O) <OR FALSE OBJECT FIX> (I) <OR FALSE OBJECT> (V) ANY)
<COND (,DEBUG
<TELL "** PERFORM: PRSA = ">
%<COND (<GASSIGNED? PREDGEN> '<TELL N .A>)
(T '<PRINC <NTH ,ACTIONS <+ <* .A 2> 1>>>)>
<COND (<AND .O <NOT <==? .A ,V?WALK>>>
<TELL "/PRSO = " D .O>)>
<COND (.I <TELL "/PRSI = " D .I>)>)>
<SET OA ,PRSA>
<SET OO ,PRSO>
<SET OI ,PRSI>
<COND (<AND <NOT <==? .A ,V?WALK>>
<EQUAL? ,IT .I .O>>
;<AND <EQUAL? ,IT .I .O>
<NOT <EQUAL? ,P-IT-LOC ,HERE>>>
<TELL "I don't see what you are referring to." CR>
<RFATAL>)>
;<COND (<==? .O ,IT> <SET O ,P-IT-OBJECT>)>
;<COND (<==? .I ,IT> <SET I ,P-IT-OBJECT>)>
<SETG PRSA .A>
<SETG PRSO .O>
<COND (<AND ,PRSO <NOT <EQUAL? ,PRSI ,IT>> <NOT <VERB? WALK>>>
<SETG P-IT-OBJECT ,PRSO>
;<SETG P-IT-LOC ,HERE>)>
<SETG PRSI .I>
<COND (<AND <EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
<NOT <VERB? WALK>>
<SET V <D-APPLY "Not Here" ,NOT-HERE-OBJECT-F>>>
<SETG P-WON <>>
.V)
(T
<SET O ,PRSO>
<SET I ,PRSI>
<COND (<SET V <DD-APPLY "Actor" ,WINNER
<GETP ,WINNER ,P?ACTION>>> .V)
(<SET V <D-APPLY "Room (M-BEG)"
<GETP <LOC ,WINNER> ,P?ACTION>
,M-BEG>> .V)
(<SET V <D-APPLY "Preaction"
<GET ,PREACTIONS .A>>> .V)
(<AND <SET I ,PRSI> .I <SET V <D-APPLY "PRSI"
<GETP .I ,P?ACTION>>>> .V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<LOC .O>
<GETP <LOC .O> ,P?CONTFCN>
<SET V <DD-APPLY "Container" <LOC .O>
<GETP <LOC .O> ,P?CONTFCN>>>>
.V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<SET V <D-APPLY "PRSO"
<GETP .O ,P?ACTION>>>>
.V)
(<SET V <D-APPLY <>
<GET ,ACTIONS .A>>> .V)>)>
<COND (<NOT <==? .V ,M-FATAL>>
<COND (<==? <LOC ,WINNER> ,PRSO>
<SETG PRSO <>>)>
<SET V <D-APPLY "Room (M-END)"
<GETP <LOC ,WINNER> ,P?ACTION> ,M-END>>)>
<SETG PRSA .OA>
<SETG PRSO .OO>
<SETG PRSI .OI>
.V>
;"Next 2 routines for use with DEBUG"
;<ROUTINE DD-APPLY (STR OBJ FCN "OPTIONAL" (FOO <>))
<COND (,DEBUG <TELL "[" D .OBJ "=]">)>
<D-APPLY .STR .FCN .FOO>>
;<ROUTINE D-APPLY (STR FCN "OPTIONAL" (FOO <>) "AUX" RES)
<COND (<NOT .FCN> <>)
(T
<COND (,DEBUG
<COND (<NOT .STR>
<TELL "[Action:]" CR>)
(T <TELL "[" .STR ": ">)>)>
<COND (<==? .STR "Container">
<SET FOO ,M-CONT>)>
<SET RES
<COND (.FOO <APPLY .FCN .FOO>)
(T <APPLY .FCN>)>>
<COND (<AND ,DEBUG .STR>
<COND (<==? .RES ,M-FATAL>
<TELL "Fatal]" CR>)
(<NOT .RES>
<TELL "Not handled]" CR>)
(T <TELL "Handled]" CR>)>)>
.RES)>>
<ROUTINE TELL-START-STR () ;"submitted by a committee"
<TELL
"Nights on Hardscrabble Island are lonely and cold when the lighthouse
barely pierces the gloom. You sit on your bed, thinking of better times
and far-off places. A knock on your door stirs you, and Hevlin, a shipmate
you haven't seen for years, staggers in.|
|
\"I'm in trouble,\" he says. \"I had a few too many at The Shanty.
I was looking for Red, but he wasn't around, and I started talking about ...
here,\" he says, handing you a slim volume that you recognize
as a shipwreck book written years ago by the Historical Society.|
|
You smile. Every diver on the island has looked for those wrecks,
without even an old boot to show for it. You open the door, hoping the
drunken fool will leave. \"I know what you're thinkin',\" Hevlin scowls,
\"but look!\" He points to the familiar map, and you see new locations
marked for two of the wrecks.|
|
\"Keep it for me,\" he says. \"Just for tonight. It'll be safe here with
you. Don't let -- \" He stops and broods for a moment. \"I've got to go
find Red!\" And with that, Hevlin leaves.|
|
You put the book in your dresser and think about following Hevlin. Then you
hear a scuffle outside. You look through your window and see two men
struggling. One falls to the ground in a heap. The other man bends
down beside him, then turns as if startled and runs away. Another man then
approaches the wounded figure. He kneels beside him for a long moment,
then takes off after the other man.|
|
It isn't long before the police arrive to tell you that Hevlin's been
murdered. You don't mention the book, and hours later, as you lie awake
in your bed, you wonder if the book could really be what it seems." CR>>
<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? <GETP ,PSEUDO-OBJECT ,P?DESCFCN> ,HERE>
<RTRUE>)
(T
<RFALSE>)>)
(<NOT .L> <RFALSE>)
(<EQUAL? .L ,GLOBAL-OBJECTS> <RTRUE>)
(<AND <EQUAL? .L ,LOCAL-GLOBALS>
<GLOBAL-IN? .OBJ ,HERE>>
<RTRUE>)
(<NOT <EQUAL? <META-LOC .OBJ> ,HERE>> <RFALSE>)
(<EQUAL? .L ,WINNER ,HERE> <RTRUE>)
(<AND <OR <FSET? .L ,OPENBIT>
<FSET? .L ,PERSON>>
<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 META-LOC (OBJ)
<REPEAT ()
<COND (<NOT .OBJ> <RFALSE>)
(<EQUAL? .OBJ ,GLOBAL-OBJECTS ,LOCAL-GLOBALS>
<RETURN .OBJ>)>
<COND (<IN? .OBJ ,ROOMS>
<RETURN .OBJ>)
(ELSE
<SET OBJ <LOC .OBJ>>)>>>