-
Notifications
You must be signed in to change notification settings - Fork 27
/
misc.zap
3720 lines (3318 loc) · 70.3 KB
/
misc.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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
.FUNCT GO
START::
?FCN: SET 'HERE,HILLTOP
MOVE PLAYER,HERE
SET 'WINNER,PLAYER
SET 'LIT?,TRUE-VALUE
ICALL1 INITVARS
ICALL1 STARTUP
ICALL1 SETUP-CHARACTER
RANDOM 8
SUB STACK,1 >WINDIR
ICALL2 QUEUE,I-BREEZE
ICALL1 V-REFRESH
CRLF
ICALL1 V-LOOK
ICALL1 DO-MAIN-LOOP
JUMP ?FCN
.FUNCT DO-MAIN-LOOP,X
?PRG1: CALL1 MAIN-LOOP >X
JUMP ?PRG1
.FUNCT MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,X
SET 'CNT,0
SET 'OBJ,FALSE-VALUE
SET 'PTBL,TRUE-VALUE
EQUAL? HERE,QCONTEXT-ROOM /?CND1
SET 'QCONTEXT,FALSE-VALUE
SET 'QCONTEXT-ROOM,FALSE-VALUE
?CND1: CALL1 PARSER >P-WON
ZERO? P-WON /?CCL5
GET P-PRSI,P-MATCHLEN >ICNT
GET P-PRSO,P-MATCHLEN >OCNT
ZERO? P-IT-OBJECT /?CND6
CALL2 ACCESSIBLE?,P-IT-OBJECT
ZERO? STACK /?CND6
SET 'TMP,FALSE-VALUE
?PRG10: IGRTR? 'CNT,ICNT /?REP11
GET P-PRSI,CNT
EQUAL? STACK,IT \?PRG10
PUT P-PRSI,CNT,P-IT-OBJECT
SET 'TMP,TRUE-VALUE
?REP11: ZERO? TMP \?CND16
SET 'CNT,0
?PRG18: IGRTR? 'CNT,OCNT /?CND16
GET P-PRSO,CNT
EQUAL? STACK,IT \?PRG18
PUT P-PRSO,CNT,P-IT-OBJECT
?CND16: SET 'CNT,0
?CND6: SET 'NUM,1
ZERO? OCNT \?CCL26
SET 'NUM,0
JUMP ?CND24
?CCL26: GRTR? OCNT,1 \?CCL28
SET 'TBL,P-PRSO
SET 'OBJ,FALSE-VALUE
ZERO? ICNT /?CND29
GET P-PRSI,1 >OBJ
?CND29: SET 'NUM,OCNT
JUMP ?CND24
?CCL28: GRTR? ICNT,1 \?CND24
SET 'PTBL,FALSE-VALUE
SET 'TBL,P-PRSI
GET P-PRSO,1 >OBJ
SET 'NUM,ICNT
?CND24: ZERO? OBJ \?CND32
EQUAL? ICNT,1 \?CND32
GET P-PRSI,1 >OBJ
?CND32: EQUAL? PRSA,V?WALK \?CCL38
CALL PERFORM,PRSA,PRSO >V
JUMP ?CND36
?CCL38: ZERO? NUM \?CCL40
GETB P-SYNTAX,P-SBITS
BAND STACK,P-SONUMS
ZERO? STACK \?CCL43
CALL2 PERFORM,PRSA >V
SET 'PRSO,FALSE-VALUE
JUMP ?CND36
?CCL43: ZERO? LIT? \?CCL45
ICALL1 PCLEAR
ICALL1 TOO-DARK
JUMP ?CND36
?CCL45: ICALL1 PCLEAR
PRINTI "[There isn't anything to "
GET P-ITBL,P-VERBN >TMP
INTBL? PRSA,TALKVERBS,NTVERBS >X \?CCL48
PRINTI "talk to"
JUMP ?CND46
?CCL48: ZERO? P-MERGED \?CTR49
ZERO? P-OFLAG /?CCL50
?CTR49: GET TMP,0
PRINTB STACK
JUMP ?CND46
?CCL50: GETB TMP,3 >X
GETB TMP,2
ICALL WORD-PRINT,STACK,X
?CND46: PRINTI ".]"
CRLF
SET 'V,FALSE-VALUE
JUMP ?CND36
?CCL40: SET 'X,0
SET 'P-MULT?,FALSE-VALUE
GRTR? NUM,1 \?CND53
SET 'P-MULT?,TRUE-VALUE
?CND53: SET 'TMP,FALSE-VALUE
?PRG55: IGRTR? 'CNT,NUM \?CND57
GRTR? X,0 \?CCL61
PRINTI "[The "
EQUAL? X,NUM /?CND62
PRINTI "other "
?CND62: PRINTI "object"
EQUAL? X,1 /?CND64
PRINTC 115
?CND64: PRINTI " that you mentioned "
EQUAL? X,1 /?CCL68
PRINTI "are"
JUMP ?CND66
?CCL68: PRINTI "is"
?CND66: PRINTI "n't here.]"
CRLF
JUMP ?CND36
?CCL61: ZERO? TMP \?CND36
ICALL1 REFERRING
JUMP ?CND36
?CND57: ZERO? PTBL /?CCL72
GET P-PRSO,CNT >OBJ1
JUMP ?CND70
?CCL72: GET P-PRSI,CNT >OBJ1
?CND70: GRTR? NUM,1 /?CCL74
GET P-ITBL,P-NC1
GET STACK,0
EQUAL? STACK,W?ALL,W?EVERYTHING \?CND73
?CCL74: EQUAL? OBJ1,NOT-HERE-OBJECT \?CCL79
INC 'X
JUMP ?PRG55
?CCL79: EQUAL? P-GETFLAGS,P-ALL \?CCL81
CALL DONT-ALL?,OBJ1,OBJ
ZERO? STACK \?PRG55
?CCL81: CALL2 ACCESSIBLE?,OBJ1
ZERO? STACK /?PRG55
EQUAL? OBJ1,PLAYER /?PRG55
EQUAL? OBJ1,IT \?CCL89
FSET? P-IT-OBJECT,NOARTICLE /?CND90
PRINT XTHE
?CND90: ICALL2 DPRINT,P-IT-OBJECT
JUMP ?CND87
?CCL89: FSET? OBJ1,NOARTICLE /?CND92
PRINT XTHE
?CND92: ICALL2 DPRINT,OBJ1
?CND87: PRINTI ": "
?CND73: SET 'TMP,TRUE-VALUE
SET 'PRSO,OBJ1
SET 'PRSI,OBJ
ZERO? PTBL \?CND94
SET 'PRSO,OBJ
SET 'PRSI,OBJ1
?CND94: SET 'PSEUDO-PRSO?,FALSE-VALUE
EQUAL? PRSO,PSEUDO-OBJECT \?CND96
SET 'PSEUDO-PRSO?,TRUE-VALUE
?CND96: CALL PERFORM,PRSA,PRSO,PRSI >V
EQUAL? V,M-FATAL \?PRG55
?CND36: EQUAL? V,M-FATAL \?CND3
SET 'P-CONT,FALSE-VALUE
JUMP ?CND3
?CCL5: SET 'P-CONT,FALSE-VALUE
?CND3: ZERO? P-WON /?CND102
EQUAL? V,M-FATAL /?CND102
INTBL? PRSA,GAME-VERBS,NGVERBS >X /?CND102
CALL1 CLOCKER >V
?CND102: SET 'PRSA,FALSE-VALUE
SET 'PRSO,FALSE-VALUE
SET 'PRSI,FALSE-VALUE
RFALSE
.FUNCT DONT-ALL?,O,I,L,X
LOC O >L
ZERO? L /TRUE
EQUAL? O,I /TRUE
EQUAL? PRSA,V?TAKE \?CCL7
EQUAL? L,WINNER /TRUE
ZERO? LIT? \?CCL12
IN? L,WINNER \TRUE
?CCL12: FSET? O,NOALL /TRUE
FSET? O,TAKEABLE /?CCL18
FSET? O,TRYTAKE \TRUE
?CCL18: FSET? L,CONTAINER \?CCL22
FSET? L,OPENED \TRUE
?CCL22: ZERO? I /?CCL26
EQUAL? L,I \TRUE
CALL2 SEE-INSIDE?,I
ZERO? STACK /TRUE
RFALSE
?CCL26: LOC PLAYER
EQUAL? L,STACK /FALSE
FSET? L,TAKEABLE /TRUE
CALL2 SEE-INSIDE?,L
ZERO? STACK /TRUE
RFALSE
?CCL7: INTBL? PRSA,PUTVERBS,NUMPUTS >X \FALSE
FSET? O,WORN /TRUE
FSET? O,WIELDED /TRUE
EQUAL? L,WINNER /FALSE
RTRUE
.FUNCT DEQUEUE,RTN
CALL2 QUEUED?,RTN >RTN
ZERO? RTN /FALSE
COPYT RTN,0,C-INTLEN
RFALSE
.FUNCT QUEUED?,RTN,TBL,LEN
ADD C-TABLE,C-INTS >TBL
SUB C-TABLE+100,TBL
DIV STACK,C-INTLEN >LEN
LESS? LEN,1 /FALSE
INTBL? RTN,TBL,LEN,132 >RTN \FALSE
GET RTN,C-TICK
ZERO? STACK /FALSE
RETURN RTN
.FUNCT QUEUE,RTN,TICK,C,E,INT
ASSIGNED? 'TICK /?CND1
SET 'TICK,-1
?CND1: SET 'E,C-TABLE+100
ADD C-TABLE,C-INTS >C
?PRG3: EQUAL? C,E \?CCL7
ZERO? INT /?CCL10
SET 'C,INT
JUMP ?CND8
?CCL10: LESS? C-INTS,C-INTLEN /TRUE
SUB C-INTS,C-INTLEN >C-INTS
ADD C-TABLE,C-INTS >INT
?CND8: PUT INT,C-RTN,RTN
JUMP ?REP4
?CCL7: GET C,C-RTN
EQUAL? STACK,RTN \?CCL14
SET 'INT,C
?REP4: GRTR? INT,CLOCK-HAND \?CND16
ADD TICK,3
SUB 0,STACK >TICK
?CND16: PUT INT,C-TICK,TICK
RETURN INT
?CCL14: GET C,C-RTN
ZERO? STACK \?CND5
SET 'INT,C
?CND5: ADD C,C-INTLEN >C
JUMP ?PRG3
.FUNCT CLOCKER,FLG,Q?,E,TICK,RTN,X,OSTAT,NSTAT,MAX,DELTA
ZERO? CLOCK-WAIT? /?CND1
SET 'CLOCK-WAIT?,FALSE-VALUE
RFALSE
?CND1: ADD C-TABLE,C-INTS >CLOCK-HAND
SET 'E,C-TABLE+100
?PRG3: EQUAL? CLOCK-HAND,E \?CCL7
INC 'MOVES
CALL1 REFRESH-STATS?
ZERO? STACK /?REP4
SET 'FLG,TRUE-VALUE
RETURN FLG
?CCL7: GET CLOCK-HAND,C-RTN
ZERO? STACK /?CND5
GET CLOCK-HAND,C-TICK >TICK
LESS? TICK,-1 \?CCL13
SUB 0,TICK
SUB STACK,3
PUT CLOCK-HAND,C-TICK,STACK
SET 'Q?,CLOCK-HAND
JUMP ?CND5
?CCL13: ZERO? TICK /?CND5
GRTR? TICK,0 \?CND15
DEC 'TICK
PUT CLOCK-HAND,C-TICK,TICK
?CND15: ZERO? TICK /?CND17
SET 'Q?,CLOCK-HAND
?CND17: GRTR? TICK,0 /?CND5
GET CLOCK-HAND,C-RTN >RTN
ZERO? TICK \?CND21
COPYT CLOCK-HAND,0,C-INTLEN
?CND21: CALL RTN >X
ZERO? X /?CND23
SET 'FLG,TRUE-VALUE
?CND23: ZERO? Q? \?CND5
GET CLOCK-HAND,C-RTN
ZERO? STACK /?CND5
SET 'Q?,TRUE-VALUE
?CND5: ADD CLOCK-HAND,C-INTLEN >CLOCK-HAND
ZERO? Q? \?PRG3
ADD C-INTS,C-INTLEN >C-INTS
JUMP ?PRG3
?REP4: RETURN FLG
.FUNCT REFRESH-STATS?,CNT,ANY,STAT,OSTAT,NSTAT,DELTA,MAX,RATE
SET 'RATE,NORMAL-RATE
IN? SCABBARD,PLAYER \?CND1
FSET? SCABBARD,WORN \?CND1
FSET? SCABBARD,NEUTRALIZED /?CND1
SET 'RATE,BLESSED-RATE
?CND1: SET 'STAT,ENDURANCE
?PRG6: GET STATS,STAT >OSTAT
GET MAXSTATS,STAT >MAX
EQUAL? STAT,INTELLIGENCE \?CCL9
CALL2 WEARING-MAGIC?,HELM
ZERO? STACK \?CND8
?CCL9: EQUAL? NO-REFRESH,STAT \?CCL13
SET 'NO-REFRESH,-1
JUMP ?CND8
?CCL13: EQUAL? OSTAT,MAX /?CND8
MUL RATE,MAX
DIV STACK,100 >DELTA
LESS? DELTA,1 \?CND15
SET 'DELTA,1
?CND15: GRTR? OSTAT,MAX \?CCL19
SUB OSTAT,DELTA >NSTAT
LESS? NSTAT,MAX \?CND17
SET 'NSTAT,MAX
JUMP ?CND17
?CCL19: ADD OSTAT,DELTA >NSTAT
GRTR? NSTAT,MAX \?CND17
SET 'NSTAT,MAX
?CND17: PUT STATS,STAT,NSTAT
ZERO? DMODE /?CND24
EQUAL? IN-DBOX,SHOWING-STATS /?CCL26
ZERO? BMODE /?CND24
ZERO? STAT \?CND24
?CCL26: ICALL2 SHOW-STAT,STAT
?CND24: INC 'ANY
EQUAL? NSTAT,MAX \?CND8
INC 'CNT
PUTB NEW-STATS,CNT,STAT
?CND8: IGRTR? 'STAT,LUCK \?PRG6
ZERO? ANY /FALSE
ZERO? DMODE \?CCL39
ICALL1 UPPER-SLINE
JUMP ?CND35
?CCL39: ZERO? VT220 \?CND35
ICALL1 APPLE-STATS
?CND35: ZERO? CNT /FALSE
ZERO? SAY-STAT /FALSE
EQUAL? HOST,MACINTOSH /?CND45
HLIGHT H-BOLD
?CND45: PRINT TAB
PRINTI "[Your "
SET 'ANY,CNT
?PRG47: GETB NEW-STATS,ANY
GET STAT-NAMES,STACK
PRINT STACK
DLESS? 'ANY,1 /?REP48
EQUAL? ANY,1 \?CCL53
PRINT AND
JUMP ?PRG47
?CCL53: PRINTI ", "
JUMP ?PRG47
?REP48: PRINTC SP
GRTR? CNT,1 \?CCL56
PRINTB W?ARE
JUMP ?CND54
?CCL56: PRINTB W?IS
?CND54: PRINTI " back to normal.]"
CRLF
HLIGHT H-NORMAL
SOUND S-BEEP
ZERO? AUTO /TRUE
GETB NEW-STATS,1
ZERO? STACK \TRUE
ICALL1 BMODE-OFF
RTRUE
.FUNCT INITVARS,X
GETB 0,30 >HOST
GETB 0,1
BAND STACK,1 >COLORS?
GET 0,8
BAND STACK,8 >GRAPHICS?
SET 'BAR-RES,8
EQUAL? HOST,MACINTOSH \?CND1
PUTB TCHARS,FIRST-MAC-ARROW,MAC-UP-ARROW
PUTB TCHARS,27,MAC-DOWN-ARROW
SET 'BAR-RES,6
?CND1: HLIGHT H-MONO
GETB 0,38 >CWIDTH
GETB 0,39 >CHEIGHT
FONT F-NEWFONT >X
FONT F-DEFAULT >X
HLIGHT H-NORMAL
GET 0,17 >X
DIV X,CWIDTH >WIDTH
GRTR? WIDTH,80 \?CND3
SET 'WIDTH,80
?CND3: GET 0,18 >X
DIV X,CHEIGHT >HEIGHT
SUB WIDTH,20 >DWIDTH
SET 'BOXWIDTH,DWIDTH
EQUAL? HOST,APPLE-2C \?CND5
DEC 'BOXWIDTH
?CND5: SUB WIDTH,MWIDTH
SUB STACK,1 >MOUSEDGE
DIV STATMAX,BAR-RES
ADD STACK,1 >SWIDTH
ADD LABEL-WIDTH,SWIDTH
ADD STACK,5 >BARWIDTH
SET 'CAN-UNDO,0
SET 'STAT-ROUTINE,RAWBAR
SET 'VT220,TRUE-VALUE
SET 'MAX-DHEIGHT,NORMAL-DHEIGHT
SET 'DHEIGHT,MAX-DHEIGHT
SET 'MAP-ROUTINE,CLOSE-MAP
ZERO? VT100 \?CCL8
EQUAL? HOST,APPLE-2E,APPLE-2C /?CCL8
ZERO? GRAPHICS? \FALSE
EQUAL? HOST,IBM \FALSE
?CCL8: ICALL1 SETUP-APPLE-MODE
RFALSE
.FUNCT SETUP-APPLE-MODE
SET 'VT220,FALSE-VALUE
SET 'GRAPHICS?,FALSE-VALUE
SET 'STAT-ROUTINE,BAR-NUMBER
SET 'MAX-DHEIGHT,8
SET 'MAP-ROUTINE,FAR-MAP
SET 'DHEIGHT,MAX-DHEIGHT
RFALSE
.FUNCT CENTER,Y,X
SUB WIDTH,X
DIV STACK,2
ICALL DO-CURSET,Y,STACK
RFALSE
.FUNCT DO-CURSET,Y,X
EQUAL? 1,CWIDTH,CHEIGHT /?CND1
DEC 'X
MUL X,CWIDTH >X
INC 'X
DEC 'Y
MUL Y,CHEIGHT >Y
INC 'Y
?CND1: CURSET Y,X
RFALSE
.FUNCT TO-TOP-WINDOW,X
FONT F-DEFAULT >X
SCREEN S-WINDOW
BUFOUT FALSE-VALUE
HLIGHT H-NORMAL
HLIGHT H-MONO
COLOR GCOLOR,BGND
RFALSE
.FUNCT TO-BOTTOM-WINDOW,X
FONT F-DEFAULT >X
SCREEN S-TEXT
BUFOUT TRUE-VALUE
HLIGHT H-NORMAL
COLOR FORE,BGND
RFALSE
.FUNCT V-REFRESH,REDGE,X
GET 0,8 >X
BAND X,65531
PUT 0,8,STACK
SET 'OLD-HERE,FALSE-VALUE
SET 'P-WALK-DIR,FALSE-VALUE
COLOR FORE,BGND
CLEAR -1
ZERO? DMODE \?CND1
SPLIT 2
ICALL1 TO-BOTTOM-WINDOW
RTRUE
?CND1: SET 'NEW-DBOX,IN-DBOX
SPLIT 12
ZERO? VT220 \?CND3
ICALL1 APPLE-STATS
EQUAL? HOST,APPLE-2C \?CCL7
ICALL1 2C-BOX
RTRUE
?CCL7: EQUAL? HOST,IBM \TRUE
ICALL1 IBM-BOX
RTRUE
?CND3: ICALL1 TO-TOP-WINDOW
FONT F-NEWFONT >X
SUB WIDTH,MWIDTH
SUB STACK,1 >REDGE
ICALL DO-CURSET,2,1
PRINTC TLC
SET 'X,REDGE
?PRG9: PRINTC TOP
DLESS? 'X,3 \?PRG9
PRINTC TRC
ICALL DO-CURSET,12,1
PRINTC BLC
SET 'X,REDGE
?PRG13: PRINTC BOT
DLESS? 'X,3 \?PRG13
PRINTC BRC
SET 'X,3
?PRG17: ICALL DO-CURSET,X,1
PRINTC RSID
ICALL DO-CURSET,X,REDGE
PRINTC LSID
IGRTR? 'X,11 \?PRG17
SET 'DHEIGHT,MAX-DHEIGHT
ICALL1 TO-BOTTOM-WINDOW
EQUAL? PRIOR,SHOWING-STATS \?CCL23
ICALL1 SHOW-RANK
ICALL1 DISPLAY-STATS
RTRUE
?CCL23: ZERO? BMODE /TRUE
ICALL1 BATTLE-MODE-ON
RTRUE
.FUNCT IBM-BOX,REDGE,X
ICALL1 TO-TOP-WINDOW
FONT F-NEWFONT >X
SUB WIDTH,MWIDTH
SUB STACK,1 >REDGE
CURSET 3,1
PRINTC IBM-TLC
SET 'X,REDGE
?PRG1: PRINTC IBM-HORZ
DLESS? 'X,3 \?PRG1
PRINTC IBM-TRC
ICALL DO-CURSET,12,1
PRINTC IBM-BLC
SET 'X,REDGE
?PRG5: PRINTC IBM-HORZ
DLESS? 'X,3 \?PRG5
PRINTC IBM-BRC
SET 'X,4
?PRG9: ICALL DO-CURSET,X,1
PRINTC IBM-VERT
ICALL DO-CURSET,X,REDGE
PRINTC IBM-VERT
IGRTR? 'X,11 \?PRG9
ICALL1 TO-BOTTOM-WINDOW
RTRUE
.FUNCT 2C-BOX,CNT,X
ICALL1 TO-TOP-WINDOW
FONT F-NEWFONT >X
SUB WIDTH,MWIDTH
SUB STACK,2 >X
SET 'CNT,2
CURSET 12,2
?PRG1: PRINTC APPLE-HORZ
IGRTR? 'CNT,X \?PRG1
SET 'X,1
?PRG5: CURSET X,1
PRINTC APPLE-RIGHT
CURSET X,CNT
PRINTC APPLE-LEFT
IGRTR? 'X,11 \?PRG5
ICALL1 TO-BOTTOM-WINDOW
RTRUE
.FUNCT DISPLAY-PLACE,DIR,LEN,X,DEST,END
GETB ROOMS-MAPPED,0 >LEN
ZERO? LEN /?CND1
ZERO? OLD-HERE /?CND1
INTBL? OLD-HERE,ROOMS-MAPPED+1,LEN,1 >DEST \?CND1
ADD ROOMS-MAPPED,LEN >END
LESS? DEST,END \?CND5
SUB END,DEST
SUB 0,STACK >X
ADD DEST,1
COPYT STACK,DEST,X
?CND5: SUB LEN,1
PUTB ROOMS-MAPPED,0,STACK
?CND1: ICALL1 SETUP-SLINE
ICALL1 SAY-HERE
ICALL1 CENTER-SLINE
ICALL1 SHOW-SLINE
EQUAL? P-WALK-DIR,FALSE-VALUE,P?UP,P?DOWN /?CTR8
EQUAL? P-WALK-DIR,P?IN,P?OUT \?PRG12
?CTR8: ICALL1 NEW-MAP
JUMP ?CND7
?PRG12: GETB PDIR-LIST,DIR
EQUAL? P-WALK-DIR,STACK \?CND14
ADD DIR,4 >X
GRTR? X,I-NW \?CND16
SUB X,8 >X
?CND16: GETB PDIR-LIST,X
GETP HERE,STACK >LEN
ZERO? LEN \?CND18
ICALL1 NEW-MAP
JUMP ?CND7
?CND18: GET LEN,XTYPE
BAND STACK,127 >LEN
INC 'LEN
GET YOFFS,DIR >X
EQUAL? MAP-ROUTINE,CLOSE-MAP \?CND20
ADD X,X >X
?CND20: MUL X,LEN >X
ADD MAPY,X >MAPY
GET XOFFS,DIR >X
EQUAL? MAP-ROUTINE,CLOSE-MAP \?CND22
ADD X,X >X
?CND22: MUL X,LEN >X
ADD MAPX,X >MAPX
LESS? MAPY,1 /?CCL25
GRTR? MAPY,9 /?CCL25
LESS? MAPX,1 /?CCL25
GRTR? MAPX,15 \?CND24
?CCL25: ICALL1 NEW-MAP
JUMP ?CND7
?CND24: ICALL1 DRAW-MAP
JUMP ?CND7
?CND14: IGRTR? 'DIR,I-NW \?PRG12
?CND7: ICALL1 SHOW-MAP
ZERO? DMODE /?CND32
EQUAL? PRIOR,0,SHOWING-ROOM \?CND32
SET 'DBOX-TOP,0
ICALL1 UPDATE-ROOMDESC
?CND32: SET 'OLD-HERE,HERE
RTRUE
.FUNCT REFRESH-MAP,NEW
ASSIGNED? 'NEW /?CND1
SET 'NEW,TRUE-VALUE
?CND1: ZERO? DMODE \?CND3
ICALL1 LOWER-SLINE
RFALSE
?CND3: SET 'SAME-COORDS,NEW
BOR NEW-DBOX,SHOWING-ROOM >NEW-DBOX
ICALL1 NEW-MAP
ICALL1 SHOW-MAP
RFALSE
.FUNCT SHOW-MAP,X
ICALL1 TO-TOP-WINDOW
ZERO? VT220 /?CND1
FONT F-NEWFONT >X
?CND1: SUB WIDTH,MWIDTH
ICALL DO-CURSET,1,STACK
PRINTT MAP,MWIDTH,MHEIGHT
ICALL1 TO-BOTTOM-WINDOW
RFALSE
.FUNCT SHOW-RANK,RIGHT-EDGE,LEN,X
ASSIGNED? 'RIGHT-EDGE /?CND1
SET 'RIGHT-EDGE,DWIDTH
?CND1: ICALL1 SETUP-SLINE
PRINTC SP
ICALL2 PRINT-TABLE,CHARNAME
DIROUT D-TABLE-OFF
GET AUX-TABLE,0 >LEN
ADD AUX-TABLE,2
COPYT STACK,SLINE,LEN
PUT AUX-TABLE,0,0
DIROUT D-TABLE-ON,AUX-TABLE
ICALL1 ANNOUNCE-RANK
PRINTC SP
DIROUT D-TABLE-OFF
GET AUX-TABLE,0 >LEN
SUB RIGHT-EDGE,LEN
ADD SLINE,STACK >X
ADD AUX-TABLE,2
COPYT STACK,X,LEN
ICALL SHOW-SLINE,1,RIGHT-EDGE
RTRUE
.FUNCT ANNOUNCE-RANK,LEVEL,STAT
GET STATS,EXPERIENCE >STAT
PRINTI "Level "
?PRG1: GET THRESHOLDS,LEVEL
LESS? STAT,STACK /?REP2
IGRTR? 'LEVEL,MAX-LEVEL \?PRG1
SET 'LEVEL,0
PUT STATS,EXPERIENCE,0
IGRTR? 'RANK,2 \?REP2
SET 'RANK,2
?REP2: PRINTN LEVEL
PRINTC SP
FSET? PLAYER,FEMALE \?CCL11
PRINTI "Fem"
JUMP ?CND9
?CCL11: PRINTC 77
?CND9: PRINTI "ale "
GET RANK-NAMES,RANK
PRINT STACK
RETURN LEVEL
.FUNCT SETUP-SLINE
PUTB SLINE,0,SP
COPYT SLINE,SLINE+1,-81
PUT AUX-TABLE,0,0
DIROUT D-TABLE-ON,AUX-TABLE
RFALSE
.FUNCT CENTER-SLINE,X,LEN
DIROUT D-TABLE-OFF
GET AUX-TABLE,0 >LEN
SUB DWIDTH,LEN
DIV STACK,2
ADD SLINE,STACK >X
ADD AUX-TABLE,2
COPYT STACK,X,LEN
RFALSE
.FUNCT SHOW-SLINE,Y,RIGHT-EDGE,X
ASSIGNED? 'Y /?CND1
SET 'Y,1
?CND1: ASSIGNED? 'RIGHT-EDGE /?CND3
SET 'RIGHT-EDGE,DWIDTH
?CND3: ICALL1 TO-TOP-WINDOW
ICALL DO-CURSET,Y,1
EQUAL? RIGHT-EDGE,WIDTH /?CND5
ZERO? VT220 /?CCL8
FONT F-NEWFONT >X
PRINTC 58
FONT F-DEFAULT >X
JUMP ?CND5
?CCL8: EQUAL? HOST,APPLE-2C \?CCL10
FONT F-NEWFONT >X
PRINTC APPLE-RIGHT
FONT F-DEFAULT >X
JUMP ?CND5
?CCL10: PRINTC SP
?CND5: HLIGHT H-INVERSE
PRINTT SLINE,RIGHT-EDGE
HLIGHT H-NORMAL
HLIGHT H-MONO
EQUAL? RIGHT-EDGE,WIDTH /?CND11
ZERO? VT220 /?CCL14
FONT F-NEWFONT >X
PRINTC 57
FONT F-DEFAULT >X
JUMP ?CND11
?CCL14: EQUAL? HOST,APPLE-2C \?CCL16
FONT F-NEWFONT >X
PRINTC APPLE-LEFT
FONT F-DEFAULT >X
JUMP ?CND11
?CCL16: PRINTC SP
?CND11: ICALL1 TO-BOTTOM-WINDOW
RFALSE
.FUNCT SAY-HERE,X
EQUAL? HERE,DEATH /?CND1
ZERO? LIT? \?CND1
PRINTI "Darkness"
RTRUE
?CND1: ICALL2 DPRINT,HERE
LOC PLAYER >X
FSET? X,VEHICLE \TRUE
PRINTC COMMA
EQUAL? X,SADDLE \?CND6
IN? SADDLE,DACT \?CND6
PRINT SON
ICALL2 PRINTA,DACT
RTRUE
?CND6: ICALL2 ON-IN,X
RTRUE
.FUNCT PRINT-SPACES,N
?PRG1: DLESS? 'N,0 /TRUE
PRINTC SP
JUMP ?PRG1
.FUNCT NEW-MAP,TBL,X
ZERO? SAME-COORDS /?CCL3
SET 'SAME-COORDS,FALSE-VALUE
JUMP ?CND1
?CCL3: SET 'MAPX,CENTERX
SET 'MAPY,CENTERY
GETPT HERE,P?COORDS >TBL
ZERO? TBL /?CND1
GETB TBL,0 >X
ZERO? X /?CND6
SET 'MAPX,X
?CND6: GETB TBL,1 >X
ZERO? X /?CND1
SET 'MAPY,X
?CND1: ICALL1 DRAW-MAP
RTRUE
.FUNCT DRAW-MAP
COPYT ROOMS-MAPPED,0,ROOMS-MAPPED-LENGTH
PUTB MAP,0,SP
COPYT MAP,MAP+1,-186
ICALL MAP-ROUTINE,HERE,MAPY,MAPX
RFALSE
.FUNCT CLOSE-MAP,RM,Y,X,DIR,TBL,CHAR,TYPE,LEN,DEST,NY,NX,YOFF,XOFF,CTBL
GETB ROOMS-MAPPED,0 >LEN
ZERO? LEN /?CCL2
INTBL? RM,ROOMS-MAPPED+1,LEN,1 >CHAR /?CND1
?CCL2: IGRTR? 'LEN,45 /TRUE
PUTB ROOMS-MAPPED,LEN,RM
PUTB ROOMS-MAPPED,0,LEN
?CND1: GRTR? Y,-1 \?CND7
LESS? Y,MHEIGHT \?CND7
GRTR? X,-1 \?CND7
LESS? X,MWIDTH \?CND7
ZERO? VT220 /?CCL15
CALL2 SMART-CHAR?,RM >CHAR
JUMP ?CND13
?CCL15: CALL2 DUMB-CHAR?,RM >CHAR
?CND13: MUL Y,MWIDTH
ADD MAP,STACK
PUTB STACK,X,CHAR
?CND7: FSET RM,MAPPED
SET 'DIR,-1
?PRG16: IGRTR? 'DIR,I-NW \?CND18
FCLEAR RM,MAPPED
RTRUE
?CND18: SET 'LEN,0
SET 'DEST,FALSE-VALUE
SET 'TYPE,FALSE-VALUE
SET 'CTBL,XCHARS
GETB PDIR-LIST,DIR
GETP RM,STACK >TBL
ZERO? TBL /?CND20
GET TBL,XTYPE >TYPE
BAND TYPE,255 >LEN
BAND TYPE,65280 >TYPE
?CND20: ZERO? TBL /?CTR23
EQUAL? TYPE,NO-EXIT,SORRY-EXIT /?CTR23
BTST LEN,MARKBIT /?CCL24
?CTR23: SET 'CTBL,NXCHARS
JUMP ?CND22
?CCL24: EQUAL? TYPE,FCONNECT \?CCL29
SET 'DEST,-1
BAND LEN,127 >LEN
ZERO? LEN \?CND22
SET 'CTBL,NXCHARS
JUMP ?CND22
?CCL29: GET TBL,XROOM >DEST
ZERO? DEST /FALSE
IN? DEST,ROOMS \FALSE
EQUAL? TYPE,SHADOW-EXIT /?CCL37
EQUAL? TYPE,DCONNECT \?CND22
GET TBL,XDATA
FSET? STACK,OPENED /?CND22
?CCL37: SET 'CTBL,NXCHARS
?CND22: BAND LEN,127 >LEN
GET YOFFS,DIR >YOFF
GET XOFFS,DIR >XOFF
ADD Y,YOFF >NY
ADD X,XOFF >NX
LESS? NY,0 /?PRG16
GRTR? NY,10 /?PRG16
LESS? NX,0 /?PRG16
GRTR? NX,16 /?PRG16
GETB CTBL,DIR >CHAR
ZERO? VT220 \?CCL50
GETB SHITCHARS,DIR >CHAR
EQUAL? CTBL,NXCHARS \?CND48
SET 'CHAR,SP
JUMP ?CND48
?CCL50: EQUAL? HERE,RM \?CND48
ADD CHAR,17 >CHAR
?CND48: MUL NY,MWIDTH
ADD MAP,STACK
PUTB STACK,NX,CHAR
ZERO? TBL /?PRG16
ZERO? TYPE /?PRG16
ZERO? DEST /?PRG16
LESS? Y,0 /?PRG16
GRTR? Y,10 /?PRG16
LESS? X,0 /?PRG16
GRTR? X,16 /?PRG16
BAND LEN,254
ADD LEN,STACK >LEN
GETB MCHARS,DIR >CHAR
EQUAL? TYPE,X-EXIT \?CCL65
BTST DIR,1 \?CCL68
SET 'CHAR,XCROSS
ZERO? VT220 \?PRG78
SET 'CHAR,88
JUMP ?PRG78
?CCL68: SET 'CHAR,HVCROSS
ZERO? VT220 \?PRG78
SET 'CHAR,43
JUMP ?PRG78
?CCL65: EQUAL? CTBL,NXCHARS \?CCL74
SET 'CHAR,SOLID
ZERO? VT220 \?PRG78
SET 'CHAR,SP
JUMP ?PRG78
?CCL74: ZERO? VT220 \?PRG78
GETB SHITCHARS,DIR >CHAR
?PRG78: ADD NY,YOFF >NY
ADD NX,XOFF >NX
LESS? NY,0 /?REP79
GRTR? NY,10 /?REP79
LESS? NX,0 /?REP79
GRTR? NX,16 /?REP79
MUL NY,MWIDTH
ADD MAP,STACK
PUTB STACK,NX,CHAR
DLESS? 'LEN,1 \?PRG78
?REP79: EQUAL? DEST,-1 /?PRG16
FSET? DEST,MAPPED /?PRG16
GETB ROOMS-MAPPED,0
INTBL? DEST,ROOMS-MAPPED+1,STACK,1 >CHAR /?PRG16
FSET? DEST,VIEWED \?PRG16
ADD YOFF,YOFF
ADD NY,STACK >NY
ADD XOFF,XOFF
ADD NX,STACK >NX
LESS? NY,-1 /?PRG16
GRTR? NY,MHEIGHT /?PRG16
LESS? NX,-1 /?PRG16
GRTR? NX,MWIDTH /?PRG16
ICALL CLOSE-MAP,DEST,NY,NX
JUMP ?PRG16
.FUNCT DUMB-CHAR?,RM,CHAR
SET 'CHAR,42
EQUAL? HERE,RM \?CCL3
SET 'CHAR,64
RETURN CHAR
?CCL3: CALL2 IS-LIT?,RM
ZERO? STACK \?CND1
SET 'CHAR,63
?CND1: RETURN CHAR
.FUNCT SMART-CHAR?,RM,CHAR,TBL
SET 'CHAR,SOLID
EQUAL? HERE,RM \?CND1
SET 'CHAR,ISOLID
?CND1: CALL2 IS-LIT?,RM
ZERO? STACK \?CND3
SET 'CHAR,QMARK
EQUAL? HERE,RM \?CND3
SET 'CHAR,IQMARK
?CND3: GETP RM,P?UP >TBL
ZERO? TBL /?CND7
CALL CHECK-EXIT?,RM,TBL
ZERO? STACK /?CND7
SET 'CHAR,UARROW
EQUAL? HERE,RM \?CND7
SET 'CHAR,IUARROW
?CND7: GETP RM,P?DOWN >TBL
ZERO? TBL /?CND13
CALL CHECK-EXIT?,RM,TBL
ZERO? STACK /?CND13
EQUAL? CHAR,UARROW \?CCL19
RETURN UDARROW
?CCL19: EQUAL? CHAR,IUARROW \?CCL21
RETURN IUDARROW
?CCL21: EQUAL? HERE,RM /?CCL22
RETURN DARROW
?CCL22: RETURN IDARROW
?CND13: RETURN CHAR
.FUNCT CHECK-EXIT?,RM,TBL,EXIT-WORD,ROOM,XDIR,XTBL,TYPE,LEN
GET TBL,XTYPE >EXIT-WORD
GET TBL,XROOM >ROOM
SET 'XDIR,P?NW
?PRG1: GETP RM,XDIR >XTBL
ZERO? TBL /?CND3
GET XTBL,XTYPE
EQUAL? STACK,EXIT-WORD \?CND3
GET XTBL,XROOM
EQUAL? STACK,ROOM /FALSE
?CND3: IGRTR? 'XDIR,P?NORTH \?PRG1
BAND EXIT-WORD,65280 >TYPE
BAND EXIT-WORD,127 >LEN
EQUAL? TYPE,NO-EXIT,SORRY-EXIT /FALSE
BTST EXIT-WORD,MARKBIT \FALSE
EQUAL? TYPE,CONNECT,SCONNECT,X-EXIT /TRUE
EQUAL? TYPE,DCONNECT \?CCL18