minizork2-1988/verbs.zap
historicalsource a24d33a0ad Final Revision
2019-04-13 21:54:32 -04:00

1819 lines
33 KiB
Plaintext

.FUNCT V-VERBOSE
SET 'VERBOSITY,2
PRINTR "Maximum verbosity."
.FUNCT V-BRIEF
SET 'VERBOSITY,1
PRINTR "Brief descriptions."
.FUNCT V-SUPER-BRIEF
SET 'VERBOSITY,0
PRINTR "Superbrief descriptions."
.FUNCT V-DIAGNOSE
PRINTI "You are "
ZERO? DEAD /?CCL5
PRINTI "dead"
JUMP ?CND3
?CCL5: EQUAL? SPELL?,S-FERMENT \?CCL9
PRINTI "drunk"
JUMP ?CND3
?CCL9: EQUAL? SPELL?,S-FEEBLE \?CCL13
PRINTI "unusually"
JUMP ?CND3
?CCL13: EQUAL? SPELL?,S-FLOAT \?CCL17
PRINTI "floating"
JUMP ?CND3
?CCL17: EQUAL? SPELL?,S-FREEZE \?PRG24
PRINTI "frozen stiff"
JUMP ?CND3
?PRG24: PRINTI "in perfect health"
?CND3: ZERO? DEATHS /?PRG41
PRINTI ". You have been killed "
EQUAL? DEATHS,1 \?CCL32
PRINTI "once"
JUMP ?PRG41
?CCL32: EQUAL? DEATHS,2 \?PRG39
PRINTI "twice"
JUMP ?PRG41
?PRG39: PRINTI "an awful lot"
?PRG41: PRINT PERIOD-CR
RTRUE
.FUNCT V-INVENTORY
FIRST? WINNER \?PRG4
CALL PRINT-CONT,WINNER
RSTACK
?PRG4: PRINTR "You are empty-handed."
.FUNCT FINISH,WRD
CALL V-SCORE
?PRG1: CRLF
PRINTI "Would you like to start over, restore a saved position, or stop playing?
(Type RESTART, RESTORE, or QUIT):
>"
READ P-INBUF,P-LEXV
GET P-LEXV,1 >WRD
EQUAL? WRD,W?RESTART \?CCL7
RESTART
PRINTI "Failed."
CRLF
JUMP ?PRG1
?CCL7: EQUAL? WRD,W?RESTORE \?CCL11
RESTORE
PRINTI "Failed."
CRLF
JUMP ?PRG1
?CCL11: EQUAL? WRD,W?QUIT,W?Q \?PRG1
QUIT
JUMP ?PRG1
.FUNCT V-QUIT,SCOR
CALL DO-YOU-WISH,STR?1
ZERO? STACK /?PRG4
QUIT
RTRUE
?PRG4: PRINTR "Ok."
.FUNCT V-RESTART
CALL DO-YOU-WISH,STR?2
ZERO? STACK /FALSE
PRINTI "Restarting."
CRLF
RESTART
PRINTR "Failed."
.FUNCT DO-YOU-WISH,STRING
CALL V-SCORE
PRINTI "Do you wish to "
PRINT STRING
PRINTI "? (Y is affirmative): "
CALL YES?
ZERO? STACK /FALSE
RTRUE
.FUNCT YES?
PRINTC 62
READ P-INBUF,P-LEXV
GET P-LEXV,1
EQUAL? STACK,W?YES,W?Y /TRUE
RFALSE
.FUNCT V-RESTORE
RESTORE
PRINTR "Failed."
.FUNCT V-SAVE
SAVE \?PRG6
PRINTR "Ok."
?PRG6: PRINTR "Failed."
.FUNCT V-SCORE
PRINTI "Your score is "
PRINTN SCORE
PRINTI " (out of 400 points), in "
PRINTN MOVES
PRINTI " move"
EQUAL? MOVES,1 /?PRG7
PRINTC 115
?PRG7: PRINTI ". This score gives you the rank of "
EQUAL? SCORE,400 \?CCL11
PRINTI "Wizard"
JUMP ?PRG32
?CCL11: GRTR? SCORE,320 \?CCL15
PRINTI "Master Adventurer"
JUMP ?PRG32
?CCL15: GRTR? SCORE,240 \?CCL19
PRINTI "Senior Adventurer"
JUMP ?PRG32
?CCL19: GRTR? SCORE,160 \?CCL23
PRINTI "Junior Adventurer"
JUMP ?PRG32
?CCL23: GRTR? SCORE,80 \?PRG30
PRINTI "Amateur Adventurer"
JUMP ?PRG32
?PRG30: PRINTI "Beginner"
?PRG32: PRINT PERIOD-CR
RTRUE
.FUNCT SCORE-OBJ,OBJ,TEMP
GETP OBJ,P?VALUE >TEMP
GRTR? TEMP,0 \FALSE
ADD SCORE,TEMP >SCORE
PUTP OBJ,P?VALUE,0
RTRUE
.FUNCT V-SCRIPT
GET 0,8
BOR STACK,1
PUT 0,8,STACK
CALL INTERACTION,STR?3
RSTACK
.FUNCT INTERACTION,STRING
PRINTI "Here "
PRINT STRING
PRINTI "s a transcript of interaction with"
CRLF
CALL V-VERSION
RSTACK
.FUNCT V-UNSCRIPT
CALL INTERACTION,STR?4
GET 0,8
BAND STACK,-2
PUT 0,8,STACK
RTRUE
.FUNCT V-VERSION,CNT=17
PRINTI "Mini-Zork II: The Wizard of Frobozz
Copyright (c) 1988, Infocom, Inc. All rights reserved.
ZORK is a registered trademark of Infocom, Inc.
Release "
GET 0,1
BAND STACK,2047
PRINTN STACK
PRINTI " / Serial number "
?PRG5: IGRTR? 'CNT,23 /?REP6
GETB 0,CNT
PRINTC STACK
JUMP ?PRG5
?REP6: CRLF
RTRUE
.FUNCT V-VERIFY
PRINTI "Verifying..."
CRLF
VERIFY \?PRG8
PRINTR "Correct."
?PRG8: CRLF
PRINTR "** Failed! **"
.FUNCT V-COMMAND-FILE
DIRIN 1
RTRUE
.FUNCT V-RANDOM
EQUAL? PRSO,INTNUM /?CCL3
PRINTR "Illegal call to #RND."
?CCL3: SUB 0,P-NUMBER
RANDOM STACK
RTRUE
.FUNCT V-RECORD
DIROUT 4
RTRUE
.FUNCT V-UNRECORD
DIROUT -4
RTRUE
.FUNCT V-ALARM
PRINTI "The "
PRINTD PRSO
PRINTR " isn't sleeping."
.FUNCT V-ATTACK
FSET? PRSO,ACTORBIT /?CND1
PRINTI "Fight a "
PRINTD PRSO
PRINTR "!?!"
?CND1: ZERO? PRSI \?PRG10
IN? ADVENTURER,SWORD \?CCL9
SET 'PRSI,SWORD
JUMP ?PRG10
?CCL9: SET 'PRSI,HANDS
?PRG10: PRINTI "Trying to attack a "
PRINTD PRSO
PRINTI " with "
EQUAL? PRSI,HANDS \?PRG17
PRINTI "your bare hands"
JUMP ?PRG19
?PRG17: PRINTI "a "
PRINTD PRSI
?PRG19: PRINTR " is suicidal."
.FUNCT V-BLAST
PRINTR "You can't blast anything by using words."
.FUNCT PRE-BURN
ZERO? PRSI \?CCL3
PRINTR "You didn't say with what!"
?CCL3: FSET? PRSI,FLAMEBIT \?PRG10
FSET? PRSI,ONBIT /FALSE
?PRG10: PRINTI "With a "
PRINTD PRSI
PRINTR "??!?"
.FUNCT V-BURN
LOC PRSO
EQUAL? STACK,RECEPTACLE \?CCL3
CALL BALLOON-BURN
RTRUE
?CCL3: FSET? PRSO,BURNBIT \?PRG24
PRINTI "The "
PRINTD PRSO
PRINTI " catches fire"
CALL REMOVE-CAREFULLY,PRSO
IN? PRSO,WINNER /?PRG13
IN? WINNER,PRSO \?PRG22
?PRG13: PRINTI ". Unfortunately, you were "
IN? WINNER,PRSO \?PRG20
PRINTI "in"
JUMP ?CND15
?PRG20: PRINTI "holding"
?CND15: CALL JIGS-UP,STR?5
RSTACK
?PRG22: PRINTR " and is consumed."
?PRG24: PRINTI "You can't burn a "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT V-CLIMB-DOWN
CALL DO-WALK,P?DOWN
RSTACK
.FUNCT V-CLIMB
CALL DO-WALK,P?UP
RSTACK
.FUNCT V-CLIMB-ON
FSET? PRSO,VEHBIT \?PRG4
CALL PERFORM,V?ENTER,PRSO
RTRUE
?PRG4: PRINTI "You can't climb onto the "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT V-CLOSE
FSET? PRSO,DOORBIT \?CCL3
FSET? PRSO,OPENBIT \?PRG9
FCLEAR PRSO,OPENBIT
PRINTR "Closed."
?PRG9: PRINT ALREADY
RTRUE
?CCL3: FSET? PRSO,SURFACEBIT /?PRG15
FSET? PRSO,CONTBIT /?CCL12
?PRG15: PRINTI "You can't close a "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
?CCL12: FSET? PRSO,OPENBIT \?PRG21
FCLEAR PRSO,OPENBIT
PRINTI "Closed."
CRLF
CALL NOW-DARK?
RSTACK
?PRG21: PRINT ALREADY
RTRUE
.FUNCT V-COMMAND
FSET? PRSO,ACTORBIT \?PRG6
PRINTI "The "
PRINTD PRSO
PRINTR " pays no attention."
?PRG6: PRINTR "You cannot talk to that!"
.FUNCT V-COUNT
PRINTR "You have lost your mind."
.FUNCT V-CURSES
PRINTR "Such language in a high-class establishment like this!"
.FUNCT V-CUT
FSET? PRSO,ACTORBIT \?CCL3
CALL PERFORM,V?ATTACK,PRSO,PRSI
RSTACK
?CCL3: FSET? PRSI,WEAPONBIT /?CCL5
PRINTI "The ""cutting edge"" of a "
PRINTD PRSI
PRINTR " is inadequate."
?CCL5: FSET? PRSO,BURNBIT \?PRG17
IN? WINNER,PRSO \?CCL12
PRINTR "You're in it!"
?CCL12: CALL REMOVE-CAREFULLY,PRSO
PRINTI "You skillfully slice the "
PRINTD PRSO
PRINTR " into slivers, which blow away."
?PRG17: PRINTI "Strange concept, cutting the "
PRINTD PRSO
PRINTR "...."
.FUNCT V-DEFLATE
PRINTR "Come on, now!"
.FUNCT V-DISEMBARK
EQUAL? PRSO,ROOMS \?CCL3
LOC WINNER
FSET? STACK,VEHBIT \?CCL3
LOC WINNER
CALL PERFORM,V?DISEMBARK,STACK
RTRUE
?CCL3: LOC WINNER
EQUAL? STACK,PRSO /?CCL7
PRINT LOOK-AROUND
RETURN 2
?CCL7: FSET? HERE,RLANDBIT \?PRG16
MOVE WINNER,HERE
PRINTR "You are on your own feet again."
?PRG16: PRINTI "Getting out here would be fatal."
CRLF
RETURN 2
.FUNCT V-DISENCHANT
IN? PRSO,HERE \TRUE
EQUAL? SPELL-USED,W?FEEBLE,W?FUMBLE /?CTR4
EQUAL? SPELL-USED,W?FREEZE,W?FALL,W?FERMENT /?CTR4
EQUAL? SPELL-USED,W?FENCE,W?FANTASIZE \?CCL5
?CTR4: FSET? PRSO,ACTORBIT \FALSE
EQUAL? SPELL-USED,W?FEEBLE \?CCL14
PRINTI "The "
PRINTD PRSO
PRINTR " seems stronger now."
?CCL14: EQUAL? SPELL-USED,W?FUMBLE \?CCL18
PRINTI "The "
PRINTD PRSO
PRINTR " no longer appears clumsy."
?CCL18: EQUAL? SPELL-USED,W?FREEZE \?CCL22
PRINTI "The "
PRINTD PRSO
PRINTR " moves again."
?CCL22: EQUAL? SPELL-USED,W?FERMENT \FALSE
PRINTI "The "
PRINTD PRSO
PRINTR " stops swaying."
?CCL5: EQUAL? SPELL-USED,W?FLOAT \?CCL30
PRINTI "The "
PRINTD PRSO
PRINTR " sinks to the ground."
?CCL30: EQUAL? SPELL-USED,W?FUDGE \FALSE
PRINTR "The sweet smell has dispersed."
.FUNCT V-DRINK
CALL V-EAT
RSTACK
.FUNCT V-DRINK-FROM
PRINTR "How peculiar!"
.FUNCT PRE-DROP
LOC WINNER
EQUAL? PRSO,STACK \FALSE
CALL PERFORM,V?DISEMBARK,PRSO
RTRUE
.FUNCT V-DROP
CALL IDROP
ZERO? STACK /FALSE
PRINTR "Dropped."
.FUNCT V-EAT
FSET? PRSO,FOODBIT \?CCL3
CALL HIT-SPOT
RSTACK
?CCL3: EQUAL? PRSO,GLOBAL-WATER \?CCL5
CALL HIT-SPOT
RSTACK
?CCL5: EQUAL? PRSO,WATER \?PRG13
LOC PRSO
CALL HELD?,STACK
ZERO? STACK \?CCL10
PRINTI "You're not holding the "
LOC PRSO
PRINTD STACK
PRINT PERIOD-CR
RTRUE
?CCL10: CALL HIT-SPOT
RSTACK
?PRG13: PRINTI "It's doubtful the "
PRINTD PRSO
PRINTR " would agree with you."
.FUNCT HIT-SPOT
EQUAL? PRSO,GLOBAL-WATER /?PRG3
CALL REMOVE-CAREFULLY,PRSO
?PRG3: PRINTR "That really hit the spot."
.FUNCT V-ENCHANT
ZERO? WAND-ON /?CND1
SET 'SPELL-VICTIM,WAND-ON
?CND1: ZERO? SPELL-VICTIM /?CCL5
ZERO? SPELL-USED \?CND6
PRINTR "You must be more specific."
?CND6: EQUAL? SPELL-USED,W?FEEBLE,W?FUMBLE /?CTR11
EQUAL? SPELL-USED,W?FREEZE,W?FALL,W?FERMENT /?CTR11
EQUAL? SPELL-USED,W?FENCE,W?FANTASIZE \?CCL12
?CTR11: FSET? PRSO,ACTORBIT \?PRG21
PRINT WAND-STOPS-GLOWING
RTRUE
?PRG21: PRINTI "That might have done something, but it's hard to tell with a "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
?CCL12: EQUAL? SPELL-USED,W?FUDGE \?CCL24
PRINTR "An odor of chocolate permeates the room."
?CCL24: EQUAL? SPELL-USED,W?FLUORESCE \?CCL28
FSET PRSO,LIGHTBIT
FSET PRSO,ONBIT
SET 'LIT,TRUE-VALUE
PRINTI "The "
PRINTD PRSO
PRINTR " begins to glow."
?CCL28: EQUAL? SPELL-USED,W?FLOAT \?CCL32
FSET? PRSO,TAKEBIT \?CCL32
EQUAL? SPELL-VICTIM,COLLAR \?PRG39
IN? COLLAR,CERBERUS \?PRG39
SET 'SPELL-VICTIM,CERBERUS
?PRG39: PRINTI "The "
PRINTD PRSO
PRINTR " floats serenely in midair."
?CCL32: EQUAL? SPELL-USED,W?FRY \?CCL42
FSET? PRSO,TAKEBIT \?CCL42
SET 'SPELL-HANDLED?,TRUE-VALUE
CALL REMOVE-CAREFULLY,PRSO
PRINTI "The "
PRINTD PRSO
PRINTR " goes up in a puff of smoke."
?CCL42: SET 'SPELL-VICTIM,FALSE-VALUE
PRINT WAND-STOPS-GLOWING
RTRUE
?CCL5: SET 'SPELL-VICTIM,FALSE-VALUE
PRINTR "Nothing happens."
.FUNCT REMOVE-CAREFULLY,OBJ,OLIT
EQUAL? OBJ,P-IT-OBJECT \?CND1
SET 'P-IT-OBJECT,FALSE-VALUE
?CND1: SET 'OLIT,LIT
REMOVE OBJ
CALL NOW-DARK?
RSTACK
.FUNCT PRE-ENTER,M
ZERO? PRSO \?CCL3
CALL DO-WALK,P?IN
RETURN 2
?CCL3: FSET? PRSO,DOORBIT \?CCL5
CALL OTHER-SIDE,PRSO >M
ZERO? M /?CCL5
CALL DO-WALK,M
RETURN 2
?CCL5: FSET? PRSO,VEHBIT \?CCL9
LOC ADVENTURER
FSET? STACK,VEHBIT \FALSE
PRINT LOOK-AROUND
RETURN 2
?CCL9: EQUAL? PRSO,GLOBAL-WATER,WATER /FALSE
PRINTI "You hit your head against the "
PRINTD PRSO
PRINTI " as you attempt this feat."
CRLF
RETURN 2
.FUNCT V-ENTER
PRINTI "You are now in the "
PRINTD PRSO
PRINT PERIOD-CR
MOVE WINNER,PRSO
GETP PRSO,P?ACTION
CALL STACK,M-ENTER
RTRUE
.FUNCT V-EXAMINE
GETP PRSO,P?TEXT
ZERO? STACK /?CCL3
GETP PRSO,P?TEXT
PRINT STACK
CRLF
RTRUE
?CCL3: FSET? PRSO,CONTBIT /?CTR6
FSET? PRSO,DOORBIT \?PRG10
?CTR6: CALL V-LOOK-INSIDE
RSTACK
?PRG10: PRINTI "There's nothing special about the "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT V-EXIT
EQUAL? PRSO,FALSE-VALUE,ROOMS \?PRD5
LOC WINNER
FSET? STACK,VEHBIT /?CTR2
?PRD5: ZERO? PRSO /?CCL3
IN? WINNER,PRSO \?CCL3
?CTR2: LOC WINNER
CALL PERFORM,V?DISEMBARK,STACK
RTRUE
?CCL3: CALL DO-WALK,P?OUT
RSTACK
.FUNCT PRE-FILL,TX
ZERO? PRSI \?CCL3
CALL GLOBAL-IN?,GLOBAL-WATER,HERE
ZERO? STACK /?CCL6
CALL PERFORM,V?FILL,PRSO,GLOBAL-WATER
RTRUE
?CCL6: LOC WINNER
IN? WATER,STACK \?PRG9
CALL PERFORM,V?FILL,PRSO,WATER
RTRUE
?PRG9: PRINTR "There is nothing to fill it with."
?CCL3: EQUAL? PRSI,WATER,GLOBAL-WATER /FALSE
CALL PERFORM,V?PUT,PRSI,PRSO
RTRUE
.FUNCT V-FILL
PRINTR "Huh?"
.FUNCT V-FIND,L
LOC PRSO >L
EQUAL? PRSO,HANDS \?CCL3
PRINTR "Within six feet of your head, hopefully."
?CCL3: EQUAL? L,GLOBAL-OBJECTS \?CCL7
PRINTR "You find it."
?CCL7: IN? PRSO,WINNER \?CCL11
PRINTR "You have it."
?CCL11: IN? PRSO,HERE /?PRG19
CALL GLOBAL-IN?,PRSO,HERE
ZERO? STACK \?PRG19
EQUAL? PRSO,PSEUDO-OBJECT \?CCL15
?PRG19: PRINTR "It's right here."
?CCL15: FSET? L,ACTORBIT \?CCL22
PRINTI "The "
PRINTD L
PRINTR " has it."
?CCL22: FSET? L,SURFACEBIT \?CCL26
PRINTI "It's on the "
PRINTD L
PRINT PERIOD-CR
RTRUE
?CCL26: FSET? L,CONTBIT \?PRG33
PRINTI "It's in the "
PRINTD L
PRINT PERIOD-CR
RTRUE
?PRG33: PRINTR "Beats me."
.FUNCT V-FOLLOW
CALL V-COUNT
RSTACK
.FUNCT PRE-GIVE
CALL HELD?,PRSO
ZERO? STACK \FALSE
PRINTI "That's easy for you to say since you don't even have the "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT V-GIVE
FSET? PRSI,ACTORBIT /?PRG6
PRINTI "You can't give a "
PRINTD PRSO
PRINTI " to a "
PRINTD PRSI
PRINTR "!"
?PRG6: PRINTI "The "
PRINTD PRSI
PRINTR " refuses it politely."
.FUNCT V-HELLO
ZERO? PRSO /?PRG11
FSET? PRSO,ACTORBIT \?PRG9
PRINTI "The "
PRINTD PRSO
PRINTR " bows his head to you in greeting."
?PRG9: PRINTI "Only schizophrenics say ""Hello"" to a "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
?PRG11: PRINTR "Goodbye."
.FUNCT V-INCANT
ZERO? SPELL-USED /?CCL3
PRINTI "Nothing happens."
CRLF
JUMP ?CND1
?CCL3: ZERO? WAND-ON /?PRG10
SET 'SPELL-VICTIM,WAND-ON
GET P-LEXV,P-CONT >SPELL-USED
PRINTI "The wand glows very brightly for a moment."
CRLF
RANDOM 10
ADD 10,STACK
CALL QUEUE,I-SPELL,STACK
PUT STACK,0,1
SET 'WAND-ON,FALSE-VALUE
CALL PERFORM,V?ENCHANT,SPELL-VICTIM
JUMP ?CND1
?PRG10: PRINTI "The incantation echoes back faintly, but nothing else happens."
CRLF
?CND1: SET 'QUOTE-FLAG,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
RTRUE
.FUNCT I-SPELL
ZERO? SPELL-HANDLED? \?CND1
ZERO? SPELL-VICTIM /?CND1
CALL PERFORM,V?DISENCHANT,SPELL-VICTIM
?CND1: SET 'SPELL-HANDLED?,FALSE-VALUE
SET 'WAND-ON,FALSE-VALUE
SET 'SPELL-USED,FALSE-VALUE
SET 'SPELL-VICTIM,FALSE-VALUE
RETURN SPELL-VICTIM
.FUNCT V-INFLATE
PRINTR "How can you inflate that?"
.FUNCT V-KICK
CALL HACK-HACK,STR?6
RSTACK
.FUNCT V-KISS
PRINTR "I'd sooner kiss a pig."
.FUNCT V-KNOCK
FSET? PRSO,DOORBIT \?PRG6
PRINTR "Nobody's home."
?PRG6: PRINTI "Why knock on a "
PRINTD PRSO
PRINTR "?"
.FUNCT V-LAMP-OFF
FSET? PRSO,LIGHTBIT \?PRG11
FSET? PRSO,ONBIT /?CCL6
PRINT ALREADY
RTRUE
?CCL6: FCLEAR PRSO,ONBIT
PRINTI "The "
PRINTD PRSO
PRINTI " is now off."
CRLF
CALL NOW-DARK?
RSTACK
?PRG11: PRINTR "You can't turn that off."
.FUNCT V-LAMP-ON
FSET? PRSO,LIGHTBIT \?CCL3
FSET? PRSO,ONBIT \?CCL6
PRINT ALREADY
RTRUE
?CCL6: FSET PRSO,ONBIT
PRINTI "The "
PRINTD PRSO
PRINTI " is now on."
CRLF
ZERO? LIT \FALSE
CALL LIT?,HERE >LIT
CRLF
CALL V-LOOK
RSTACK
?CCL3: FSET? PRSO,BURNBIT \?PRG18
PRINTI "If you wish to burn the "
PRINTD PRSO
PRINTR ", you should say so."
?PRG18: PRINTR "You can't turn that on."
.FUNCT V-LAUNCH
PRINTR "You can't launch that by saying ""launch""!"
.FUNCT V-LEAP,TX,S
ZERO? PRSO /?CCL3
PRINTR "That would be a good trick."
?CCL3: GETPT HERE,P?DOWN >TX
ZERO? TX /?CCL7
PTSIZE TX >S
EQUAL? S,2 /?CTR9
EQUAL? S,4 \?CCL10
GETB TX,1
VALUE STACK
ZERO? STACK \?CCL10
?CTR9: CALL JIGS-UP,STR?7
RSTACK
?CCL10: CALL V-SKIP
RSTACK
?CCL7: CALL V-SKIP
RSTACK
.FUNCT V-LEAVE
CALL DO-WALK,P?OUT
RSTACK
.FUNCT V-LISTEN
PRINTI "The "
PRINTD PRSO
PRINTR " makes no sound."
.FUNCT V-LOCK
PRINTR "It doesn't seem to work."
.FUNCT V-LOOK
CALL DESCRIBE-ROOM,TRUE-VALUE
ZERO? LIT /FALSE
CALL DESCRIBE-OBJECTS,TRUE-VALUE
RSTACK
.FUNCT V-LOOK-BEHIND
PRINTI "There is nothing behind the "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT V-LOOK-INSIDE
FSET? PRSO,DOORBIT \?CCL3
PRINTI "The "
PRINTD PRSO
FSET? PRSO,OPENBIT \?PRG11
PRINTR " is open, but you can't see beyond it."
?PRG11: PRINTR " is closed."
?CCL3: FSET? PRSO,CONTBIT \?PRG31
FSET? PRSO,ACTORBIT \?CCL17
PRINTR "There is nothing special to be seen."
?CCL17: CALL SEE-INSIDE?,PRSO
ZERO? STACK /?PRG29
FIRST? PRSO \?PRG27
CALL PRINT-CONT,PRSO
ZERO? STACK \TRUE
?PRG27: PRINTI "The "
PRINTD PRSO
PRINTR " is empty."
?PRG29: PRINTI "The "
PRINTD PRSO
PRINTR " is closed."
?PRG31: PRINTI "You can't look inside a "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT V-LOOK-UNDER
PRINTR "There is nothing but dust there."
.FUNCT V-LOWER
CALL HACK-HACK,STR?8
RSTACK
.FUNCT V-MELT
PRINTI "You can't melt a "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT V-MOVE
CALL HELD?,PRSO
ZERO? STACK /?CCL3
PRINTR "Why juggle objects?"
?CCL3: FSET? PRSO,TAKEBIT \?PRG10
PRINTI "Moving the "
PRINTD PRSO
PRINTR " reveals nothing."
?PRG10: PRINTI "You can't move the "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT PRE-MUNG
ZERO? PRSI /?PRG6
FSET? PRSI,WEAPONBIT /FALSE
?PRG6: PRINTI "Trying to destroy the "
PRINTD PRSO
PRINTI " with "
ZERO? PRSI \?PRG13
PRINTI "your bare hands"
JUMP ?PRG15
?PRG13: PRINTI "a "
PRINTD PRSI
?PRG15: PRINTR " is futile."
.FUNCT V-MUNG
FSET? PRSO,ACTORBIT \?PRG4
CALL PERFORM,V?ATTACK,PRSO
RTRUE
?PRG4: PRINTR "Nice try."
.FUNCT V-OPEN,F,STR
FSET? PRSO,CONTBIT \?CCL3
FSET? PRSO,OPENBIT \?CCL6
PRINT ALREADY
RTRUE
?CCL6: FSET PRSO,OPENBIT
FSET PRSO,TOUCHBIT
FIRST? PRSO \?PRG14
FSET? PRSO,TRANSBIT \?CCL11
?PRG14: PRINTR "Opened."
?CCL11: FIRST? PRSO >F \?PRG26
NEXT? F /?PRG26
FSET? F,TOUCHBIT /?PRG26
GETP F,P?FDESC >STR
ZERO? STR /?PRG26
PRINTI "The "
PRINTD PRSO
PRINTI " opens."
CRLF
PRINT STR
CRLF
RTRUE
?PRG26: PRINTI "Opening the "
PRINTD PRSO
PRINTI " reveals "
CALL PRINT-CONTENTS,PRSO
PRINT PERIOD-CR
RTRUE
?CCL3: FSET? PRSO,DOORBIT \?PRG39
FSET? PRSO,OPENBIT \?CCL34
PRINT ALREADY
RTRUE
?CCL34: FSET PRSO,OPENBIT
PRINTI "The "
PRINTD PRSO
PRINTR " opens."
?PRG39: PRINTI "You can't open a "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT V-PICK
PRINTR "You can't pick that."
.FUNCT V-PLAY
PRINTR "That's silly!"
.FUNCT V-POUR-ON
EQUAL? PRSO,WATER \?PRG15
CALL REMOVE-CAREFULLY,PRSO
FSET? PRSI,FLAMEBIT \?PRG13
FSET? PRSI,ONBIT \?PRG13
PRINTI "The "
PRINTD PRSI
PRINTI " is extinguished."
CRLF
EQUAL? PRSI,BALLOON-INFLATED \?CND11
SET 'BALLOON-INFLATED,FALSE-VALUE
?CND11: FCLEAR PRSI,ONBIT
FCLEAR PRSI,FLAMEBIT
RTRUE
?PRG13: PRINTI "The water spills over the "
PRINTD PRSI
PRINTR " and evaporates."
?PRG15: PRINTR "You can't pour that."
.FUNCT V-PUSH
CALL HACK-HACK,STR?9
RSTACK
.FUNCT PRE-PUT
CALL PRE-GIVE
RSTACK
.FUNCT V-PUT,?TMP1,?TMP2,?TMP3
FSET? PRSI,OPENBIT /?CCL3
FSET? PRSI,DOORBIT /?CCL3
FSET? PRSI,CONTBIT /?CCL3
FSET? PRSI,VEHBIT /?CCL3
PRINTR "You can't do that."
?CCL3: FSET? PRSI,OPENBIT /?CCL12
SET 'P-IT-OBJECT,PRSI
PRINTI "The "
PRINTD PRSI
PRINTR " isn't open."
?CCL12: EQUAL? PRSI,PRSO \?CCL16
PRINTR "How can you do that?"
?CCL16: IN? PRSO,PRSI \?CCL20
PRINTI "The "
PRINTD PRSO
PRINTI " is already in the "
PRINTD PRSI
PRINT PERIOD-CR
RTRUE
?CCL20: CALL WEIGHT,PRSI >?TMP3
CALL WEIGHT,PRSO
ADD ?TMP3,STACK >?TMP2
GETP PRSI,P?SIZE
SUB ?TMP2,STACK >?TMP1
GETP PRSI,P?CAPACITY
GRTR? ?TMP1,STACK \?CCL24
PRINTR "There's no room."
?CCL24: CALL HELD?,PRSO
ZERO? STACK \?CCL28
CALL ITAKE
ZERO? STACK /TRUE
?CCL28: MOVE PRSO,PRSI
FSET PRSO,TOUCHBIT
CALL SCORE-OBJ,PRSO
PRINTR "Done."
.FUNCT V-PUT-ON
EQUAL? PRSI,GROUND \?CCL3
CALL PERFORM,V?DROP,PRSO
RTRUE
?CCL3: FSET? PRSI,SURFACEBIT \?PRG6
CALL V-PUT
RSTACK
?PRG6: PRINTI "There's no good surface on the "
PRINTD PRSI
PRINT PERIOD-CR
RTRUE
.FUNCT V-PUT-UNDER
PRINTR "You can't do that."
.FUNCT V-RAISE
CALL V-LOWER
RSTACK
.FUNCT V-RAPE
PRINTR "What a (ahem!) strange idea."
.FUNCT PRE-READ
ZERO? LIT \FALSE
PRINT TOO-DARK
CRLF
RTRUE
.FUNCT V-READ
FSET? PRSO,READBIT /?PRG6
PRINTI "How does one read a "
PRINTD PRSO
PRINTR "?"
?PRG6: GETP PRSO,P?TEXT
PRINT STACK
CRLF
RTRUE
.FUNCT V-RUB
CALL HACK-HACK,STR?10
RSTACK
.FUNCT V-SAY,V
ZERO? SPELL-USED \?CTR2
ZERO? WAND-ON /?CCL3
?CTR2: CALL PERFORM,V?INCANT
RTRUE
?CCL3: ZERO? P-CONT \?CCL7
PRINTR "Say what?"
?CCL7: SET 'QUOTE-FLAG,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
CALL FIND-IN,HERE,ACTORBIT >V
ZERO? V /?PRG15
PRINTI "You must address the "
PRINTD V
PRINTR " directly."
?PRG15: PRINTR "Talking to yourself is a sign of impending mental collapse."
.FUNCT V-SEARCH
PRINTR "You find nothing unusual."
.FUNCT V-SGIVE
CALL PERFORM,V?GIVE,PRSI,PRSO
RTRUE
.FUNCT V-SHAKE
PRINTR "Shaken."
.FUNCT V-SKIP
PRINTR "Wheeeeeeee!!!"
.FUNCT V-SMELL
PRINTI "It smells like a "
PRINTD PRSO
PRINT PERIOD-CR
RTRUE
.FUNCT V-STAND
LOC WINNER
FSET? STACK,VEHBIT \?PRG4
LOC WINNER
CALL PERFORM,V?DISEMBARK,STACK
RTRUE
?PRG4: PRINT LOOK-AROUND
RTRUE
.FUNCT V-STRIKE
FSET? PRSO,ACTORBIT \?CCL3
CALL PERFORM,V?ATTACK,PRSO,HANDS
RTRUE
?CCL3: CALL PERFORM,V?LAMP-ON,PRSO
RTRUE
.FUNCT V-SWIM
PRINTI "Swimming isn't usually allowed in the "
EQUAL? PRSO,WATER,GLOBAL-WATER /?PRG8
PRINTD PRSO
PRINTR "."
?PRG8: PRINTR "dungeon."
.FUNCT V-SWING
ZERO? PRSI \?CCL3
PRINTR "Whoosh!"
?CCL3: CALL PERFORM,V?ATTACK,PRSI,PRSO
RSTACK
.FUNCT PRE-TAKE
IN? PRSO,WINNER \?CCL3
PRINTR "You already have that!"
?CCL3: LOC PRSO
FSET? STACK,CONTBIT \?CCL7
LOC PRSO
FSET? STACK,OPENBIT /?CCL7
PRINTR "You can't reach into a closed container."
?CCL7: ZERO? PRSI /?CCL13
EQUAL? PRSI,DOOR-KEEPER,GROUND \?CCL16
SET 'PRSI,FALSE-VALUE
RFALSE
?CCL16: LOC PRSO
EQUAL? PRSI,STACK /?CCL18
PRINTI "The "
PRINTD PRSO
PRINTI " isn't in the "
PRINTD PRSI
PRINT PERIOD-CR
RTRUE
?CCL18: SET 'PRSI,FALSE-VALUE
RFALSE
?CCL13: LOC WINNER
EQUAL? PRSO,STACK \FALSE
PRINTR "You're in it!"
.FUNCT V-TAKE
CALL ITAKE
EQUAL? STACK,TRUE-VALUE \FALSE
PRINTR "Taken."
.FUNCT V-TELL
FSET? PRSO,ACTORBIT \?PRG9
ZERO? P-CONT /?PRG7
SET 'WINNER,PRSO
LOC WINNER >HERE
RETURN HERE
?PRG7: PRINTI "The "
PRINTD PRSO
PRINTR " pauses, thinking that you should reread the manual."
?PRG9: PRINTI "You can't talk to the "
PRINTD PRSO
PRINTC 33
CRLF
SET 'QUOTE-FLAG,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
RETURN 2
.FUNCT V-THROW
CALL IDROP
ZERO? STACK /?PRG19
EQUAL? PRSI,ME \?CCL6
SET 'WINNER,ADVENTURER
PRINTI "A terrific throw! The "
PRINTD PRSO
PRINTI " hits your head. By incredible mischance, you fall trying to duck and break your neck, justice being swift and merciful in"
PRINT GUE-NAME
CALL JIGS-UP,STR?11
RSTACK
?CCL6: ZERO? PRSI /?PRG17
FSET? PRSI,ACTORBIT \?PRG17
PRINTI "The "
PRINTD PRSI
PRINTR " ducks."
?PRG17: PRINTR "Thrown."
?PRG19: PRINTR "Huh?"
.FUNCT V-THROW-OFF
PRINTR "You can't throw anything off of that!"
.FUNCT V-TIE
PRINTI "You can't tie the "
PRINTD PRSO
PRINTR " to that."
.FUNCT V-TIE-UP
PRINTR "You could certainly never tie it with that!"
.FUNCT V-TURN
PRINTR "You can't turn that!"
.FUNCT V-UNLOCK
CALL V-LOCK
RSTACK
.FUNCT V-UNTIE
PRINTR "This cannot be tied, so it cannot be untied!"
.FUNCT V-WAIT,NUM=3
PRINTI "Time passes..."
CRLF
?PRG3: DLESS? 'NUM,0 /?REP4
CALL CLOCKER
ZERO? STACK /?PRG3
?REP4: SET 'CLOCK-WAIT,TRUE-VALUE
RETURN CLOCK-WAIT
.FUNCT V-WALK,PT,PTS,STR,OBJ,RM
ZERO? P-WALK-DIR \?CCL3
CALL PERFORM,V?WALK-TO,PRSO
RTRUE
?CCL3: GETPT HERE,PRSO >PT
ZERO? PT /?CCL5
PTSIZE PT >PTS
EQUAL? PTS,UEXIT \?CCL8
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?CCL8: EQUAL? PTS,NEXIT \?CCL10
GET PT,NEXITSTR
PRINT STACK
CRLF
RETURN 2
?CCL10: EQUAL? PTS,FEXIT \?CCL16
GET PT,FEXITFCN
CALL STACK >RM
ZERO? RM /?PRG20
CALL GOTO,RM
RSTACK
?PRG20: RETURN 2
?CCL16: EQUAL? PTS,CEXIT \?CCL23
GETB PT,CEXITFLAG
VALUE STACK
ZERO? STACK /?CCL26
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?CCL26: GET PT,CEXITSTR >STR
ZERO? STR /?PRG33
PRINT STR
CRLF
RETURN 2
?PRG33: PRINT CANT-GO
RETURN 2
?CCL23: EQUAL? PTS,DEXIT \FALSE
GETB PT,DEXITOBJ >OBJ
FSET? OBJ,OPENBIT \?CCL41
GETB PT,REXIT
CALL GOTO,STACK
RSTACK
?CCL41: GET PT,DEXITSTR >STR
ZERO? STR /?PRG48
PRINT STR
CRLF
RETURN 2
?PRG48: PRINTI "The "
PRINTD OBJ
PRINTI " is closed."
CRLF
SET 'P-IT-OBJECT,OBJ
RETURN 2
?CCL5: ZERO? LIT \?PRG58
RANDOM 100
GRTR? 80,STACK \?PRG58
EQUAL? WINNER,ADVENTURER \?PRG58
FSET? HERE,NONLANDBIT /?PRG58
CALL JIGS-UP,STR?12
RSTACK
?PRG58: PRINT CANT-GO
RETURN 2
.FUNCT V-WALK-AROUND
PRINTR "Use compass directions for movement."
.FUNCT V-WALK-TO
ZERO? PRSO /?CCL3
IN? PRSO,HERE /?PRG8
CALL GLOBAL-IN?,PRSO,HERE
ZERO? STACK /?CCL3
?PRG8: PRINTR "It's here!"
?CCL3: CALL V-WALK-AROUND
RSTACK
.FUNCT V-WAVE
CALL HACK-HACK,STR?13
RSTACK
.FUNCT V-YELL
PRINTR "Aaaarrrrgggghhhh!"
.FUNCT V-ZORK
PRINTR "At your service!"
.FUNCT DESCRIBE-ROOM,LOOK?=0,V?,STR,AV
LOC WINNER >AV
ZERO? LOOK? /?PRD3
SET 'V?,LOOK?
JUMP ?PEN1
?PRD3: EQUAL? VERBOSITY,2 /?PRD4
PUSH 0
JUMP ?PRD5
?PRD4: PUSH 1
?PRD5: SET 'V?,STACK
?PEN1: ZERO? LIT \?CND6
PRINTI "It is pitch black. You are likely to be eaten by a grue."
CRLF
RFALSE
?CND6: FSET? HERE,TOUCHBIT /?CND10
FSET HERE,TOUCHBIT
SET 'V?,TRUE-VALUE
?CND10: IN? HERE,ROOMS \?CND12
PRINTD HERE
FSET? AV,VEHBIT \?CND16
PRINTI ", in the "
PRINTD AV
?CND16: CRLF
?CND12: ZERO? LOOK? \?CCL22
GRTR? VERBOSITY,0 /?CCL22
EQUAL? HERE,ZORK3 \FALSE
?CCL22: ZERO? V? /?CCL28
GETP HERE,P?ACTION
CALL STACK,M-LOOK
ZERO? STACK \TRUE
?CCL28: ZERO? V? /?CCL32
GETP HERE,P?LDESC >STR
ZERO? STR /?CCL32
PRINT STR
CRLF
JUMP ?CND26
?CCL32: GETP HERE,P?ACTION
CALL STACK,M-FLASH
?CND26: EQUAL? HERE,AV /FALSE
FSET? AV,VEHBIT \FALSE
GETP AV,P?ACTION
CALL STACK,M-LOOK
RSTACK
.FUNCT DESCRIBE-OBJECTS,V?=0
FIRST? HERE \FALSE
ZERO? V? /?PRD6
SET 'V?,V?
JUMP ?PEN4
?PRD6: EQUAL? VERBOSITY,2 /?PRD7
PUSH 0
JUMP ?PRD8
?PRD7: PUSH 1
?PRD8: SET 'V?,STACK
?PEN4: CALL PRINT-CONT,HERE,V?,-1
RSTACK
.FUNCT DESCRIBE-OBJECT,OBJ,V?,LEVEL,STR=0,AV
SET 'DESC-OBJECT,OBJ
ZERO? LEVEL \?CCL3
GETP OBJ,P?DESCFCN
CALL STACK,M-OBJDESC
ZERO? STACK \TRUE
?CCL3: ZERO? LEVEL \?CCL7
FSET? OBJ,TOUCHBIT /?PRD11
GETP OBJ,P?FDESC >STR
ZERO? STR \?PRG14
?PRD11: GETP OBJ,P?LDESC >STR
ZERO? STR /?CCL7
?PRG14: PRINT STR
JUMP ?CND1
?CCL7: ZERO? LEVEL \?PRG26
PRINTI "There is a "
PRINTD OBJ
PRINTI " here"
FSET? OBJ,ONBIT \?PRG24
PRINTI " (providing light)"
?PRG24: PRINTC 46
JUMP ?CND1
?PRG26: GET INDENTS,LEVEL
PRINT STACK
PRINTI "A "
PRINTD OBJ
FSET? OBJ,ONBIT \?CND1
PRINTI " (providing light)"
?CND1: EQUAL? OBJ,SPELL-VICTIM \?CND34
EQUAL? SPELL-USED,W?FLOAT \?CND34
PRINTI " (floating in midair)"
?CND34: CRLF
CALL SEE-INSIDE?,OBJ
ZERO? STACK /FALSE
FIRST? OBJ \FALSE
CALL PRINT-CONT,OBJ,V?,LEVEL
RSTACK
.FUNCT PRINT-CONTENTS,OBJ,F,N,1ST?=1,IT?=0,TWO?=0
FIRST? OBJ >F \FALSE
?PRG4: NEXT? F >N /?BOGUS6
?BOGUS6: ZERO? 1ST? /?PRG10
SET '1ST?,FALSE-VALUE
JUMP ?PRG16
?PRG10: PRINTI ", "
ZERO? N \?PRG16
PRINTI "and "
?PRG16: PRINTI "a "
PRINTD F
ZERO? IT? \?CCL20
ZERO? TWO? \?CCL20
SET 'IT?,F
JUMP ?CND18
?CCL20: SET 'TWO?,TRUE-VALUE
SET 'IT?,FALSE-VALUE
?CND18: SET 'F,N
ZERO? F \?PRG4
ZERO? IT? /TRUE
ZERO? TWO? \TRUE
SET 'P-IT-OBJECT,IT?
RTRUE
.FUNCT PRINT-CONT,OBJ,V?=0,LEVEL=0,Y,1ST?,SHIT,AV,STR,PV?=0,INV?=0
FIRST? OBJ >Y \TRUE
LOC WINNER >AV
ZERO? AV /?CCL5
FSET? AV,VEHBIT /?CND3
?CCL5: SET 'AV,FALSE-VALUE
?CND3: SET '1ST?,TRUE-VALUE
SET 'SHIT,TRUE-VALUE
LOC OBJ
EQUAL? WINNER,OBJ,STACK \?PRG11
SET 'INV?,TRUE-VALUE
FIRST? OBJ >Y /?PRG46
?PRG46: ZERO? Y \?CCL50
ZERO? PV? /?REP47
ZERO? AV /?REP47
FIRST? AV \?REP47
INC 'LEVEL
CALL PRINT-CONT,AV,V?,LEVEL
?REP47: ZERO? 1ST? /TRUE
ZERO? SHIT \FALSE
RTRUE
?PRG11: ZERO? Y \?CCL15
ZERO? LEVEL \?CND16
EQUAL? SPELL?,S-FANTASIZE \?CND16
RANDOM 100
GRTR? 20,STACK \?CND16
PRINTI "There is a "
CALL PICK-ONE,FANTASIES
PRINT STACK
PRINTI " here."
CRLF
SET '1ST?,FALSE-VALUE
?CND16: ZERO? 1ST? /TRUE
RFALSE
?CCL15: EQUAL? Y,AV \?CCL27
SET 'PV?,TRUE-VALUE
JUMP ?CND13
?CCL27: EQUAL? Y,WINNER /?CND13
FSET? Y,INVISIBLE /?CND13
FSET? Y,TOUCHBIT /?CND13
GETP Y,P?FDESC >STR
ZERO? STR /?CND13
FSET? Y,NDESCBIT /?CND33
PRINT STR
CRLF
SET 'SHIT,FALSE-VALUE
?CND33: CALL SEE-INSIDE?,Y
ZERO? STACK /?CND13
LOC Y
GETP STACK,P?DESCFCN
ZERO? STACK \?CND13
FIRST? Y \?CND13
CALL PRINT-CONT,Y,V?,0
ZERO? STACK /?CND13
SET '1ST?,FALSE-VALUE
?CND13: NEXT? Y >Y /?PRG11
JUMP ?PRG11
?CCL50: EQUAL? Y,AV,ADVENTURER /?CND48
FSET? Y,INVISIBLE /?CND48
ZERO? INV? \?CCL57
FSET? Y,TOUCHBIT /?CCL57
GETP Y,P?FDESC
ZERO? STACK \?CND48
?CCL57: FSET? Y,NDESCBIT /?CCL65
ZERO? 1ST? /?CND66
CALL FIRSTER,OBJ,LEVEL
ZERO? STACK /?CND68
LESS? LEVEL,0 \?CND68
SET 'LEVEL,0
?CND68: INC 'LEVEL
SET '1ST?,FALSE-VALUE
?CND66: LESS? LEVEL,0 \?CND72
SET 'LEVEL,0
?CND72: CALL DESCRIBE-OBJECT,Y,V?,LEVEL
JUMP ?CND48
?CCL65: FIRST? Y \?CND48
CALL SEE-INSIDE?,Y
ZERO? STACK /?CND48
INC 'LEVEL
CALL PRINT-CONT,Y,V?,LEVEL
DEC 'LEVEL
?CND48: NEXT? Y >Y /?PRG46
JUMP ?PRG46
.FUNCT FIRSTER,OBJ,LEVEL
EQUAL? OBJ,WINNER \?CCL3
PRINTR "You have:"
?CCL3: IN? OBJ,ROOMS /FALSE
GRTR? LEVEL,0 \?CND8
GET INDENTS,LEVEL
PRINT STACK
?CND8: FSET? OBJ,SURFACEBIT \?CCL14
PRINTI "Sitting on the "
PRINTD OBJ
PRINTR " is: "
?CCL14: FSET? OBJ,ACTORBIT \?PRG21
PRINTI "The "
PRINTD OBJ
PRINTR " is holding: "
?PRG21: PRINTI "The "
PRINTD OBJ
PRINTR " contains:"
.FUNCT SEE-INSIDE?,OBJ
FSET? OBJ,INVISIBLE /FALSE
FSET? OBJ,TRANSBIT /TRUE
FSET? OBJ,OPENBIT /TRUE
RFALSE
.FUNCT JIGS-UP,DESC,F,N
PRINT DESC
CRLF
EQUAL? ADVENTURER,WINNER /?CND3
PRINTI "
**** The "
PRINTD WINNER
PRINTI " has died ****"
CRLF
CRLF
REMOVE WINNER
SET 'WINNER,ADVENTURER
LOC WINNER >HERE
RETURN 2
?CND3: SUB SCORE,10 >SCORE
PRINTI "
**** You have died ****"
CRLF
CRLF
SET 'DEAD,TRUE-VALUE
SET 'SPELL?,FALSE-VALUE
PUTP ADVENTURER,P?ACTION,0
INC 'DEATHS
MOVE WINNER,HERE
FCLEAR DEAD-PALANTIR-1,TOUCHBIT
FCLEAR DEAD-PALANTIR-2,TOUCHBIT
FCLEAR DEAD-PALANTIR-3,TOUCHBIT
IN? LAMP,WINNER \?CND11
MOVE LAMP,INSIDE-THE-BARROW
?CND11: FIRST? WINNER >N /?PRG14
?PRG14: SET 'F,N
ZERO? F /?REP15
NEXT? F >N /?BOGUS18
?BOGUS18: GETP F,P?VALUE
ZERO? STACK /?CCL21
MOVE F,CAROUSEL-ROOM
JUMP ?PRG14
?CCL21: MOVE F,GAZEBO
JUMP ?PRG14
?REP15: CALL GOTO,DEAD-PALANTIR-1
SET 'P-CONT,FALSE-VALUE
CALL DRAGON-LEAVES
CALL INT,I-MATCH
PUT STACK,0,0
RETURN 2
.FUNCT NO-GO-TELL,AV,WLOC
PRINTI "You can't go there "
ZERO? AV /?PRG8
PRINTI "in a "
PRINTD WLOC
JUMP ?PRG10
?PRG8: PRINTI "without a vehicle"
?PRG10: PRINT PERIOD-CR
RTRUE
.FUNCT GOTO,RM,V?=1,LB,WLOC,AV=0,OLIT,OHERE
FSET? RM,RLANDBIT /?PRD1
PUSH 0
JUMP ?PRD2
?PRD1: PUSH 1
?PRD2: SET 'LB,STACK
LOC WINNER >WLOC
SET 'OLIT,LIT
SET 'OHERE,HERE
FSET? WLOC,VEHBIT \?CND3
GETP WLOC,P?VTYPE >AV
?CND3: ZERO? LB \?CCL7
ZERO? AV \?CCL7
CALL NO-GO-TELL,AV,WLOC
RFALSE
?CCL7: ZERO? LB \?CCL11
FSET? RM,AV /?CCL11
CALL NO-GO-TELL,AV,WLOC
RFALSE
?CCL11: FSET? HERE,RLANDBIT \?CCL15
ZERO? LB /?CCL15
ZERO? AV /?CCL15
EQUAL? AV,RLANDBIT /?CCL15
FSET? RM,AV /?CCL15
CALL NO-GO-TELL,AV,WLOC
RFALSE
?CCL15: ZERO? LB /?CND21
FSET? HERE,RLANDBIT /?CND21
ZERO? DEAD \?CND21
FSET? WLOC,VEHBIT \?CND21
EQUAL? WLOC,BALLOON \?CCL29
PRINTI "The balloon lands."
CRLF
JUMP ?CND21
?CCL29: FSET? WLOC,VEHBIT \?CND21
PRINTI "The "
PRINTD WLOC
PRINT STOPS
?CND21: ZERO? AV /?CCL37
MOVE WLOC,RM
JUMP ?CND35
?CCL37: MOVE WINNER,RM
?CND35: SET 'HERE,RM
CALL LIT?,HERE >LIT
ZERO? OLIT \?CND38
ZERO? LIT \?CND38
RANDOM 100
GRTR? 80,STACK \?CND38
PRINTI "Oh, no! A lurking grue slithered into the "
LOC WINNER
FSET? STACK,VEHBIT \?PRG50
LOC WINNER
PRINTD STACK
JUMP ?CND45
?PRG50: PRINTI "room"
?CND45: CALL JIGS-UP,STR?20
RTRUE
?CND38: ZERO? LIT \?CND52
EQUAL? WINNER,ADVENTURER \?CND52
PRINTI "You have moved into a dark place."
CRLF
SET 'P-CONT,FALSE-VALUE
?CND52: GETP HERE,P?ACTION
CALL STACK,M-ENTER
CALL SCORE-OBJ,RM
EQUAL? HERE,RM \TRUE
EQUAL? ADVENTURER,WINNER /?CCL62
IN? ADVENTURER,OHERE \?CCL62
PRINTI "The "
PRINTD WINNER
PRINTR " leaves the room."
?CCL62: ZERO? V? /TRUE
EQUAL? WINNER,ADVENTURER \TRUE
CALL DESCRIBE-ROOM
ZERO? LIT /TRUE
GRTR? VERBOSITY,0 \TRUE
CALL DESCRIBE-OBJECTS
RTRUE
.FUNCT ITAKE,VB=1,CNT,OBJ,?TMP1
FSET? PRSO,TAKEBIT /?CCL3
ZERO? VB /FALSE
CALL PICK-ONE,YUKS
PRINT STACK
CRLF
RFALSE
?CCL3: EQUAL? PRSO,SPELL-VICTIM \?CCL9
EQUAL? SPELL-USED,W?FLOAT,W?FREEZE \?CCL9
EQUAL? SPELL-USED,W?FLOAT \?PRG17
PRINTI "You can't reach that. It's floating above your head."
CRLF
RFALSE
?PRG17: PRINTI "It seems rooted to the spot."
CRLF
RFALSE
?CCL9: LOC PRSO
FSET? STACK,CONTBIT \?CCL20
LOC PRSO
FSET? STACK,OPENBIT \FALSE
?CCL20: LOC PRSO
IN? STACK,WINNER /?CCL24
CALL WEIGHT,PRSO >?TMP1
CALL WEIGHT,WINNER
ADD ?TMP1,STACK
GRTR? STACK,LOAD-ALLOWED \?CCL24
ZERO? VB /?PRG38
PRINTI "Your load is too heavy"
LESS? LOAD-ALLOWED,100 \?PRG36
PRINTI ", especially in light of your condition."
JUMP ?CND31
?PRG36: PRINTC 46
?CND31: CRLF
?PRG38: RETURN 2
?CCL24: EQUAL? PRSA,V?TAKE \?CCL41
CALL CCOUNT,WINNER >CNT
GRTR? CNT,FUMBLE-NUMBER \?CCL41
MUL CNT,FUMBLE-PROB >?TMP1
RANDOM 100
GRTR? ?TMP1,STACK \?CCL41
PRINTI "You're holding too many things already!"
CRLF
RFALSE
?CCL41: MOVE PRSO,WINNER
FCLEAR PRSO,NDESCBIT
FSET PRSO,TOUCHBIT
CALL SCORE-OBJ,PRSO
RTRUE
.FUNCT IDROP
IN? PRSO,WINNER /?CCL3
LOC PRSO
IN? STACK,WINNER /?CCL3
PRINTI "You're not carrying the "
PRINTD PRSO
PRINT PERIOD-CR
RFALSE
?CCL3: IN? PRSO,WINNER /?CCL9
LOC PRSO
FSET? STACK,OPENBIT /?CCL9
PRINTI "The "
PRINTD PRSO
PRINTI " is closed."
CRLF
RFALSE
?CCL9: LOC WINNER
MOVE PRSO,STACK
RTRUE
.FUNCT CCOUNT,OBJ,CNT=0,X
FIRST? OBJ >X /?PRG3
RETURN CNT
?PRG3: INC 'CNT
NEXT? X >X /?PRG3
RETURN CNT
.FUNCT WEIGHT,OBJ,CONT,WT=0
FIRST? OBJ >CONT \?CND1
?PRG3: CALL WEIGHT,CONT
ADD WT,STACK >WT
NEXT? CONT >CONT /?PRG3
?CND1: GETP OBJ,P?SIZE
ADD WT,STACK
RSTACK
.ENDI