sorcerer/coal.zap
historicalsource 9be53d703b Final Revision
2019-04-13 21:15:11 -04:00

929 lines
23 KiB
Plaintext

.FUNCT COAL-F
EQUAL? PRSA,V?TAKE \FALSE
PRINTR "Such menial tasks are best left to troglodytes."
.FUNCT SOOTY-ROOM-F,RARG
EQUAL? RARG,M-ENTER \FALSE
FSET? SOOTY-ROOM,TOUCHBIT /FALSE
ADD SCORE,20 >SCORE
RETURN SCORE
.FUNCT SOOTY-ROOM-EXIT-F
FSET? COAL-BIN-ROOM,TOUCHBIT \?ELS5
PRINTI "That passage is now completely blocked by a cave-in."
CRLF
RFALSE
?ELS5: RETURN COAL-BIN-ROOM
.FUNCT TIMBER-PSEUDO
EQUAL? PRSA,V?MOVE \FALSE
CALL JIGS-UP,STR?299
RSTACK
.FUNCT COAL-BIN-ROOM-F,RARG
EQUAL? RARG,M-ENTER \?ELS5
FSET? HERE,TOUCHBIT /?ELS10
RANDOM 873 >COMBO
PUT VEZZAS,5,0
PRINTI "There is a rumbling noise behind you as the ceiling of the tunnel collapses, blocking your retreat! The air smells strongly of coal gas. "
ZERO? VILSTUED /?ELS15
CALL QUEUE,I-OLDER-SELF,2
PUT STACK,0,1
PRINTI "Good thing you took that vilstu potion"
JUMP ?CND13
?ELS15: CALL QUEUE,I-SUFFOCATE,2
PUT STACK,0,1
PRINTI "You won't survive long in this atmosphere"
?CND13: PRINTI "."
CRLF
CRLF
RTRUE
?ELS10: ZERO? GOLMACKED /FALSE
CALL QUEUE,I-YOUNGER-SELF,-1
PUT STACK,0,1
MOVE YOUNGER-SELF,HERE
ZERO? YOUNGER-HAS-SPELL-BOOK /?CND28
IN? SPELL-BOOK,LAGOON-FLOOR \?CND32
SET 'BOOK-BELONGS-IN-LAGOON,TRUE-VALUE
?CND32: MOVE SPELL-BOOK,YOUNGER-SELF
FSET SPELL-BOOK,TRYTAKEBIT
?CND28: CALL LIT?,HERE >LIT
RETURN LIT
?ELS5: EQUAL? RARG,M-END \FALSE
RANDOM 100
LESS? 35,STACK /FALSE
CRLF
PRINTR "A few lumps of coal spill from the coal chute."
.FUNCT I-SUFFOCATE
CRLF
ZERO? SUFFOCATE-WARNING /?ELS5
CALL JIGS-UP,STR?301
RSTACK
?ELS5: SET 'SUFFOCATE-WARNING,TRUE-VALUE
CALL QUEUE,I-SUFFOCATE,2
PUT STACK,0,1
PRINTR "You are about to pass out from the bad air."
.FUNCT COAL-BIN-F
EQUAL? PRSA,V?LOOK-INSIDE \?ELS5
PRINTR "It's full of coal."
?ELS5: EQUAL? PRSA,V?DIG,V?SEARCH \FALSE
PRINTR "You find nothing of interest."
.FUNCT UPPER-CHUTE-F
EQUAL? PRSA,V?LEAP,V?THROUGH \?ELS5
EQUAL? HERE,TOP-OF-CHUTE,SLANTED-ROOM \?ELS10
CALL DO-WALK,P?DOWN
RSTACK
?ELS10: CALL LOOK-AROUND-YOU
RSTACK
?ELS5: EQUAL? PRSA,V?CLIMB-FOO,V?CLIMB-UP \?ELS14
EQUAL? HERE,TOP-OF-CHUTE \?ELS19
CALL BOTTOM-TOP-OF-CHUTE,TRUE-VALUE
RSTACK
?ELS19: CALL DO-WALK,P?UP
RSTACK
?ELS14: EQUAL? PRSA,V?CLIMB-DOWN \?ELS23
EQUAL? HERE,COAL-BIN-ROOM \?ELS28
CALL BOTTOM-TOP-OF-CHUTE
RSTACK
?ELS28: CALL DO-WALK,P?DOWN
RSTACK
?ELS23: EQUAL? PRSA,V?LOWER-INTO,V?PUT \?ELS32
EQUAL? PRSI,UPPER-CHUTE \?ELS32
EQUAL? HERE,TOP-OF-CHUTE,SLANTED-ROOM \?ELS39
EQUAL? PRSO,BEAM \?ELS44
ZERO? ROPE-TO-BEAM /?ELS44
MOVE ROPE,COAL-BIN-ROOM
MOVE BEAM,COAL-BIN-ROOM
SET 'ROPE-PLACED,FALSE-VALUE
FCLEAR BEAM,TRYTAKEBIT
FCLEAR ROPE,TRYTAKEBIT
CALL BEAM-AND-ROPE
RSTACK
?ELS44: EQUAL? PRSO,ROPE \?ELS48
ZERO? ROPE-TO-BEAM /?ELS48
CALL DROP-BEAM-FIRST
ZERO? STACK \TRUE
SET 'ROPE-PLACED,TRUE-VALUE
FSET BEAM,TRYTAKEBIT
FSET ROPE,TRYTAKEBIT
MOVE ROPE,HERE
CALL ROPE-HANGS
RSTACK
?ELS48: GETP PRSO,P?SIZE
LESS? STACK,20 \?ELS58
MOVE PRSO,DIAL
JUMP ?CND56
?ELS58: MOVE PRSO,COAL-BIN-ROOM
?CND56: CALL DISAPPEARS-DOWN-CHUTE
RSTACK
?ELS39: EQUAL? HERE,COAL-BIN-ROOM \FALSE
CALL LOOK-AROUND-YOU
RSTACK
?ELS32: EQUAL? PRSA,V?LOOK-INSIDE \FALSE
CALL PERFORM,V?RESEARCH,UPPER-CHUTE
RTRUE
.FUNCT LOWER-CHUTE-F
EQUAL? PRSA,V?CLIMB-FOO,V?CLIMB-UP \?ELS5
EQUAL? HERE,COAL-BIN-ROOM \?ELS10
CALL BOTTOM-TOP-OF-CHUTE,TRUE-VALUE
RSTACK
?ELS10: CALL DO-WALK,P?UP
RSTACK
?ELS5: EQUAL? PRSA,V?LEAP,V?THROUGH,V?CLIMB-DOWN \?ELS14
EQUAL? HERE,COVE \?ELS19
CALL BOTTOM-TOP-OF-CHUTE
RSTACK
?ELS19: CALL DO-WALK,P?DOWN
RSTACK
?ELS14: EQUAL? PRSA,V?LOWER-INTO,V?PUT \?ELS23
EQUAL? PRSI,LOWER-CHUTE \?ELS23
EQUAL? HERE,COAL-BIN-ROOM \?ELS30
EQUAL? PRSO,BEAM \?ELS35
ZERO? ROPE-TO-BEAM /?ELS35
MOVE ROPE,LAGOON-FLOOR
MOVE BEAM,LAGOON-FLOOR
SET 'ROPE-IN-LOWER-CHUTE,FALSE-VALUE
FCLEAR ROPE,TRYTAKEBIT
CALL BEAM-AND-ROPE
RSTACK
?ELS35: EQUAL? PRSO,ROPE \?ELS39
ZERO? ROPE-TO-BEAM /?ELS39
CALL DROP-BEAM-FIRST
ZERO? STACK \TRUE
SET 'ROPE-IN-LOWER-CHUTE,TRUE-VALUE
FSET ROPE,TRYTAKEBIT
MOVE ROPE,HERE
CALL ROPE-HANGS
RSTACK
?ELS39: MOVE PRSO,LAGOON-FLOOR
FSET? PRSO,SCROLLBIT /?THN50
EQUAL? PRSO,SPELL-BOOK \?CND47
?THN50: FSET PRSO,MUNGBIT
?CND47: CALL DISAPPEARS-DOWN-CHUTE
RSTACK
?ELS30: EQUAL? HERE,COAL-BIN-ROOM \FALSE
CALL LOOK-AROUND-YOU
RSTACK
?ELS23: EQUAL? PRSA,V?LOOK-INSIDE \FALSE
CALL PERFORM,V?RESEARCH,LOWER-CHUTE
RTRUE
.FUNCT DROP-BEAM-FIRST
CALL HELD?,BEAM
ZERO? STACK /FALSE
PRINTR "You'll have to drop the beam before doing that."
.FUNCT BEAM-AND-ROPE
PRINTR "The beam and rope both slide into the chute."
.FUNCT ROPE-HANGS
PRINTR "The rope hangs from the beam, into the chute."
.FUNCT DISAPPEARS-DOWN-CHUTE
PRINTI "The "
PRINTD PRSO
PRINTR " disappears into the chute."
.FUNCT OLDER-SELF-F
EQUAL? WINNER,OLDER-SELF \?ELS5
PRINTI "Your older self ignores your words."
CRLF
CALL STOP
RSTACK
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS9
PRINT OLDER-INTRO
PRINTR " The stranger is carrying a smelly scroll."
?ELS9: EQUAL? PRSA,V?GIVE \?ELS13
EQUAL? PRSO,SPELL-BOOK \?ELS13
MOVE SPELL-BOOK,OLDER-SELF
FSET SPELL-BOOK,TRYTAKEBIT
PRINTR "Your older self accepts the spell book gratefully."
?ELS13: EQUAL? PRSA,V?FOLLOW \?ELS19
ZERO? TWIN-FOLLOW /?ELS19
CALL DO-WALK,P?DOWN
RSTACK
?ELS19: EQUAL? PRSA,V?AIMFIZ \?ELS23
CALL V-SWANZO
RSTACK
?ELS23: EQUAL? PRSA,V?YOMIN \FALSE
PRINTR "The thoughts of your older self center on attempting to breathe."
.FUNCT I-OLDER-SELF
CALL QUEUE,I-OLDER-SELF,-1
PUT STACK,0,1
INC 'OLDER-COUNTER
EQUAL? OLDER-COUNTER,1 \?ELS5
MOVE OLDER-SELF,COAL-BIN-ROOM
CALL HELD?,SPELL-BOOK
ZERO? STACK /?CND6
SET 'YOUNGER-HAS-SPELL-BOOK,TRUE-VALUE
?CND6: EQUAL? HERE,COAL-BIN-ROOM \?ELS13
CRLF
PRINTI "Someone slides out of the coal chute, and lands near the bin. "
PRINT OLDER-INTRO
CRLF
SET 'OLDER-INTRODUCED,TRUE-VALUE
RETURN OLDER-INTRODUCED
?ELS13: EQUAL? HERE,DIAL-ROOM \?ELS19
CRLF
PRINTR "You here a commotion from the room to the west."
?ELS19: CALL INT,I-OLDER-SELF
PUT STACK,0,0
RFALSE
?ELS5: EQUAL? OLDER-COUNTER,2 \?ELS25
CALL DATA-TO-TABLE,MOVE-ONE-TABLE
EQUAL? HERE,COAL-BIN-ROOM \?ELS30
CRLF
ZERO? OLDER-INTRODUCED \?CND31
SET 'OLDER-INTRODUCED,TRUE-VALUE
PRINTI "Someone is standing near the coal bin. "
PRINT OLDER-INTRO
CRLF
CRLF
?CND31: SET 'COMBO-DISCOVERED,TRUE-VALUE
CALL OLDER-TELLS-COMBO
IN? SPELL-BOOK,OLDER-SELF /?CND36
PRINTI " Your older self then looks at you, almost expectantly."
?CND36: CRLF
RTRUE
?ELS30: CRLF
PRINTR "From the next room you glimpse someone gasping for air."
?ELS25: EQUAL? OLDER-COUNTER,3 \?ELS46
CALL DATA-TO-TABLE,MOVE-TWO-TABLE
EQUAL? HERE,COAL-BIN-ROOM \?ELS51
ZERO? OLDER-INTRODUCED \?CND52
SET 'OLDER-INTRODUCED,TRUE-VALUE
CRLF
PRINTI "Someone is standing near the coal bin. "
PRINT OLDER-INTRO
CRLF
?CND52: IN? SPELL-BOOK,OLDER-SELF \?ELS61
MOVE SPELL-BOOK,YOUNGER-SELF
FSET SPELL-BOOK,TRYTAKEBIT
MOVE OLDER-SELF,DIAL
MOVE VARDIK-SCROLL,DIAL
SET 'TWIN-FOLLOW,TRUE-VALUE
CALL QUEUE,I-TWIN-UNFOLLOW,1
PUT STACK,0,1
CRLF
PRINTR "Your look-alike dives into the lower chute and slides out of view."
?ELS61: ZERO? COMBO-DISCOVERED \?ELS65
CRLF
CALL OLDER-TELLS-COMBO
CRLF
RTRUE
?ELS65: CRLF
PRINTR """Give me...the spell book,"" croaks your older self."
?ELS51: MOVE OLDER-SELF,DIAL
MOVE VARDIK-SCROLL,DIAL
CRLF
PRINTR "Someone in the coal bin room dives into the lower chute."
?ELS46: CALL DATA-TO-TABLE,MOVE-THREE-TABLE
CALL INT,I-OLDER-SELF
PUT STACK,0,0
EQUAL? HERE,COAL-BIN-ROOM \?CND76
IN? OLDER-SELF,HERE \?CND76
CRLF
PRINTI "Your older self dives into the lower chute."
CRLF
?CND76: MOVE OLDER-SELF,DIAL
MOVE VARDIK-SCROLL,DIAL
RTRUE
.FUNCT OLDER-TELLS-COMBO
PRINTI "Your disheveled ""twin"" is having difficulty breathing, but gasps, ""The combination is "
PRINTN COMBO
PRINTI "."""
RTRUE
.FUNCT I-TWIN-UNFOLLOW
SET 'TWIN-FOLLOW,FALSE-VALUE
RFALSE
.FUNCT DATA-TO-TABLE,TABLE
PUT TABLE,1,PRSA
PUT TABLE,2,PRSO
PUT TABLE,3,PRSI
RTRUE
.FUNCT YOUNGER-SELF-F
EQUAL? YOUNGER-SELF,WINNER \?ELS5
EQUAL? PRSA,V?COMBO \?ELS10
EQUAL? PRSO,INTNUM \?ELS10
EQUAL? P-NUMBER,COMBO \?CND13
SET 'COMBO-REVEALED,TRUE-VALUE
?CND13: PRINTR "Your younger self seems surprised by your statement."
?ELS10: EQUAL? PRSA,V?GIVE \?ELS19
EQUAL? PRSO,SPELL-BOOK \?ELS19
EQUAL? PRSI,ME \?ELS19
CALL SPELL-BOOK-PASS-OFF-CHECK
ZERO? STACK \TRUE
?ELS19: PRINTI "Your younger self seems confused, and doesn't respond."
CRLF
CALL STOP
RSTACK
?ELS5: EQUAL? PRSA,V?YOMIN \?ELS27
PRINTR "The thoughts of your younger self are confused, and seem to center on whether or not to perform a SAVE."
?ELS27: EQUAL? PRSA,V?AIMFIZ \?ELS31
CALL V-SWANZO
RSTACK
?ELS31: EQUAL? PRSA,V?EXAMINE \FALSE
PRINTI "It's almost like looking in a mirror. Your younger self looks confused"
IN? SPELL-BOOK,YOUNGER-SELF \?CND36
PRINTI ", and is carrying a spell book"
?CND36: PRINTR "."
.FUNCT YOUNGER-SELF-DESCFCN,TABLE
LESS? YOUNGER-COUNTER,3 \?ELS3
SET 'TABLE,MOVE-ONE-TABLE
JUMP ?CND1
?ELS3: EQUAL? YOUNGER-COUNTER,3 \?ELS5
SET 'TABLE,MOVE-TWO-TABLE
JUMP ?CND1
?ELS5: SET 'TABLE,MOVE-THREE-TABLE
?CND1: FSET? YOUNGER-SELF,TOUCHBIT \?ELS12
PRINTI "Your younger self is here"
ZERO? YOUNGER-HAS-SPELL-BOOK /?ELS19
PRINTR ", holding your spell book."
?ELS19: PRINTR "."
?ELS12: FSET YOUNGER-SELF,TOUCHBIT
PRINTI "Standing here, looking quite confused, is someone who could only be your younger self -- an exact duplicate of you, but cleaner and breathing with considerably less difficulty. You remember seeing this scene from another viewpoint just a short while ago."
ZERO? YOUNGER-HAS-SPELL-BOOK /?CND31
PRINTI " Among the items carried by your ""twin"" is your spell book."
?CND31: CRLF
RTRUE
.FUNCT SPELL-BOOK-PASS-OFF-CHECK,TABLE
EQUAL? YOUNGER-COUNTER,1 \?ELS3
SET 'TABLE,MOVE-ONE-TABLE
JUMP ?CND1
?ELS3: EQUAL? YOUNGER-COUNTER,2 \?ELS5
SET 'TABLE,MOVE-TWO-TABLE
JUMP ?CND1
?ELS5: EQUAL? YOUNGER-COUNTER,3 \FALSE
SET 'TABLE,MOVE-THREE-TABLE
?CND1: GET TABLE,2
EQUAL? STACK,SPELL-BOOK \?ELS18
GET TABLE,3
EQUAL? STACK,OLDER-SELF \?ELS18
GET TABLE,1
EQUAL? STACK,V?GIVE /TRUE
?ELS18: GET TABLE,2
EQUAL? STACK,OLDER-SELF \FALSE
GET TABLE,3
EQUAL? STACK,SPELL-BOOK \FALSE
GET TABLE,1
EQUAL? STACK,V?SGIVE \FALSE
RTRUE
.FUNCT I-YOUNGER-SELF
INC 'YOUNGER-COUNTER
IN? YOUNGER-SELF,HERE \FALSE
ZERO? LIT \?ELS7
ZERO? BLORTED /FALSE
?ELS7: EQUAL? YOUNGER-COUNTER,2 \?ELS11
CALL YOUNGER-ACTIONS,MOVE-ONE-TABLE
RSTACK
?ELS11: EQUAL? YOUNGER-COUNTER,3 \?ELS13
CALL YOUNGER-ACTIONS,MOVE-TWO-TABLE
RSTACK
?ELS13: EQUAL? YOUNGER-COUNTER,4 \FALSE
CALL YOUNGER-ACTIONS,MOVE-THREE-TABLE
RSTACK
.FUNCT YOUNGER-ACTIONS,TABLE
GET TABLE,2
ZERO? STACK \?CND1
PUT TABLE,2,NOT-HERE-OBJECT
?CND1: GET TABLE,3
ZERO? STACK \?CND4
PUT TABLE,3,NOT-HERE-OBJECT
?CND4: GET TABLE,2
EQUAL? STACK,OLDER-SELF \?ELS9
PUT TABLE,2,YOU-OBJECT
JUMP ?CND7
?ELS9: GET TABLE,2
EQUAL? STACK,ME \?CND7
PUT TABLE,2,YOUNGER-SELF
?CND7: GET TABLE,3
EQUAL? STACK,OLDER-SELF \?ELS14
PUT TABLE,3,YOU-OBJECT
JUMP ?CND12
?ELS14: GET TABLE,3
EQUAL? STACK,ME \?CND12
PUT TABLE,3,YOUNGER-SELF
?CND12: CRLF
PRINTI "Your younger self "
GET TABLE,2
EQUAL? STACK,SPELL-BOOK \?ELS27
GET TABLE,3
EQUAL? STACK,YOU-OBJECT \?ELS27
GET TABLE,1
EQUAL? STACK,V?GIVE /?THN24
?ELS27: GET TABLE,2
EQUAL? STACK,YOU-OBJECT \?ELS23
GET TABLE,3
EQUAL? STACK,SPELL-BOOK \?ELS23
GET TABLE,1
EQUAL? STACK,V?SGIVE \?ELS23
?THN24: MOVE SPELL-BOOK,PROTAGONIST
FCLEAR SPELL-BOOK,TRYTAKEBIT
PRINTR "hands you your spell book!"
?ELS23: GET TABLE,1
EQUAL? STACK,V?VERBOSE,V?BRIEF,V?SUPER-BRIEF /?THN34
GET TABLE,1
EQUAL? STACK,V?SCORE,V?SCRIPT,V?UNSCRIPT \?ELS33
?THN34: PRINTR "is performing a spell of high technology."
?ELS33: GET TABLE,1
EQUAL? STACK,V?ANSWER,V?REPLY,V?CURSE /?THN40
GET TABLE,1
EQUAL? STACK,V?HELLO,V?TELL,V?ASK-FOR /?THN40
GET TABLE,1
EQUAL? STACK,V?SAY,V?THANK,V?YELL /?THN40
GET TABLE,1
EQUAL? STACK,V?ASK-ABOUT \?ELS39
?THN40: PRINTR "is attempting to talk."
?ELS39: GET TABLE,1
EQUAL? STACK,V?CAST,V?GNUSTO,V?FROTZ /?THN46
GET TABLE,1
EQUAL? STACK,V?REZROV,V?IZYUK,V?FWEEP /?THN46
GET TABLE,1
EQUAL? STACK,V?AIMFIZ,V?SWANZO,V?VARDIK /?THN46
GET TABLE,1
EQUAL? STACK,V?MEEF,V?PULVER,V?GOLMAC /?THN46
GET TABLE,1
EQUAL? STACK,V?YOMIN,V?VEZZA,V?GASPAR /?THN46
GET TABLE,1
EQUAL? STACK,V?YONK,V?MALYON \?ELS45
?THN46: PRINTR "is casting a familiar spell."
?ELS45: GET TABLE,1
EQUAL? STACK,V?INVENTORY \?ELS51
PRINTR "is doing an inventory."
?ELS51: GET TABLE,1
EQUAL? STACK,V?DIAGNOSE \?ELS55
PRINTR "is checking for wounds."
?ELS55: GET TABLE,1
EQUAL? STACK,V?WAIT \?ELS59
PRINTR "is doing absolutely nothing."
?ELS59: GET TABLE,1
EQUAL? STACK,V?SLEEP \?ELS63
PRINTR "is trying to fall asleep!"
?ELS63: GET TABLE,1
EQUAL? STACK,V?LEARN \?ELS67
PRINTR "is studying a spell book."
?ELS67: GET TABLE,1
EQUAL? STACK,V?SPELLS \?ELS71
PRINTR "seems lost in thought."
?ELS71: GET TABLE,1
EQUAL? STACK,V?LOOK \?ELS75
PRINTR "is looking around."
?ELS75: GET TABLE,1
EQUAL? STACK,V?LEAP,V?SKIP \?ELS79
PRINTR "is hopping around like a crazed rabbit."
?ELS79: GET TABLE,1
EQUAL? STACK,V?WALK,V?WALK-AROUND,V?WALK-TO \?ELS83
PRINTR "is moving around."
?ELS83: GET TABLE,1
EQUAL? STACK,V?GIVE \?ELS87
PRINTI "is trying to give"
GET TABLE,2
CALL ARTICLE,STACK
PRINTI " to"
GET TABLE,3
CALL ARTICLE,STACK
PRINTR "."
?ELS87: GET TABLE,1
EQUAL? STACK,V?SHOW \?ELS95
PRINTI "is trying to show"
GET TABLE,2
CALL ARTICLE,STACK
PRINTI " to"
GET TABLE,3
CALL ARTICLE,STACK
PRINTR "."
?ELS95: GET TABLE,1
EQUAL? STACK,V?RAISE,V?LOWER,V?RUB /?THN104
GET TABLE,1
EQUAL? STACK,V?MOVE,V?SHAKE,V?PUSH /?THN104
GET TABLE,1
EQUAL? STACK,V?KICK,V?PUT-ON,V?PUSH-TO /?THN104
GET TABLE,1
EQUAL? STACK,V?PUT,V?PUT-UNDER,V?PUT-BEHIND \?ELS103
?THN104: GET TABLE,1
EQUAL? STACK,V?PUT \?CND106
GET TABLE,2
EQUAL? STACK,SPELL-BOOK \?CND106
GET TABLE,3
EQUAL? STACK,LOWER-CHUTE \?CND106
MOVE SPELL-BOOK,DIAL
?CND106: PRINTI "is attempting to move"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS103: GET TABLE,1
EQUAL? STACK,V?EXAMINE,V?LOOK-INSIDE /?THN117
GET TABLE,1
EQUAL? STACK,V?LOOK-BEHIND,V?LOOK-UNDER \?ELS116
?THN117: PRINTI "is examining"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS116: GET TABLE,1
EQUAL? STACK,V?BOARD,V?ENTER,V?THROUGH \?ELS124
PRINTI "is trying to get into"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS124: GET TABLE,1
EQUAL? STACK,V?THROW,V?THROW-OFF \?ELS130
PRINTI "is performing aeronautical experiments with"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS130: GET TABLE,1
EQUAL? STACK,V?WHAT,V?WHERE,V?WHO \?ELS136
PRINTI "is asking about"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR ", addressing the question to no one in particular."
?ELS136: GET TABLE,1
EQUAL? STACK,V?ATTACK,V?KILL,V?MUNG \?ELS142
PRINTI "is attacking"
GET TABLE,2
CALL ARTICLE,STACK,TRUE-VALUE
PRINTR "."
?ELS142: GET TABLE,1
EQUAL? STACK,V?EAT,V?DRINK \?ELS148
PRINTI "is attempting to ingest"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS148: GET TABLE,1
EQUAL? STACK,V?CLIMB-ON,V?CLIMB-UP,V?CLIMB-FOO /?THN155
GET TABLE,1
EQUAL? STACK,V?CLIMB-DOWN,V?CLIMB-OVER \?ELS154
?THN155: PRINTI "is climbing"
GET TABLE,2
CALL ARTICLE,STACK,TRUE-VALUE
PRINTR "."
?ELS154: GET TABLE,1
EQUAL? STACK,V?READ \?ELS162
PRINTI "is reading"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS162: GET TABLE,1
EQUAL? STACK,V?SMELL \?ELS168
PRINTI "is smelling"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS168: GET TABLE,1
EQUAL? STACK,V?LISTEN \?ELS174
PRINTI "seems to be listening to"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS174: GET TABLE,1
EQUAL? STACK,V?KISS \?ELS180
PRINTI "tries to kiss"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS180: GET TABLE,1
EQUAL? STACK,V?OPEN \?ELS186
PRINTI "is trying to open"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS186: GET TABLE,1
EQUAL? STACK,V?CLOSE \?ELS192
PRINTI "is closing"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS192: GET TABLE,1
EQUAL? STACK,V?EXIT,V?DISEMBARK \?ELS198
PRINTI "is trying to leave"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS198: GET TABLE,1
EQUAL? STACK,V?TAKE \?ELS204
PRINTI "is reaching for"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS204: GET TABLE,1
EQUAL? STACK,V?DROP \?ELS210
PRINTI "is dropping"
GET TABLE,2
CALL ARTICLE,STACK
PRINTR "."
?ELS210: PRINTR "is doing something."
.FUNCT LAMP-PSEUDO
EQUAL? PRSA,V?TAKE \FALSE
CALL PERFORM,V?TAKE,KEROSENE-LAMP
RTRUE
.FUNCT DIAL-DOOR-F
EQUAL? PRSA,V?OPEN \?ELS5
FSET? DIAL-DOOR,OPENBIT /?ELS5
ZERO? DIAL-OPEN /?ELS12
FSET DIAL-DOOR,OPENBIT
ADD SCORE,COAL-DOOR-POINT >SCORE
SET 'COAL-DOOR-POINT,0
PRINTR "The door opens easily."
?ELS12: PRINTR "The door won't budge."
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS21
CALL PERFORM,V?EXAMINE,DIAL
RTRUE
?ELS21: EQUAL? PRSA,V?REZROV \FALSE
CALL JIGS-UP,STR?305
RSTACK
.FUNCT DIAL-F
EQUAL? PRSA,V?READ,V?EXAMINE \?ELS5
PRINTI "Set in the door is a large circular dial which can be set to any number up to 873. It is currently set to "
PRINTN CURRENT-SETTING
PRINTR "."
?ELS5: EQUAL? PRSA,V?TURN \FALSE
ZERO? FWEEPED /?ELS14
CALL BATTY
RSTACK
?ELS14: ZERO? PRSI /?THN18
EQUAL? PRSI,INTNUM /?ELS17
?THN18: PRINTR "You must say what number to turn it to."
?ELS17: EQUAL? CURRENT-SETTING,P-NUMBER \?ELS23
PRINTI "The dial is already set to "
PRINTN CURRENT-SETTING
PRINTR "."
?ELS23: SET 'CURRENT-SETTING,P-NUMBER
PRINTI "The dial is now set to "
PRINTN CURRENT-SETTING
PRINTI "."
EQUAL? CURRENT-SETTING,COMBO \?CND30
PRINTI " You hear a click from inside the door."
SET 'DIAL-OPEN,TRUE-VALUE
?CND30: CRLF
RTRUE
.FUNCT ROPE-F
EQUAL? PRSA,V?PUT \?ELS5
CALL ACCESSIBLE?,ROPE
ZERO? STACK /FALSE
?ELS5: EQUAL? PRSA,V?TIE \?ELS9
EQUAL? PRSI,BEAM \?ELS9
PRINTI "The rope is "
ZERO? ROPE-TO-BEAM /?CND14
PRINTI "already "
?CND14: PRINTI "tied securely to the center of the beam."
CRLF
SET 'ROPE-TO-BEAM,TRUE-VALUE
RETURN ROPE-TO-BEAM
?ELS9: EQUAL? PRSA,V?TIE \?ELS23
EQUAL? PRSI,COAL-BIN \?ELS23
PRINTR "The bin is too large."
?ELS23: EQUAL? PRSA,V?UNTIE \?ELS29
ZERO? ROPE-TO-BEAM /?ELS29
SET 'ROPE-TO-BEAM,FALSE-VALUE
PRINTR "The rope is untied."
?ELS29: EQUAL? PRSA,V?CLIMB-DOWN \?ELS35
ZERO? ROPE-PLACED \?ELS40
ZERO? ROPE-IN-LOWER-CHUTE \?ELS40
PRINTR "It would be hard to climb down the rope in its current state."
?ELS40: CALL DO-WALK,P?DOWN
RSTACK
?ELS35: EQUAL? PRSA,V?CLIMB-UP \?ELS48
PRINTR "Do you also charm snakes?"
?ELS48: EQUAL? PRSA,V?EXAMINE \FALSE
ZERO? ROPE-PLACED \?THN58
ZERO? ROPE-IN-LOWER-CHUTE /?ELS57
?THN58: PRINTR "The rope is tied to the beam and hangs into the chute."
?ELS57: ZERO? ROPE-TO-BEAM /FALSE
PRINTR "It is tied to the center of the timber."
.FUNCT SHAFT-BOTTOM-F,RARG
EQUAL? RARG,M-ENTER \FALSE
FSET? VARDIK-SCROLL,TOUCHBIT \FALSE
SET 'BREATH-SHORTAGE,3
CALL I-BREATHE
RSTACK
.FUNCT SHAFT-PSEUDO
EQUAL? PRSA,V?CLIMB-DOWN \?ELS5
EQUAL? HERE,SHAFT-TOP \?ELS10
CALL DO-WALK,P?DOWN
RSTACK
?ELS10: CALL LOOK-AROUND-YOU
RSTACK
?ELS5: EQUAL? PRSA,V?CLIMB-UP,V?CLIMB-FOO \?ELS14
EQUAL? HERE,SHAFT-TOP \?ELS19
CALL LOOK-AROUND-YOU
RSTACK
?ELS19: CALL DO-WALK,P?UP
RSTACK
?ELS14: EQUAL? PRSA,V?PUT-ON \?ELS23
EQUAL? PRSO,BEAM \?ELS23
PRINTR "The shaft is too wide."
?ELS23: EQUAL? PRSA,V?PUT \FALSE
EQUAL? HERE,SHAFT-TOP \FALSE
EQUAL? PRSO,ROPE \?ELS36
ZERO? ROPE-TO-BEAM /?ELS36
PRINTR "The rope now dangles into the shaft."
?ELS36: MOVE PRSO,SHAFT-BOTTOM
PRINTR "It disappears into the shaft. A moment later comes a distant thud."
.FUNCT BEAM-F
EQUAL? PRSA,V?PUT-ON \?ELS5
EQUAL? PRSI,UPPER-CHUTE,LOWER-CHUTE \?ELS5
MOVE BEAM,HERE
PRINTR "The beam is now lying across the mouth of the chute."
?ELS5: EQUAL? PRSA,V?TAKE \?ELS11
ZERO? ROPE-PLACED /?ELS11
PRINTR "You'd have to take the rope out of the chute first."
?ELS11: EQUAL? PRSA,V?EXAMINE \FALSE
ZERO? ROPE-PLACED /?ELS22
PRINTR "A rope hangs from the beam, into the chute."
?ELS22: ZERO? ROPE-TO-BEAM /FALSE
PRINTR "A rope is tied to the beam."
.FUNCT TOP-OF-CHUTE-F,RARG
EQUAL? RARG,M-END \FALSE
IN? TROGLODYTE,HERE /FALSE
ZERO? LIT \?THN8
ZERO? BLORTED /FALSE
?THN8: RANDOM 100
LESS? 30,STACK /FALSE
MOVE TROGLODYTE,HERE
CALL QUEUE,I-TROGLODYTE,2
PUT STACK,0,1
CRLF
PRINTR "A troglodyte trundles in and dumps a load of coal into the chute."
.FUNCT I-TROGLODYTE
MOVE TROGLODYTE,DIAL
EQUAL? HERE,TOP-OF-CHUTE \FALSE
SET 'TROG-FOLLOW,TRUE-VALUE
CALL QUEUE,I-TROG-UNFOLLOW,1
PUT STACK,0,1
CRLF
PRINTR "The troglodyte trundles off into the coal mine."
.FUNCT I-TROG-UNFOLLOW
SET 'TROG-FOLLOW,FALSE-VALUE
RFALSE
.FUNCT TROGLODYTE-F
EQUAL? WINNER,TROGLODYTE \?ELS5
PRINTI "The troglodyte ignores you."
CRLF
CALL STOP
RSTACK
?ELS5: EQUAL? PRSA,V?FOLLOW \?ELS9
ZERO? TROG-FOLLOW /?ELS9
PRINTR "You didn't notice which passage it took."
?ELS9: EQUAL? PRSA,V?YOMIN \?ELS15
PRINTR "The troglodyte is worried about filling his coal quotas."
?ELS15: EQUAL? PRSA,V?RESEARCH \FALSE
PRINTR "Semi-intelligent subterranean beasts frequently used to dig and haul coal."
.FUNCT CHUTE-EXIT-F
ZERO? ROPE-PLACED /?ELS5
PRINTI "You climb carefully down the rope, which is slippery with coal dust, "
GRTR? AWAKE,0 \?ELS13
PRINTI "but because of your fatigue you lose your grip."
CALL ORANGE-FLASH
CRLF
CRLF
RETURN COAL-BIN-ROOM
?ELS13: CALL NOTHING-HELD?
ZERO? STACK \?ELS17
PRINTI "but because of your load you are unable to maintain your grip."
CALL ORANGE-FLASH
CRLF
CRLF
RETURN COAL-BIN-ROOM
?ELS17: PRINTI "and soon reach a small opening off the chute. You clamber inside..."
CRLF
CRLF
ADD SCORE,20 >SCORE
FCLEAR VARDIK-SPELL,INVISIBLE
RETURN SLANTED-ROOM
?ELS5: CALL ROPE-BEAM-CHECK,TRUE-VALUE
PRINTI "Wheee!!! "
CALL ORANGE-FLASH
PRINTI " You land beside an enormous bin of coal."
CRLF
CRLF
RETURN COAL-BIN-ROOM
.FUNCT ORANGE-FLASH
PRINTI " As you "
ZERO? FLYING /?ELS5
PRINTI "float"
JUMP ?CND3
?ELS5: PRINTI "whiz"
?CND3: PRINTI " down the chute, you notice a flash of orange light spilling from an opening onto the chute."
RTRUE
.FUNCT SLANTED-ROOM-F,RARG
EQUAL? RARG,M-ENTER \FALSE
PUT VEZZAS,6,0
RTRUE
.FUNCT SLANTED-ROOM-EXIT-F
IN? GOLMAC-SCROLL,PROTAGONIST /?ELS5
ZERO? GOLMACKED \?ELS5
CALL POOF
RFALSE
?ELS5: IN? GOLMAC-SCROLL,PROTAGONIST \?ELS9
ZERO? GOLMACKED /?ELS9
CALL POOF
RFALSE
?ELS9: PRINTI "Wheeee!!!"
CRLF
CRLF
RETURN COAL-BIN-ROOM
.FUNCT KEROSENE-LAMP-DESCFCN,RARG
PRINTI "Mounted securely to the wall is a kerosene lamp, filling the room with a serene orange glow. "
FSET? KEROSENE-LAMP,OPENBIT \?CND3
PRINTI "A small compartment at its base is open."
?CND3: CRLF
RTRUE
.FUNCT KEROSENE-LAMP-F
EQUAL? PRSA,V?EXAMINE \?ELS5
PRINTR "The lamp has a glass bowl where the flame burns. Below is a small metal door, perhaps a compartment for storing extra wicks or kerosene."
?ELS5: EQUAL? PRSA,V?TAKE \?ELS9
PRINTR "It's mounted securely to the wall."
?ELS9: EQUAL? PRSA,V?LAMP-OFF \FALSE
PRINTR "You can't spare the breath to blow out the lamp."
.FUNCT CHUTE-ENTER-F
ZERO? FLYING /?ELS3
PRINTI "The chute is too narrow to fly up."
JUMP ?CND1
?ELS3: PRINTI "The chute is too steep and slippery."
?CND1: CRLF
RFALSE
.FUNCT BOTTOM-TOP-OF-CHUTE,TOP=0
PRINTI "You're already at the "
ZERO? TOP /?ELS5
PRINTI "top"
JUMP ?CND3
?ELS5: PRINTI "bottom"
?CND3: PRINTR " of the chute."
.ENDI