3773 lines
71 KiB
Plaintext
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
|