seastalker/verbs.xzap

3773 lines
71 KiB
Plaintext

.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