abyss/misc.zap

611 lines
13 KiB
Plaintext

.FUNCT VISIBLE?:ANY:1:1,OBJ
CALL ACCESSIBLE?,OBJ,TRUE-VALUE
RSTACK
.FUNCT CLOSED?:ANY:1:2,OBJ,VIS?
ZERO? OBJ /TRUE
IN? OBJ,ROOMS /FALSE
FSET? OBJ,FL-CONTAINER \?CCL7
FSET? OBJ,FL-OPEN /FALSE
ZERO? VIS? /TRUE
FSET? OBJ,FL-TRANSPARENT /FALSE
RTRUE
?CCL7: FSET? OBJ,FL-SURFACE /FALSE
FSET? OBJ,FL-ALIVE /FALSE
FSET? OBJ,FL-PERSON /FALSE
RTRUE
.FUNCT ACCESSIBLE?:ANY:1:2,OBJ,VIS?,WLOC,OLOC,CLSD-PTR,PTR,CNT,TBL,END
ZERO? OBJ /FALSE
EQUAL? OBJ,ROOMS /TRUE
SET 'PTR,GL-LOC-TRAIL
SET 'OLOC,OBJ
?PRG5: PUT PTR,0,OLOC
INC 'CNT
ZERO? OLOC /?REP6
EQUAL? OLOC,WINNER /?REP6
IN? OLOC,ROOMS /?REP6
IN? OLOC,LOCAL-GLOBALS /?REP6
IN? OLOC,GLOBAL-OBJECTS /?REP6
IN? OLOC,GENERIC-OBJECTS /?REP6
LOC OLOC >OLOC
ADD PTR,2 >PTR
ZERO? OLOC /?PRG5
CALL CLOSED?,OLOC,VIS?
ZERO? STACK /?PRG5
ZERO? CLSD-PTR \?PRG5
SET 'CLSD-PTR,PTR
JUMP ?PRG5
?REP6: SET 'PTR,FALSE-VALUE
SET 'WLOC,WINNER
?PRG21: ZERO? WLOC /FALSE
INTBL? WLOC,GL-LOC-TRAIL,CNT >PTR /?REP22
IN? WLOC,ROOMS /?REP22
LOC WLOC >WLOC
ZERO? WLOC /?PRG21
CALL CLOSED?,WLOC,VIS?
ZERO? STACK /?PRG21
RFALSE
?REP22: ZERO? WLOC /?CND33
IN? WLOC,ROOMS \?CND33
ZERO? PTR \?CND33
GETPT WLOC,P?GLOBAL >TBL
ZERO? TBL /?CND33
PTSIZE TBL
ADD TBL,STACK >END
?PRG41: LESS? TBL,END \?CND33
GET TBL,0
INTBL? STACK,GL-LOC-TRAIL,CNT >PTR /?CND33
ADD TBL,2 >TBL
JUMP ?PRG41
?CND33: ZERO? WLOC /?CND47
IN? WLOC,ROOMS \?CND47
ZERO? PTR \?CND47
FIRST? GLOBAL-OBJECTS >TBL /?PRG54
?PRG54: ZERO? TBL /?CND47
INTBL? TBL,GL-LOC-TRAIL,CNT >PTR /?CND47
NEXT? TBL >TBL /?PRG54
JUMP ?PRG54
?CND47: ZERO? PTR /FALSE
ZERO? CLSD-PTR /TRUE
GRTR? PTR,CLSD-PTR /FALSE
RTRUE
.FUNCT RT-PRINT-DESC:ANY:1:1,OBJ
FSET? OBJ,FL-HAS-SDESC \?CCL3
GETP OBJ,P?ACTION
CALL STACK,M-OBJDESC
RSTACK
?CCL3: PRINTD OBJ
RTRUE
.FUNCT RT-PRINT-ARTICLE:ANY:3:3,OBJ,ART,CAP?,MASK
ZERO? CAP? \?CND1
PRINTC 32
SET 'MASK,32
?CND1: EQUAL? ART,K-ART-A \?CCL5
FSET? OBJ,FL-YOUR \?CCL8
BOR 89,MASK
PRINTC STACK
PRINTI "our"
RTRUE
?CCL8: FSET? OBJ,FL-PLURAL \?CCL10
BOR 83,MASK
PRINTC STACK
PRINTI "ome"
RTRUE
?CCL10: BOR 65,MASK
PRINTC STACK
FSET? OBJ,FL-VOWEL \FALSE
PRINTC 110
RTRUE
?CCL5: EQUAL? ART,K-ART-THE \?CCL15
FSET? OBJ,FL-YOUR \?CCL18
BOR 89,MASK
PRINTC STACK
PRINTI "our"
RTRUE
?CCL18: BOR 84,MASK
PRINTC STACK
PRINTI "he"
RTRUE
?CCL15: EQUAL? ART,K-ART-ANY \?CCL20
BOR 65,MASK
PRINTC STACK
PRINTI "ny"
RTRUE
?CCL20: EQUAL? ART,K-ART-HE \?CCL22
FSET? OBJ,FL-PLURAL \?CCL25
FSET? OBJ,FL-COLLECTIVE /?CCL25
BOR 84,MASK
PRINTC STACK
PRINTI "hey"
RTRUE
?CCL25: FSET? OBJ,FL-PERSON /?CCL29
BOR 73,MASK
PRINTC STACK
PRINTC 116
RTRUE
?CCL29: EQUAL? OBJ,CH-PLAYER \?CCL31
BOR 89,MASK
PRINTC STACK
PRINTI "ou"
RTRUE
?CCL31: FSET? OBJ,FL-FEMALE \?CCL33
BOR 83,MASK
PRINTC STACK
PRINTI "he"
RTRUE
?CCL33: BOR 72,MASK
PRINTC STACK
PRINTC 101
RTRUE
?CCL22: EQUAL? ART,K-ART-HIM \?CCL35
FSET? OBJ,FL-PLURAL \?CCL38
FSET? OBJ,FL-COLLECTIVE /?CCL38
BOR 84,MASK
PRINTC STACK
PRINTI "hem"
RTRUE
?CCL38: FSET? OBJ,FL-PERSON /?CCL42
BOR 73,MASK
PRINTC STACK
PRINTC 116
RTRUE
?CCL42: EQUAL? OBJ,CH-PLAYER \?CCL44
BOR 89,MASK
PRINTC STACK
PRINTI "ou"
RTRUE
?CCL44: FSET? OBJ,FL-FEMALE \?CCL46
BOR 72,MASK
PRINTC STACK
PRINTI "er"
RTRUE
?CCL46: BOR 72,MASK
PRINTC STACK
PRINTI "im"
RTRUE
?CCL35: EQUAL? ART,K-ART-HIS \FALSE
FSET? OBJ,FL-PLURAL \?CCL51
FSET? OBJ,FL-COLLECTIVE /?CCL51
BOR 84,MASK
PRINTC STACK
PRINTI "heir"
RTRUE
?CCL51: FSET? OBJ,FL-PERSON /?CCL55
BOR 73,MASK
PRINTC STACK
PRINTI "ts"
RTRUE
?CCL55: EQUAL? OBJ,CH-PLAYER \?CCL57
BOR 89,MASK
PRINTC STACK
PRINTI "our"
RTRUE
?CCL57: FSET? OBJ,FL-FEMALE \?CCL59
BOR 72,MASK
PRINTC STACK
PRINTI "er"
RTRUE
?CCL59: BOR 72,MASK
PRINTC STACK
PRINTI "is"
RTRUE
.FUNCT RT-PRINT-OBJ:ANY:0:4,O,ART,CAP?,VERB,MASK
ASSIGNED? 'ART /?CND1
SET 'ART,K-ART-THE
?CND1: ZERO? O \?CND3
SET 'O,PRSO
?CND3: FSET? O,FL-HAS-SDESC \?CCL7
GETP O,P?ACTION
ICALL STACK,M-OBJDESC,ART,CAP?
JUMP ?CND5
?CCL7: EQUAL? ART,K-ART-HE,K-ART-HIM,K-ART-HIS \?CCL9
FSET O,FL-SEEN
ICALL RT-PRINT-ARTICLE,O,ART,CAP?
JUMP ?CND5
?CCL9: FSET? O,FL-NO-ARTICLE /?CCL11
FSET O,FL-SEEN
ICALL RT-PRINT-ARTICLE,O,ART,CAP?
PRINTC 32
ICALL2 RT-PRINT-DESC,O
JUMP ?CND5
?CCL11: ZERO? CAP? \?CND12
PRINTC 32
SET 'MASK,32
?CND12: EQUAL? O,CH-PLAYER \?CCL16
BOR 89,MASK
PRINTC STACK
PRINTI "ou"
JUMP ?CND5
?CCL16: ICALL2 RT-PRINT-DESC,O
?CND5: ZERO? VERB /FALSE
CALL RT-PRINT-VERB,O,VERB
RSTACK
.FUNCT RT-PRINT-VERB:ANY:2:2,OBJ,VERB
PRINTC 32
EQUAL? OBJ,CH-PLAYER /?CTR2
FSET? OBJ,FL-PLURAL \?CCL3
FSET? OBJ,FL-COLLECTIVE /?CCL3
?CTR2: PRINT VERB
RTRUE
?CCL3: EQUAL? VERB,STR?56 \?CCL10
PRINTI "is"
RTRUE
?CCL10: EQUAL? VERB,STR?61 \?CCL12
PRINTI "has"
RTRUE
?CCL12: EQUAL? VERB,STR?62 \?CCL14
PRINTI "tries"
RTRUE
?CCL14: EQUAL? VERB,STR?63 \?CCL16
PRINTI "empties"
RTRUE
?CCL16: EQUAL? VERB,STR?64 \?CCL18
PRINTI "flies"
RTRUE
?CCL18: EQUAL? VERB,STR?65 \?CCL20
PRINTI "dries"
RTRUE
?CCL20: PRINT VERB
EQUAL? VERB,STR?66,STR?67,STR?68 /?CCL22
EQUAL? VERB,STR?69,STR?70,STR?71 /?CCL22
EQUAL? VERB,STR?72 \?CND21
?CCL22: PRINTC 101
?CND21: PRINTC 115
RTRUE
.FUNCT THIS-IS-IT:ANY:1:1,OBJ
EQUAL? OBJ,FALSE-VALUE,ROOMS,NOT-HERE-OBJECT /TRUE
EQUAL? OBJ,CH-PLAYER,INTDIR,GLOBAL-HERE /TRUE
EQUAL? PRSA,V?WALK \?CND1
EQUAL? OBJ,PRSO /TRUE
?CND1: FSET? OBJ,FL-PERSON \?CCL11
FSET? OBJ,FL-FEMALE \?CCL14
FSET HER,FL-TOUCHED
SET 'P-HER-OBJECT,OBJ
RTRUE
?CCL14: FSET HIM,FL-TOUCHED
SET 'P-HIM-OBJECT,OBJ
RTRUE
?CCL11: FSET? OBJ,FL-PLURAL \?CCL16
FSET? OBJ,FL-COLLECTIVE /?CCL16
FSET THEM,FL-TOUCHED
SET 'P-THEM-OBJECT,OBJ
RTRUE
?CCL16: FSET IT,FL-TOUCHED
SET 'P-IT-OBJECT,OBJ
RTRUE
.FUNCT RT-IN-ON-MSG:ANY:1:2,OBJ,CAP?,MASK
ZERO? CAP? \?CND1
PRINTC 32
SET 'MASK,32
?CND1: FSET? OBJ,FL-SURFACE \?CCL5
BOR 79,MASK
PRINTC STACK
JUMP ?CND3
?CCL5: BOR 73,MASK
PRINTC STACK
?CND3: PRINTC 110
RTRUE
.FUNCT RT-OUT-OFF-MSG:ANY:1:2,OBJ,CAP?
FSET? OBJ,FL-SURFACE /?CCL3
FSET? OBJ,FL-CONTAINER \FALSE
?CCL3: ZERO? CAP? \?CCL8
PRINTI " o"
JUMP ?CND6
?CCL8: PRINTC 79
?CND6: FSET? OBJ,FL-SURFACE \?CCL11
PRINTI "ff"
RTRUE
?CCL11: PRINTI "ut"
RTRUE
.FUNCT RT-OPEN-MSG:ANY:0:1,OBJ
ZERO? OBJ \?CND1
SET 'OBJ,PRSO
?CND1: PRINTC 32
FSET? OBJ,FL-OPEN \?CCL5
PRINTI "open"
RTRUE
?CCL5: PRINTI "closed"
RTRUE
.FUNCT TOUCH-VERB?:ANY:0:0
EQUAL? PRSA,V?UNWEAR,V?WEAR /TRUE
EQUAL? PRSA,V?TAKE,V?PUT-IN,V?PUT /TRUE
EQUAL? PRSA,V?OPEN,V?DROP,V?CLOSE /TRUE
RFALSE
.FUNCT CLOCKER:ANY:0:0,NT,RTN,TIME,ANY?,MULT?,DIF,N,VAL,I,Z1,Z2
ZERO? CLOCK-WAIT /?CND1
SET 'CLOCK-WAIT,FALSE-VALUE
RFALSE
?CND1: SET 'NT,GL-MOVES
SET 'GL-NEW-TIME,NT
SET 'VAL,FALSE-VALUE
?PRG3: SET 'RTN,FALSE-VALUE
SET 'TIME,NT
SET 'ANY?,FALSE-VALUE
SET 'MULT?,FALSE-VALUE
SET 'I,0
?PRG5: GET GL-Q-TBL,I >Z1
ADD I,1
GET GL-Q-TBL,STACK >Z2
ZERO? Z1 /?CND7
GRTR? Z2,TIME /?CND7
ZERO? RTN /?CND11
EQUAL? Z2,TIME \?CND11
SET 'MULT?,TRUE-VALUE
?CND11: SET 'RTN,Z1
SET 'TIME,Z2
SET 'N,I
SET 'ANY?,TRUE-VALUE
?CND7: ADD I,2 >I
LESS? I,K-Q-SIZE \?REP6
LESS? I,GL-Q-MAX /?PRG5
?REP6: ZERO? ANY? /?REP4
SET 'GL-MOVES,TIME
FSET? CH-PLAYER,FL-ASLEEP /?CND22
ICALL1 UPDATE-STATUS-LINE
?CND22: LESS? TIME,NT /?PRD24
PUSH 0
JUMP ?PRD25
?PRD24: PUSH 1
?PRD25: SET 'DIF,STACK
PUT GL-Q-TBL,N,0
ADD N,1
PUT GL-Q-TBL,STACK,0
ADD N,2
EQUAL? STACK,GL-Q-MAX \?CND26
SUB GL-Q-MAX,2 >GL-Q-MAX
?CND26: SET 'GL-CLK-RUN,TRUE-VALUE
CALL RTN
ZERO? STACK /?CND28
SET 'VAL,TRUE-VALUE
?CND28: SET 'GL-CLK-RUN,FALSE-VALUE
GRTR? GL-MOVES,NT \?CND30
SET 'GL-NEW-TIME,GL-MOVES
SET 'NT,GL-MOVES
?CND30: ZERO? VAL /?PRG3
ZERO? MULT? \?PRG3
ZERO? DIF /?PRG3
EQUAL? PRSA,V?WAIT \?PRG3
FSET? CH-PLAYER,FL-ASLEEP /?PRG3
SET 'VAL,FALSE-VALUE
CRLF
PRINTI "Do you want to continue waiting"
CALL1 YES?
ZERO? STACK \?CCL41
SET 'NT,TIME
?REP4: SET 'GL-MOVES,NT
INC 'GL-MOVES
RFALSE
?CCL41: PRINT K-TIME-PASSES-MSG
JUMP ?PRG3
.FUNCT RT-QUEUE:ANY:2:3,RTN,TIME,ABS?,I
?PRG1: GET GL-Q-TBL,I
ZERO? STACK \?CCL5
PUT GL-Q-TBL,I,RTN
ADD I,1
PUT GL-Q-TBL,STACK,TIME
ADD I,2
GRTR? STACK,GL-Q-MAX \TRUE
ADD I,2 >GL-Q-MAX
RTRUE
?CCL5: ADD I,2 >I
LESS? I,K-Q-SIZE /?PRG1
RFALSE
.FUNCT RT-DEQUEUE:ANY:1:1,RTN,I
?PRG1: GET GL-Q-TBL,I
EQUAL? STACK,RTN \?CCL5
PUT GL-Q-TBL,I,0
ADD I,1
PUT GL-Q-TBL,STACK,0
ADD I,2
EQUAL? STACK,GL-Q-MAX \TRUE
SUB GL-Q-MAX,2 >GL-Q-MAX
RTRUE
?CCL5: ADD I,2 >I
LESS? I,K-Q-SIZE \FALSE
LESS? I,GL-Q-MAX /?PRG1
RFALSE
.FUNCT RT-IS-QUEUED?:ANY:1:1,RTN,TIME,I
?PRG1: GET GL-Q-TBL,I
EQUAL? STACK,RTN \?CCL5
ADD I,1
GET GL-Q-TBL,STACK >TIME
RETURN TIME
?CCL5: ADD I,2 >I
LESS? I,K-Q-SIZE \FALSE
LESS? I,GL-Q-MAX /?PRG1
RFALSE
.FUNCT C-PIXELS:ANY:1:1,X
SUB X,1
MUL STACK,GL-FONT-X
ADD STACK,1
RSTACK
.FUNCT L-PIXELS:ANY:1:1,Y
SUB Y,1
MUL STACK,GL-FONT-Y
ADD STACK,1
RSTACK
.FUNCT PIXELS-C:ANY:1:1,X
SUB X,1
DIV STACK,GL-FONT-X
ADD STACK,1
RSTACK
.FUNCT PIXELS-L:ANY:1:1,Y
SUB Y,1
DIV STACK,GL-FONT-Y
ADD STACK,1
RSTACK
.FUNCT CCURSET:ANY:2:3,Y,X,W,?TMP1
ASSIGNED? 'W /?CND1
SET 'W,-3
?CND1: CALL2 L-PIXELS,Y >?TMP1
CALL2 C-PIXELS,X
CURSET ?TMP1,STACK,W
RTRUE
.FUNCT CCURGET:ANY:1:1,TBL
CURGET TBL
GET TBL,0
CALL2 PIXELS-L,STACK
PUT TBL,0,STACK
GET TBL,1
CALL2 PIXELS-C,STACK
PUT TBL,1,STACK
RETURN TBL
.FUNCT CSPLIT:ANY:1:1,Y
MUL Y,GL-FONT-Y
SPLIT STACK
RTRUE
.FUNCT CWINPOS:ANY:3:3,W,Y,X,?TMP1
CALL2 L-PIXELS,Y >?TMP1
CALL2 C-PIXELS,X
WINPOS W,?TMP1,STACK
RTRUE
.FUNCT CWINSIZE:ANY:3:3,W,Y,X,?TMP1
MUL Y,GL-FONT-Y >?TMP1
MUL X,GL-FONT-X
WINSIZE W,?TMP1,STACK
RTRUE
.FUNCT CSCROLL:ANY:1:2,W,Y
ASSIGNED? 'Y /?CND1
SET 'Y,1
?CND1: MUL Y,GL-FONT-Y
SCROLL W,STACK
RTRUE
.FUNCT RT-SCRIPT-INBUF:ANY:0:1,BUF,CNT,N,CHR
ASSIGNED? 'BUF /?CND1
SET 'BUF,P-INBUF
?CND1: GETB BUF,1 >N
DIROUT D-SCREEN-OFF
INC 'BUF
?PRG3: IGRTR? 'CNT,N /?REP4
GETB BUF,CNT >CHR
LESS? CHR,97 /?CCL10
GRTR? CHR,122 /?CCL10
SUB CHR,32
PRINTC STACK
JUMP ?PRG3
?CCL10: PRINTC CHR
JUMP ?PRG3
?REP4: CRLF
DIROUT D-SCREEN-ON
RTRUE
.FUNCT GO:ANY:0:0
?FCN: GETB 0,33 >GL-SCR-WID
LESS? GL-SCR-WID,64 \?CND1
PRINTI "[The screen is too narrow.]"
CRLF
QUIT
?CND1: WINGET 0,WFSIZE
SHIFT STACK,-8 >GL-FONT-Y
WINGET 0,WFSIZE
BAND STACK,255 >GL-FONT-X
DIROUT K-D-TBL-ON,K-DIROUT-TBL
PRINTC 32
DIROUT K-D-TBL-OFF
GET 0,24 >GL-SPACE-WIDTH
ZERO? GL-SPACE-WIDTH \?CND3
GET 0,17 >GL-SPACE-WIDTH
GETB 0,33
DIV GL-SPACE-WIDTH,STACK >GL-SPACE-WIDTH
?CND3: MOUSE-LIMIT -1
CLEAR -1
ICALL2 INIT-STATUS-LINE,FALSE-VALUE
ICALL1 UPDATE-STATUS-LINE
ICALL RT-QUEUE,RT-I-GAS-MIX,GL-MOVES
ICALL RT-QUEUE,RT-I-LEAVE-1,GL-MOVES
ADD GL-MOVES,90
ICALL RT-QUEUE,RT-I-RETURN-1,STACK
ADD GL-MOVES,120
ICALL RT-QUEUE,RT-I-CRANE-1,STACK
ADD GL-MOVES,3
ICALL RT-QUEUE,RT-I-NITROGEN-LEAK,STACK
ICALL RT-QUEUE,RT-I-TEMP,GL-MOVES
ADD GL-MOVES,1320
ICALL RT-QUEUE,RT-I-CAB-FIXED,STACK
ICALL1 V-VERSION
CRLF
PRINTI " 'Catfish' DeVries runs his eye over the gauges on the wall of Deepcore's gas-mix room. ""They're done, Bud,"" he says, ""Cooked to a turn."" He spins the wheel in the steel door to the compression chamber, and it eases open with a sigh.
A man with a military haircut quickly steps through the door, apparently undisturbed by the six claustrophobic hours of compression that will enable him to survive the atmosphere 2,000 feet below the sea's surface. He is followed by three other men and one very pretty woman.
""Brigman?"" he says to you. ""Coffey. Team leader."" He gestures to the others. ""Willhite, Schoenick, Monk. I gather you already know the little lady.""
Lindsey glares at him. ""Listen, Tarzan,"" she snaps, ""Let's get one thing straight...""
A nervous voice over the intercom interrupts her. ""Bud? It's Hippy. I'm in the Control Module and I got something here on the screen you should take a look at. Pronto.""
You run out through the sub-bay with the others close on your heels. When you arrive in the Command Module, Hippy is pointing to the ROV screen. Coffey and the others crowd around behind you, looking over your shoulder.
""It's a small submersible over by the Montana,"" Hippy says. ""I can't make it out real well, but I saw some divers leaving her just a minute ago.""
"
MARGIN 50,50
PRINTI "[GRAPHIC: A close-up of the ROV screen, with a hint of the controls that surround it. On the screen is a murky picture of a submersible.]
"
MARGIN 0,0
PRINTI " ""Shit!"" Coffey shouts. ""We've got to secure that boat! Monk, take Willhite and Schoenick and that big rig we saw in the MoonPool. I'll go in the submersible we came down on. Brigman, I need some drivers.""
One-Night cuts him off. ""I decide who drives what around here, mister. I'll take your boys over in Flatbed. Hippy will drive you in Cab Three. We leave in two minutes.""
One-Night and Hippy leave the Command Module, followed by the SEALs. You are left alone with Lindsey and Catfish.
"
PRINTI "[MORE]"
INPUT 1
CRLF
ICALL1 INIT-STATUS-LINE
CLEAR 6
WINGET 0,K-W-YSIZE
SUB STACK,GL-FONT-Y
CURSET STACK,1
ICALL1 MAIN-LOOP
JUMP ?FCN
.ENDI