.FUNCT NULL-F,A1,A2 RFALSE .FUNCT DOOR-ROOM,RM,DR,P=0,TBL ?PRG1: NEXTP RM,P >P ZERO? P /FALSE LESS? P,LOW-DIRECTION /FALSE GETPT RM,P >TBL PTSIZE TBL EQUAL? DEXIT,STACK \?PRG1 GETB TBL,DEXITOBJ EQUAL? DR,STACK \?PRG1 GETB TBL,REXIT RSTACK .FUNCT FIND-FLAG,RM,FLAG,EXCLUDED=0,O FIRST? RM >O /?PRG1 ?PRG1: ZERO? O /FALSE FSET? O,FLAG \?CCL7 FSET? O,INVISIBLE /?CCL7 EQUAL? O,EXCLUDED /?CCL7 RETURN O ?CCL7: NEXT? O >O /?PRG1 JUMP ?PRG1 .FUNCT FIND-FLAG-NOT,RM,FLAG,O FIRST? RM >O /?PRG1 ?PRG1: ZERO? O /FALSE FSET? O,FLAG /?CCL7 FSET? O,INVISIBLE /?CCL7 RETURN O ?CCL7: NEXT? O >O /?PRG1 JUMP ?PRG1 .FUNCT FIND-FLAG-LG,RM,FLAG,FLAG2=0,TBL,O,CNT=0,SIZE GETPT RM,P?GLOBAL >TBL ZERO? TBL /FALSE PTSIZE TBL SUB STACK,1 >SIZE ?PRG4: GETB TBL,CNT >O FSET? O,FLAG \?CCL8 FSET? O,INVISIBLE /?CCL8 ZERO? FLAG2 /?CTR7 FSET? O,FLAG2 \?CCL8 ?CTR7: RETURN O ?CCL8: IGRTR? 'CNT,SIZE \?PRG4 RFALSE .FUNCT FIND-FLAG-HERE,FLAG,NOT1=0,NOT2=0,O FIRST? HERE >O /?PRG1 ?PRG1: ZERO? O /FALSE FSET? O,FLAG \?CCL7 FSET? O,INVISIBLE /?CCL7 EQUAL? O,NOT1,NOT2 /?CCL7 RETURN O ?CCL7: NEXT? O >O /?PRG1 JUMP ?PRG1 .FUNCT FIND-FLAG-HERE-NOT,FLAG,NFLAG,NOT2=0,O FIRST? HERE >O /?PRG1 ?PRG1: ZERO? O /FALSE FSET? O,FLAG \?CCL7 FSET? O,NFLAG /?CCL7 FSET? O,INVISIBLE /?CCL7 EQUAL? O,NOT2 /?CCL7 RETURN O ?CCL7: NEXT? O >O /?PRG1 JUMP ?PRG1 .FUNCT LEVER-F,X=0 FSET? HERE,SECRETBIT \?CCL3 CALL FIND-FLAG-LG,HERE,DOORBIT >X JUMP ?CND1 ?CCL3: EQUAL? HERE,DUNGEON,LOVER-PATH \?CND1 SET 'X,PRIEST-DOOR ?CND1: ZERO? X \?CCL7 CALL NOT-HERE,LEVER RTRUE ?CCL7: EQUAL? PRSA,V?TURN,V?TAKE,V?RUB /?CTR8 EQUAL? PRSA,V?PUSH,V?MOVE-DIR,V?MOVE \?CCL9 ?CTR8: FSET X,TOUCHBIT CALL OPEN-CLOSE,X RSTACK ?CCL9: EQUAL? PRSA,V?OPEN \?CCL13 FSET X,TOUCHBIT CALL OKAY,X,STR?66 RTRUE ?CCL13: EQUAL? PRSA,V?CLOSE \FALSE FSET X,TOUCHBIT CALL OKAY,X,STR?61 RTRUE .FUNCT OPEN-CLOSE,DR,SAY-NAME=1,X ZERO? SAY-NAME /?PRG5 CALL START-SENTENCE,DR ?PRG5: PRINTI " creaks " FSET? DR,OPENBIT \?CCL9 FCLEAR DR,OPENBIT CALL THIS-IS-IT,DR PRINTI "closed. " CALL REMOVE-CAREFULLY RTRUE ?CCL9: CALL DOOR-ROOM,HERE,DR >X ZERO? X /FALSE FSET DR,OPENBIT CALL THIS-IS-IT,X PRINTI "open, revealing" FSET? HERE,SECRETBIT \?CCL18 CALL PRINTT,X JUMP ?CND16 ?CCL18: EQUAL? HERE,LOVER-PATH \?PRG25 CALL PRINTT,DUNGEON JUMP ?CND16 ?PRG25: PRINTI " a " PRINTD PASSAGE ?CND16: FSET DR,SEENBIT FSET X,SEENBIT PRINTR "!" .FUNCT OUTSIDE?,RM CALL GLOBAL-IN?,MOON,RM RSTACK .FUNCT WINDOW-F EQUAL? PRSA,V?UNLOCK /?CTR2 EQUAL? PRSA,V?LOCK,V?CLOSE,V?OPEN \?CCL3 ?CTR2: EQUAL? HERE,DRIVEWAY /?CTR7 LOC PLAYER EQUAL? STACK,CAR \?CCL8 ?CTR7: CALL NO-NEED RTRUE ?CCL8: EQUAL? PRSA,V?OPEN \?CCL12 PRINTR "The night air is too damp and chilly." ?CCL12: CALL ALREADY,WINDOW,STR?61 RTRUE ?CCL3: EQUAL? PRSA,V?THROUGH,V?LEAVE,V?DISEMBARK \?CCL16 PRINTR "It's closed tight against the mist." ?CCL16: EQUAL? PRSA,V?LOOK-OUTSIDE,V?LOOK-THROUGH,V?LOOK-INSIDE \FALSE LOC WINNER EQUAL? STACK,CAR \?PRG24 CALL V-LOOK RSTACK ?PRG24: PRINTR "All you can see are grey shapes in the moonlight." .FUNCT CORRIDOR-LOOK,ITM=0,C,Z,COR,VAL,FOUND=0 GETP HERE,P?CORRIDOR >C ZERO? C /FALSE ?PRG5: SUB C,4 >Z LESS? Z,0 /?CCL9 SET 'COR,COR-4 JUMP ?CND7 ?CCL9: SUB C,2 >Z LESS? Z,0 /?CCL11 SET 'COR,COR-2 JUMP ?CND7 ?CCL11: SUB C,1 >Z LESS? Z,0 /?REP6 SET 'COR,COR-1 ?CND7: CALL CORRIDOR-CHECK,COR,ITM >VAL ZERO? FOUND \?CND14 SET 'FOUND,VAL ?CND14: SET 'C,Z JUMP ?PRG5 ?REP6: RETURN FOUND .FUNCT CORRIDOR-CHECK,COR,ITM,CNT=1,PAST=0,FOUND=0,RM,OBJ ?PRG1: INC 'CNT GET COR,CNT >RM ZERO? RM /FALSE EQUAL? RM,ITM \?CCL7 GET COR,PAST RSTACK ?CCL7: EQUAL? ITM,ROOMS \?CCL9 CALL THIS-IT?,RM ZERO? STACK /?CCL9 RETURN RM ?CCL9: CALL LIT?,RM ZERO? STACK \?CCL13 EQUAL? ITM,ROOMS \?PRG1 ?CCL13: EQUAL? RM,HERE \?CCL17 SET 'PAST,1 JUMP ?PRG1 ?CCL17: FIRST? RM >OBJ \?PRG1 ?PRG19: ZERO? ITM /?CCL23 EQUAL? OBJ,ITM \?CND21 GET COR,PAST >FOUND JUMP ?REP20 ?CCL23: FSET? OBJ,PERSONBIT \?CND21 CALL IN-MOTION?,OBJ,TRUE-VALUE ZERO? STACK \?CND21 PRINTD OBJ PRINTI " is in" CALL PRINTT,RM PRINTC 46 CRLF ?CND21: NEXT? OBJ >OBJ /?KLU35 ?KLU35: ZERO? OBJ \?PRG19 ?REP20: ZERO? FOUND /?PRG1 RETURN FOUND .ENDI