326 lines
8.1 KiB
Plaintext
326 lines
8.1 KiB
Plaintext
|
|
|
|
.FUNCT GO
|
|
START::
|
|
|
|
?FCN: PUTB P-LEXV,0,59
|
|
CALL QUEUE,I-TIRED,MOVES-PER-DAY
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-THIRST,41
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-HUNGER,67
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-TIME,-1
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-SCURRY,5
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-MUNG-ROOM,50
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-GUARDS-ARRIVE,0
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-ADVENTURER,0
|
|
PUT STACK,0,1
|
|
SET 'LIT,TRUE-VALUE
|
|
SET 'WINNER,PLAYER
|
|
SET 'HERE,WEST-FORK
|
|
SET 'P-IT-OBJECT,FALSE-VALUE
|
|
FSET? HERE,TOUCHBIT /?CND1
|
|
PRINTI "It must be the warlock Krill. The odd disappearances, the mysterious dissolution of regions sacred to the Circle, the lessening of the Powers -- these could only be his handiwork. The Circle gathers and its leader, the esteemed Belboz, reveals to them an ancient document which portends evil days much like our own.
|
|
|
|
""Krill's evil must be unmade,"" he begins, ""but to send a powerful Enchanter is ill-omened. It would be ruinous to reveal oversoon our full powers."" A ripple of concern spreads over the face of each Enchanter. Belboz pauses, and collects his resolve. ""Have hope! This has been written by a hand far wiser than mine!""
|
|
|
|
He recites a short spell and you appear. Belboz approaches, transfixing you with his gaze, and hands you the document. The other Enchanters await his decree. ""These words, written ages ago, can have only one meaning. You, a novice Enchanter with but a few simple spells in your Book, must seek out Krill, explore the Castle he has overthrown, and learn his secrets. Only then may his vast evil be lessened or, with good fortune, destroyed.""
|
|
|
|
The Circle rises and intones a richly woven spell, whose many textures imbue the small, darkened chamber with warmth and hope. There is a surge of power; you are Sent."
|
|
CRLF
|
|
CRLF
|
|
CALL V-VERSION
|
|
CRLF
|
|
?CND1: MOVE WINNER,HERE
|
|
CALL V-LOOK
|
|
CALL MAIN-LOOP
|
|
JUMP ?FCN
|
|
|
|
|
|
.FUNCT MAIN-LOOP,TRASH
|
|
?PRG1: CALL MAIN-LOOP-1 >TRASH
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,?TMP1
|
|
SET 'CNT,0
|
|
SET 'OBJ,FALSE-VALUE
|
|
SET 'PTBL,TRUE-VALUE
|
|
CALL PARSER >P-WON
|
|
ZERO? P-WON /?ELS3
|
|
GET P-PRSI,P-MATCHLEN >ICNT
|
|
GET P-PRSO,P-MATCHLEN >OCNT
|
|
ZERO? P-IT-OBJECT /?CND4
|
|
CALL ACCESSIBLE?,P-IT-OBJECT
|
|
ZERO? STACK /?CND4
|
|
SET 'TMP,FALSE-VALUE
|
|
?PRG9: IGRTR? 'CNT,ICNT \?ELS13
|
|
JUMP ?REP10
|
|
?ELS13: GET P-PRSI,CNT
|
|
EQUAL? STACK,IT \?PRG9
|
|
PUT P-PRSI,CNT,P-IT-OBJECT
|
|
SET 'TMP,TRUE-VALUE
|
|
?REP10: ZERO? TMP \?CND19
|
|
SET 'CNT,0
|
|
?PRG22: IGRTR? 'CNT,OCNT \?ELS26
|
|
JUMP ?CND19
|
|
?ELS26: GET P-PRSO,CNT
|
|
EQUAL? STACK,IT \?PRG22
|
|
PUT P-PRSO,CNT,P-IT-OBJECT
|
|
?CND19: SET 'CNT,0
|
|
?CND4: ZERO? OCNT \?ELS36
|
|
PUSH OCNT
|
|
JUMP ?CND32
|
|
?ELS36: GRTR? OCNT,1 \?ELS38
|
|
SET 'TBL,P-PRSO
|
|
ZERO? ICNT \?ELS41
|
|
SET 'OBJ,FALSE-VALUE
|
|
JUMP ?CND39
|
|
?ELS41: GET P-PRSI,1 >OBJ
|
|
?CND39: PUSH OCNT
|
|
JUMP ?CND32
|
|
?ELS38: GRTR? ICNT,1 \?ELS45
|
|
SET 'PTBL,FALSE-VALUE
|
|
SET 'TBL,P-PRSI
|
|
GET P-PRSO,1 >OBJ
|
|
PUSH ICNT
|
|
JUMP ?CND32
|
|
?ELS45: PUSH 1
|
|
?CND32: SET 'NUM,STACK
|
|
ZERO? OBJ \?CND48
|
|
EQUAL? ICNT,1 \?CND48
|
|
GET P-PRSI,1 >OBJ
|
|
?CND48: EQUAL? PRSA,V?WALK \?ELS55
|
|
CALL PERFORM,PRSA,PRSO >V
|
|
JUMP ?CND53
|
|
?ELS55: ZERO? NUM \?ELS57
|
|
GETB P-SYNTAX,P-SBITS
|
|
BAND STACK,P-SONUMS
|
|
ZERO? STACK \?ELS60
|
|
CALL PERFORM,PRSA >V
|
|
SET 'PRSO,FALSE-VALUE
|
|
JUMP ?CND53
|
|
?ELS60: ZERO? LIT \?ELS62
|
|
PRINTI "It's too dark to see."
|
|
CRLF
|
|
JUMP ?CND53
|
|
?ELS62: PRINTI "There isn't anything to "
|
|
GET P-ITBL,P-VERBN >TMP
|
|
ZERO? P-OFLAG \?THN72
|
|
ZERO? P-MERGED /?ELS71
|
|
?THN72: GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?CND69
|
|
?ELS71: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
?CND69: PRINTI "!"
|
|
CRLF
|
|
SET 'V,FALSE-VALUE
|
|
JUMP ?CND53
|
|
?ELS57: SET 'P-NOT-HERE,0
|
|
SET 'P-MULT,FALSE-VALUE
|
|
GRTR? NUM,1 \?CND80
|
|
SET 'P-MULT,TRUE-VALUE
|
|
?CND80: SET 'TMP,FALSE-VALUE
|
|
?PRG83: IGRTR? 'CNT,NUM \?ELS87
|
|
GRTR? P-NOT-HERE,0 \?ELS90
|
|
PRINTI "The "
|
|
EQUAL? P-NOT-HERE,NUM /?CND93
|
|
PRINTI "other "
|
|
?CND93: PRINTI "object"
|
|
EQUAL? P-NOT-HERE,1 /?CND100
|
|
PRINTI "s"
|
|
?CND100: PRINTI " that you mentioned "
|
|
EQUAL? P-NOT-HERE,1 /?ELS109
|
|
PRINTI "are"
|
|
JUMP ?CND107
|
|
?ELS109: PRINTI "is"
|
|
?CND107: PRINTI "n't here."
|
|
CRLF
|
|
JUMP ?REP84
|
|
?ELS90: ZERO? TMP \?REP84
|
|
PRINTI "I don't know what you're referring to."
|
|
CRLF
|
|
JUMP ?REP84
|
|
?ELS87: ZERO? PTBL /?ELS126
|
|
GET P-PRSO,CNT >OBJ1
|
|
JUMP ?CND124
|
|
?ELS126: GET P-PRSI,CNT >OBJ1
|
|
?CND124: ZERO? PTBL /?ELS134
|
|
PUSH OBJ1
|
|
JUMP ?CND130
|
|
?ELS134: PUSH OBJ
|
|
?CND130: SET 'PRSO,STACK
|
|
ZERO? PTBL /?ELS142
|
|
PUSH OBJ
|
|
JUMP ?CND138
|
|
?ELS142: PUSH OBJ1
|
|
?CND138: SET 'PRSI,STACK
|
|
EQUAL? PRSA,V?ERASE-LINE,V?MAKE-LINE \?ELS148
|
|
JUMP ?CND146
|
|
?ELS148: GRTR? NUM,1 /?THN151
|
|
GET P-ITBL,P-NC1
|
|
GET STACK,0
|
|
EQUAL? STACK,W?ALL \?CND146
|
|
?THN151: EQUAL? OBJ1,NOT-HERE-OBJECT \?ELS155
|
|
INC 'P-NOT-HERE
|
|
JUMP ?PRG83
|
|
?ELS155: EQUAL? P-GETFLAGS,P-ALL \?ELS157
|
|
EQUAL? PRSA,V?TAKE \?ELS157
|
|
LOC OBJ1
|
|
EQUAL? STACK,WINNER,HERE,OBJ /?ELS157
|
|
JUMP ?PRG83
|
|
?ELS157: EQUAL? PRSA,V?TAKE \?ELS161
|
|
ZERO? PRSI /?ELS161
|
|
GET P-ITBL,P-NC1
|
|
GET STACK,0
|
|
EQUAL? STACK,W?ALL \?ELS161
|
|
IN? PRSO,PRSI /?ELS161
|
|
JUMP ?PRG83
|
|
?ELS161: EQUAL? OBJ1,IT \?ELS168
|
|
PRINTD P-IT-OBJECT
|
|
JUMP ?CND166
|
|
?ELS168: PRINTD OBJ1
|
|
?CND166: PRINTI ": "
|
|
?CND146: SET 'TMP,TRUE-VALUE
|
|
CALL PERFORM,PRSA,PRSO,PRSI >V
|
|
EQUAL? V,M-FATAL \?PRG83
|
|
JUMP ?CND53
|
|
?REP84:
|
|
?CND53: EQUAL? V,M-FATAL /?CND176
|
|
LOC WINNER
|
|
ZERO? STACK /?CND176
|
|
LOC WINNER
|
|
GETP STACK,P?ACTION
|
|
CALL STACK,M-END >V
|
|
?CND176: EQUAL? PRSA,V?SCORE,V?RESTORE,V?SAVE /?CND182
|
|
EQUAL? PRSA,V?VERSION \?ELS184
|
|
JUMP ?CND182
|
|
?ELS184: SET 'L-PRSA,PRSA
|
|
SET 'L-PRSO,PRSO
|
|
SET 'L-PRSI,PRSI
|
|
?CND182: EQUAL? V,M-FATAL \?CND1
|
|
SET 'P-CONT,FALSE-VALUE
|
|
JUMP ?CND1
|
|
?ELS3: SET 'P-CONT,FALSE-VALUE
|
|
?CND1: ZERO? P-WON /FALSE
|
|
EQUAL? PRSA,V?SUPER-BRIEF,V?BRIEF,V?TELL /TRUE
|
|
EQUAL? PRSA,V?VERSION,V?SAVE,V?VERBOSE /TRUE
|
|
EQUAL? PRSA,V?RESTART,V?QUIT,V?TIME /TRUE
|
|
EQUAL? PRSA,V?UNSCRIPT,V?SCRIPT,V?SCORE /TRUE
|
|
EQUAL? PRSA,V?RESTORE /TRUE
|
|
CALL CLOCKER >V
|
|
RETURN V
|
|
|
|
|
|
.FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI
|
|
SET 'OA,PRSA
|
|
SET 'OO,PRSO
|
|
SET 'OI,PRSI
|
|
EQUAL? IT,I,O \?CND1
|
|
CALL ACCESSIBLE?,P-IT-OBJECT
|
|
ZERO? STACK \?CND1
|
|
PRINTI "I don't see what you are referring to."
|
|
CRLF
|
|
RETURN 2
|
|
?CND1: EQUAL? O,IT \?CND10
|
|
SET 'O,P-IT-OBJECT
|
|
?CND10: EQUAL? I,IT \?CND13
|
|
SET 'I,P-IT-OBJECT
|
|
?CND13: SET 'PRSA,A
|
|
SET 'PRSO,O
|
|
ZERO? PRSO /?CND16
|
|
EQUAL? PRSA,V?WALK /?CND16
|
|
SET 'P-IT-OBJECT,PRSO
|
|
?CND16: SET 'PRSI,I
|
|
EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?ELS23
|
|
CALL NOT-HERE-OBJECT-F >V
|
|
ZERO? V /?ELS23
|
|
SET 'P-WON,FALSE-VALUE
|
|
JUMP ?CND21
|
|
?ELS23: SET 'O,PRSO
|
|
SET 'I,PRSI
|
|
GETP WINNER,P?ACTION
|
|
CALL STACK >V
|
|
ZERO? V /?ELS30
|
|
JUMP ?CND21
|
|
?ELS30: LOC WINNER
|
|
GETP STACK,P?ACTION
|
|
CALL STACK,M-BEG >V
|
|
ZERO? V /?ELS32
|
|
JUMP ?CND21
|
|
?ELS32: GET PREACTIONS,A
|
|
CALL STACK >V
|
|
ZERO? V /?ELS34
|
|
JUMP ?CND21
|
|
?ELS34: ZERO? I /?ELS36
|
|
GETP I,P?ACTION
|
|
CALL STACK >V
|
|
ZERO? V /?ELS36
|
|
JUMP ?CND21
|
|
?ELS36: ZERO? O /?ELS40
|
|
EQUAL? A,V?WALK /?ELS40
|
|
LOC O
|
|
ZERO? STACK /?ELS40
|
|
LOC O
|
|
GETP STACK,P?CONTFCN
|
|
CALL STACK >V
|
|
ZERO? V /?ELS40
|
|
JUMP ?CND21
|
|
?ELS40: ZERO? O /?ELS44
|
|
EQUAL? A,V?WALK /?ELS44
|
|
GETP O,P?ACTION
|
|
CALL STACK >V
|
|
ZERO? V /?ELS44
|
|
JUMP ?CND21
|
|
?ELS44: GET ACTIONS,A
|
|
CALL STACK >V
|
|
ZERO? V /?CND21
|
|
?CND21: SET 'PRSA,OA
|
|
SET 'PRSO,OO
|
|
SET 'PRSI,OI
|
|
RETURN V
|
|
|
|
|
|
.FUNCT I-TIME
|
|
EQUAL? HASTED?,ME \?ELS3
|
|
MOD MOVES,2
|
|
ZERO? STACK /TRUE
|
|
?ELS3: IGRTR? 'TOD,127 \?CND1
|
|
SET 'TOD,0
|
|
SUB NIGHTFALL,20 >NIGHTFALL
|
|
INC 'LOSSAGE
|
|
SUB DUSK,20 >DUSK
|
|
ADD MOLESTED,5 >MOLESTED
|
|
ADD MUNCHED,5 >MUNCHED
|
|
LESS? NIGHTFALL,0 \?CND1
|
|
PRINTI "Belboz appears before you, in a magical sending. He speaks, his voice soft and saddened. ""You have failed. Universal night has now fallen. Krill and his creatures now may freely roam the earth. The power of the Circle is diminished, if not broken. I go to prepare the last defense."" The sending vanishes."
|
|
CRLF
|
|
CALL FINISH
|
|
?CND1: EQUAL? TOD,NIGHTFALL \?ELS17
|
|
LOC PLAYER
|
|
FSET? STACK,ONBIT \?ELS17
|
|
PRINTI "The darkened sky is now full of bright stars. It is night."
|
|
CRLF
|
|
LESS? NIGHTFALL,97 \TRUE
|
|
PRINTR "Today seemed shorter than yesterday, somehow."
|
|
?ELS17: EQUAL? TOD,SUNRISE \?ELS28
|
|
LOC PLAYER
|
|
FSET? STACK,ONBIT \?ELS28
|
|
PRINTR "The sun has now risen above the hills."
|
|
?ELS28: EQUAL? TOD,DUSK \FALSE
|
|
LOC PLAYER
|
|
FSET? STACK,ONBIT \FALSE
|
|
PRINTI "The sun starts to set behind the Lonely Mountain in the west."
|
|
CRLF
|
|
LESS? NIGHTFALL,97 \TRUE
|
|
PRINTR "The day is coming to an end earlier than you would have expected."
|
|
|
|
.ENDI
|