mirror of
https://github.com/historicalsource/moonmist
synced 2024-05-07 19:38:33 +03:00
2107 lines
50 KiB
Plaintext
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
|