moonmist/places.zap

217 lines
4.1 KiB
Plaintext

.FUNCT NULL-F,A1,A2
RFALSE
.FUNCT DOOR-ROOM,RM,DR,P=0,TBL
?PRG1: NEXTP RM,P >P
ZERO? P /FALSE
LESS? P,LOW-DIRECTION /FALSE
GETPT RM,P >TBL
PTSIZE TBL
EQUAL? DEXIT,STACK \?PRG1
GETB TBL,DEXITOBJ
EQUAL? DR,STACK \?PRG1
GETB TBL,REXIT
RSTACK
.FUNCT FIND-FLAG,RM,FLAG,EXCLUDED=0,O
FIRST? RM >O /?PRG1
?PRG1: ZERO? O /FALSE
FSET? O,FLAG \?CCL7
FSET? O,INVISIBLE /?CCL7
EQUAL? O,EXCLUDED /?CCL7
RETURN O
?CCL7: NEXT? O >O /?PRG1
JUMP ?PRG1
.FUNCT FIND-FLAG-NOT,RM,FLAG,O
FIRST? RM >O /?PRG1
?PRG1: ZERO? O /FALSE
FSET? O,FLAG /?CCL7
FSET? O,INVISIBLE /?CCL7
RETURN O
?CCL7: NEXT? O >O /?PRG1
JUMP ?PRG1
.FUNCT FIND-FLAG-LG,RM,FLAG,FLAG2=0,TBL,O,CNT=0,SIZE
GETPT RM,P?GLOBAL >TBL
ZERO? TBL /FALSE
PTSIZE TBL
SUB STACK,1 >SIZE
?PRG4: GETB TBL,CNT >O
FSET? O,FLAG \?CCL8
FSET? O,INVISIBLE /?CCL8
ZERO? FLAG2 /?CTR7
FSET? O,FLAG2 \?CCL8
?CTR7: RETURN O
?CCL8: IGRTR? 'CNT,SIZE \?PRG4
RFALSE
.FUNCT FIND-FLAG-HERE,FLAG,NOT1=0,NOT2=0,O
FIRST? HERE >O /?PRG1
?PRG1: ZERO? O /FALSE
FSET? O,FLAG \?CCL7
FSET? O,INVISIBLE /?CCL7
EQUAL? O,NOT1,NOT2 /?CCL7
RETURN O
?CCL7: NEXT? O >O /?PRG1
JUMP ?PRG1
.FUNCT FIND-FLAG-HERE-NOT,FLAG,NFLAG,NOT2=0,O
FIRST? HERE >O /?PRG1
?PRG1: ZERO? O /FALSE
FSET? O,FLAG \?CCL7
FSET? O,NFLAG /?CCL7
FSET? O,INVISIBLE /?CCL7
EQUAL? O,NOT2 /?CCL7
RETURN O
?CCL7: NEXT? O >O /?PRG1
JUMP ?PRG1
.FUNCT LEVER-F,X=0
FSET? HERE,SECRETBIT \?CCL3
CALL FIND-FLAG-LG,HERE,DOORBIT >X
JUMP ?CND1
?CCL3: EQUAL? HERE,DUNGEON,LOVER-PATH \?CND1
SET 'X,PRIEST-DOOR
?CND1: ZERO? X \?CCL7
CALL NOT-HERE,LEVER
RTRUE
?CCL7: EQUAL? PRSA,V?TURN,V?TAKE,V?RUB /?CTR8
EQUAL? PRSA,V?PUSH,V?MOVE-DIR,V?MOVE \?CCL9
?CTR8: FSET X,TOUCHBIT
CALL OPEN-CLOSE,X
RSTACK
?CCL9: EQUAL? PRSA,V?OPEN \?CCL13
FSET X,TOUCHBIT
CALL OKAY,X,STR?66
RTRUE
?CCL13: EQUAL? PRSA,V?CLOSE \FALSE
FSET X,TOUCHBIT
CALL OKAY,X,STR?61
RTRUE
.FUNCT OPEN-CLOSE,DR,SAY-NAME=1,X
ZERO? SAY-NAME /?PRG5
CALL START-SENTENCE,DR
?PRG5: PRINTI " creaks "
FSET? DR,OPENBIT \?CCL9
FCLEAR DR,OPENBIT
CALL THIS-IS-IT,DR
PRINTI "closed.
"
CALL REMOVE-CAREFULLY
RTRUE
?CCL9: CALL DOOR-ROOM,HERE,DR >X
ZERO? X /FALSE
FSET DR,OPENBIT
CALL THIS-IS-IT,X
PRINTI "open, revealing"
FSET? HERE,SECRETBIT \?CCL18
CALL PRINTT,X
JUMP ?CND16
?CCL18: EQUAL? HERE,LOVER-PATH \?PRG25
CALL PRINTT,DUNGEON
JUMP ?CND16
?PRG25: PRINTI " a "
PRINTD PASSAGE
?CND16: FSET DR,SEENBIT
FSET X,SEENBIT
PRINTR "!"
.FUNCT OUTSIDE?,RM
CALL GLOBAL-IN?,MOON,RM
RSTACK
.FUNCT WINDOW-F
EQUAL? PRSA,V?UNLOCK /?CTR2
EQUAL? PRSA,V?LOCK,V?CLOSE,V?OPEN \?CCL3
?CTR2: EQUAL? HERE,DRIVEWAY /?CTR7
LOC PLAYER
EQUAL? STACK,CAR \?CCL8
?CTR7: CALL NO-NEED
RTRUE
?CCL8: EQUAL? PRSA,V?OPEN \?CCL12
PRINTR "The night air is too damp and chilly."
?CCL12: CALL ALREADY,WINDOW,STR?61
RTRUE
?CCL3: EQUAL? PRSA,V?THROUGH,V?LEAVE,V?DISEMBARK \?CCL16
PRINTR "It's closed tight against the mist."
?CCL16: EQUAL? PRSA,V?LOOK-OUTSIDE,V?LOOK-THROUGH,V?LOOK-INSIDE \FALSE
LOC WINNER
EQUAL? STACK,CAR \?PRG24
CALL V-LOOK
RSTACK
?PRG24: PRINTR "All you can see are grey shapes in the moonlight."
.FUNCT CORRIDOR-LOOK,ITM=0,C,Z,COR,VAL,FOUND=0
GETP HERE,P?CORRIDOR >C
ZERO? C /FALSE
?PRG5: SUB C,4 >Z
LESS? Z,0 /?CCL9
SET 'COR,COR-4
JUMP ?CND7
?CCL9: SUB C,2 >Z
LESS? Z,0 /?CCL11
SET 'COR,COR-2
JUMP ?CND7
?CCL11: SUB C,1 >Z
LESS? Z,0 /?REP6
SET 'COR,COR-1
?CND7: CALL CORRIDOR-CHECK,COR,ITM >VAL
ZERO? FOUND \?CND14
SET 'FOUND,VAL
?CND14: SET 'C,Z
JUMP ?PRG5
?REP6: RETURN FOUND
.FUNCT CORRIDOR-CHECK,COR,ITM,CNT=1,PAST=0,FOUND=0,RM,OBJ
?PRG1: INC 'CNT
GET COR,CNT >RM
ZERO? RM /FALSE
EQUAL? RM,ITM \?CCL7
GET COR,PAST
RSTACK
?CCL7: EQUAL? ITM,ROOMS \?CCL9
CALL THIS-IT?,RM
ZERO? STACK /?CCL9
RETURN RM
?CCL9: CALL LIT?,RM
ZERO? STACK \?CCL13
EQUAL? ITM,ROOMS \?PRG1
?CCL13: EQUAL? RM,HERE \?CCL17
SET 'PAST,1
JUMP ?PRG1
?CCL17: FIRST? RM >OBJ \?PRG1
?PRG19: ZERO? ITM /?CCL23
EQUAL? OBJ,ITM \?CND21
GET COR,PAST >FOUND
JUMP ?REP20
?CCL23: FSET? OBJ,PERSONBIT \?CND21
CALL IN-MOTION?,OBJ,TRUE-VALUE
ZERO? STACK \?CND21
PRINTD OBJ
PRINTI " is in"
CALL PRINTT,RM
PRINTC 46
CRLF
?CND21: NEXT? OBJ >OBJ /?KLU35
?KLU35: ZERO? OBJ \?PRG19
?REP20: ZERO? FOUND /?PRG1
RETURN FOUND
.ENDI