.FUNCT TRANSCRIPT,STR PRINTI "Here " PRINT STR PRINTR "s a transcript of interaction with" .FUNCT V-SCRIPT ZERO? SCREEN-NOW-SPLIT /?CND1 SPLIT 0 ?CND1: GET 0,8 BOR STACK,1 PUT 0,8,STACK CALL TRANSCRIPT,STR?133 CALL V-VERSION CALL START-SONAR? RTRUE .FUNCT V-UNSCRIPT CALL TRANSCRIPT,STR?134 CALL V-VERSION GET 0,8 BAND STACK,-2 PUT 0,8,STACK RTRUE .FUNCT V-$VERIFY PRINTI "Verifying disk..." CRLF VERIFY \?ELS7 PRINTR "The disk is correct." ?ELS7: PRINTR "Oh, oh! The disk seems to have a defect. Try verifying again. (If you've already done that, the disk surely has a defect.)" .FUNCT V-DEBUG ZERO? DEBUG \?PRD6 PUSH 1 JUMP ?PRD7 ?PRD6: PUSH 0 ?PRD7: SET 'DEBUG,STACK ZERO? DEBUG /?ELS5 PRINTR "Find them bugs, boss!" ?ELS5: PRINTR "No bugs left, eh?" .FUNCT YOU-WILL-GET,STR PRINTI "(Okay, you will get " PRINT STR PRINTR " descriptions.)" .FUNCT V-BRIEF SET 'VERBOSE,0 SET 'SUPER-BRIEF,0 SET 'P-SPACE,1 CALL YOU-WILL-GET,STR?125 RSTACK .FUNCT V-SUPER-BRIEF SET 'SUPER-BRIEF,1 SET 'P-SPACE,0 CALL YOU-WILL-GET,STR?135 RSTACK .FUNCT V-VERBOSE SET 'VERBOSE,1 SET 'SUPER-BRIEF,0 SET 'P-SPACE,1 CALL YOU-WILL-GET,STR?136 CALL V-LOOK RSTACK .FUNCT V-INVENTORY ZERO? P-WHAT-IGNORED /?ELS5 EQUAL? WINNER,PLAYER /?CND7 PRINTI """" ?CND7: PRINTI "You're the inventor!" EQUAL? WINNER,PLAYER /?CND14 PRINTI """" ?CND14: CRLF RTRUE ?ELS5: CALL PRINT-CONT,WINNER ZERO? STACK \FALSE EQUAL? WINNER,PLAYER \?ELS23 PRINTI "You're" JUMP ?CND21 ?ELS23: CALL HE-SHE-IT,WINNER,1 PRINTI "'s" ?CND21: PRINTR " not holding anything." .FUNCT V-QUIT,ASK?=1 CALL V-SCORE ZERO? ASK? /?ELS9 PRINTI "(If you want to continue from this point at another time, you must ""SAVE"" first.) Do you want to stop playing now?" CALL YES? ZERO? STACK \?THN6 ?ELS9: ZERO? ASK? \?ELS5 ?THN6: QUIT RTRUE ?ELS5: PRINTR "Okay." .FUNCT V-RESTART CALL V-SCORE PRINTI "Do you want to start over from the beginning?" CALL YES? ZERO? STACK /FALSE RESTART PRINT FAILED CRLF RTRUE .FUNCT V-SAVE ZERO? SCREEN-NOW-SPLIT /?CND1 SPLIT 0 ?CND1: SAVE \?ELS7 PRINTI "Okay." CRLF JUMP ?CND5 ?ELS7: PRINT FAILED CRLF ?CND5: CALL START-SONAR? RSTACK .FUNCT V-RESTORE,OSNS ZERO? SCREEN-NOW-SPLIT /?CND1 SPLIT 0 ?CND1: RESTORE \?ELS9 PRINTI "Okay." CRLF CALL START-SONAR? CALL V-FIRST-LOOK RTRUE ?ELS9: PRINT FAILED CRLF CALL START-SONAR? RFALSE .FUNCT V-FIRST-LOOK CALL DESCRIBE-ROOM ZERO? STACK /FALSE ZERO? SUPER-BRIEF \FALSE CALL DESCRIBE-OBJECTS RSTACK .FUNCT V-VERSION,CNT=17 PRINTI "SEASTALKER: " CALL PRINT-NAME,FIRST-NAME,1 PRINTC 32 CALL PRINT-NAME,LAST-NAME,1 PRINTI " AND THE ULTRAMARINE BIOCEPTOR Junior-level interactive fiction from Infocom Copyright (c) 1984 Infocom, Inc. All rights reserved. " GETB 0,1 BAND STACK,8 ZERO? STACK /?CND5 PRINTI "Licensed to Tandy Corporation. Version 00.00.15 " ?CND5: PRINTI "SEASTALKER is a trademark of Infocom, Inc. Revision number " GET 0,1 BAND STACK,2047 PRINTN STACK PRINTI " / Serial number " ?PRG14: IGRTR? 'CNT,23 \?ELS18 JUMP ?REP15 ?ELS18: GETB 0,CNT PRINTC STACK JUMP ?PRG14 ?REP15: CRLF RTRUE .FUNCT YES?,WORD,VAL ?PRG1: PRINTI " >" READ YES-INBUF,YES-LEXV GET YES-LEXV,P-LEXSTART >WORD ZERO? WORD /?CND3 CALL WT?,WORD,PS?VERB,P1?VERB >VAL EQUAL? VAL,ACT?YES \?ELS8 SET 'VAL,1 RETURN VAL ?ELS8: EQUAL? VAL,ACT?NO /?THN11 EQUAL? WORD,W?N \?CND3 ?THN11: SET 'VAL,0 RETURN VAL ?CND3: PRINTI "(Please type YES or NO.)" JUMP ?PRG1 .FUNCT YOU-CANT,STR=0,WHILE=0,STR1=0 EQUAL? WINNER,PLAYER \?ELS3 PRINTI "You" JUMP ?CND1 ?ELS3: CALL HE-SHE-IT,WINNER,1 ?CND1: PRINTI " can't " ZERO? STR /?ELS12 PRINT STR JUMP ?CND10 ?ELS12: CALL VERB-PRINT ?CND10: EQUAL? STR,STR?138 \?ELS22 PRINTR " in that direction." ?ELS22: ZERO? STR1 /?ELS26 PRINTI " it while" ZERO? WHILE /?ELS32 CALL THIS-IS-IT,WHILE CALL PRINTT,WHILE JUMP ?CND30 ?ELS32: PRINTI " it" ?CND30: PRINTI " is " PRINT STR1 PRINTR "." ?ELS26: CALL THE-PRSO-PRINT PRINTR " now." .FUNCT DESCRIBE-OBJECT,OBJ,V?,LEVEL,STR=0,AV,NO-CR=0 CALL THIS-IS-IT,OBJ ZERO? LEVEL \?CND1 GETP OBJ,P?DESCFCN CALL STACK,M-OBJDESC ZERO? STACK \TRUE ?CND1: ZERO? LEVEL \?ELS8 FSET? OBJ,TOUCHBIT /?ELS14 GETP OBJ,P?FDESC >STR ZERO? STR \?THN11 ?ELS14: GETP OBJ,P?LDESC >STR ZERO? STR /?ELS8 ?THN11: PRINT STR JUMP ?CND6 ?ELS8: ZERO? LEVEL \?ELS18 FSET? OBJ,PERSON \?ELS21 CALL IS-CREW?,OBJ ZERO? STACK /?ELS24 CALL CREW-5-TOGETHER? ZERO? STACK /?ELS24 FSET? BLY,MUNGBIT /?ELS24 EQUAL? OBJ,LOWELL \?ELS29 PRINTI "The five " PRINTD CREW PRINTI " members are here." JUMP ?CND6 ?ELS29: SET 'NO-CR,1 JUMP ?CND6 ?ELS24: PRINTD OBJ PRINTI " is here." JUMP ?CND6 ?ELS21: PRINTI "There's " CALL PRINTA,OBJ PRINTI " here." JUMP ?CND6 ?ELS18: GET INDENTS,LEVEL PRINT STACK FSET? OBJ,PERSON \?ELS48 CALL IS-CREW?,OBJ ZERO? STACK /?ELS51 CALL CREW-5-TOGETHER? ZERO? STACK /?ELS51 FSET? BLY,MUNGBIT /?ELS51 EQUAL? OBJ,LOWELL \?ELS56 PRINTI "the five " PRINTD CREW PRINTI " members" JUMP ?CND46 ?ELS56: SET 'NO-CR,1 JUMP ?CND46 ?ELS51: PRINTD OBJ JUMP ?CND46 ?ELS48: CALL PRINTA,OBJ ?CND46: EQUAL? OBJ,OXYGEN-GEAR \?CND6 IN? OXYGEN-GEAR,PLAYER \?CND6 PRINTI " (being worn)" ?CND6: ZERO? LEVEL \?CND76 LOC WINNER >AV ZERO? AV /?CND76 FSET? AV,VEHBIT \?CND76 PRINTI " (outside" CALL PRINTT,AV PRINTI ")" ?CND76: ZERO? NO-CR \?CND83 CRLF ?CND83: CALL SEE-INSIDE?,OBJ ZERO? STACK /FALSE FIRST? OBJ \FALSE CALL PRINT-CONT,OBJ,V?,LEVEL RSTACK .FUNCT DESCRIBE-OBJECTS,V?=0 FIRST? HERE \FALSE ZERO? V? /?ORP14 PUSH V? JUMP ?THN11 ?ORP14: PUSH VERBOSE ?THN11: POP 'V? CALL PRINT-CONT,HERE,V?,-1 RSTACK .FUNCT DESCRIBE-ROOM,LOOK?=0,V?,STR,L ZERO? LOOK? /?ORP4 PUSH LOOK? JUMP ?THN1 ?ORP4: PUSH VERBOSE ?THN1: POP 'V? FSET? HERE,TOUCHBIT /?CND5 SET 'V?,1 ?CND5: IN? HERE,ROOMS \?CND8 PRINTI "(" PRINTD HERE PRINTI ")" CRLF ?CND8: ZERO? V? /?CND13 LOC WINNER >L FSET? L,VEHBIT \?CND17 PRINTI "(You're " FSET? L,SURFACEBIT \?ELS24 PRINTI "sitting o" JUMP ?CND22 ?ELS24: PRINTI "standing i" ?CND22: PRINTI "n" CALL PRINTT,L PRINTI ".)" CRLF ?CND17: ZERO? V? /?ELS35 GETP HERE,P?ACTION CALL STACK,M-LOOK ZERO? STACK /?ELS35 FSET HERE,TOUCHBIT RTRUE ?ELS35: ZERO? V? /?ELS39 GETP HERE,P?FDESC >STR ZERO? STR /?ELS39 PRINT STR CRLF JUMP ?CND33 ?ELS39: ZERO? V? /?ELS45 GETP HERE,P?LDESC >STR ZERO? STR /?ELS45 PRINT STR CRLF JUMP ?CND33 ?ELS45: GETP HERE,P?ACTION CALL STACK,M-FLASH ?CND33: EQUAL? HERE,L /?CND13 GETP L,P?ACTION CALL STACK,M-LOOK ?CND13: GETP HERE,P?CORRIDOR ZERO? STACK /?CND55 CALL CORRIDOR-LOOK ?CND55: FSET HERE,TOUCHBIT RTRUE .FUNCT FAR-AWAY?,L EQUAL? L,GLOBAL-OBJECTS /TRUE CALL IN-LAB-AREA?,HERE ZERO? STACK /?ELS7 CALL IN-LAB-AREA?,L ZERO? STACK \FALSE RTRUE ?ELS7: CALL IN-DOME?,HERE ZERO? STACK /?ELS11 CALL IN-DOME?,L ZERO? STACK \FALSE RTRUE ?ELS11: EQUAL? HERE,SUB,CRAWL-SPACE \?ELS15 EQUAL? L,SUB,CRAWL-SPACE /FALSE RTRUE ?ELS15: PRINTR "[Foo! Where is HERE?]" .FUNCT FIRSTER,OBJ,LEVEL EQUAL? OBJ,PLAYER \?ELS5 PRINTR "You're holding:" ?ELS5: FSET? OBJ,PERSON \?ELS9 PRINTD OBJ PRINTR " is holding:" ?ELS9: IN? OBJ,ROOMS /FALSE GRTR? LEVEL,0 \?CND14 GET INDENTS,LEVEL PRINT STACK ?CND14: FSET? OBJ,SURFACEBIT \?ELS23 PRINTI "Sitting on" CALL PRINTT,OBJ PRINTR " is:" ?ELS23: FSET? OBJ,PERSON \?ELS27 PRINTD OBJ PRINTR " is holding:" ?ELS27: PRINTI "The " PRINTD OBJ PRINTR " contains:" .FUNCT GO-NEXT,TBL,VAL CALL LKP,HERE,TBL >VAL ZERO? VAL /FALSE CALL GOTO,VAL RSTACK .FUNCT HAR-HAR CALL PICK-ONE,YUKS PRINT STACK CRLF RTRUE .FUNCT HE-SHE-IT,OBJ,CAP=0,VERB=0 FSET? OBJ,PERSON \?ELS3 EQUAL? OBJ,PLAYER \?ELS6 ZERO? CAP /?ELS9 PRINTI "You" JUMP ?CND1 ?ELS9: PRINTI "you" JUMP ?CND1 ?ELS6: FSET? OBJ,FEMALE \?ELS18 ZERO? CAP /?ELS21 PRINTI "She" JUMP ?CND1 ?ELS21: PRINTI "she" JUMP ?CND1 ?ELS18: ZERO? CAP /?ELS33 PRINTI "He" JUMP ?CND1 ?ELS33: PRINTI "he" JUMP ?CND1 ?ELS3: ZERO? CAP /?ELS45 PRINTI "It" JUMP ?CND1 ?ELS45: PRINTI "it" ?CND1: ZERO? VERB /FALSE PRINTC 32 PRINT VERB EQUAL? OBJ,PLAYER /FALSE PRINTI "s" RTRUE .FUNCT HIM-HER-IT,OBJ,CAP=0 FSET? OBJ,PERSON \?ELS5 EQUAL? OBJ,PLAYER \?ELS10 ZERO? CAP /?ELS15 PRINTI "You" RTRUE ?ELS15: PRINTI "you" RTRUE ?ELS10: FSET? OBJ,FEMALE \?ELS24 ZERO? CAP /?ELS29 PRINTI "Her" RTRUE ?ELS29: PRINTI "her" RTRUE ?ELS24: ZERO? CAP /?ELS43 PRINTI "Him" RTRUE ?ELS43: PRINTI "him" RTRUE ?ELS5: ZERO? CAP /?ELS57 PRINTI "It" RTRUE ?ELS57: PRINTI "it" RTRUE .FUNCT NOT-HOLDING?,OBJ IN? OBJ,WINNER /FALSE LOC OBJ IN? STACK,WINNER /FALSE CALL HE-SHE-IT,WINNER,1 EQUAL? WINNER,PLAYER \?ELS10 PRINTI "'re" JUMP ?CND8 ?ELS10: PRINTI "'s" ?CND8: PRINTI " not holding" CALL PRINTT,OBJ PRINTR "." .FUNCT LKP,ITM,TBL,CNT=0,LEN GET TBL,0 >LEN ?PRG1: IGRTR? 'CNT,LEN /FALSE GET TBL,CNT EQUAL? STACK,ITM \?PRG1 EQUAL? CNT,LEN /FALSE ADD CNT,1 GET TBL,STACK RETURN STACK .FUNCT GOTO,RM,V?=1,L,ITARM,ILRM IN? WINNER,RM \?CND1 CALL HAR-HAR RFALSE ?CND1: CALL AIR-ROOM?,HERE ZERO? STACK /?CND4 CALL AIR-ROOM?,RM ZERO? STACK \?CND4 CALL BAD-AIR? ZERO? STACK \FALSE ?CND4: FSET? AIR-SUPPLY-SYSTEM,MUNGBIT \?CND9 EQUAL? RM,DOME-LAB,BLY-OFFICE \?CND9 PRINTI "You should wait for someone to invite you." CRLF RFALSE ?CND9: LOC WINNER >L ZERO? SUB-IN-DOME /?CND16 FSET? AIRLOCK-ROOF,OPENBIT /?CND16 CALL THROUGH-ROOF?,RM,L ZERO? STACK /?CND16 CALL THIS-IS-IT,AIRLOCK-ROOF CALL TOO-BAD-BUT,AIRLOCK-ROOF,STR?17 RFALSE ?CND16: EQUAL? WINNER,PLAYER \?ELS23 CALL TIP-FOLLOWS-YOU,RM JUMP ?CND21 ?ELS23: FSET? WINNER,MUNGBIT \?ELS25 PRINTI """I wish I could!""" CRLF RFALSE ?ELS25: EQUAL? RM,CRAWL-SPACE /?THN30 EQUAL? RM,SUB \?CND21 EQUAL? WINNER,TIP,SHARON /?CND21 ?THN30: PRINTI """You belong in there, not I!""" CRLF RFALSE ?CND21: ZERO? SUB-IN-TANK \?ELS38 CALL OPEN-DOOR,L CALL OPEN-DOOR,RM JUMP ?CND36 ?ELS38: CALL IN-TANK-AREA?,RM >ITARM CALL IN-LAB?,RM >ILRM CALL IN-TANK-AREA?,L ZERO? STACK /?ELS43 ZERO? ITARM \?CND44 FSET SOUTH-DOORWAY,OPENBIT ?CND44: ZERO? ILRM \?CND47 FSET EAST-DOORWAY,OPENBIT ?CND47: EQUAL? RM,LAB-STORAGE \?CND41 FSET STORAGE-DOOR,OPENBIT JUMP ?CND41 ?ELS43: CALL IN-LAB?,L ZERO? STACK /?ELS54 ZERO? ITARM /?ELS57 FSET SOUTH-DOORWAY,OPENBIT JUMP ?CND41 ?ELS57: ZERO? ILRM \?CND61 FSET EAST-DOORWAY,OPENBIT ?CND61: EQUAL? RM,LAB-STORAGE \?CND36 FSET STORAGE-DOOR,OPENBIT JUMP ?CND36 ?ELS54: EQUAL? L,HALLWAY,OFFICE \?ELS68 ZERO? ITARM /?CND69 FSET EAST-DOORWAY,OPENBIT FSET SOUTH-DOORWAY,OPENBIT ?CND69: ZERO? ILRM /?CND73 FSET EAST-DOORWAY,OPENBIT ?CND73: EQUAL? RM,LAB-STORAGE \?CND41 FSET STORAGE-DOOR,OPENBIT JUMP ?CND41 ?ELS68: EQUAL? L,LAB-STORAGE \?CND36 ZERO? ITARM /?CND82 FSET EAST-DOORWAY,OPENBIT FSET SOUTH-DOORWAY,OPENBIT ?CND82: ZERO? ILRM /?CND86 FSET EAST-DOORWAY,OPENBIT ?CND86: FSET STORAGE-DOOR,OPENBIT ?CND41: ?CND36: MOVE WINNER,RM EQUAL? WINNER,SHARON \?CND93 EQUAL? RM,OFFICE \?ELS98 FSET SHARON,NDESCBIT FSET FILE-DRAWER,NDESCBIT FSET PAPERS,NDESCBIT JUMP ?CND93 ?ELS98: FCLEAR SHARON,NDESCBIT FCLEAR FILE-DRAWER,NDESCBIT FCLEAR PAPERS,NDESCBIT ?CND93: SET 'LIT,1 EQUAL? WINNER,PLAYER \TRUE SET 'HERE,RM ZERO? V? /?CND104 CALL V-FIRST-LOOK ?CND104: GETP HERE,P?ACTION CALL STACK,M-ENTER GETP HERE,P?ACTION CALL STACK,M-FLASH RTRUE .FUNCT OPEN-DOOR,RM,T,DR EQUAL? RM,OFFICE,SUB /TRUE EQUAL? RM,AIRLOCK \?ELS7 FSET AIRLOCK-ROOF,OPENBIT RTRUE ?ELS7: GETPT RM,P?GLOBAL >T ZERO? T /FALSE PTSIZE T SUB STACK,1 CALL ZMEMQBIT,DOORBIT,T,STACK >DR ZERO? DR /FALSE FSET DR,OPENBIT RTRUE .FUNCT HACK-HACK,STR PRINT STR CALL THE-PRSO-PRINT CALL PICK-ONE,HO-HUM PRINT STACK CRLF RTRUE .FUNCT HELD?,OBJ ?PRG1: LOC OBJ ZERO? STACK /FALSE LOC OBJ EQUAL? STACK,ROOMS,GLOBAL-OBJECTS /FALSE IN? OBJ,WINNER /TRUE LOC OBJ >OBJ JUMP ?PRG1 .FUNCT IDROP FSET? PRSO,PERSON \?ELS5 EQUAL? PRSO,PLAYER \?ELS8 PRINTI "You" JUMP ?CND6 ?ELS8: PRINTD PRSO ?CND6: PRINTI " wouldn't enjoy that." CRLF RFALSE ?ELS5: CALL NOT-HOLDING?,PRSO ZERO? STACK \FALSE IN? PRSO,WINNER /?ELS20 LOC PRSO FSET? STACK,OPENBIT /?ELS20 LOC PRSO CALL TOO-BAD-BUT,STACK,STR?17 RFALSE ?ELS20: MOVE PRSO,HERE FCLEAR PRSO,NDESCBIT FCLEAR PRSO,INVISIBLE RTRUE .FUNCT ITAKE,VB=1,CNT,OBJ,TEMP,?TMP1 FSET? PRSO,TAKEBIT /?ELS5 ZERO? VB /FALSE CALL YOU-CANT,STR?19 RFALSE ?ELS5: CALL CCOUNT,WINNER >CNT GRTR? CNT,FUMBLE-NUMBER \?ELS11 MUL CNT,FUMBLE-PROB >?TMP1 RANDOM 100 GRTR? ?TMP1,STACK \?ELS11 FIRST? WINNER >OBJ /?KLU36 ?KLU36: CALL TOO-BAD-BUT,OBJ PRINTI " slips from your arms while you are taking" CALL THE-PRSO-PRINT PRINTI ", and both tumble " CALL GROUND-DESC PRINT STACK PRINTI "." CRLF MOVE OBJ,HERE MOVE PRSO,HERE RETURN 2 ?ELS11: SET 'ITAKE-LOC,0 LOC PRSO >OBJ FSET? OBJ,PERSON \?CND20 ZERO? VB /?ELS25 PRINTD OBJ PRINTI " gives it to " CALL HIM-HER-IT,WINNER PRINTI ". " JUMP ?CND20 ?ELS25: SET 'ITAKE-LOC,OBJ ?CND20: MOVE PRSO,WINNER FSET PRSO,TOUCHBIT FCLEAR PRSO,NDESCBIT FCLEAR PRSO,INVISIBLE EQUAL? WINNER,PLAYER \TRUE CALL SCORE-OBJ,PRSO RTRUE .FUNCT CCOUNT,OBJ,CNT=0,X FIRST? OBJ >X \?CND1 ?PRG4: INC 'CNT NEXT? X >X /?PRG4 ?CND1: RETURN CNT .FUNCT CHECK-DOOR PRINTI "You can see that" CALL THE-PRSO-PRINT PRINTI " is " FSET? PRSO,OPENBIT \?ELS7 PUSH STR?23 JUMP ?CND3 ?ELS7: PUSH STR?17 ?CND3: PRINT STACK PRINTR "." .FUNCT CHECK-ON-OFF PRINTI "You can see that" CALL THE-PRSO-PRINT PRINTI " is o" FSET? PRSO,ONBIT \?ELS7 PUSH STR?45 JUMP ?CND3 ?ELS7: PUSH STR?46 ?CND3: PRINT STACK PRINTR "." .FUNCT NOT-HERE,OBJ PRINTI "You can't see" CALL PRINTT,OBJ PRINTR " here." .FUNCT PRINT-CONT,OBJ,V?=0,LEVEL=0,Y,1ST?,AV,STR=0,PV?=0,INV?=0,VAL=0 FIRST? OBJ >Y \FALSE LOC WINNER >AV ZERO? AV /?ELS6 FSET? AV,VEHBIT \?ELS6 JUMP ?CND4 ?ELS6: SET 'AV,0 ?CND4: SET '1ST?,1 LOC OBJ EQUAL? WINNER,OBJ,STACK \?ELS13 SET 'INV?,1 JUMP ?CND11 ?ELS13: ?PRG16: ZERO? Y \?ELS20 JUMP ?CND11 ?ELS20: EQUAL? Y,AV \?ELS22 SET 'PV?,1 JUMP ?CND18 ?ELS22: EQUAL? Y,WINNER \?ELS24 JUMP ?CND18 ?ELS24: FSET? Y,INVISIBLE /?CND18 FSET? Y,TOUCHBIT /?CND18 GETP Y,P?FDESC >STR ZERO? STR /?CND18 FSET? Y,NDESCBIT \?THN34 ZERO? DEBUG /?CND31 PRINTI "[ndescbit] " ?THN34: SET '1ST?,0 SET 'LEVEL,0 ZERO? STR /?CND31 PRINT STR CRLF SET 'STR,0 SET 'VAL,1 CALL THIS-IS-IT,Y ?CND31: CALL SEE-INSIDE?,Y ZERO? STACK /?CND18 LOC Y GETP STACK,P?DESCFCN ZERO? STACK \?CND18 FIRST? Y \?CND18 CALL PRINT-CONT,Y,V?,0 ZERO? STACK /?CND46 SET 'VAL,1 ?CND46: ?CND18: NEXT? Y >Y /?KLU101 ?KLU101: JUMP ?PRG16 ?CND11: FIRST? OBJ >Y /?KLU102 ?KLU102: ?PRG54: ZERO? Y \?ELS58 ZERO? PV? /?CND59 ZERO? AV /?CND59 FIRST? AV \?CND59 CALL PRINT-CONT,AV,V?,LEVEL ZERO? STACK /?CND59 SET 'VAL,1 ?CND59: RETURN VAL ?ELS58: EQUAL? Y,AV,PLAYER \?ELS68 JUMP ?CND56 ?ELS68: FSET? Y,INVISIBLE /?CND56 ZERO? INV? \?THN73 FSET? Y,TOUCHBIT /?THN73 GETP Y,P?FDESC ZERO? STACK \?CND56 ?THN73: FSET? Y,NDESCBIT \?THN78 ZERO? DEBUG /?ELS77 PRINTI "[ndescbit] " ?THN78: ZERO? 1ST? /?CND84 CALL FIRSTER,OBJ,LEVEL ZERO? STACK /?CND88 LESS? LEVEL,0 \?CND88 SET 'LEVEL,0 ?CND88: INC 'LEVEL SET '1ST?,0 ?CND84: SET 'VAL,1 CALL DESCRIBE-OBJECT,Y,V?,LEVEL JUMP ?CND56 ?ELS77: FIRST? Y \?CND56 CALL SEE-INSIDE?,Y ZERO? STACK /?CND56 CALL PRINT-CONT,Y,V?,LEVEL ZERO? STACK /?CND75 SET 'VAL,1 ?CND75: ?CND56: NEXT? Y >Y /?KLU103 ?KLU103: JUMP ?PRG54 .FUNCT PRINT-CONTENTS,OBJ,F,N,1ST?=1 FIRST? OBJ >F \FALSE ?PRG6: NEXT? F >N /?KLU33 ?KLU33: ZERO? 1ST? /?ELS10 SET '1ST?,0 JUMP ?CND8 ?ELS10: PRINTI ", " ZERO? N \?CND8 PRINTI "and " ?CND8: FSET? F,PERSON \?ELS23 PRINTD F JUMP ?CND21 ?ELS23: CALL PRINTA,F ?CND21: CALL THIS-IS-IT,F SET 'F,N ZERO? F \?PRG6 RTRUE .FUNCT ROOM-CHECK,P SET 'P,PRSO EQUAL? P,DOCKING-TANK \?CND1 EQUAL? HERE,AIRLOCK \?CND1 SET 'P,HERE ?CND1: IN? P,ROOMS \?ELS10 EQUAL? P,HERE \?ELS15 CALL PERFORM,PRSA,GLOBAL-HERE,PRSI RTRUE ?ELS15: EQUAL? P,AIRLOCK \?ELS17 CALL GLOBAL-IN?,FILL-TANK-BUTTON,HERE ZERO? STACK \FALSE ?ELS17: PRINTR "You aren't in that place!" ?ELS10: EQUAL? P,PSEUDO-OBJECT /FALSE CALL META-LOC,P EQUAL? STACK,HERE,GLOBAL-OBJECTS,LOCAL-GLOBALS /FALSE CALL CORRIDOR-LOOK,P ZERO? STACK \FALSE FSET? P,PERSON \?ELS34 IN? P,GLOBAL-OBJECTS \?ELS34 GETP P,P?CHARACTER GET CHARACTER-TABLE,STACK >P CALL CORRIDOR-LOOK,P ZERO? STACK \FALSE CALL NOT-HERE,P RSTACK ?ELS34: CALL NOT-HERE,P RSTACK .FUNCT SEE-INSIDE?,OBJ FSET? OBJ,INVISIBLE /FALSE FSET? OBJ,TRANSBIT /TRUE FSET? OBJ,OPENBIT /TRUE FSET? OBJ,SURFACEBIT /TRUE RFALSE .FUNCT NOT-ACCESSIBLE?,OBJ CALL META-LOC,OBJ EQUAL? STACK,WINNER,HERE,GLOBAL-OBJECTS /FALSE CALL VISIBLE?,OBJ ZERO? STACK /TRUE RFALSE .FUNCT ARENT-TALKING PRINTR "You aren't talking to anyone!" .FUNCT ALREADY,OBJ,STR=0 EQUAL? OBJ,PLAYER \?ELS3 PRINTI "You're" JUMP ?CND1 ?ELS3: FSET? OBJ,PERSON \?ELS7 PRINTD OBJ PRINTI " is" JUMP ?CND1 ?ELS7: PRINTI "It's" ?CND1: PRINTI " already " ZERO? STR /TRUE PRINT STR PRINTR "!" .FUNCT NOT-CLEAR-WHOM PRINTR "It's not clear whom you're talking to." .FUNCT OKAY,OBJ=0,STR=0 EQUAL? WINNER,PLAYER \?ELS3 EQUAL? PRSA,V?WALK-TO,V?WALK,V?THROUGH \?CND1 RTRUE ?ELS3: PRINTI """" ?CND1: PRINTI "Okay" ZERO? OBJ /?CND13 PRINTI "," CALL PRINTT,OBJ ZERO? STR /?CND19 PRINTI " is now " PRINT STR ?CND19: EQUAL? STR,STR?47 \?ELS27 FSET OBJ,ONBIT JUMP ?CND13 ?ELS27: EQUAL? STR,STR?44 \?ELS29 FCLEAR OBJ,ONBIT JUMP ?CND13 ?ELS29: EQUAL? STR,STR?23 \?ELS31 FSET OBJ,OPENBIT JUMP ?CND13 ?ELS31: EQUAL? STR,STR?17 \?CND13 FCLEAR OBJ,OPENBIT ?CND13: ZERO? STR \?THN37 ZERO? OBJ \TRUE ?THN37: PRINTI "." EQUAL? WINNER,PLAYER /?CND41 PRINTI """" ?CND41: CRLF RTRUE .FUNCT WONT-HELP-TO-TALK-TO,OBJ PRINTI "It won't help to talk to " CALL PRINTA,OBJ PRINTR "!" .FUNCT TOO-BAD-BUT,OBJ,STR=0 PRINTI "Too bad, but" CALL PRINTT,OBJ ZERO? STR /TRUE PRINTI " is " PRINT STR PRINTR "." .FUNCT VISIBLE?,OBJ,L LOC OBJ >L FSET? OBJ,INVISIBLE /FALSE EQUAL? L,GLOBAL-OBJECTS /FALSE EQUAL? L,WINNER,HERE /TRUE EQUAL? L,LOCAL-GLOBALS \?ELS11 CALL GLOBAL-IN?,OBJ,HERE ZERO? STACK \TRUE ?ELS11: CALL CORRIDOR-LOOK,OBJ ZERO? STACK \TRUE CALL SEE-INSIDE?,L ZERO? STACK /FALSE CALL VISIBLE?,L ZERO? STACK /FALSE RTRUE .FUNCT WEIGHT,OBJ,CONT,WT=0 FIRST? OBJ >CONT \?CND1 ?PRG4: CALL WEIGHT,CONT ADD WT,STACK >WT NEXT? CONT >CONT /?PRG4 ?CND1: GETP OBJ,P?SIZE ADD WT,STACK RSTACK .FUNCT V-ADJUST CALL YOU-CANT RSTACK .FUNCT PRE-SAIM CALL PERFORM,V?AIM,PRSI,PRSO RTRUE .FUNCT V-SAIM CALL V-FOO RSTACK .FUNCT PRE-AIM EQUAL? PRSI,RIGHT,LEFT \?ELS5 EQUAL? PRSO,BAZOOKA,DART \FALSE PRINTR "You can aim that only at an enemy." ?ELS5: EQUAL? PRSI,GLOBAL-SNARK \?ELS14 PRINTR "You can't see the Snark!" ?ELS14: EQUAL? PRSI,SNARK,GLOBAL-THORPE,THORPE-SUB /FALSE EQUAL? PRSO,JOYSTICK \?ELS20 CALL PERFORM,V?MOVE-DIR,PRSO,PRSI RTRUE ?ELS20: PRINTR "You can aim something only to the left (port) or right (starboard), or at an enemy." .FUNCT V-AIM CALL YOU-CANT RSTACK .FUNCT PRE-SANALYZE CALL PERFORM,V?ANALYZE,PRSI,PRSO RTRUE .FUNCT V-SANALYZE CALL V-FOO RSTACK .FUNCT V-ANALYZE FSET? PRSO,PERSON \?ELS5 PRINTR "How?" ?ELS5: IN? COMPUTESTOR,HERE \?ELS9 CALL PERFORM,V?ASK-ABOUT,COMPUTESTOR,PRSO RTRUE ?ELS9: FSET? PRSO,ON?BIT \?ELS11 CALL CHECK-ON-OFF RSTACK ?ELS11: FSET? PRSO,DOORBIT \?ELS13 CALL CHECK-DOOR RSTACK ?ELS13: PRINTR "It looks normal." .FUNCT V-ANSWER PRINTI "Nobody seems to be waiting for your answer." CRLF SET 'P-CONT,0 SET 'QUOTE-FLAG,0 RTRUE .FUNCT V-REPLY SET 'P-CONT,0 SET 'QUOTE-FLAG,0 FSET? PRSO,DOORBIT \?ELS5 PRINTI "No one's knocking at" CALL THE-PRSO-PRINT PRINTR "." ?ELS5: FSET? PRSO,PERSON \?ELS9 CALL WAITING-FOR-YOU-TO-SPEAK RSTACK ?ELS9: CALL YOU-CANT RSTACK .FUNCT WAITING-FOR-YOU-TO-SPEAK CALL HE-SHE-IT,PRSO,1,STR?158 PRINTR " to be waiting for you to speak." .FUNCT V-ARM EQUAL? PRSO,GLOBAL-SUB,LOCAL-SUB \?ELS5 PRINTR "How?" ?ELS5: CALL YOU-CANT RSTACK .FUNCT PRE-ARREST FSET? PRSO,PERSON \?THN6 ZERO? PRSI /?ELS5 EQUAL? PRSI,GLOBAL-SABOTAGE /?ELS5 ?THN6: PRINTI "What a detective! ""Quick! Arrest that " PRINTD PRSO ZERO? PRSI /?CND12 PRINTI " for " PRINTD PRSI ?CND12: PRINTI " before " CALL HE-SHE-IT,PRSO,0,STR?159 PRINTR "!""" ?ELS5: ZERO? DOME-AIR-CRIME \?ELS23 ZERO? GREENUP-GUILT \?ELS23 PRINTR "For what? You have no evidence of a crime yet." ?ELS23: IN? PRSO,GLOBAL-OBJECTS \FALSE GETP PRSO,P?CHARACTER GET CHARACTER-TABLE,STACK >PRSO RFALSE .FUNCT V-ARREST EQUAL? PRSO,GLOBAL-GREENUP,GREENUP \?ELS5 ZERO? GREENUP-ESCAPE \?THN11 ZERO? GREENUP-TRAPPED \?THN11 ZERO? GREENUP-CUFFED /?ELS10 ?THN11: PRINTR "Once is enough!" ?ELS10: ZERO? GREENUP-GUILT \?ELS16 PRINTR "You don't have any evidence." ?ELS16: ZERO? SUB-IN-DOME /?THN21 ZERO? AIRLOCK-FULL /?ELS20 ?THN21: CALL TOO-BAD-BUT,PRSO,STR?16 RSTACK ?ELS20: EQUAL? PRSO,GLOBAL-GREENUP \?ELS27 PRINTI "You barely issue this order when" JUMP ?CND25 ?ELS27: PRINTI "Greenup turns and runs away. Then" ?CND25: REMOVE GREENUP FSET GREENUP,MUNGBIT PRINTI " a crew member reports seeing Greenup running behind the dormitory. ""He's going to try to escape in the " PRINTD SUB PRINTI ", " CALL PRINT-NAME,FIRST-NAME PRINTI "!"" " PRINTD BLY PRINTI " adds: """ EQUAL? HERE,BLY-OFFICE /?CND36 PRINTI "Come to my office, " CALL PRINT-NAME,FIRST-NAME PRINTI "! " ?CND36: PRINTI "We can see him on the " PRINTD STATION-MONITOR PRINTI "! The " PRINTD CONTROLS-OFFICE PRINTI " is " EQUAL? HERE,BLY-OFFICE /?CND43 PRINTI "t" ?CND43: PRINTI "here, too!""" CRLF MOVE BLY,BLY-OFFICE SET 'WINNER,PLAYER CALL QUEUE,I-GREENUP-ESCAPE,3 PUT STACK,0,1 EQUAL? HERE,BLY-OFFICE /?THN53 CALL GOTO,BLY-OFFICE ZERO? STACK /TRUE ?THN53: SET 'GREENUP-ESCAPE,1 CALL SCORE-OBJ,GREENUP RTRUE ?ELS5: PRINTI "You don't have enough evidence to arrest" CALL THE-PRSO-PRINT PRINTR "." .FUNCT PRE-ASK CALL PRE-ASK-ABOUT RSTACK .FUNCT V-ASK ZERO? P-CONT /?ELS5 FSET? PRSO,PERSON \?ELS5 SET 'WINNER,PRSO SET 'QCONTEXT,PRSO SET 'QCONTEXT-ROOM,HERE RTRUE ?ELS5: CALL V-ASK-ABOUT RSTACK .FUNCT PRE-ASK-ABOUT,L CALL META-LOC,PRSO >L EQUAL? L,CENTER-OF-LAB \?ELS3 EQUAL? PRSO,REMOTE-PERSON \?ELS3 FSET? MICROPHONE,ONBIT /?ELS3 CALL THIS-IS-IT,MICROPHONE PRINTI "She can't hear you while your " PRINTD MICROPHONE PRINTR " is off." ?ELS3: EQUAL? PRSO,COMPUTESTOR \?ELS9 FSET? COMPUTESTOR,ONBIT /?ELS9 CALL THIS-IS-IT,COMPUTESTOR PRINTI "The " PRINTD COMPUTESTOR PRINTR " is off!" ?ELS9: EQUAL? L,HERE /FALSE CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \FALSE ?CND1: PRINTI "Sorry, but" CALL THE-PRSO-PRINT CALL NOT-HERE-PERSON,PRSO RTRUE .FUNCT V-ASK-ABOUT EQUAL? PRSO,PLAYER /?THN6 FSET? PRSO,PERSON /?ELS5 ?THN6: CALL WONT-HELP-TO-TALK-TO,PRSO RETURN 2 ?ELS5: EQUAL? PRSA,V?ASK \?ELS11 PRINTI """Ask me about something in particular, " CALL PRINT-NAME,FIRST-NAME PRINTR ".""" ?ELS11: PRINTD PRSO PRINTR " doesn't seem to know about that." .FUNCT PRE-ASK-CONTEXT-ABOUT,P CALL QCONTEXT-GOOD? ZERO? STACK /?ELS5 CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO RTRUE ?ELS5: IN? COMPUTESTOR,HERE \?ELS7 FSET? COMPUTESTOR,ONBIT \?ELS7 CALL PERFORM,V?ASK-ABOUT,COMPUTESTOR,PRSO RTRUE ?ELS7: CALL FIND-FLAG,HERE,PERSON,WINNER >P ZERO? P /FALSE CALL PERFORM,V?ASK-ABOUT,P,PRSO RTRUE .FUNCT V-ASK-CONTEXT-ABOUT CALL ARENT-TALKING RSTACK .FUNCT PRE-ASK-FOR CALL PRE-ASK-ABOUT RSTACK .FUNCT V-ASK-FOR FSET? PRSO,PERSON \?ELS5 EQUAL? PRSO,PLAYER /?ELS5 PRINTD PRSO IN? PRSI,PRSO \?ELS14 PRINTI " hands you" CALL THE-PRSI-PRINT PRINTI "." CRLF MOVE PRSI,WINNER RTRUE ?ELS14: PRINTR " doesn't have that." ?ELS5: CALL HAR-HAR RSTACK .FUNCT PRE-ASK-CONTEXT-FOR,P CALL QCONTEXT-GOOD? ZERO? STACK /?ELS5 CALL PERFORM,V?ASK-FOR,QCONTEXT,PRSO RTRUE ?ELS5: CALL FIND-FLAG,HERE,PERSON,WINNER >P ZERO? P /FALSE CALL PERFORM,V?ASK-FOR,P,PRSO RTRUE .FUNCT V-ASK-CONTEXT-FOR CALL ARENT-TALKING RSTACK .FUNCT V-ATTACK CALL IKILL,STR?160 RSTACK .FUNCT PRE-BRING EQUAL? PRSI,0,PLAYER,GLOBAL-HERE /FALSE SET 'P-WON,0 PRINTR "(Sorry, but I don't understand.)" .FUNCT V-BRING CALL V-TAKE RSTACK .FUNCT PRE-SBRING CALL PERFORM,V?BRING,PRSI,PRSO RTRUE .FUNCT V-SBRING CALL V-FOO RSTACK .FUNCT V-BRUSH PRINTR """Cleanliness is next to Godliness,"" but here it's next to Impossible." .FUNCT V-$CALL,PER SET 'PER,PRSO EQUAL? PER,PLAYER \?ELS5 CALL WONT-HELP-TO-TALK-TO,PER RSTACK ?ELS5: FSET? PER,PERSON \?ELS7 EQUAL? PRSO,REMOTE-PERSON /?CND8 GETP PRSO,P?CHARACTER GET CHARACTER-TABLE,STACK >PER ?CND8: CALL META-LOC,PER EQUAL? STACK,HERE /?THN16 CALL CORRIDOR-LOOK,PER ZERO? STACK /?ELS15 ?THN16: CALL GRAB-ATTENTION,PER ZERO? STACK /TRUE PRINTD PER PRINTR " is listening." ?ELS15: CALL NOT-HERE,PER RSTACK ?ELS7: SET 'P-WON,0 CALL MISSING-VERB RSTACK .FUNCT PRE-PHONE,P,PP ZERO? PRSI /?ELS5 EQUAL? PRSI,MICROPHONE-DOME,MICROPHONE \?ELS5 CALL PERFORM,PRSA,PRSO,VIDEOPHONE RTRUE ?ELS5: ZERO? PRSI /?ELS9 EQUAL? PRSI,SONARPHONE,VIDEOPHONE,INTERCOM \?ELS9 EQUAL? REMOTE-PERSON-ON,PRSI \?ELS16 PRINTI "You're still on the line to " PRINTD REMOTE-PERSON PRINTR "." ?ELS16: FSET? PRSI,MUNGBIT \?ELS20 PRINTI "The " PRINTD PRSI PRINTR "'s conked out!" ?ELS20: EQUAL? PRSI,SONARPHONE /FALSE CALL GLOBAL-IN?,PRSI,HERE ZERO? STACK \FALSE PRINTI "There's no " PRINTD PRSI PRINTR " here." ?ELS9: ZERO? PRSI /?ELS32 CALL TOO-BAD-BUT,PRSI,STR?161 RSTACK ?ELS32: FSET? PRSO,PERSON \?ELS41 IN? PRSO,HERE \?ELS41 CALL BITE-YOU RSTACK ?ELS41: EQUAL? PRSO,PLAYER \?ELS45 CALL HAR-HAR RSTACK ?ELS45: FSET? PRSO,PERSON \?ELS49 GETP PRSO,P?CHARACTER GET CHARACTER-TABLE,STACK >P ZERO? P /?ELS49 CALL META-LOC,P CALL FAR-AWAY?,STACK ZERO? STACK \?ELS49 FSET? P,BUSYBIT /?THN55 FSET? P,MUNGBIT \?CND52 ?THN55: CALL HE-SHE-IT,P,1 PRINTR "'s busy right now." ?CND52: CALL MOVE-HERE-NOT-SUB,P CALL SAID-TO,P PRINTI """Right here, " CALL PRINT-NAME,FIRST-NAME PRINTI ","" " CALL HE-SHE-IT,P LOC P EQUAL? HERE,STACK \?ELS65 PRINTR " replies. ""What would you like me to do?""" ?ELS65: PRINTR " shouts. ""Come outside to talk!""" ?ELS49: ZERO? PRSI \FALSE CALL GLOBAL-IN?,VIDEOPHONE,HERE ZERO? STACK /?ELS78 CALL PERFORM,PRSA,PRSO,VIDEOPHONE RTRUE ?ELS78: IN? SONARPHONE,HERE \?ELS80 CALL PERFORM,PRSA,PRSO,SONARPHONE RTRUE ?ELS80: CALL GLOBAL-IN?,INTERCOM,HERE ZERO? STACK /?ELS82 CALL PERFORM,PRSA,PRSO,INTERCOM RTRUE ?ELS82: PRINTR "There's nothing to phone with here." .FUNCT V-PHONE,PER FSET? PRSO,PERSON \?ELS5 GETP PRSO,P?CHARACTER GET CHARACTER-TABLE,STACK >PER ZERO? PER /?ELS5 CALL META-LOC,PER EQUAL? STACK,HERE /?THN8 CALL CORRIDOR-LOOK,PER ZERO? STACK /?ELS5 ?THN8: CALL PERFORM,V?$CALL,PRSO RTRUE ?ELS5: EQUAL? -1,P-NUMBER /?ELS11 PRINTR "There's no point in calling that number." ?ELS11: EQUAL? PRSO,YOUR-LABORATORY,DOME-LAB,AQUADOME \?ELS15 PRINTR "There's no answer." ?ELS15: FSET? PRSO,PERSON /?ELS19 CALL TOO-BAD-BUT,PRSO PRINTR " has no phone." ?ELS19: CALL META-LOC,PRSO EQUAL? STACK,HERE \?ELS23 PRINTD PRSO PRINTR " is right here!" ?ELS23: PRINTI "There's no sense in phoning " PRINTD PRSO PRINTR "." .FUNCT V-BOARD IN? PRSO,ROOMS /?THN6 FSET? PRSO,DOORBIT \?ELS5 ?THN6: CALL V-THROUGH RSTACK ?ELS5: CALL YOU-CANT RSTACK .FUNCT V-CLIMB-ON FSET? PRSO,FURNITURE \?ELS5 FSET? PRSO,VEHBIT \?ELS5 MOVE PLAYER,PRSO PRINTI "You're now sitting on" CALL THE-PRSO-PRINT PRINTR "." ?ELS5: FSET? PRSO,FURNITURE \?ELS11 PRINTR "That isn't the kind of thing to sit on!" ?ELS11: CALL YOU-CANT,STR?162 RSTACK .FUNCT V-CLIMB-UP,DIR=P?UP,OBJ=0,X,?TMP1 GETPT HERE,DIR ZERO? STACK /?ELS5 CALL DO-WALK,DIR RTRUE ?ELS5: ZERO? OBJ \?ELS7 CALL YOU-CANT,STR?138 RSTACK ?ELS7: ZERO? OBJ /?ELS9 GETPT PRSO,P?SYNONYM >X PTSIZE X DIV STACK,2 SUB STACK,1 CALL ZMEMQ,W?WALL,X,STACK ZERO? STACK /?ELS9 PRINTR "Climbing the walls is no help." ?ELS9: CALL HAR-HAR RSTACK .FUNCT V-CLIMB-DOWN FSET? PRSO,FURNITURE \?ELS5 FSET? PRSO,VEHBIT \?ELS5 CALL V-CLIMB-ON RTRUE ?ELS5: CALL V-CLIMB-UP,P?DOWN RSTACK .FUNCT V-CLOSE FSET? PRSO,CONTBIT /?ELS5 FSET? PRSO,DOORBIT /?ELS5 FSET? PRSO,WINDOWBIT /?ELS5 CALL YOU-CANT RSTACK ?ELS5: FSET? PRSO,DOORBIT /?THN10 FSET? PRSO,WINDOWBIT \?ELS9 ?THN10: FSET? PRSO,OPENBIT \?ELS16 FSET? PRSO,MUNGBIT \?ELS21 PRINTR "It won't stay closed. The latch is broken." ?ELS21: CALL OKAY,PRSO,STR?17 RSTACK ?ELS16: CALL ALREADY,PRSO,STR?17 RSTACK ?ELS9: FSET? PRSO,SURFACEBIT /?ELS29 GETP PRSO,P?CAPACITY ZERO? STACK /?ELS29 FSET? PRSO,OPENBIT \?ELS36 CALL OKAY,PRSO,STR?17 RSTACK ?ELS36: CALL ALREADY,PRSO,STR?17 RSTACK ?ELS29: CALL YOU-CANT RSTACK .FUNCT V-COME,CN,CHR,COR,PCOR,L EQUAL? PRSO,PLAYER \?ELS5 CALL NOT-CLEAR-WHOM RSTACK ?ELS5: GETP PRSO,P?CHARACTER >CN GET CHARACTER-TABLE,CN >CHR CALL META-LOC,CHR >L EQUAL? HERE,L \?ELS7 PRINTI "You're in the same place as " PRINTD PRSO PRINTR "!" ?ELS7: ZERO? L \?ELS18 PRINTD PRSO PRINTR " has left the grounds." ?ELS18: GETP HERE,P?CORRIDOR >COR ZERO? COR /?ELS29 GETP L,P?CORRIDOR >PCOR ZERO? PCOR /?ELS29 BAND COR,PCOR ZERO? STACK /?ELS29 CALL COR-DIR,HERE,L >PRSO CALL V-WALK RSTACK ?ELS29: PRINTI "You seem to have lost track of " PRINTD PRSO PRINTR "." .FUNCT PRE-COME-WITH CALL PERFORM,V?WALK-TO,PRSI RTRUE .FUNCT V-COME-WITH CALL V-FOO RSTACK .FUNCT PRE-COMPARE,?TMP1 ZERO? PRSI \?ELS5 GET P-PRSO,0 EQUAL? 1,STACK \?ELS5 PRINTI "Use the command: COMPARE IT TO " PRINTD SOMETHING PRINTR "." ?ELS5: GET P-PRSO,0 EQUAL? 2,STACK \FALSE PUT P-PRSO,0,1 GET P-PRSO,1 >?TMP1 GET P-PRSO,2 CALL PERFORM,PRSA,?TMP1,STACK RTRUE .FUNCT V-COMPARE EQUAL? PRSO,PRSI \?ELS5 PRINTR "They're the same thing!" ?ELS5: PRINTR "They're not a bit alike." .FUNCT V-CONFRONT EQUAL? PRSO,PLAYER \?ELS5 CALL ARENT-TALKING RSTACK ?ELS5: FSET? PRSO,PERSON /?ELS7 PRINTI "That ought to put a scare into" CALL THE-PRSO-PRINT PRINTR "." ?ELS7: PRINTD PRSO CALL PICK-ONE,WHO-CARES PRINT STACK PRINTR "." .FUNCT V-CUT CALL YOU-CANT RSTACK .FUNCT V-MUNG FSET? PRSO,DOORBIT \?ELS5 ZERO? PRSI \?ELS5 FSET? PRSO,OPENBIT \?ELS12 PRINTR "You'd fly through the open door if you tried." ?ELS12: PRINTR "Why don't you just open it instead?" ?ELS5: FSET? PRSO,PERSON /?ELS20 CALL YOU-CANT RSTACK ?ELS20: ZERO? PRSI \?ELS22 PRINTI "Trying to destroy " PRINTD PRSO PRINTR " with your bare hands is suicidal." ?ELS22: FSET? PRSI,WEAPONBIT /?ELS26 PRINTI "You can't destroy" CALL THE-PRSO-PRINT PRINTI " with" CALL THE-PRSI-PRINT PRINTR "." ?ELS26: CALL YOU-CANT RSTACK .FUNCT V-DIAGNOSE ZERO? PRSO /?ELS5 CALL YOU-CANT RSTACK ?ELS5: FSET? ARM,MUNGBIT \?ELS8 PRINTR "Your arm is seriously gashed." ?ELS8: PRINTR "You're wide awake and in good health." .FUNCT PRE-DISCUSS ZERO? PRSI \?CND1 SET 'PRSI,PLAYER ?CND1: CALL PERFORM,V?TELL-ABOUT,PRSI,PRSO RTRUE .FUNCT V-DISCUSS CALL V-FOO RSTACK .FUNCT V-DIVE ZERO? SUB-IN-TANK /?ELS5 CALL WHY-NEED,DEPTH-CONTROL,TEST-TANK ZERO? STACK \TRUE ?ELS5: ZERO? SUB-IN-DOME /?ELS9 CALL WHY-NEED,DEPTH-CONTROL,AIRLOCK ZERO? STACK \TRUE ?ELS9: EQUAL? PRSO,0,ROOMS /?THN14 EQUAL? PRSO,SEA,BAY,GLOBAL-WATER \?ELS13 ?THN14: ZERO? SUB-DEPTH /?THN21 ZERO? PRSO \?ELS20 ?THN21: CALL DO-WALK,P?DOWN RTRUE ?ELS20: PRINTI "You're already " PRINTD UNDERWATER PRINTR "." ?ELS13: FSET? PRSO,UNITBIT \?ELS28 CALL PERFORM,V?SET,DEPTH-CONTROL,PRSO RTRUE ?ELS28: PRINTI "You can do this by setting the " PRINTD DEPTH-CONTROL PRINTR " to the desired depth of your dive." .FUNCT V-DOCK EQUAL? PRSO,LOCAL-SUB,GLOBAL-SUB,ROOMS \?ELS5 PRINTI "You can't dock the " PRINTD SUB PRINTR " now." ?ELS5: CALL YOU-CANT RSTACK .FUNCT V-DRINK CALL YOU-CANT RSTACK .FUNCT V-DROP CALL IDROP ZERO? STACK /FALSE CALL GROUND-DESC CALL OKAY,PRSO,STACK RSTACK .FUNCT GROUND-DESC EQUAL? HERE,SUB \?ELS5 RETURN STR?163 ?ELS5: RETURN STR?164 .FUNCT V-EAT CALL YOU-CANT RSTACK .FUNCT V-EMPTY ZERO? PRSI \?ELS5 CALL PERFORM,V?EMPTY,PRSO,GLOBAL-WATER RTRUE ?ELS5: PRINTR "You may know how to do that, but this program doesn't." .FUNCT V-ENTER CALL DO-WALK,P?IN RTRUE .FUNCT PRE-THROUGH FSET? PRSO,PERSON \FALSE CALL PERFORM,V?FOLLOW,PRSO RTRUE .FUNCT V-THROUGH,OBJ=0,RM,DIR IN? PRSO,ROOMS \?ELS5 CALL PERFORM,V?WALK-TO,PRSO RTRUE ?ELS5: FSET? PRSO,DOORBIT \?ELS7 FSET? PRSO,OPENBIT \?ELS7 CALL DOOR-ROOM,HERE,PRSO >RM ZERO? RM /?ELS14 CALL GOTO,RM ZERO? STACK /?ELS14 CALL OKAY RSTACK ?ELS14: PRINTI "Sorry, but the """ PRINTD PRSO PRINTR """ must be somewhere else." ?ELS7: ZERO? OBJ \?ELS22 FSET? PRSO,TAKEBIT /?ELS22 PRINTI "You hit your head against it as you try to go through" CALL THE-PRSO-PRINT PRINTR "." ?ELS22: ZERO? OBJ /?ELS28 PRINTR "You can't do that!" ?ELS28: IN? PRSO,WINNER \?ELS33 PRINTR "You must think you're a contortionist!" ?ELS33: CALL HAR-HAR RSTACK .FUNCT PRE-EXAMINE,VAL CALL ROOM-CHECK ZERO? STACK \TRUE EQUAL? P-ADVERB,W?CAREFULLY \FALSE CALL INT-WAIT,3 >VAL ZERO? VAL \?ELS12 PRINTI "You never got to finish looking over" CALL THE-PRSO-PRINT PRINTR "." ?ELS12: EQUAL? VAL,M-FATAL /TRUE RFALSE .FUNCT V-EXAMINE,T EQUAL? PRSO,INTDIR \?ELS5 PRINTR "If you want to see what's there, go there!" ?ELS5: EQUAL? PRSO,OXYGEN-GEAR-BLY,OXYGEN-GEAR-DIVER,OXYGEN-GEAR-OTHER \?ELS9 CALL NOTHING-SPECIAL RSTACK ?ELS9: IN? PRSO,GLOBAL-OBJECTS \?ELS11 CALL NOT-HERE,PRSO RTRUE ?ELS11: CALL META-LOC,PRSO EQUAL? STACK,HERE,LOCAL-GLOBALS /?ELS13 CALL TOO-BAD-BUT,PRSO,STR?16 RSTACK ?ELS13: GETP PRSO,P?TEXT >T ZERO? T /?ELS15 PRINT T CRLF RTRUE ?ELS15: FSET? PRSO,CONTBIT \?ELS19 CALL V-LOOK-INSIDE RSTACK ?ELS19: FSET? PRSO,ON?BIT \?ELS23 CALL CHECK-ON-OFF RSTACK ?ELS23: FSET? PRSO,DOORBIT \?ELS25 CALL CHECK-DOOR RSTACK ?ELS25: CALL NOTHING-SPECIAL RSTACK .FUNCT NOTHING-SPECIAL PRINTI "There's nothing special about" CALL THE-PRSO-PRINT PRINTR "." .FUNCT GLOBAL-IN?,OBJ1,OBJ2,T GETPT OBJ2,P?GLOBAL >T ZERO? T /FALSE PTSIZE T SUB STACK,1 CALL ZMEMQB,OBJ1,T,STACK RSTACK .FUNCT PRE-FILL ZERO? PRSI /FALSE EQUAL? PRSI,GLOBAL-WATER /FALSE CALL HAR-HAR RSTACK .FUNCT V-FILL PRINTR "You may know how to do that, but this program doesn't." .FUNCT PRE-FIND,CHR,?TMP1 EQUAL? PRSO,PLAYER /FALSE IN? PRSO,ROOMS \?ELS8 EQUAL? PRSO,HERE \?ELS13 CALL ALREADY,PLAYER,STR?55 RSTACK ?ELS13: FSET? PRSO,TOUCHBIT \?ELS15 PRINTR "You should know - you've been there!" ?ELS15: GETP LOCAL-SUB,P?TEXT PRINT STACK CRLF RTRUE ?ELS8: FSET? PRSO,PERSON \FALSE EQUAL? PRSO,REMOTE-PERSON \?CND24 ZERO? REMOTE-PERSON-REMLOC /?CND24 CALL HE-SHE-IT,REMOTE-PERSON,1 PRINTI "'s in the " PRINTD REMOTE-PERSON-REMLOC PRINTR "." ?CND24: GETP PRSO,P?CHARACTER >CHR IN? PRSO,GLOBAL-OBJECTS \?CND31 GET CHARACTER-TABLE,CHR >PRSO ?CND31: LOC PRSO ZERO? STACK /?THN37 LOC PRSO CALL FAR-AWAY?,STACK ZERO? STACK /?CND34 ?THN37: PRINTI "Who knows where " CALL HE-SHE-IT,PRSO PRINTR " is now?" ?CND34: CALL META-LOC,WINNER >?TMP1 CALL META-LOC,PRSO EQUAL? ?TMP1,STACK \?CND43 EQUAL? WINNER,PLAYER \?ELS48 CALL BITE-YOU RTRUE ?ELS48: PRINTR """Ahem...""" ?CND43: EQUAL? WINNER,PLAYER /?ELS55 PRINTI """I think " CALL HE-SHE-IT,PRSO JUMP ?CND53 ?ELS55: CALL HE-SHE-IT,PRSO,1 ?CND53: PRINTI "'s in" CALL META-LOC,PRSO CALL PRINTT,STACK PRINTI "." EQUAL? WINNER,PLAYER /?CND62 PRINTI """" ?CND62: CRLF RTRUE .FUNCT BITE-YOU PRINTI "If " CALL HE-SHE-IT,PRSO PRINTI " were any closer, " CALL HE-SHE-IT,PRSO PRINTR "'d bite you!" .FUNCT V-FIND,L LOC PRSO >L EQUAL? PLAYER,WINNER /?CND1 PRINTI """" ?CND1: EQUAL? PRSO,PLAYER \?ELS8 PRINTI "You're right here, " FSET? L,SURFACEBIT \?ELS13 PRINTI "on" JUMP ?CND11 ?ELS13: PRINTI "in" ?CND11: CALL PRINTT,L PRINTI "." JUMP ?CND6 ?ELS8: IN? PRSO,PLAYER \?ELS23 PRINTI "You have it." JUMP ?CND6 ?ELS23: IN? PRSO,WINNER \?ELS27 PRINTI "I have it, " CALL PRINT-NAME,FIRST-NAME PRINTI "." JUMP ?CND6 ?ELS27: EQUAL? L,LOCAL-GLOBALS \?ELS35 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \?THN32 ?ELS35: IN? PRSO,HERE /?THN32 EQUAL? PRSO,PSEUDO-OBJECT \?ELS31 ?THN32: PRINTI "It's right here." JUMP ?CND6 ?ELS31: EQUAL? L,GLOBAL-OBJECTS,LOCAL-GLOBALS \?ELS39 PRINTI "It's around somewhere." JUMP ?CND6 ?ELS39: CALL META-LOC,PRSO CALL FAR-AWAY?,STACK ZERO? STACK /?ELS43 PRINTI "It's far away from here." JUMP ?CND6 ?ELS43: FSET? L,PERSON \?ELS47 PRINTD L PRINTI " has it." JUMP ?CND6 ?ELS47: FSET? L,SURFACEBIT \?ELS51 PRINTI "It's on" CALL PRINTT,L PRINTI "." JUMP ?CND6 ?ELS51: FSET? L,CONTBIT /?THN56 IN? L,ROOMS \?ELS55 ?THN56: PRINTI "It's in" CALL PRINTT,L PRINTI "." JUMP ?CND6 ?ELS55: PRINTI "It's nowhere in particular." ?CND6: EQUAL? PLAYER,WINNER /?CND64 PRINTI """" ?CND64: CRLF RTRUE .FUNCT V-FIND-WITH CALL V-FIND RSTACK .FUNCT V-FIX CALL MORE-SPECIFIC RSTACK .FUNCT V-FOLLOW,CN,CHR,COR,PCOR,L EQUAL? PRSO,PLAYER \?ELS5 CALL NOT-CLEAR-WHOM RSTACK ?ELS5: FSET? PRSO,PERSON /?ELS7 PRINTI "How tragic to see a formerly great inventor stalking " CALL PRINTA,PRSO PRINTR "!" ?ELS7: GETP PRSO,P?CHARACTER >CN GET CHARACTER-TABLE,CN >CHR CALL META-LOC,CHR >L EQUAL? HERE,L \?ELS11 PRINTI "You're in the same place as " PRINTD PRSO PRINTR "!" ?ELS11: ZERO? L \?ELS22 PRINTD PRSO PRINTR " has left the grounds." ?ELS22: CALL PERFORM,V?WALK-TO,CHR RTRUE .FUNCT V-FOO PRINTR "[Foo!! This is a bug!!]" .FUNCT PRE-GIVE CALL HELD?,PRSO ZERO? STACK \FALSE EQUAL? PRSI,PLAYER /FALSE PRINTI "That's easy for you to say, since " CALL HE-SHE-IT,WINNER PRINTI " do" EQUAL? WINNER,PLAYER /?CND12 PRINTI "es" ?CND12: PRINTR "n't even have it." .FUNCT V-GIVE ZERO? PRSI \?ELS5 CALL YOU-CANT RSTACK ?ELS5: FSET? PRSI,PERSON /?ELS7 PRINTI "You can't give " CALL PRINTA,PRSO PRINTI " to " CALL PRINTA,PRSI PRINTR "!" ?ELS7: EQUAL? PRSI,PLAYER \?ELS11 CALL PERFORM,V?TAKE,PRSO RTRUE ?ELS11: MOVE PRSO,PRSI PRINTD PRSI PRINTR " accepts the offer." .FUNCT PRE-SGIVE CALL PERFORM,V?GIVE,PRSI,PRSO RTRUE .FUNCT V-SGIVE CALL V-FOO RSTACK .FUNCT PRE-GOODBYE CALL PRE-HELLO RSTACK .FUNCT V-GOODBYE ZERO? REMOTE-PERSON /?ELS5 EQUAL? PRSO,0,REMOTE-PERSON \?ELS5 CALL PHONE-OFF PRINTI """I hope to see you soon, " CALL PRINT-NAME,FIRST-NAME PRINTR ".""" ?ELS5: FSET? AIR-SUPPLY-SYSTEM,MUNGBIT /?ELS11 CALL FINE-SEQUENCE ZERO? STACK \TRUE ?ELS11: CALL V-HELLO,0 RSTACK .FUNCT PRE-HANGUP EQUAL? PRSO,MICROPHONE-DOME,MICROPHONE \?ELS5 CALL PERFORM,PRSA,VIDEOPHONE RTRUE ?ELS5: EQUAL? PRSO,SONARPHONE,VIDEOPHONE,INTERCOM \?ELS7 EQUAL? REMOTE-PERSON-ON,PRSO \?ELS10 PRINTI "You're still on the line to " PRINTD REMOTE-PERSON PRINTR "." ?ELS10: FSET? PRSO,MUNGBIT \?ELS14 PRINTI "The " PRINTD PRSO PRINTR "'s conked out!" ?ELS14: EQUAL? PRSO,SONARPHONE /FALSE CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \FALSE PRINTI "There's no " PRINTD PRSO PRINTR " here." ?ELS7: EQUAL? HERE,CENTER-OF-DOME \?ELS26 CALL PERFORM,V?PUT,PRSO,HOOK RTRUE ?ELS26: EQUAL? PRSO,ROOMS /FALSE CALL TOO-BAD-BUT,PRSO,STR?161 RSTACK .FUNCT V-HANGUP ZERO? REMOTE-PERSON /?ELS5 CALL PERFORM,V?GOODBYE RTRUE ?ELS5: PRINTR "You're not talking to anyone!" .FUNCT PRE-HELLO,P ZERO? PRSO \FALSE CALL QCONTEXT-GOOD? ZERO? STACK /?ELS8 CALL PERFORM,PRSA,QCONTEXT RTRUE ?ELS8: EQUAL? WINNER,PLAYER \?ELS10 CALL FIND-FLAG,HERE,PERSON,WINNER >P ZERO? P /?ELS10 FSET? P,INVISIBLE /?ELS10 CALL PERFORM,PRSA,P RTRUE ?ELS10: CALL NOT-CLEAR-WHOM RSTACK .FUNCT V-HELLO,HELL=1 FSET? PRSO,PERSON \?ELS5 ZERO? HELL /?ELS10 PRINTD PRSO PRINTR " nods at you." ?ELS10: CALL READY-FOR-SNARK? ZERO? STACK /?ELS15 PRINTR """Good hunting!""" ?ELS15: PRINTR """Don't tell me you're leaving already!""" ?ELS5: ZERO? PRSO /?ELS23 PRINTI "Only nuts say """ ZERO? HELL /?ELS31 PUSH STR?165 JUMP ?CND27 ?ELS31: PUSH STR?166 ?CND27: PRINT STACK PRINTI """ to " CALL PRINTA,PRSO PRINTR "." ?ELS23: CALL NOT-CLEAR-WHOM RSTACK .FUNCT V-HELP ZERO? PRSO \?ELS5 SET 'P-WON,0 PRINT HELP-TEXT CRLF RTRUE ?ELS5: EQUAL? PRSO,PLAYER \?ELS9 CALL PERFORM,V?GIVE,HINT,PLAYER RTRUE ?ELS9: CALL MORE-SPECIFIC RSTACK .FUNCT V-KICK CALL HACK-HACK,STR?168 RSTACK .FUNCT V-KILL CALL IKILL,STR?169 RSTACK .FUNCT IKILL,STR ZERO? PRSO \?ELS5 PRINTI "There's nothing here to " PRINT STR PRINTR "." ?ELS5: ZERO? PRSI \?ELS9 FSET? PRSO,WEAPONBIT \?ELS9 PRINTI "You didn't say what to " PRINT STR PRINTR " at." ?ELS9: IN? PRSO,GLOBAL-OBJECTS \?ELS15 PRINTR "You can't do it from here." ?ELS15: PRINTR "You think it over. It's not worth the trouble." .FUNCT V-KISS FSET? PRSO,PERSON \?ELS5 CALL FACE-RED,STR?170 RSTACK ?ELS5: PRINTR "What a (ahem!) strange idea!" .FUNCT V-KNOCK FSET? PRSO,DOORBIT /?THN6 FSET? PRSO,WINDOWBIT \?ELS5 ?THN6: CALL DOOR-ROOM,HERE,PRSO CALL INHABITED?,STACK ZERO? STACK /?ELS12 PRINTR "Someone shouts ""Come in!""" ?ELS12: PRINTR "There's no answer." ?ELS5: PRINTI "Why knock on " CALL PRINTA,PRSO PRINTR "?" .FUNCT V-LAUNCH CALL YOU-CANT RSTACK .FUNCT V-STAND,P LOC WINNER FSET? STACK,SURFACEBIT /?THN6 LOC WINNER FSET? STACK,FURNITURE \?ELS5 ?THN6: MOVE WINNER,HERE PRINTR "You're on your own feet again." ?ELS5: CALL ALREADY,PLAYER,STR?171 RSTACK .FUNCT V-LEAVE CALL DO-WALK,P?OUT RTRUE .FUNCT V-LEVEL CALL YOU-CANT RSTACK .FUNCT V-LISTEN FSET? PRSO,PERSON \?ELS5 CALL WAITING-FOR-YOU-TO-SPEAK RTRUE ?ELS5: CALL TOO-BAD-BUT,PRSO PRINTR " makes no sound." .FUNCT V-LOCK PRINTR "That won't help." .FUNCT V-LOOK CALL DESCRIBE-ROOM,1 ZERO? STACK /FALSE CALL DESCRIBE-OBJECTS,1 RSTACK .FUNCT V-LOOK-BEHIND FSET? PRSO,DOORBIT \?ELS5 FSET? PRSO,OPENBIT /?ELS5 CALL THIS-IS-IT,PRSO CALL TOO-BAD-BUT,PRSO,STR?17 RSTACK ?ELS5: PRINTI "There's nothing behind" CALL THE-PRSO-PRINT PRINTR "." .FUNCT V-LOOK-DOWN EQUAL? PRSO,ROOMS \?ELS5 PRINTI "There's nothing interesting " CALL GROUND-DESC PRINT STACK PRINTR "." ?ELS5: CALL HAR-HAR RSTACK .FUNCT PRE-LOOK-INSIDE CALL ROOM-CHECK RSTACK .FUNCT V-LOOK-INSIDE,DIR=P?IN,RM EQUAL? PRSO,GLOBAL-HERE \?ELS5 CALL PERFORM,V?LOOK RTRUE ?ELS5: FSET? PRSO,RLANDBIT \?ELS7 CALL ROOM-PEEK,PRSO RSTACK ?ELS7: FSET? PRSO,DOORBIT \?ELS9 FSET? PRSO,OPENBIT \?ELS14 CALL DOOR-ROOM,HERE,PRSO >RM ZERO? RM /?ELS19 CALL ROOM-PEEK,RM RSTACK ?ELS19: PRINTI "The " PRINTD PRSO PRINTR " is open, but you can't tell what's beyond it." ?ELS14: CALL THIS-IS-IT,PRSO CALL TOO-BAD-BUT,PRSO,STR?17 RSTACK ?ELS9: FSET? PRSO,WINDOWBIT \?ELS27 PRINTI "You can't tell what's beyond" CALL THE-PRSO-PRINT PRINTR "." ?ELS27: FSET? PRSO,CONTBIT /?THN37 FSET? PRSO,SURFACEBIT \?ELS36 ?THN37: CALL SEE-INSIDE?,PRSO ZERO? STACK /?ELS43 FIRST? PRSO \?ELS48 CALL PRINT-CONT,PRSO ZERO? STACK \TRUE ?ELS48: FSET? PRSO,SURFACEBIT \?ELS52 PRINTI "There's nothing on" CALL THE-PRSO-PRINT PRINTR "." ?ELS52: CALL TOO-BAD-BUT,PRSO,STR?70 RSTACK ?ELS43: CALL TOO-BAD-BUT,PRSO,STR?17 RSTACK ?ELS36: FSET? PRSO,PERSON \?ELS60 PRINTR "You forgot to bring your X-ray glasses." ?ELS60: EQUAL? DIR,P?IN \?ELS64 CALL YOU-CANT,STR?172 RSTACK ?ELS64: EQUAL? DIR,P?OUT \FALSE CALL YOU-CANT,STR?173 RSTACK .FUNCT ROOM-PEEK,RM,OLD-HERE SET 'OLD-HERE,HERE CALL SEE-INTO?,RM ZERO? STACK /FALSE SET 'HERE,RM PRINTI "You take a quick peek into" CALL PRINTT,RM PRINTI ":" CRLF CALL DESCRIBE-OBJECTS,1 ZERO? STACK \?CND8 PRINTI "You can't see anything interesting." CRLF ?CND8: SET 'HERE,OLD-HERE RTRUE .FUNCT SEE-INTO?,THERE,P,L,T,O SET 'P,0 ?PRG1: NEXTP HERE,P >P ZERO? P \?ELS5 PRINTI "You can't seem to find that room." CRLF RFALSE ?ELS5: EQUAL? P,P?IN,P?OUT /TRUE LESS? P,LOW-DIRECTION /?PRG1 GETPT HERE,P >T PTSIZE T >L EQUAL? L,UEXIT \?ELS14 GETB T,REXIT EQUAL? STACK,THERE /TRUE ?ELS14: EQUAL? L,DEXIT \?ELS18 GETB T,REXIT EQUAL? STACK,THERE \?ELS18 GETB T,DEXITOBJ FSET? STACK,OPENBIT /TRUE PRINTI "The door to that room is closed." CRLF RFALSE ?ELS18: EQUAL? L,CEXIT \?PRG1 GETB T,REXIT EQUAL? STACK,THERE \?PRG1 GETB T,CEXITFLAG VALUE STACK ZERO? STACK \TRUE PRINTI "You can't seem to find that room." CRLF RFALSE .FUNCT V-LOOK-ON FSET? PRSO,SURFACEBIT \?ELS5 CALL V-LOOK-INSIDE RSTACK ?ELS5: PRINTI "There's no good surface on" CALL THE-PRSO-PRINT PRINTR "." .FUNCT V-LOOK-OUTSIDE CALL V-LOOK-INSIDE,P?OUT RSTACK .FUNCT V-LOOK-UNDER FSET? PRSO,FURNITURE \?ELS5 PRINTI "You twist your head to look under" CALL THE-PRSO-PRINT PRINTR " but find nothing." ?ELS5: FSET? PRSO,PERSON \?ELS9 PRINTI "Nope. Nothing hiding under " PRINTD PRSO PRINTR "." ?ELS9: LOC PRSO EQUAL? STACK,HERE,LOCAL-GLOBALS \?ELS13 PRINTR "There's nothing there but dust." ?ELS13: PRINTR "That's not a bit useful." .FUNCT V-LOOK-UP ZERO? PRSI /?ELS5 PRINTI "There's no information in" CALL THE-PRSI-PRINT PRINTR " about that." ?ELS5: EQUAL? PRSO,ROOMS \?ELS10 PRINTR "You can see the ceiling." ?ELS10: IN? NOTEBOOK,WINNER \?ELS19 CALL PERFORM,V?LOOK-UP,PRSO,NOTEBOOK RTRUE ?ELS19: PRINTI "Huh? Without the " PRINTD NOTEBOOK PRINTR "?" .FUNCT V-MAKE PRINTR """Eat, drink, and make merry, for tomorrow we shall die!""" .FUNCT PRE-MOVE CALL HELD?,PRSO ZERO? STACK /FALSE PRINTR "Juggling isn't one of your talents." .FUNCT V-MOVE FSET? PRSO,TAKEBIT \?ELS5 PRINTI "Moving" CALL THE-PRSO-PRINT PRINTR " reveals nothing." ?ELS5: CALL YOU-CANT RSTACK .FUNCT PRE-MOVE-DIR EQUAL? PRSI,FAST,MEDIUM /FALSE EQUAL? PRSI,SLOW,OFF,INTDIR /FALSE SET 'P-WON,0 PRINTR "(Sorry, but I don't understand that sentence.)" .FUNCT V-MOVE-DIR PRINTI "You can't move" CALL THE-PRSO-PRINT PRINTR " in any particular direction." .FUNCT V-OPEN,F,STR FSET? PRSO,CONTBIT /?ELS5 FSET? PRSO,DOORBIT /?ELS5 FSET? PRSO,WINDOWBIT /?ELS5 CALL YOU-CANT RSTACK ?ELS5: FSET? PRSO,DOORBIT /?THN10 FSET? PRSO,WINDOWBIT /?THN10 GETP PRSO,P?CAPACITY ZERO? STACK /?ELS9 ?THN10: FSET? PRSO,OPENBIT \?ELS16 CALL ALREADY,PRSO,STR?23 RSTACK ?ELS16: FSET? PRSO,LOCKED \?ELS18 CALL TOO-BAD-BUT,PRSO,STR?174 RSTACK ?ELS18: FSET? PRSO,MUNGBIT \?ELS20 PRINTR "You can't open it. The latch is broken." ?ELS20: FSET PRSO,OPENBIT FSET? PRSO,DOORBIT /?THN30 FSET? PRSO,WINDOWBIT /?THN30 FIRST? PRSO \?THN30 FSET? PRSO,TRANSBIT \?ELS29 ?THN30: CALL OKAY,PRSO,STR?23 RSTACK ?ELS29: FIRST? PRSO >F \?ELS33 NEXT? F /?ELS33 GETP F,P?FDESC >STR ZERO? STR /?ELS33 PRINTI "You open" CALL THE-PRSO-PRINT PRINTI "." CRLF PRINT STR CRLF RTRUE ?ELS33: PRINTI "You open" CALL THE-PRSO-PRINT PRINTI " and see " CALL PRINT-CONTENTS,PRSO PRINTR "." ?ELS9: CALL YOU-CANT RSTACK .FUNCT PRE-OPEN-WITH CALL NOT-HOLDING?,PRSI ZERO? STACK \TRUE RFALSE .FUNCT V-OPEN-WITH CALL PERFORM,V?OPEN,PRSO RTRUE .FUNCT V-PICK CALL YOU-CANT RSTACK .FUNCT V-PLAY SET 'P-WON,0 PRINTR "(Speaking of playing, you ought to try Infocom's other products.)" .FUNCT V-PUSH CALL HACK-HACK,STR?175 RSTACK .FUNCT PRE-PUT EQUAL? PRSO,OXYGEN-GEAR-BLY,OXYGEN-GEAR-DIVER,OXYGEN-GEAR-OTHER \?ELS5 CALL YOU-CANT,STR?176 RSTACK ?ELS5: EQUAL? PRSO,SONARSCOPE \?ELS7 EQUAL? PRSI,MANUAL,AUTOMATIC /FALSE ?ELS7: EQUAL? PRSO,THROTTLE \?ELS11 EQUAL? PRSI,FAST /FALSE EQUAL? PRSI,MEDIUM,SLOW,OFF /FALSE ?ELS11: IN? PRSO,GLOBAL-OBJECTS \?ELS17 CALL NOT-HERE,PRSO RSTACK ?ELS17: EQUAL? PRSI,TEST-TANK,GLOBAL-WATER,GLOBAL-HERE /FALSE EQUAL? PRSI,FLOOR,CLAW,GLOBAL-SUB /FALSE EQUAL? PRSI,OXYGEN-GEAR-BLY,OXYGEN-GEAR-DIVER,OXYGEN-GEAR-OTHER \?ELS23 CALL HAR-HAR RSTACK ?ELS23: IN? PRSI,GLOBAL-OBJECTS \?ELS25 CALL NOT-HERE,PRSI RSTACK ?ELS25: FSET? PRSO,TAKEBIT /FALSE CALL YOU-CANT,STR?176 RSTACK .FUNCT V-PUT,?TMP1 FSET? PRSI,OPENBIT /?CND1 FSET? PRSI,VEHBIT /?CND1 FSET? PRSI,DOORBIT /?THN9 FSET? PRSI,CONTBIT \?ELS8 ?THN9: CALL TOO-BAD-BUT,PRSI,STR?17 RTRUE ?ELS8: PRINTI "You can't open" CALL THE-PRSI-PRINT PRINTR "." ?CND1: ZERO? PRSI \?ELS19 CALL YOU-CANT RSTACK ?ELS19: FSET? PRSI,OPENBIT /?ELS21 CALL TOO-BAD-BUT,PRSI,STR?17 RSTACK ?ELS21: EQUAL? PRSI,PRSO \?ELS23 CALL HAR-HAR RSTACK ?ELS23: IN? PRSO,PRSI \?ELS25 CALL TOO-BAD-BUT,PRSO PRINTI " is already " FSET? PRSI,SURFACEBIT \?ELS32 PUSH STR?47 JUMP ?CND28 ?ELS32: PUSH STR?112 ?CND28: PRINT STACK CALL THE-PRSI-PRINT PRINTR "." ?ELS25: CALL WEIGHT,PRSI >?TMP1 CALL WEIGHT,PRSO ADD ?TMP1,STACK >?TMP1 GETP PRSI,P?SIZE SUB ?TMP1,STACK >?TMP1 GETP PRSI,P?CAPACITY GRTR? ?TMP1,STACK \?ELS36 PRINTR "There's no room." ?ELS36: CALL HELD?,PRSO ZERO? STACK \?ELS40 CALL ITAKE ZERO? STACK /TRUE ?ELS40: MOVE PRSO,PRSI FSET PRSO,TOUCHBIT PRINTR "Okay." .FUNCT V-PUT-UNDER PRINTR "There's not enough room." .FUNCT V-RAISE CALL YOU-CANT RSTACK .FUNCT PRE-READ,VAL ZERO? LIT \?ELS5 PRINTR "It's impossible to read in the dark." ?ELS5: EQUAL? PRSO,BADGE-GLOBAL-3,BADGE-GLOBAL-2,BADGE-GLOBAL /FALSE EQUAL? PRSO,OXYGEN-GEAR-BLY,OXYGEN-GEAR-DIVER,OXYGEN-GEAR-OTHER \?ELS11 CALL YOU-CANT RSTACK ?ELS11: IN? PRSO,GLOBAL-OBJECTS \?ELS13 CALL NOT-HERE,PRSO RSTACK ?ELS13: ZERO? PRSI /?ELS15 FSET? PRSI,TRANSBIT /?ELS15 EQUAL? -1,P-NUMBER \?ELS15 PRINTI "You must have a swell method of looking through" CALL THE-PRSI-PRINT PRINTR "." ?ELS15: EQUAL? P-ADVERB,W?CAREFULLY \FALSE CALL INT-WAIT,3 >VAL ZERO? VAL \?ELS26 PRINTI "You never got to finish reading" CALL THE-PRSO-PRINT PRINTR "." ?ELS26: EQUAL? VAL,M-FATAL /TRUE RFALSE .FUNCT V-READ FSET? PRSO,READBIT /?ELS5 CALL YOU-CANT RSTACK ?ELS5: GETP PRSO,P?TEXT PRINT STACK CRLF RTRUE .FUNCT V-RING PRINTR """DING-DONG!""" .FUNCT V-RISE EQUAL? PRSO,BAY \?ELS5 CALL PERFORM,V?SURFACE RTRUE ?ELS5: CALL DO-WALK,P?UP RTRUE .FUNCT V-RUB CALL HACK-HACK,STR?177 RSTACK .FUNCT PRE-RUB-OVER CALL PERFORM,V?RUB,PRSI,PRSO RTRUE .FUNCT V-RUB-OVER PRINTR "You really can't expect that to help." .FUNCT V-SAY,P CALL QCONTEXT-GOOD? ZERO? STACK /?ELS5 CALL PERFORM,V?TELL,QCONTEXT RTRUE ?ELS5: IN? COMPUTESTOR,HERE \?ELS7 FSET? COMPUTESTOR,ONBIT \?ELS7 CALL PERFORM,V?TELL,COMPUTESTOR RTRUE ?ELS7: CALL FIND-FLAG,HERE,PERSON,WINNER >P ZERO? P /?ELS11 CALL PERFORM,V?TELL,P RTRUE ?ELS11: SET 'QUOTE-FLAG,0 SET 'P-CONT,0 PRINTR "(To talk to someone, type their name, then a comma, then what you want them to do.)" .FUNCT PRE-SAY-INTO EQUAL? PRSO,INTERCOM /FALSE FSET? PRSO,ONBIT /FALSE PRINTI "Sorry, but" CALL THE-PRSO-PRINT PRINTR " isn't on!" .FUNCT V-SAY-INTO CALL YOU-CANT,STR?178 RSTACK .FUNCT V-SCREW CALL YOU-CANT RSTACK .FUNCT V-SCREW-IN CALL YOU-CANT,STR?179 RSTACK .FUNCT PRE-SEARCH CALL ROOM-CHECK RSTACK .FUNCT V-SEARCH,OBJ FSET? PRSO,PERSON \?ELS5 FIRST? PRSO >OBJ \?ELS10 CALL THIS-IS-IT,OBJ PRINTI "You find " CALL PRINTA,OBJ PRINTR "." ?ELS10: PRINTR "You don't find anything interesting." ?ELS5: FSET? PRSO,CONTBIT \?ELS18 FSET? PRSO,OPENBIT /?ELS23 PRINTR "You'll have to open it first." ?ELS23: CALL PERFORM,V?LOOK-INSIDE,PRSO RTRUE ?ELS18: PRINTR "You find nothing unusual." .FUNCT PRE-SEARCH-FOR,OBJ CALL ROOM-CHECK ZERO? STACK \TRUE IN? PRSI,PLAYER \?CND1 GETP PRSI,P?GENERIC CALL STACK,PRSI >OBJ ZERO? OBJ /?CND1 SET 'PRSI,OBJ ?CND1: EQUAL? PRSO,GLOBAL-HERE \FALSE SET 'PRSO,HERE RFALSE .FUNCT V-SEARCH-FOR FSET? PRSO,PERSON \?ELS5 IN? PRSI,PRSO \?ELS10 PRINTI "Indeed, " PRINTD PRSO PRINTI " has" CALL THE-PRSI-PRINT PRINTR "." ?ELS10: EQUAL? PRSI,OXYGEN-GEAR-BLY,OXYGEN-GEAR-DIVER,OXYGEN-GEAR-OTHER \?ELS14 CALL HAR-HAR RSTACK ?ELS14: IN? PRSI,GLOBAL-OBJECTS \?ELS16 PRINTD PRSO PRINTI " doesn't have " CALL PRINTA,PRSI PRINTR "." ?ELS16: ZERO? PRSI \?ELS20 PRINTD PRSO PRINTR " doesn't have that." ?ELS20: PRINTD PRSO PRINTI " doesn't have" CALL THE-PRSI-PRINT PRINTI " concealed on " FSET? PRSO,FEMALE \?ELS31 PUSH STR?180 JUMP ?CND27 ?ELS31: PUSH STR?181 ?CND27: PRINT STACK PRINTR " person." ?ELS5: FSET? PRSO,CONTBIT \?ELS35 FSET? PRSO,OPENBIT /?ELS35 PRINTI "You'll have to open" CALL THE-PRSO-PRINT PRINTR " first." ?ELS35: IN? PRSI,PRSO \?ELS41 PRINTI "How observant you are! There " CALL HE-SHE-IT,PRSI PRINTR " is!" ?ELS41: ZERO? PRSI \?ELS47 CALL YOU-CANT RSTACK ?ELS47: PRINTI "You don't find" CALL THE-PRSI-PRINT PRINTR " there." .FUNCT V-SEND CALL YOU-CANT RSTACK .FUNCT PRE-SSEND CALL PERFORM,V?SEND,PRSI,PRSO RTRUE .FUNCT V-SSEND CALL V-FOO RSTACK .FUNCT V-SEND-FOR CALL V-SEND RSTACK .FUNCT V-SEND-OUT CALL V-SEND RSTACK .FUNCT PRE-SEND-TO EQUAL? PRSI,0,PLAYER,GLOBAL-HERE /FALSE EQUAL? PRSI,GLOBAL-SUB,AQUADOME /FALSE FSET? PRSO,PERSON \?ELS9 CALL PERFORM,V?$CALL,PRSO EQUAL? WINNER,PLAYER /TRUE CALL PERFORM,V?WALK-TO,PRSI RTRUE ?ELS9: SET 'P-WON,0 PRINTR "(Sorry, but I don't understand.)" .FUNCT V-SEND-TO CALL V-SEND RSTACK .FUNCT PRE-SET EQUAL? PRSI,FAST,MEDIUM,SLOW /FALSE EQUAL? PRSI,OFF,AUTOMATIC,MANUAL /FALSE EQUAL? PRSI,AQUADOME /FALSE EQUAL? -1,P-NUMBER /?ELS5 EQUAL? PRSI,0,ROOMS /FALSE ZERO? PRSI /?ELS5 FSET? PRSI,UNITBIT /FALSE ?ELS5: EQUAL? PRSI,RIGHT,LEFT \?ELS15 CALL PERFORM,V?AIM,PRSO,PRSI RTRUE ?ELS15: EQUAL? PRSO,PRSI \?ELS17 CALL PERFORM,V?TURN,PRSO RTRUE ?ELS17: PRINTI "You can set something only to a number with units, or to " PRINTD MEDIUM PRINTI ", " PRINTD AUTOMATIC PRINTR ", and so on." .FUNCT V-SET CALL YOU-CANT RSTACK .FUNCT PRE-SHOOT ZERO? PRSI \FALSE FSET? PRSO,WEAPONBIT \FALSE SET 'PRSI,PRSO EQUAL? PRSO,DART \?ELS10 PUSH 1 JUMP ?CND6 ?ELS10: PUSH 0 ?CND6: GET OBJ-AIMED-AT,STACK >PRSO RFALSE .FUNCT V-SHOOT CALL FIND-FLAG,WINNER,WEAPONBIT ZERO? STACK \?ELS5 PRINTR "You don't have anything to shoot with." ?ELS5: CALL IKILL,STR?182 RSTACK .FUNCT PRE-SSHOOT CALL PERFORM,V?SHOOT,PRSI,PRSO RTRUE .FUNCT V-SSHOOT CALL V-FOO RSTACK .FUNCT V-SHOW EQUAL? PRSO,PLAYER \?ELS5 SET 'WINNER,PLAYER CALL VISIBLE?,PRSO ZERO? STACK /?ELS8 CALL PERFORM,V?EXAMINE,PRSI RTRUE ?ELS8: CALL PERFORM,V?FIND,PRSI RTRUE ?ELS5: FSET? PRSO,PERSON /?ELS12 PRINTI "Don't wait for" CALL THE-PRSO-PRINT PRINTR " to applaud." ?ELS12: PRINTD PRSO CALL PICK-ONE,WHO-CARES PRINT STACK PRINTR "." .FUNCT PRE-SSHOW SET 'P-MERGED,1 CALL PERFORM,V?SHOW,PRSI,PRSO RTRUE .FUNCT V-SSHOW RTRUE .FUNCT V-SIT FSET? PRSO,FURNITURE \?ELS5 FSET? PRSO,VEHBIT \?ELS5 MOVE PLAYER,PRSO PRINTI "You're now sitting on" CALL THE-PRSO-PRINT PRINTR "." ?ELS5: PRINTR "That won't help your mission!" .FUNCT V-SLAP ZERO? PRSI /?ELS5 CALL NOT-HOLDING?,PRSI ZERO? STACK \TRUE ?ELS5: EQUAL? PRSO,PLAYER \?ELS9 PRINTR "That sounds like a sign that you could wear on your back." ?ELS9: FSET? PRSO,PERSON \?ELS13 FSET? PRSO,MUNGBIT \?ELS18 PRINTD PRSO PRINTI "'s eyes are full of hate, and " CALL HE-SHE-IT,PRSO PRINTR " says something unprintable." ?ELS18: CALL FACE-RED,STR?183 RSTACK ?ELS13: PRINTR "You should see Mick. He breaks boards with the edge of his hand!" .FUNCT FACE-RED,STR PRINTD PRSO PRINTI " " PRINT STR PRINTR "s you right back. Wow, is your face red!" .FUNCT V-SMELL CALL HE-SHE-IT,PRSO,1,STR?184 PRINTI " just like " CALL PRINTA,PRSO PRINTR "!" .FUNCT V-SMILE FSET? PRSO,PERSON \?ELS5 IN? PRSO,GLOBAL-OBJECTS /?ELS5 PRINTD PRSO PRINTR " smiles back at you." ?ELS5: CALL HAR-HAR RSTACK .FUNCT V-SMOKE CALL YOU-CANT RSTACK .FUNCT V-STOP EQUAL? PRSO,ROOMS \?ELS5 EQUAL? HERE,SUB \?ELS5 CALL PERFORM,V?STOP,LOCAL-SUB RTRUE ?ELS5: ZERO? PRSO /?ELS9 FSET? PRSO,ON?BIT \?ELS9 CALL PERFORM,V?LAMP-OFF,PRSO RTRUE ?ELS9: CALL YOU-CANT RSTACK .FUNCT V-SURFACE ZERO? PRSO /?ELS5 EQUAL? PRSO,LOCAL-SUB /?ELS5 CALL YOU-CANT RSTACK ?ELS5: SET 'P-NUMBER,0 CALL PERFORM,V?SET,DEPTH-CONTROL,METER RTRUE .FUNCT V-SWIM PRINTI "You can't swim " ZERO? PRSO /?ELS7 PRINTI "in" CALL THE-PRSO-PRINT PRINTI ", " CALL PRINT-NAME,FIRST-NAME PRINTR "." ?ELS7: CALL GROUND-DESC PRINT STACK PRINTR "." .FUNCT PRE-TAKE EQUAL? PRSO,OXYGEN-GEAR-BLY,OXYGEN-GEAR-DIVER,OXYGEN-GEAR-OTHER \?ELS5 CALL YOU-CANT RSTACK ?ELS5: ZERO? PRSI /?ELS7 EQUAL? PRSO,TRAITOR,ORE-NODULES,GLOBAL-SNARK /?THN16 EQUAL? PRSO,SEA-WALL,LOCAL-SUB,GLOBAL-SUB \?ELS13 ?THN16: EQUAL? PRSI,GAME /?THN18 EQUAL? PRSI,AQUADOME,AIRLOCK,TEST-TANK /?THN18 EQUAL? PRSI,DOCKING-TANK,UNDERWATER,GLOBAL-HERE /?THN18 EQUAL? PRSI,SEA,BAY,GLOBAL-WATER \?ELS13 ?THN18: CALL MORE-SPECIFIC RSTACK ?ELS13: LOC PRSO EQUAL? PRSI,STACK /?ELS21 FSET? PRSI,PERSON /?ELS26 CALL HE-SHE-IT,PRSO,1 PRINTI "'s not " EQUAL? PRSI,HOOK \?ELS33 PUSH STR?47 JUMP ?CND29 ?ELS33: PUSH STR?112 ?CND29: PRINT STACK PRINTR " that!" ?ELS26: CALL HE-SHE-IT,PRSI,1 PRINTI " doesn't have " CALL HIM-HER-IT,PRSO PRINTR "!" ?ELS21: SET 'PRSI,0 RFALSE ?ELS7: EQUAL? PRSO,PLAYER-NAME,TEST-TANK,YOU /FALSE EQUAL? PRSO,GLOBAL-GREENUP,GREENUP \?ELS47 FSET? GREENUP,MUNGBIT /FALSE CALL PERFORM,V?ARREST,PRSO RTRUE ?ELS47: CALL META-LOC,PRSO EQUAL? STACK,GLOBAL-OBJECTS \?ELS54 FSET? PRSO,PERSON /FALSE CALL NOT-HERE,PRSO RSTACK ?ELS54: IN? PRSO,WINNER \?ELS61 CALL ALREADY,PLAYER,STR?185 RSTACK ?ELS61: LOC PRSO FSET? STACK,CONTBIT \?ELS63 LOC PRSO FSET? STACK,OPENBIT /?ELS63 CALL YOU-CANT,STR?186 RSTACK ?ELS63: LOC WINNER EQUAL? PRSO,STACK \FALSE PRINTR "You're in it, nitwit!" .FUNCT V-TAKE CALL ITAKE EQUAL? STACK,1 \FALSE EQUAL? WINNER,PLAYER \?ELS8 PRINTI "You're" JUMP ?CND6 ?ELS8: CALL HE-SHE-IT,WINNER,1 PRINTI " is" ?CND6: PRINTI " now holding" CALL THE-PRSO-PRINT PRINTR "." .FUNCT V-TAKE-TO CALL PERFORM,V?WALK-TO,PRSI RTRUE .FUNCT V-TAKE-WITH PRINTI "You can't remove" CALL THE-PRSO-PRINT PRINTI " with" CALL THE-PRSI-PRINT PRINTR "!" .FUNCT V-DISEMBARK LOC PRSO EQUAL? STACK,WINNER \?ELS5 PRINTI "You don't need to take out" CALL THE-PRSO-PRINT PRINTR " to use it." ?ELS5: EQUAL? PRSO,SEA,BAY,GLOBAL-WATER /?THN10 EQUAL? PRSO,GLOBAL-HERE,HERE,ROOMS \?ELS9 ?THN10: CALL DO-WALK,P?OUT RTRUE ?ELS9: LOC WINNER EQUAL? STACK,PRSO /?ELS18 PRINTI "You're not in that!" CRLF RETURN 2 ?ELS18: CALL OWN-FEET RSTACK .FUNCT OWN-FEET MOVE WINNER,HERE PRINTR "You're on your own feet again." .FUNCT V-TELL,P EQUAL? PRSO,PLAYER \?ELS5 EQUAL? WINNER,PLAYER /?ELS10 SET 'P,WINNER SET 'WINNER,PLAYER CALL PERFORM,V?ASK,P RTRUE ?ELS10: ZERO? QCONTEXT /?ELS12 SET 'QCONTEXT,0 ZERO? P-CONT /?ELS18 SET 'WINNER,PLAYER RTRUE ?ELS18: PRINTR "Okay, you're not talking to anyone else." ?ELS12: CALL WONT-HELP-TO-TALK-TO,PLAYER SET 'QUOTE-FLAG,0 SET 'P-CONT,0 RETURN 2 ?ELS5: FSET? PRSO,PERSON /?THN30 EQUAL? PRSO,COMPUTESTOR \?ELS29 ?THN30: ZERO? P-CONT /?ELS34 SET 'WINNER,PRSO JUMP ?CND32 ?ELS34: PRINTD PRSO PRINTI " is listening." CRLF ?CND32: SET 'QCONTEXT,PRSO SET 'QCONTEXT-ROOM,HERE RTRUE ?ELS29: CALL YOU-CANT,STR?187 SET 'QUOTE-FLAG,0 SET 'P-CONT,0 RETURN 2 .FUNCT PRE-TELL-ABOUT,P CALL QCONTEXT-GOOD? ZERO? STACK /?ELS5 EQUAL? PRSO,PLAYER \?ELS5 CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSI RTRUE ?ELS5: EQUAL? PRSO,PLAYER \?ELS9 CALL FIND-FLAG,HERE,PERSON,WINNER >P ZERO? P /?ELS9 FSET? P,INVISIBLE /?ELS9 CALL PERFORM,V?ASK-ABOUT,P,PRSI RTRUE ?ELS9: CALL PRE-ASK-ABOUT RSTACK .FUNCT V-TELL-ABOUT,P GETP PRSI,P?TEXT ZERO? STACK /?ELS5 GETP PRSI,P?TEXT PRINT STACK CRLF RTRUE ?ELS5: EQUAL? PRSO,PLAYER \?ELS9 CALL ARENT-TALKING RSTACK ?ELS9: PRINTD PRSO CALL PICK-ONE,WHO-CARES PRINT STACK PRINTR "." .FUNCT PRE-TALK-ABOUT,P EQUAL? WINNER,PLAYER /?ELS5 CALL PERFORM,V?TELL-ABOUT,PLAYER,PRSO RTRUE ?ELS5: CALL QCONTEXT-GOOD? ZERO? STACK /?ELS7 CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO RTRUE ?ELS7: CALL FIND-FLAG,HERE,PERSON,WINNER >P ZERO? P /FALSE CALL PERFORM,V?ASK-ABOUT,P,PRSO RTRUE .FUNCT V-TALK-ABOUT CALL ARENT-TALKING RSTACK .FUNCT V-THANKS,P SET 'P,PRSO ZERO? PRSO /?ELS9 FSET? PRSO,PERSON /?THN6 ?ELS9: SET 'P,QCONTEXT CALL NULL-F ZERO? STACK \?THN6 CALL QCONTEXT-GOOD? ZERO? STACK \?THN6 CALL FIND-FLAG,HERE,PERSON,WINNER >P ZERO? P /?ELS5 ?THN6: PRINTD P PRINTR " acknowledges your thanks." ?ELS5: PRINTR "You're more than welcome." .FUNCT V-THROW CALL IDROP ZERO? STACK /FALSE PRINTR "Thrown." .FUNCT V-THROW-AT CALL IDROP ZERO? STACK /TRUE EQUAL? PRSI,PLAYER \?CND4 PRINTR "Don't be silly!" ?CND4: FSET? PRSI,PERSON /?CND9 FSET? PRSI,NARTICLEBIT /?CND9 PRINTI "The " ?CND9: PRINTD PRSI FSET? PRSI,PERSON \?ELS22 PUSH STR?188 JUMP ?CND18 ?ELS22: PUSH STR?189 ?CND18: PRINT STACK PRINTI " as" CALL THE-PRSO-PRINT PRINTR " flies by." .FUNCT V-THROW-THROUGH FSET? PRSO,PERSON /?ELS5 PRINTR "Let's not resort to violence, please." ?ELS5: CALL V-THROW RSTACK .FUNCT PRE-TIE-TO EQUAL? PRSI,SONAR-EQUIPMENT,GLOBAL-SONAR /FALSE EQUAL? PRSI,CLAW,LOCAL-SUB,GLOBAL-SUB /FALSE FSET? PRSO,PERSON \?THN10 FSET? PRSI,FURNITURE /FALSE ?THN10: PRINTR "That won't do any good." .FUNCT V-TIE-TO PRINTI "You can't tie" CALL THE-PRSO-PRINT PRINTR " to that." .FUNCT PRE-TIE-WITH FSET? PRSO,PERSON \?THN6 FSET? PRSI,TOOLBIT /FALSE ?THN6: PRINTR "That won't do any good." .FUNCT V-TIE-WITH PRINTR """If you don't formally arrest me first, I'll sue!""" .FUNCT V-TURN EQUAL? PRSO,OXYGEN-GEAR-BLY,OXYGEN-GEAR-DIVER,OXYGEN-GEAR-OTHER \?ELS5 CALL HAR-HAR RSTACK ?ELS5: CALL META-LOC,PRSO EQUAL? STACK,GLOBAL-OBJECTS \?ELS7 CALL NOT-HERE,PRSO RSTACK ?ELS7: FSET? PRSO,DOORBIT \?ELS9 FSET? PRSO,OPENBIT \?ELS9 CALL PERFORM,V?CLOSE,PRSO RTRUE ?ELS9: PRINTR "What do you want that to do?" .FUNCT V-LAMP-OFF FSET? PRSO,PERSON \?ELS5 PRINTR "Your vulgar ways would turn anyone off." ?ELS5: FSET? PRSO,ON?BIT /?ELS9 CALL YOU-CANT,STR?190 RSTACK ?ELS9: FSET? PRSO,ONBIT /?ELS11 CALL ALREADY,PRSO,STR?44 RSTACK ?ELS11: EQUAL? PRSO,OXYGEN-GEAR,MICROPHONE-DOME,MICROPHONE \?ELS13 CALL NOT-HOLDING?,PRSO ZERO? STACK \TRUE ?ELS13: CALL OKAY,PRSO,STR?44 RSTACK .FUNCT V-LAMP-ON FSET? PRSO,ONBIT \?ELS5 CALL ALREADY,PRSO,STR?47 RSTACK ?ELS5: EQUAL? PRSO,OXYGEN-GEAR,MICROPHONE-DOME,MICROPHONE \?ELS7 CALL NOT-HOLDING?,PRSO ZERO? STACK \TRUE ?ELS7: FSET? PRSO,ON?BIT \?ELS11 CALL OKAY,PRSO,STR?47 RSTACK ?ELS11: FSET? PRSO,PERSON \?ELS13 CALL HAR-HAR RSTACK ?ELS13: CALL YOU-CANT,STR?191 RSTACK .FUNCT V-UNLOCK FSET? PRSO,CONTBIT /?ELS5 CALL YOU-CANT RSTACK ?ELS5: FSET? PRSO,DOORBIT /?THN8 GETP PRSO,P?CAPACITY ZERO? STACK /?ELS7 ?THN8: FSET? PRSO,OPENBIT \?ELS14 CALL YOU-CANT,0,PRSO,STR?23 RSTACK ?ELS14: FSET? PRSO,LOCKED /?ELS16 CALL ALREADY,PRSO,STR?192 RSTACK ?ELS16: FCLEAR PRSO,LOCKED CALL OKAY,PRSO,STR?192 RSTACK ?ELS7: CALL YOU-CANT RSTACK .FUNCT V-UNTIE PRINTI "You can't tie " CALL HIM-HER-IT,PRSO PRINTI ", so you can't untie " CALL HIM-HER-IT,PRSO PRINTR "!" .FUNCT MORE-SPECIFIC PRINTR "How do you want to do that?" .FUNCT V-USE CALL MORE-SPECIFIC RSTACK .FUNCT V-USE-AGAINST CALL MORE-SPECIFIC RSTACK .FUNCT HAS-ARRIVED,WHO FSET WHO,TOUCHBIT PRINTD WHO PRINTR ", for whom you're waiting, has arrived." .FUNCT V-WAIT,NUM=-1,WHO=0,INT=0,VAL,HR,RESULT=1 EQUAL? -1,NUM \?CND1 SET 'NUM,10 PRINT I-ASSUME PRINTI " wait 10 turns.)" CRLF ?CND1: SET 'HR,HERE SET 'WHO-WAIT,0 ZERO? INT \?CND6 PRINTI "Time passes..." CRLF ?CND6: ?PRG11: DLESS? 'NUM,0 \?ELS15 JUMP ?REP12 ?ELS15: CALL CLOCKER >VAL ZERO? VAL /?ELS17 EQUAL? VAL,M-FATAL /?THN21 EQUAL? HR,HERE /?ELS20 ?THN21: SET 'RESULT,M-FATAL JUMP ?REP12 ?ELS20: ZERO? WHO /?ELS24 IN? WHO,HERE \?ELS24 CALL HAS-ARRIVED,WHO JUMP ?REP12 ?ELS24: ZERO? NUM \?ELS28 JUMP ?REP12 ?ELS28: INC 'WHO-WAIT ZERO? INT /?ELS33 PRINTI "Do you want to continue what you were doing?" JUMP ?CND31 ?ELS33: PRINTI "Do you want to keep waiting?" ?CND31: CALL YES? ZERO? STACK \?ELS43 JUMP ?REP12 ?ELS43: USL JUMP ?PRG11 ?ELS17: ZERO? WHO /?ELS47 IN? WHO,HERE \?ELS47 CALL HAS-ARRIVED,WHO JUMP ?REP12 ?ELS47: ZERO? WHO /?ELS51 IGRTR? 'WHO-WAIT,30 \?ELS51 PRINTD WHO PRINTI " still hasn't arrived. Do you want to keep waiting?" CALL YES? ZERO? STACK \?CND56 JUMP ?REP12 ?CND56: SET 'WHO-WAIT,0 USL JUMP ?PRG11 ?ELS51: USL JUMP ?PRG11 ?REP12: SET 'CLOCK-WAIT,1 RETURN RESULT .FUNCT INT-WAIT,N,TIM,REQ,VAL SET 'TIM,MOVES MUL N,2 RANDOM STACK >REQ CALL V-WAIT,REQ,0,1 EQUAL? M-FATAL,STACK \?ELS5 RETURN 2 ?ELS5: SUB MOVES,TIM LESS? STACK,REQ /FALSE RTRUE .FUNCT V-WAIT-FOR,WHO EQUAL? -1,P-NUMBER /?ELS5 EQUAL? PRSO,TURN,ROOMS \?ELS5 GRTR? P-NUMBER,180 \?ELS12 PRINTR "That's too long to wait." ?ELS12: CALL V-WAIT,P-NUMBER RSTACK ?ELS5: EQUAL? PRSO,GLOBAL-HERE,TURN,ROOMS \?ELS18 CALL V-WAIT RTRUE ?ELS18: EQUAL? PRSO,PLAYER \?ELS20 CALL ALREADY,PLAYER,STR?55 RSTACK ?ELS20: FSET? PRSO,PERSON \?ELS22 GETP PRSO,P?CHARACTER GET CHARACTER-TABLE,STACK >WHO CALL META-LOC,WHO EQUAL? STACK,HERE \?ELS27 CALL ALREADY,WHO,STR?55 RSTACK ?ELS27: CALL V-WAIT,10000,WHO RSTACK ?ELS22: PRINTR "Not a good idea. You might wait forever." .FUNCT V-WAIT-UNTIL EQUAL? -1,P-NUMBER /?ELS5 EQUAL? PRSO,TURN \?ELS5 GRTR? P-NUMBER,MOVES \?ELS12 SUB P-NUMBER,MOVES CALL V-WAIT,STACK RSTACK ?ELS12: PRINTR "It's already past that time." ?ELS5: CALL YOU-CANT,STR?193 RSTACK .FUNCT V-ALARM FSET? PRSO,PERSON \?ELS5 CALL HE-SHE-IT,PRSO,1 PRINTR "'s wide awake, or haven't you noticed?" ?ELS5: CALL TOO-BAD-BUT,PRSO,STR?194 RSTACK .FUNCT DO-WALK,DIR SET 'P-WALK-DIR,DIR CALL PERFORM,V?WALK,DIR RSTACK .FUNCT V-WALK,PT,PTS,STR,OBJ,RM EQUAL? PRSO,RIGHT,LEFT \?ELS3 CALL PERFORM,V?TURN,PRSO RTRUE ?ELS3: ZERO? P-WALK-DIR \?CND1 CALL V-WALK-AROUND RETURN 2 ?CND1: LOC WINNER GETPT STACK,PRSO >PT ZERO? PT /?ELS12 PTSIZE PT >PTS EQUAL? PTS,UEXIT \?ELS17 GETB PT,REXIT >RM CALL GOTO,RM ZERO? STACK /TRUE CALL OKAY RTRUE ?ELS17: EQUAL? PTS,NEXIT \?ELS22 GET PT,NEXITSTR PRINT STACK CRLF RETURN 2 ?ELS22: EQUAL? PTS,FEXIT \?ELS28 GET PT,FEXITFCN CALL STACK >RM ZERO? RM /?ELS33 CALL GOTO,RM ZERO? STACK /TRUE CALL OKAY RTRUE ?ELS33: RETURN 2 ?ELS28: EQUAL? PTS,CEXIT \?ELS42 GETB PT,CEXITFLAG VALUE STACK ZERO? STACK /?ELS47 GETB PT,REXIT CALL GOTO,STACK ZERO? STACK /TRUE CALL OKAY RTRUE ?ELS47: GET PT,CEXITSTR >STR ZERO? STR /?ELS52 PRINT STR CRLF RETURN 2 ?ELS52: CALL YOU-CANT,STR?138 RETURN 2 ?ELS42: EQUAL? PTS,DEXIT \FALSE GETB PT,DEXITOBJ >OBJ FSET? OBJ,OPENBIT \?ELS67 GETB PT,REXIT CALL GOTO,STACK ZERO? STACK /TRUE CALL OKAY RTRUE ?ELS67: FSET? OBJ,INVISIBLE \?ELS72 ZERO? DEBUG /?THN75 PRINTI "[invisible] " ?THN75: CALL YOU-CANT,STR?138 RSTACK ?ELS72: GET PT,DEXITSTR >STR ZERO? STR /?ELS80 PRINT STR CRLF RETURN 2 ?ELS80: CALL TOO-BAD-BUT,OBJ,STR?17 CALL THIS-IS-IT,OBJ RETURN 2 ?ELS12: EQUAL? PRSO,P?IN,P?OUT \?ELS90 CALL V-WALK-AROUND RSTACK ?ELS90: CALL YOU-CANT,STR?138 RETURN 2 .FUNCT V-WALK-AROUND SET 'P-WON,0 PRINTI "(What " PRINTD INTDIR PRINTI " do you want to go in?)" CRLF RETURN 2 .FUNCT V-WALK-TO,O,L SET 'O,PRSO EQUAL? O,LOCAL-SUB,GLOBAL-SUB \?ELS3 SET 'O,SUB JUMP ?CND1 ?ELS3: FSET? O,PERSON \?CND1 IN? O,GLOBAL-OBJECTS \?CND1 GETP O,P?CHARACTER GET CHARACTER-TABLE,STACK >O ?CND1: CALL META-LOC,O >L EQUAL? HERE,SUB \?ELS12 FSET? PRSO,UNITBIT \?ELS12 CALL PERFORM,V?SET,DEPTH-CONTROL,PRSO RTRUE ?ELS12: LOC WINNER EQUAL? HERE,STACK \?ELS16 EQUAL? L,HERE /?THN19 EQUAL? L,LOCAL-GLOBALS \?ELS16 CALL GLOBAL-IN?,O,HERE ZERO? STACK /?ELS16 ?THN19: CALL HE-SHE-IT,WINNER,1 EQUAL? WINNER,PLAYER \?ELS25 PRINTI " do" JUMP ?CND23 ?ELS25: PRINTI " does" ?CND23: PRINTI "n't need to walk around within a " PUSH STR?195 PRINT STACK CRLF RTRUE ?ELS16: EQUAL? L,LOCAL-GLOBALS \?ELS40 CALL MORE-SPECIFIC RSTACK ?ELS40: EQUAL? PRSO,JOB \?ELS42 EQUAL? WINNER,PLAYER /?CND43 PRINTI """" ?CND43: CALL MORE-SPECIFIC EQUAL? WINNER,PLAYER /?CND48 PRINTI """" ?CND48: CRLF RTRUE ?ELS42: EQUAL? PRSO,INTDIR \?ELS54 CALL V-WALK-AROUND RSTACK ?ELS54: CALL FAR-AWAY?,L ZERO? STACK /?ELS56 CALL HE-SHE-IT,WINNER,1 PRINTI " can't go from here to there" EQUAL? L,GLOBAL-OBJECTS /?CND59 PRINTI ", at least not directly" ?CND59: PRINTR "." ?ELS56: EQUAL? WINNER,PLAYER /?ELS67 CALL GOTO,L ZERO? STACK /FALSE PRINTI """Okay." EQUAL? WINNER,TIP \?CND75 PRINTI " But I'll still follow you if you move!" ?CND75: PRINTR """" ?ELS67: ZERO? SUB-IN-DOME /?ELS83 FSET? FOOT-OF-RAMP,TOUCHBIT /?ELS83 EQUAL? L,FOOT-OF-RAMP /?ELS83 EQUAL? L,SUB,AIRLOCK,AIRLOCK-WALL /?ELS83 PRINTI "You should go to the " PRINTD FOOT-OF-RAMP PRINTR " first." ?ELS83: IN? O,ROOMS \?ELS89 CALL GOTO,O ZERO? STACK /TRUE CALL OKAY RTRUE ?ELS89: CALL HE-SHE-IT,O,1 PRINTI "'s in" CALL PRINTT,L PRINTI "." CRLF CALL GOTO,L ZERO? STACK /TRUE CALL OKAY RTRUE .FUNCT V-WALK-UNDER EQUAL? PRSO,BAY,SEA,GLOBAL-WATER \?ELS5 CALL PERFORM,V?DIVE RTRUE ?ELS5: CALL YOU-CANT,STR?196 RSTACK .FUNCT V-RUN-OVER PRINTR "That doesn't make much sense." .FUNCT V-WHAT,P EQUAL? PRSO,PLAYER \?ELS5 EQUAL? WINNER,PLAYER /?CND6 PRINTI """" ?CND6: PRINTI "You're the inventor!" EQUAL? WINNER,PLAYER /?CND13 PRINTI """" ?CND13: CRLF RTRUE ?ELS5: CALL QCONTEXT-GOOD? ZERO? STACK /?ELS23 SET 'P,QCONTEXT PUSH 1 FSET? STACK,PERSON /?THN20 ?ELS23: CALL FIND-FLAG,HERE,PERSON,WINNER >P ZERO? P /?ELS19 ?THN20: CALL PERFORM,V?ASK-ABOUT,P,PRSO RSTACK ?ELS19: FSET? PRSO,PERSON \?ELS25 GETP TIP,P?TEXT PRINT STACK CRLF RTRUE ?ELS25: CALL WONT-HELP-TO-TALK-TO,PLAYER RSTACK .FUNCT V-YELL CALL V-YES RSTACK .FUNCT V-YELL-FOR ZERO? DOME-AIR-BAD? /?ELS5 EQUAL? PRSO,SPECIAL-TOOL-GLOBAL,SPECIAL-TOOL,UNIVERSAL-TOOL \?ELS5 PRINTI "The three crew members who are still on their feet shout back that the " PRINTD SPECIAL-TOOL PRINTR " should be there on the hook." ?ELS5: CALL V-YES RSTACK .FUNCT V-YES,NO?=0 CALL QCONTEXT-GOOD? ZERO? STACK /?ELS5 EQUAL? WINNER,PLAYER \?ELS5 SET 'WINNER,QCONTEXT ZERO? NO? /?ELS10 CALL PERFORM,V?NO RTRUE ?ELS10: CALL PERFORM,V?YES RTRUE ?ELS5: CALL ARENT-TALKING RSTACK .FUNCT V-NO CALL V-YES,1 RSTACK .FUNCT SCORE-UPD,NUM ADD SCORE,NUM >SCORE PRINTI "(" GRTR? 0,NUM \?CND3 PRINTI "Oh no! " ?CND3: PRINTI "Your score just went " LESS? 0,NUM \?ELS12 PRINTI "up" JUMP ?CND10 ?ELS12: SUB 0,NUM >NUM PRINTI "down" ?CND10: PRINTI " by " PRINTN NUM PRINTI " point" EQUAL? NUM,1 /?CND21 PRINTI "s" ?CND21: PRINTR "!)" .FUNCT SCORE-OBJ,OBJ,TEMP GETP OBJ,P?VALUE >TEMP ZERO? TEMP /FALSE GRTR? TEMP,0 \FALSE CALL SCORE-UPD,TEMP PUTP OBJ,P?VALUE,0 RTRUE .FUNCT V-SCORE PRINTI "Your score is " PRINTN SCORE PRINTI " point" EQUAL? SCORE,1 /?CND5 PRINTI "s" ?CND5: PRINTI " out of " PRINTN SCORE-MAX PRINTI ", in " PRINTN MOVES EQUAL? MOVES,1 \?ELS16 PRINTI " turn." JUMP ?CND14 ?ELS16: PRINTI " turns." ?CND14: CRLF PRINTI "This score gives you the rank of a " GRTR? 0,SCORE \?ELS29 GET RANKS,0 JUMP ?CND25 ?ELS29: DIV SCORE,20 GET RANKS,STACK ?CND25: PRINT STACK PRINTI " adventurer." CRLF RETURN SCORE .FUNCT FINISH,REPEATING=0,VAL ZERO? DEBUG \TRUE CRLF CRLF ZERO? REPEATING \?CND5 CALL V-SCORE CRLF ?CND5: PRINTI "Would you like to: RESTORE your place from where you saved it, RESTART the story from the beginning, or QUIT for now? " ?PRG10: PRINTI ">" READ P-INBUF,P-LEXV GET P-LEXV,P-LEXSTART >VAL ZERO? VAL /?CND14 CALL WT?,VAL,PS?VERB,P1?VERB >VAL EQUAL? VAL,ACT?RESTART \?ELS19 RESTART CALL FINISH,1 JUMP ?CND14 ?ELS19: EQUAL? VAL,ACT?RESTORE \?ELS21 CALL V-RESTORE ZERO? STACK \TRUE CALL FINISH,1 JUMP ?CND14 ?ELS21: EQUAL? VAL,ACT?QUIT \?CND14 QUIT ?CND14: PRINTI "(Type RESTORE, RESTART, or QUIT.) " JUMP ?PRG10 .FUNCT DIVESTMENT?,OBJ EQUAL? PRSO,OBJ \FALSE EQUAL? PRSA,V?THROW-THROUGH,V?THROW-AT /TRUE EQUAL? PRSA,V?PUT,V?GIVE,V?DROP /TRUE RFALSE .FUNCT EXIT-VERB? EQUAL? PRSA,V?WALK /TRUE EQUAL? PRSA,V?THROUGH,V?FOLLOW,V?WALK-TO \FALSE CALL META-LOC,PRSO EQUAL? HERE,STACK \TRUE RFALSE .FUNCT GAME-VERB? EQUAL? PRSA,V?DEBUG /TRUE EQUAL? PRSA,V?$VERIFY,V?SCORE,V?UNSCRIPT /TRUE EQUAL? PRSA,V?SCRIPT,V?VERSION,V?QUIT /TRUE EQUAL? PRSA,V?RESTORE,V?SAVE,V?VERBOSE /TRUE EQUAL? PRSA,V?SUPER-BRIEF,V?BRIEF,V?TELL /TRUE RFALSE .FUNCT REMOTE-VERB? EQUAL? PRSA,V?WHAT,V?WALK-TO /TRUE EQUAL? PRSA,V?TELL-ABOUT,V?TAKE-WITH,V?SGIVE /TRUE EQUAL? PRSA,V?SEARCH-FOR,V?SEARCH,V?MAKE /TRUE EQUAL? PRSA,V?LOOK-UP,V?GIVE,V?FIND /TRUE EQUAL? PRSA,V?DROP,V?DISEMBARK,V?ASK-FOR /TRUE EQUAL? PRSA,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT,V?ASK-ABOUT /TRUE RFALSE .FUNCT SPEAKING-VERB? EQUAL? PRSA,V?YES,V?WHAT /TRUE EQUAL? PRSA,V?TELL-ABOUT,V?TELL,V?NO /TRUE EQUAL? PRSA,V?HELLO,V?GOODBYE,V?ASK-FOR /TRUE EQUAL? PRSA,V?ASK-ABOUT,V?ASK,V?$CALL /TRUE RFALSE .ENDI