mirror of
https://github.com/historicalsource/abyss
synced 2024-04-26 22:19:24 +03:00
1865 lines
40 KiB
Plaintext
1865 lines
40 KiB
Plaintext
|
|
|
|
.FUNCT V-DESC-LEVEL:ANY:0:0
|
|
PRINTC 91
|
|
EQUAL? P-PRSA-WORD,W?SUPER,W?SUPERBRIEF \?CCL3
|
|
PRINTI "Super brief is not supported"
|
|
JUMP ?CND1
|
|
?CCL3: EQUAL? P-PRSA-WORD,W?BRIEF \?CCL6
|
|
SET 'VERBOSITY,1
|
|
PRINTI "Brief"
|
|
JUMP ?CND4
|
|
?CCL6: SET 'VERBOSITY,2
|
|
PRINTI "Verbose"
|
|
?CND4: PRINTI " descriptions"
|
|
?CND1: PRINTR ".]"
|
|
|
|
|
|
.FUNCT V-SCRIPT:ANY:0:0
|
|
EQUAL? P-PRSA-WORD,W?SCRIPT \?CCL3
|
|
DIROUT K-D-PRT-ON
|
|
PRINTR "Transcript: Begin"
|
|
?CCL3: PRINTI "Transcript: End"
|
|
CRLF
|
|
DIROUT K-D-PRT-OFF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-VERIFY:ANY:0:0
|
|
ZERO? PRSO /?CCL3
|
|
EQUAL? PRSO,INTNUM \?CCL6
|
|
EQUAL? P-NUMBER,105 \?CCL6
|
|
PRINTN SERIAL
|
|
CRLF
|
|
RTRUE
|
|
?CCL6: CALL1 DONT-UNDERSTAND
|
|
RSTACK
|
|
?CCL3: PRINTI "[Verifying... "
|
|
VERIFY \?CCL11
|
|
PRINTI "Correct"
|
|
JUMP ?CND9
|
|
?CCL11: PRINTI "Error"
|
|
?CND9: PRINTI ".]"
|
|
CRLF
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-COMMAND:ANY:0:0
|
|
DIRIN 1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-RECORD:ANY:0:0
|
|
DIROUT D-RECORD-ON
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-UNRECORD:ANY:0:0
|
|
DIROUT D-RECORD-OFF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-INVENTORY:ANY:0:0
|
|
ICALL RT-MOVE-ALL-WORN,WINNER,PSEUDO-OBJECT
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI " holding"
|
|
CALL RT-PRINT-CONTENTS,WINNER,TRUE-VALUE
|
|
ZERO? STACK \?CND1
|
|
PRINTI " nothing"
|
|
?CND1: CALL2 RT-SEE-ANYTHING-IN?,PSEUDO-OBJECT
|
|
ZERO? STACK /?CND3
|
|
PRINTI ". "
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-HE,TRUE-VALUE,STR?56
|
|
PRINTI " wearing"
|
|
ICALL2 RT-PRINT-CONTENTS,PSEUDO-OBJECT
|
|
ICALL RT-MOVE-ALL-WORN,PSEUDO-OBJECT,WINNER
|
|
?CND3: PRINTR "."
|
|
|
|
|
|
.FUNCT V-QUIT:ANY:0:1,ASK?
|
|
ASSIGNED? 'ASK? /?CND1
|
|
SET 'ASK?,TRUE-VALUE
|
|
?CND1: ZERO? ASK? /?CCL5
|
|
PRINTI "Are you sure you want to quit?
|
|
"
|
|
CALL1 Y?
|
|
ZERO? STACK /?CCL8
|
|
QUIT
|
|
RTRUE
|
|
?CCL8: PRINTR "Continuing..."
|
|
?CCL5: QUIT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-FAILED-MSG:ANY:1:1,STR
|
|
PRINTC 91
|
|
PRINT STR
|
|
PRINTR " failed.]"
|
|
|
|
|
|
.FUNCT V-RESTART:ANY:0:0
|
|
RESTART
|
|
CALL2 RT-FAILED-MSG,STR?74
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SAVE:ANY:0:0,X
|
|
PUTB G-INBUF,1,0
|
|
SET 'P-CONT,FALSE-VALUE
|
|
SAVE >X
|
|
EQUAL? X,2 /?CCL2
|
|
GET 0,8
|
|
BTST STACK,4 \?CND1
|
|
?CCL2: COLOR GL-F-COLOR,GL-B-COLOR
|
|
EQUAL? X,2 /?PRD5
|
|
PUSH 0
|
|
JUMP ?PRD6
|
|
?PRD5: PUSH 1
|
|
?PRD6: ICALL2 V-$REFRESH,STACK
|
|
?CND1: ZERO? X \?CCL9
|
|
ICALL2 RT-FAILED-MSG,STR?75
|
|
RETURN 2
|
|
?CCL9: PRINTI "[Okay.]"
|
|
CRLF
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-RESTORE:ANY:0:0
|
|
RESTORE
|
|
ZERO? STACK \FALSE
|
|
ICALL2 RT-FAILED-MSG,STR?76
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-PRINT-CONTENTS:ANY:1:3,CONT,RECUR?,CNT,OBJ,1ST?
|
|
SET '1ST?,TRUE-VALUE
|
|
FIRST? CONT >OBJ /?BOGUS1
|
|
?BOGUS1: ZERO? OBJ \?PRG4
|
|
RETURN CNT
|
|
?PRG4: ZERO? OBJ /?REP5
|
|
FSET? OBJ,FL-INVISIBLE /?CND6
|
|
FSET? OBJ,FL-NO-DESC /?CND6
|
|
EQUAL? OBJ,WINNER /?CND6
|
|
ZERO? 1ST? /?CCL15
|
|
INC 'CNT
|
|
SET '1ST?,FALSE-VALUE
|
|
JUMP ?CND13
|
|
?CCL15: NEXT? OBJ /?BOGUS16
|
|
?BOGUS16: ICALL2 RT-COMMA-MSG,STACK
|
|
?CND13: ICALL RT-PRINT-OBJ,OBJ,K-ART-A
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
FSET OBJ,FL-SEEN
|
|
?CND6: NEXT? OBJ >OBJ /?PRG4
|
|
JUMP ?PRG4
|
|
?REP5: ZERO? RECUR? \?CCL19
|
|
RETURN CNT
|
|
?CCL19: FIRST? CONT >OBJ /?PRG21
|
|
?PRG21: ZERO? OBJ \?CCL25
|
|
RETURN CNT
|
|
?CCL25: FSET? OBJ,FL-INVISIBLE /?CND23
|
|
FSET? OBJ,FL-NO-DESC /?CND23
|
|
EQUAL? OBJ,WINNER /?CND23
|
|
FSET? OBJ,FL-SURFACE /?CCL30
|
|
FSET? OBJ,FL-CONTAINER \?CND23
|
|
FSET? OBJ,FL-OPEN /?CCL30
|
|
FSET? OBJ,FL-TRANSPARENT \?CND23
|
|
?CCL30: CALL2 RT-SEE-ANYTHING-IN?,OBJ
|
|
ZERO? STACK /?CND23
|
|
PRINTI ". "
|
|
ICALL RT-IN-ON-MSG,OBJ,TRUE-VALUE
|
|
ICALL RT-PRINT-OBJ,OBJ,K-ART-THE
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,FALSE-VALUE,STR?77
|
|
CALL RT-PRINT-CONTENTS,OBJ,TRUE-VALUE,CNT >CNT
|
|
?CND23: NEXT? OBJ >OBJ /?PRG21
|
|
JUMP ?PRG21
|
|
|
|
|
|
.FUNCT RT-DESCRIBE-OBJECTS:ANY:0:3,CONT,CNT,LVL,OBJ,NXT,1ST?,P-CNT,P-PL?
|
|
ASSIGNED? 'CONT /?CND1
|
|
SET 'CONT,HERE
|
|
?CND1: SET '1ST?,TRUE-VALUE
|
|
FIRST? CONT >OBJ /?PRG4
|
|
?PRG4: ZERO? OBJ /?REP5
|
|
FSET? OBJ,FL-NO-DESC /?CTR9
|
|
FSET? OBJ,FL-INVISIBLE \?CCL10
|
|
?CTR9: NEXT? OBJ >OBJ /?PRG4
|
|
JUMP ?PRG4
|
|
?CCL10: FSET? OBJ,FL-PERSON \?CCL15
|
|
INC 'P-CNT
|
|
NEXT? OBJ >OBJ /?PRG4
|
|
JUMP ?PRG4
|
|
?CCL15: ZERO? 1ST? /?CND6
|
|
GRTR? CNT,0 \?CCL20
|
|
PRINTC 32
|
|
JUMP ?CND18
|
|
?CCL20: PRINTC TAB
|
|
?CND18: SET '1ST?,FALSE-VALUE
|
|
IN? CONT,ROOMS \?CCL23
|
|
PRINTC 89
|
|
JUMP ?CND21
|
|
?CCL23: ICALL RT-IN-ON-MSG,CONT,TRUE-VALUE
|
|
ICALL RT-PRINT-OBJ,CONT,K-ART-THE
|
|
PRINTI " y"
|
|
?CND21: PRINTI "ou see"
|
|
?CND6: ICALL RT-PRINT-OBJ,OBJ,K-ART-A
|
|
ICALL2 THIS-IS-IT,OBJ
|
|
FSET OBJ,FL-SEEN
|
|
INC 'CNT
|
|
NEXT? OBJ >OBJ /?PRG25
|
|
?PRG25: ZERO? OBJ /?REP26
|
|
FSET? OBJ,FL-NO-DESC /?CND27
|
|
FSET? OBJ,FL-INVISIBLE /?CND27
|
|
FSET? OBJ,FL-PERSON \?REP26
|
|
INC 'P-CNT
|
|
?CND27: NEXT? OBJ >OBJ /?PRG25
|
|
JUMP ?PRG25
|
|
?REP26: ZERO? OBJ /?CCL37
|
|
NEXT? OBJ >NXT /?PRG39
|
|
?PRG39: ZERO? NXT /?REP40
|
|
FSET? NXT,FL-NO-DESC /?CND41
|
|
FSET? NXT,FL-INVISIBLE /?CND41
|
|
FSET? NXT,FL-PERSON \?REP40
|
|
?CND41: NEXT? NXT >NXT /?PRG39
|
|
JUMP ?PRG39
|
|
?REP40: ZERO? NXT \?CCL51
|
|
PRINTI " and"
|
|
JUMP ?PRG4
|
|
?CCL51: PRINTC 44
|
|
JUMP ?PRG4
|
|
?CCL37: IN? CONT,ROOMS \?CND52
|
|
PRINTI " here"
|
|
?CND52: PRINTC 46
|
|
JUMP ?PRG4
|
|
?REP5: GRTR? P-CNT,0 \?CND54
|
|
GRTR? CNT,0 \?CCL58
|
|
PRINTC 32
|
|
JUMP ?CND56
|
|
?CCL58: PRINTC TAB
|
|
?CND56: ADD CNT,P-CNT >CNT
|
|
GRTR? P-CNT,1 \?CND59
|
|
SET 'P-PL?,TRUE-VALUE
|
|
?CND59: FIRST? CONT >OBJ /?BOGUS61
|
|
?BOGUS61: SET '1ST?,TRUE-VALUE
|
|
?PRG62: FSET? OBJ,FL-NO-DESC /?CND64
|
|
FSET? OBJ,FL-INVISIBLE /?CND64
|
|
FSET? OBJ,FL-PERSON \?CND64
|
|
ZERO? 1ST? /?CCL71
|
|
ICALL RT-PRINT-OBJ,OBJ,K-ART-A,TRUE-VALUE
|
|
JUMP ?CND69
|
|
?CCL71: ICALL RT-PRINT-OBJ,OBJ,K-ART-A
|
|
?CND69: SET '1ST?,FALSE-VALUE
|
|
FSET? OBJ,FL-PLURAL \?CND72
|
|
SET 'P-PL?,TRUE-VALUE
|
|
?CND72: DLESS? 'P-CNT,1 \?CCL76
|
|
ZERO? P-PL? /?CCL79
|
|
PRINTI " are"
|
|
JUMP ?CND77
|
|
?CCL79: PRINTI " is"
|
|
?CND77: PRINTI " here."
|
|
?CND54: FIRST? CONT >OBJ /?PRG84
|
|
?PRG84: ZERO? OBJ /?REP85
|
|
FSET? OBJ,FL-INVISIBLE /?CND86
|
|
FSET? OBJ,FL-SURFACE /?CCL90
|
|
FSET? OBJ,FL-CONTAINER \?CND86
|
|
FSET? OBJ,FL-TRANSPARENT \?CND86
|
|
?CCL90: ADD LVL,1
|
|
CALL RT-DESCRIBE-OBJECTS,OBJ,CNT,STACK >CNT
|
|
?CND86: NEXT? OBJ >OBJ /?PRG84
|
|
JUMP ?PRG84
|
|
?CCL76: EQUAL? P-CNT,1 \?CCL81
|
|
PRINTI " and"
|
|
JUMP ?CND64
|
|
?CCL81: PRINTC 44
|
|
?CND64: NEXT? OBJ >OBJ /?PRG62
|
|
JUMP ?PRG62
|
|
?REP85: ZERO? LVL /?CCL97
|
|
RETURN CNT
|
|
?CCL97: GRTR? CNT,0 /?CCL99
|
|
RETURN CNT
|
|
?CCL99: CRLF
|
|
RETURN CNT
|
|
|
|
|
|
.FUNCT RT-DESCRIBE-ROOM:ANY:0:1,LOOK?,VAL,P
|
|
ZERO? LIT \?CCL3
|
|
PRINT K-TOO-DARK-MSG
|
|
CRLF
|
|
FSET HERE,FL-TOUCHED
|
|
RFALSE
|
|
?CCL3: EQUAL? LIT,HERE,CH-PLAYER /?CND1
|
|
PRINTC TAB
|
|
PRINTI "Light comes from"
|
|
ICALL RT-PRINT-OBJ,LIT,K-ART-THE
|
|
PRINTI ".
|
|
"
|
|
?CND1: GETP HERE,P?ACTION >P
|
|
ZERO? P /?CND5
|
|
ZERO? LOOK? /?CCL9
|
|
CALL P,M-LOOK >VAL
|
|
JUMP ?CND5
|
|
?CCL9: FSET? HERE,FL-TOUCHED /?CCL11
|
|
CALL P,M-F-LOOK >VAL
|
|
JUMP ?CND5
|
|
?CCL11: EQUAL? VERBOSITY,2 \?CCL13
|
|
CALL P,M-V-LOOK >VAL
|
|
JUMP ?CND5
|
|
?CCL13: CALL P,M-B-LOOK >VAL
|
|
?CND5: FSET HERE,FL-TOUCHED
|
|
FSET HERE,FL-SEEN
|
|
ZERO? VAL /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT NOT-HOLDING?:ANY:1:1,OBJ
|
|
IN? OBJ,WINNER /FALSE
|
|
LOC OBJ
|
|
IN? STACK,WINNER /FALSE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 91
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-HE,TRUE-VALUE,STR?56
|
|
PRINTI "n't holding"
|
|
ICALL RT-PRINT-OBJ,OBJ,K-ART-HIM
|
|
PRINTR ".]"
|
|
|
|
|
|
.FUNCT HELD?:ANY:1:2,OBJ,CONT,L
|
|
ZERO? CONT \?PRG3
|
|
SET 'CONT,PLAYER
|
|
?PRG3: LOC OBJ >L
|
|
ZERO? L /FALSE
|
|
EQUAL? L,CONT /TRUE
|
|
EQUAL? CONT,PLAYER,WINNER \?CCL11
|
|
SET 'OBJ,L
|
|
JUMP ?PRG3
|
|
?CCL11: EQUAL? L,ROOMS,GLOBAL-OBJECTS /FALSE
|
|
SET 'OBJ,L
|
|
JUMP ?PRG3
|
|
|
|
|
|
.FUNCT TOO-DARK:ANY:0:0
|
|
PRINTR "It's too dark to see."
|
|
|
|
|
|
.FUNCT V-ASK-ABOUT:ANY:0:0
|
|
CALL1 RT-NO-RESPONSE-MSG
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-ATTACH:ANY:0:0
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't attach"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI " to"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-CLOSE:ANY:0:0
|
|
FSET? PRSO,FL-OPENABLE /?CCL3
|
|
CALL1 RT-YOU-CANT-MSG
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,FL-OPEN \?CCL6
|
|
FCLEAR PRSO,FL-OPEN
|
|
FSET? PRSO,FL-DOOR \?CND7
|
|
ICALL2 RT-CHECK-ADJ,PRSO
|
|
?CND7: GRTR? P-MULT,1 \?CCL11
|
|
PRINTI "Closed"
|
|
JUMP ?CND9
|
|
?CCL11: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?78
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
?CND9: PRINTR "."
|
|
?CCL6: CALL RT-ALREADY-MSG,PRSO,STR?79
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-CUT:ANY:0:0
|
|
PRINTC TAB
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't cut"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI " with"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT IDROP:ANY:0:0
|
|
CALL2 NOT-HOLDING?,PRSO
|
|
ZERO? STACK \FALSE
|
|
IN? PRSO,WINNER /?CCL5
|
|
LOC PRSO
|
|
FSET? STACK,FL-OPEN /?CCL5
|
|
LOC PRSO
|
|
ICALL RT-PRINT-OBJ,STACK,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI " closed."
|
|
CRLF
|
|
RFALSE
|
|
?CCL5: FSET? PRSO,FL-WORN \?CND8
|
|
ICALL RT-FIRST-YOU-MSG,STR?80,PRSO
|
|
?CND8: MOVE PRSO,HERE
|
|
FCLEAR PRSO,FL-WORN
|
|
FCLEAR PRSO,FL-NO-DESC
|
|
FCLEAR PRSO,FL-INVISIBLE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-DROP:ANY:0:0,L
|
|
CALL1 IDROP
|
|
ZERO? STACK /FALSE
|
|
GRTR? P-MULT,1 \?CCL6
|
|
PRINTI "Dropped"
|
|
JUMP ?CND4
|
|
?CCL6: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?81
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
CALL FIND-FLAG,HERE,FL-VEHICLE,PRSO >L
|
|
ZERO? L /?CND4
|
|
MOVE PRSO,L
|
|
ICALL2 RT-IN-ON-MSG,L
|
|
PRINTI "to"
|
|
ICALL RT-PRINT-OBJ,L,K-ART-THE
|
|
?CND4: PRINTR "."
|
|
|
|
|
|
.FUNCT PRE-EMPTY:ANY:0:0,L
|
|
FSET? PRSO,FL-SURFACE /?CCL3
|
|
FSET? PRSO,FL-CONTAINER /?CCL3
|
|
LOC PRSO >L
|
|
ZERO? L /?CCL8
|
|
FSET? L,FL-SURFACE /?CTR7
|
|
FSET? L,FL-CONTAINER \?CCL8
|
|
?CTR7: ICALL PERFORM,V?EMPTY,L,PRSI
|
|
RTRUE
|
|
?CCL8: CALL1 RT-YOU-CANT-MSG
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,FL-CONTAINER \?CCL14
|
|
FSET? PRSO,FL-OPEN /?CCL14
|
|
FSET? PRSO,FL-OPENABLE \?CCL14
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR "n't open."
|
|
?CCL14: EQUAL? PRSI,FALSE-VALUE,ROOMS,TH-HANDS /FALSE
|
|
FSET? PRSI,FL-SURFACE /FALSE
|
|
FSET? PRSI,FL-CONTAINER /FALSE
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't empty"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI " into"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-EMPTY:ANY:0:0
|
|
CALL RT-EMPTY-MSG,PRSO,PRSI
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-EMPTY-MSG:ANY:1:2,CONT,DEST,OBJ,NXT,X,OM
|
|
SET 'OM,P-MULT
|
|
SET 'P-MULT,0
|
|
FIRST? CONT >OBJ /?PRG2
|
|
?PRG2: ZERO? OBJ /?REP3
|
|
FSET? OBJ,FL-INVISIBLE /?CND4
|
|
FSET? OBJ,FL-TAKEABLE \?CND4
|
|
INC 'P-MULT
|
|
?CND4: NEXT? OBJ >OBJ /?PRG2
|
|
JUMP ?PRG2
|
|
?REP3: ZERO? P-MULT \?CND11
|
|
PRINTI "There is nothing"
|
|
ICALL2 RT-IN-ON-MSG,PRSO
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTC 46
|
|
CRLF
|
|
SET 'P-MULT,OM
|
|
RTRUE
|
|
?CND11: FIRST? CONT >OBJ /?BOGUS13
|
|
?BOGUS13: EQUAL? DEST,FALSE-VALUE,ROOMS,TH-GROUND /?CTR15
|
|
EQUAL? DEST,GLOBAL-HERE \?CCL16
|
|
?CTR15: SET 'DEST,HERE
|
|
JUMP ?PRG20
|
|
?CCL16: EQUAL? DEST,TH-HANDS \?PRG20
|
|
SET 'DEST,CH-PLAYER
|
|
?PRG20: ZERO? OBJ /?REP21
|
|
FSET? OBJ,FL-INVISIBLE /?PRG20
|
|
FSET? OBJ,FL-TAKEABLE \?PRG20
|
|
ICALL RT-PRINT-OBJ,OBJ,K-ART-THE,TRUE-VALUE
|
|
PRINTI ": "
|
|
NEXT? OBJ >NXT /?BOGUS28
|
|
?BOGUS28: EQUAL? DEST,CH-PLAYER \?CCL31
|
|
CALL PERFORM,V?TAKE,OBJ,PRSO >X
|
|
EQUAL? X,M-FATAL /?REP21
|
|
JUMP ?CND29
|
|
?CCL31: EQUAL? DEST,HERE \?CCL35
|
|
MOVE OBJ,HERE
|
|
ICALL RT-PRINT-OBJ,OBJ,K-ART-HE,TRUE-VALUE,STR?82
|
|
PRINTI " on"
|
|
ICALL RT-PRINT-OBJ,TH-GROUND,K-ART-THE
|
|
PRINTI " nearby."
|
|
CRLF
|
|
JUMP ?CND29
|
|
?CCL35: CALL RT-ROOM-IN-MSG?,OBJ,DEST
|
|
ZERO? STACK \?CND29
|
|
CALL RT-CHECK-MOVE-MSG?,OBJ,DEST
|
|
ZERO? STACK \?REP21
|
|
MOVE OBJ,DEST
|
|
PRINTI "Done."
|
|
CRLF
|
|
?CND29: SET 'OBJ,NXT
|
|
JUMP ?PRG20
|
|
?REP21: SET 'P-MULT,OM
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-EMPTY-FROM:ANY:0:0
|
|
IN? PRSO,PRSI /?CCL3
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI "n't"
|
|
ICALL2 RT-IN-ON-MSG,PRSI
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTR "."
|
|
?CCL3: ICALL PERFORM,V?EMPTY,PRSI
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-ENTER:ANY:0:0,VEH,DIR,RM
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
CALL FIND-FLAG,HERE,FL-VEHICLE >VEH
|
|
ZERO? VEH /?CCL6
|
|
IN? WINNER,VEH \?CCL9
|
|
ICALL2 RT-ALREADY-MSG,WINNER
|
|
ICALL2 RT-IN-ON-MSG,VEH
|
|
ICALL RT-PRINT-OBJ,VEH,K-ART-THE
|
|
PRINTR ".]"
|
|
?CCL9: FSET? VEH,FL-SURFACE /?CTR10
|
|
FSET? VEH,FL-OPEN \?CCL11
|
|
?CTR10: MOVE WINNER,VEH
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?83
|
|
ICALL2 RT-IN-ON-MSG,VEH
|
|
ICALL RT-PRINT-OBJ,VEH,K-ART-THE
|
|
PRINTR "."
|
|
?CCL11: FSET? VEH,FL-OPENABLE \?CCL15
|
|
ICALL RT-PRINT-OBJ,VEH,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR " closed."
|
|
?CCL15: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't get"
|
|
ICALL2 RT-IN-ON-MSG,VEH
|
|
ICALL RT-PRINT-OBJ,VEH,K-ART-THE
|
|
PRINTR "."
|
|
?CCL6: CALL2 RT-DO-WALK,P?IN
|
|
EQUAL? STACK,FALSE-VALUE,M-FATAL \TRUE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
RTRUE
|
|
?CCL3: EQUAL? PRSO,HERE,GLOBAL-HERE \?CCL18
|
|
ICALL2 RT-ALREADY-MSG,WINNER
|
|
ICALL2 RT-IN-ON-MSG,HERE
|
|
ICALL RT-PRINT-OBJ,HERE,K-ART-THE
|
|
PRINTR ".]"
|
|
?CCL18: IN? PRSO,ROOMS \?CCL20
|
|
CALL2 RT-FIND-DIR,PRSO >DIR
|
|
ZERO? DIR /?CCL22
|
|
CALL2 RT-DO-WALK,DIR
|
|
ZERO? STACK \TRUE
|
|
?CCL22: FSET? PRSO,FL-AUTO-ENTER \?CCL26
|
|
ICALL2 RT-GOTO,PRSO
|
|
RTRUE
|
|
?CCL26: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTR " can't get there from here."
|
|
?CCL20: FSET? PRSO,FL-DOOR \?CCL28
|
|
CALL2 RT-OTHER-SIDE,PRSO
|
|
ZERO? STACK /?CCL31
|
|
ICALL2 RT-DO-WALK,GL-DOOR-DIR
|
|
RTRUE
|
|
?CCL31: ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?66
|
|
PRINTR "n't seem to go anywhere."
|
|
?CCL28: FSET? PRSO,FL-VEHICLE \?CCL33
|
|
FSET? PRSO,FL-SURFACE /?CTR35
|
|
FSET? PRSO,FL-OPEN \?CCL36
|
|
?CTR35: MOVE WINNER,PRSO
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?83
|
|
ICALL2 RT-IN-ON-MSG,PRSO
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL36: FSET? PRSO,FL-OPENABLE \?CCL40
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR " closed."
|
|
?CCL40: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't get"
|
|
ICALL2 RT-IN-ON-MSG,PRSO
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL33: ICALL1 RT-IMPOSSIBLE-MSG
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-EXIT:ANY:0:0,VEH,L,DIR
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
LOC WINNER >L
|
|
IN? L,ROOMS \?CCL6
|
|
ICALL2 RT-DO-WALK,P?OUT
|
|
RTRUE
|
|
?CCL6: FSET? L,FL-VEHICLE /?CTR7
|
|
FSET? L,FL-SURFACE /?CTR7
|
|
FSET? L,FL-CONTAINER \?CCL8
|
|
?CTR7: FSET? L,FL-SURFACE /?CTR13
|
|
FSET? L,FL-OPEN \?CCL14
|
|
?CTR13: LOC L
|
|
MOVE WINNER,STACK
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?83
|
|
ICALL2 RT-OUT-OFF-MSG,L
|
|
PRINTI " of"
|
|
ICALL RT-PRINT-OBJ,L,K-ART-THE
|
|
PRINTR "."
|
|
?CCL14: FSET? L,FL-OPENABLE \?CCL18
|
|
ICALL RT-PRINT-OBJ,L,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR " closed."
|
|
?CCL18: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't get"
|
|
ICALL2 RT-OUT-OFF-MSG,L
|
|
PRINTI " of"
|
|
ICALL RT-PRINT-OBJ,L,K-ART-THE
|
|
PRINTR "."
|
|
?CCL8: CALL FIND-FLAG,HERE,FL-VEHICLE >VEH
|
|
ZERO? VEH /TRUE
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI "n't"
|
|
ICALL2 RT-IN-ON-MSG,VEH
|
|
ICALL RT-PRINT-OBJ,VEH,K-ART-THE
|
|
PRINTR "."
|
|
?CCL3: EQUAL? PRSO,HERE,GLOBAL-HERE \?CCL21
|
|
ICALL2 RT-DO-WALK,P?OUT
|
|
RTRUE
|
|
?CCL21: IN? PRSO,ROOMS \?CCL23
|
|
ICALL1 RT-NOT-IN-ROOM-MSG
|
|
RTRUE
|
|
?CCL23: FSET? PRSO,FL-DOOR \?CCL25
|
|
CALL2 RT-OTHER-SIDE,PRSO
|
|
ZERO? STACK /?CCL28
|
|
ICALL2 RT-DO-WALK,GL-DOOR-DIR
|
|
RTRUE
|
|
?CCL28: ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?66
|
|
PRINTR "n't seem to go anywhere."
|
|
?CCL25: FSET? PRSO,FL-VEHICLE /?CTR29
|
|
FSET? PRSO,FL-CONTAINER /?CTR29
|
|
FSET? PRSO,FL-SURFACE \?CCL30
|
|
?CTR29: IN? WINNER,PRSO \?CCL36
|
|
FSET? PRSO,FL-SURFACE /?CTR38
|
|
FSET? PRSO,FL-OPEN \?CCL39
|
|
?CTR38: LOC WINNER
|
|
LOC STACK
|
|
MOVE WINNER,STACK
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?83
|
|
ICALL2 RT-OUT-OFF-MSG,PRSO
|
|
PRINTI " of"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL39: FSET? PRSO,FL-OPENABLE \?CCL43
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR " closed."
|
|
?CCL43: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't get"
|
|
ICALL2 RT-OUT-OFF-MSG,PRSO
|
|
PRINTI " of"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL36: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI "n't"
|
|
ICALL2 RT-IN-ON-MSG,PRSO
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL30: LOC PRSO >L
|
|
FSET? L,FL-CONTAINER \?CCL45
|
|
PRINTI "[from"
|
|
ICALL RT-PRINT-OBJ,L,K-ART-THE
|
|
PRINTC 93
|
|
CRLF
|
|
ICALL PERFORM,V?TAKE,PRSO
|
|
RTRUE
|
|
?CCL45: ICALL1 RT-IMPOSSIBLE-MSG
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-NOT-IN-ROOM-MSG:ANY:0:0
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI "n't"
|
|
ICALL2 RT-IN-ON-MSG,PRSO
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT RT-DO-WALK:ANY:1:3,DIR1,DIR2,DIR3,X
|
|
SET 'P-WALK-DIR,DIR1
|
|
CALL PERFORM,V?WALK,DIR1 >X
|
|
ZERO? DIR2 \?PRD4
|
|
RETURN X
|
|
?PRD4: EQUAL? X,FALSE-VALUE,M-FATAL /?CND1
|
|
SET 'P-WALK-DIR,DIR2
|
|
CALL PERFORM,V?WALK,DIR2 >X
|
|
ZERO? DIR3 \?PRD8
|
|
RETURN X
|
|
?PRD8: EQUAL? X,FALSE-VALUE,M-FATAL /?CND1
|
|
SET 'P-WALK-DIR,DIR3
|
|
CALL PERFORM,V?WALK,DIR3 >X
|
|
?CND1: RETURN X
|
|
|
|
|
|
.FUNCT V-EXAMINE:ANY:0:0
|
|
EQUAL? PRSO,HERE,GLOBAL-HERE \?CCL3
|
|
CALL2 PERFORM,V?LOOK
|
|
RSTACK
|
|
?CCL3: EQUAL? PRSO,INTDIR \?CCL5
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "[If you want to see what's there, go there.]"
|
|
?CCL5: FSET? PRSO,FL-DOOR \?CCL7
|
|
FSET PRSO,FL-SEEN
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?56
|
|
ICALL2 RT-OPEN-MSG,PRSO
|
|
PRINTR "."
|
|
?CCL7: FSET? PRSO,FL-CONTAINER /?CTR8
|
|
FSET? PRSO,FL-SURFACE \?CCL9
|
|
?CTR8: FSET PRSO,FL-SEEN
|
|
CALL1 V-LOOK-IN
|
|
RSTACK
|
|
?CCL9: FSET PRSO,FL-SEEN
|
|
CALL1 RT-NOTHING-SPECIAL-MSG
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-NOTHING-SPECIAL-MSG:ANY:0:0
|
|
PRINTI "You see nothing "
|
|
CALL2 RT-PICK-NEXT,K-UNUSUAL-TBL
|
|
PRINT STACK
|
|
PRINTI " about"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-EXTINGUISH:ANY:0:0
|
|
PRINTI "['Extinguish' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-FOLLOW:ANY:0:0
|
|
PRINTI "['Follow' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-GIVE:ANY:0:0
|
|
PRINTC TAB
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE,TRUE-VALUE,STR?66
|
|
PRINTI "n't seem interested in"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-GIVE-SWP:ANY:0:0
|
|
ICALL PERFORM,V?GIVE,PRSI,PRSO
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-HIT:ANY:0:0
|
|
PRINTI "['Hit' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-INFLATE:ANY:0:0
|
|
PRINT K-HOW-INTEND-MSG
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-LIFT:ANY:0:0
|
|
PRINTI "['Lift' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-LISTEN:ANY:0:0
|
|
EQUAL? PRSO,FALSE-VALUE,ROOMS \?CCL3
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?85
|
|
PRINTI "nothing "
|
|
CALL2 RT-PICK-NEXT,K-UNUSUAL-TBL
|
|
PRINT STACK
|
|
PRINTR "."
|
|
?CCL3: ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR " silent."
|
|
|
|
|
|
.FUNCT V-LOCK:ANY:0:0
|
|
FSET? PRSO,FL-LOCKED \?CCL3
|
|
CALL RT-ALREADY-MSG,PRSO,STR?86
|
|
RSTACK
|
|
?CCL3: CALL RT-MATCH-KEY,PRSO,PRSI
|
|
ZERO? STACK \?CCL5
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't lock"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI " with"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTC 46
|
|
CRLF
|
|
RTRUE
|
|
?CCL5: FSET PRSO,FL-LOCKED
|
|
FSET? PRSO,FL-OPEN \?CCL8
|
|
FCLEAR PRSO,FL-OPEN
|
|
FSET? PRSO,FL-DOOR \?CND9
|
|
ICALL2 RT-CHECK-ADJ,PRSO
|
|
?CND9: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?78
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI " and"
|
|
ICALL RT-PRINT-VERB,WINNER,STR?87
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-HIM
|
|
PRINTR "."
|
|
?CCL8: ICALL RT-LOCK-MSG,PRSO,PRSI,TRUE-VALUE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-LOOK:ANY:0:0
|
|
CALL2 RT-DESCRIBE-ROOM,TRUE-VALUE
|
|
ZERO? STACK /TRUE
|
|
ICALL1 RT-DESCRIBE-OBJECTS
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-LOOK-BEHIND:ANY:0:0
|
|
PRINTC TAB
|
|
PRINTI "You don't see anything "
|
|
CALL2 RT-PICK-NEXT,K-UNUSUAL-TBL
|
|
PRINT STACK
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-LOOK-UNDER:ANY:0:0
|
|
PRINTC TAB
|
|
PRINTI "You don't see anything "
|
|
CALL2 RT-PICK-NEXT,K-UNUSUAL-TBL
|
|
PRINT STACK
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-LOOK-IN:ANY:0:1,DIR,RM
|
|
ASSIGNED? 'DIR /?CND1
|
|
SET 'DIR,P?IN
|
|
?CND1: EQUAL? PRSO,ROOMS \?CND3
|
|
SET 'RM,P-IT-OBJECT
|
|
FSET? RM,FL-CONTAINER /?CCL6
|
|
CALL FIND-FLAG-LG,HERE,FL-OPENABLE >RM
|
|
ZERO? RM /?CND3
|
|
?CCL6: ICALL PERFORM,PRSA,RM,PRSI
|
|
RTRUE
|
|
?CND3: FSET? PRSO,FL-OPEN /?CCL11
|
|
FSET? PRSO,FL-OPENABLE \?CCL11
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR " closed."
|
|
?CCL11: FSET? PRSO,FL-CONTAINER /?PRD17
|
|
FSET? PRSO,FL-SURFACE \?CCL15
|
|
?PRD17: CALL2 RT-SEE-INSIDE?,PRSO
|
|
ZERO? STACK /?CCL15
|
|
FIRST? PRSO \?CCL22
|
|
PRINTI "You can see"
|
|
ICALL2 RT-PRINT-CONTENTS,PRSO
|
|
ICALL2 RT-IN-ON-MSG,PRSO
|
|
FSET? PRSO,FL-SURFACE /?CND23
|
|
PRINTI "side"
|
|
?CND23: ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL22: PRINTI "There's nothing"
|
|
ICALL2 RT-IN-ON-MSG,PRSO
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL15: EQUAL? DIR,P?IN \?CCL26
|
|
CALL2 RT-YOU-CANT-MSG,STR?88
|
|
RSTACK
|
|
?CCL26: CALL2 RT-YOU-CANT-MSG,STR?89
|
|
RSTACK
|
|
|
|
|
|
.FUNCT TELL-CANT-FIND:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "[That place isn't close enough.]"
|
|
|
|
|
|
.FUNCT V-LOOK-ON:ANY:0:0
|
|
FSET? PRSO,FL-SURFACE \?CCL3
|
|
CALL1 V-LOOK-IN
|
|
RSTACK
|
|
?CCL3: PRINTI "There's no good surface on"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-MOVE:ANY:0:0
|
|
PRINTI "['Move' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-NO:ANY:0:0
|
|
PRINTI "[You seem sure of yourself.]"
|
|
CRLF
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT RT-MATCH-KEY:ANY:1:2,DOOR,KEY
|
|
EQUAL? DOOR,TH-STEEL-BOX \?CCL3
|
|
EQUAL? KEY,TH-STEEL-KEY /TRUE
|
|
RFALSE
|
|
?CCL3: EQUAL? DOOR,TH-MISSILE-PANEL \FALSE
|
|
EQUAL? KEY,TH-MISSILE-ACCESS-KEY /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-OTHER-SIDE:ANY:1:1,DOOR,RM,L,P,OBJ,PT,PTS
|
|
LOC WINNER >L
|
|
?PRG1: NEXTP L,P >P
|
|
ZERO? P /FALSE
|
|
LESS? P,LOW-DIRECTION /FALSE
|
|
GETPT L,P >PT
|
|
ZERO? PT /?PRG1
|
|
PTSIZE PT >PTS
|
|
EQUAL? PTS,DEXIT \?PRG1
|
|
GET PT,DEXITOBJ
|
|
EQUAL? DOOR,STACK \?PRG1
|
|
SET 'GL-DOOR-DIR,P
|
|
GET PT,REXIT >RM
|
|
RETURN RM
|
|
|
|
|
|
.FUNCT RT-LOCK-MSG:ANY:3:3,DOOR,KEY,LOCK?
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?90
|
|
ICALL RT-PRINT-OBJ,KEY,K-ART-THE
|
|
PRINTI " in the lock and"
|
|
ICALL RT-PRINT-VERB,WINNER,STR?91
|
|
PRINTI " it a turn"
|
|
ZERO? LOCK? /?CCL3
|
|
PRINTI ". "
|
|
ICALL RT-PRINT-OBJ,DOOR,K-ART-THE,TRUE-VALUE
|
|
PRINTI " locks with"
|
|
JUMP ?CND1
|
|
?CCL3: PRINTI ", and"
|
|
ICALL RT-PRINT-VERB,WINNER,STR?85
|
|
?CND1: PRINTI " a satisfying click"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-OPEN-DOOR-MSG:ANY:1:2,DOOR,KEY,RM,LOCK?,TMP1,TMP2,?TMP1
|
|
FSET? DOOR,FL-LOCKED \?CCL3
|
|
SET 'LOCK?,TRUE-VALUE
|
|
FCLEAR DOOR,FL-LOCKED
|
|
ICALL RT-LOCK-MSG,DOOR,KEY,FALSE-VALUE
|
|
FSET? DOOR,FL-AUTO-OPEN /?CCL5
|
|
EQUAL? PRSA,V?OPEN \?CND1
|
|
?CCL5: FSET DOOR,FL-OPEN
|
|
FSET? DOOR,FL-DOOR \?CND8
|
|
ICALL2 RT-CHECK-ADJ,DOOR
|
|
?CND8: PRINTI ". "
|
|
ICALL RT-PRINT-OBJ,DOOR,K-ART-THE,TRUE-VALUE,STR?92
|
|
PRINTI " open"
|
|
JUMP ?CND1
|
|
?CCL3: FSET DOOR,FL-OPEN
|
|
FSET? DOOR,FL-DOOR \?CND10
|
|
ICALL2 RT-CHECK-ADJ,DOOR
|
|
?CND10: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?93
|
|
ICALL RT-PRINT-OBJ,DOOR,K-ART-THE
|
|
?CND1: FSET? DOOR,FL-OPEN \?CND12
|
|
FSET? DOOR,FL-DOOR \?CCL16
|
|
CALL2 RT-OTHER-SIDE,DOOR >RM
|
|
ZERO? RM /?CND12
|
|
FSET? DOOR,FL-AUTO-ENTER \?CCL20
|
|
PRINTI " and"
|
|
ZERO? LOCK? /?CND21
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE
|
|
?CND21: ICALL RT-PRINT-VERB,WINNER,STR?94
|
|
PRINTI " through."
|
|
CRLF
|
|
CRLF
|
|
ICALL2 RT-GOTO,RM
|
|
RTRUE
|
|
?CCL20: GETP HERE,P?ADJACENT >TMP2
|
|
ZERO? TMP2 /?CND12
|
|
ADD TMP2,1 >?TMP1
|
|
GETB TMP2,0
|
|
INTBL? RM,?TMP1,STACK,1 >TMP1 \?CND12
|
|
GETB TMP1,1
|
|
ZERO? STACK /?CND12
|
|
CALL2 RT-SEE-ANYTHING-IN?,RM
|
|
ZERO? STACK /?CND12
|
|
PRINTI " and"
|
|
ZERO? LOCK? /?CND30
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE
|
|
?CND30: ICALL RT-PRINT-VERB,WINNER,STR?77
|
|
ICALL2 RT-PRINT-CONTENTS,RM
|
|
JUMP ?CND12
|
|
?CCL16: FSET? DOOR,FL-TRANSPARENT /?CND12
|
|
CALL2 RT-SEE-ANYTHING-IN?,DOOR
|
|
ZERO? STACK /?CND12
|
|
PRINTI ". Inside you see"
|
|
ICALL2 RT-PRINT-CONTENTS,DOOR
|
|
?CND12: PRINTC 46
|
|
CRLF
|
|
FSET? DOOR,FL-TAKEABLE /FALSE
|
|
FSET? DOOR,FL-OPEN \FALSE
|
|
CALL2 RT-SCORE-OBJ,DOOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-OPEN:ANY:0:0,F,STR,RM
|
|
FSET? PRSO,FL-OPENABLE /?CCL3
|
|
CALL1 RT-YOU-CANT-MSG
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,FL-OPEN \?CCL5
|
|
CALL RT-ALREADY-MSG,PRSO,STR?93
|
|
RSTACK
|
|
?CCL5: ZERO? PRSI \?CCL7
|
|
FSET? PRSO,FL-LOCKED \?CCL7
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR " locked."
|
|
?CCL7: ZERO? PRSI /?CCL11
|
|
CALL RT-MATCH-KEY,PRSO,PRSI
|
|
ZERO? STACK \?CCL11
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't open"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI " with"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTR "."
|
|
?CCL11: CALL RT-OPEN-DOOR-MSG,PRSO,PRSI
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PLUG-IN:ANY:0:0
|
|
PRINTC TAB
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't plug in"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-PULL:ANY:0:0
|
|
PRINTI " You pull"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR ", but nothing happens."
|
|
|
|
|
|
.FUNCT V-PUSH:ANY:0:0
|
|
PRINTI " You push"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR ", but nothing happens."
|
|
|
|
|
|
.FUNCT PRE-PUT:ANY:0:0
|
|
IN? PRSO,GLOBAL-OBJECTS \?CCL3
|
|
ICALL2 NOT-HERE,PRSO
|
|
RTRUE
|
|
?CCL3: EQUAL? PRSI,TH-GROUND,GLOBAL-HERE,FALSE-VALUE /FALSE
|
|
IN? PRSI,GLOBAL-OBJECTS \?CCL7
|
|
ICALL2 NOT-HERE,PRSI
|
|
RTRUE
|
|
?CCL7: CALL HELD?,PRSI,PRSO
|
|
ZERO? STACK /FALSE
|
|
CALL RT-YOU-CANT-MSG,STR?90,PRSI,STR?95
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PUT:ANY:0:0
|
|
FSET? PRSI,FL-SURFACE /?CCL3
|
|
PRINTI "There's no good surface on"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTR "."
|
|
?CCL3: CALL1 RT-PUT-ON-OR-IN
|
|
RSTACK
|
|
|
|
|
|
.FUNCT TELL-FIND-NONE:ANY:1:2,STR,OBJ
|
|
PRINTI "You search for "
|
|
PRINT STR
|
|
ZERO? OBJ /?CND1
|
|
ICALL RT-PRINT-OBJ,OBJ,K-ART-A
|
|
?CND1: PRINTR " but find none."
|
|
|
|
|
|
.FUNCT PRE-PUT-IN:ANY:0:0
|
|
EQUAL? PRSI,PSEUDO-OBJECT \?CCL3
|
|
CALL1 PRE-PUT
|
|
RSTACK
|
|
?CCL3: FSET? PRSI,FL-READABLE \?CCL5
|
|
ICALL1 WONT-HELP
|
|
RETURN 2
|
|
?CCL5: FSET? PRSI,FL-CONTAINER /?CND1
|
|
ICALL TELL-FIND-NONE,STR?96,PRSI
|
|
RETURN 2
|
|
?CND1: FSET? PRSI,FL-OPEN /?CND11
|
|
FSET? PRSI,FL-OPENABLE \?CND11
|
|
ICALL RT-FIRST-YOU-MSG,STR?93,PRSI
|
|
FSET PRSI,FL-OPEN
|
|
?CND11: CALL1 PRE-PUT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-PUT-IN:ANY:0:0
|
|
FSET? PRSI,FL-OPEN /?CCL3
|
|
FSET? PRSI,FL-OPENABLE \?CCL6
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI " closed"
|
|
JUMP ?CND4
|
|
?CCL6: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't open"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
?CND4: PRINTR "."
|
|
?CCL3: CALL1 RT-PUT-ON-OR-IN
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-PUT-ON-OR-IN:ANY:0:0
|
|
ZERO? PRSI \?CCL3
|
|
CALL1 RT-YOU-CANT-MSG
|
|
RSTACK
|
|
?CCL3: EQUAL? PRSO,PRSI \?CCL5
|
|
CALL1 HAR-HAR
|
|
RSTACK
|
|
?CCL5: IN? PRSO,PRSI \?CCL7
|
|
ICALL2 RT-ALREADY-MSG,PRSO
|
|
ICALL2 RT-IN-ON-MSG,PRSI
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTR ".]"
|
|
?CCL7: CALL RT-ROOM-IN-MSG?,PRSO,PRSI
|
|
ZERO? STACK \TRUE
|
|
CALL2 HELD?,PRSO
|
|
ZERO? STACK \?CCL11
|
|
CALL1 ITAKE
|
|
ZERO? STACK /TRUE
|
|
?CCL11: FSET? PRSO,FL-WORN \?CND14
|
|
FCLEAR PRSO,FL-WORN
|
|
ICALL RT-FIRST-YOU-MSG,STR?80,PRSO
|
|
?CND14: MOVE PRSO,PRSI
|
|
FSET PRSO,FL-TOUCHED
|
|
FSET? PRSI,FL-PERSON \?CCL18
|
|
FSET? PRSO,FL-CLOTHING \?CCL18
|
|
FSET PRSO,FL-WORN
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?90
|
|
PRINTI " on"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
JUMP ?CND16
|
|
?CCL18: GRTR? P-MULT,1 \?CCL22
|
|
PRINTI "Done"
|
|
JUMP ?CND16
|
|
?CCL22: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?90
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTC 32
|
|
FSET? PRSI,FL-SURFACE /?CTR24
|
|
FSET? PRSI,FL-PERSON \?CCL25
|
|
?CTR24: PRINTC 111
|
|
JUMP ?CND23
|
|
?CCL25: PRINTC 105
|
|
?CND23: PRINTI "nto"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
?CND16: PRINTR "."
|
|
|
|
|
|
.FUNCT RT-TOTAL-SIZE:ANY:1:1,OBJ1,OBJ,TOTSIZ
|
|
FIRST? OBJ1 >OBJ /?PRG2
|
|
?PRG2: ZERO? OBJ \?CCL6
|
|
RETURN TOTSIZ
|
|
?CCL6: FSET? OBJ,FL-WORN /?CND4
|
|
GETPT OBJ,P?SIZE
|
|
GETB STACK,K-SIZ-SIZ
|
|
ADD TOTSIZ,STACK >TOTSIZ
|
|
?CND4: NEXT? OBJ >OBJ /?PRG2
|
|
JUMP ?PRG2
|
|
|
|
|
|
.FUNCT RT-OBJ-TOO-LARGE?:ANY:2:2,OBJ1,OBJ2,CAP,?TMP1
|
|
GETPT OBJ2,P?SIZE
|
|
GETB STACK,K-SIZ-CAP >CAP
|
|
EQUAL? CAP,K-CAP-MAX /FALSE
|
|
GETPT OBJ1,P?SIZE
|
|
GETB STACK,K-SIZ-SIZ >?TMP1
|
|
CALL2 RT-TOTAL-SIZE,OBJ2
|
|
ADD ?TMP1,STACK
|
|
GRTR? STACK,CAP /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-ROOM-IN-MSG?:ANY:2:2,OBJ1,OBJ2
|
|
CALL RT-OBJ-TOO-LARGE?,OBJ1,OBJ2
|
|
ZERO? STACK /FALSE
|
|
PRINTI "There is not enough room"
|
|
ICALL2 RT-IN-ON-MSG,OBJ2
|
|
ICALL RT-PRINT-OBJ,OBJ2,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT RT-CHECK-MOVE-MSG?:ANY:2:2,SRC,DEST,PTR,OLOC,CNT
|
|
ZERO? DEST /FALSE
|
|
SET 'PTR,GL-LOC-TRAIL
|
|
SET 'OLOC,DEST
|
|
?PRG4: PUT PTR,0,OLOC
|
|
INC 'CNT
|
|
ZERO? OLOC /?REP5
|
|
IN? OLOC,ROOMS /?REP5
|
|
IN? OLOC,LOCAL-GLOBALS /?REP5
|
|
IN? OLOC,GLOBAL-OBJECTS /?REP5
|
|
LOC OLOC >OLOC
|
|
ADD PTR,2 >PTR
|
|
EQUAL? OLOC,DEST \?PRG4
|
|
?REP5: INTBL? SRC,GL-LOC-TRAIL,CNT \FALSE
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't put"
|
|
ICALL RT-PRINT-OBJ,SRC,K-ART-THE
|
|
ICALL2 RT-IN-ON-MSG,SRC
|
|
ICALL RT-PRINT-OBJ,SRC,K-ART-HIM
|
|
PRINTI "self, or"
|
|
ICALL2 RT-IN-ON-MSG,SRC
|
|
PRINTI "something that is already"
|
|
ICALL2 RT-IN-ON-MSG,SRC
|
|
ICALL RT-PRINT-OBJ,SRC,K-ART-HIM
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-REACH-BEHIND:ANY:0:0
|
|
PRINTI "['Reach behind' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-REACH-IN:ANY:0:0
|
|
PRINTI "['Reach in' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-REACH-UNDER:ANY:0:0
|
|
PRINTI "['Reach under' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-READ:ANY:0:0
|
|
PRINTI "['Read' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-SHOW:ANY:0:0
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE,TRUE-VALUE,STR?98
|
|
PRINTI " unimpressed by"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-SHOW-SWP:ANY:0:0
|
|
CALL PERFORM,V?SHOW,PRSI,PRSO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SIT:ANY:0:0,OBJ
|
|
SET 'OBJ,PRSO
|
|
EQUAL? PRSO,ROOMS \?CND1
|
|
SET 'OBJ,TH-GROUND
|
|
?CND1: CALL RT-NO-POINT-MSG,STR?99,OBJ
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ITAKE:ANY:0:2,OB,V?,CNT,OBJ,L
|
|
ASSIGNED? 'V? /?CND1
|
|
SET 'V?,TRUE-VALUE
|
|
?CND1: ZERO? OB \?CND3
|
|
SET 'OB,PRSO
|
|
?CND3: LOC OB >L
|
|
FSET? OB,FL-TAKEABLE /?CCL7
|
|
ZERO? V? /FALSE
|
|
ICALL2 RT-YOU-CANT-MSG,STR?100
|
|
RFALSE
|
|
?CCL7: CALL RT-OBJ-TOO-LARGE?,OB,WINNER
|
|
ZERO? STACK /?CCL12
|
|
ZERO? V? /FALSE
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI " holding too much."
|
|
CRLF
|
|
RFALSE
|
|
?CCL12: EQUAL? PRSA,V?TAKE /?CND16
|
|
EQUAL? L,WINNER /?CND16
|
|
ICALL RT-FIRST-YOU-MSG,STR?100,OB,L
|
|
?CND16: CALL2 RT-DO-TAKE,OB
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-DO-TAKE:ANY:1:2,OBJ,FORCED?,L
|
|
LOC OBJ >L
|
|
MOVE OBJ,WINNER
|
|
FSET OBJ,FL-SEEN
|
|
FSET OBJ,FL-TOUCHED
|
|
FCLEAR OBJ,FL-NO-DESC
|
|
FCLEAR OBJ,FL-INVISIBLE
|
|
FCLEAR OBJ,FL-WORN
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRE-TAKE:ANY:0:0,L
|
|
EQUAL? PRSO,TH-HANDS,YOU /FALSE
|
|
LOC PRSO >L
|
|
EQUAL? L,GLOBAL-OBJECTS \?CCL5
|
|
CALL2 NOT-HERE,PRSO
|
|
RSTACK
|
|
?CCL5: CALL RT-META-IN?,WINNER,PRSO
|
|
ZERO? STACK /?CCL7
|
|
ICALL2 RT-ALREADY-MSG,WINNER
|
|
ICALL2 RT-IN-ON-MSG,PRSO
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR ".]"
|
|
?CCL7: ZERO? L /?CCL9
|
|
FSET? L,FL-SURFACE /?CCL9
|
|
FSET? L,FL-OPENABLE \?CCL9
|
|
FSET? L,FL-OPEN /?CCL9
|
|
ICALL RT-PRINT-OBJ,L,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR " closed."
|
|
?CCL9: EQUAL? PRSA,V?TAKE-WITH /FALSE
|
|
ZERO? PRSI /?CCL18
|
|
EQUAL? PRSI,L \?CCL21
|
|
SET 'PRSI,FALSE-VALUE
|
|
RFALSE
|
|
?CCL21: FSET? L,FL-SURFACE /?CCL23
|
|
FSET? PRSI,FL-OPENABLE \?CCL23
|
|
FSET? PRSI,FL-OPEN /?CCL23
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTR " closed."
|
|
?CCL23: EQUAL? PRSI,L /FALSE
|
|
FSET? PRSI,FL-PERSON \?CCL32
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE,TRUE-VALUE,STR?66
|
|
PRINTI "n't have"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
JUMP ?CND30
|
|
?CCL32: ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI "n't"
|
|
ICALL2 RT-IN-ON-MSG,PRSI
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
?CND30: PRINTR "."
|
|
?CCL18: CALL1 PRE-TAKE-WITH
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-TAKE-WITH:ANY:0:0,X
|
|
EQUAL? PRSO,YOU /FALSE
|
|
CALL2 META-LOC,PRSO
|
|
EQUAL? STACK,GLOBAL-OBJECTS \?CCL5
|
|
CALL2 HELD?,PRSO
|
|
ZERO? STACK \FALSE
|
|
FSET? PRSO,FL-PERSON /FALSE
|
|
CALL2 NOT-HERE,PRSO
|
|
RSTACK
|
|
?CCL5: IN? PRSO,WINNER \?CCL12
|
|
ICALL2 RT-ALREADY-MSG,PLAYER
|
|
PRINTI " holding"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR ".]"
|
|
?CCL12: LOC PRSO
|
|
FSET? STACK,FL-CONTAINER \?CCL14
|
|
LOC PRSO
|
|
FSET? STACK,FL-SURFACE /?CCL14
|
|
LOC PRSO
|
|
FSET? STACK,FL-OPEN /?CCL14
|
|
CALL2 RT-YOU-CANT-MSG,STR?101
|
|
RSTACK
|
|
?CCL14: IN? WINNER,PRSO \FALSE
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 91
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?56
|
|
ICALL2 RT-IN-ON-MSG,PRSO
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR ".]"
|
|
|
|
|
|
.FUNCT V-TAKE:ANY:0:0,L,V
|
|
LOC PRSO >L
|
|
CALL1 ITAKE >V
|
|
EQUAL? V,M-FATAL \?CCL3
|
|
RETURN 2
|
|
?CCL3: ZERO? V /FALSE
|
|
GRTR? P-MULT,1 \?CCL10
|
|
PRINTI "Taken"
|
|
JUMP ?CND8
|
|
?CCL10: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?100
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
IN? L,ROOMS /?CND8
|
|
EQUAL? L,GLOBAL-OBJECTS,LOCAL-GLOBALS /?CND8
|
|
PRINTI " from"
|
|
EQUAL? L,PLAYER \?CCL17
|
|
EQUAL? WINNER,PLAYER /?CCL17
|
|
PRINTI " you"
|
|
JUMP ?CND8
|
|
?CCL17: ICALL RT-PRINT-OBJ,L,K-ART-THE
|
|
?CND8: PRINTR "."
|
|
|
|
|
|
.FUNCT V-TAKE-WITH:ANY:0:0
|
|
PRINTI "['Take with' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-TALK-TO:ANY:0:0
|
|
PRINTI "['Talk to' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-TELL:ANY:0:0
|
|
EQUAL? PRSO,PLAYER \?CCL3
|
|
ZERO? QCONTEXT /?CCL6
|
|
SET 'QCONTEXT,FALSE-VALUE
|
|
ZERO? P-CONT /?CCL9
|
|
SET 'WINNER,PLAYER
|
|
RETURN WINNER
|
|
?CCL9: PRINTR "Okay, you're not talking to anyone else."
|
|
?CCL6: ICALL2 WONT-HELP-TO-TALK-TO,PLAYER
|
|
SET 'P-CONT,FALSE-VALUE
|
|
RETURN 2
|
|
?CCL3: FSET? PRSO,FL-ALIVE \?CCL13
|
|
SET 'QCONTEXT,PRSO
|
|
ZERO? P-CONT /?CCL16
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
SET 'WINNER,PRSO
|
|
RFALSE
|
|
?CCL16: ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?102
|
|
PRINTR " at you expectantly, as if you seemed to be about to talk."
|
|
?CCL13: ICALL2 WONT-HELP-TO-TALK-TO,PRSO
|
|
SET 'P-CONT,FALSE-VALUE
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT WONT-HELP-TO-TALK-TO:ANY:1:1,OBJ
|
|
PRINTI "Talking to"
|
|
ICALL RT-PRINT-OBJ,OBJ,K-ART-THE
|
|
PRINTR " won't help one bit."
|
|
|
|
|
|
.FUNCT V-TELL-ABOUT:ANY:0:0,PERSON
|
|
EQUAL? PRSO,CH-PLAYER \?CCL3
|
|
EQUAL? WINNER,CH-PLAYER \?CCL6
|
|
CALL FIND-FLAG,HERE,FL-PERSON,CH-PLAYER >PERSON
|
|
ZERO? PERSON \?CTR8
|
|
CALL FIND-FLAG,HERE,FL-ALIVE,CH-PLAYER >PERSON
|
|
ZERO? PERSON /?CCL9
|
|
?CTR8: ICALL PERFORM,V?ASK-ABOUT,PERSON,PRSI
|
|
RTRUE
|
|
?CCL9: PRINT K-TALK-TO-SELF-MSG
|
|
CRLF
|
|
RTRUE
|
|
?CCL6: SET 'PERSON,WINNER
|
|
SET 'WINNER,CH-PLAYER
|
|
ICALL PERFORM,V?ASK-ABOUT,PERSON,PRSI
|
|
RTRUE
|
|
?CCL3: FSET? PRSO,FL-ALIVE /?CCL13
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI "can't tell anything to"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL13: FSET? PRSO,FL-ASLEEP \?CCL15
|
|
PRINTI "Talking to"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI " in"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-HIS
|
|
PRINTR " current condition would be a waste of time."
|
|
?CCL15: ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?103
|
|
PRINTR " indifferently."
|
|
|
|
|
|
.FUNCT V-THANK:ANY:0:0
|
|
EQUAL? WINNER,CH-PLAYER \?CCL3
|
|
EQUAL? PRSO,CH-PLAYER \?CCL6
|
|
PRINTR "Patting yourself on the back won't help."
|
|
?CCL6: FSET? PRSO,FL-ASLEEP \?CCL8
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE,TRUE-VALUE,STR?104
|
|
PRINTR "n't in any condition to accept your thanks."
|
|
?CCL8: PRINTR """You're welcome."""
|
|
?CCL3: ICALL1 RT-FOOLISH-TO-TALK?
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-TIE-TO:ANY:0:0
|
|
PRINTI "You can't tie"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI " to"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTR "."
|
|
|
|
|
|
.FUNCT V-TURN:ANY:0:0
|
|
PRINTI "['Turn' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-TURN-OFF:ANY:0:0
|
|
PRINTI "['Turn off' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-TURN-ON:ANY:0:0
|
|
PRINTI "['Turn on' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-TURN-TO:ANY:0:0
|
|
PRINTI "['Turn to' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-UNDO:ANY:0:0
|
|
ZERO? P-CAN-UNDO /FALSE
|
|
SET 'GL-SL-HERE,FALSE-VALUE
|
|
IRESTORE
|
|
ZERO? STACK \?CCL6
|
|
PRINTR "[UNDO failed.]"
|
|
?CCL6: PRINTR "[UNDO is not available.]"
|
|
|
|
|
|
.FUNCT V-UNLOCK:ANY:0:0
|
|
FSET? PRSO,FL-OPENABLE /?CCL3
|
|
CALL1 RT-YOU-CANT-MSG
|
|
RSTACK
|
|
?CCL3: FSET? PRSO,FL-OPEN \?CCL5
|
|
CALL RT-ALREADY-MSG,PRSO,STR?93
|
|
RSTACK
|
|
?CCL5: FSET? PRSO,FL-LOCKED /?CCL7
|
|
CALL RT-ALREADY-MSG,PRSO,STR?105
|
|
RSTACK
|
|
?CCL7: CALL RT-MATCH-KEY,PRSO,PRSI
|
|
ZERO? STACK \?CCL9
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE
|
|
PRINTI " can't unlock"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI " with"
|
|
ICALL RT-PRINT-OBJ,PRSI,K-ART-THE
|
|
PRINTC 46
|
|
CRLF
|
|
RTRUE
|
|
?CCL9: CALL RT-OPEN-DOOR-MSG,PRSO,PRSI
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-UNWEAR:ANY:0:0
|
|
IN? PRSO,WINNER \?CCL3
|
|
FSET? PRSO,FL-WORN \?CCL6
|
|
FCLEAR PRSO,FL-WORN
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?100
|
|
PRINTI " off"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL6: ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI "n't wearing"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL3: CALL PERFORM,V?TAKE,PRSO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WAIT:ANY:0:0,N,ABS?
|
|
SET 'N,-1
|
|
ZERO? PRSO \?CCL3
|
|
SET 'N,20
|
|
JUMP ?CND1
|
|
?CCL3: EQUAL? PRSO,INTNUM \?CCL5
|
|
GRTR? P-NUMBER,0 \?CND1
|
|
MUL P-NUMBER,2 >N
|
|
JUMP ?CND1
|
|
?CCL5: EQUAL? PRSO,TH-TIME \?CCL9
|
|
CALL NOUN-USED?,PRSO,W?TURN,W?TURNS
|
|
ZERO? STACK /?CCL12
|
|
CALL ADJ-USED?,PRSO,W?INT.NUM
|
|
ZERO? STACK /?CCL15
|
|
GRTR? P-NUMBER,0 \?CCL15
|
|
SET 'N,P-NUMBER
|
|
JUMP ?CND1
|
|
?CCL15: SET 'N,1
|
|
JUMP ?CND1
|
|
?CCL12: CALL NOUN-USED?,PRSO,W?MIN,W?MINUTE,W?MINUTES
|
|
ZERO? STACK /?CCL19
|
|
CALL ADJ-USED?,PRSO,W?INT.NUM
|
|
ZERO? STACK /?CCL22
|
|
GRTR? P-NUMBER,0 \?CCL22
|
|
MUL P-NUMBER,2 >N
|
|
JUMP ?CND1
|
|
?CCL22: SET 'N,2
|
|
JUMP ?CND1
|
|
?CCL19: CALL NOUN-USED?,PRSO,W?HOUR,W?HOURS
|
|
ZERO? STACK /?CND1
|
|
CALL ADJ-USED?,PRSO,W?INT.NUM
|
|
ZERO? STACK /?CCL28
|
|
GRTR? P-NUMBER,0 \?CCL28
|
|
MUL P-NUMBER,120 >N
|
|
JUMP ?CND1
|
|
?CCL28: SET 'N,120
|
|
?CND1: GRTR? N,0 \?CCL35
|
|
SUB N,1
|
|
ADD GL-MOVES,STACK >GL-MOVES
|
|
PRINT K-TIME-PASSES-MSG
|
|
RTRUE
|
|
?CCL9: PRINTI "[You can't wait for"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTI ".]
|
|
"
|
|
RETURN 2
|
|
?CCL35: ZERO? ABS? /?CCL37
|
|
PRINTI "[That time has already passed.]
|
|
"
|
|
RETURN 2
|
|
?CCL37: PRINTI "[You can't wait for that.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT RT-FIND-DIR:ANY:1:2,RM,L,P,OD,OBJ,PT,PTS
|
|
ASSIGNED? 'L /?CND1
|
|
LOC WINNER >L
|
|
?CND1: SET 'OD,P-WALK-DIR
|
|
?PRG3: NEXTP L,P >P
|
|
ZERO? P /FALSE
|
|
LESS? P,LOW-DIRECTION /FALSE
|
|
SET 'P-WALK-DIR,P
|
|
GETPT L,P >PT
|
|
ZERO? PT /?PRG3
|
|
PTSIZE PT >PTS
|
|
EQUAL? PTS,UEXIT \?CCL13
|
|
GET PT,REXIT
|
|
EQUAL? RM,STACK /?REP4
|
|
JUMP ?PRG3
|
|
?CCL13: EQUAL? PTS,FEXIT \?CCL17
|
|
GET PT,FEXITFCN
|
|
CALL STACK,TRUE-VALUE
|
|
EQUAL? RM,STACK /?REP4
|
|
JUMP ?PRG3
|
|
?CCL17: EQUAL? PTS,CEXIT \?CCL21
|
|
GET PT,REXIT
|
|
EQUAL? RM,STACK /?REP4
|
|
JUMP ?PRG3
|
|
?CCL21: EQUAL? PTS,DEXIT \?PRG3
|
|
GET PT,REXIT
|
|
EQUAL? RM,STACK \?PRG3
|
|
GET PT,DEXITOBJ >OBJ
|
|
ZERO? OBJ /?PRG3
|
|
?REP4: SET 'P-WALK-DIR,OD
|
|
RETURN P
|
|
|
|
|
|
.FUNCT RT-FIND-ROOM:ANY:1:2,DIR,L,OD,RM,PT,PTS
|
|
ASSIGNED? 'L /?CND1
|
|
LOC WINNER >L
|
|
?CND1: GETPT L,DIR >PT
|
|
ZERO? PT /?CND3
|
|
PTSIZE PT >PTS
|
|
EQUAL? PTS,UEXIT,CEXIT,DEXIT \?CCL7
|
|
GET PT,REXIT >RM
|
|
RETURN RM
|
|
?CCL7: EQUAL? PTS,FEXIT /?CCL8
|
|
RETURN RM
|
|
?CCL8: SET 'OD,P-WALK-DIR
|
|
SET 'P-WALK-DIR,DIR
|
|
GET PT,FEXITFCN
|
|
CALL STACK,TRUE-VALUE >RM
|
|
SET 'P-WALK-DIR,OD
|
|
?CND3: RETURN RM
|
|
|
|
|
|
.FUNCT RT-SET-PUPPY:ANY:1:1,OBJ
|
|
ZERO? GL-PUPPY /?CND1
|
|
FCLEAR GL-PUPPY,FL-NO-DESC
|
|
?CND1: SET 'GL-PUPPY,OBJ
|
|
FSET GL-PUPPY,FL-NO-DESC
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-CLEAR-PUPPY:ANY:0:0
|
|
ZERO? GL-PUPPY /TRUE
|
|
FCLEAR GL-PUPPY,FL-NO-DESC
|
|
SET 'GL-PUPPY,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-WALK:ANY:0:0,PT,PTS,STR,RM
|
|
ZERO? P-WALK-DIR \?CND1
|
|
ICALL1 V-WALK-AROUND
|
|
RETURN 2
|
|
?CND1: LOC WINNER
|
|
GETPT STACK,PRSO >PT
|
|
ZERO? PT /?CCL7
|
|
PTSIZE PT >PTS
|
|
EQUAL? PTS,UEXIT \?CCL10
|
|
GET PT,REXIT
|
|
ICALL2 RT-GOTO,STACK
|
|
RTRUE
|
|
?CCL10: EQUAL? PTS,NEXIT \?CCL12
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
GET PT,NEXITSTR
|
|
PRINT STACK
|
|
CRLF
|
|
RETURN 2
|
|
?CCL12: EQUAL? PTS,FEXIT \?CCL16
|
|
GET PT,FEXITFCN
|
|
CALL STACK >RM
|
|
ZERO? RM /?PRG20
|
|
ICALL2 RT-GOTO,RM
|
|
RTRUE
|
|
?PRG20: RETURN 2
|
|
?CCL16: EQUAL? PTS,CEXIT \?CCL23
|
|
GETB PT,CEXITFLAG
|
|
VALUE STACK
|
|
ZERO? STACK /?CCL26
|
|
GET PT,REXIT
|
|
ICALL2 RT-GOTO,STACK
|
|
RTRUE
|
|
?CCL26: GET PT,CEXITSTR >STR
|
|
ZERO? STR /?CCL28
|
|
PRINT STR
|
|
CRLF
|
|
RETURN 2
|
|
?CCL28: ICALL2 RT-YOU-CANT-MSG,STR?106
|
|
RETURN 2
|
|
?CCL23: EQUAL? PTS,DEXIT \FALSE
|
|
CALL2 WALK-THRU-DOOR?,PT
|
|
ZERO? STACK /?PRG38
|
|
GET PT,REXIT
|
|
ICALL2 RT-GOTO,STACK
|
|
RTRUE
|
|
?PRG38: RETURN 2
|
|
?CCL7: EQUAL? PRSO,P?IN,P?OUT \?CCL41
|
|
CALL1 V-WALK-AROUND
|
|
RSTACK
|
|
?CCL41: ICALL2 RT-YOU-CANT-MSG,STR?106
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT WALK-THRU-DOOR?:ANY:1:3,PT,OBJ,TELL?,RM
|
|
ASSIGNED? 'TELL? /?CND1
|
|
SET 'TELL?,TRUE-VALUE
|
|
?CND1: ZERO? OBJ \?CND3
|
|
GET PT,DEXITOBJ >OBJ
|
|
?CND3: FSET? OBJ,FL-OPEN /TRUE
|
|
ZERO? PT /?CCL9
|
|
GET PT,DEXITSTR >RM
|
|
ZERO? RM /?CCL9
|
|
ZERO? TELL? /FALSE
|
|
PRINT RM
|
|
CRLF
|
|
RFALSE
|
|
?CCL9: ICALL RT-PRINT-OBJ,OBJ,K-ART-THE,TRUE-VALUE,STR?56
|
|
PRINTI "n't open."
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-GOTO:ANY:1:2,RM,FORCED?
|
|
IN? WINNER,RM \?CND1
|
|
ICALL1 RT-WALK-WITHIN-ROOM-MSG
|
|
RFALSE
|
|
?CND1: GETP HERE,P?ACTION
|
|
CALL STACK,M-EXIT
|
|
ZERO? STACK /?CND3
|
|
ZERO? FORCED? /FALSE
|
|
?CND3: MOVE WINNER,RM
|
|
EQUAL? WINNER,PLAYER \?CND7
|
|
ZERO? GL-PUPPY /?CND9
|
|
MOVE GL-PUPPY,RM
|
|
?CND9: SET 'OHERE,HERE
|
|
SET 'HERE,RM
|
|
ICALL1 RT-ENTER-ROOM
|
|
?CND7: ZERO? GL-PUPPY /TRUE
|
|
PRINTC TAB
|
|
ICALL RT-PRINT-OBJ,GL-PUPPY,K-ART-THE,TRUE-VALUE,STR?107
|
|
PRINTR " you."
|
|
|
|
|
|
.FUNCT RT-ENTER-ROOM:ANY:0:0,VAL,CNT,TBL,I,C
|
|
CALL1 LIT? >LIT
|
|
DIROUT D-TABLE-ON,K-DIROUT-TBL
|
|
ICALL1 RT-ROOM-NAME-MSG
|
|
DIROUT D-TABLE-OFF
|
|
SET 'TBL,K-DIROUT-TBL+2
|
|
GET K-DIROUT-TBL,0 >CNT
|
|
GRTR? CNT,0 \?CND1
|
|
?PRG3: GETB TBL,I >C
|
|
LESS? C,97 /?CND5
|
|
GRTR? C,122 /?CND5
|
|
SUB C,32
|
|
PUTB TBL,I,STACK
|
|
?CND5: IGRTR? 'I,CNT \?PRG3
|
|
?CND1: HLIGHT H-BOLD
|
|
PRINTT TBL,CNT
|
|
HLIGHT H-NORMAL
|
|
CRLF
|
|
GETP HERE,P?ACTION
|
|
ICALL STACK,M-ENTER
|
|
CALL1 RT-DESCRIBE-ROOM
|
|
ZERO? STACK \?CCL13
|
|
SET 'VAL,0
|
|
JUMP ?CND11
|
|
?CCL13: CALL1 RT-DESCRIBE-OBJECTS >VAL
|
|
?CND11: GETP HERE,P?ACTION
|
|
ICALL STACK,M-ENTERED
|
|
RETURN VAL
|
|
|
|
|
|
.FUNCT RT-ROOM-NAME-MSG:ANY:0:0
|
|
ZERO? LIT /?CCL3
|
|
CALL2 RT-PRINT-DESC,HERE
|
|
RSTACK
|
|
?CCL3: PRINTI "darkness"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-WALK-AROUND:ANY:0:0
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 91
|
|
PRINT K-WHICH-DIR-MSG
|
|
PRINTC 93
|
|
CRLF
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-WALK-TO:ANY:0:0
|
|
PRINTI "['Walk to' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT RT-WALK-WITHIN-ROOM-MSG:ANY:0:0
|
|
CALL NO-NEED,STR?109,HERE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WEAR:ANY:0:0
|
|
IN? PRSO,WINNER /?CCL3
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?66
|
|
PRINTI "n't have"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL3: FSET? PRSO,FL-WORN \?CCL5
|
|
ICALL2 RT-ALREADY-MSG,WINNER
|
|
PRINTI " wearing"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR ".]"
|
|
?CCL5: FSET? PRSO,FL-CLOTHING \?CCL7
|
|
FSET PRSO,FL-WORN
|
|
ICALL RT-PRINT-OBJ,WINNER,K-ART-THE,TRUE-VALUE,STR?90
|
|
PRINTI " on"
|
|
ICALL RT-PRINT-OBJ,PRSO,K-ART-THE
|
|
PRINTR "."
|
|
?CCL7: CALL2 RT-YOU-CANT-MSG,STR?110
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WELD:ANY:0:0
|
|
PRINTI "['Weld' currently has no default handling.]
|
|
"
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT V-YES:ANY:0:0
|
|
PRINTI "[You seem sure of yourself.]"
|
|
CRLF
|
|
RETURN 2
|
|
|
|
.ENDI
|