mirror of
https://github.com/historicalsource/sorcerer
synced 2024-04-25 14:19:19 +03:00
929 lines
23 KiB
Plaintext
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
|