.FUNCT GO START:: ?FCN: CALL V-VERSION CALL INTRO CALL MAIN-LOOP JUMP ?FCN .FUNCT PRINTT,OBJ EQUAL? OBJ,TURN \?CCL3 LESS? 1,P-NUMBER \?CCL3 PRINTC 32 PRINTN P-NUMBER PRINTI " minutes" RTRUE ?CCL3: EQUAL? OBJ,WINDOW \?CCL9 PRINTI " the window" RTRUE ?CCL9: CALL THE?,OBJ PRINTC 32 PRINTD OBJ RTRUE .FUNCT THE?,OBJ FSET? OBJ,NARTICLEBIT /?CND1 IN? OBJ,ROOMS /?PRG8 FSET? OBJ,SEENBIT \?CCL5 ?PRG8: PRINTI " the" JUMP ?CND1 ?CCL5: FSET? OBJ,VOWELBIT \?PRG14 PRINTI " an" JUMP ?CND1 ?PRG14: PRINTI " a" ?CND1: FSET OBJ,SEENBIT RTRUE .FUNCT START-SENTENCE,OBJ CALL THIS-IS-IT,OBJ EQUAL? OBJ,PLAYER \?CCL3 PRINTI "You" RTRUE ?CCL3: EQUAL? OBJ,NIGHTLAMP \?CCL7 PRINTI "Your lamp" RTRUE ?CCL7: EQUAL? OBJ,LUGGAGE \?CCL11 PRINTI "Your luggage" RTRUE ?CCL11: EQUAL? OBJ,BED \?CCL15 PRINTI "Your bed" RTRUE ?CCL15: EQUAL? OBJ,YOUR-COLOR \?CCL19 PRINTI "Your favorite color" RTRUE ?CCL19: EQUAL? OBJ,YOUR-ROOM \?CCL23 PRINTI "Your room" RTRUE ?CCL23: EQUAL? OBJ,YOUR-BATHROOM \?CCL27 PRINTI "Your bathroom" RTRUE ?CCL27: EQUAL? OBJ,YOUR-CLOSET \?CCL31 PRINTI "Your secret entrance" RTRUE ?CCL31: EQUAL? OBJ,DINNER \?CND1 PRINTI "Your dinner" RTRUE ?CND1: FSET? OBJ,NARTICLEBIT /?CND37 FSET? OBJ,SEENBIT \?CCL41 PRINTI "The " JUMP ?CND37 ?CCL41: FSET? OBJ,VOWELBIT \?PRG49 PRINTI "An " JUMP ?CND37 ?PRG49: PRINTI "A " ?CND37: FSET OBJ,SEENBIT PRINTD OBJ RTRUE .FUNCT PRINTA,O FSET? O,NARTICLEBIT /?PRG11 FSET? O,VOWELBIT \?PRG9 PRINTI "an " JUMP ?PRG11 ?PRG9: PRINTI "a " ?PRG11: PRINTD O RTRUE .FUNCT THIS-IS-IT,OBJ EQUAL? OBJ,FALSE-VALUE,NOT-HERE-OBJECT,PLAYER /TRUE EQUAL? OBJ,INTDIR,GLOBAL-HERE,ROOMS /TRUE EQUAL? PRSA,V?WALK \?CND1 EQUAL? OBJ,PRSO /TRUE ?CND1: FSET? OBJ,PERSONBIT /?CCL11 GET P-ADJW,NOW-PRSI PUT P-IT-WORDS,0,STACK GET P-NAMW,NOW-PRSI PUT P-IT-WORDS,1,STACK FSET IT,TOUCHBIT SET 'P-IT-OBJECT,OBJ RTRUE ?CCL11: FSET? OBJ,FEMALE \?CCL13 FSET HER,TOUCHBIT SET 'P-HER-OBJECT,OBJ RTRUE ?CCL13: FSET HIM,TOUCHBIT SET 'P-HIM-OBJECT,OBJ RTRUE .FUNCT NO-PRONOUN?,OBJ,CAP=0 EQUAL? OBJ,PLAYER /FALSE FSET? OBJ,PERSONBIT /?CCL5 EQUAL? OBJ,P-IT-OBJECT \?CND1 FSET? IT,TOUCHBIT \?CND1 RFALSE ?CCL5: FSET? OBJ,FEMALE \?CCL11 EQUAL? OBJ,P-HER-OBJECT \?CND1 FSET? HER,TOUCHBIT \?CND1 RFALSE ?CCL11: EQUAL? OBJ,P-HIM-OBJECT \?CND1 FSET? HIM,TOUCHBIT /FALSE ?CND1: ZERO? CAP \?CCL22 CALL PRINTT,OBJ JUMP ?CND20 ?CCL22: EQUAL? CAP,1,TRUE-VALUE \?CND20 CALL START-SENTENCE,OBJ ?CND20: CALL THIS-IS-IT,OBJ RTRUE .FUNCT HE-SHE-IT,OBJ,CAP=0,VERB=0 CALL NO-PRONOUN?,OBJ,CAP ZERO? STACK \?CND1 FSET? OBJ,PERSONBIT /?CCL5 ZERO? CAP \?CCL8 PRINTI " it" JUMP ?CND1 ?CCL8: EQUAL? CAP,1,TRUE-VALUE \?CND1 PRINTI "It" JUMP ?CND1 ?CCL5: EQUAL? OBJ,PLAYER \?CCL15 ZERO? CAP \?CCL18 PRINTI " you" JUMP ?CND1 ?CCL18: EQUAL? CAP,1,TRUE-VALUE \?CND1 PRINTI "You" JUMP ?CND1 ?CCL15: FSET? OBJ,FEMALE \?CCL25 ZERO? CAP \?CCL28 PRINTI " she" JUMP ?CND1 ?CCL28: EQUAL? CAP,1,TRUE-VALUE \?CND1 PRINTI "She" JUMP ?CND1 ?CCL25: ZERO? CAP \?CCL36 PRINTI " he" JUMP ?CND1 ?CCL36: EQUAL? CAP,1,TRUE-VALUE \?CND1 PRINTI "He" ?CND1: ZERO? VERB /FALSE PRINTC 32 EQUAL? OBJ,PLAYER \?PRG68 EQUAL? VERB,STR?1 \?CCL51 PRINTI "are" RTRUE ?CCL51: EQUAL? VERB,STR?2 \?CCL55 PRINTI "have" RTRUE ?CCL55: EQUAL? VERB,STR?3 \?CCL59 PRINTI "try" RTRUE ?CCL59: EQUAL? VERB,STR?4 \?PRG66 PRINTI "empty" RTRUE ?PRG66: PRINT VERB RTRUE ?PRG68: PRINT VERB EQUAL? VERB,STR?5,STR?6,STR?7 /?PRG74 EQUAL? VERB,STR?3,STR?4 \?CND70 ?PRG74: PRINTC 101 ?CND70: EQUAL? VERB,STR?1,STR?2 /FALSE PRINTC 115 RTRUE .FUNCT HIM-HER-IT,OBJ,CAP=0,POSSESS?=0 CALL NO-PRONOUN?,OBJ,CAP ZERO? STACK /?CCL3 ZERO? POSSESS? /TRUE PRINTI "'s" RTRUE ?CCL3: FSET? OBJ,PERSONBIT /?CCL9 ZERO? CAP \?PRG15 PRINTI " it" JUMP ?CND10 ?PRG15: PRINTI "It" ?CND10: ZERO? POSSESS? /TRUE PRINTC 115 RTRUE ?CCL9: EQUAL? OBJ,PLAYER \?CCL22 ZERO? CAP \?PRG28 PRINTI " you" JUMP ?CND23 ?PRG28: PRINTI "You" ?CND23: ZERO? POSSESS? /TRUE PRINTC 114 RTRUE ?CCL22: FSET? OBJ,FEMALE \?CCL35 ZERO? CAP \?PRG41 PRINTI " her" RTRUE ?PRG41: PRINTI "Her" RTRUE ?CCL35: ZERO? POSSESS? /?CCL45 ZERO? CAP \?PRG51 PRINTI " his" RTRUE ?PRG51: PRINTI "His" RTRUE ?CCL45: ZERO? CAP \?PRG58 PRINTI " him" RTRUE ?PRG58: PRINTI "Him" RTRUE .FUNCT QUEUE,RTN,TICK,CINT CALL INT,RTN >CINT PUT CINT,C-TICK,TICK PUT CINT,C-ENABLED?,1 RETURN CINT .FUNCT INT,RTN,DEMON=0,E,C,INT ADD C-TABLE,C-TABLELEN >E ADD C-TABLE,C-INTS >C ?PRG1: EQUAL? C,E \?CCL5 SUB C-INTS,C-INTLEN >C-INTS ADD C-TABLE,C-INTS >INT PUT INT,C-RTN,RTN RETURN INT ?CCL5: GET C,C-RTN EQUAL? STACK,RTN \?CND3 RETURN C ?CND3: ADD C,C-INTLEN >C JUMP ?PRG1 .FUNCT QUEUED?,RTN,C CALL INT,RTN >C GET C,C-ENABLED? ZERO? STACK /FALSE GET C,C-TICK RSTACK .FUNCT CLOCKER,C,E,TICK,FLG=0,VAL ZERO? CLOCK-WAIT /?CND1 SET 'CLOCK-WAIT,FALSE-VALUE RFALSE ?CND1: IGRTR? 'PRESENT-TIME,1139 \?CND3 CALL TIMES-UP ?CND3: IGRTR? 'MOVES,59 \?CND5 SET 'MOVES,0 IGRTR? 'SCORE,23 \?CND5 SET 'SCORE,0 ?CND5: ADD C-TABLE,C-INTS >C ADD C-TABLE,C-TABLELEN >E ?PRG9: EQUAL? C,E \?CCL13 RETURN FLG ?CCL13: GET C,C-ENABLED? ZERO? STACK /?CND11 GET C,C-TICK >TICK ZERO? TICK /?CND11 SUB TICK,1 PUT C,C-TICK,STACK GRTR? TICK,1 /?CND11 GET C,C-RTN CALL STACK >VAL ZERO? VAL /?CND11 ZERO? FLG /?CCL22 EQUAL? VAL,M-FATAL \?CND11 ?CCL22: SET 'FLG,VAL ?CND11: ADD C,C-INTLEN >C JUMP ?PRG9 .FUNCT I-FOLLOW,GARG=0,FLG=0,CNT=0,GT,VAL=0 ?PRG1: IGRTR? 'CNT,GHOST-NEW-C /?REP2 GET GOAL-TABLES,CNT >GT GET GT,GOAL-S ZERO? STACK /?PRG1 GET GT,GOAL-ENABLE ZERO? STACK /?PRG1 GET CHARACTER-TABLE,CNT CALL FOLLOW-GOAL,STACK >VAL ZERO? VAL /?PRG1 EQUAL? FLG,M-FATAL /?PRG1 SET 'FLG,VAL JUMP ?PRG1 ?REP2: RETURN FLG .FUNCT I-ATTENTION,GARG=0,FLG=0,CNT=0,ATT,GT,PER,RM ?PRG1: IGRTR? 'CNT,GHOST-NEW-C /?REP2 GET GOAL-TABLES,CNT >GT GET GT,ATTENTION >ATT GRTR? ATT,0 \?PRG1 DEC 'ATT GET CHARACTER-TABLE,CNT >PER EQUAL? PER,CONFESSED,CAPTOR,FOLLOWER /?PRG1 SET 'GOAL-PERSON,PER ZERO? ATT \?CCL11 LESS? BED-TIME,PRESENT-TIME /?CTR13 GET GT,GOAL-FUNCTION EQUAL? STACK,X-RETIRES \?CCL14 ?CTR13: ADD 1,CNT GET CHAR-ROOM-TABLE,STACK >RM IN? PER,RM \?CCL19 CALL GOODNIGHT,RM,PER JUMP ?CND9 ?CCL19: PUT GT,GOAL-FUNCTION,X-RETIRES CALL ESTABLISH-GOAL,PER,RM JUMP ?CND9 ?CCL14: GET GT,GOAL-QUEUED >RM ZERO? RM /?CCL21 PUT GT,GOAL-QUEUED,0 CALL ESTABLISH-GOAL,PER,RM JUMP ?CND9 ?CCL21: PUTP PER,P?LDESC,17 PUT GT,GOAL-ENABLE,1 JUMP ?CND9 ?CCL11: EQUAL? ATT,1 \?CND9 IN? PER,HERE \?CND9 GET GT,GOAL-FUNCTION CALL D-APPLY,STR?8,STACK,G-IMPATIENT ZERO? STACK /?CND9 SET 'FLG,TRUE-VALUE ?CND9: PUT GT,ATTENTION,ATT JUMP ?PRG1 ?REP2: RETURN FLG .ENDI