-
Notifications
You must be signed in to change notification settings - Fork 14
/
places.zap
216 lines (189 loc) · 4.14 KB
/
places.zap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
.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