zorkzero/clues.zap
historicalsource 8b3579aab4 Release 296
2019-04-16 09:52:54 -04:00

506 lines
9.9 KiB
Plaintext

.SEGMENT "HINTS"
.FUNCT DO-HINTS,Q,WIN,FCLR,WCLR,CHR,TMP,MAXC,?TMP1
HLIGHT H-NORMAL
CALL1 INIT-HINT-SCREEN >WIN
WINGET -3,WFSIZE
SHIFT STACK,-8 >Q
WINGET -3,WTOP
SUB STACK,1
DIV STACK,Q
ADD 1,STACK >TOP-HINT-LINE
WINGET -3,WHIGH
DIV STACK,Q
SUB STACK,1 >BOTTOM-HINT-NUM
WINGET -3,WFSIZE
BAND STACK,255 >Q
WINGET -3,WLEFT
SUB STACK,1
DIV STACK,Q
ADD 2,STACK >LEFT-HINT-COLUMN
?PRG1: CLEAR S-TEXT
SCREEN WIN
WINGET WIN,WCOLOR >WCLR
GET 0,0
BTST STACK,1 \?CCL5
ICALL CCURSET,2,9
COLOR 1,-1
JUMP ?CND3
?CCL5: COLOR 1,1
?CND3: ICALL HINT-TITLE,INVISICLUES,WIN
SCREEN S-FULL
WINGET S-FULL,WCOLOR >FCLR
WINGET S-TEXT,WCOLOR
BAND STACK,255 >?TMP1
WINGET S-TEXT,WCOLOR
SHIFT STACK,-8
COLOR ?TMP1,STACK
DIROUT D-TABLE-ON,SLINE
DIROUT D-TABLE-OFF
SET 'GET-HINT-ROUTINE,H-CHAPT-NAME
GET HINTS,0
ICALL2 H-PUT-UP-FROBS,STACK
ICALL2 H-NEW-CURSOR,H-CHAPT-NUM
GET HINTS,0 >MAXC
?PRG6: ZERO? DEMO-VERSION? /?CCL10
CALL2 INPUT-DEMO,1 >CHR
JUMP ?CND8
?CCL10: INPUT 1 >CHR
?CND8: EQUAL? CHR,CLICK1,CLICK2 \?CND11
CALL1 SELECT-HINT-BY-MOUSE >TMP
GRTR? TMP,0 /?CND11
EQUAL? TMP,-1 \?CCL17
SET 'CHR,78
JUMP ?CND11
?CCL17: EQUAL? TMP,-2 \?CCL19
SET 'CHR,80
JUMP ?CND11
?CCL19: EQUAL? TMP,-3 \?CCL21
SET 'CHR,13
JUMP ?CND11
?CCL21: EQUAL? TMP,-4 \?CCL23
SET 'CHR,81
?CND11: EQUAL? CHR,77,109,81 /?CTR25
EQUAL? CHR,113 \?CCL26
?CTR25: SET 'Q,TRUE-VALUE
JUMP ?REP7
?CCL23: SOUND S-BEEP
JUMP ?PRG6
?CCL26: EQUAL? CHR,78,110,DOWN-ARROW \?CCL30
ICALL H-NEW-CURSOR,H-CHAPT-NUM,TRUE-VALUE
EQUAL? H-CHAPT-NUM,MAXC \?CCL33
SET 'H-CHAPT-NUM,1
JUMP ?CND31
?CCL33: INC 'H-CHAPT-NUM
?CND31: SET 'H-QUEST-NUM,1
ICALL2 H-NEW-CURSOR,H-CHAPT-NUM
JUMP ?PRG6
?CCL30: EQUAL? CHR,80,112,UP-ARROW \?CCL35
ICALL H-NEW-CURSOR,H-CHAPT-NUM,TRUE-VALUE
EQUAL? H-CHAPT-NUM,1 \?CCL38
SET 'H-CHAPT-NUM,MAXC
JUMP ?CND36
?CCL38: DEC 'H-CHAPT-NUM
?CND36: SET 'H-QUEST-NUM,1
ICALL2 H-NEW-CURSOR,H-CHAPT-NUM
JUMP ?PRG6
?CCL35: EQUAL? CHR,13,10,32 \?CCL40
CALL1 H-PICK-QUESTION >Q
JUMP ?REP7
?CCL40: EQUAL? CHR,CLICK1,CLICK2 \?CCL42
GRTR? TMP,MAXC \?CCL45
SOUND S-BEEP
JUMP ?PRG6
?CCL45: ICALL H-NEW-CURSOR,H-CHAPT-NUM,TRUE-VALUE
SET 'H-CHAPT-NUM,TMP
SET 'H-QUEST-NUM,1
ICALL2 H-NEW-CURSOR,H-CHAPT-NUM
EQUAL? CHR,CLICK2 \?PRG6
CALL1 H-PICK-QUESTION >Q
?REP7: ZERO? Q /?PRG1
CLEAR -1
SCREEN WIN
BAND WCLR,255 >?TMP1
SHIFT WCLR,-8
COLOR ?TMP1,STACK
SCREEN S-FULL
BAND FCLR,255 >?TMP1
SHIFT FCLR,-8
COLOR ?TMP1,STACK
SCREEN S-TEXT
HLIGHT H-NORMAL
ICALL1 INIT-STATUS-LINE
PRINTI "Back to the story..."
CRLF
RETURN 2
?CCL42: SOUND S-BEEP
JUMP ?PRG6
.FUNCT H-PICK-QUESTION,CHR,MAXQ,Q,WID,TMP
?FCN: CATCH >PARSE-SENTENCE-ACTIVATION
HLIGHT H-NORMAL
CLEAR S-TEXT
GET HINTS,H-CHAPT-NUM
GET STACK,1
ICALL HINT-TITLE,STACK,S-WINDOW
CALL CENTER-LINE,M-MAIN-HINT-MENU,2 >WID
GET HINTS,H-CHAPT-NUM
GET STACK,0
SUB STACK,1 >MAXQ
SCREEN S-FULL
SET 'GET-HINT-ROUTINE,H-GET-QUEST
GET HINTS,H-CHAPT-NUM
GET STACK,0
SUB STACK,1
ICALL2 H-PUT-UP-FROBS,STACK
ICALL2 H-NEW-CURSOR,H-QUEST-NUM
?PRG1: ZERO? DEMO-VERSION? /?CCL5
CALL2 INPUT-DEMO,1 >CHR
JUMP ?CND3
?CCL5: INPUT 1 >CHR
?CND3: EQUAL? CHR,CLICK1,CLICK2 \?CND6
CALL2 SELECT-HINT-BY-MOUSE,WID >TMP
GRTR? TMP,0 /?CND6
EQUAL? TMP,-1 \?CCL12
SET 'CHR,78
JUMP ?CND6
?CCL12: EQUAL? TMP,-2 \?CCL14
SET 'CHR,80
JUMP ?CND6
?CCL14: EQUAL? TMP,-3 \?CCL16
SET 'CHR,13
JUMP ?CND6
?CCL16: EQUAL? TMP,-4 \?CCL18
SET 'CHR,81
JUMP ?CND6
?CCL18: EQUAL? TMP,-5 \?CCL20
SET 'CHR,77
?CND6: EQUAL? CHR,81,113 /TRUE
EQUAL? CHR,77,109 \?CCL25
SET 'Q,TRUE-VALUE
JUMP ?REP2
?CCL20: SOUND S-BEEP
JUMP ?PRG1
?CCL25: EQUAL? CHR,78,110,DOWN-ARROW \?CCL27
ICALL H-NEW-CURSOR,H-QUEST-NUM,TRUE-VALUE
EQUAL? H-QUEST-NUM,MAXQ \?CCL30
SET 'H-QUEST-NUM,1
JUMP ?CND28
?CCL30: INC 'H-QUEST-NUM
?CND28: ICALL2 H-NEW-CURSOR,H-QUEST-NUM
JUMP ?PRG1
?CCL27: EQUAL? CHR,80,112,UP-ARROW \?CCL32
ICALL H-NEW-CURSOR,H-QUEST-NUM,TRUE-VALUE
EQUAL? H-QUEST-NUM,1 \?CCL35
SET 'H-QUEST-NUM,MAXQ
JUMP ?CND33
?CCL35: DEC 'H-QUEST-NUM
?CND33: ICALL2 H-NEW-CURSOR,H-QUEST-NUM
JUMP ?PRG1
?CCL32: EQUAL? CHR,CLICK1,CLICK2 \?CCL37
GRTR? TMP,MAXQ \?CCL40
SOUND S-BEEP
JUMP ?PRG1
?CCL40: ICALL H-NEW-CURSOR,H-QUEST-NUM,TRUE-VALUE
SET 'H-QUEST-NUM,TMP
ICALL2 H-NEW-CURSOR,H-QUEST-NUM
EQUAL? CHR,CLICK2 \?PRG1
ICALL1 DISPLAY-HINT
JUMP ?REP2
?CCL37: EQUAL? CHR,13,10,32 \?CCL44
ICALL1 DISPLAY-HINT
?REP2: ZERO? Q /?FCN
RFALSE
?CCL44: SOUND S-BEEP
JUMP ?PRG1
.FUNCT H-NEW-CURSOR,POS,OFF?,Y,X
ADD TOP-HINT-LINE,POS >Y
SET 'X,LEFT-HINT-COLUMN
GRTR? POS,BOTTOM-HINT-NUM \?CND1
SUB Y,BOTTOM-HINT-NUM >Y
GETB 0,33
DIV STACK,2 >X
?CND1: ICALL CCURSET,Y,X
ZERO? OFF? \?CCL5
HLIGHT H-INVERSE
JUMP ?CND3
?CCL5: HLIGHT H-NORMAL
?CND3: CALL GET-HINT-ROUTINE,POS
PRINT STACK
PRINTC 32
ZERO? OFF? \FALSE
HLIGHT H-NORMAL
RTRUE
.FUNCT SELECT-HINT-BY-MOUSE,WID,VAL,MID,X,Y,?TMP1
WINGET -3,WFSIZE
SHIFT STACK,-8 >VAL
GET 0,27
GET STACK,2 >Y
GET 0,27
GET STACK,1 >X
SUB Y,1
DIV STACK,VAL >VAL
GETB 0,33 >?TMP1
WINGET -3,WFSIZE
BAND STACK,255
MUL ?TMP1,STACK
DIV STACK,2 >MID
SUB TOP-HINT-LINE,1
LESS? VAL,STACK \?CCL3
EQUAL? VAL,1 \?CCL6
DIV WID,2 >VAL
ZERO? VAL /?CCL9
SUB MID,VAL
GRTR? X,STACK \?CCL9
ADD MID,VAL
LESS? X,STACK \?CCL9
RETURN -5
?CCL9: GRTR? X,MID /?CCL14
RETURN -1
?CCL14: RETURN -3
?CCL6: EQUAL? VAL,2 \FALSE
GRTR? X,MID /?CCL19
RETURN -2
?CCL19: RETURN -4
?CCL3: ADD 1,VAL
SUB STACK,TOP-HINT-LINE >VAL
GRTR? X,MID \?CND21
ADD VAL,BOTTOM-HINT-NUM >VAL
?CND21: RETURN VAL
.FUNCT INVERSE-LINE,LN,INV
ASSIGNED? 'INV /?CND1
SET 'INV,H-INVERSE
?CND1: ZERO? LN /?CND3
ICALL CCURSET,LN,1
?CND3: HLIGHT INV
ZERO? INV \?CCL7
ERASE 1
RTRUE
?CCL7: FONT 4
GETB 0,39 >LN
WINGET -3,WWIDE
ADD LN,STACK
DIV STACK,LN
ICALL2 PRINT-SPACES,STACK
FONT 1
HLIGHT H-NORMAL
RTRUE
.FUNCT DISPLAY-HINT,H,MX,CNT,CV,SHIFT?,COUNT-OFFS,WID,CURCX,CURC,FLG,?TMP1
SET 'CNT,2
HLIGHT H-NORMAL
CLEAR S-TEXT
SCREEN S-WINDOW
ICALL INVERSE-LINE,3,H-NORMAL
ICALL RIGHT-LINE,Q-RESUME-STORY,3
ICALL INVERSE-LINE,2,H-NORMAL
ICALL RIGHT-LINE,RETURN-SEE-NEW-HINT,2
GET 0,8
BTST STACK,32 \?CND1
ICALL CENTER-LINE,H-OR-USE-MOUSE,3
?CND1: ICALL INVERSE-LINE,1,H-NORMAL
HLIGHT H-BOLD
GET HINTS,H-CHAPT-NUM >?TMP1
ADD H-QUEST-NUM,1
GET ?TMP1,STACK >H
SUB H-CHAPT-NUM,1
GET HINT-COUNTS,STACK >CV
GET H,1
ICALL CENTER-LINE,STACK,1,H-INVERSE
HLIGHT H-NORMAL
CALL CENTER-LINE,M-SEE-HINT-MENU,2 >WID
GET H,0 >MX
SCREEN S-TEXT
CURSET 1,1
MOD H-QUEST-NUM,2 >SHIFT?
SUB H-QUEST-NUM,1
DIV STACK,2 >COUNT-OFFS
GETB CV,COUNT-OFFS >CURCX
ZERO? SHIFT? /?CCL5
SHIFT CURCX,-4
JUMP ?CND3
?CCL5: PUSH CURCX
?CND3: BAND STACK,15
ADD 2,STACK >CURC
?PRG6: EQUAL? CNT,CURC /?REP7
PRINTC 9
GET H,CNT
PRINT STACK
CRLF
INC 'CNT
JUMP ?PRG6
?REP7: SET 'FLG,TRUE-VALUE
?PRG11: ZERO? FLG /?CND13
SET 'FLG,FALSE-VALUE
GRTR? CNT,MX \?CCL17
PRINT NO-MORE-HINTS
CRLF
SCREEN S-WINDOW
ICALL INVERSE-LINE,2,H-NORMAL
ICALL CENTER-LINE,M-SEE-HINT-MENU,2
SCREEN S-TEXT
JUMP ?CND13
?CCL17: SUB MX,CNT
ADD STACK,1
PRINTN STACK
PRINTI "> "
?CND13: ZERO? DEMO-VERSION? /?CCL20
CALL2 INPUT-DEMO,1 >CURC
JUMP ?CND18
?CCL20: INPUT 1 >CURC
?CND18: EQUAL? CURC,CLICK1,CLICK2 \?CND21
CALL2 SELECT-HINT-BY-MOUSE,WID >CURCX
GRTR? CURCX,0 /?CND21
EQUAL? CURCX,-3 \?CCL27
SET 'CURC,13
JUMP ?CND21
?CCL27: EQUAL? CURCX,-4 \?CCL29
SET 'CURC,81
JUMP ?CND21
?CCL29: EQUAL? CURCX,-5 \?CCL31
SET 'CURC,77
?CND21: EQUAL? CURC,77,109,81 /?CTR33
EQUAL? CURC,113 \?CCL34
?CTR33: ZERO? SHIFT? /?CCL39
GETB CV,COUNT-OFFS
BAND STACK,15 >?TMP1
SUB CNT,2
SHIFT STACK,4
BOR ?TMP1,STACK
PUTB CV,COUNT-OFFS,STACK
JUMP ?CND37
?CCL31: SOUND S-BEEP
JUMP ?PRG11
?CCL39: GETB CV,COUNT-OFFS
BAND STACK,240 >?TMP1
SUB CNT,2
BOR ?TMP1,STACK
PUTB CV,COUNT-OFFS,STACK
?CND37: EQUAL? CURC,81,113 \TRUE
THROW TRUE-VALUE,PARSE-SENTENCE-ACTIVATION
JUMP ?PRG11
?CCL34: EQUAL? CURC,13,10 \?CCL44
GRTR? CNT,MX /?CCL47
SET 'FLG,TRUE-VALUE
GET H,CNT
PRINT STACK
CRLF
IGRTR? 'CNT,MX \?PRG11
SET 'FLG,FALSE-VALUE
PRINT NO-MORE-HINTS
CRLF
SCREEN S-WINDOW
ICALL INVERSE-LINE,2,H-NORMAL
ICALL CENTER-LINE,M-SEE-HINT-MENU,2
SCREEN S-TEXT
JUMP ?PRG11
?CCL47: SOUND S-BEEP
JUMP ?PRG11
?CCL44: SOUND S-BEEP
JUMP ?PRG11
.FUNCT H-CHAPT-NAME,N
GET HINTS,N
GET STACK,1
RSTACK
.FUNCT H-GET-QUEST,N,?TMP1
GET HINTS,H-CHAPT-NUM >?TMP1
ADD N,1
GET ?TMP1,STACK
GET STACK,1
RSTACK
.FUNCT H-PUT-UP-FROBS,MX,ST,X,Y
HLIGHT H-NORMAL
SET 'X,LEFT-HINT-COLUMN
SET 'Y,TOP-HINT-LINE
?PRG1: IGRTR? 'ST,MX /TRUE
INC 'Y
ICALL CCURSET,Y,X
CALL GET-HINT-ROUTINE,ST
PRINT STACK
EQUAL? ST,BOTTOM-HINT-NUM \?PRG1
SET 'Y,TOP-HINT-LINE
GETB 0,33
DIV STACK,2 >X
JUMP ?PRG1
.FUNCT INIT-HINT-SCREEN
CLEAR -1
SCREEN S-FULL
ZERO? BORDER-ON /?CND1
DISPLAY HINT-BORDER,1,1
?CND1: ICALL2 SPLIT-BY-PICTURE,TEXT-WINDOW-PIC-LOC
SCREEN S-TEXT
RETURN S-WINDOW
.FUNCT HINT-TITLE,TITLE,WIN,THIRD
ASSIGNED? 'THIRD /?CND1
SET 'THIRD,TRUE-VALUE
?CND1: SCREEN WIN
ICALL INVERSE-LINE,1,H-NORMAL
ICALL INVERSE-LINE,2,H-NORMAL
ICALL INVERSE-LINE,3,H-NORMAL
HLIGHT H-BOLD
ICALL CENTER-LINE,TITLE,1,H-INVERSE
HLIGHT H-NORMAL
ICALL LEFT-LINE,2,NEXT-HINT
GET 0,8
BTST STACK,32 \?CND3
ICALL CENTER-LINE,H-OR-USE-MOUSE,3
?CND3: ICALL LEFT-LINE,3,PREVIOUS-HINT
ZERO? THIRD /FALSE
ICALL RIGHT-LINE,RETURN-SEE-HINT,2
CALL RIGHT-LINE,Q-RESUME-STORY,3
RSTACK
.FUNCT LEFT-LINE,LN,STR,INV
ICALL CCURSET,LN,1
ZERO? INV /?CND1
HLIGHT INV
?CND1: PRINT STR
ZERO? INV /FALSE
HLIGHT H-NORMAL
RTRUE
.FUNCT RIGHT-LINE,STR,LN,INV,LEN
CALL JUSTIFIED-LINE,STR,LN,INV,LEN,1
RSTACK
.FUNCT CENTER-LINE,STR,LN,INV,LEN
CALL JUSTIFIED-LINE,STR,LN,INV,LEN,2
RSTACK
.FUNCT JUSTIFIED-LINE,STR,LN,INV,LEN,CTR
ZERO? LN \?CCL3
CURGET SLINE
GET SLINE,0 >LN
JUMP ?CND1
?CCL3: DEC 'LN
WINGET -3,WFSIZE
SHIFT STACK,-8
MUL LN,STACK
ADD 1,STACK >LN
?CND1: ZERO? LEN \?CND4
DIROUT D-TABLE-ON,SLINE
PRINT STR
PRINTC 32
DIROUT D-TABLE-OFF
GET 0,24 >LEN
?CND4: WINGET -3,WWIDE
SUB STACK,LEN
DIV STACK,CTR
CURSET LN,STACK
ZERO? INV /?CND6
HLIGHT INV
?CND6: PRINT STR
PRINTC 32
ZERO? INV \?CCL9
RETURN LEN
?CCL9: HLIGHT H-NORMAL
RETURN LEN
.ENDSEG
.ENDI