mirror of
https://github.com/historicalsource/zork3
synced 2024-04-25 13:39:42 +03:00
205 lines
4.5 KiB
Plaintext
205 lines
4.5 KiB
Plaintext
|
|
|
|
.FUNCT GO
|
|
START::
|
|
|
|
?FCN: CALL QUEUE,I-LANTERN,200
|
|
SET 'CURRENT-LAMP,LAMP
|
|
MUL 8,21
|
|
PUT CPOBJS,STACK,1
|
|
MUL 8,21
|
|
ADD STACK,1
|
|
PUT CPOBJS,STACK,LORE-BOOK
|
|
MUL 8,32
|
|
PUT CPOBJS,STACK,1
|
|
MUL 8,32
|
|
ADD STACK,1
|
|
PUT CPOBJS,STACK,CP-SLOT
|
|
SET 'LIT,TRUE-VALUE
|
|
SET 'WINNER,ADVENTURER
|
|
SET 'PLAYER,WINNER
|
|
SET 'MLOC,MRB
|
|
SET 'HERE,ZORK2-STAIR
|
|
RANDOM 70
|
|
ADD 70,STACK
|
|
CALL QUEUE,I-CLEFT,STACK
|
|
PUT STACK,0,1
|
|
CALL QUEUE,I-VIEW-CHANGE,4
|
|
PUT STACK,0,1
|
|
SET 'P-IT-LOC,HERE
|
|
SET 'P-IT-OBJECT,FALSE-VALUE
|
|
FSET? HERE,TOUCHBIT /?CND1
|
|
PRINTI "As in a dream, you see yourself tumbling down a great, dark staircase. All about you are shadowy images of struggles against fierce opponents and diabolical traps. These give way to another round of images: of imposing stone figures, a cool, clear lake, and, now, of an old, yet oddly youthful man. He turns toward you slowly, his long, silver hair dancing about him in a fresh breeze. ""You have reached the final test, my friend! You are proved clever and powerful, but this is not yet enough! Seek me when you feel yourself worthy!"" The dream dissolves around you as his last words echo through the void...."
|
|
CRLF
|
|
CRLF
|
|
CALL V-VERSION
|
|
CRLF
|
|
?CND1: MOVE WINNER,HERE
|
|
MOVE LAMP,HERE
|
|
CALL V-LOOK
|
|
CALL MAIN-LOOP
|
|
JUMP ?FCN
|
|
|
|
|
|
.FUNCT MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,?TMP1
|
|
?PRG1: SET 'CNT,0
|
|
SET 'OBJ,FALSE-VALUE
|
|
SET 'PTBL,TRUE-VALUE
|
|
CALL PARSER >P-WON
|
|
ZERO? P-WON /?ELS5
|
|
GET P-PRSI,P-MATCHLEN >ICNT
|
|
GET P-PRSO,P-MATCHLEN >OCNT
|
|
ZERO? OCNT \?ELS10
|
|
PUSH OCNT
|
|
JUMP ?CND6
|
|
?ELS10: GRTR? OCNT,1 \?ELS12
|
|
SET 'TBL,P-PRSO
|
|
ZERO? ICNT \?ELS15
|
|
SET 'OBJ,FALSE-VALUE
|
|
JUMP ?CND13
|
|
?ELS15: GET P-PRSI,1 >OBJ
|
|
?CND13: PUSH OCNT
|
|
JUMP ?CND6
|
|
?ELS12: GRTR? ICNT,1 \?ELS19
|
|
SET 'PTBL,FALSE-VALUE
|
|
SET 'TBL,P-PRSI
|
|
GET P-PRSO,1 >OBJ
|
|
PUSH ICNT
|
|
JUMP ?CND6
|
|
?ELS19: PUSH 1
|
|
?CND6: SET 'NUM,STACK
|
|
ZERO? OBJ \?CND22
|
|
EQUAL? ICNT,1 \?CND22
|
|
GET P-PRSI,1 >OBJ
|
|
?CND22: EQUAL? PRSA,V?WALK \?ELS29
|
|
CALL PERFORM,PRSA,PRSO >V
|
|
JUMP ?CND27
|
|
?ELS29: ZERO? NUM \?ELS31
|
|
GETB P-SYNTAX,P-SBITS
|
|
BAND STACK,P-SONUMS
|
|
ZERO? STACK \?ELS34
|
|
CALL PERFORM,PRSA >V
|
|
SET 'PRSO,FALSE-VALUE
|
|
JUMP ?CND27
|
|
?ELS34: ZERO? LIT \?ELS36
|
|
PRINTI "It's too dark to see."
|
|
CRLF
|
|
JUMP ?CND27
|
|
?ELS36: PRINTI "There isn't anything to "
|
|
GET P-ITBL,P-VERBN >TMP
|
|
ZERO? P-OFLAG /?ELS45
|
|
GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?CND43
|
|
?ELS45: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
?CND43: PRINTI "!"
|
|
CRLF
|
|
SET 'V,FALSE-VALUE
|
|
JUMP ?CND27
|
|
?ELS31:
|
|
?PRG53: IGRTR? 'CNT,NUM \?ELS57
|
|
JUMP ?CND27
|
|
?ELS57: ZERO? PTBL /?ELS62
|
|
GET P-PRSO,CNT >OBJ1
|
|
JUMP ?CND60
|
|
?ELS62: GET P-PRSI,CNT >OBJ1
|
|
?CND60: GRTR? NUM,1 \?CND66
|
|
PRINTD OBJ1
|
|
PRINTI ": "
|
|
?CND66: ZERO? PTBL /?ELS75
|
|
PUSH OBJ1
|
|
JUMP ?CND71
|
|
?ELS75: PUSH OBJ
|
|
?CND71: SET 'PRSO,STACK
|
|
ZERO? PTBL /?ELS83
|
|
PUSH OBJ
|
|
JUMP ?CND79
|
|
?ELS83: PUSH OBJ1
|
|
?CND79: SET 'PRSI,STACK
|
|
CALL PERFORM,PRSA,PRSO,PRSI >V
|
|
EQUAL? V,M-FATAL \?PRG53
|
|
?CND27: EQUAL? PRSA,V?WAIT /?CND90
|
|
EQUAL? PRSA,V?VERSION,V?SCORE,V?RESTORE /?CND90
|
|
EQUAL? PRSA,V?SAVE,V?WALK,V?AGAIN \?ELS92
|
|
JUMP ?CND90
|
|
?ELS92: SET 'L-PRSA,PRSA
|
|
SET 'L-PRSO,PRSO
|
|
SET 'L-PRSI,PRSI
|
|
?CND90: EQUAL? V,M-FATAL \?CND3
|
|
SET 'P-CONT,FALSE-VALUE
|
|
JUMP ?CND3
|
|
?ELS5: SET 'P-CONT,FALSE-VALUE
|
|
?CND3: ZERO? P-WON /?PRG1
|
|
EQUAL? PRSA,V?RESTORE,V?UNSCRIPT,V?SCRIPT /?PRG1
|
|
EQUAL? PRSA,V?SCORE,V?RESTART,V?QUIT /?PRG1
|
|
EQUAL? PRSA,V?VERSION,V?SAVE,V?VERBOSE /?PRG1
|
|
EQUAL? PRSA,V?SUPER-BRIEF,V?BRIEF,V?TELL \?ELS108
|
|
JUMP ?PRG1
|
|
?ELS108: INC 'MOVES
|
|
CALL CLOCKER >V
|
|
JUMP ?PRG1
|
|
|
|
|
|
.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
|
|
EQUAL? P-IT-LOC,HERE /?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
|
|
SET 'P-IT-LOC,HERE
|
|
?CND16: SET 'PRSI,I
|
|
GETP WINNER,P?ACTION
|
|
CALL STACK >V
|
|
ZERO? V /?ELS23
|
|
JUMP ?CND21
|
|
?ELS23: LOC WINNER
|
|
GETP STACK,P?ACTION
|
|
CALL STACK,M-BEG >V
|
|
ZERO? V /?ELS25
|
|
JUMP ?CND21
|
|
?ELS25: GET PREACTIONS,A
|
|
CALL STACK >V
|
|
ZERO? V /?ELS27
|
|
JUMP ?CND21
|
|
?ELS27: ZERO? I /?ELS29
|
|
GETP I,P?ACTION
|
|
CALL STACK >V
|
|
ZERO? V /?ELS29
|
|
JUMP ?CND21
|
|
?ELS29: ZERO? O /?ELS33
|
|
EQUAL? A,V?WALK /?ELS33
|
|
GETP O,P?ACTION
|
|
CALL STACK >V
|
|
ZERO? V /?ELS33
|
|
JUMP ?CND21
|
|
?ELS33: GET ACTIONS,A
|
|
CALL STACK >V
|
|
ZERO? V /?CND21
|
|
?CND21: EQUAL? V,M-FATAL /?CND38
|
|
LOC WINNER
|
|
EQUAL? STACK,PRSO \?CND41
|
|
SET 'PRSO,FALSE-VALUE
|
|
?CND41: LOC WINNER
|
|
GETP STACK,P?ACTION
|
|
CALL STACK,M-END >V
|
|
?CND38: SET 'PRSA,OA
|
|
SET 'PRSO,OO
|
|
SET 'PRSI,OI
|
|
RETURN V
|
|
|
|
.ENDI
|