512 lines
10 KiB
Plaintext
512 lines
10 KiB
Plaintext
|
|
|
|
.FUNCT APRINT,OBJ
|
|
FSET? OBJ,NARTICLEBIT \?ELS3
|
|
PRINTC 32
|
|
JUMP ?CND1
|
|
?ELS3: FSET? OBJ,VOWELBIT \?ELS5
|
|
PRINTI " an "
|
|
JUMP ?CND1
|
|
?ELS5: PRINTI " a "
|
|
?CND1: CALL DPRINT,OBJ
|
|
RSTACK
|
|
|
|
|
|
.FUNCT TPRINT,OBJ
|
|
FSET? OBJ,NARTICLEBIT \?ELS3
|
|
PRINTC 32
|
|
JUMP ?CND1
|
|
?ELS3: PRINTI " the "
|
|
?CND1: CALL DPRINT,OBJ
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ARPRINT,OBJ
|
|
CALL APRINT,OBJ
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT TRPRINT,OBJ
|
|
CALL TPRINT,OBJ
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT DPRINT,OBJ
|
|
GETP OBJ,P?SDESC
|
|
ZERO? STACK /?ELS5
|
|
GETP OBJ,P?SDESC
|
|
PRINT STACK
|
|
RTRUE
|
|
?ELS5: PRINTD OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT ULTIMATELY-IN?,OBJ,C=0
|
|
ZERO? C \?CND1
|
|
SET 'C,WINNER
|
|
?CND1: ZERO? OBJ /FALSE
|
|
IN? OBJ,C /TRUE
|
|
IN? OBJ,ROOMS /FALSE
|
|
LOC OBJ
|
|
CALL ULTIMATELY-IN?,STACK,C
|
|
RSTACK
|
|
|
|
|
|
.FUNCT GO
|
|
START::
|
|
|
|
?FCN: SET 'LIT,TRUE-VALUE
|
|
SET 'WINNER,PLAYER
|
|
GETB 0,56
|
|
EQUAL? STACK,P-PLAYER \?ELS7
|
|
GETB 0,57
|
|
EQUAL? STACK,P-WINNER /?THN4
|
|
?ELS7: GETB 0,56
|
|
EQUAL? STACK,84 \?CND1
|
|
GETB 0,57
|
|
EQUAL? STACK,79 \?CND1
|
|
GETB 0,58
|
|
EQUAL? STACK,77 \?CND1
|
|
GETB 0,59
|
|
EQUAL? STACK,65 \?CND1
|
|
GETB 0,60
|
|
EQUAL? STACK,83 \?CND1
|
|
?THN4: SET 'P-VMERGE,PLAYER
|
|
?CND1: CALL QUEUE,I-SANDS-OF-TIME,599
|
|
CALL QUEUE,I-SUNRISE,547
|
|
SET 'P-NMERGE,P-DEBUG
|
|
SET 'WHICH-END-IS-UP,RIGHT-END
|
|
SET 'CLOSET-FLOOR,FOYER
|
|
MOVE PLAYER,SOUTH-JUNCTION
|
|
SET 'HERE,SOUTH-JUNCTION
|
|
CALL QUEUE,I-NOISE,10
|
|
CALL RESET-THEM
|
|
PRINTI "As night falls the black limousine turns off the highway. It has all happened so fast, you think to yourself. Your Aunt passing away without any warning, the funeral this afternoon, and now this unusual stipulation in her will. The limo pulls up to the front of the house. ""This is the end of the line,"" says the attorney, and you step out of the back of the limo. ""Remember, your Aunt Hildegarde's will stated you will inherit her entire fortune -- if you can find the ten 'treasures' in one night.""
|
|
|
|
He hands you a photo of Uncle Buddy and a letter, saying, ""Her will instructed that I give you this photo, with the poem, to point you in the right direction. Also this letter, and here, you'll need this."" He gives you a flashlight. ""Meet me at 9 a.m. in the living room with all the 'treasures' and you'll inherit her entire estate,"" he says as the limo pulls away and disappears into the night's darkness."
|
|
CRLF
|
|
CALL V-VERSION
|
|
CRLF
|
|
CALL V-LOOK
|
|
CALL DO-MAIN-LOOP
|
|
JUMP ?FCN
|
|
|
|
|
|
.FUNCT RESET-THEM
|
|
CALL PCLEAR
|
|
SET 'P-HIM-OBJECT,NOT-HERE-OBJECT
|
|
SET 'P-HER-OBJECT,NOT-HERE-OBJECT
|
|
SET 'P-THEM-OBJECT,NOT-HERE-OBJECT
|
|
RETURN P-THEM-OBJECT
|
|
|
|
|
|
.FUNCT PCLEAR
|
|
SET 'P-CONT,FALSE-VALUE
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT DO-MAIN-LOOP,X
|
|
?PRG1: CALL MAIN-LOOP >X
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,X,?TMP1
|
|
SET 'CNT,0
|
|
SET 'OBJ,FALSE-VALUE
|
|
SET 'PTBL,TRUE-VALUE
|
|
EQUAL? QCONTEXT-ROOM,HERE /?CND1
|
|
SET 'QCONTEXT,FALSE-VALUE
|
|
?CND1: CALL PARSER >P-WON
|
|
ZERO? P-WON /?ELS6
|
|
GET P-PRSI,P-MATCHLEN >ICNT
|
|
GET P-PRSO,P-MATCHLEN >OCNT
|
|
ZERO? P-IT-OBJECT /?CND7
|
|
CALL ACCESSIBLE?,P-IT-OBJECT
|
|
ZERO? STACK /?CND7
|
|
SET 'TMP,FALSE-VALUE
|
|
?PRG12: IGRTR? 'CNT,ICNT /?REP13
|
|
GET P-PRSI,CNT
|
|
EQUAL? STACK,IT \?PRG12
|
|
PUT P-PRSI,CNT,P-IT-OBJECT
|
|
SET 'TMP,TRUE-VALUE
|
|
?REP13: ZERO? TMP \?CND22
|
|
SET 'CNT,0
|
|
?PRG25: IGRTR? 'CNT,OCNT /?CND22
|
|
GET P-PRSO,CNT
|
|
EQUAL? STACK,IT \?PRG25
|
|
PUT P-PRSO,CNT,P-IT-OBJECT
|
|
?CND22: SET 'CNT,0
|
|
?CND7: ZERO? OCNT \?ELS39
|
|
PUSH OCNT
|
|
JUMP ?CND35
|
|
?ELS39: GRTR? OCNT,1 \?ELS41
|
|
SET 'TBL,P-PRSO
|
|
ZERO? ICNT \?ELS44
|
|
SET 'OBJ,FALSE-VALUE
|
|
JUMP ?CND42
|
|
?ELS44: GET P-PRSI,1 >OBJ
|
|
?CND42: PUSH OCNT
|
|
JUMP ?CND35
|
|
?ELS41: GRTR? ICNT,1 \?ELS48
|
|
SET 'PTBL,FALSE-VALUE
|
|
SET 'TBL,P-PRSI
|
|
GET P-PRSO,1 >OBJ
|
|
PUSH ICNT
|
|
JUMP ?CND35
|
|
?ELS48: PUSH 1
|
|
?CND35: SET 'NUM,STACK
|
|
ZERO? OBJ \?CND51
|
|
EQUAL? ICNT,1 \?CND51
|
|
GET P-PRSI,1 >OBJ
|
|
?CND51: EQUAL? PRSA,V?WALK \?ELS58
|
|
CALL PERFORM,PRSA,PRSO >V
|
|
JUMP ?CND56
|
|
?ELS58: ZERO? NUM \?ELS60
|
|
GETB P-SYNTAX,P-SBITS
|
|
BAND STACK,P-SONUMS
|
|
ZERO? STACK \?ELS63
|
|
CALL PERFORM,PRSA >V
|
|
SET 'PRSO,FALSE-VALUE
|
|
JUMP ?CND56
|
|
?ELS63: ZERO? LIT \?ELS65
|
|
CALL PCLEAR
|
|
CALL TOO-DARK
|
|
JUMP ?CND56
|
|
?ELS65: CALL PCLEAR
|
|
PRINTI "[There isn't anything to "
|
|
GET P-ITBL,P-VERBN >TMP
|
|
EQUAL? PRSA,V?TELL \?ELS70
|
|
PRINTI "talk to"
|
|
JUMP ?CND68
|
|
?ELS70: ZERO? P-MERGED \?THN73
|
|
ZERO? P-OFLAG /?ELS72
|
|
?THN73: GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?CND68
|
|
?ELS72: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL WORD-PRINT,?TMP1,STACK >V
|
|
?CND68: PRINTI "!]"
|
|
CRLF
|
|
SET 'V,FALSE-VALUE
|
|
JUMP ?CND56
|
|
?ELS60: SET 'X,0
|
|
SET 'TMP,FALSE-VALUE
|
|
?PRG79: IGRTR? 'CNT,NUM \?ELS83
|
|
GRTR? X,0 \?ELS86
|
|
PRINTI "[The "
|
|
EQUAL? X,NUM /?CND87
|
|
PRINTI "other "
|
|
?CND87: PRINTI "object"
|
|
EQUAL? X,1 /?CND90
|
|
PRINTC 115
|
|
?CND90: PRINTI " that you mentioned "
|
|
EQUAL? X,1 /?ELS95
|
|
PRINTI "are"
|
|
JUMP ?CND93
|
|
?ELS95: PRINTI "is"
|
|
?CND93: PRINTI "n't here!]"
|
|
CRLF
|
|
JUMP ?CND56
|
|
?ELS86: ZERO? TMP \?CND56
|
|
CALL REFERRING
|
|
JUMP ?CND56
|
|
?ELS83: ZERO? PTBL /?ELS104
|
|
GET P-PRSO,CNT >OBJ1
|
|
JUMP ?CND102
|
|
?ELS104: GET P-PRSI,CNT >OBJ1
|
|
?CND102: GRTR? NUM,1 /?THN111
|
|
GET P-ITBL,P-NC1
|
|
GET STACK,0
|
|
EQUAL? STACK,W?ALL,W?EVERYTHING \?CND108
|
|
?THN111: EQUAL? OBJ1,NOT-HERE-OBJECT \?ELS115
|
|
INC 'X
|
|
JUMP ?PRG79
|
|
?ELS115: EQUAL? P-GETFLAGS,P-ALL \?ELS117
|
|
CALL DONT-ALL?,OBJ1,OBJ
|
|
ZERO? STACK \?PRG79
|
|
?ELS117: CALL ACCESSIBLE?,OBJ1
|
|
ZERO? STACK /?PRG79
|
|
EQUAL? OBJ1,PLAYER /?PRG79
|
|
EQUAL? OBJ1,IT \?ELS128
|
|
FSET? P-IT-OBJECT,NARTICLEBIT /?CND129
|
|
PRINTI "The "
|
|
?CND129: CALL DPRINT,P-IT-OBJECT
|
|
JUMP ?CND126
|
|
?ELS128: FSET? OBJ1,NARTICLEBIT /?CND134
|
|
PRINTI "The "
|
|
?CND134: CALL DPRINT,OBJ1
|
|
?CND126: PRINTI ": "
|
|
?CND108: SET 'TMP,TRUE-VALUE
|
|
ZERO? PTBL /?ELS141
|
|
PUSH OBJ1
|
|
JUMP ?CND137
|
|
?ELS141: PUSH OBJ
|
|
?CND137: CALL QCONTEXT-CHECK,STACK >V
|
|
ZERO? PTBL /?ELS149
|
|
PUSH OBJ1
|
|
JUMP ?CND145
|
|
?ELS149: PUSH OBJ
|
|
?CND145: SET 'PRSO,STACK
|
|
ZERO? PTBL /?ELS157
|
|
PUSH OBJ
|
|
JUMP ?CND153
|
|
?ELS157: PUSH OBJ1
|
|
?CND153: SET 'PRSI,STACK
|
|
CALL PERFORM,PRSA,PRSO,PRSI >V
|
|
EQUAL? V,M-FATAL \?PRG79
|
|
?CND56: EQUAL? V,M-FATAL \?CND4
|
|
SET 'P-CONT,FALSE-VALUE
|
|
JUMP ?CND4
|
|
?ELS6: SET 'P-CONT,FALSE-VALUE
|
|
?CND4: ZERO? P-WON /?CND169
|
|
CALL GAME-VERB?
|
|
ZERO? STACK \?CND169
|
|
CALL CLOCKER >V
|
|
?CND169: SET 'PRSA,FALSE-VALUE
|
|
SET 'PRSO,FALSE-VALUE
|
|
SET 'PRSI,FALSE-VALUE
|
|
RETURN PRSI
|
|
|
|
|
|
.FUNCT DONT-ALL?,O,I,L
|
|
LOC O >L
|
|
EQUAL? O,I /TRUE
|
|
EQUAL? PRSA,V?TAKE \?ELS7
|
|
ZERO? I /?ELS12
|
|
CALL ULTIMATELY-IN?,O,I
|
|
ZERO? STACK /TRUE
|
|
?ELS12: ZERO? I \?ELS16
|
|
CALL ULTIMATELY-IN?,O
|
|
ZERO? STACK \TRUE
|
|
?ELS16: FSET? O,TAKEBIT /?ELS20
|
|
FSET? O,TRYTAKEBIT \TRUE
|
|
?ELS20: ZERO? I /?ELS24
|
|
EQUAL? L,I \TRUE
|
|
CALL SEE-INSIDE?,I
|
|
ZERO? STACK /TRUE
|
|
RFALSE
|
|
?ELS24: CALL META-LOC,O
|
|
EQUAL? STACK,PLAYER /FALSE
|
|
EQUAL? L,HERE /FALSE
|
|
FSET? L,SURFACEBIT /FALSE
|
|
FSET? L,ACTORBIT \TRUE
|
|
RFALSE
|
|
?ELS7: EQUAL? PRSA,V?PUT-ON,V?PUT,V?DROP /?THN47
|
|
EQUAL? PRSA,V?THROW \FALSE
|
|
?THN47: FSET? O,TAKEBIT \TRUE
|
|
EQUAL? L,PLAYER,WINNER \TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT GAME-VERB?,V=0
|
|
ZERO? V \?CND1
|
|
SET 'V,PRSA
|
|
?CND1: EQUAL? V,V?BRIEF,V?SCORE,V?VERBOSE /TRUE
|
|
EQUAL? V,V?QUIT,V?RESTART,V?RESTORE /TRUE
|
|
EQUAL? V,V?SAVE,V?SCRIPT,V?SUPER-BRIEF /TRUE
|
|
EQUAL? V,V?TELL,V?UNSCRIPT,V?VERSION /TRUE
|
|
EQUAL? V,V?TIME \FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT QCONTEXT-CHECK,PRSO,OTHER,WHO=0,N=0
|
|
EQUAL? PRSA,V?HELP /?THN6
|
|
EQUAL? PRSA,V?TELL \FALSE
|
|
EQUAL? PRSO,PLAYER \FALSE
|
|
?THN6: FIRST? HERE >OTHER /?KLU31
|
|
?KLU31:
|
|
?PRG10: ZERO? OTHER /?REP11
|
|
FSET? OTHER,ACTORBIT \?CND12
|
|
EQUAL? OTHER,PLAYER /?CND12
|
|
INC 'N
|
|
SET 'WHO,OTHER
|
|
?CND12: NEXT? OTHER >OTHER /?PRG10
|
|
JUMP ?PRG10
|
|
?REP11: EQUAL? 1,N \?CND19
|
|
ZERO? QCONTEXT \?CND19
|
|
CALL SAID-TO,WHO
|
|
?CND19: CALL QCONTEXT-GOOD?
|
|
ZERO? STACK /FALSE
|
|
EQUAL? WINNER,PLAYER \FALSE
|
|
SET 'WINNER,QCONTEXT
|
|
CALL SPOKEN-TO,QCONTEXT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SAID-TO,WHO
|
|
SET 'QCONTEXT,WHO
|
|
LOC WHO >QCONTEXT-ROOM
|
|
RETURN QCONTEXT-ROOM
|
|
|
|
|
|
.FUNCT SPOKEN-TO,WHO
|
|
CALL PCLEAR
|
|
PRINTI "[spoken to"
|
|
CALL TPRINT,WHO
|
|
PRINTR "]"
|
|
|
|
|
|
.FUNCT QCONTEXT-GOOD?
|
|
ZERO? QCONTEXT /FALSE
|
|
FSET? QCONTEXT,ACTORBIT \FALSE
|
|
EQUAL? HERE,QCONTEXT-ROOM \FALSE
|
|
CALL META-LOC,QCONTEXT
|
|
EQUAL? HERE,STACK /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT ACCESSIBLE?,OBJ
|
|
FSET? OBJ,INVISIBLE /FALSE
|
|
CALL META-LOC,OBJ
|
|
EQUAL? STACK,WINNER,HERE,GLOBAL-OBJECTS /TRUE
|
|
CALL VISIBLE?,OBJ
|
|
ZERO? STACK /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT VISIBLE?,OBJ,L
|
|
LOC OBJ >L
|
|
ZERO? L /FALSE
|
|
FSET? OBJ,INVISIBLE /FALSE
|
|
EQUAL? L,GLOBAL-OBJECTS /FALSE
|
|
EQUAL? L,PLAYER,HERE,WINNER /TRUE
|
|
EQUAL? L,LOCAL-GLOBALS \?ELS13
|
|
CALL GLOBAL-IN?,OBJ,HERE
|
|
ZERO? STACK \TRUE
|
|
?ELS13: CALL SEE-INSIDE?,L
|
|
ZERO? STACK /FALSE
|
|
CALL VISIBLE?,L
|
|
ZERO? STACK /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT SEE-INSIDE?,CONTAINER
|
|
ZERO? P-MOBY-FLAG \TRUE
|
|
FSET? CONTAINER,SURFACEBIT /TRUE
|
|
FSET? CONTAINER,CONTBIT \?ELS10
|
|
FSET? CONTAINER,OPENBIT /TRUE
|
|
FSET? CONTAINER,TRANSBIT \FALSE
|
|
RTRUE
|
|
?ELS10: FSET? CONTAINER,ACTORBIT \FALSE
|
|
EQUAL? CONTAINER,PLAYER /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT META-LOC,OBJ
|
|
?PRG1: ZERO? OBJ /FALSE
|
|
IN? OBJ,GLOBAL-OBJECTS \?ELS7
|
|
RETURN GLOBAL-OBJECTS
|
|
?ELS7: IN? OBJ,ROOMS \?ELS9
|
|
RETURN OBJ
|
|
?ELS9: LOC OBJ >OBJ
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT DEQUEUE,RTN
|
|
CALL QUEUED?,RTN >RTN
|
|
ZERO? RTN /FALSE
|
|
PUT RTN,C-RTN,0
|
|
RTRUE
|
|
|
|
|
|
.FUNCT QUEUE,RTN,TICK,C,E,INT=0
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
ADD C-TABLE,C-INTS >C
|
|
?PRG1: EQUAL? C,E \?ELS5
|
|
ZERO? INT /?ELS8
|
|
SET 'C,INT
|
|
JUMP ?CND6
|
|
?ELS8: SUB C-INTS,C-INTLEN >C-INTS
|
|
ADD C-TABLE,C-INTS >INT
|
|
?CND6: PUT INT,C-RTN,RTN
|
|
JUMP ?REP2
|
|
?ELS5: GET C,C-RTN
|
|
EQUAL? STACK,RTN \?ELS13
|
|
SET 'INT,C
|
|
JUMP ?REP2
|
|
?ELS13: GET C,C-RTN
|
|
ZERO? STACK \?CND3
|
|
SET 'INT,C
|
|
?CND3: ADD C,C-INTLEN >C
|
|
JUMP ?PRG1
|
|
?REP2: GRTR? INT,CLOCK-HAND \?CND16
|
|
ADD TICK,3
|
|
SUB 0,STACK >TICK
|
|
?CND16: PUT INT,C-TICK,TICK
|
|
RETURN INT
|
|
|
|
|
|
.FUNCT QUEUED?,RTN,C,E
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
ADD C-TABLE,C-INTS >C
|
|
?PRG1: EQUAL? C,E /FALSE
|
|
GET C,C-RTN
|
|
EQUAL? STACK,RTN \?CND3
|
|
GET C,C-TICK
|
|
ZERO? STACK /FALSE
|
|
RETURN C
|
|
?CND3: ADD C,C-INTLEN >C
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT CLOCKER,E,TICK,RTN,FLG=0,Q?=0,OWINNER
|
|
ZERO? CLOCK-WAIT /?CND1
|
|
SET 'CLOCK-WAIT,FALSE-VALUE
|
|
RFALSE
|
|
?CND1: ADD C-TABLE,C-INTS >CLOCK-HAND
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
SET 'OWINNER,WINNER
|
|
SET 'WINNER,PLAYER
|
|
?PRG5: EQUAL? CLOCK-HAND,E \?ELS9
|
|
INC 'MOVES
|
|
SET 'WINNER,OWINNER
|
|
RETURN FLG
|
|
?ELS9: GET CLOCK-HAND,C-RTN
|
|
ZERO? STACK /?CND7
|
|
GET CLOCK-HAND,C-TICK >TICK
|
|
LESS? TICK,-1 \?ELS14
|
|
SUB 0,TICK
|
|
SUB STACK,3
|
|
PUT CLOCK-HAND,C-TICK,STACK
|
|
SET 'Q?,CLOCK-HAND
|
|
JUMP ?CND7
|
|
?ELS14: ZERO? TICK /?CND7
|
|
GRTR? TICK,0 \?CND17
|
|
DEC 'TICK
|
|
PUT CLOCK-HAND,C-TICK,TICK
|
|
?CND17: ZERO? TICK /?CND20
|
|
SET 'Q?,CLOCK-HAND
|
|
?CND20: GRTR? TICK,0 /?CND7
|
|
GET CLOCK-HAND,C-RTN >RTN
|
|
ZERO? TICK \?CND26
|
|
PUT CLOCK-HAND,C-RTN,0
|
|
?CND26: CALL RTN
|
|
ZERO? STACK /?CND29
|
|
SET 'FLG,TRUE-VALUE
|
|
?CND29: ZERO? Q? \?CND7
|
|
GET CLOCK-HAND,C-RTN
|
|
ZERO? STACK /?CND7
|
|
SET 'Q?,TRUE-VALUE
|
|
?CND7: ADD CLOCK-HAND,C-INTLEN >CLOCK-HAND
|
|
ZERO? Q? \?PRG5
|
|
ADD C-INTS,C-INTLEN >C-INTS
|
|
JUMP ?PRG5
|
|
|
|
|
|
.FUNCT FIXED-FONT-ON
|
|
GET 0,8
|
|
BOR STACK,2
|
|
PUT 0,8,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT FIXED-FONT-OFF
|
|
GET 0,8
|
|
BAND STACK,-3
|
|
PUT 0,8,STACK
|
|
RTRUE
|
|
|
|
.ENDI
|