.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