cutthroats/verbs.zap
historicalsource 6af9d8816e Final Revision
2019-04-13 20:21:35 -04:00

3566 lines
68 KiB
Plaintext

.FUNCT V-VERBOSE
SET 'VERBOSE,TRUE-VALUE
SET 'SUPER-BRIEF,FALSE-VALUE
PRINTI "Maximum verbosity."
CRLF
CRLF
CALL V-LOOK
RSTACK
.FUNCT V-BRIEF
SET 'VERBOSE,FALSE-VALUE
SET 'SUPER-BRIEF,FALSE-VALUE
PRINTR "Brief descriptions."
.FUNCT V-SUPER-BRIEF
SET 'SUPER-BRIEF,TRUE-VALUE
PRINTR "Super-brief descriptions."
.FUNCT V-LOOK
CALL DESCRIBE-ROOM,TRUE-VALUE
ZERO? STACK /FALSE
CALL DESCRIBE-OBJECTS,TRUE-VALUE
RSTACK
.FUNCT V-FIRST-LOOK
CALL DESCRIBE-ROOM
ZERO? STACK /FALSE
ZERO? SUPER-BRIEF \FALSE
CALL DESCRIBE-OBJECTS
RSTACK
.FUNCT PRE-EXAMINE
ZERO? LIT \FALSE
FSET? PRSO,READBIT \FALSE
CALL PERFORM,V?READ,PRSO
RTRUE
.FUNCT V-EXAMINE
GETP PRSO,P?TEXT
ZERO? STACK /?ELS5
GETP PRSO,P?TEXT
PRINT STACK
CRLF
RTRUE
?ELS5: FSET? PRSO,CONTBIT /?THN10
FSET? PRSO,DOORBIT \?ELS9
?THN10: CALL PERFORM,V?LOOK-INSIDE,PRSO
RTRUE
?ELS9: PRINTI "I see nothing special about "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
.FUNCT DESCRIBE-ROOM,LOOK?=0,V?,STR,AV=0
ZERO? LOOK? /?ORP4
PUSH LOOK?
JUMP ?THN1
?ORP4: PUSH VERBOSE
?THN1: POP 'V?
ZERO? LIT \?CND5
CALL TELL-TOO-DARK
RETURN FALSE-VALUE
?CND5: FSET? HERE,TOUCHBIT /?CND8
FSET HERE,TOUCHBIT
SET 'V?,TRUE-VALUE
?CND8: IN? HERE,ROOMS \?CND11
CALL DPRINT,HERE
LOC WINNER >AV
FSET? AV,VEHBIT \?CND16
PRINTI ", "
CALL VEHPREP,AV
PRINT STACK
PRINTI " the "
CALL DPRINT,AV
?CND16: CRLF
?CND11: ZERO? LOOK? \?THN24
ZERO? SUPER-BRIEF \?CND21
?THN24: ZERO? V? /?ELS28
GETP HERE,P?ACTION
CALL STACK,M-LOOK
ZERO? STACK \TRUE
?ELS28: ZERO? V? /?CND26
GETP HERE,P?LDESC >STR
ZERO? STR /?CND26
PRINT STR
CRLF
?CND26: GETP HERE,P?ACTION
CALL STACK,M-FLASH
ZERO? AV /?CND21
EQUAL? HERE,AV /?CND21
FSET? AV,VEHBIT \?CND21
GETP AV,P?ACTION
CALL STACK,M-LOOK
?CND21: GETP HERE,P?CORRIDOR
ZERO? STACK /TRUE
CALL CORRIDOR-LOOK
RTRUE
.FUNCT VEHPREP,VEH
FSET? VEH,SURFACEBIT \?ELS5
RETURN STR?56
?ELS5: RETURN STR?57
.FUNCT DESCRIBE-OBJECTS,V?=0
ZERO? LIT /?ELS5
FIRST? HERE \FALSE
ZERO? V? /?ORP15
PUSH V?
JUMP ?THN12
?ORP15: PUSH VERBOSE
?THN12: POP 'V?
CALL PRINT-CONT,HERE,V?,-1
RSTACK
?ELS5: PRINTR "I can't see anything in the dark."
.FUNCT DESCRIBE-OBJECT,OBJ,V?,LEVEL,STR=0,AV
SET 'DESC-OBJECT,OBJ
ZERO? LEVEL \?ELS3
GETP OBJ,P?DESCFCN
CALL STACK,M-OBJDESC
ZERO? STACK \TRUE
?ELS3: ZERO? LEVEL \?ELS7
FSET? OBJ,TOUCHBIT /?ELS13
GETP OBJ,P?FDESC >STR
ZERO? STR \?THN10
?ELS13: GETP OBJ,P?LDESC >STR
ZERO? STR /?ELS7
?THN10: PRINT STR
JUMP ?CND1
?ELS7: ZERO? LEVEL \?ELS17
PRINTI "There is "
CALL APRINT,OBJ
PRINTI " here."
JUMP ?CND1
?ELS17: GET INDENTS,LEVEL
PRINT STACK
PRINTI "A"
CALL VOWEL?,OBJ
CALL DPRINT,OBJ
FSET? OBJ,WORNBIT \?CND1
IN? OBJ,WINNER \?CND1
PRINTI " (being worn)"
?CND1: CRLF
CALL SEE-INSIDE?,OBJ
ZERO? STACK /FALSE
FIRST? OBJ \FALSE
CALL PRINT-CONT,OBJ,V?,LEVEL
RSTACK
.FUNCT PRINT-CONT,OBJ,V?=0,LEVEL=0,Y,1ST?,AV,STR,PV?=0,INV?=0,FLG=0
FIRST? OBJ >Y \TRUE
LOC WINNER >AV
ZERO? AV /?ELS6
FSET? AV,VEHBIT \?ELS6
JUMP ?CND4
?ELS6: SET 'AV,FALSE-VALUE
?CND4: SET '1ST?,TRUE-VALUE
LOC OBJ
EQUAL? WINNER,OBJ,STACK \?ELS13
SET 'INV?,TRUE-VALUE
JUMP ?CND11
?ELS13:
?PRG16: ZERO? Y \?ELS20
JUMP ?CND11
?ELS20: EQUAL? Y,AV \?ELS22
SET 'PV?,TRUE-VALUE
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
GETP Y,P?DESCFCN
ZERO? STACK \?CND18
FSET? Y,NDESCBIT /?CND29
PRINT STR
CRLF
SET 'FLG,TRUE-VALUE
?CND29: 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
?CND18: NEXT? Y >Y /?KLU74
?KLU74: JUMP ?PRG16
?CND11: FIRST? OBJ >Y /?KLU75
?KLU75:
?PRG39: ZERO? Y \?ELS43
ZERO? PV? /?REP40
ZERO? AV /?REP40
FIRST? AV \?REP40
CALL PRINT-CONT,AV,V?,LEVEL
RETURN FLG
?ELS43: EQUAL? Y,AV,ADVENTURER \?ELS50
JUMP ?CND41
?ELS50: FSET? Y,INVISIBLE /?CND41
ZERO? INV? \?THN55
FSET? Y,TOUCHBIT /?THN55
GETP Y,P?DESCFCN
ZERO? STACK \?THN55
GETP Y,P?FDESC
ZERO? STACK \?CND41
?THN55: FSET? Y,NDESCBIT /?ELS59
ZERO? 1ST? /?CND60
CALL FIRSTER,OBJ,LEVEL
ZERO? STACK /?CND64
SET 'FLG,TRUE-VALUE
LESS? LEVEL,0 \?CND64
SET 'LEVEL,0
?CND64: INC 'LEVEL
SET '1ST?,FALSE-VALUE
?CND60: CALL DESCRIBE-OBJECT,Y,V?,LEVEL
JUMP ?CND41
?ELS59: GETP Y,P?DESCFCN
ZERO? STACK \?CND41
FIRST? Y \?CND41
CALL SEE-INSIDE?,Y
ZERO? STACK /?CND41
CALL PRINT-CONT,Y,V?,LEVEL
?CND41: NEXT? Y >Y /?KLU76
?KLU76: JUMP ?PRG39
?REP40: RETURN FLG
.FUNCT FIRSTER,OBJ,LEVEL,F
EQUAL? OBJ,WINNER \?ELS5
PRINTR "You are carrying:"
?ELS5: IN? OBJ,ROOMS /FALSE
GRTR? LEVEL,0 \?CND10
GET INDENTS,LEVEL
PRINT STACK
?CND10: EQUAL? OBJ,MAGNET \?ELS17
PRINTI "The "
CALL DPRINT,OBJ
PRINTI " is touching"
JUMP ?CND15
?ELS17: FSET? OBJ,SURFACEBIT \?ELS21
PRINTI "Sitting on the "
CALL DPRINT,OBJ
FIRST? OBJ >F /?KLU39
?KLU39: NEXT? F \?ELS26
PRINTI " are"
JUMP ?CND15
?ELS26: PRINTI " is"
JUMP ?CND15
?ELS21: PRINTI "The "
CALL DPRINT,OBJ
PRINTI " contains"
?CND15: PRINTR ":"
.FUNCT RATING-UPD,NUM
ADD BASE-RATING,NUM >BASE-RATING
ADD RATING,NUM >RATING
RTRUE
.FUNCT RATING-OBJ,OBJ,TEMP
GETP OBJ,P?VALUE
ZERO? STACK /TRUE
GETP OBJ,P?VALUE >TEMP
GRTR? TEMP,0 \FALSE
CALL RATING-UPD,TEMP
PUTP OBJ,P?VALUE,0
RTRUE
.FUNCT V-SCORE,ASK?=1
PRINTI "Your score is "
PRINTN RATING
PRINTI " out of a possible "
PRINTN RATING-MAX
PRINTI "."
CRLF
PRINTI "This score gives you the rank of a "
GRTR? RATING,245 \?ELS9
PRINTI "rich diver"
JUMP ?CND7
?ELS9: GRTR? RATING,190 \?ELS13
PRINTI "good adventurer"
JUMP ?CND7
?ELS13: GRTR? RATING,125 \?ELS17
PRINTI "decent diver"
JUMP ?CND7
?ELS17: GRTR? RATING,45 \?ELS21
PRINTI "so-so sailor"
JUMP ?CND7
?ELS21: PRINTI "chicken of the sea"
?CND7: PRINTI "."
CRLF
RETURN RATING
.FUNCT FINISH
CRLF
CALL V-SCORE
USL
CRLF
?PRG1: PRINTI "Would you like to restart the game from the beginning, restore a saved game position, or end this session of the game? (Type RESTART, RESTORE, or QUIT): >"
READ P-INBUF,P-LEXV
GET P-LEXV,1
EQUAL? STACK,W?RESTART \?ELS7
RESTART
CALL TELL-FAILED
JUMP ?PRG1
?ELS7: GET P-LEXV,1
EQUAL? STACK,W?RESTORE \?ELS9
RESTORE \?ELS12
CALL TELL-OKAY
JUMP ?PRG1
?ELS12: CALL TELL-FAILED
JUMP ?PRG1
?ELS9: GET P-LEXV,1
EQUAL? STACK,W?QUIT,W?Q \?PRG1
QUIT
JUMP ?PRG1
.FUNCT V-QUIT,ASK?=1,SCOR
CALL V-SCORE
ZERO? ASK? /?ELS9
PRINTI "Do you wish to leave the game? (Y is affirmative): "
CALL YES?
ZERO? STACK \?THN6
?ELS9: ZERO? ASK? \?ELS5
?THN6: USL
QUIT
RTRUE
?ELS5: CALL TELL-OKAY
RSTACK
.FUNCT YES?
PRINTI ">"
READ Y-INBUF,Y-LEXV
GET Y-LEXV,1
EQUAL? STACK,W?YES,W?Y \FALSE
RTRUE
.FUNCT V-VERSION,CNT=17,V
GET 0,1
BAND STACK,2047 >V
PRINTI "CUTTHROATS
Copyright (c) 1984 by Infocom, Inc. All rights reserved.
"
GETB 0,1
BAND STACK,8
ZERO? STACK /?CND3
PRINTI "Licensed to Tandy Corporation. Version 00.00."
PRINTN V
CRLF
?CND3: PRINTI "CUTTHROATS is a trademark of Infocom, Inc.
Release "
PRINTN V
PRINTI " / Serial number "
?PRG10: IGRTR? 'CNT,23 \?ELS14
JUMP ?REP11
?ELS14: GETB 0,CNT
PRINTC STACK
JUMP ?PRG10
?REP11: CRLF
RTRUE
.FUNCT V-AGAIN,OBJ,N=0
EQUAL? L-PRSO,NOT-HERE-OBJECT \?ELS3
ZERO? P-MOBY-FOUND /?ELS3
SET 'N,TRUE-VALUE
SET 'L-PRSO,P-MOBY-FOUND
JUMP ?CND1
?ELS3: EQUAL? L-PRSI,NOT-HERE-OBJECT \?CND1
ZERO? P-MOBY-FOUND /?CND1
SET 'N,TRUE-VALUE
SET 'L-PRSI,P-MOBY-FOUND
?CND1: ZERO? L-PRSA \?ELS14
PRINTR "Not until you do something."
?ELS14: EQUAL? L-PRSA,V?WALK,V?FOLLOW \?ELS18
CALL PERFORM,L-PRSA,L-PRSO
RSTACK
?ELS18: ZERO? L-PRSO /?ELS25
CALL VISIBLE?,L-PRSO
ZERO? STACK \?ELS25
PUSH L-PRSO
JUMP ?CND21
?ELS25: ZERO? L-PRSI /?PRD23
CALL VISIBLE?,L-PRSI
ZERO? STACK \?PRD23
PUSH L-PRSI
JUMP ?CND21
?PRD23: PUSH 0
?CND21: SET 'OBJ,STACK
ZERO? OBJ /?ELS36
EQUAL? OBJ,ROOMS /?ELS36
ZERO? N /?ELS41
CALL TELL-YOU-CANT,STR?58,FALSE-VALUE
EQUAL? OBJ,WEASEL /?CND43
PRINTI "any "
?CND43: CALL DPRINT,OBJ
PRINTI " here."
CRLF
JUMP ?CND39
?ELS41: PRINTI "I can't see "
CALL THE?,OBJ
CALL DPRINT,OBJ
PRINTI " anymore."
CRLF
?CND39: SET 'CLOCK-WAIT,TRUE-VALUE
RETURN 2
?ELS36: EQUAL? L-WINNER,PLAYER /?THN65
CALL CONTACT-ESTABLISHED
EQUAL? STACK,M-FATAL /FALSE
?THN65: SET 'P-WALK-DIR,L-WALK-DIR
SET 'P-MERGED,TRUE-VALUE
SET 'P-MULT,FALSE-VALUE
CALL PERFORM,L-PRSA,L-PRSO,L-PRSI >N
ZERO? N \?CND67
SET 'N,TRUE-VALUE
?CND67: SET 'P-MERGED,FALSE-VALUE
RETURN N
.FUNCT CONTACT-ESTABLISHED,OCONT,V
SET 'OCONT,P-CONT
SET 'P-CONT,TRUE-VALUE
SET 'P-MERGED,TRUE-VALUE
CALL PERFORM,V?TELL,L-WINNER >V
SET 'P-CONT,OCONT
SET 'P-MERGED,FALSE-VALUE
RETURN V
.FUNCT JIGS-UP,DESC,PLAYER?=0
PRINT DESC
CRLF
PRINTI "
**** You have died ****
"
PRINTI "Too bad."
CRLF
CRLF
CALL FINISH
RSTACK
.FUNCT V-RESTORE
RESTORE \?ELS5
CALL TELL-OKAY
CALL V-FIRST-LOOK
RSTACK
?ELS5: CALL TELL-FAILED
RSTACK
.FUNCT TELL-FAILED
PRINTR "Failed."
.FUNCT TELL-OKAY
PRINTR "Okay."
.FUNCT V-SAVE
SAVE \?ELS5
CALL TELL-OKAY
RSTACK
?ELS5: CALL TELL-FAILED
RSTACK
.FUNCT V-RESTART
CALL V-SCORE,TRUE-VALUE
PRINTI "Do you wish to restart? (Y is affirmative): "
CALL YES?
ZERO? STACK /FALSE
PRINTI "Restarting."
CRLF
RESTART
CALL TELL-FAILED
RSTACK
.FUNCT V-WALK-AROUND
CALL TELL-SHD-DIR
RSTACK
.FUNCT V-LAUNCH
PRINTR "How does one launch that?"
.FUNCT V-WALK,PT,PTS,STR,OBJ,RM
ZERO? P-WALK-DIR \?ELS5
CALL PERFORM,V?WALK-TO,PRSO
RTRUE
?ELS5: GETPT HERE,PRSO >PT
ZERO? PT /?ELS7
PTSIZE PT >PTS
EQUAL? PTS,UEXIT \?ELS12
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?ELS12: EQUAL? PTS,NEXIT \?ELS14
GET PT,NEXITSTR
PRINT STACK
CRLF
RETURN 2
?ELS14: EQUAL? PTS,FEXIT \?ELS20
GET PT,FEXITFCN
CALL STACK >RM
ZERO? RM /?ELS25
CALL GOTO,RM
RSTACK
?ELS25: RETURN 2
?ELS20: EQUAL? PTS,CEXIT \?ELS31
GETB PT,CEXITFLAG
VALUE STACK
ZERO? STACK /?ELS36
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?ELS36: GET PT,CEXITSTR >STR
ZERO? STR /?ELS38
PRINT STR
CRLF
RETURN 2
?ELS38: CALL TELL-NO-GO,TRUE-VALUE
RETURN 2
?ELS31: EQUAL? PTS,DEXIT \FALSE
GETB PT,DEXITOBJ >OBJ
FSET? OBJ,OPENBIT \?ELS53
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?ELS53: GET PT,DEXITSTR >STR
ZERO? STR /?ELS55
PRINT STR
CRLF
SET 'P-IT-OBJECT,OBJ
RETURN 2
?ELS55: CALL TELL-CLOSED,OBJ,FALSE-VALUE
SET 'P-IT-OBJECT,OBJ
RETURN 2
?ELS7: ZERO? LIT \?ELS65
RANDOM 100
GRTR? 90,STACK \?ELS65
CALL JIGS-UP,STR?59
RSTACK
?ELS65: CALL TELL-NO-GO,TRUE-VALUE
RETURN 2
.FUNCT V-INVENTORY
FIRST? WINNER \?ELS3
CALL PRINT-CONT,WINNER
JUMP ?CND1
?ELS3: PRINTI "You are empty-handed."
CRLF
?CND1: EQUAL? WINNER,PLAYER \FALSE
GRTR? POCKET-CHANGE,0 \FALSE
FSET? WET-SUIT,WORNBIT /FALSE
FSET? DEEP-SUIT,WORNBIT /FALSE
PRINTI "You have $"
PRINTN POCKET-CHANGE
PRINTR " in your pocket."
.FUNCT PRE-TAKE
EQUAL? PRSO,NOT-HERE-OBJECT /FALSE
EQUAL? PRSO,OCEAN \?ELS5
EQUAL? PRSI,GLASS-CASE /FALSE
?ELS5: EQUAL? PRSI,GLOBAL-ROOM \?ELS9
CALL TELL-YOURE-NOT,STR?65
RTRUE
?ELS9: EQUAL? PRSO,RIDICULOUS-MONEY-KLUDGE,GLOBAL-MONEY /?THN12
EQUAL? PRSO,INTNUM \?ELS11
ZERO? P-DOLLAR-FLAG /?ELS11
?THN12: CALL TELL-NOT-EASY
RTRUE
?ELS11: IN? PRSO,MAGNET \?CND1
ZERO? PRSI /FALSE
EQUAL? PRSI,MAGNET /FALSE
?CND1: IN? PRSO,WINNER \?ELS26
FSET? PRSO,WORNBIT \?ELS31
GET P-VTBL,0
EQUAL? STACK,W?REMOVE \?ELS36
CALL PERFORM,V?DISEMBARK,PRSO
RTRUE
?ELS36: PRINTR "You are already wearing it."
?ELS31: CALL TELL-YOU-ALREADY,STR?66
RSTACK
?ELS26: LOC PRSO
FSET? STACK,CONTBIT \?ELS44
LOC PRSO
FSET? STACK,OPENBIT /?ELS44
EQUAL? PRSO,PUTTY /FALSE
CALL TELL-CANT-REACH,STR?67
RTRUE
?ELS44: ZERO? PRSI /?ELS55
LOC PRSO
EQUAL? PRSI,STACK /?ELS61
EQUAL? PRSO,NOT-HERE-OBJECT \?ELS66
FSET? PRSI,CONTBIT \?ELS66
FSET? PRSI,OPENBIT /?ELS66
CALL TELL-YOUD-BETTER,STR?68,FALSE-VALUE,FALSE-VALUE
CALL DPRINT,PRSI
PRINTI " first."
CRLF
SET 'P-IT-OBJECT,PRSI
RTRUE
?ELS66: EQUAL? PRSO,PRSI \?ELS72
CALL TELL-SERIOUS
RSTACK
?ELS72: FSET? PRSI,VICBIT \?ELS74
CALL PERFORM,V?ASK-FOR,PRSI,PRSO
RTRUE
?ELS74: EQUAL? PRSO,RIDICULOUS-MONEY-KLUDGE,GLOBAL-MONEY /?ELS82
EQUAL? PRSO,INTNUM \?ELS82
ZERO? P-DOLLAR-FLAG /?ELS76
?ELS82: EQUAL? PRSI,POCKET \?ELS76
CALL TELL-WHY-BOTHER
RSTACK
?ELS76: EQUAL? PRSO,AIR \?ELS84
EQUAL? PRSI,AIR-TANK \?ELS84
CALL PERFORM,V?EMPTY,AIR-TANK
RTRUE
?ELS84: CALL START-SENTENCE,PRSO
PRINTI " isn't in "
CALL THE?,PRSI
CALL DPRINT,PRSI
PRINTR "."
?ELS61: SET 'PRSI,FALSE-VALUE
RFALSE
?ELS55: LOC WINNER
EQUAL? PRSO,STACK \FALSE
PRINTI "You are "
LOC WINNER
CALL VEHPREP,STACK
PRINT STACK
PRINTR " it, loser!"
.FUNCT TELL-YOURE-NOT,STR,DONE?=1
PRINTI "You're not "
PRINT STR
ZERO? DONE? /FALSE
CRLF
RTRUE
.FUNCT TELL-NOT-EASY
PRINTR "It's not that easy."
.FUNCT V-TAKE
CALL ITAKE
ZERO? STACK /FALSE
PRINTR "Taken."
.FUNCT ITAKE,VB=1,CNT,OBJ,TEMP,?TMP1
FSET? PRSO,TAKEBIT /?ELS5
ZERO? VB /FALSE
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RFALSE
?ELS5: EQUAL? PRSO,ENVELOPE \?ELS13
EQUAL? HERE,MCGINTY-HQ \?ELS13
IN? MCGINTY,MCGINTY-HQ \?ELS13
SET 'TEMP,PRSA
SET 'PRSA,V?TAKE
CALL ENVELOPE-F
SET 'PRSA,TEMP
RFALSE
?ELS13: LOC PRSO
IN? STACK,WINNER /?ELS17
CALL WEIGHT,PRSO >?TMP1
CALL WEIGHT,WINNER
ADD ?TMP1,STACK
GRTR? STACK,LOAD-ALLOWED \?ELS17
ZERO? VB /FALSE
PRINTI "Your load is too heavy."
CRLF
RFALSE
?ELS17: CALL CCOUNT,WINNER >CNT
GRTR? CNT,FUMBLE-NUMBER \?ELS27
PRINTI "You're carrying too many things already!"
CRLF
RFALSE
?ELS27: EQUAL? PRSO,MINE \?ELS31
CALL BOOM
RSTACK
?ELS31: MOVE PRSO,WINNER
FSET PRSO,TOUCHBIT
FCLEAR PRSO,NDESCBIT
CALL RATING-OBJ,PRSO
RTRUE
.FUNCT V-PUT-ACROSS
CALL TELL-NO-NO
RSTACK
.FUNCT V-PUT-ON
FSET? PRSI,SURFACEBIT \?ELS5
CALL V-PUT
RTRUE
?ELS5: EQUAL? PRSI,ME \?ELS7
PRINTR "Sounds kinky."
?ELS7: FSET? PRSI,VICBIT \?ELS11
PRINTR "I don't think he'd appreciate it."
?ELS11: PRINTI "There's no good surface on "
CALL THE?,PRSI
CALL DPRINT,PRSI
PRINTR "."
.FUNCT PRE-PUT,OBJ
ZERO? PRSI \?ELS5
PRINTR "Huh?"
?ELS5: EQUAL? PRSO,MAGNET,GLOBAL-SELF,NOT-HERE-OBJECT /FALSE
EQUAL? PRSI,OCEAN \?ELS11
CALL PERFORM,V?THROW,PRSO,OCEAN
RTRUE
?ELS11: EQUAL? PRSA,V?PUT \?ELS13
EQUAL? PRSO,ME \?ELS13
CALL PERFORM,V?WEAR,PRSI
RTRUE
?ELS13: EQUAL? PRSA,V?PUT-ON \?ELS17
EQUAL? PRSI,ME \?ELS17
CALL PERFORM,V?WEAR,PRSO
RTRUE
?ELS17: EQUAL? PRSO,RIDICULOUS-MONEY-KLUDGE,GLOBAL-MONEY /?THN22
ZERO? P-DOLLAR-FLAG /?ELS21
EQUAL? PRSO,INTNUM \?ELS21
?THN22: EQUAL? PRSI,POCKET /FALSE
CALL TELL-YOU-CANT,STR?53
RSTACK
?ELS21: EQUAL? PRSO,AIR-HOSE \?ELS34
EQUAL? PRSI,DEEP-SUIT /FALSE
?ELS34: CALL HELD?,PRSO
ZERO? STACK \?ELS38
CALL TELL-DONT-HAVE,FALSE-VALUE
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
?ELS38: IN? PRSO,GLOBAL-OBJECTS /?THN43
FSET? PRSO,TAKEBIT /FALSE
?THN43: PRINTR "Nice try."
.FUNCT V-PUT,?TMP1
FSET? PRSI,OPENBIT /?CND1
FSET? PRSI,DOORBIT /?THN6
FSET? PRSI,CONTBIT /?CND1
?THN6: FSET? PRSI,VEHBIT \?ELS3
JUMP ?CND1
?ELS3: CALL TELL-NO-NO
RTRUE
?CND1: FSET? PRSI,OPENBIT /?ELS14
PRINTI "The "
CALL DPRINT,PRSI
PRINTR " isn't open."
?ELS14: EQUAL? PRSI,PRSO \?ELS18
CALL TELL-HOW-THAT,STR?10
RSTACK
?ELS18: IN? PRSO,PRSI \?ELS20
CALL START-SENTENCE,PRSO
PRINTI " is already in "
CALL THE?,PRSI
CALL DPRINT,PRSI
PRINTR "."
?ELS20: 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 \?ELS26
PRINTR "There's no room."
?ELS26: CALL HELD?,PRSO
ZERO? STACK \?ELS30
CALL ITAKE
ZERO? STACK /TRUE
?ELS30: MOVE PRSO,PRSI
FSET PRSO,TOUCHBIT
FCLEAR PRSO,WORNBIT
PRINTR "Done."
.FUNCT PRE-DROP
LOC WINNER
EQUAL? PRSO,STACK \FALSE
CALL PERFORM,V?DISEMBARK,PRSO
RTRUE
.FUNCT PRE-GIVE
ZERO? PRSI \?ELS5
PRINTR "Huh?"
?ELS5: EQUAL? PRSO,ME,NOT-HERE-OBJECT /FALSE
FSET? PRSI,VICBIT /?ELS11
PRINTI "To "
CALL APRINT,PRSI
PRINTR "???"
?ELS11: EQUAL? WINNER,PLAYER \?ELS15
EQUAL? PRSI,ME \?ELS15
ZERO? QCONTEXT /?ELS15
EQUAL? HERE,QCONTEXT-ROOM \?ELS15
CALL META-LOC,QCONTEXT
EQUAL? HERE,STACK \?ELS15
SET 'WINNER,QCONTEXT
CALL PERFORM,V?GIVE,PRSO,PRSI
SET 'WINNER,PLAYER
RTRUE
?ELS15: EQUAL? PRSI,WINNER /?THN20
EQUAL? WINNER,PLAYER \?ELS19
EQUAL? PRSI,ME \?ELS19
?THN20: CALL TELL-CHARITY
RSTACK
?ELS19: EQUAL? PRSO,INTNUM,RIDICULOUS-MONEY-KLUDGE,GLOBAL-MONEY /FALSE
EQUAL? PRSO,DRINKING-WATER \?ELS27
EQUAL? HERE,SHANTY \?ELS27
EQUAL? PRSI,SPEAR-CARRIER /FALSE
?ELS27: EQUAL? PRSO,DRINK-OBJECT \?ELS31
IN? DRINK-OBJECT,TABLE-OBJECT /FALSE
?ELS31: CALL HELD?,PRSO
ZERO? STACK \FALSE
EQUAL? WINNER,PLAYER \?ELS40
PRINTR "That's easy for you to say since you don't even have it."
?ELS40: PRINTI """I don't have "
CALL APRINT,PRSO
PRINTI " to give!"" exclaims "
CALL THE?,WINNER
CALL DPRINT,WINNER
PRINTR "."
.FUNCT TELL-CHARITY
PRINTR "I know charity begins at home, but this is ridiculous."
.FUNCT PRE-SGIVE
CALL PERFORM,V?GIVE,PRSI,PRSO
RTRUE
.FUNCT HELD?,OBJ
ZERO? OBJ /FALSE
IN? OBJ,WINNER /TRUE
EQUAL? OBJ,ME,GLOBAL-SELF /TRUE
LOC OBJ
CALL HELD?,STACK
RSTACK
.FUNCT V-GIVE
EQUAL? PRSI,SPEAR-CARRIER \?ELS5
EQUAL? PRSO,INTNUM \?ELS5
ZERO? P-DOLLAR-FLAG /?ELS5
PRINTR """If you want to buy something, be specific."""
?ELS5: FSET? PRSI,VICBIT \?ELS11
CALL START-SENTENCE,PRSI
PRINTR " declines your generous offer."
?ELS11: CALL TELL-YOU-CANT,STR?69,FALSE-VALUE
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTI " to "
CALL APRINT,PRSI
PRINTR "!"
.FUNCT V-SGIVE
PRINTR "Bug."
.FUNCT V-DROP,SUPPRESS=0
CALL IDROP
ZERO? STACK /FALSE
ZERO? SUPPRESS \FALSE
PRINTR "Dropped."
.FUNCT PRE-THROW
EQUAL? PRSO,NOT-HERE-OBJECT /FALSE
IN? PRSO,WINNER /FALSE
CALL TELL-YOURE-NOT,STR?70,FALSE-VALUE
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
.FUNCT V-THROW
ZERO? PRSI /?CND1
FSET? PRSI,CONTBIT /?THN8
FSET? PRSI,CLIMBBIT \?ELS7
?THN8: CALL PERFORM,V?PUT,PRSO,PRSI
RTRUE
?ELS7: EQUAL? PRSI,ME \?ELS11
PRINTR "You'd probably miss."
?ELS11: EQUAL? PRSI,FIELD \?ELS15
CALL START-SENTENCE,PRSO
PRINTI " bounces off the weeds."
CRLF
JUMP ?CND1
?ELS15: CALL START-SENTENCE,PRSI
FSET? PRSI,VICBIT \?ELS22
PRINTI " ducks"
JUMP ?CND20
?ELS22: PRINTI " doesn't duck"
?CND20: PRINTI " as the "
CALL DPRINT,PRSO
PRINTI " flies by."
CRLF
?CND1: CALL IDROP
ZERO? PRSI \TRUE
PRINTR "Thrown."
.FUNCT IDROP
IN? PRSO,WINNER /?ELS5
LOC PRSO
IN? STACK,WINNER /?ELS5
CALL TELL-YOURE-NOT,STR?70,FALSE-VALUE
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTI "."
CRLF
RFALSE
?ELS5: IN? PRSO,WINNER /?ELS11
LOC PRSO
FSET? STACK,OPENBIT /?ELS11
LOC PRSO
CALL TELL-CLOSED,STACK,FALSE-VALUE
RFALSE
?ELS11: LOC PLAYER
FSET? STACK,VEHBIT \?ELS18
IN? PLAYER,BED /?ELS18
CALL META-LOC,PLAYER
MOVE PRSO,STACK
JUMP ?CND16
?ELS18: LOC WINNER
MOVE PRSO,STACK
?CND16: FCLEAR PRSO,WORNBIT
EQUAL? PRSO,SAFETY-LINE \TRUE
CALL QUEUE,I-PENDULUM,3
PUT STACK,0,1
RTRUE
.FUNCT PRE-OPEN
ZERO? PRSI /FALSE
FSET? PRSI,TOOLBIT /FALSE
CALL PRE-BURN
RSTACK
.FUNCT V-OPEN,F,STR
FSET? PRSO,CONTBIT /?ELS5
CALL SAY-MUST-TELL
RSTACK
?ELS5: GETP PRSO,P?CAPACITY
ZERO? STACK /?ELS7
FSET? PRSO,OPENBIT \?ELS12
CALL TELL-ALREADY,STR?25
RSTACK
?ELS12: FSET PRSO,OPENBIT
FIRST? PRSO /?ELS19
PRINTR "Opened."
?ELS19: FIRST? PRSO >F \?ELS23
NEXT? F /?ELS23
GETP F,P?FDESC >STR
ZERO? STR /?ELS23
CALL TELL-OPENS
PRINT STR
CRLF
RTRUE
?ELS23: PRINTI "Opening the "
CALL DPRINT,PRSO
PRINTI " reveals "
CALL PRINT-CONTENTS,PRSO
PRINTR "."
?ELS7: FSET? PRSO,DOORBIT \?ELS35
FSET? PRSO,OPENBIT \?ELS40
CALL TELL-ALREADY,STR?25
RSTACK
?ELS40: CALL TELL-OPENS
FSET PRSO,OPENBIT
RTRUE
?ELS35: PRINTI "The "
CALL DPRINT,PRSO
PRINTR " fails to open."
.FUNCT TELL-OPENS
PRINTI "The "
CALL DPRINT,PRSO
PRINTR " opens."
.FUNCT SAY-MUST-TELL
PRINTI "You must tell me how to do that to "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
.FUNCT PRINT-CONTENTS,OBJ,F,N,1ST?=1,2ND=0
FIRST? OBJ >F \FALSE
NEXT? F /?CND6
SET 'P-IT-OBJECT,F
?CND6:
?PRG9: NEXT? F >N /?KLU36
?KLU36: ZERO? 1ST? /?ELS13
SET '1ST?,FALSE-VALUE
SET '2ND,TRUE-VALUE
JUMP ?CND11
?ELS13: ZERO? N \?THN20
ZERO? 2ND \?CND17
?THN20: SET '2ND,FALSE-VALUE
PRINTI ","
?CND17: PRINTI " "
ZERO? N \?CND11
PRINTI "and "
?CND11: CALL APRINT,F
SET 'F,N
ZERO? F \?PRG9
RTRUE
.FUNCT V-ASK-ABOUT
EQUAL? PRSO,ME,PLAYER \?ELS5
CALL TELL-NO-INFO
RSTACK
?ELS5: FSET? PRSO,VICBIT /?ELS7
CALL SUDDENLY-REALIZE-TALKING,PRSO
RTRUE
?ELS7: PRINTI "After a moment's thought, "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR " disavows any knowledge of that."
.FUNCT SUDDENLY-REALIZE-TALKING,OBJ
PRINTI "You suddenly realize that you're talking to "
CALL APRINT,OBJ
PRINTR "."
.FUNCT TELL-NO-INFO
PRINTI "You find that you can provide "
CALL DPRINT,GLOBAL-SELF
PRINTR " with no new information."
.FUNCT PRE-ASK-CONTEXT-ABOUT,P
ZERO? QCONTEXT /FALSE
EQUAL? HERE,QCONTEXT-ROOM \FALSE
CALL META-LOC,QCONTEXT
EQUAL? HERE,STACK \FALSE
PRINTI "(said to "
CALL DPRINT,QCONTEXT
PRINTI ")"
CRLF
CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO
RTRUE
.FUNCT V-ASK-CONTEXT-ABOUT
CALL V-ASK-CONTEXT-FOR
RSTACK
.FUNCT V-ASK-FOR
EQUAL? PRSO,ME,PLAYER \?ELS5
CALL TELL-NO-INFO
RSTACK
?ELS5: FSET? PRSO,VICBIT \?ELS7
EQUAL? PRSO,PLAYER \?ELS12
IN? PRSI,PLAYER \?ELS17
CALL TELL-YOU-ALREADY,STR?66
RSTACK
?ELS17: CALL TELL-DONT-HAVE,STR?21
RSTACK
?ELS12: EQUAL? PRSI,RIDICULOUS-MONEY-KLUDGE,GLOBAL-MONEY,KNIFE /?THN22
EQUAL? PRSI,INTNUM \?ELS21
ZERO? P-DOLLAR-FLAG /?ELS21
?THN22: CALL START-SENTENCE,PRSO
PRINTR " refuses."
?ELS21: EQUAL? PRSO,SPEAR-CARRIER \?ELS29
GETP PRSI,P?NORTH
GRTR? STACK,0 \?ELS29
CALL TELL-CHARITY
RSTACK
?ELS29: CALL START-SENTENCE,PRSO
IN? PRSI,PRSO \?ELS38
PRINTI " hands you the "
CALL DPRINT,PRSI
PRINTI "."
CRLF
MOVE PRSI,WINNER
RTRUE
?ELS38: PRINTR " doesn't have that."
?ELS7: CALL SUDDENLY-REALIZE-TALKING,PRSO
RSTACK
.FUNCT PRE-ASK-CONTEXT-FOR,P
ZERO? QCONTEXT /FALSE
EQUAL? HERE,QCONTEXT-ROOM \FALSE
CALL META-LOC,QCONTEXT
EQUAL? HERE,STACK \FALSE
PRINTI "(said to "
CALL DPRINT,QCONTEXT
PRINTI ")"
CRLF
CALL PERFORM,V?ASK-FOR,QCONTEXT,PRSO
RTRUE
.FUNCT V-ASK-CONTEXT-FOR
CALL TELL-YOURE-NOT,STR?71
RSTACK
.FUNCT V-CALL
FSET? PRSO,PERSON \?ELS5
CALL PERFORM,V?$CALL,PRSO
RTRUE
?ELS5: FSET? PRSO,VICBIT \?ELS7
SET 'QCONTEXT,PRSO
SET 'QCONTEXT-ROOM,HERE
PRINTI "The "
CALL DPRINT,PRSO
CALL TELL-LISTENING
RSTACK
?ELS7: PRINTR "There's no response."
.FUNCT V-CALL-LOSE
SET 'CLOCK-WAIT,TRUE-VALUE
PRINTR "You must use a verb!"
.FUNCT PRE-$CALL
EQUAL? PRSO,INTDIR \?ELS5
CALL PERFORM,V?WALK,P-WALK-DIR
RTRUE
?ELS5: FSET? PRSO,VICBIT /FALSE
CALL V-CALL-LOSE
RSTACK
.FUNCT V-$CALL,MOT=0
EQUAL? PRSO,PLAYER,ME \?ELS5
CALL V-CALL-LOSE
RSTACK
?ELS5: FSET? PRSO,PERSON \?ELS7
CALL IN-MOTION?,PRSO
ZERO? STACK /?CND8
SET 'MOT,TRUE-VALUE
?CND8: CALL META-LOC,PRSO
EQUAL? STACK,HERE /?THN16
CALL CORRIDOR-LOOK,PRSO
ZERO? STACK /?ELS15
?THN16: CALL START-SENTENCE,PRSO
CALL GRAB-ATTENTION,PRSO
ZERO? STACK /?ELS22
FSET PRSO,TOUCHBIT
CALL META-LOC,PRSO >QCONTEXT-ROOM
ZERO? MOT /?ELS27
PRINTR " stops and turns toward you."
?ELS27: CALL TELL-LISTENING
RSTACK
?ELS22: PRINTR " ignores you."
?ELS15: PRINTI "You don't see "
CALL DPRINT,PRSO
PRINTR " here."
?ELS7: EQUAL? PRSO,SPEAR-CARRIER \?ELS42
IN? SPEAR-CARRIER,HERE \?ELS42
SET 'QCONTEXT,SPEAR-CARRIER
SET 'QCONTEXT-ROOM,HERE
PRINTI "The "
CALL DPRINT,PRSO
CALL TELL-LISTENING
RSTACK
?ELS42: CALL V-CALL-LOSE
RSTACK
.FUNCT TELL-LISTENING
PRINTR " is listening."
.FUNCT V-CLOSE
FSET? PRSO,CONTBIT /?ELS5
CALL SAY-MUST-TELL
RSTACK
?ELS5: FSET? PRSO,SURFACEBIT /?ELS7
GETP PRSO,P?CAPACITY
ZERO? STACK /?ELS7
FSET? PRSO,OPENBIT \?ELS14
FCLEAR PRSO,OPENBIT
PRINTR "Closed."
?ELS14: CALL TELL-ALREADY,STR?26
RSTACK
?ELS7: FSET? PRSO,DOORBIT \?ELS20
FSET? PRSO,OPENBIT \?ELS25
CALL TELL-NOW,PRSO,STR?26
FCLEAR PRSO,OPENBIT
RTRUE
?ELS25: CALL TELL-ALREADY,STR?26
RSTACK
?ELS20: CALL TELL-YOU-CANT,STR?72
RSTACK
.FUNCT CCOUNT,OBJ,CNT=0,X
FIRST? OBJ >X \?CND1
?PRG4: FSET? X,WORNBIT /?CND6
INC 'CNT
?CND6: NEXT? X >X /?PRG4
?CND1: RETURN CNT
.FUNCT WEIGHT,OBJ,CONT,WT=0
FIRST? OBJ >CONT \?CND1
?PRG4: EQUAL? OBJ,WINNER \?ELS8
FSET? CONT,WEARBIT \?ELS8
INC 'WT
JUMP ?CND6
?ELS8: CALL WEIGHT,CONT
ADD WT,STACK >WT
?CND6: NEXT? CONT >CONT /?PRG4
?CND1: GETP OBJ,P?SIZE
ADD WT,STACK
RSTACK
.FUNCT V-BREATHE
ZERO? PRSO /?ELS5
EQUAL? PRSO,AIR /?ELS5
PRINTR "Stick to air."
?ELS5: PRINTR "If you stop breathing, I'll let you know."
.FUNCT V-SCRIPT
GET 0,8
BOR STACK,1
PUT 0,8,STACK
PRINTI "Here begins"
PRINT COPR-NOTICE
CRLF
RTRUE
.FUNCT V-UNSCRIPT
PRINTI "Here ends"
PRINT COPR-NOTICE
CRLF
GET 0,8
BAND STACK,-2
PUT 0,8,STACK
RTRUE
.FUNCT PRE-MOVE
EQUAL? PRSO,SAFETY-LINE /FALSE
IN? PLAYER,PRSO \?ELS7
CALL TELL-CONTORT
RSTACK
?ELS7: CALL HELD?,PRSO
ZERO? STACK /FALSE
PRINTR "I don't juggle objects!"
.FUNCT V-MOVE
FSET? PRSO,TAKEBIT \?ELS5
PRINTI "Moving the "
CALL DPRINT,PRSO
PRINTR " reveals nothing."
?ELS5: FSET? PRSO,PUSHBIT \?ELS9
CALL TELL-MOVES-BIT
RSTACK
?ELS9: CALL TELL-YOU-CANT,STR?74,FALSE-VALUE
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
.FUNCT V-LAMP-ON
FSET? PRSO,VICBIT \?ELS5
PRINTR "Restrain yourself."
?ELS5: CALL TELL-YOU-CANT,STR?75
RSTACK
.FUNCT V-LAMP-OFF
CALL TELL-YOU-CANT,STR?76
RSTACK
.FUNCT TELL-PASSES
PRINTR "Time passes..."
.FUNCT V-WAIT,NUM=10,NOT-INT?=1,WHO=0,INTERRUPTED=0
ZERO? NOT-INT? /?CND1
CALL TELL-PASSES
GRTR? I-WAIT-DURATION,0 /FALSE
?CND1:
?PRG8: DLESS? 'NUM,0 \?ELS12
JUMP ?REP9
?ELS12: CALL CLOCKER
ZERO? STACK /?ELS14
SET 'INTERRUPTED,TRUE-VALUE
JUMP ?REP9
?ELS14: ZERO? WHO /?CND10
IN? WHO,HERE \?CND10
SET 'INTERRUPTED,TRUE-VALUE
JUMP ?REP9
?CND10: USL
JUMP ?PRG8
?REP9: ZERO? NOT-INT? /?ELS23
SET 'CLOCK-WAIT,TRUE-VALUE
RETURN CLOCK-WAIT
?ELS23: RETURN INTERRUPTED
.FUNCT V-WAIT-FOR
EQUAL? PRSO,INTNUM \?ELS5
GRTR? P-NUMBER,180 \?ELS10
PRINTR "That's too long to wait."
?ELS10: CALL V-WAIT,P-NUMBER
RSTACK
?ELS5: EQUAL? PRSO,PLAYER,ME \?ELS16
PRINTR "You're already here!"
?ELS16: FSET? PRSO,PERSON /?THN21
EQUAL? PRSO,DELIVERY-BOY \?ELS20
?THN21: IN? PRSO,HERE \?ELS27
PRINTR "He's already here!"
?ELS27: CALL TELL-PASSES
?PRG32: CALL V-WAIT,30,FALSE-VALUE,PRSO
ZERO? STACK /?CND34
IN? PRSO,HERE \?CND34
FSET PRSO,TOUCHBIT
CALL START-SENTENCE,PRSO
PRINTI ", for whom you were waiting, has arrived."
CRLF
SET 'P-IT-OBJECT,PRSO
JUMP ?REP33
?CND34: CALL START-SENTENCE,PRSO
PRINTI " isn't here yet. Do you want to keep waiting? (YES or NO?)"
CALL YES?
ZERO? STACK \?PRG32
PRINTI "If you say so..."
CRLF
?REP33: SET 'CLOCK-WAIT,TRUE-VALUE
RETURN CLOCK-WAIT
?ELS20: FSET? PRSO,VICBIT \?ELS50
PRINTR "I don't think he's going anywhere."
?ELS50: PRINTR "Why? It's not going anywhere."
.FUNCT PRE-BOARD,AV
LOC WINNER >AV
FSET? PRSO,VEHBIT \?ELS3
FSET? AV,VEHBIT \FALSE
PRINTI "You are already "
CALL VEHPREP,AV
PRINT STACK
PRINTI " the "
CALL DPRINT,AV
PRINTI "!"
CRLF
RETURN 2
?ELS3: FSET? PRSO,WEARBIT \?ELS12
CALL PERFORM,V?WEAR,PRSO
RETURN 2
?ELS12: EQUAL? PRSO,FIELD,CLOSET,NOT-HERE-OBJECT /FALSE
EQUAL? PRSO,BACK-WINDOW,REDS-BUNK,OCEAN /FALSE
PRINTI "I suppose you have a theory on getting into "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTI "."
CRLF
RETURN 2
.FUNCT V-BOARD
PRINTI "You are now "
CALL VEHPREP,PRSO
PRINT STACK
PRINTI " the "
CALL DPRINT,PRSO
PRINTI "."
CRLF
MOVE WINNER,PRSO
RTRUE
.FUNCT V-DISEMBARK
FSET? PRSO,WORNBIT \?ELS5
CALL UNWEAR
RTRUE
?ELS5: LOC WINNER
EQUAL? STACK,PRSO /?ELS7
CALL TELL-YOURE-NOT,STR?77
RETURN 2
?ELS7: FSET? HERE,RLANDBIT \?ELS11
ZERO? STOOD-UP \?ELS14
PRINTI "You get out of bed."
CRLF
SET 'STOOD-UP,TRUE-VALUE
JUMP ?CND12
?ELS14: PRINTI "You are on your feet again."
CRLF
?CND12: MOVE WINNER,HERE
RTRUE
?ELS11: PRINTI "A bad idea."
CRLF
RETURN 2
.FUNCT PRE-BUY
EQUAL? PRSO,DRINKING-WATER /FALSE
FSET? WET-SUIT,WORNBIT /?THN8
FSET? DEEP-SUIT,WORNBIT \FALSE
?THN8: CALL TELL-YOU-CANT,STR?78
RSTACK
.FUNCT V-BUY,RENT=0,COST,?TMP1
IN? PRSO,ROOMS /?ELS5
GETP PRSO,P?NORTH >COST
ZERO? COST /?ELS5
GRTR? COST,0 \?ELS5
CALL ENABLED?,I-EQUIP
ZERO? STACK /?ELS12
IN? MCGINTY,OUTFITTERS-HQ /?ELS12
PRINTR "The salesman is too busy with Johnny right now."
?ELS12: FSET? PRSO,RENTBIT \?ELS18
ZERO? RENT \?ELS18
PRINTR "That's not for sale, but you might try renting it."
?ELS18: GRTR? COST,POCKET-CHANGE \?ELS24
CALL TELL-NO-AFFORD
RSTACK
?ELS24: SUB POCKET-CHANGE,COST >POCKET-CHANGE
PUTP PRSO,P?NORTH,-1
ZERO? JOHNNY-MADE-DEAL /?ELS29
ZERO? DELIVERY-MADE \?ELS29
FSET PRSO,TRYTAKEBIT
PUT DELIVERY-TABLE,DT-PTR,PRSO
ADD DT-PTR,2 >DT-PTR
JUMP ?CND27
?ELS29: FSET PRSO,TAKEBIT
FCLEAR PRSO,NDESCBIT
CALL WEIGHT,PRSO >?TMP1
CALL WEIGHT,WINNER
ADD ?TMP1,STACK
GRTR? STACK,LOAD-ALLOWED /?THN37
CALL CCOUNT,WINNER
GRTR? STACK,FUMBLE-NUMBER \?ELS36
?THN37: MOVE PRSO,GLOBAL-SURFACE
JUMP ?CND27
?ELS36: MOVE PRSO,WINNER
?CND27: PRINTI "You have "
ZERO? RENT /?ELS45
PRINTI "rented"
JUMP ?CND43
?ELS45: PRINTI "purchased"
?CND43: PRINTI " "
CALL APRINT,PRSO
PRINTI " for $"
PRINTN COST
IN? PRSO,GLOBAL-SURFACE \?CND55
PRINTI ". Since you can't currently carry it, the salesman leaves it on the counter"
?CND55: PRINTR "."
?ELS5: EQUAL? COST,-1 \?ELS63
FSET? PRSO,RENTBIT \?ELS68
PRINTR "You've already rented it."
?ELS68: CALL TELL-ONLY-ONCE,STR?79
RSTACK
?ELS63: EQUAL? PRSO,DRINKING-WATER \?ELS74
EQUAL? HERE,MM-GALLEY,NW-GALLEY \?ELS79
PRINTI "Get it "
CALL DPRINT,GLOBAL-SELF
PRINTR "."
?ELS79: CALL PERFORM,V?ASK-FOR,SPEAR-CARRIER,DRINKING-WATER
SET 'P-IT-OBJECT,DRINKING-WATER
RTRUE
?ELS74: PRINTR "That's not for sale."
.FUNCT TELL-ONLY-ONCE,STR
PRINTI "You only "
PRINT STR
PRINTR " it once."
.FUNCT V-RENT,COST
IN? PRSO,ROOMS /?ELS5
GETP PRSO,P?NORTH >COST
ZERO? COST /?ELS5
GRTR? COST,0 \?ELS5
FSET? PRSO,RENTBIT /?ELS12
PRINTR "That's not available for rental. You might try buying it."
?ELS12: CALL V-BUY,TRUE-VALUE
RSTACK
?ELS5: EQUAL? COST,-1 \?ELS18
FSET? PRSO,RENTBIT \?ELS23
CALL TELL-ONLY-ONCE,STR?80
RSTACK
?ELS23: CALL TELL-YOU-ALREADY,STR?81
RSTACK
?ELS18: CALL TELL-YOU-CANT,STR?82
RSTACK
.FUNCT GOTO,RM,V?=1,LB,WLOC,AV=0,OLIT,F,N
FSET? RM,RLANDBIT /?PRD1
PUSH 0
JUMP ?PRD2
?PRD1: PUSH 1
?PRD2: SET 'LB,STACK
LOC WINNER >WLOC
SET 'OLIT,LIT
FSET? WLOC,VEHBIT \?CND3
CALL TELL-YOUD-BETTER,STR?83,FALSE-VALUE,FALSE-VALUE
FSET? WLOC,SURFACEBIT \?ELS8
PRINTI "off"
JUMP ?CND6
?ELS8: PRINTI "out"
?CND6: PRINTI " of the "
CALL DPRINT,WLOC
PRINTI " first."
CRLF
RETURN 2
?CND3: MOVE WINNER,RM
SET 'HERE,RM
CALL LIT?,HERE >LIT
ZERO? OLIT \?CND24
ZERO? LIT \?CND24
RANDOM 100
GRTR? 90,STACK \?CND24
CALL JIGS-UP,STR?84
?CND24: GETP HERE,P?ACTION
CALL STACK,M-ENTER
CALL RATING-OBJ,RM
EQUAL? HERE,RM \TRUE
EQUAL? ADVENTURER,WINNER /?ELS33
CALL START-SENTENCE,WINNER
PRINTI " leaves the room."
CRLF
RETURN 2
?ELS33: ZERO? V? /TRUE
CALL V-FIRST-LOOK
IN? MAGNET,PLAYER \TRUE
ZERO? MAGNET-ON /?ELS46
CALL ATTRACTION
RTRUE
?ELS46: FIRST? MAGNET >F \TRUE
MOVE F,WLOC
RTRUE
.FUNCT V-BACK
PRINTI "Sorry, my memory isn't that good. "
CALL TELL-SHD-DIR
RSTACK
.FUNCT POURABLE?,OBJ
EQUAL? OBJ,DRINKING-WATER,DRINK-OBJECT \FALSE
RTRUE
.FUNCT V-POUR
EQUAL? PRSO,OCEAN \?ELS5
CALL TELL-YOURE-NOT,STR?85
RSTACK
?ELS5: CALL POURABLE?,PRSO
ZERO? STACK \?ELS7
CALL TELL-YOU-CANT,STR?86
RTRUE
?ELS7: EQUAL? HERE,SHANTY \?ELS9
IN? PRSO,TABLE-OBJECT /?ELS9
CALL TELL-BUY-FIRST
RSTACK
?ELS9: MOVE PRSO,HERE
FSET PRSO,NDESCBIT
PRINTR "It evaporates immediately."
.FUNCT V-POUR-IN,L
CALL POURABLE?,PRSO
ZERO? STACK \?ELS5
PRINTI "I don't think you can pour "
CALL APRINT,PRSO
PRINTI "."
RTRUE
?ELS5: FSET? PRSI,CONTBIT /?ELS9
PRINTI "You'd have a lot of trouble pouring the "
CALL DPRINT,PRSO
PRINTI " into "
CALL THE?,PRSI
CALL DPRINT,PRSI
PRINTR "."
?ELS9: CALL TELL-WHY-BOTHER
RSTACK
.FUNCT V-POUR-ON
CALL POURABLE?,PRSO
ZERO? STACK /?ELS5
CALL TELL-WHY-BOTHER
RSTACK
?ELS5: CALL TELL-YOU-CANT,STR?86
RSTACK
.FUNCT V-SHOW
ZERO? PRSI \?ELS5
PRINTR "Huh?"
?ELS5: EQUAL? PRSI,ME,PLAYER \?ELS9
PRINTI "Do you often talk to "
CALL DPRINT,GLOBAL-SELF
PRINTR "?"
?ELS9: FSET? PRSI,VICBIT /?ELS13
PRINTI "Don't wait for "
CALL THE?,PRSI
CALL DPRINT,PRSI
PRINTR " to applaud."
?ELS13: EQUAL? PRSI,PRSO \?ELS19
PRINTR "He's already aware of his own presence."
?ELS19: PRINTI "Although "
CALL THE?,PRSI
CALL DPRINT,PRSI
PRINTR " takes a look, he seems disinterested."
.FUNCT PRE-SSHOW
SET 'P-MERGED,TRUE-VALUE
CALL PERFORM,V?SHOW,PRSI,PRSO
RTRUE
.FUNCT V-SSHOW
PRINTI "Bug."
RTRUE
.FUNCT V-SPRAY
CALL V-SQUEEZE
RSTACK
.FUNCT V-SSPRAY
CALL PERFORM,V?SPRAY,PRSI,PRSO
RSTACK
.FUNCT V-SQUEEZE
PRINTR "How singularly useless."
.FUNCT V-OIL
PRINTR "That's not very useful."
.FUNCT V-FILL
CALL TELL-NO-NO
RSTACK
.FUNCT PRE-DRILL
ZERO? PRSI \?CND1
SET 'PRSI,DRILL
?CND1: EQUAL? PRSI,DRILL /?ELS8
CALL PRE-BURN
RSTACK
?ELS8: IN? DRILL,PLAYER /FALSE
CALL TELL-YOURE-NOT,STR?87
RSTACK
.FUNCT V-DRILL
CALL TELL-YOU-CANT,STR?88
RSTACK
.FUNCT PRE-DRILL-IN
IN? DRILL,PLAYER /?ELS5
PRINTR "A drill might help."
?ELS5: EQUAL? PRSO,HOLE-2,HOLE-1,HOLE /?THN10
EQUAL? PRSO,CEILING-HOLE-2,CEILING-HOLE-1,JAGGED-HOLE /?THN10
EQUAL? PRSO,FLOOR-HOLE-2,FLOOR-HOLE-1 \?ELS9
?THN10: PRINTI "(with the "
CALL DPRINT,DRILL
PRINTI ")"
CRLF
CALL PERFORM,V?DRILL,PRSI,DRILL
RTRUE
?ELS9: SET 'CLOCK-WAIT,TRUE-VALUE
PRINTR "I can't figure out what you mean."
.FUNCT V-DRILL-IN
PRINTR "Bug."
.FUNCT PRE-DRINK
EQUAL? WINNER,PLAYER /?ELS5
PRINTR """I'm not thirsty."""
?ELS5: FSET? PRSO,DRINKBIT \?ELS9
FSET? DEEP-SUIT,WORNBIT \?ELS14
CALL TELL-IN-WAY
RSTACK
?ELS14: FSET? MASK,WORNBIT \FALSE
CALL TELL-IN-WAY,FALSE-VALUE
RSTACK
?ELS9: CALL TELL-YOU-CANT,STR?89
RSTACK
.FUNCT V-DRINK
PRINTI "I don't think "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR " would go down very well."
.FUNCT TELL-IN-WAY,HOOD?=1
PRINTI "The "
ZERO? HOOD? /?ELS5
PRINTI "hood"
JUMP ?CND3
?ELS5: CALL DPRINT,MASK
?CND3: PRINTR " would get in the way."
.FUNCT PRE-EAT
EQUAL? WINNER,PLAYER /?ELS5
PRINTR """I'm not hungry."""
?ELS5: ZERO? SOUPS-ON /?ELS9
FSET? PRSO,FOODBIT \?ELS9
FSET? DEEP-SUIT,WORNBIT \?ELS16
CALL TELL-IN-WAY
RSTACK
?ELS16: FSET? MASK,WORNBIT \FALSE
CALL TELL-IN-WAY,FALSE-VALUE
RSTACK
?ELS9: EQUAL? HERE,SHANTY \?ELS22
FSET? PRSO,FOODBIT \?ELS22
PRINTR "You'll have to buy it first."
?ELS22: FSET? PRSO,DRINKBIT \FALSE
PRINTR "Try drinking it."
.FUNCT V-EAT
FSET? PRSO,PERSON \?ELS5
PRINTR "Cannibalism isn't a good idea. Especially when you're more likely to be the dinner than the diner."
?ELS5: PRINTI "I don't think that "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR " would agree with you."
.FUNCT V-CURSES
ZERO? PRSO /?ELS5
FSET? PRSO,VICBIT \?ELS11
PRINTR "Insults of this nature won't help you."
?ELS11: PRINTI "And to think that "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR " never said anything bad about you..."
?ELS5: PRINTR "You really don't have to swear like a sailor."
.FUNCT V-LISTEN
FSET? PRSO,VICBIT \?ELS5
PRINTI "If "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR " says anything useful, I'll let you know."
?ELS5: CALL START-SENTENCE,PRSO
PRINTR " makes no sound."
.FUNCT V-FOLLOW,CN,CHR,COR,PCOR,L
SET 'L-PRSO,PRSO
SET 'L-PRSA,PRSA
EQUAL? WINNER,PLAYER /?ELS5
CALL TELL-FREE-WILL
RETURN 2
?ELS5: EQUAL? PRSO,PLAYER \?ELS9
PRINTR "It's not clear whom you're talking to."
?ELS9: FSET? PRSO,PERSON /?ELS13
EQUAL? PRSO,DELIVERY-BOY /?ELS13
PRINTR "That doesn't sound very exciting."
?ELS13: LOC PRSO >L
EQUAL? HERE,L \?ELS19
PRINTI "You're in the same place as "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "!"
?ELS19: GETP HERE,P?CORRIDOR >COR
ZERO? COR /?ELS25
GETP L,P?CORRIDOR >PCOR
ZERO? PCOR /?ELS25
BAND COR,PCOR
ZERO? STACK /?ELS25
CALL COR-DIR,HERE,L >PRSO
SET 'P-WALK-DIR,PRSO
CALL V-WALK
RSTACK
?ELS25: IN? PRSO,FERRY \?ELS29
CALL TELL-CANT-BOARD
RSTACK
?ELS29: PRINTI "You seem to have lost track of "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
.FUNCT TELL-FREE-WILL
PRINTR """I'll go where I want!"""
.FUNCT V-STAY
EQUAL? WINNER,PLAYER \?ELS5
PRINTR "I'm not going anywhere."
?ELS5: CALL TELL-FREE-WILL
RETURN 2
.FUNCT V-PRAY
PRINTR "If you pray enough, your prayers may be answered."
.FUNCT V-LEAP,Z,S
ZERO? PRSO /?ELS5
EQUAL? PRSO,INTDIR /?ELS5
CALL PERFORM,V?BOARD,PRSO
RTRUE
?ELS5: GETPT HERE,P?DOWN >Z
ZERO? Z /?ELS9
PTSIZE Z >S
EQUAL? S,2 /?THN15
EQUAL? S,4 \?ELS14
GETB Z,1
VALUE STACK
ZERO? STACK \?ELS14
?THN15: CALL JIGS-UP,STR?90
RSTACK
?ELS14: CALL V-SKIP
RSTACK
?ELS9: CALL V-SKIP
RSTACK
.FUNCT V-SKIP
LOC PLAYER
FSET? STACK,VEHBIT \?ELS5
PRINTR "That would be tough from your current position."
?ELS5: CALL PICK-ONE,WHEEEEE
PRINT STACK
CRLF
RTRUE
.FUNCT V-LEAVE
CALL DO-WALK,P?OUT
RSTACK
.FUNCT V-HELLO
ZERO? PRSO /?ELS5
CALL TELL-NO-RESPONSE
RSTACK
?ELS5: CALL PICK-ONE,HELLOS
PRINT STACK
CRLF
RTRUE
.FUNCT V-GOODBYE
CALL V-HELLO
RSTACK
.FUNCT TELL-NO-RESPONSE
CALL START-SENTENCE,PRSO
PRINTR " fails to respond."
.FUNCT PRE-READ
ZERO? LIT \?ELS5
PRINTR "It is impossible to read in the dark."
?ELS5: ZERO? PRSI /FALSE
PRINTI "How does one look through "
CALL APRINT,PRSI
PRINTR "?"
.FUNCT V-READ
FSET? PRSO,READBIT /?ELS5
PRINTI "How can I read "
CALL APRINT,PRSO
PRINTR "?"
?ELS5: FSET PRSO,TOUCHBIT
GETP PRSO,P?TEXT
PRINT STACK
CRLF
RTRUE
.FUNCT V-LOOK-UNDER
FSET? PRSO,VICBIT \?ELS5
PRINTR "His feet are on the floor."
?ELS5: EQUAL? PRSO,LIGHTHOUSE,DRINK-OBJECT,FOOD /?THN10
EQUAL? PRSO,OCEAN,GROUND,CLOSET \?ELS9
?THN10: CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
?ELS9: IN? PRSO,PLAYER \?ELS15
PRINTR "You have it."
?ELS15: CALL TELL-NOTHING,STR?100
GETP HERE,P?LINE
EQUAL? STACK,UNDERWATER-LINE-C \?ELS22
PRINTI "seaweed"
JUMP ?CND20
?ELS22: EQUAL? PRSO,FERRY,SALVAGER,TRAWLER /?THN27
EQUAL? PRSO,GLOBAL-FERRY \?ELS26
?THN27: PRINTI "water"
JUMP ?CND20
?ELS26: PRINTI "dust"
?CND20: PRINTR " there."
.FUNCT V-LOOK-BEHIND
CALL TELL-NOTHING,STR?101
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
.FUNCT TELL-NOTHING,STR,DONE?=0
PRINTI "There's nothing "
PRINT STR
ZERO? DONE? /FALSE
PRINTR "."
.FUNCT PRE-LOOK-IN
FSET? PRSO,SURFACEBIT \FALSE
PRINTR "It's solid."
.FUNCT PRE-LOOK-ON
FSET? PRSO,CONTBIT \FALSE
FSET? PRSO,SURFACEBIT /FALSE
CALL TELL-NOTHING,STR?102
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
.FUNCT V-LOOK-INSIDE,REACH?=0
FSET? PRSO,DOORBIT \?ELS5
PRINTI "The "
CALL DPRINT,PRSO
PRINTI " is "
FSET? PRSO,OPENBIT \?ELS10
PRINTI "open, but you can't tell what's beyond it"
JUMP ?CND8
?ELS10: PRINTI "closed"
?CND8: PRINTR "."
?ELS5: FSET? PRSO,CONTBIT \?ELS20
FSET? PRSO,VICBIT \?ELS25
CALL TELL-NOTHING,STR?103
ZERO? REACH? /?ELS28
PRINTI "felt"
JUMP ?CND26
?ELS28: PRINTI "seen"
?CND26: PRINTR "."
?ELS25: CALL SEE-INSIDE?,PRSO
ZERO? STACK /?ELS39
FIRST? PRSO \?ELS44
CALL PRINT-CONT,PRSO
ZERO? STACK \TRUE
?ELS44: FSET? PRSO,WORNBIT \?ELS48
PRINTR "You're wearing it."
?ELS48: FSET? PRSO,SURFACEBIT \?ELS52
IN? WINNER,PRSO \?ELS57
PRINTR "You're on it!"
?ELS57: CALL TELL-NOTHING,STR?104
CALL DPRINT,PRSO
PRINTR "."
?ELS52: PRINTI "The "
CALL DPRINT,PRSO
PRINTR " is empty."
?ELS39: CALL TELL-CLOSED,PRSO,FALSE-VALUE
RSTACK
?ELS20: PRINTR "I don't know how to do that."
.FUNCT SEE-INSIDE?,OBJ
FSET? OBJ,INVISIBLE /FALSE
FSET? OBJ,OPENBIT /TRUE
FSET? OBJ,TRANSBIT /TRUE
RFALSE
.FUNCT PRE-BURN
ZERO? PRSI \?ELS5
PRINTR "Huh?"
?ELS5: PRINTI "With "
CALL APRINT,PRSI
PRINTR "??!?"
.FUNCT V-BURN
CALL TELL-NO-NO
RSTACK
.FUNCT PRE-TURN
EQUAL? PRSO,NOT-HERE-OBJECT /FALSE
EQUAL? PRSO,PSEUDO-OBJECT \?ELS7
EQUAL? HERE,MM-WHEELHOUSE,NW-WHEELHOUSE /FALSE
?ELS7: FSET? PRSO,TURNBIT /?ELS11
CALL TELL-WHY-BOTHER
RSTACK
?ELS11: ZERO? PRSI /FALSE
EQUAL? PRSI,INTDIR \FALSE
CALL TELL-YOU-CANT,STR?105
RSTACK
.FUNCT V-TURN
CALL TELL-NO-EFFECT
RSTACK
.FUNCT TELL-NO-EFFECT
PRINTR "This has no effect."
.FUNCT V-PUMP
PRINTR "I really don't see how."
.FUNCT V-INFLATE
CALL TELL-HOW-THAT,STR?106
RSTACK
.FUNCT V-DEFLATE
PRINTR "Come on, now!"
.FUNCT V-LOCK
PRINTR "It doesn't seem to work."
.FUNCT V-PICK
CALL TELL-YOU-CANT,STR?107
RSTACK
.FUNCT PRE-UNLOCK
EQUAL? PRSO,SAFE /FALSE
ZERO? PRSI \FALSE
IN? KEY,PLAYER \FALSE
SET 'PRSI,KEY
PRINTI "(with the room key)"
CRLF
RFALSE
.FUNCT V-UNLOCK
FSET? PRSO,DOORBIT \?ELS5
PRINTR "It's not locked."
?ELS5: CALL V-LOCK
RSTACK
.FUNCT V-CUT
ZERO? PRSI \?ELS5
PRINTR "Huh?"
?ELS5: FSET? PRSI,WEAPONBIT /?ELS9
PRINTI "Not with "
CALL APRINT,PRSI
PRINTR "!"
?ELS9: FSET? PRSO,VICBIT /?THN14
EQUAL? PRSO,SQUID \?ELS13
?THN14: CALL IKILL,STR?108
RSTACK
?ELS13: PRINTI "Strange concept, cutting "
CALL APRINT,PRSO
PRINTR "..."
.FUNCT V-KILL
CALL IKILL,STR?109
RSTACK
.FUNCT IKILL,STR
ZERO? PRSO \?ELS5
CALL TELL-NOTHING,STR?110
PRINT STR
PRINTR "."
?ELS5: EQUAL? PRSO,SQUID \?ELS9
CALL JIGS-UP,STR?111
RSTACK
?ELS9: FSET? PRSO,VICBIT /?ELS11
PRINTI "I've known strange people, but fighting "
CALL APRINT,PRSO
PRINTR "?"
?ELS11: ZERO? PRSI /?THN16
EQUAL? PRSI,GLOBAL-SELF,ME \?ELS15
?THN16: PRINTI "Trying to "
PRINT STR
PRINTI " "
CALL APRINT,PRSO
PRINTR " with your bare hands is suicidal."
?ELS15: IN? PRSI,WINNER /?ELS21
PRINTI "You aren't even holding "
CALL THE?,PRSI
CALL DPRINT,PRSI
PRINTR "."
?ELS21: FSET? PRSI,WEAPONBIT /?ELS27
PRINTI "Trying to "
PRINT STR
PRINTI " "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTI " with "
CALL APRINT,PRSI
PRINTR " is suicidal."
?ELS27: CALL TELL-NOT-SMART
RSTACK
.FUNCT V-ATTACK
CALL IKILL,STR?112
RSTACK
.FUNCT V-SWING
CALL HELD?,PRSO
ZERO? STACK \?ELS5
CALL TELL-YOURE-NOT,STR?113
RSTACK
?ELS5: PRINTR "Whoosh!"
.FUNCT V-KICK
FSET? PRSO,PERSON \?ELS5
CALL TELL-NOT-SMART
RSTACK
?ELS5: CALL HACK-HACK,STR?114
RSTACK
.FUNCT TELL-NOT-SMART
PRINTR "That wouldn't be too smart."
.FUNCT V-WAVE
CALL HACK-HACK,STR?115
RSTACK
.FUNCT V-WAVE-AT
ZERO? PRSO /?ELS5
FSET? PRSO,VICBIT \?ELS5
CALL START-SENTENCE,PRSO
PRINTR " acknowledges your greeting."
?ELS5: CALL TELL-NO-RESPONSE
RSTACK
.FUNCT V-LOWER
CALL HACK-HACK,STR?116
RSTACK
.FUNCT V-RUB
FSET? PRSO,PERSON \?ELS5
CALL TELL-HANDS-OFF
RSTACK
?ELS5: CALL HACK-HACK,STR?117
RSTACK
.FUNCT TELL-HANDS-OFF
PRINTR """Get your hands off me!"""
.FUNCT V-PUSH
FSET? PRSO,PERSON \?ELS5
CALL TELL-HANDS-OFF
RSTACK
?ELS5: IN? WINNER,PRSO \?ELS7
CALL TELL-CONTORT
RSTACK
?ELS7: FSET? PRSO,PUSHBIT \?ELS9
CALL TELL-MOVES-BIT
RSTACK
?ELS9: CALL HACK-HACK,STR?118
RSTACK
.FUNCT TELL-MOVES-BIT
CALL START-SENTENCE,PRSO
PRINTR " moves a bit."
.FUNCT V-PUSH-OFF
FSET? PRSI,SURFACEBIT \?ELS5
IN? PRSO,PRSI \?ELS5
LOC PRSI
MOVE PRSO,STACK
CALL TELL-NOW,PRSO,STR?119
RSTACK
?ELS5: PRINTR "A ludicrous idea at best."
.FUNCT V-PUSH-TO,FALLEN=0,OH,F
IN? WINNER,PRSO \?ELS5
CALL TELL-CONTORT
RSTACK
?ELS5: FSET? PRSO,PUSHBIT /?ELS7
FSET? PRSO,TAKEBIT \?ELS12
PRINTR "There's no need for that. Why not just pick it up and then carry it there?"
?ELS12: EQUAL? PRSO,ME \?ELS16
PRINTR "Do it yourself."
?ELS16: FSET? PRSO,VICBIT \?ELS20
CALL TELL-HANDS-OFF
RSTACK
?ELS20: PRINTI "You push and strain, but can't budge "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
?ELS7: EQUAL? PRSI,INTDIR /?ELS28
CALL TELL-YOU-CANT,STR?120
RTRUE
?ELS28: SET 'OH,HERE
ZERO? OH /FALSE
CALL DO-WALK,P-WALK-DIR
EQUAL? STACK,M-FATAL /FALSE
?PRG33: FIRST? PRSO >F \?REP34
MOVE F,OH
SET 'FALLEN,TRUE-VALUE
JUMP ?PRG33
?REP34: MOVE PRSO,HERE
FSET PRSO,TOUCHBIT
PRINTI "You bring the "
CALL DPRINT,PRSO
PRINTI " along with you."
ZERO? FALLEN /?CND42
CALL TELL-ALL-FALL
?CND42: CRLF
RTRUE
.FUNCT TELL-CONTORT
PRINTR "That would require some impressive contortions."
.FUNCT TELL-ALL-FALL
PRINTI " Everything that was on it falls off."
RTRUE
.FUNCT PRE-CHIP
GET P-VTBL,0
EQUAL? STACK,W?CHIP \?ELS3
IN? SPEAR-CARRIER,HERE \?ELS3
EQUAL? PRSO,INTNUM \?ELS3
ZERO? P-DOLLAR-FLAG /?ELS3
CALL PERFORM,V?GIVE,PRSO,SPEAR-CARRIER
RTRUE
?ELS3: CALL PERFORM,V?MUNG,PRSO
RTRUE
.FUNCT V-CHIP
PRINTR "Bug."
.FUNCT PRE-MUNG
EQUAL? PRSO,WINNER,ME,NOT-HERE-OBJECT /FALSE
EQUAL? PRSO,MIRROR,GLOBAL-BANK,ADVENTURER /FALSE
ZERO? PRSI /?ELS7
FSET? PRSI,WEAPONBIT /FALSE
?ELS7: FSET? PRSO,VICBIT /?CND1
EQUAL? PRSO,SQUID /?CND1
CALL HACK-HACK,STR?121
RTRUE
?CND1: PRINTI "Trying to destroy "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTI " with "
ZERO? PRSI \?ELS20
PRINTI "your bare hands is suicidal"
JUMP ?CND18
?ELS20: CALL APRINT,PRSI
PRINTI " is insane"
?CND18: PRINTR "."
.FUNCT V-MUNG
FSET? PRSO,VICBIT /?THN6
EQUAL? PRSO,SQUID \?ELS5
?THN6: CALL IKILL,STR?112
RSTACK
?ELS5: PRINTR "Nothing much happens."
.FUNCT HACK-HACK,STR
IN? PRSO,GLOBAL-OBJECTS \?ELS5
EQUAL? PRSA,V?LOWER,V?WAVE \?ELS5
PRINTI "Unfortunately, "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR " isn't here."
?ELS5: PRINT STR
PRINTI " "
CALL THE?,PRSO
CALL DPRINT,PRSO
CALL PICK-ONE,HO-HUM
PRINT STACK
CRLF
RTRUE
.FUNCT V-KNOCK
FSET? PRSO,DOORBIT \?ELS5
CALL TELL-NO-ANSWER
RSTACK
?ELS5: PRINTI "Why knock on "
CALL APRINT,PRSO
PRINTR "?"
.FUNCT V-CHOMP
PRINTR "I don't know how to do that. I win in all cases!"
.FUNCT V-WIN
PRINTR "Naturally!"
.FUNCT V-YELL
ZERO? PRSO /?ELS5
PRINTR "You could be more polite and lower your voice."
?ELS5: PRINTR "Aarrrrrgggggggghhhhhhhhhhh!"
.FUNCT V-PLUG
CALL TELL-NO-EFFECT
RSTACK
.FUNCT V-LATITUDE,LAT=1,STR,NEW=0
ZERO? LAT /?ELS3
SET 'STR,STR?126
JUMP ?CND1
?ELS3: SET 'STR,STR?127
?CND1: EQUAL? WINNER,PLAYER \?ELS11
PRINTI "Why don't you tell someone who cares?"
CRLF
RETURN 2
?ELS11: LESS? MEETINGS-COMPLETED,2 \?ELS17
CALL START-SENTENCE,WINNER
PRINTI " looks bewildered. ""What does that have to do with anything?"" he asks."
CRLF
RETURN 2
?ELS17: EQUAL? WINNER,JOHNNY /?ELS23
CALL START-SENTENCE,WINNER
PRINTI " says, ""That's nice. Why don't you let the captain know?"""
CRLF
RETURN 2
?ELS23: EQUAL? PRSO,INTNUM /?ELS29
PRINTI "Johnny looks at you strangely. ""What kind of a "
PRINT STR
PRINTR " is that?"""
?ELS29: GRTR? P-NUMBER,59 \?ELS33
PRINTR """There are 60 minutes in a degree."""
?ELS33: ZERO? LAT /?ELS40
ZERO? LATITUDE-SET /?CND42
EQUAL? LATITUDE-SET,P-NUMBER \?ELS48
SET 'NEW,M-FATAL
JUMP ?CND42
?ELS48: SET 'NEW,TRUE-VALUE
?CND42: SET 'LATITUDE-SET,P-NUMBER
JUMP ?CND38
?ELS40: ZERO? LONGITUDE-SET /?CND53
EQUAL? LONGITUDE-SET,P-NUMBER \?ELS59
SET 'NEW,M-FATAL
JUMP ?CND53
?ELS59: SET 'NEW,TRUE-VALUE
?CND53: SET 'LONGITUDE-SET,P-NUMBER
?CND38: EQUAL? NEW,M-FATAL \?ELS66
CALL TELL-YOU-ALREADY,STR?128,TRUE-VALUE
RSTACK
?ELS66: ZERO? NEW /?ELS68
PRINTI """Now the "
PRINT STR
PRINTI " is "
PRINTN P-NUMBER
PRINTR ", huh?"""
?ELS68: PRINTI """Okay. The "
PRINT STR
PRINTI " is "
PRINTN P-NUMBER
PRINTR "."""
.FUNCT V-LONGITUDE
CALL V-LATITUDE,FALSE-VALUE
RSTACK
.FUNCT V-EMPTY,X
FSET? PRSO,CONTBIT /?ELS5
CALL TELL-YOU-CANT,STR?129
RSTACK
?ELS5: FSET? PRSO,OPENBIT /?ELS7
CALL TELL-YOU-CANT,STR?130
RSTACK
?ELS7: FIRST? PRSO \?ELS9
?PRG10: FIRST? PRSO >X \?REP11
MOVE X,HERE
JUMP ?PRG10
?REP11: CALL TELL-NOW,PRSO,STR?131
RSTACK
?ELS9: CALL TELL-NOTHING,STR?132
CALL DPRINT,PRSO
PRINTR "."
.FUNCT V-SHAKE,X
FSET? PRSO,VICBIT \?ELS5
CALL TELL-NO-EFFECT
RSTACK
?ELS5: FSET? PRSO,TAKEBIT /?ELS7
CALL TELL-YOU-CANT,STR?133
RSTACK
?ELS7: FSET? PRSO,OPENBIT /?ELS9
FIRST? PRSO \?ELS9
PRINTI "It sounds as if there is something inside the "
CALL DPRINT,PRSO
PRINTR "."
?ELS9: FSET? PRSO,OPENBIT \?ELS15
FIRST? PRSO \?ELS15
?PRG18: FIRST? PRSO >X \?REP19
MOVE X,HERE
JUMP ?PRG18
?REP19: PRINTI "All of the objects spill onto the "
CALL SPILL-WHERE?
RSTACK
?ELS15: CALL TELL-NOTHING,STR?132
CALL DPRINT,PRSO
PRINTR "."
.FUNCT SPILL-WHERE?
IN? WINNER,BED \?ELS3
PRINTI "floor by your bed."
JUMP ?CND1
?ELS3: GETP HERE,P?LINE
GRTR? STACK,BACK-ALLEY-LINE-C \?ELS7
PRINTI "deck by your feet."
JUMP ?CND1
?ELS7: PRINTI "floor."
?CND1: CRLF
RTRUE
.FUNCT V-DIAGNOSE
PRINTI "You are "
GRTR? HOW-HUNGRY,3 \?ELS5
PRINTI "extremely"
JUMP ?CND3
?ELS5: ZERO? HOW-HUNGRY \?ELS9
PRINTI "not"
JUMP ?CND3
?ELS9: EQUAL? HOW-HUNGRY,1 \?ELS13
PRINTI "a bit"
JUMP ?CND3
?ELS13: EQUAL? HOW-HUNGRY,2 \?ELS17
PRINTI "pretty"
JUMP ?CND3
?ELS17: EQUAL? HOW-HUNGRY,3 \?CND3
PRINTI "very"
?CND3: PRINTI " hungry, "
ZERO? HOW-THIRSTY \?ELS28
PRINTI "not thirsty"
JUMP ?CND26
?ELS28: EQUAL? HOW-THIRSTY,1 \?ELS32
PRINTI "a little thirsty"
JUMP ?CND26
?ELS32: EQUAL? HOW-THIRSTY,2 \?ELS36
PRINTI "fairly thirsty"
JUMP ?CND26
?ELS36: EQUAL? HOW-THIRSTY,3 \?ELS40
PRINTI "very thirsty"
JUMP ?CND26
?ELS40: GRTR? HOW-THIRSTY,3 \?CND26
PRINTI "utterly parched"
?CND26: PRINTI ", and "
ZERO? HOW-TIRED \?ELS51
PRINTI "half-awake"
JUMP ?CND49
?ELS51: LESS? HOW-TIRED,3 \?ELS55
PRINTI "wide-awake"
JUMP ?CND49
?ELS55: EQUAL? HOW-TIRED,3 \?ELS59
PRINTI "a bit drowsy"
JUMP ?CND49
?ELS59: EQUAL? HOW-TIRED,4 \?ELS63
PRINTI "fairly tired"
JUMP ?CND49
?ELS63: EQUAL? HOW-TIRED,5 \?ELS67
PRINTI "very sleepy"
JUMP ?CND49
?ELS67: EQUAL? HOW-TIRED,6 \?CND49
PRINTI "dead on your feet"
?CND49: PRINTR "."
.FUNCT PRE-DIG
EQUAL? PRSO,NOT-HERE-OBJECT /FALSE
ZERO? PRSI \?ELS7
PRINTR "Huh?"
?ELS7: FSET? PRSI,TOOLBIT /FALSE
PRINTI "Digging with "
CALL THE?,PRSI
CALL DPRINT,PRSI
PRINTR " is very silly."
.FUNCT V-AIM
PRINTR "That would be pointless."
.FUNCT V-DIG
CALL TELL-YOU-CANT,STR?134
RSTACK
.FUNCT PRE-SMELL
FSET? MASK,WORNBIT /?THN6
FSET? DEEP-SUIT,WORNBIT \FALSE
?THN6: CALL TELL-YOU-CANT,STR?135
RSTACK
.FUNCT V-SMELL
FSET? PRSO,VICBIT \?ELS5
PRINTR "Nothing a good deodorant couldn't fix."
?ELS5: PRINTI "It smells just like "
CALL APRINT,PRSO
PRINTR "."
.FUNCT GLOBAL-IN?,OBJ1,OBJ2,Z
GETPT OBJ2,P?GLOBAL >Z
ZERO? Z /FALSE
PTSIZE Z
SUB STACK,1
CALL ZMEMQB,OBJ1,Z,STACK
RSTACK
.FUNCT V-SWIM
GETP HERE,P?LINE
EQUAL? STACK,UNDERWATER-LINE-C \?ELS5
EQUAL? PRSO,INTDIR \?ELS10
CALL DO-WALK,P-WALK-DIR
RSTACK
?ELS10: CALL TELL-SHD-DIR
RSTACK
?ELS5: PRINTR "I think you're all wet."
.FUNCT V-DIVE
ZERO? PRSO /?ELS5
EQUAL? PRSO,OCEAN /?ELS5
PRINTR "This isn't a circus!"
?ELS5: GETP HERE,P?LINE
EQUAL? STACK,UNDERWATER-LINE-C \?ELS11
CALL DO-WALK,P?DOWN
RTRUE
?ELS11: LOC PLAYER
CALL GLOBAL-IN?,OCEAN,STACK
ZERO? STACK /?ELS13
EQUAL? HERE,MM-WHEELHOUSE,NW-WHEELHOUSE /?ELS13
GETP HERE,P?LINE
LESS? STACK,TRAWLER-LINE-C \?ELS20
EQUAL? HERE,FERRY-LANDING,WHARF /?ELS20
CALL PERFORM,V?BOARD,OCEAN
RTRUE
?ELS20: FSET? DEEP-SUIT,WORNBIT /?ELS24
FSET? WET-SUIT,WORNBIT \?THN27
IN? AIR-TANK,PLAYER \?THN27
FSET? MASK,WORNBIT \?THN27
FSET? FLIPPERS,WORNBIT /?ELS24
?THN27: CALL JIGS-UP,STR?136
RSTACK
?ELS24: FSET? DEEP-SUIT,WORNBIT \?ELS30
IN? AIR-HOSE,DEEP-SUIT \?THN33
FSET? MM-COMPRESSOR,ONBIT /?ELS30
?THN33: CALL JIGS-UP,STR?137
RSTACK
?ELS30: ZERO? AT-SEA \?ELS36
CALL JIGS-UP,STR?138
RSTACK
?ELS36: EQUAL? OCEAN-BOTTOM,50 \?ELS41
SET 'HERE,OCEAN-FLOOR
MOVE PLAYER,OCEAN-FLOOR
JUMP ?CND39
?ELS41: MOVE PLAYER,UNDERWATER
SET 'HERE,UNDERWATER
CALL UNDERWATER-F,M-ENTER
?CND39: FCLEAR OCEAN,VEHBIT
CALL INT,I-ENDIT
PUT STACK,0,0
SET 'DEPTH,50
IN? PASSBOOK,PLAYER \?CND44
FSET PASSBOOK,RMUNGBIT
?CND44: IN? DIVING-BOOK,PLAYER \?CND47
FSET DIVING-BOOK,RMUNGBIT
?CND47: IN? NOTE,PLAYER \?CND50
FSET NOTE,RMUNGBIT
?CND50: IN? BOOK,PLAYER \?CND53
FSET BOOK,RMUNGBIT
?CND53: IN? ENVELOPE,PLAYER \?CND56
FSET ENVELOPE,RMUNGBIT
?CND56: IN? BATTERY,PLAYER /?THN62
IN? BATTERY,DRILL \?CND59
FSET? DRILL,OPENBIT \?CND59
?THN62: FSET BATTERY,RMUNGBIT
SET DRILL-POWERED,FALSE-VALUE
?CND59: IN? DRY-CELL,PLAYER /?THN69
IN? DRY-CELL,DETECTOR-COMPARTMENT \?CND66
FSET? DETECTOR-COMPARTMENT,OPENBIT \?CND66
?THN69: FSET DRY-CELL,RMUNGBIT
SET DETECTOR-POWERED,FALSE-VALUE
?CND66: IN? AIR-TANK,PLAYER \?ELS75
FSET? DEEP-SUIT,WORNBIT /?ELS75
CALL QUEUE,I-AIR-SUPPLY,-1
PUT STACK,0,1
JUMP ?CND73
?ELS75: CALL INT,I-MM-COMPRESSOR
GET STACK,C-TICK
GRTR? STACK,0 \?ELS79
CALL INT,I-MM-COMPRESSOR
PUT STACK,0,1
JUMP ?CND73
?ELS79: CALL INT,I-LAST-GASP
PUT STACK,0,1
?CND73: CALL V-LOOK
RSTACK
?ELS13: PRINTR "Consulting your years of experience, you come to the conclusion that the lack of water here would make this a lousy place to try diving."
.FUNCT V-UNTIE
FSET? PRSO,PERSON \?ELS5
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
?ELS5: PRINTR "This cannot be tied, so it cannot be untied!"
.FUNCT PRE-TIE
EQUAL? PRSO,AIR-HOSE /FALSE
EQUAL? PRSO,ROPE,SAFETY-LINE /?ELS7
EQUAL? PRSI,ROPE,SAFETY-LINE /?ELS7
PRINTR "Even if I knew how to do that, I wouldn't."
?ELS7: EQUAL? PRSI,WINNER /?THN14
EQUAL? PRSO,WINNER \FALSE
?THN14: CALL TELL-YOU-CANT,STR?139
RSTACK
.FUNCT V-TIE
PRINTR "Don't bother."
.FUNCT V-TIE-UP
PRINTR "You could certainly never tie it with that!"
.FUNCT V-MELT
PRINTI "I'm not sure that "
CALL APRINT,PRSO
PRINTR " can be melted."
.FUNCT V-MUMBLE
PRINTR "You'll have to speak up if you expect me to hear you!"
.FUNCT V-ALARM
EQUAL? PRSO,ROOMS \?ELS9
EQUAL? WINNER,PLAYER \?THN6
?ELS9: FSET? PRSO,VICBIT \?ELS5
EQUAL? PRSO,ME /?ELS5
?THN6: PRINTR "He's wide awake, or haven't you noticed?"
?ELS5: EQUAL? PRSO,ROOMS \?ELS15
PRINTR "You're already awake."
?ELS15: CALL START-SENTENCE,PRSO
PRINTR " isn't sleeping."
.FUNCT V-CLIMB-ON
FSET? PRSO,CLIMBBIT /?THN6
FSET? PRSO,VEHBIT \?ELS5
?THN6: CALL PERFORM,V?BOARD,PRSO
RTRUE
?ELS5: CALL TELL-YOU-CANT,STR?140,FALSE-VALUE
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
.FUNCT V-CLIMB-FOO
EQUAL? PRSO,ROOMS \?ELS5
CALL V-CLIMB-UP
RSTACK
?ELS5: FSET? PRSO,CLIMBBIT /?ELS7
FSET? PRSO,VEHBIT /?ELS7
CALL TELL-YOU-CANT,STR?141,FALSE-VALUE
CALL APRINT,PRSO
PRINTI "!"
CRLF
RETURN 2
?ELS7: CALL V-CLIMB-UP,P?UP,TRUE-VALUE
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 TELL-NO-GO,TRUE-VALUE
RSTACK
?ELS7: ZERO? OBJ /?ELS9
GETPT PRSO,P?SYNONYM >X
PTSIZE X
CALL ZMEMQ,W?WALLS,X,STACK
ZERO? STACK /?ELS9
PRINTR "Climbing the walls is to no avail."
?ELS9: PRINTR "Bizarre!"
.FUNCT V-CLIMB-DOWN
CALL V-CLIMB-UP,P?DOWN
RSTACK
.FUNCT V-SEND
FSET? PRSO,VICBIT \?ELS5
PRINTI "I doubt that "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR " is at your beck and call."
?ELS5: PRINTR "That doesn't make sends."
.FUNCT V-WIND
PRINTI "You cannot wind up "
CALL APRINT,PRSO
PRINTR "."
.FUNCT V-COUNT
PRINTR "I can't deal with those numbers."
.FUNCT PRE-BRACE
CALL PERFORM,V?PUT-UNDER,PRSI,PRSO
RTRUE
.FUNCT V-BRACE
PRINTR "Bug."
.FUNCT V-PUT-UNDER
FSET? PRSI,DOORBIT \?ELS5
GETP PRSO,P?SIZE
LESS? STACK,5 \?ELS5
FSET? PRSI,OPENBIT \?ELS12
CALL TELL-WHY-BOTHER
RSTACK
?ELS12: CALL IDROP
ZERO? STACK /FALSE
CALL OTHER-SIDE,PRSI,TRUE-VALUE
MOVE PRSO,STACK
PRINTR "Done."
?ELS5: CALL TELL-NO-NO
RSTACK
.FUNCT V-PUSH-UNDER
FSET? PRSO,TAKEBIT /?THN6
FSET? PRSO,PUSHBIT \?ELS5
?THN6: CALL PERFORM,V?PUT-UNDER,PRSO,PRSI
RTRUE
?ELS5: CALL TELL-NO-NO
RSTACK
.FUNCT V-PLAY
FSET? PRSO,VICBIT \?ELS5
PRINTI "You are so engrossed in the role of "
CALL THE?,PRSO
CALL DPRINT,PRSO
CALL JIGS-UP,STR?142
RSTACK
?ELS5: PRINTR "How peculiar!"
.FUNCT V-MAKE
CALL TELL-NO-NO
RSTACK
.FUNCT V-ENTER
EQUAL? HERE,WINDING-ROAD-1 \?ELS5
CALL PERFORM,V?THROUGH,LIGHTHOUSE
RTRUE
?ELS5: CALL DO-WALK,P?IN
RSTACK
.FUNCT V-EXIT
CALL DO-WALK,P?OUT
RSTACK
.FUNCT V-CROSS
CALL TELL-YOU-CANT,STR?143
RSTACK
.FUNCT V-SEARCH
FSET? PRSO,PERSON \?ELS5
CALL START-SENTENCE,PRSO
PRINTR " glares at you. ""Get away from me!"" he growls."
?ELS5: FSET? PRSO,CONTBIT \?ELS9
CALL PERFORM,V?LOOK-INSIDE,PRSO
RTRUE
?ELS9: PRINTR "You find nothing unusual."
.FUNCT V-FIND,L
LOC PRSO >L
EQUAL? WINNER,PLAYER /?ELS5
PRINTI """Find "
FSET? PRSO,VICBIT \?ELS10
PRINTI "him "
JUMP ?CND8
?ELS10: PRINTI "it "
?CND8: CALL DPRINT,GLOBAL-SELF
PRINTR "."""
?ELS5: EQUAL? L,GLOBAL-OBJECTS \?ELS20
PRINTI "Why don't you try finding it "
CALL DPRINT,GLOBAL-SELF
PRINTR "?"
?ELS20: IN? PRSO,WINNER \?ELS24
PRINTR "You have it."
?ELS24: IN? PRSO,HERE /?THN29
EQUAL? PRSO,PSEUDO-OBJECT \?ELS28
?THN29: FSET? PRSO,VICBIT \?ELS33
PRINTI "He's"
JUMP ?CND31
?ELS33: PRINTI "It's"
?CND31: PRINTR " right here."
?ELS28: IN? L,HERE /?THN44
CALL GLOBAL-IN?,PRSO,HERE
ZERO? STACK /?ELS43
?THN44: FSET? L,PERSON \?ELS50
PRINTI "You notice that "
CALL DPRINT,L
PRINTR " has it."
?ELS50: FSET? L,CONTBIT \?ELS54
PRINTI "It's "
CALL VEHPREP,L
PRINT STACK
PRINTI " the "
CALL DPRINT,L
PRINTR "."
?ELS54: EQUAL? L,FERRY \?ELS58
PRINTR "He's on the ferry."
?ELS58: PRINTR "It's around here somewhere."
?ELS43: PRINTI "Find "
FSET? PRSO,VICBIT \?ELS71
PRINTI "him"
JUMP ?CND69
?ELS71: PRINTI "it"
?CND69: PRINTI " "
CALL DPRINT,GLOBAL-SELF
PRINTR "."
.FUNCT PRE-TELL
ZERO? PRSI /?ELS5
EQUAL? PRSO,ME,PLAYER \?ELS5
EQUAL? WINNER,PLAYER /?ELS10
SET 'PRSA,V?ASK-ABOUT
CALL PERFORM,V?ASK-ABOUT,WINNER,PRSI
RTRUE
?ELS10: SET 'PRSA,V?ASK-CONTEXT-ABOUT
CALL PERFORM,V?ASK-CONTEXT-ABOUT,PRSI
RTRUE
?ELS5: ZERO? PRSI \FALSE
FSET? PRSO,VICBIT /FALSE
CALL TELL-NO-TELL
RSTACK
.FUNCT V-TELL
ZERO? PRSI /?ELS5
FSET? PRSO,PERSON \?ELS11
CALL START-SENTENCE,PRSO
PRINTR " seems less than impressed with this information."
?ELS11: FSET? PRSO,VICBIT /?THN16
EQUAL? PRSO,SQUID \?ELS15
?THN16: PRINTI "The "
CALL DPRINT,PRSO
PRINTR " ignores what you have to say."
?ELS15: CALL TELL-NO-RESPONSE
RSTACK
?ELS5: EQUAL? WINNER,PLAYER \?ELS23
EQUAL? PRSO,ME,WINNER \?ELS23
PRINTI "Talking to "
CALL DPRINT,GLOBAL-SELF
PRINTI " is diverting, but unnecessary."
CRLF
RETURN 2
?ELS23: EQUAL? PRSO,PLAYER,ME \?ELS31
PRINTI """What in the world are you trying to say?"""
CRLF
RETURN 2
?ELS31: FSET? PRSO,VICBIT \?ELS37
CALL META-LOC,PRSO
EQUAL? STACK,HERE /?ELS40
CALL GLOBAL-NOT-HERE-PRINT,PRSO
RETURN 2
?ELS40: EQUAL? WINNER,PLAYER /?CND38
ZERO? P-CONT \?CND38
PRINTI """I'll talk to whoever I want."""
CRLF
RETURN 2
?CND38: SET 'WINNER,PRSO
CALL META-LOC,WINNER >HERE
SET 'QCONTEXT,WINNER
SET 'QCONTEXT-ROOM,HERE
ZERO? P-CONT \FALSE
CALL START-SENTENCE,PRSO
PRINTI " turns and looks at you as though he thought you were about to say something."
CRLF
RETURN 2
?ELS37: CALL TELL-NO-TELL
RSTACK
.FUNCT TELL-NO-TELL
CALL TELL-YOU-CANT,STR?144,FALSE-VALUE
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTI "!"
CRLF
SET 'QUOTE-FLAG,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
RETURN 2
.FUNCT V-KISS
PRINTR "I'd sooner kiss a parrot."
.FUNCT V-RAPE
PRINTR "An ugly idea from an ugly person."
.FUNCT FIND-IN,WHERE,WHAT,W,R=0
FIRST? WHERE >W /?KLU19
?KLU19: ZERO? W /FALSE
?PRG4: FSET? W,WHAT \?ELS8
ZERO? R /?ELS11
RETURN 2
?ELS11: SET 'R,W
JUMP ?PRG4
?ELS8: NEXT? W >W /?PRG4
RETURN R
.FUNCT V-SAY,V
CALL FIND-IN,HERE,VICBIT >V
ZERO? V /?ELS5
PRINTI "You must address "
EQUAL? V,M-FATAL \?ELS10
PRINTI "someone"
JUMP ?CND8
?ELS10: CALL THE?,V
CALL DPRINT,V
?CND8: PRINTI " directly."
CRLF
RETURN 2
?ELS5: GET P-LEXV,P-CONT
EQUAL? STACK,W?HELLO \?ELS22
SET 'QUOTE-FLAG,FALSE-VALUE
RTRUE
?ELS22: SET 'QUOTE-FLAG,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
PRINTI "Talking to "
CALL DPRINT,GLOBAL-SELF
PRINTR " is said to be a sign of impending mental collapse."
.FUNCT V-SPIN
CALL TELL-YOU-CANT,STR?145
RSTACK
.FUNCT V-THROUGH,M
FSET? PRSO,DOORBIT \?ELS5
CALL OTHER-SIDE,PRSO
CALL DO-WALK,STACK
RTRUE
?ELS5: FSET? PRSO,VEHBIT /?THN8
EQUAL? HERE,MCGINTY-HQ \?ELS7
EQUAL? PRSO,PSEUDO-OBJECT \?ELS7
?THN8: CALL PERFORM,V?BOARD,PRSO
RTRUE
?ELS7: IN? PRSO,GLOBAL-OBJECTS /?ELS13
CALL META-LOC,PRSO
EQUAL? STACK,HERE /?ELS13
CALL GLOBAL-IN?,PRSO,HERE
ZERO? STACK \?ELS13
CALL GLOBAL-NOT-HERE-PRINT,PRSO
RSTACK
?ELS13: FSET? PRSO,TAKEBIT /?ELS17
PRINTI "You hit your head against "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR " as you attempt this feat."
?ELS17: IN? PRSO,WINNER \?ELS23
CALL TELL-CONTORT
RSTACK
?ELS23: CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
.FUNCT V-STEP
FSET? PRSO,VEHBIT \?ELS5
CALL PERFORM,V?BOARD,PRSO
RTRUE
?ELS5: EQUAL? PRSO,GROUND \?ELS7
PRINTR "Fred Astaire you're not."
?ELS7: PRINTR "That sounds pretty useless."
.FUNCT V-WEAR
FSET? PRSO,WEARBIT /?ELS5
CALL TELL-YOU-CANT,STR?154,FALSE-VALUE
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
?ELS5: FSET? PRSO,WORNBIT \?ELS9
PRINTR "You are already wearing it."
?ELS9: IN? PRSO,WINNER /?THN14
CALL ITAKE
ZERO? STACK /FALSE
?THN14: FSET PRSO,WORNBIT
PRINTI "You are now wearing "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
.FUNCT UNWEAR
FSET? PRSO,WORNBIT \?ELS5
FCLEAR PRSO,WORNBIT
PRINTI "You are now holding "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR "."
?ELS5: CALL TELL-YOURE-NOT,STR?155
RSTACK
.FUNCT V-WITHDRAW
EQUAL? PRSO,INTNUM /?ELS5
CALL PERFORM,V?TAKE,PRSO
RSTACK
?ELS5: CALL TELL-YOU-CANT,STR?156
RSTACK
.FUNCT V-DEPOSIT
EQUAL? PRSO,INTNUM /?ELS5
CALL PERFORM,V?PUT,PRSO,PRSI
RSTACK
?ELS5: CALL TELL-YOU-CANT,STR?157
RSTACK
.FUNCT V-THROW-OFF
CALL TELL-YOU-CANT,STR?158
RSTACK
.FUNCT V-$VERIFY
PRINTI "Verifying game..."
CRLF
VERIFY \?ELS7
PRINTR "Yup. Game correct."
?ELS7: PRINTR "** UH OH! Game File Failure. **"
.FUNCT V-STAND
ZERO? PRSO /?CND1
EQUAL? PRSO,GLOBAL-BANK /?THN8
FSET? PRSO,VICBIT \?ELS7
?THN8: CALL PERFORM,V?ROB,PRSO
RTRUE
?ELS7: FSET? PRSO,VEHBIT \?ELS11
CALL PERFORM,V?BOARD,PRSO
RTRUE
?ELS11: EQUAL? PRSO,ROOMS /?CND1
CALL HACK-HACK,STR?116
RTRUE
?CND1: LOC WINNER
FSET? STACK,VEHBIT \?ELS18
LOC WINNER
CALL PERFORM,V?DISEMBARK,STACK
RTRUE
?ELS18: PRINTR "You are already standing, I think."
.FUNCT V-HIDE
PRINTR "That's not a good hiding place."
.FUNCT V-HIDE-UNDER
CALL V-HIDE
RSTACK
.FUNCT DO-WALK,DIR
SET 'P-WALK-DIR,DIR
CALL PERFORM,V?WALK,DIR
EQUAL? STACK,M-FATAL \TRUE
RETURN 2
.FUNCT V-WALK-TO
EQUAL? PRSO,INTDIR \?ELS5
CALL DO-WALK,P-WALK-DIR
RSTACK
?ELS5: IN? PRSO,HERE /?THN8
CALL GLOBAL-IN?,PRSO,HERE
ZERO? STACK /?ELS7
?THN8: FSET? PRSO,VICBIT \?ELS12
PRINTI "He"
JUMP ?CND10
?ELS12: PRINTI "It"
?CND10: PRINTR "'s here!"
?ELS7: CALL TELL-SHD-DIR
RSTACK
.FUNCT TELL-SHD-DIR
PRINTI "You should supply a "
CALL DPRINT,INTDIR
PRINTR "!"
.FUNCT OTHER-SIDE,DOBJ,RM?=0,P=0,Z
?PRG1: NEXTP HERE,P >P
LESS? P,LOW-DIRECTION /FALSE
GETPT HERE,P >Z
PTSIZE Z
EQUAL? STACK,DEXIT \?PRG1
GETB Z,DEXITOBJ
EQUAL? STACK,DOBJ \?PRG1
ZERO? RM? /?ELS15
GETB Z,0
RETURN STACK
?ELS15: RETURN P
.FUNCT V-LEAN-ON
PRINTR "Are you so very tired, then?"
.FUNCT V-PUT-AGAINST
CALL TELL-NO-NO
RSTACK
.FUNCT V-TASTE
FSET? PRSO,FOODBIT \?ELS5
CALL PERFORM,V?EAT,PRSO
RSTACK
?ELS5: PRINTI "It tastes just like "
CALL APRINT,PRSO
PRINTR "."
.FUNCT TELL-WHY-BOTHER
PRINTR "Why bother?"
.FUNCT V-ROB
FSET? PRSO,PERSON /?THN6
EQUAL? PRSO,SPEAR-CARRIER \?ELS5
?THN6: PRINTI "Even as you begin to make your move, "
CALL THE?,PRSO
CALL DPRINT,PRSO
CALL JIGS-UP,STR?159
RSTACK
?ELS5: PRINTR "No wonder you never made the Ten Most Wanted list."
.FUNCT V-PUSH-THROUGH
PRINTI "Pushing "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTR " in that way isn't particularly helpful."
.FUNCT HOW?,OBJ
PRINTI "I don't know how to do that to "
CALL APRINT,OBJ
PRINTR "."
.FUNCT VOWEL?,OBJ
FSET? OBJ,VOWELBIT \?CND1
PRINTI "n"
?CND1: PRINTI " "
RTRUE
.FUNCT V-SMOKE
PRINTR "Smoking is bad for your health."
.FUNCT V-UNFOLD
CALL HOW?,PRSO
RSTACK
.FUNCT V-FOLD
CALL V-UNFOLD
RSTACK
.FUNCT V-HOLE-DIG
PRINTI "I can't dig in "
CALL THE?,PRSI
CALL DPRINT,PRSI
PRINTR "."
.FUNCT V-TURN-OVER
IN? PRSO,WINNER \?ELS5
CALL TELL-NOTHING,STR?160,TRUE-VALUE
RSTACK
?ELS5: FSET? PRSO,TAKEBIT \?ELS7
CALL TELL-YOUD-BETTER,STR?161,TRUE-VALUE
RSTACK
?ELS7: PRINTR "Good luck!"
.FUNCT V-READ-INSIDE
CALL TELL-NOTHING,STR?162,TRUE-VALUE
RSTACK
.FUNCT PRE-REACH-IN
EQUAL? PRSO,NOT-HERE-OBJECT /FALSE
FSET? PRSO,CONTBIT /?CND1
CALL TELL-CANT-REACH,STR?163
RTRUE
?CND1: FSET? PRSO,OPENBIT /FALSE
CALL TELL-CLOSED,PRSO,FALSE-VALUE
RSTACK
.FUNCT V-REACH-IN
CALL PERFORM,V?LOOK-INSIDE,PRSO
RSTACK
.FUNCT TELL-CLOSED,ARG,STR?=1
PRINTI "The "
ZERO? STR? /?ELS5
PRINT ARG
JUMP ?CND3
?ELS5: CALL DPRINT,ARG
?CND3: PRINTR " is closed."
.FUNCT V-CLEAN
PRINTR "Cleanliness may be next to godliness, but there are limits."
.FUNCT V-TIME
IN? WATCH,WINNER /?THN6
IN? WATCH,HERE \?ELS5
?THN6: PRINTI "Your watch says it's "
CALL WATCH-TIME
PRINTR "."
?ELS5: CALL TELL-YOU-CANT,STR?164
RSTACK
.FUNCT V-WEIGH
FSET? PRSO,TAKEBIT \?ELS5
PRINTR "Tough to do without a scale."
?ELS5: PRINTR "Now that's bizarre!"
.FUNCT V-CHASTISE
EQUAL? PRSO,INTDIR \?ELS5
PRINTR "The best way to see what's happening there is to go there."
?ELS5: PRINTI "Please be more specific. LOOKing AT, BEHIND, UNDER, THROUGH, INSIDE, ON, DOWN, FOR, or any other method of LOOKing mean different things to me. Please specify which preposition you'd like to use next time, like LOOK AT "
FSET? PRSO,PERSON /?CND12
PRINTI "THE "
?CND12: CALL DPRINT,PRSO
PRINTI ", or LOOK INSIDE "
FSET? PRSO,PERSON /?CND19
PRINTI "THE "
?CND19: CALL DPRINT,PRSO
PRINTR "."
.FUNCT V-HELP
ZERO? PRSO /?CND1
EQUAL? PRSO,WINNER /?CND1
PRINTI "It seems that "
CALL THE?,PRSO
CALL DPRINT,PRSO
PRINTI " doesn't need any help."
CRLF
?CND1: PRINTI "I'm afraid you'll have to figure this out "
CALL DPRINT,GLOBAL-SELF
PRINTR "."
.FUNCT GET-COMFORTABLE,OBJ
FIRST? OBJ /?THN6
CALL WEARING-SOMETHING?
ZERO? STACK /?ELS5
?THN6: CALL TELL-NOT-COMFORTABLE
RSTACK
?ELS5: MOVE WINNER,OBJ
PRINTI "You get into the "
CALL DPRINT,OBJ
PRINTI " and try to get comfortable. "
CALL V-SLEEP
RSTACK
.FUNCT TELL-NOT-COMFORTABLE
PRINTR "That doesn't sound very comfortable."
.FUNCT V-SLEEP
EQUAL? HOW-TIRED,6 \?ELS5
GETP HERE,P?LINE
LESS? STACK,UNDERWATER-LINE-C \?ELS10
CALL SLEEP-LOSE
RSTACK
?ELS10: CALL JIGS-UP,STR?165
RSTACK
?ELS5: ZERO? PRSO /?ELS14
EQUAL? PRSO,BUNK,BED,ROOMS /?ELS14
CALL TELL-NOT-COMFORTABLE
RSTACK
?ELS14: IN? WINNER,BED /?THN19
IN? WINNER,BUNK \?ELS18
?THN19: EQUAL? HOW-TIRED,1 /?ELS25
IN? WINNER,BED \FALSE
CALL SLEEP-LOSE
RSTACK
?ELS25: PRINTR "You close your eyes, but your mind is too active to let you sleep."
?ELS18: IN? BED,HERE \?ELS36
CALL GET-COMFORTABLE,BED
RTRUE
?ELS36: IN? BUNK,HERE \?ELS38
CALL GET-COMFORTABLE,BUNK
RTRUE
?ELS38: ZERO? PRSO /?ELS40
CALL TELL-NOT-COMFORTABLE
RSTACK
?ELS40: LESS? HOW-TIRED,2 \?ELS43
CALL TELL-YOURE-NOT,STR?166
RSTACK
?ELS43: PRINTR "Better find a good place to lie down."
.FUNCT SLEEP-LOSE
PRINTI "You drift off to sleep.
You wake up. Once again, you find "
CALL DPRINT,GLOBAL-SELF
PRINTI " with the usual nothing to do. It seems as if you are destined to spend the rest of your days on this island, waiting for a break that may never come."
CRLF
CALL FINISH
RSTACK
.FUNCT PRE-WHAT
ZERO? PRSI /FALSE
EQUAL? PRSO,GLOBAL-DAY,GLOBAL-TIME /FALSE
EQUAL? PRSI,P-IT-OBJECT,IT /FALSE
PRINTI "I'm afraid that question is beyond me."
CRLF
RETURN 2
.FUNCT V-WHAT
EQUAL? WINNER,PLAYER \?THN6
ZERO? QCONTEXT /?ELS5
EQUAL? HERE,QCONTEXT-ROOM \?ELS5
CALL META-LOC,QCONTEXT
EQUAL? HERE,STACK \?ELS5
FSET? QCONTEXT,PERSON \?ELS5
?THN6: PRINTR """Isn't it obvious?"""
?ELS5: ZERO? PRSO \?ELS13
PRINTR "Huh?"
?ELS13: FSET? PRSO,PERSON \?ELS17
PRINTR "Try asking that person."
?ELS17: PRINTI "Are you talking to "
CALL DPRINT,GLOBAL-SELF
PRINTR " again?"
.FUNCT V-YES
CALL TELL-RATHER,STR?167
RSTACK
.FUNCT V-MAYBE
CALL TELL-RATHER,STR?168
RSTACK
.FUNCT V-NO
CALL TELL-RATHER,STR?169
RSTACK
.FUNCT TELL-RATHER,STR
PRINTI "You sound rather "
PRINT STR
PRINTR "."
.FUNCT V-SIT
FSET? PRSO,PERSON \?ELS5
CALL PERFORM,V?SIT-WITH,PRSO
RSTACK
?ELS5: CALL PERFORM,V?SIT-ON,PRSO
RSTACK
.FUNCT V-SIT-ON
FSET? PRSO,VEHBIT \?ELS5
CALL PERFORM,V?BOARD,PRSO
RTRUE
?ELS5: EQUAL? PRSO,GROUND,DECK \?ELS7
LOC WINNER
FSET? STACK,VEHBIT \?CND8
MOVE WINNER,HERE
?CND8: PRINTR "After a moment, you stand back up."
?ELS7: CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
.FUNCT V-SIT-WITH
FSET? PRSO,PERSON /?ELS5
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RTRUE
?ELS5: IN? PLAYER,SHANTY \?ELS9
IN? PRSO,SHANTY \?ELS9
CALL PERFORM,V?SIT-ON,CHAIR
RSTACK
?ELS9: PRINTI "There's no place to sit with "
CALL DPRINT,PRSO
PRINTR "."
.FUNCT TELL-ALREADY,STR
PRINTI "It's already "
PRINT STR
PRINTR "."
.FUNCT TELL-YOUD-BETTER,STR,1ST=0,DONE=1
PRINTI "You'd better "
PRINT STR
ZERO? 1ST /?CND3
PRINTI " first."
?CND3: ZERO? DONE /FALSE
CRLF
RTRUE
.FUNCT FIXED-FONT-ON
GET 0,8
BOR STACK,2
PUT 0,8,STACK
RTRUE
.FUNCT FIXED-FONT-OFF
GET 0,8
BAND STACK,-3
PUT 0,8,STACK
RTRUE
.ENDI