moonmist/goal.zap
historicalsource a2025f6d6c Final Revision
2019-04-14 13:37:43 -04:00

2107 lines
50 KiB
Plaintext

.FUNCT FOLLOW-GOAL,PERSON,HEER,GT,GOAL,FLG,IGOAL=0,X
LOC PERSON >HEER
IN? HEER,ROOMS /?CND1
CALL META-LOC,HEER >HEER
MOVE PERSON,HEER
?CND1: GETP PERSON,P?CHARACTER
GET GOAL-TABLES,STACK >GT
GET GT,GOAL-F
EQUAL? HEER,STACK \?CCL5
CALL GOAL-REACHED,PERSON
RSTACK
?CCL5: GET GT,GOAL-ENABLE
ZERO? STACK /FALSE
GET GT,GOAL-I >IGOAL
GET TRANSFER-TABLE,IGOAL >GOAL
ZERO? GOAL \?CND7
SET 'IGOAL,FALSE-VALUE
GET GT,GOAL-S >GOAL
?CND7: GETP HEER,P?STATION >X
EQUAL? HEER,GOAL,X /?CCL11
CALL MOVE-PERSON,PERSON,X
RSTACK
?CCL11: ZERO? GOAL /FALSE
EQUAL? HEER,GOAL \?CCL15
ZERO? IGOAL /?CCL18
ADD IGOAL,1
GET TRANSFER-TABLE,STACK >FLG
CALL MOVE-PERSON,PERSON,FLG >FLG
GET GT,GOAL-F
CALL ESTABLISH-GOAL,PERSON,STACK
RETURN FLG
?CCL18: GET GT,GOAL-F >FLG
EQUAL? HEER,FLG /?CCL20
CALL MOVE-PERSON,PERSON,FLG
RSTACK
?CCL20: CALL GOAL-REACHED,PERSON
RSTACK
?CCL15: GETP GOAL,P?STATION
EQUAL? HEER,STACK \?CND9
CALL MOVE-PERSON,PERSON,GOAL
RSTACK
?CND9: CALL FOLLOW-GOAL-NEXT,HEER,GOAL >FLG
CALL MOVE-PERSON,PERSON,FLG
RSTACK
.FUNCT FOLLOW-GOAL-NEXT,HEER,GOAL,LINE,CNT=1,RM,GOAL-FLAG=0,LOC,G
GETP GOAL,P?LINE
CALL GET-LINE,STACK >LINE
GETP GOAL,P?STATION >G
?PRG1: GET LINE,CNT >RM
EQUAL? RM,HEER \?CCL5
ZERO? GOAL-FLAG /?CCL8
SUB CNT,3
GET LINE,STACK >LOC
RETURN LOC
?CCL8: ADD CNT,3
GET LINE,STACK >LOC
RETURN LOC
?CCL5: EQUAL? RM,G \?CND3
SET 'GOAL-FLAG,TRUE-VALUE
?CND3: ADD CNT,3 >CNT
JUMP ?PRG1
.FUNCT GET-LINE,LN
EQUAL? LN,MAIN-LINE-C \?CCL3
RETURN MAIN-LINE
?CCL3: EQUAL? LN,BED-LINE-C \?CCL5
RETURN BED-LINE
?CCL5: EQUAL? LN,TOWER-LINE-C \?CCL7
RETURN TOWER-LINE
?CCL7: EQUAL? LN,PASS-LINE-C \FALSE
RETURN PASS-LINE
.FUNCT IN-MOTION?,PERSON,DISABLED-OK=0,GT,L,F,C,?TMP1
GETP PERSON,P?CHARACTER >C
GET GOAL-TABLES,C >GT
EQUAL? PERSON,BUTLER \?CCL3
BTST PRESENT-TIME,1 \?CCL3
ZERO? DISABLED-OK /FALSE
?CCL3: GET GT,GOAL-S
ZERO? STACK /FALSE
LOC PERSON >L
GET GT,GOAL-F >F
EQUAL? L,F /FALSE
ZERO? DISABLED-OK \TRUE
GET GT,GOAL-ENABLE
ZERO? STACK \TRUE
RFALSE
.FUNCT ESTABLISH-GOAL,PERSON,GOAL,SPEED=1,LOCN,GT,?TMP1
LOC PERSON >LOCN
EQUAL? LOCN,GOAL \?CND1
CALL GOAL-REACHED,PERSON
RSTACK
?CND1: EQUAL? PERSON,CONFESSED,CAPTOR \?CND3
RETURN LOCN
?CND3: GETP PERSON,P?CHARACTER
GET GOAL-TABLES,STACK >GT
GETP LOCN,P?LINE
SUB STACK,1
MUL STACK,GOAL-I-MULTIPLIER >?TMP1
GETP GOAL,P?LINE
SUB STACK,1
MUL STACK,2
ADD ?TMP1,STACK
PUT GT,GOAL-I,STACK
GETP GOAL,P?STATION
PUT GT,GOAL-S,STACK
PUT GT,GOAL-F,GOAL
PUT GT,GOAL-ENABLE,SPEED
RETURN LOCN
.FUNCT GOAL-REACHED,PERSON,GT,VAL=0
GETP PERSON,P?CHARACTER
GET GOAL-TABLES,STACK >GT
PUT GT,GOAL-S,FALSE-VALUE
PUTP PERSON,P?LDESC,0
CALL META-LOC,PERSON >VAL
CALL CREEPY?,VAL
ZERO? STACK \?CND1
FSET VAL,ONBIT
?CND1: SET 'GOAL-PERSON,PERSON
GET GT,GOAL-FUNCTION
CALL D-APPLY,STR?140,STACK,G-REACHED >VAL
ZERO? VAL /?CCL5
RETURN VAL
?CCL5: IN? PERSON,HERE \FALSE
FSET? PERSON,TOUCHBIT /FALSE
GETP PERSON,P?DESCFCN
CALL STACK,M-OBJDESC
RSTACK
.FUNCT ENTERS?,DIR,WHERE
EQUAL? DIR,P?IN /TRUE
FSET? WHERE,TOUCHBIT /TRUE
RFALSE
.FUNCT TELL-OPEN-DOOR
PRINTI " opens the door for a moment and"
RTRUE
.FUNCT TELL-HIS-HER-BEDROOM,CHR,WHERE,?TMP1
EQUAL? CHR,BUTLER-C \?CND1
CALL PRINTT,WHERE
RTRUE
?CND1: INC 'CHR
GET CHAR-ROOM-TABLE,CHR >?TMP1
GET CHAR-CLOSET-TABLE,CHR
EQUAL? WHERE,?TMP1,STACK /?PRG9
CALL PRINTT,WHERE
RTRUE
?PRG9: PRINTI " h"
SUB CHR,1
GET CHARACTER-TABLE,STACK
FSET? STACK,FEMALE \?PRG16
PRINTI "er "
JUMP ?CND11
?PRG16: PRINTI "is "
?CND11: FSET? WHERE,SECRETBIT \?PRG23
PRINTI "entrance"
RTRUE
?PRG23: PRINTI "bedroom"
RTRUE
.FUNCT TELL-LOCKING-THE-DOOR,DOOR
ZERO? DOOR /FALSE
FSET? DOOR,LOCKED \FALSE
PRINTI ", locking the door"
RTRUE
.FUNCT MOVE-PERSON,PERSON,WHERE,DIR,EDIR,GT=0,OL,COR,PCOR,CHR,DOOR=0,VAL=0,X
FSET? PERSON,MUNGBIT /FALSE
EQUAL? PERSON,CONFESSED,CAPTOR,FOLLOWER /FALSE
EQUAL? PERSON,BUTLER \?CND1
EQUAL? AWAITING-REPLY,BUTLER-1-R,BUTLER-2-R /FALSE
EQUAL? AWAITING-REPLY,BUTLER-3-R,BUTLER-4-R /FALSE
?CND1: PUTP PERSON,P?LDESC,6
EQUAL? PERSON,BUTLER \?CND11
BTST PRESENT-TIME,1 /FALSE
?CND11: GETP PERSON,P?CHARACTER >CHR
GET GOAL-TABLES,CHR >GT
LOC PERSON >OL
CALL DIR-FROM,OL,WHERE >DIR
CALL COMPASS-EQV,OL,DIR >EDIR
SET 'GOAL-PERSON,PERSON
ZERO? DIR /?CND15
GETPT OL,DIR >X
ZERO? X /?CND15
PTSIZE X
EQUAL? STACK,DEXIT \?CND15
GETB X,DEXITOBJ >DOOR
?CND15: CALL CORRIDOR-LOOK,PERSON >PCOR
GET GT,GOAL-FUNCTION
CALL D-APPLY,STR?141,STACK,G-ENROUTE
EQUAL? M-FATAL,STACK \?CCL22
CALL THIS-IS-IT,PERSON
RETURN 2
?CCL22: EQUAL? PERSON,PLAYER \?CCL26
ZERO? DOOR /?CND20
FSET DOOR,SEENBIT
CALL WALK-THRU-DOOR?,X
ZERO? STACK \?CND20
RETURN 2
?CCL26: ZERO? NOW-WEARING /?CCL34
ZERO? LIT /?CND20
FSET? PERSON,NDESCBIT /?CND20
?CCL34: EQUAL? OL,HERE \?CCL40
SET 'VAL,TRUE-VALUE
CALL HE-SHE-IT,PERSON,TRUE-VALUE
ZERO? DOOR /?CND43
FSET? DOOR,OPENBIT /?CND43
FSET DOOR,TOUCHBIT
CALL TELL-OPEN-DOOR
?CND43: EQUAL? DIR,P?OUT \?CCL49
PRINTI " leaves.
"
JUMP ?CND20
?CCL49: CALL ENTERS?,DIR,WHERE
ZERO? STACK /?PRG58
PRINTI " enters"
CALL TELL-HIS-HER-BEDROOM,CHR,WHERE
CALL TELL-LOCKING-THE-DOOR,DOOR
PRINTI ".
"
JUMP ?CND20
?PRG58: PRINTI " walks "
EQUAL? DIR,P?UP,P?DOWN \?CCL62
CALL DIR-PRINT,DIR
JUMP ?CND60
?CCL62: FSET? WHERE,TOUCHBIT \?CCL64
PRINTI "to"
CALL TELL-HIS-HER-BEDROOM,CHR,WHERE
JUMP ?CND60
?CCL64: CALL DIR-PRINT,EDIR
?CND60: CALL TELL-LOCKING-THE-DOOR,DOOR
PRINTI ".
"
JUMP ?CND20
?CCL40: EQUAL? WHERE,HERE \?CCL70
ZERO? NOW-WEARING \?CCL73
PRINTI "When you hear the door begin to open, you"
PRINT REMEMBER-NOT-DRESSED
PRINTI " and hop into "
PRINTD YOUR-BATHROOM
PRINTI ".
"
CALL GOTO,YOUR-BATHROOM
SET 'VAL,M-FATAL
JUMP ?CND20
?CCL73: ZERO? GT /?CCL76
GET GT,GOAL-F
EQUAL? HERE,STACK /?CND20
?CCL76: SET 'VAL,TRUE-VALUE
CALL START-SENTENCE,PERSON
ZERO? DOOR /?CND79
FSET? DOOR,OPENBIT /?CND79
FSET DOOR,TOUCHBIT
CALL TELL-OPEN-DOOR
?CND79: EQUAL? PRSA,V?WALK \?PRG90
EQUAL? OL,OHERE \?PRG90
PRINTI " follows you"
JUMP ?PRG97
?PRG90: PRINTI " walks past you from"
EQUAL? DIR,P?UP,P?DOWN \?CCL94
PRINTC 32
CALL OPP-DIR,DIR
CALL DIR-PRINT,STACK
JUMP ?PRG97
?CCL94: CALL TELL-HIS-HER-BEDROOM,CHR,OL
?PRG97: PRINTI ".
"
JUMP ?CND20
?CCL70: GETP HERE,P?CORRIDOR >COR
ZERO? COR /?CND20
ZERO? PCOR /?CCL102
CALL CORRIDOR-LOOK,WHERE
ZERO? STACK \?CCL105
SET 'VAL,TRUE-VALUE
EQUAL? PERSON,P-HER-OBJECT \?CCL108
FSET? HER,TOUCHBIT \?CCL108
PRINTI "She"
JUMP ?CND106
?CCL108: EQUAL? PERSON,P-HIM-OBJECT \?CCL114
FSET? HIM,TOUCHBIT \?CCL114
PRINTI "He"
JUMP ?CND106
?CCL114: CALL START-SENTENCE,PERSON
PRINTC 44
CALL WHERE?,PERSON,PCOR
PRINTC 44
?CND106: ZERO? DOOR /?CND123
FSET? DOOR,OPENBIT /?CND123
FSET DOOR,TOUCHBIT
CALL TELL-OPEN-DOOR
?CND123: CALL ENTERS?,DIR,WHERE
ZERO? STACK /?PRG132
PRINTI " enters"
CALL TELL-HIS-HER-BEDROOM,CHR,WHERE
JUMP ?CND127
?PRG132: PRINTI " disappears "
EQUAL? DIR,P?UP,P?DOWN /?CND134
PRINTI "to the "
?CND134: CALL DIR-PRINT,EDIR
?CND127: CALL TELL-LOCKING-THE-DOOR,DOOR
PRINTI ".
"
JUMP ?CND20
?CCL105: SET 'VAL,TRUE-VALUE
CALL START-SENTENCE,PERSON
PRINTI " is"
CALL WHERE?,PERSON,PCOR
PRINTI ", heading "
EQUAL? PCOR,DIR \?CCL146
PRINTI "away from you"
JUMP ?PRG157
?CCL146: CALL OPP-DIR,DIR
EQUAL? PCOR,STACK \?CCL150
PRINTI "toward you"
JUMP ?PRG157
?CCL150: EQUAL? DIR,P?UP,P?DOWN /?CND153
PRINTI "toward the "
?CND153: CALL DIR-PRINT,EDIR
?PRG157: PRINTI ".
"
JUMP ?CND20
?CCL102: CALL CORRIDOR-LOOK,WHERE >PCOR
ZERO? PCOR /?CND20
SET 'VAL,TRUE-VALUE
CALL WHERE?,PERSON,PCOR,TRUE-VALUE
CALL HE-SHE-IT,PERSON,0,STR?142
CALL DIR-FROM,WHERE,OL
CALL COMPASS-EQV,HERE,STACK >DIR
EQUAL? DIR,P?IN /?PRG166
PRINTI " from"
CALL TELL-HIS-HER-BEDROOM,CHR,OL
?PRG166: PRINTI ".
"
?CND20: ZERO? VAL /?CND168
IN? LUGGAGE,PERSON \?CND168
ZERO? NOW-WEARING /?CND168
CALL HE-SHE-IT,PERSON,TRUE-VALUE,STR?1
PRINTI " carrying "
PRINTD LUGGAGE
PRINTI ".
"
?CND168: ZERO? PERSON /?CND175
MOVE PERSON,WHERE
?CND175: ZERO? GT /?CND177
GET GT,GOAL-F
EQUAL? STACK,WHERE \?CCL181
CALL GOAL-REACHED,PERSON >X
ZERO? X \?CCL184
EQUAL? HERE,WHERE \?CCL184
FSET? PERSON,NDESCBIT /?CCL184
SET 'VAL,TRUE-VALUE
CALL HE-SHE-IT,PERSON,TRUE-VALUE
PRINTI " enters and nods to you."
CRLF
JUMP ?CND177
?CCL184: ZERO? X /?CND177
EQUAL? VAL,M-FATAL /?CND177
SET 'VAL,X
JUMP ?CND177
?CCL181: GET GT,GOAL-FUNCTION
CALL D-APPLY,STR?141,STACK,G-ENROUTE >X
ZERO? X \?CCL195
IN? PERSON,HERE \?CCL195
FSET? PERSON,TOUCHBIT /?CCL195
GETP PERSON,P?DESCFCN
CALL STACK,M-OBJDESC >X
ZERO? X /?CND177
SET 'VAL,TRUE-VALUE
JUMP ?CND177
?CCL195: ZERO? X /?CND177
EQUAL? VAL,M-FATAL /?CND177
SET 'VAL,X
?CND177: ZERO? VAL /FALSE
CALL THIS-IS-IT,PERSON
EQUAL? VAL,M-FATAL /?CND207
FSET WHERE,SEENBIT
PUT FOLLOW-LOC,CHR,WHERE
?CND207: RETURN VAL
.FUNCT COMPASS-EQV,RM,DIR,DIRTBL,DIRL,P,L,TBL,VAL=0,?TMP1
EQUAL? DIR,P?UP,P?DOWN /?CND1
EQUAL? DIR,P?IN,P?OUT /?CND1
RETURN DIR
?CND1: GETPT RM,DIR >DIRTBL
PTSIZE DIRTBL >DIRL
SET 'P,0
?PRG5: ZERO? VAL /?CCL9
RETURN VAL
?CCL9: NEXTP RM,P >P
ZERO? P /FALSE
LESS? P,LOW-DIRECTION /?PRG5
GETPT RM,P >TBL
PTSIZE TBL >L
EQUAL? L,DIRL \?PRG5
DEC 'L
?PRG15: GETB TBL,L >?TMP1
GETB DIRTBL,L
EQUAL? ?TMP1,STACK \?PRG5
DLESS? 'L,0 \?PRG15
SET 'VAL,P
JUMP ?PRG5
.FUNCT DIR-EQV?,RM,DIR1,DIR2,DIR1TBL,DIR2TBL,L,?TMP1
EQUAL? DIR1,DIR2 /TRUE
GETPT RM,DIR1 >DIR1TBL
ZERO? DIR1TBL /FALSE
GETPT RM,DIR2 >DIR2TBL
ZERO? DIR2TBL /FALSE
PTSIZE DIR1TBL >L
PTSIZE DIR2TBL
EQUAL? L,STACK \FALSE
DEC 'L
?PRG9: GETB DIR1TBL,L >?TMP1
GETB DIR2TBL,L
EQUAL? ?TMP1,STACK \FALSE
DLESS? 'L,0 \?PRG9
RTRUE
.FUNCT DIR-FROM,HERE,THERE,V=0,P,D
CALL DIR-FROM-TEST,HERE,THERE,P?UP
ZERO? STACK /?CCL3
RETURN P?UP
?CCL3: CALL DIR-FROM-TEST,HERE,THERE,P?DOWN
ZERO? STACK /?CCL5
RETURN P?DOWN
?CCL5: CALL DIR-FROM-TEST,HERE,THERE,P?IN
ZERO? STACK /?CCL7
RETURN P?IN
?CCL7: CALL DIR-FROM-TEST,HERE,THERE,P?OUT
ZERO? STACK /?CND1
RETURN P?OUT
?CND1: SET 'P,0
?PRG9: NEXTP HERE,P >P
LESS? P,LOW-DIRECTION \?CCL13
RETURN V
?CCL13: CALL DIR-FROM-TEST,HERE,THERE,P >D
ZERO? D /?PRG9
LESS? D,LOW-DIRECTION /?PRD19
RETURN P
?PRD19: ZERO? V \?CCL17
SET 'V,P
JUMP ?PRG9
?CCL17: RETURN P
.FUNCT DIR-FROM-TEST,HERE,THERE,P,L,TBL
GETPT HERE,P >TBL
ZERO? TBL /FALSE
PTSIZE TBL >L
EQUAL? L,DEXIT,UEXIT,CEXIT \FALSE
GETB TBL,REXIT
EQUAL? STACK,THERE \FALSE
RETURN P
.FUNCT I-PLAYER,ARG,VAL=0
LOC PLAYER >HERE
EQUAL? ARG,G-REACHED \?CCL3
CALL MAKE-ALL-PEOPLE,-12
RTRUE
?CCL3: EQUAL? ARG,G-ENROUTE \FALSE
EQUAL? OHERE,HERE /FALSE
CALL LIT?
ZERO? STACK /?PRG20
EQUAL? HERE,MAZE /?PRG20
SET 'VAL,HERE
FSET? VAL,SECRETBIT \?PRD14
FSET? HERE,SEENBIT \?PRG20
?PRD14: RANDOM 100
LESS? 50,STACK /FALSE
CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,PLAYER >VAL
ZERO? VAL /FALSE
?PRG20: PRINTI "But "
FSET? HERE,SURFACEBIT \?PRG27
PRINTI "on"
JUMP ?PRG29
?PRG27: PRINTI "in"
?PRG29: CALL PRINTT,HERE
ZERO? VAL \?CCL33
PRINTI " you get lost in the dark"
JUMP ?PRG46
?CCL33: FSET? VAL,SECRETBIT \?CCL37
PRINTI " you realize that you don't know the way"
JUMP ?PRG46
?CCL37: EQUAL? VAL,GHOST-NEW \?PRG44
PRINTI " the ghost blocks your way"
JUMP ?PRG46
?PRG44: CALL HE-SHE-IT,VAL
CALL PICK-ONE-NEW,PLAYER-OBSTACLES
PRINT STACK
?PRG46: PRINTI ".
"
CALL MAKE-ALL-PEOPLE,-12
RETURN 2
.FUNCT GOODNIGHT,RM,PER,CLOSET=0,DR,VAL=0
EQUAL? RM,HERE \?CCL3
PRINTD PER
CALL THIS-IS-IT,PER
PRINTI " shows you firmly to the door, saying"
CALL HE-SHE-IT,PER,0,STR?1
PRINTI " going to bed."
CRLF
SET 'VAL,WINNER
SET 'WINNER,PLAYER
PUTP PER,P?LINE,0
GETPT HERE,P?OUT
GETB STACK,REXIT
CALL GOTO,STACK
SET 'WINNER,VAL
JUMP ?CND1
?CCL3: EQUAL? CLOSET,HERE \?CND1
CALL FIND-FLAG-LG,CLOSET,DOORBIT,SECRETBIT >DR
ZERO? DR /?CND1
EQUAL? DR,SECRET-HYDE-DOOR,SECRET-IRIS-DOOR /?CND1
FSET? DR,OPENBIT \?CND1
FCLEAR DR,OPENBIT
GETP PER,P?CHARACTER
PUT FOUND-PASSAGES,STACK,TRUE-VALUE
CALL LIT? >LIT
PRINTD PER
PRINTI " closes the "
PRINTD DR
PRINTI " without noticing you."
CRLF
SET 'VAL,TRUE-VALUE
?CND1: FCLEAR RM,ONBIT
FSET PER,MUNGBIT
FCLEAR RM,OPENBIT
FSET RM,LOCKED
EQUAL? PER,FOLLOWER \?CND15
SET 'FOLLOWER,0
?CND15: PUTP PER,P?LDESC,14
RETURN VAL
.FUNCT GRAB-ATTENTION,PERSON,OBJ=0,N,GT,ATT
FSET? PERSON,MUNGBIT \?CCL3
GETP PERSON,P?LDESC
EQUAL? STACK,14 \?CCL6
CALL TOO-BAD-BUT,PERSON,STR?145
RFALSE
?CCL6: CALL TOO-BAD-BUT,PERSON,STR?146
RFALSE
?CCL3: GETP PERSON,P?CHARACTER
GET GOAL-TABLES,STACK >GT
GET GT,GOAL-FUNCTION
EQUAL? STACK,X-RETIRES \?CCL8
EQUAL? PERSON,GHOST-NEW,CONFESSED,CAPTOR /?CCL8
GETP PERSON,P?CHARACTER
EQUAL? VARIATION,STACK /?CCL8
ZERO? OBJ /?CTR7
FSET? OBJ,PERSONBIT /?CTR7
FSET? OBJ,RMUNGBIT /?CCL8
?CTR7: CALL TOO-BAD-BUT,PERSON,STR?147
RFALSE
?CCL8: EQUAL? PERSON,BUTLER \?CCL17
EQUAL? PRSA,V?ASK-FOR /?PRD20
GET GT,GOAL-S
ZERO? STACK /?CCL17
?PRD20: EQUAL? PRSA,V?THANKS,V?TAKE,V?SORRY /?CCL17
EQUAL? PRSA,V?NO,V?YES /?CCL17
EQUAL? PRSO,DINNER,LUGGAGE /?CCL17
CALL BUTLER-SORRY
RFALSE
?CCL17: CALL ANGRY-REJECT?,PERSON,OBJ >N
ZERO? N /?CND1
EQUAL? N,1 \?CCL28
PUSH STR?70
JUMP ?CND26
?CCL28: PUSH STR?69
?CND26: CALL TOO-BAD-BUT,PERSON,STACK
RFALSE
?CND1: GET GT,GOAL-S
ZERO? STACK /?CND29
GET GT,ATTENTION-SPAN >ATT
PUT GT,ATTENTION,ATT
ZERO? ATT \?CCL33
PUT GT,GOAL-ENABLE,1
GET LDESC-STRINGS,17
CALL TOO-BAD-BUT,PERSON,STACK
RFALSE
?CCL33: PUT GT,GOAL-ENABLE,0
?CND29: SET 'QCONTEXT,PERSON
GETP PERSON,P?LDESC
EQUAL? STACK,21 /TRUE
PUTP PERSON,P?LDESC,12
RTRUE
.FUNCT ANGRY-REJECT?,PERSON,OBJ,N
EQUAL? PERSON,GHOST-NEW /FALSE
GETP PERSON,P?LINE >N
ZERO? N /FALSE
EQUAL? PRSA,V?TELL,V?SORRY,V?FORGIVE /FALSE
EQUAL? PRSA,V?GIVE \?CCL9
EQUAL? PRSI,PERSON /FALSE
?CCL9: CALL EVIDENCE?,OBJ,PERSON
ZERO? STACK \FALSE
RETURN N
.FUNCT WHERE?,PER,X=0,CAP=0,?TMP1
IN? PER,HERE /FALSE
ZERO? X \?CND4
PRINTC 44
CALL CORRIDOR-LOOK,PER >X
?CND4: ZERO? CAP \?CND8
PRINTC 32
?CND8: EQUAL? X,P?DOWN \?CCL12
ZERO? CAP \?PRG18
PRINTC 100
JUMP ?PRG20
?PRG18: PRINTC 68
?PRG20: PRINTI "ownstairs"
RTRUE
?CCL12: EQUAL? X,P?IN \?CCL23
ZERO? CAP \?PRG29
PRINTI "in"
JUMP ?CND24
?PRG29: PRINTI "In"
?CND24: GETP PER,P?CHARACTER >?TMP1
LOC PER
CALL TELL-HIS-HER-BEDROOM,?TMP1,STACK
RTRUE
?CCL23: EQUAL? X,P?OUT \?CCL32
ZERO? CAP \?PRG38
PRINTC 106
JUMP ?PRG40
?PRG38: PRINTC 74
?PRG40: PRINTI "ust outside"
RTRUE
?CCL32: ZERO? CAP \?PRG47
PRINTC 116
JUMP ?PRG49
?PRG47: PRINTC 84
?PRG49: PRINTI "o the "
CALL DIR-PRINT,X
RTRUE
.FUNCT DIR-PRINT,DIR,CNT=0,TBL,X
ZERO? DIR \?CND1
PRINTI "out of view"
RTRUE
?CND1: SET 'TBL,DIR-STRINGS
?PRG5: GET TBL,CNT >X
ZERO? X \?CCL9
PRINTI "out of view"
RTRUE
?CCL9: EQUAL? X,DIR \?CND7
ADD CNT,1
GET TBL,STACK
PRINT STACK
RTRUE
?CND7: ADD CNT,2 >CNT
JUMP ?PRG5
.FUNCT OPP-DIR,DIR,CNT=0,X
?PRG1: GET DIR-STRINGS,CNT >X
ZERO? X /FALSE
EQUAL? X,DIR \?CND3
MOD CNT,4
ZERO? STACK \?CCL9
ADD CNT,2
GET DIR-STRINGS,STACK
RSTACK
?CCL9: SUB CNT,2
GET DIR-STRINGS,STACK
RSTACK
?CND3: ADD CNT,2 >CNT
JUMP ?PRG1
.FUNCT I-TOUR,GARG=0,L
GET TOUR-PATH,TOUR-INDEX >L
ZERO? L \?CND1
EQUAL? FOLLOWER,FRIEND,LORD \FALSE
SET 'FOLLOWER,0
RFALSE
?CND1: EQUAL? HERE,GREAT-HALL \?CND5
FSET? DOCTOR,TOUCHBIT /?CND5
CALL QUEUE,I-TOUR,3
MOVE DOCTOR,HERE
CALL DOCTOR-D >L
SET 'TOUR-FORCED,FALSE-VALUE
RETURN L
?CND5: INC 'TOUR-INDEX
SET 'AWAITING-REPLY,FALSE-VALUE
CALL MAKE-ALL-PEOPLE,0
CALL QUEUED?,I-FOUND-IT
ZERO? STACK \?CND9
ZERO? TOUR-FORCED \?CND9
CRLF
?CND9: SET 'FOUND-IT,FALSE-VALUE
CALL QUEUE,I-FOUND-IT,0
EQUAL? L,GALLERY \?PRG48
PRINTI """You two will have time to chat later,"" says "
PRINTD FRIEND
PRINTI ", ""but you must excuse us now, "
EQUAL? QCONTEXT,FALSE-VALUE,FRIEND,BUTLER /?CCL19
PRINTD QCONTEXT
JUMP ?PRG20
?CCL19: PRINTD DOCTOR
?PRG20: PRINTI ", while I show "
CALL PRINT-NAME,FIRST-NAME
PRINTI " up to "
ZERO? GENDER-KNOWN \?CCL24
PRINTI "the "
CALL PRINT-COLOR
JUMP ?PRG33
?CCL24: FSET? PLAYER,FEMALE \?PRG31
PRINTI "her"
JUMP ?PRG33
?PRG31: PRINTI "his"
?PRG33: PRINTI " bedroom. I'm sure "
ZERO? GENDER-KNOWN \?CCL37
PRINTI "our guest"
JUMP ?PRG46
?CCL37: FSET? PLAYER,FEMALE \?PRG44
PRINTI "she"
JUMP ?PRG46
?PRG44: PRINTI "he"
?PRG46: PRINTI " wants to freshen up for dinner!"""
CRLF
?PRG48: PRINTD FRIEND
PRINTI " guides you "
EQUAL? L,GALLERY \?PRG55
PUTP LORD,P?LDESC,13
PUTP DEB,P?LDESC,13
PUTP OFFICER,P?LDESC,13
PRINTI "up to"
JUMP ?PRG57
?PRG55: PRINTI "into"
?PRG57: CALL PRINTT,L
PRINTI ".
"
FSET FRIEND,RMUNGBIT
CALL THIS-IS-IT,FRIEND
MOVE FRIEND,L
EQUAL? L,GALLERY,YOUR-ROOM \?CND59
PUTP FRIEND,P?LINE,0
PRINTI "She says, """
EQUAL? L,GALLERY \?PRG68
PRINTI "I know it's confusing, but the British call this the 'first' floor. We just left the 'ground' floor."""
CRLF
JUMP ?CND59
?PRG68: PRINTI "You'll be sleeping in the same room that Queen Victoria slept in!"""
CRLF
?CND59: EQUAL? L,GALLERY,YOUR-ROOM /?CND70
FSET? LORD,TOUCHBIT \?CND72
FSET LORD,RMUNGBIT
?CND72: MOVE LORD,L
PUT FOLLOW-LOC,LORD-C,L
?CND70: SET 'WINNER,PLAYER
CALL GOTO,L,TRUE-VALUE,FALSE-VALUE
EQUAL? L,YOUR-ROOM /?CCL76
CALL QUEUE,I-TOUR,3
JUMP ?CND74
?CCL76: EQUAL? FOLLOWER,FRIEND,LORD \?CND77
SET 'FOLLOWER,0
?CND77: IN? BUTLER,L \?CND74
LOC OFFICER
CALL ESTABLISH-GOAL,FRIEND,STACK
CALL TAMARA-LEAVES-YOU
?CND74: SET 'TOUR-FORCED,FALSE-VALUE
RETURN 2
.FUNCT I-FRIEND-GREETS,GARG=0
PRINTI "When a door opens in the castle"
FSET? FRONT-GATE,OPENBIT /?PRG7
FSET FRONT-GATE,OPENBIT
PRINTI " and the "
PRINTD FRONT-GATE
PRINTI " creaks open"
?PRG7: PRINTI ", you decide to "
EQUAL? HERE,COURTYARD /?PRG13
MOVE CAR,COURTYARD
PRINTI "drive through the gate and "
?PRG13: PRINTI "get out of the car."
CRLF
CALL GOTO,COURTYARD
RTRUE
.FUNCT BUTLER-APPEARS,GARG=0,LL,L
EQUAL? GARG,G-REACHED \FALSE
GETP BUTLER,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-FUNCTION,BUTLER-FETCHES
PUTP BUTLER,P?LDESC,6
FSET? COURTYARD,TOUCHBIT /?CCL6
CALL ESTABLISH-GOAL,BUTLER,COURTYARD
RFALSE
?CCL6: LOC BUTLER >L
CALL META-LOC,LUGGAGE >LL
EQUAL? LL,YOUR-ROOM,YOUR-BATHROOM \?CCL9
EQUAL? FOLLOWER,FRIEND,LORD \?CND10
SET 'FOLLOWER,0
?CND10: LOC BUTLER
CALL ESTABLISH-GOAL,BUTLER,STACK
RFALSE
?CCL9: EQUAL? LL,L \?CCL13
CALL BUTLER-FETCHES,G-REACHED
RFALSE
?CCL13: CALL ESTABLISH-GOAL,BUTLER,LL
RFALSE
.FUNCT BUTLER-FETCHES,GARG=0,L,LL,GT
LOC BUTLER >L
CALL META-LOC,LUGGAGE >LL
GETP BUTLER,P?CHARACTER
GET GOAL-TABLES,STACK >GT
PUTP BUTLER,P?LDESC,6
EQUAL? LL,YOUR-ROOM,YOUR-BATHROOM \?CCL3
EQUAL? FOLLOWER,FRIEND,LORD \?CND4
SET 'FOLLOWER,0
?CND4: PUT GT,GOAL-FUNCTION,BUTLER-CARRIES
LOC BUTLER
CALL ESTABLISH-GOAL,BUTLER,STACK
RFALSE
?CCL3: EQUAL? L,LL \?CCL7
IN? LUGGAGE,BUTLER /?CCL7
PUT GT,GOAL-FUNCTION,BUTLER-CARRIES
CALL ESTABLISH-GOAL,BUTLER,YOUR-ROOM
FCLEAR LUGGAGE,OPENBIT
MOVE LUGGAGE,BUTLER
MOVE CAR,COURTYARD
EQUAL? L,HERE \FALSE
FSET? BUTLER,NDESCBIT /FALSE
CALL HE-SHE-IT,BUTLER,TRUE-VALUE
PRINTI " takes "
PRINTD LUGGAGE
PRINTI ".
"
RFALSE
?CCL7: EQUAL? GARG,G-REACHED \FALSE
FSET? COURTYARD,TOUCHBIT \?CCL20
CALL META-LOC,LUGGAGE
CALL ESTABLISH-GOAL,BUTLER,STACK
RFALSE
?CCL20: CALL ESTABLISH-GOAL,BUTLER,COURTYARD
RFALSE
.FUNCT TAMARA-LEAVES-YOU
CALL HE-SHE-IT,FRIEND,TRUE-VALUE
PRINTI " turns to leave, saying, ""Here's "
PRINTD BUTLER
IN? LUGGAGE,BUTLER \?PRG7
PRINTI " with "
PRINTD LUGGAGE
?PRG7: PRINTI ", so I'll leave you to rest or freshen up, "
CALL PRINT-NAME,FIRST-NAME
ZERO? STACK /?PRG13
PRINTC 46
?PRG13: PRINTR " Dinner's at eight, by the way -- or whenever you hear the gong."""
.FUNCT BUTLER-CARRIES,GARG=0,L,LL=0
LOC BUTLER >L
EQUAL? GARG,G-ENROUTE \?CCL3
EQUAL? L,FOYER \FALSE
FCLEAR FRONT-DOOR,OPENBIT
RFALSE
?CCL3: EQUAL? GARG,G-REACHED \FALSE
GETP BUTLER,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-ENABLE,0
CALL QUEUE,I-BUTLER-HINTS,7
CALL QUEUE,I-BUTLER-COOKS,9
PUTP BUTLER,P?LDESC,9
FCLEAR BUTLER,NDESCBIT
IN? LUGGAGE,BUTLER \?CND8
SET 'LL,TRUE-VALUE
MOVE LUGGAGE,BED
?CND8: CALL QUEUED?,I-TOUR
ZERO? STACK \?CND10
EQUAL? FRIEND,FOLLOWER /?CND10
LOC OFFICER
CALL ESTABLISH-GOAL,FRIEND,STACK
?CND10: EQUAL? L,HERE \FALSE
IN? FRIEND,HERE \?PRG21
EQUAL? FRIEND,FOLLOWER /?PRG21
CALL TAMARA-LEAVES-YOU
?PRG21: PRINTI "The butler enters"
ZERO? LL /?CND23
PRINTI " with "
PRINTD LUGGAGE
PRINTI " and lays it on the bed"
?CND23: SET 'QCONTEXT,BUTLER
CALL THIS-IS-IT,BUTLER
FSET BUTLER,TOUCHBIT
PUTP BUTLER,P?LDESC,12
SET 'AWAITING-REPLY,BUTLER-1-R
CALL QUEUE,I-REPLY,CLOCKER-RUNNING
PRINTI ".
""I regret to say, "
CALL TITLE-NAME
PRINTI ", that the maid will be unable to unpack for you, due to the arrangements for the late Lord Lionel's memorial birthday dinner,"" he apologizes. """
GET QUESTIONS,AWAITING-REPLY
PRINT STACK
PRINTI """
"
RETURN 2
.FUNCT I-BUTLER-HINTS,GARG=0,SAID=0
EQUAL? AWAITING-REPLY,BUTLER-1-R,BUTLER-2-R /?CTR2
EQUAL? AWAITING-REPLY,BUTLER-3-R,BUTLER-4-R \?CCL3
?CTR2: CALL QUEUE,I-BUTLER-HINTS,1
RETURN SAID
?CCL3: LESS? 2,BUTLER-HINTS-COUNTER \?CCL7
CALL QUEUE,I-BUTLER-HINTS,0
RFALSE
?CCL7: LOC BUTLER
EQUAL? HERE,STACK \?CCL9
GETP BUTLER,P?LINE
ZERO? STACK \?CCL9
SET 'SAID,TRUE-VALUE
GETP BUTLER,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,ATTENTION,5
INC 'BUTLER-HINTS-COUNTER
CALL QUEUE,I-BUTLER-HINTS,2
SET 'QCONTEXT,BUTLER
CALL THIS-IS-IT,BUTLER
PUTP BUTLER,P?LDESC,12
EQUAL? 1,BUTLER-HINTS-COUNTER \?CCL14
SET 'AWAITING-REPLY,BUTLER-2-R
CALL QUEUE,I-REPLY,CLOCKER-RUNNING
PRINTD BUTLER
PRINTI " coughs diffidently and asks, """
CALL TITLE-NAME
PRINTI "? "
GET QUESTIONS,AWAITING-REPLY
PRINT STACK
PRINTI """
"
SET 'SAID,M-FATAL
RETURN SAID
?CCL14: EQUAL? 2,BUTLER-HINTS-COUNTER \?CCL18
IN? MACE,BUTLER \FALSE
SET 'AWAITING-REPLY,BUTLER-3-R
CALL QUEUE,I-REPLY,CLOCKER-RUNNING
PRINTI "
"""
GET QUESTIONS,AWAITING-REPLY
PRINT STACK
PRINTI """ adds "
PRINTD BUTLER
PRINTI ".
"
SET 'SAID,M-FATAL
RETURN SAID
?CCL18: EQUAL? 3,BUTLER-HINTS-COUNTER \?CND1
CALL I-BUTLER-COOKS
FSET? SECRET-YOUR-DOOR,OPENBIT /?PRG38
PRINTI """Ah, by the way, "
CALL TITLE-NAME
PRINTI " -- s"
CALL BUTLER-MIRROR-STORY
PRINTI "Without explaining further, "
PRINTD BUTLER
EQUAL? HERE,YOUR-ROOM \?CCL33
PUT FOLLOW-LOC,BUTLER-C,GALLERY
MOVE BUTLER,GALLERY
PUTP BUTLER,P?LDESC,6
PRINTI " abruptly leaves the room."
CRLF
RETURN SAID
?CCL33: PUTP BUTLER,P?LDESC,20
PRINTI " turns to his work."
CRLF
RETURN SAID
?PRG38: PRINTI """I hope you have a pleasant stay with us, "
CALL TITLE-NAME
ZERO? STACK /?PRG44
PRINTC 46
?PRG44: PRINTI " Dinner is at eight."""
CRLF
RETURN SAID
?CCL9: IN? BUTLER,LOCAL-GLOBALS /?CND1
CALL QUEUE,I-BUTLER-HINTS,1
?CND1: RETURN SAID
.FUNCT I-BUTLER-COOKS,GARG=0,VAL=0
EQUAL? AWAITING-REPLY,BUTLER-1-R,BUTLER-2-R /?CTR2
EQUAL? AWAITING-REPLY,BUTLER-3-R,BUTLER-4-R /?CTR2
EQUAL? 3,BUTLER-HINTS-COUNTER /?CCL3
CALL I-BUTLER-HINTS >VAL
ZERO? VAL /?CCL3
?CTR2: CALL QUEUE,I-BUTLER-COOKS,2
RETURN VAL
?CCL3: IN? DINNER,KITCHEN \?CCL10
PUTP BUTLER,P?LDESC,17
GETP BUTLER,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-FUNCTION,BUTLER-COOKS
CALL ESTABLISH-GOAL,BUTLER,KITCHEN
RETURN VAL
?CCL10: CALL BUTLER-COOKS,G-REACHED
RETURN VAL
.FUNCT BUTLER-COOKS,GARG=0,N
EQUAL? GARG,G-REACHED \FALSE
PUTP BUTLER,P?LDESC,11
SUB 472,PRESENT-TIME >N
GRTR? N,0 /?CND4
SET 'N,1
?CND4: IN? DINNER,KITCHEN \?CCL8
CALL QUEUE,I-BUTLER-SERVES,N
RFALSE
?CCL8: GETP BUTLER,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-FUNCTION,BUTLER-LEAVES
PUTP BUTLER,P?LDESC,17
CALL ESTABLISH-GOAL,BUTLER,KITCHEN
RFALSE
.FUNCT I-BUTLER-SERVES,GARG=0
MOVE DINNER,BUTLER
PUTP BUTLER,P?LDESC,17
GETP BUTLER,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-FUNCTION,BUTLER-SERVES
CALL ESTABLISH-GOAL,BUTLER,DINING-ROOM
IN? BUTLER,HERE \FALSE
PRINTD BUTLER
PRINTR " takes dinner."
.FUNCT BUTLER-SERVES,GARG=0
EQUAL? GARG,G-REACHED \FALSE
EQUAL? HERE,DINING-ROOM \?CND4
CALL HE-SHE-IT,BUTLER,TRUE-VALUE
PRINTI " appears"
?CND4: IN? DINNER,BUTLER \?CND8
EQUAL? HERE,DINING-ROOM \?CND10
PRINTI ", puts dinner on the "
PRINTD SIDEBOARD
?CND10: MOVE DINNER,SIDEBOARD
?CND8: IN? LETTER,BUTLER \?CND14
EQUAL? HERE,DINING-ROOM \?CND16
FCLEAR LETTER,NDESCBIT
PRINTI ", leaves a note on Jack's napkin"
?CND16: MOVE LETTER,TABLE-DINING
FSET LETTER,TAKEBIT
?CND14: FSET CLUE-1,TAKEBIT
PUTP BUTLER,P?LDESC,17
GETP BUTLER,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-FUNCTION,BUTLER-LEAVES
CALL ESTABLISH-GOAL,BUTLER,KITCHEN
EQUAL? HERE,DINING-ROOM \FALSE
PRINTR ", and looks around the room."
.FUNCT X-WAITS,GARG=0
EQUAL? GARG,G-REACHED \FALSE
PUTP GOAL-PERSON,P?LDESC,9
RFALSE
.FUNCT I-DINNER,GARG=0,N,CH,SAID=0
SET 'N,MASS-COUNTER
?PRG1: IGRTR? 'N,DEB-C \?CCL5
SET 'MASS-SAID,FALSE-VALUE
SET 'MASS-COUNTER,0
CALL QUEUED?,I-DINNER-SIT
ZERO? STACK \FALSE
CALL QUEUE,I-DINNER-SIT,5
RFALSE
?CCL5: EQUAL? N,FRIEND-C \?CND3
CALL QUEUED?,I-TOUR
ZERO? STACK /?CND3
CALL QUEUE,I-TOUR,1
RFALSE
?CND3: GET CHARACTER-TABLE,N >CH
EQUAL? CH,FOLLOWER \?CND11
SET 'FOLLOWER,0
?CND11: EQUAL? CH,SHOOTER /?PRG1
FSET? CH,MUNGBIT /?PRG1
IN? CH,DINING-ROOM /?PRG1
CALL QUEUE,I-DINNER,1
SET 'MASS-COUNTER,N
GET GOAL-TABLES,N
PUT STACK,GOAL-FUNCTION,X-WAITS
CALL ESTABLISH-GOAL,CH,DINING-ROOM
CALL META-LOC,CH
EQUAL? STACK,HERE /?PRD21
RETURN SAID
?PRD21: EQUAL? HERE,DINING-ROOM /?CND18
ZERO? MASS-SAID /?CCL19
EQUAL? CH,FOLLOWER /?CCL19
RETURN SAID
?CCL19: SET 'SAID,TRUE-VALUE
SET 'MASS-SAID,TRUE-VALUE
EQUAL? CH,FOLLOWER \?PRG27
SET 'FOLLOWER,0
?PRG27: CALL HE-SHE-IT,CH,TRUE-VALUE
PRINTI " says, ""It's time for dinner now. "
EQUAL? NOW-WEARING,DINNER-OUTFIT \?PRG34
ZERO? WASHED \?PRG36
?PRG34: PRINTI "I'll see you in"
JUMP ?PRG38
?PRG36: PRINTI "Let's go to"
?PRG38: PRINTI " the "
PRINTD DINING-ROOM
PRINTI "."""
CRLF
?CND18: RETURN SAID
.FUNCT BUTLER-RINGS-BELL?,FAKE=0,P
ZERO? FAKE \?CCL3
ZERO? BUTLER-RANG-BELL? \FALSE
?CCL3: SET 'BUTLER-RANG-BELL?,TRUE-VALUE
CALL QUEUE,I-DINNER,1
FSET CLUE-1,TAKEBIT
ZERO? FAKE \?PRG18
EQUAL? HERE,KITCHEN \?PRG18
PRINTD BUTLER
GET FOLLOW-LOC,BUTLER-C
EQUAL? HERE,STACK /?PRG16
PRINTI " appears and"
?PRG16: PRINTI " pushes a hidden button. "
?PRG18: PRINTI "Suddenly, the dinner bell sounds"
PRINTR "."
.FUNCT BUTLER-LEAVES,GARG=0,L,VAL=0
EQUAL? GARG,G-REACHED \FALSE
CALL BUTLER-RINGS-BELL? >VAL
MOVE BUTLER,LOCAL-GLOBALS
PUT FOLLOW-LOC,BUTLER-C,0
EQUAL? HERE,DINING-ROOM \?CCL6
CALL QUEUE,I-DINNER-SIT,1
JUMP ?CND4
?CCL6: EQUAL? HERE,KITCHEN \?CND4
PRINTI "Then he "
IN? MACE,BUTLER \?PRG14
PRINTI "drops "
CALL PRINTA,MACE
PRINTI ", "
?PRG14: PRINTI "bids you good night, ducks into the areaway, locks the door behind him, and leaves the castle."
CRLF
SET 'VAL,M-FATAL
?CND4: IN? MACE,BUTLER \?CND16
FCLEAR MACE,NDESCBIT
MOVE MACE,KITCHEN
?CND16: RETURN VAL
.FUNCT I-DINNER-SIT,GARG=0,SAID=0
ZERO? DINNER-SAT \FALSE
FSET? DINNER,TAKEBIT /?CCL4
CALL POPULATION,DINING-ROOM,PLAYER
SUB DINNER-FOR,STACK
LESS? 1,STACK \?CND1
?CCL4: LESS? DINNER-SIT-COUNTER,20 \?CND7
INC 'DINNER-SIT-COUNTER
MOD DINNER-SIT-COUNTER,8
ZERO? STACK \?CND7
EQUAL? HERE,KITCHEN /?CND7
CALL BUTLER-RINGS-BELL?,TRUE-VALUE
RTRUE
?CND7: CALL QUEUE,I-DINNER-SIT,1
RFALSE
?CND1: SET 'DINNER-SAT,TRUE-VALUE
SUB LIONEL-TIME,PRESENT-TIME
CALL QUEUE,I-LIONEL-SPEAKS,STACK
CALL MAKE-ALL-PEOPLE,10,DINING-ROOM
FSET DINNER,TAKEBIT
FCLEAR DINNER,TRYTAKEBIT
MOVE DINNER-2,TABLE-DINING
CALL BUTLER-RINGS-BELL?
EQUAL? DINING-ROOM,HERE \?CCL15
SET 'SAID,M-FATAL
MOVE DINNER,TABLE-DINING
PRINTD DEB
PRINTI " playfully suggests"
EQUAL? VARIATION,FRIEND-C \?PRG22
CALL THIS-IS-IT,LORD
PRINTI " to "
PRINTD LORD
?PRG22: PRINTI " that everyone form a self-serve food line at the buffet. "
CALL HE-SHE-IT,LORD,TRUE-VALUE
PRINTI " and the others good-naturedly accept her suggestion."
CRLF
IN? LETTER,TABLE-DINING \?CND24
PRINTI "As "
PRINTD LORD
PRINTI " takes his place as host, he notices a note lying on his napkin. He picks it up and reads it with a troubled expression."
CRLF
?CND24: CALL DINNER-TALK,28
JUMP ?CND13
?CCL15: SET 'MISSED-DINNER,TRUE-VALUE
?CND13: IN? LETTER,TABLE-DINING /?CCL29
RETURN SAID
?CCL29: MOVE LETTER,LORD
FCLEAR LETTER,NDESCBIT
RETURN SAID
.FUNCT I-LIONEL-SPEAKS,GARG=0,SAID=0,P
DEC 'LIONEL-SPEAKS-COUNTER
ZERO? LIONEL-SPEAKS-COUNTER /?CCL3
CALL QUEUE,I-LIONEL-SPEAKS,2
JUMP ?CND1
?CCL3: CALL QUEUE,I-WITHDRAW,9
?CND1: SET 'P,SEARCHER
ZERO? P /?CND4
IN? P,DINING-ROOM \?CCL5
IN? CLUE-1,SIDEBOARD \?CCL5
FSET? CLUE-1,TOUCHBIT \?CND4
?CCL5: SET 'P,FALSE-VALUE
?CND4: EQUAL? 5,LIONEL-SPEAKS-COUNTER \?CCL13
MOVE VOICE,DINING-ROOM
CALL MAKE-ALL-PEOPLE,16,DINING-ROOM
JUMP ?CND11
?CCL13: EQUAL? 1,LIONEL-SPEAKS-COUNTER \?CCL15
FCLEAR CLUE-2,NDESCBIT
FCLEAR CLUE-2,SECRETBIT
FCLEAR CLUE-1,SECRETBIT
JUMP ?CND11
?CCL15: ZERO? LIONEL-SPEAKS-COUNTER \?CND11
ZERO? P /?CND17
FSET CLUE-1,TAKEBIT
FCLEAR CLUE-1,NDESCBIT
MOVE CLUE-1,P
?CND17: MOVE VOICE,LOCAL-GLOBALS
CALL MAKE-ALL-PEOPLE,18,DINING-ROOM
?CND11: EQUAL? DINING-ROOM,HERE /?CCL20
RETURN SAID
?CCL20: SET 'SAID,M-FATAL
ZERO? LIONEL-FORCED /?CCL23
SET 'LIONEL-FORCED,FALSE-VALUE
JUMP ?CND21
?CCL23: CRLF
?CND21: EQUAL? 5,LIONEL-SPEAKS-COUNTER \?CCL26
CALL THIS-IS-IT,BUST
FSET BUST,OPENBIT
PRINTD LORD
PRINTI " and his guests are startled as an unexpected voice suddenly speaks!
""Good evening, all,"" it says, then breaks into a low chuckle.
""Good Lord!"" Jack gasps. ""That's Uncle "
PRINT LIONELS-VOICE
PRINTI "!""
"
PRINTD DOCTOR
PRINTI " points to"
CALL PRINTT,BUST
PRINTI ". ""There's where it's coming from!"""
CRLF
RETURN SAID
?CCL26: EQUAL? 4,LIONEL-SPEAKS-COUNTER \?CCL30
PRINT LIONELS-VOICE
PRINTI " continues, ""You are all here, I trust, to honor the wish expressed in my will -- that the seven of you should dine together at "
PRINTD CASTLE
PRINTI " on the evening of my birthday."""
CRLF
RETURN SAID
?CCL30: EQUAL? 3,LIONEL-SPEAKS-COUNTER \?CCL34
CALL THIS-IS-IT,ARTIFACT
CALL THIS-IS-IT,LORD
PRINT LIONELS-VOICE
PRINTI " continues, ""As you know, I enjoyed adventuring to remote corners of the world. And doubtless you've all heard of the loss of that valuable artifact, which I brought back from one of my expeditions, have you not?""
The guests nod or mumble vaguely. They all glance toward Jack, as if looking for an official response."
CRLF
RETURN SAID
?CCL34: EQUAL? 2,LIONEL-SPEAKS-COUNTER \?CCL38
PRINT LIONELS-VOICE
PRINTI " goes on, "
EQUAL? LORD-C,VARIATION \?CND41
CALL THIS-IS-IT,LORD
PRINTI """Jack, I'm sure, is only too eager for me to shuffle off this mortal coil so he can inherit the family title and estate. Thus he should be particularly interested in what I'm about to say..."" Once again "
PRINT LIONELS-VOICE
PRINTI " chuckles slyly, then continues."
CRLF
?CND41: CALL THIS-IS-IT,PUNCHBOWL
PRINTI """The truth is that the artifact is not lost, but hidden. Although I am not yet ready to reveal what it is, I suggest you look under the "
PRINTD PUNCHBOWL
PRINTI "."""
CRLF
RETURN SAID
?CCL38: EQUAL? 1,LIONEL-SPEAKS-COUNTER \?CCL48
CALL THIS-IS-IT,CLUE-2
PRINTI """This "
PRINTD CLUE-1
PRINTI " is merely to sharpen your wits,"" "
PRINT LIONELS-VOICE
PRINTI " goes on.
"""
PRINTD LOVER
PRINTI ", my dear: your one goal in life, I believe, is to become Jack's wife, heaven knows why! Not being Cupid, there is little I can do to help. Knowing the others, I suspect each one has private reasons for wanting my "
PRINTD ARTIFACT
PRINTI ". So, for your amusement, I have given a "
PRINTD CLUE-2
PRINTI " to my "
EQUAL? VARIATION,LORD-C \?PRG56
PRINTI "dear friend"
JUMP ?PRG58
?PRG56: PRINTI "heir"
?PRG58: PRINTI ", which may start you down the path to finding it.""
With another sardonic chuckle, "
PRINT LIONELS-VOICE
PRINTI " adds, ""Perhaps, "
EQUAL? VARIATION,LORD-C \?CCL62
CALL THIS-IS-IT,PAINTER
PRINTD PAINTER
JUMP ?PRG67
?CCL62: CALL THIS-IS-IT,LORD
PRINTD LORD
?PRG67: PRINTI ", you would care to SHARE your clue with all the others -- eh, what?"""
CRLF
RETURN SAID
?CCL48: ZERO? LIONEL-SPEAKS-COUNTER /?PRG70
RETURN SAID
?PRG70: PRINT LIONELS-VOICE
PRINTI " finishes, ""So now, my friends, let the game begin!"""
CRLF
ZERO? P /?CND19
PRINTD P
PRINTI " says, ""Well, I for one want to see that "
PRINTD CLUE-1
PRINTI "."" "
CALL THIS-IS-IT,P
CALL HE-SHE-IT,P,TRUE-VALUE
PRINTI " lifts the "
PRINTD PUNCHBOWL
PRINTI " and takes it."
CRLF
?CND19: RETURN SAID
.FUNCT MAKE-ALL-PEOPLE,NUM,RM=0,P,NNUM
ZERO? RM \?CND1
SET 'RM,HERE
?CND1: LESS? NUM,0 \?CND3
SUB 0,NUM >NNUM
?CND3: FIRST? RM >P /?PRG5
?PRG5: ZERO? P /TRUE
FSET? P,PERSONBIT \?CND7
GRTR? NUM,0 \?CCL13
PUTP P,P?LDESC,NUM
JUMP ?CND7
?CCL13: GETP P,P?LDESC
EQUAL? NNUM,STACK \?CND7
PUTP P,P?LDESC,0
?CND7: NEXT? P >P /?PRG5
JUMP ?PRG5
.FUNCT I-WITHDRAW,GARG=0,OBJ,NXT,SAID=0
ZERO? TREASURE-FOUND \?CND1
CALL QUEUE,I-SEARCH,9
GETP SEARCHER,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-FUNCTION,X-SEARCHES
?CND1: SUB BED-TIME,PRESENT-TIME
CALL QUEUE,I-BEDTIME,STACK
EQUAL? HERE,DINING-ROOM,CORR-1,SITTING-ROOM \?CCL5
SET 'P-HIM-OBJECT,FALSE-VALUE
SET 'P-HER-OBJECT,FALSE-VALUE
SET 'SAID,TRUE-VALUE
PRINTI "
Normally the gentlemen would remain at the table to enjoy cigars and port, while the ladies repair to the "
PRINTD DRAWING-ROOM
PRINTI ". But because of tonight's mysterious developments, everyone "
EQUAL? HERE,DINING-ROOM \?PRG13
PRINTI "leaves the "
PRINTD DINING-ROOM
JUMP ?PRG15
?PRG13: PRINTI "goes to the "
PRINTD SITTING-ROOM
?PRG15: PRINTI " by unspoken agreement."
CRLF
JUMP ?CND3
?CCL5: EQUAL? HERE,JACK-ROOM,TAMARA-ROOM,IRIS-ROOM /?CCL17
EQUAL? HERE,WENDISH-ROOM,VIVIEN-ROOM,IAN-ROOM /?CCL17
EQUAL? HERE,HYDE-ROOM \?CND3
?CCL17: CALL ZMEMQ,HERE,CHAR-ROOM-TABLE
SUB STACK,1
GET CHARACTER-TABLE,STACK
LOC STACK
EQUAL? STACK,HERE,LOCAL-GLOBALS /?CND3
SET 'DISCOVERED-HERE,HERE
CALL QUEUE,I-DISCOVERED,1
?CND3: LOC DINNER
FSET? STACK,PERSONBIT \?CND23
MOVE DINNER,TABLE-DINING
?CND23: LOC DINNER-2
FSET? STACK,PERSONBIT \?CND25
MOVE DINNER-2,TABLE-DINING
?CND25: FIRST? DINING-ROOM >OBJ /?KLU37
?KLU37: NEXT? OBJ >NXT /?PRG27
?PRG27: ZERO? NXT /?REP28
FSET? OBJ,PERSONBIT \?CND29
EQUAL? OBJ,PLAYER,CONFESSED,CAPTOR /?CND29
PUTP OBJ,P?LDESC,18
GETP OBJ,P?CHARACTER
PUT FOLLOW-LOC,STACK,SITTING-ROOM
MOVE OBJ,SITTING-ROOM
?CND29: SET 'OBJ,NXT
NEXT? OBJ >NXT /?PRG27
JUMP ?PRG27
?REP28: EQUAL? HERE,DINING-ROOM /?CCL36
RETURN SAID
?CCL36: SET 'WINNER,PLAYER
CALL GOTO,SITTING-ROOM
RETURN SAID
.FUNCT I-SEARCH,GARG=0,SAID=0,GT,L,X=0
LOC SEARCHER >L
EQUAL? L,DISCOVERED-HERE /?CCL2
CALL QUEUED?,I-LIONEL-SPEAKS
ZERO? STACK /?CND1
?CCL2: CALL QUEUE,I-SEARCH,3
RFALSE
?CND1: CALL QUEUE,I-SEARCH,19
RANDOM 6
ADD 1,STACK
GET CHARACTER-TABLE,STACK >X
IN? X,SITTING-ROOM \?CND5
EQUAL? X,FOLLOWER,CONFESSED,CAPTOR /?CND5
GETP X,P?LDESC
EQUAL? STACK,22 /?CND5
PUTP X,P?LDESC,22
EQUAL? HERE,SITTING-ROOM \?CND10
SET 'SAID,TRUE-VALUE
CALL THIS-IS-IT,X
PRINTD X
PRINTI " begins "
GET LDESC-STRINGS,22
PRINT STACK
PRINTC 46
?CND10: NEXT? X >X /?KLU64
?KLU64: ZERO? X /?CND14
FSET? X,PERSONBIT \?CND14
EQUAL? X,PLAYER /?CND14
ZERO? SAID /?CND19
GETP X,P?LDESC
EQUAL? STACK,22 \?CND19
CALL THIS-IS-IT,X
PRINTI " And "
PRINTD X
PRINTI " stops."
?CND19: PUTP X,P?LDESC,13
?CND14: ZERO? SAID /?CND5
CRLF
?CND5: SET 'X,DEB-C
?PRG27: GET CHARACTER-TABLE,X >GT
EQUAL? GT,FOLLOWER /?CND29
CALL META-LOC,GT
EQUAL? STACK,HERE,SITTING-ROOM /?CND29
CALL IN-MOTION?,GT
ZERO? STACK \?CND29
GETP GT,P?LDESC
EQUAL? STACK,7 /?CND29
GET GOAL-TABLES,X
GET STACK,GOAL-FUNCTION
EQUAL? STACK,X-RETIRES,X-SEARCHES /?CND29
GET GOAL-TABLES,X
PUT STACK,GOAL-FUNCTION,NULL-F
CALL ESTABLISH-GOAL,GT,SITTING-ROOM
?CND29: DLESS? 'X,1 \?PRG27
ZERO? CONFESSED \FALSE
GETP SEARCHER,P?CHARACTER
GET GOAL-TABLES,STACK >GT
GET GT,GOAL-FUNCTION
EQUAL? STACK,X-SEARCHES /?PRG42
RETURN SAID
?PRG42: SET 'X,CLUE-LOC
ZERO? X /?CCL46
CALL ZMEMQ,X,SEARCH-ROOMS
ZERO? STACK /?CCL46
SET 'CLUE-LOC,0
JUMP ?CND44
?CCL46: CALL PICK-ONE,SEARCH-ROOMS >X
?CND44: EQUAL? X,L /?PRG42
CALL ESTABLISH-GOAL,SEARCHER,X
EQUAL? HERE,L /?CCL52
RETURN SAID
?CCL52: SET 'SAID,TRUE-VALUE
PRINTI "
Suddenly"
CALL HE-SHE-IT,SEARCHER
PRINTI " heads for the "
EQUAL? HERE,MAZE,GARDEN \?PRG60
PRINTI "exit"
JUMP ?PRG62
?PRG60: PRINTI "door"
?PRG62: PRINTI ", mumbling, ""Please excuse me."""
CRLF
RETURN SAID
.FUNCT X-SEARCHES,GARG=0,VAL=0
EQUAL? GARG,G-REACHED /?CCL2
RETURN VAL
?CCL2: PUTP GOAL-PERSON,P?LDESC,21
RETURN VAL
.FUNCT I-DISCOVERED,GARG=0,VAL=0,L,GT
EQUAL? DISCOVERED-HERE,HERE /?PRD4
RETURN VAL
?PRD4: ZERO? LIONEL-SPEAKS-COUNTER /?CCL2
RETURN VAL
?CCL2: CALL ZMEMQ,HERE,CHAR-ROOM-TABLE
SUB STACK,1 >L
GET CHARACTER-TABLE,L >VAL
ZERO? GARG \?CND6
IN? VAL,HERE /FALSE
FSET? VAL,MUNGBIT /FALSE
EQUAL? VAL,CONFESSED /FALSE
GETP VAL,P?CHARACTER
GET GOAL-TABLES,STACK
GET STACK,GOAL-FUNCTION
EQUAL? STACK,X-RETIRES /FALSE
?CND6: PUT FOLLOW-LOC,L,HERE
CALL QUEUE,I-FOUND-IT,0
EQUAL? VAL,GHOST-NEW \?PRG20
MOVE GHOST-NEW,HERE
CALL GHOST-LURKS
RETURN 2
?PRG20: PRINTI "You freeze as"
FSET? HERE,LOCKED \?PRG27
FCLEAR HERE,LOCKED
PRINTI " a key turns in the lock,"
?PRG27: PRINTI " the door bursts open and"
FCLEAR HERE,OPENBIT
GETP VAL,P?LINE
ADD 1,STACK
PUTP VAL,P?LINE,STACK
PUTP VAL,P?LDESC,4
CALL HE-SHE-IT,VAL
PRINTI " appears. "
CALL HE-SHE-IT,VAL,TRUE-VALUE
PRINTI " stares at you with a shocked look. "
PRINTI """Well! I didn't expect MY room to be searched!"""
CALL HE-SHE-IT,VAL
PRINTI " says angrily. "
LOC VAL >L
MOVE VAL,HERE
GETP VAL,P?CHARACTER
GET GOAL-TABLES,STACK >GT
GET GT,GOAL-S
ZERO? STACK \?CCL38
CALL ESTABLISH-GOAL,VAL,L
JUMP ?CND36
?CCL38: GET GT,GOAL-F
CALL ESTABLISH-GOAL,VAL,STACK
?CND36: PUT GT,GOAL-ENABLE,0
CALL HE-SHE-IT,VAL,TRUE-VALUE
PRINTI " enters the room and closes the door behind"
CALL HIM-HER-IT,VAL
PRINTI ".
"
IN? BLOWGUN,VAL \?CND41
EQUAL? VAL,PAINTER,DOCTOR \?CND41
CALL FIND-FLAG-HERE,PERSONBIT,PLAYER,VAL
ZERO? STACK \?CND41
CALL SETUP-SHOT,VAL
PRINTI "Then"
CALL HE-SHE-IT,VAL
PRINTI " pulls out"
CALL PRINTT,BLOWGUN
PRINTC 33
CRLF
?CND41: SET 'VAL,M-FATAL
RETURN VAL
.FUNCT I-FOUND-PASSAGES,GARG=0,SAID=0,X
FIRST? HERE >X /?KLU12
?KLU12: ZERO? X /?CND1
CALL FOUND-PASSAGES-REPEAT,X,PASSAGE,FOUND-PASSAGES >SAID
?CND1: FSET? HERE,SECRETBIT /?PRD6
RETURN SAID
?PRD6: CALL FIND-FLAG-LG,HERE,DOORBIT >X
ZERO? X /?CND3
CALL DOOR-ROOM,HERE,X >X
ZERO? X /?CND3
FIRST? X >X /?KLU13
?KLU13: ZERO? X /?CND3
CALL FOUND-PASSAGES-REPEAT,X,PASSAGE,FOUND-PASSAGES
ZERO? STACK /?CND3
SET 'SAID,TRUE-VALUE
?CND3: RETURN SAID
.FUNCT FOUND-PASSAGES-REPEAT,PER,OBJ,GL,C,SAID=0
?PRG1: ZERO? PER /?REP2
FSET? PER,PERSONBIT \?CND5
FSET? PER,MUNGBIT /?CND5
PUTP PER,P?LDESC,3
GETP PER,P?CHARACTER >C
GET GL,C
ZERO? STACK \?CND5
PUT GL,C,TRUE-VALUE
EQUAL? C,VARIATION /?CND5
PUTP PER,P?LINE,0
ZERO? SAID \?CND5
SET 'SAID,PER
EQUAL? OBJ,PASSAGE \?CND5
CALL GOOD-SHOW,PER,OBJ
?CND5: NEXT? PER >PER /?PRG1
JUMP ?PRG1
?REP2: RETURN SAID
.FUNCT I-BEDTIME,GARG=0,N,CH,VAL=0,L
SET 'N,MASS-COUNTER
IGRTR? 'N,DEB-C \?CND1
SET 'MASS-SAID,FALSE-VALUE
SET 'MASS-COUNTER,0
RFALSE
?CND1: CALL QUEUE,I-BEDTIME,5
SET 'MASS-COUNTER,N
GET CHARACTER-TABLE,N >CH
EQUAL? CH,SEARCHER \?CND3
CALL QUEUE,I-SEARCH,0
?CND3: EQUAL? CH,CONFESSED,CAPTOR /FALSE
FSET? CH,MUNGBIT /FALSE
GET GOAL-TABLES,N
PUT STACK,GOAL-FUNCTION,X-RETIRES
ADD 1,N
GET CHAR-ROOM-TABLE,STACK
CALL ESTABLISH-GOAL,CH,STACK
CALL META-LOC,CH >L
CALL OUTSIDE?,L
ZERO? STACK \?CND9
CALL FIND-FLAG,L,PERSONBIT,CH
ZERO? STACK \?CND9
FCLEAR L,ONBIT
?CND9: EQUAL? L,HERE \?CND13
ZERO? MASS-SAID /?CCL14
EQUAL? CH,FOLLOWER \?CND13
?CCL14: SET 'MASS-SAID,TRUE-VALUE
SET 'VAL,TRUE-VALUE
PUTP CH,P?LDESC,17
PRINTD CH
PRINTI " says, ""It's time for bed now. I'll see you in the morning."""
CRLF
?CND13: EQUAL? CH,FOLLOWER /?CCL22
RETURN VAL
?CCL22: SET 'FOLLOWER,0
RETURN VAL
.FUNCT FRIEND-PASSAGE-STORY
PRINTI """Guess what? I just discovered a "
PRINTD PASSAGE
PRINTR " in my room! But it's so late that I'm going to bed now. We'll explore in the morning."""
.FUNCT X-RETIRES,GARG=0,L,RM,C,VAL=0,OBJ,GT
LOC GOAL-PERSON >L
EQUAL? GOAL-PERSON,CONFESSED,CAPTOR /FALSE
EQUAL? GARG,G-IMPATIENT \?CCL5
EQUAL? L,HERE \?CND1
SET 'VAL,TRUE-VALUE
CALL HE-SHE-IT,GOAL-PERSON,TRUE-VALUE
PRINTI " says, ""I'm dead tired. Good night."""
CRLF
RETURN VAL
?CCL5: EQUAL? GARG,G-REACHED /?CCL10
RETURN VAL
?CCL10: GETP GOAL-PERSON,P?CHARACTER >C
ADD 1,C
GET CHAR-ROOM-TABLE,STACK >RM
GET GOAL-TABLES,C >GT
EQUAL? L,RM /?CND11
FSET? L,SECRETBIT /?CND13
CALL ESTABLISH-GOAL,GOAL-PERSON,RM
RFALSE
?CND13: CALL FIND-FLAG-LG,L,DOORBIT >OBJ
ZERO? OBJ /?CND15
FSET OBJ,OPENBIT
?CND15: CALL MOVE-PERSON,GOAL-PERSON,RM >VAL
ZERO? OBJ /?CND11
FCLEAR OBJ,OPENBIT
?CND11: CALL FIND-FLAG,RM,SURFACEBIT >OBJ
ZERO? OBJ /?CCL21
CALL ROB,GOAL-PERSON,OBJ
JUMP ?CND19
?CCL21: CALL ROB,GOAL-PERSON,RM
?CND19: FCLEAR RM,OPENBIT
FSET RM,LOCKED
EQUAL? VARIATION,LORD-C \?CND22
SET 'RM,LIMBO
?CND22: EQUAL? GOAL-PERSON,FRIEND \?CCL26
EQUAL? VARIATION,FRIEND-C /?CCL26
GET FOUND-PASSAGES,PLAYER-C
ZERO? STACK \?CCL26
ZERO? FRIEND-FOUND-PASSAGES \?CCL26
GETP HERE,P?LINE
ZERO? STACK /?CCL26
ZERO? NOW-WEARING /?CCL26
FSET? HERE,SECRETBIT /?CCL26
GETP HERE,P?CHARACTER
EQUAL? STACK,1 /?CCL26
EQUAL? HERE,BACKSTAIRS /?CCL26
FCLEAR SECRET-TAMARA-DOOR,SECRETBIT
SET 'VAL,TRUE-VALUE
EQUAL? PRSA,V?SEARCH-FOR,V?SEARCH /?CND36
CRLF
?CND36: EQUAL? HERE,TAMARA-ROOM \?CCL40
GET GT,ATTENTION-SPAN
PUT GT,ATTENTION,STACK
SET 'WINNER,FRIEND
GET FOLLOW-LOC,FRIEND-C
EQUAL? HERE,STACK \?PRG46
PRINTI "Preparing for bed,"
PRINTD FRIEND
JUMP ?PRG48
?PRG46: PRINTD FRIEND
PRINTI " enters and"
?PRG48: PRINTI " accidentally touches the bedpost. "
CALL THIS-IS-IT,FRIEND
CALL OPEN-SECRET,STR?161,STR?162,SECRET-TAMARA-DOOR
SET 'WINNER,PLAYER
JUMP ?CND24
?CCL40: CALL QUEUED?,I-SHOT
ZERO? STACK \?CND24
FSET PASSAGE,SEENBIT
FSET SECRET-TAMARA-DOOR,OPENBIT
MOVE FRIEND,HERE
PUT FOLLOW-LOC,FRIEND-C,HERE
PUT GT,GOAL-FUNCTION,X-RETIRES
CALL ESTABLISH-GOAL,FRIEND,TAMARA-ROOM
PRINTI "Suddenly "
PRINTD FRIEND
PRINTI " appears and says, "
CALL FRIEND-PASSAGE-STORY
JUMP ?CND24
?CCL26: CALL TIME-FOR-GHOST?,RM
ZERO? STACK /?CCL54
CALL QUEUE,I-SEARCH,0
EQUAL? VILLAIN-PER,LOVER \?CCL57
PUTP DEB,P?LDESC,24
GET GT,ATTENTION-SPAN
PUT GT,ATTENTION,STACK
LOC LOVER
CALL DRESS-GHOST,STACK,LOVER-C
GET GOAL-TABLES,GHOST-NEW-C
PUT STACK,GOAL-FUNCTION,LOVER-XFER
CALL ESTABLISH-GOAL,GHOST-NEW,BASEMENT
CALL MOVE-PERSON,GHOST-NEW,LOVER-PATH >VAL
JUMP ?CND24
?CCL57: CALL DRESS-GHOST,RM,C
CALL GHOST-INTO-PASSAGE,C >VAL
CALL ESTABLISH-GOAL,GHOST-NEW,YOUR-CLOSET
JUMP ?CND24
?CCL54: FSET? GOAL-PERSON,FEMALE \?CCL60
PUTP GOAL-PERSON,P?LDESC,24
JUMP ?CND58
?CCL60: PUTP GOAL-PERSON,P?LDESC,25
?CND58: PUT GT,ATTENTION-SPAN,5
PUT GT,ATTENTION,5
?CND24: SET 'FRIEND-FOUND-PASSAGES,TRUE-VALUE
?CND1: RETURN VAL
.FUNCT GHOST-INTO-PASSAGE,C,RM
ADD 1,C
GET CHAR-CLOSET-TABLE,STACK >RM
MOVE GHOST-NEW,RM
EQUAL? RM,HERE \FALSE
CALL FIND-FLAG-LG,RM,DOORBIT,SECRETBIT >RM
FSET RM,OPENBIT
CRLF
CALL START-SENTENCE,RM
PRINTI " bursts open!
"
RETURN M-FATAL
.FUNCT TIME-FOR-GHOST?,RM,X
EQUAL? VILLAIN-PER,LOVER \?CCL3
EQUAL? GOAL-PERSON,DEB /?CND1
RFALSE
?CCL3: EQUAL? GOAL-PERSON,VILLAIN-PER \FALSE
?CND1: IN? VILLAIN-PER,LOCAL-GLOBALS /FALSE
EQUAL? GOAL-PERSON,FRIEND /FALSE
GET FOUND-COSTUME,PLAYER-C
ZERO? STACK \FALSE
FSET? BLOWGUN,TOUCHBIT /FALSE
CALL FIND-FLAG-LG,RM,DOORBIT,SECRETBIT >X
ZERO? X /?CCL18
FSET? X,OPENBIT /FALSE
?CCL18: CALL FIND-FLAG,RM,PERSONBIT,VILLAIN-PER
ZERO? STACK /TRUE
RFALSE
.FUNCT DRESS-GHOST,L,C,ADJ,PT,?TMP1
MOVE GHOST-NEW,L
MOVE VILLAIN-PER,LOCAL-GLOBALS
ADD 1,GHOST-NEW-C >?TMP1
ADD 1,C
GET CHAR-CLOSET-TABLE,STACK
PUT CHAR-CLOSET-TABLE,?TMP1,STACK
GETP VILLAIN-PER,P?STATION >ADJ
ZERO? ADJ /?CND1
GETPT HEAD,P?ADJECTIVE >PT
PTSIZE PT
SUB STACK,1
CALL ZMEMQB,ADJ,PT,STACK >OTHER-POSS-POS
ZERO? OTHER-POSS-POS /?CND1
PUTB PT,OTHER-POSS-POS,A?G'S
GETPT HANDS,P?ADJECTIVE
PUTB STACK,OTHER-POSS-POS,A?G'S
GETPT EYE,P?ADJECTIVE
PUTB STACK,OTHER-POSS-POS,A?G'S
GETPT OTHER-OUTFIT,P?ADJECTIVE
PUTB STACK,OTHER-POSS-POS,A?G'S
?CND1: FSET COSTUME,NDESCBIT
FCLEAR COSTUME,TAKEBIT
FSET COSTUME,WORNBIT
MOVE COSTUME,GHOST-NEW
EQUAL? C,DOCTOR-C \?CND5
MOVE MUSTACHE,WENDISH-KIT
FCLEAR MUSTACHE,NDESCBIT
FSET MUSTACHE,TAKEBIT
?CND5: EQUAL? VARIATION,LORD-C /?CND7
FSET BLOWGUN,NDESCBIT
FCLEAR BLOWGUN,TAKEBIT
MOVE BLOWGUN,GHOST-NEW
?CND7: GET GOAL-TABLES,C
PUT STACK,GOAL-FUNCTION,GHOST-LURKS
GET GOAL-TABLES,C
PUT STACK,ATTENTION-SPAN,0
RTRUE
.FUNCT LOVER-XFER,GARG=0,VAL=0,L
LOC GOAL-PERSON >L
EQUAL? GARG,G-ENROUTE \?CCL3
CALL GHOST-LURKS,GARG >VAL
RETURN VAL
?CCL3: EQUAL? GARG,G-REACHED /?CCL4
RETURN VAL
?CCL4: EQUAL? L,HERE \?CCL7
CALL GHOST-LURKS,GARG >VAL
RETURN VAL
?CCL7: EQUAL? L,BASEMENT \?CCL9
MOVE GOAL-PERSON,KITCHEN
CALL ESTABLISH-GOAL,GOAL-PERSON,BACKSTAIRS
CALL GHOST-LURKS,G-ENROUTE >VAL
RETURN VAL
?CCL9: EQUAL? L,BACKSTAIRS /?CCL10
RETURN VAL
?CCL10: MOVE GOAL-PERSON,DINING-PASSAGE
CALL ESTABLISH-GOAL,GOAL-PERSON,YOUR-CLOSET
GETP GOAL-PERSON,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-FUNCTION,GHOST-LURKS
CALL GHOST-LURKS,G-ENROUTE >VAL
RETURN VAL
.FUNCT I-COME-TO,GARG=0,P,L=0,V
IN? GHOST-NEW,LOCAL-GLOBALS \?CCL3
SET 'P,VILLAIN-PER
PUTP P,P?LDESC,4
EQUAL? P,LOVER /?CND1
GETP P,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-FUNCTION,X-RETIRES
GETP P,P?CHARACTER
ADD 1,STACK >L
CALL META-LOC,P
FSET? STACK,SECRETBIT \?CCL8
GET CHAR-CLOSET-TABLE,L >L
JUMP ?CND1
?CCL8: GET CHAR-ROOM-TABLE,L >L
JUMP ?CND1
?CCL3: SET 'P,GHOST-NEW
PUTP P,P?LDESC,0
FSET P,NDESCBIT
GETP P,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-FUNCTION,GHOST-LURKS
SET 'L,YOUR-CLOSET
LOC P
FSET? STACK,SECRETBIT /?CND1
GETP VILLAIN-PER,P?CHARACTER
CALL GHOST-INTO-PASSAGE,STACK
?CND1: FCLEAR P,MUNGBIT
CALL VISIBLE?,P >V
ZERO? V /?CND11
CALL START-SENTENCE,P
CALL WHERE?,P
ZERO? STACK /?PRG19
PRINTC 44
?PRG19: PRINTI " shakes"
CALL HIM-HER-IT,P,FALSE-VALUE,TRUE-VALUE
PRINTI " head and comes to."
CRLF
EQUAL? VILLAIN-PER,LOVER \?CCL23
CALL LOVER-SPEECH
ZERO? STACK /?CCL23
SET 'V,M-FATAL
JUMP ?CND11
?CCL23: EQUAL? P,GHOST-NEW /?CND11
SET 'V,M-FATAL
CALL HE-SHE-IT,P,TRUE-VALUE
PRINTI " says, ""I feel... sleepy. I think..."""
CRLF
?CND11: ZERO? L /?CND29
GETP P,P?CHARACTER
GET GOAL-TABLES,STACK
PUT STACK,GOAL-S,TRUE-VALUE
CALL ESTABLISH-GOAL,P,L
?CND29: RETURN V
.FUNCT LOVER-SPEECH
IN? GHOST-NEW,HERE \?CND1
SET 'LOVER-SAID,TRUE-VALUE
CALL HE-SHE-IT,GHOST-NEW,TRUE-VALUE
PRINTI " says, ""Please don't speak, just listen! I'm really "
PRINTD LOVER
PRINTI ", and I'm alive. Jack tried to murder me, and I think he murdered Lionel! He pushed me down the well, but an underground stream carried me quickly to sea, where I was rescued by a yacht.
I have come back to "
PRINTD CASTLE
PRINTI " in disguise -- both to frighten him and to find some proof of Lionel's murder. And to incriminate "
PRINTD LORD
PRINTI " for my own 'murder' by planting the "
PRINTD JEWEL
PRINTI " from my necklace in the clothes he wore that night -- but then I lost it in the "
PRINTD DRAWING-ROOM
PRINTI ".""
She goes on, ""But now that you're on the case, I can leave the country with the yacht captain. Find proof of Lionel's murder, and we both can rest easily!""
She races off "
CALL GHOST-FLEES,TRUE-VALUE
CALL CONGRATS,COSTUME
FSET LOVER,SEENBIT
?CND1: MOVE GHOST-NEW,LIMBO
FSET GHOST-NEW,MUNGBIT
PUT FOLLOW-LOC,GHOST-NEW-C,0
RETURN LOVER-SAID
.FUNCT GHOST-FLEES,PART=0
ZERO? PART \?CND1
MOVE GHOST-NEW,LIMBO
FSET GHOST-NEW,MUNGBIT
PUT FOLLOW-LOC,GHOST-NEW-C,0
CALL HE-SHE-IT,GHOST-NEW,TRUE-VALUE
PRINTI " dodges your attack and flees "
?CND1: EQUAL? HERE,LOVER-PATH \?PRG10
PRINTI "down the path"
JUMP ?PRG12
?PRG10: PRINTI "toward the "
PRINTD PRIEST-DOOR
?PRG12: PRINTR "."
.FUNCT GHOST-LURKS,GARG=0,L,OBJ,VAL=0,GT,C
LOC GHOST-NEW >L
SET 'C,GHOST-NEW-C
GET GOAL-TABLES,C >GT
EQUAL? L,HERE \?CCL3
FSET? GHOST-NEW,TOUCHBIT /?CND4
CALL GHOST-NEW-D
?CND4: SET 'VAL,M-FATAL
SET 'AIMED-HERE,HERE
PRINTI "The ghost "
CALL QUEUED?,I-SHOT
ZERO? STACK /?PRG13
PRINTI "follows"
JUMP ?CND8
?PRG13: PRINTI "approaches"
?CND8: CALL THIS-IS-IT,GHOST-NEW
PRINTI " you,"
CALL HIM-HER-IT,GHOST-NEW,FALSE-VALUE,TRUE-VALUE
PRINTI " cold eyes shining. In a moment,"
CALL HE-SHE-IT,GHOST-NEW
PUT GT,GOAL-ENABLE,0
FSET PLAYER,SEENBIT
SET 'SHOOTER,GHOST-NEW
CALL QUEUE,I-SHOT,CLOCKER-RUNNING
EQUAL? VILLAIN-PER,LOVER \?CCL20
PUTP GHOST-NEW,P?LDESC,17
PRINTI " sees you and freezes."
CRLF
RETURN VAL
?CCL20: PUTP GHOST-NEW,P?LDESC,8
PRINTI " poi"
IN? BLOWGUN,GHOST-NEW \?PRG30
SET 'AIMED-HERE,HERE
FCLEAR BLOWGUN,NDESCBIT
PRINTI "nts"
CALL PRINTT,BLOWGUN
PRINTI " at"
JUMP ?PRG32
?PRG30: PRINTI "ses to attack"
?PRG32: PRINTI " you."
CRLF
RETURN VAL
?CCL3: EQUAL? GARG,G-REACHED /?CCL34
RETURN VAL
?CCL34: EQUAL? L,YOUR-CLOSET /?CCL37
CALL ESTABLISH-GOAL,GHOST-NEW,YOUR-CLOSET
RETURN VAL
?CCL37: ADD 1,C
GET CHAR-CLOSET-TABLE,STACK
CALL ESTABLISH-GOAL,GHOST-NEW,STACK
RETURN VAL
.FUNCT I-SHOT,GARG=0,VAL=0,L,GT
GETP SHOOTER,P?CHARACTER
GET GOAL-TABLES,STACK >GT
EQUAL? VILLAIN-PER,LOVER \?CCL3
IN? GHOST-NEW,HERE \?CND4
SET 'VAL,TRUE-VALUE
CALL HE-SHE-IT,GHOST-NEW,TRUE-VALUE
PRINTI " flees into the dark."
CRLF
?CND4: MOVE GHOST-NEW,LIMBO
FSET GHOST-NEW,MUNGBIT
PUT FOLLOW-LOC,GHOST-NEW-C,0
RETURN VAL
?CCL3: EQUAL? AIMED-HERE,HERE \?CCL9
IN? BLOWGUN,SHOOTER /?CCL12
PRINTI "You struggle to get free, but"
CALL PRINTT,SHOOTER
PRINTI "'s hands clench tighter around your throat! Soon the pain grows until the room begins to black out"
EQUAL? SHOOTER,GHOST-NEW \?PRG19
PRINTI ". Your only consolation is that the ghost's wig falls off, and just as you take your last breath, you see that it's really "
PRINTD VILLAIN-PER
?PRG19: PRINTI "! But"
JUMP ?PRG27
?CCL12: FSET? HERE,ONBIT \?PRG25
CALL HE-SHE-IT,SHOOTER,TRUE-VALUE
PRINTI " puts"
CALL PRINTT,BLOWGUN
PRINTI " to"
CALL HIM-HER-IT,SHOOTER,FALSE-VALUE,TRUE-VALUE
PRINTI " lips and puffs"
CALL HIM-HER-IT,SHOOTER,FALSE-VALUE,TRUE-VALUE
PRINTI " cheeks out and in. "
?PRG25: PRINTI "You feel a sharp pain in the chest. Your vision mists over, the room blacks out, and your legs give way beneath you.
The sad fact is, "
CALL PRINT-NAME,FIRST-NAME
PRINTI ", that you've been shot with a"
PRINT POISON-DART
PRINTI ", and"
?PRG27: PRINTI " for you, the game is over!
"
CALL FINISH
RETURN VAL
?CCL9: ZERO? SHOOTER /?CND1
FSET? SHOOTER,MUNGBIT /?CND1
PUT GT,GOAL-ENABLE,2
FSET? HERE,SECRETBIT \?CCL34
SET 'L,HERE
JUMP ?CND32
?CCL34: EQUAL? SHOOTER,GHOST-NEW \?CCL36
GET GT,GOAL-F >L
JUMP ?CND32
?CCL36: CALL GENERIC-CLOSET,0 >L
ZERO? L \?CND32
GETP VILLAIN-PER,P?CHARACTER
ADD 1,STACK
GET CHAR-CLOSET-TABLE,STACK >L
?CND32: PUT GT,GOAL-S,L
CALL ESTABLISH-GOAL,SHOOTER,L
SET 'SHOOTER,FALSE-VALUE
FSET BLOWGUN,NDESCBIT
?CND1: RETURN VAL
.ENDI