392 lines
11 KiB
Plaintext
392 lines
11 KiB
Plaintext
|
|
.SEGMENT "0"
|
|
|
|
|
|
.FUNCT SKIP-BITE-FOREST:ANY:0:0
|
|
CRLF
|
|
CRLF
|
|
PRINTI "The warm afternoon air lifted our hearts, and we were soon marching eastward again through the towering forest. Before long, we came upon the shore of a great river."
|
|
CRLF
|
|
CRLF
|
|
PRINTI """We are nearly there,"" Praxix said, gazing ahead at the Sunset Mountain and the mysterious tower that stood precariously atop it."
|
|
CALL2 MOVE-TO,RIVER-2
|
|
RSTACK
|
|
|
|
|
|
.FUNCT MASSAGE-ELVISH:ANY:1:1,MAX,TOFF,IOFF,CHR
|
|
SET 'IOFF,2
|
|
?PRG1: DLESS? 'MAX,0 \?CCL5
|
|
SUB IOFF,2
|
|
PUTB E-INBUF,1,STACK
|
|
RTRUE
|
|
?CCL5: GETB E-TEMP,TOFF >CHR
|
|
EQUAL? CHR,39 /?CND6
|
|
LESS? CHR,65 /?CCL11
|
|
GRTR? CHR,90 /?CCL11
|
|
ADD CHR,32 >CHR
|
|
JUMP ?CND9
|
|
?CCL11: EQUAL? CHR,45,44 \?CND9
|
|
SET 'CHR,32
|
|
?CND9: PUTB E-INBUF,IOFF,CHR
|
|
ZERO? TOFF \?CND15
|
|
LESS? CHR,97 /?CND15
|
|
GRTR? CHR,122 /?CND15
|
|
SUB CHR,32 >CHR
|
|
?CND15: PUTB E-TEMP,TOFF,CHR
|
|
INC 'IOFF
|
|
?CND6: INC 'TOFF
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT READ-ELVISH:ANY:0:1,ACT,OFF,CHR,LN,COL,TBL,CNT,MAX,FG,BG,POS,OLD-X,MAX-X,CUR-X,?TMP1
|
|
ASSIGNED? 'ACT /?CND1
|
|
SET 'ACT,TAG
|
|
?CND1: SET 'COL,COMMAND-OBJECT-COLUMN
|
|
SET 'MAX-X,1000
|
|
ICALL1 TURN-ON-CURSOR
|
|
ICALL1 CLEAR-FIELDS
|
|
PUTB E-LEXV,0,20
|
|
PUTB E-INBUF,0,50
|
|
ZERO? FWC-FLAG \?CND3
|
|
GET 0,17 >?TMP1
|
|
CALL2 TEXT-WIDTH,STR?210
|
|
SUB ?TMP1,STACK >MAX-X
|
|
?CND3: SUB SCREEN-WIDTH,COMMAND-OBJECT-COLUMN
|
|
SUB STACK,2 >MAX
|
|
ICALL2 SELECT-SCREEN,COMMAND-WINDOW
|
|
CALL2 PARTY-PCM,ACT
|
|
ADD COMMAND-START-LINE,STACK
|
|
SUB STACK,1 >LN
|
|
ICALL GCURSET,LN,CHR-COMMAND-COLUMN
|
|
PRINTI "says..."
|
|
ZERO? FWC-FLAG \?CND5
|
|
WINGET -3,11 >FG
|
|
SHIFT FG,-8 >BG
|
|
BAND FG,255 >FG
|
|
?CND5: ICALL GCURSET,LN,COL
|
|
ZERO? FWC-FLAG \?PRG10
|
|
CURGET CURGET-TABLE
|
|
GET CURGET-TABLE,1 >POS
|
|
SET 'CUR-X,POS
|
|
COLOR BG,FG
|
|
ERASE COMMAND-WIDTH-PIX
|
|
JUMP ?CND7
|
|
?PRG10: IGRTR? 'CNT,MAX /?REP11
|
|
PRINTC 95
|
|
JUMP ?PRG10
|
|
?REP11: ICALL GCURSET,LN,COL
|
|
?CND7: SET 'TBL,E-TEMP
|
|
?PRG15: INPUT 1 >CHR
|
|
EQUAL? CHR,13 \?CCL19
|
|
ZERO? FWC-FLAG \?CND20
|
|
COLOR FG,BG
|
|
CALL GPOS,LN,CHRV
|
|
CURSET STACK,RIGHT-COLUMN-LEFT-EDGE
|
|
ERASE RIGHT-COLUMN-WIDTH
|
|
?CND20: SUB COMMAND-START-LINE,1
|
|
ICALL2 REFRESH-CHARACTER-COMMAND-AREA,STACK
|
|
ICALL1 TURN-OFF-CURSOR
|
|
SET 'UPDATE-FLAG,TRUE-VALUE
|
|
ICALL2 SELECT-SCREEN,TEXT-WINDOW
|
|
ZERO? OFF /FALSE
|
|
ICALL2 MASSAGE-ELVISH,OFF
|
|
SET 'E-TEMP-LEN,OFF
|
|
LEX E-INBUF,E-LEXV
|
|
GETB E-LEXV,1
|
|
ZERO? STACK /FALSE
|
|
EQUAL? ACT,PRAXIX,BERGON /TRUE
|
|
ICALL1 PARSE-ELVISH
|
|
RTRUE
|
|
?CCL19: EQUAL? CHR,DELETE-KEY,BACK-SPACE,LEFT-ARROW \?CCL31
|
|
ZERO? OFF \?CCL34
|
|
SOUND 1
|
|
JUMP ?PRG15
|
|
?CCL34: ZERO? FWC-FLAG \?CCL36
|
|
DEC 'OFF
|
|
ZERO? OFF \?CCL39
|
|
CALL GPOS,LN,CHRV
|
|
CURSET STACK,POS
|
|
SET 'CUR-X,POS
|
|
ERASE COMMAND-WIDTH-PIX
|
|
JUMP ?PRG15
|
|
?CCL39: DIROUT 3,CENTER-TABLE
|
|
PRINTT TBL,OFF
|
|
DIROUT -3
|
|
GET 0,24
|
|
ADD POS,STACK >OLD-X
|
|
CALL GPOS,LN,CHRV
|
|
CURSET STACK,OLD-X
|
|
SUB CUR-X,OLD-X
|
|
GRTR? STACK,1 /?CCL42
|
|
ERASE 2
|
|
JUMP ?CND40
|
|
?CCL42: SUB CUR-X,OLD-X
|
|
ERASE STACK
|
|
?CND40: SET 'CUR-X,OLD-X
|
|
JUMP ?PRG15
|
|
?CCL36: ICALL GCURSET,LN,COL
|
|
PRINTC 95
|
|
DEC 'COL
|
|
ICALL GCURSET,LN,COL
|
|
PRINTC 95
|
|
DEC 'OFF
|
|
ICALL GCURSET,LN,COL
|
|
JUMP ?PRG15
|
|
?CCL31: EQUAL? OFF,MAX /?CCL44
|
|
CALL2 BAD-ELVISH-CHARACTER?,CHR
|
|
ZERO? STACK \?CCL44
|
|
ZERO? FWC-FLAG \?CND43
|
|
LESS? CUR-X,MAX-X /?CND43
|
|
?CCL44: SOUND 1
|
|
JUMP ?PRG15
|
|
?CND43: PRINTC CHR
|
|
PUTB TBL,OFF,CHR
|
|
INC 'OFF
|
|
ZERO? FWC-FLAG /?CCL52
|
|
INC 'COL
|
|
ICALL GCURSET,LN,COL
|
|
JUMP ?PRG15
|
|
?CCL52: CURGET CURGET-TABLE
|
|
GET CURGET-TABLE,1 >CUR-X
|
|
JUMP ?PRG15
|
|
|
|
|
|
.FUNCT BAD-ELVISH-CHARACTER?:ANY:1:1,CHR
|
|
LESS? CHR,65 /?CCL3
|
|
GRTR? CHR,90 \FALSE
|
|
?CCL3: LESS? CHR,97 /?CCL7
|
|
GRTR? CHR,122 \FALSE
|
|
?CCL7: EQUAL? CHR,32,39,45 /FALSE
|
|
EQUAL? CHR,46,44,63 /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT MAKE-TAG-SUBGROUP:ANY:0:1,STO
|
|
ICALL2 MAKE-SUBGROUP,TAG
|
|
ZERO? STO /?CND1
|
|
ICALL1 SAVE-TAG-OBJECTS
|
|
?CND1: CALL TRAVEL-COMMANDS,TAG,EXAMINE-COMMAND
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RESTORE-TAG-OBJECTS:ANY:0:0
|
|
ICALL REMOVE-ALL,SAVED-TAG-OBJECTS,INVENTORY
|
|
LOC TORCH
|
|
ZERO? STACK /TRUE
|
|
ICALL2 UPDATE-REMOVE,TORCH
|
|
RTRUE
|
|
|
|
|
|
.FUNCT SAVE-TAG-OBJECTS:ANY:0:0
|
|
CALL REMOVE-ALL,INVENTORY,SAVED-TAG-OBJECTS
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RESTORE-TAG-COMMANDS:ANY:0:0
|
|
CALL TRAVEL-COMMANDS,TAG,PICK-UP-COMMAND,DROP-COMMAND,INVENTORY-COMMAND
|
|
RSTACK
|
|
|
|
|
|
.FUNCT N-DAY-TREK:ANY:1:1,NUM
|
|
ICALL2 NEXT-DAY,NUM
|
|
PRINTI "The next morning, we started the long trek back to Astrix' Tower, and I'm happy to report that we arrived there "
|
|
EQUAL? NUM,1 \?CCL3
|
|
PRINTI "the next day"
|
|
JUMP ?CND1
|
|
?CCL3: GET INT-STR,NUM
|
|
PRINT STACK
|
|
PRINTI " days later"
|
|
?CND1: PRINTI " without serious incident."
|
|
CRLF
|
|
CRLF
|
|
CALL1 RETURN-TO-ASTRIX-TOWER
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RETURN-TO-ASTRIX-TOWER:ANY:0:1,FAIL,CNT
|
|
CALL1 STONE-COUNT
|
|
ADD PASS-1-STONES,STACK >CNT
|
|
ICALL2 GRAPHIC,G-ASTRIX
|
|
ZERO? FAIL /?CCL3
|
|
PRINTI "Astrix now looked grave."
|
|
JUMP ?CND1
|
|
?CCL3: FSET? STAIR-BOTTOM,SEEN \?CND1
|
|
PRINTI "Astrix greeted us heartily when we returned. ""How has your journey gone? What news have you found?"" he asked."
|
|
GRTR? CNT,PASS-1-STONES \?CCL7
|
|
CRLF
|
|
CRLF
|
|
PRINTI "We told him of our doings, and showed him the stone"
|
|
SUB CNT,PASS-1-STONES
|
|
GRTR? STACK,1 \?CND8
|
|
PRINTC 115
|
|
?CND8: PRINTI " we had obtained."
|
|
CRLF
|
|
CRLF
|
|
EQUAL? CNT,3 \?CCL12
|
|
ICALL1 ASTRIX-SHOWS-STONE
|
|
RTRUE
|
|
?CCL12: PRINTI " ""This is good,"" he said, but he looked disappointed."
|
|
JUMP ?CND1
|
|
?CCL7: CRLF
|
|
CRLF
|
|
PRINTI "We told Astrix of our adventures, but he was evidently disappointed."
|
|
?CND1: PRINTI " ""I am afraid we will need the three Stones,"" he said, ""if we are to defeat the Enemy."""
|
|
CRLF
|
|
CRLF
|
|
PRINTI """Three stones?"" I said, quizzically, ""You said there were four Sisters?"""
|
|
CRLF
|
|
CRLF
|
|
PRINTI """And so there are,"" Astrix said, holding out a fiery red stone. ""This is the Wizard Stone! I had hoped it would be of use in our war against the "
|
|
PRINT BAD-GUY
|
|
PRINTI "."""
|
|
CRLF
|
|
CRLF
|
|
CALL1 PART-ONE-BAD-ENDING
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PART-ONE-BAD-ENDING:ANY:0:1,ONE?
|
|
PRINTI """I fear we are now without hope."
|
|
ZERO? ONE? /?CND1
|
|
PRINTI " The Anvil is beyond our grasp!"
|
|
?CND1: PRINTI " Get back to your lands that you may join your families before the Storm arrives!"""
|
|
CRLF
|
|
CRLF
|
|
PRINTI "And then, from the north, came a mocking laugh carried on an icy wind. We covered our ears, but Astrix ran to his high balcony and cursed the "
|
|
PRINT BAD-GUY
|
|
PRINTI " in the languages of old. But the laugh was not stilled; and Astrix, overcome by a great madness, leapt from his great tower and plunged to his death...."
|
|
ICALL2 GRAPHIC,G-ASTRIX-LEAPS
|
|
CALL1 BAD-ENDING
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ENDING:ANY:0:0
|
|
PRINTI "[The End]"
|
|
CRLF
|
|
ICALL1 CLEAR-SUBGROUP
|
|
ICALL UPDATE-FCLEAR,TAG,SHADOW
|
|
SET 'SUBGROUP-MODE,TRUE-VALUE
|
|
CALL2 MOVE-TO,ENDING-ROOM
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ANONF-4:ANY:0:0
|
|
ZERO? GAME-WON? \?CND1
|
|
ICALL REMOVE-TRAVEL-COMMAND,HERE,GAME-COMMAND
|
|
?CND1: ZERO? GAME-WON? \FALSE
|
|
FIRST? HINTS /FALSE
|
|
CALL REMOVE-TRAVEL-COMMAND,HERE,MUSINGS-COMMAND
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ANONF-5:ANY:0:0
|
|
EQUAL? ACTION,RESTORE-COMMAND \FALSE
|
|
CALL2 V-RESTORE,FALSE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT KILLED-OFF:ANY:1:1,CHR,TMP
|
|
ICALL2 PARTY-REMOVE,CHR
|
|
CALL ADD-TO-LTABLE,KILLED-TBL,CHR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ASTRIX-SHOWS-STONE:ANY:0:0
|
|
ICALL GRAPHIC,FALSE-VALUE,G-FOUR-STONES,BOTTOM-LEFT
|
|
ICALL UPDATE-FCLEAR,WEBBA-MAP,DONT-DROP
|
|
PRINTI "As Astrix took the three stones, it seemed they were bathed in a warm red light, as if from a glowing ember. ""I have some surprises of my own,"" he said, and revealed to us the glowing Wizard Stone, which he had long possessed. ""It is beautiful, is it not, "
|
|
ICALL1 WPRINTTAG
|
|
PRINTI "? Not since the day it was cut from the living earth has such a sight been witnessed!"""
|
|
CRLF
|
|
CRLF
|
|
GRTR? PARTY-MAX,3 \?CCL3
|
|
FSET? BERGON,IN-PARTY \?CCL3
|
|
PRINTI "Astrix turned silent and stared into the glowing Stones. When, at last, the trance was broken, he spoke again. ""The Two are revealed to me; one lies deep within the earth, the other in an Elvish place - very old, and long forgotten. More than that, I cannot say."""
|
|
CRLF
|
|
CRLF
|
|
EQUAL? PARTY-MAX,5 \?CND6
|
|
ICALL2 PARTY-REMOVE,MINAR
|
|
PRINTI "Minar now spoke. ""I am grateful that you have allowed me to journey with you to this place,"" he began, ""but I must return now to the plains, for there is much to be done. At the least, I shall report to the people on your safe arrival at the Sunrise Tower! Good luck to you all; perhaps our paths shall cross again."" And, though we tried to persuade him otherwise, Minar turned and left Astrix' high tower and started on the lonely road toward home."
|
|
CRLF
|
|
CRLF
|
|
?CND6: CALL1 START-PART-TWO
|
|
RSTACK
|
|
?CCL3: PRINTI """Yes, you have all done well, but perhaps not well enough, for you have lost enough of your party that the search for the remaining Stones is pointless. For it is told in Legend that Five shall unite the Six Stones which shall lead them to the Anvil."""
|
|
CRLF
|
|
CRLF
|
|
CALL1 PART-ONE-BAD-ENDING
|
|
RSTACK
|
|
|
|
|
|
.FUNCT BAD-ENDING:ANY:0:0
|
|
ICALL1 DIVIDER
|
|
PRINT I-SIT-ALONE
|
|
CRLF
|
|
CRLF
|
|
CALL1 ENDING
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PART-TWO-TOO-FEW:ANY:0:0
|
|
PRINTI "Only Praxix and I were left, and our only consolation was that the terrain was familiar; we were only a few miles below the falls we had seen earlier on our journey, not far from the Sunrise Mountain. And so we returned to Astrix; his face was grim."
|
|
IN? SPIRIT-STONE,INVENTORY \?CND1
|
|
CRLF
|
|
CRLF
|
|
PRINTI """It is good that you have found the fifth Stone, but your party has been devastated,"" he said. "
|
|
?CND1: CALL1 PART-ONE-BAD-ENDING
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PART-TWO-ENDING:ANY:0:0
|
|
ICALL2 GRAPHIC,G-ASTRIX
|
|
CRLF
|
|
CRLF
|
|
PRINTI "Astrix, pleased at our return, sat impassively as we gave a detailed account of our adventures. When we finished, he expressed his "
|
|
IN? SPIRIT-STONE,INVENTORY \?CCL3
|
|
IN? SIXTH-STONE,INVENTORY \?CCL3
|
|
PRINTI "delight that we had found the Two stones."
|
|
CRLF
|
|
CRLF
|
|
LESS? PARTY-MAX,5 \?CCL8
|
|
PRINTI """But this is not enough,"" Astrix said. ""The last stone, the Anvil, will be the most difficult to obtain, and the Legend says that the Five shall, having united the Six Stones, be led to the Anvil. Alas that you have come so far only to be defeated at the end!"""
|
|
CRLF
|
|
CRLF
|
|
CALL2 PART-ONE-BAD-ENDING,TRUE-VALUE
|
|
RSTACK
|
|
?CCL8: PRINTI """I believe, for the first time, that we may be able to end the Darkness that comes from the north,"" Astrix said. ""The Sisters we have, and the Two; one last task awaits you!"""
|
|
CRLF
|
|
CRLF
|
|
CALL2 MOVE-TO,THREE-CONNECTOR
|
|
RSTACK
|
|
?CCL3: PRINTI "disappointment that we had not fared better."
|
|
CRLF
|
|
CRLF
|
|
IN? SPIRIT-STONE,INVENTORY /?CTR10
|
|
IN? SIXTH-STONE,INVENTORY \?CCL11
|
|
?CTR10: PRINTI """You have done well to find even one of the Two, but I fear it is not"
|
|
JUMP ?CND9
|
|
?CCL11: PRINTI """You have failed in bringing back the Two; even had you brought one of them, I fear it would not be"
|
|
?CND9: PRINTI " enough,"" Astrix said. "
|
|
CALL1 PART-ONE-BAD-ENDING
|
|
RSTACK
|
|
|
|
|
|
.FUNCT TELL-WITH-COMMAS:ANY:1:1,TBL,CNT,OFF,OBJ
|
|
GET TBL,0 >CNT
|
|
SET 'OFF,1
|
|
?PRG1: PRINTC 32
|
|
GET TBL,OFF >OBJ
|
|
ICALL2 WPRINTD,OBJ
|
|
EQUAL? CNT,1 /TRUE
|
|
EQUAL? CNT,2 \?CCL7
|
|
PRINTI " and"
|
|
JUMP ?CND3
|
|
?CCL7: PRINTC 44
|
|
?CND3: DEC 'CNT
|
|
INC 'OFF
|
|
JUMP ?PRG1
|
|
|
|
.ENDSEG
|
|
|
|
.ENDI
|