-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathWSGRND.MAC
1316 lines (1267 loc) · 28.5 KB
/
WSGRND.MAC
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
.TITLE WSGRND --- GROUND OBJECT STUFF
.INCLUDE WSCOMN ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;---
GD$TYP ==0
GD$IZ ==1
GD$EQ ==32.
;---
;---
M$AX ==-10+0
M$AY ==-10+0+2
M$AZ ==-10+0+0+4
M$BX ==-10+0+8
M$BY ==-10+0+8+2
M$BZ ==-10+0+8+4
M$CX ==-10+0+10
M$CY ==-10+0+10+2
M$CZ ==-10+0+10+4
M$TX ==-10+18+0
M$TY ==-10+18+2
M$TZ ==-10+18+4
M$VX ==-10+6
M$VY ==-10+6+8
M$VZ ==-10+6+10
;===
; EXTERNALS
;ROUTINES
.GLOBL AUDCR,AUDPF,AUDSX
.GLOBL BG1GLW
.GLOBL BJGROT,BJGPNT,BJGDRW,BJGCLP
.GLOBL MGOWT
.GLOBL TRANU1
.GLOBL BGBKXP,BGTWXP
;VARIABLES
.GLOBL M$GDBC
.GLOBL GD$MDT
.GLOBL GDRAM,GDRAMZ
.GLOBL GD.TWL
.GLOBL GD.WAV
.GLOBL FRBFGN,FRBLGN,FRBRGN
.GLOBL FRWFGN,FRWLGN,FRWRGN
.GLOBL M.U1,M.S1,M.XT,M.YT,M.ZT
.GLOBL M.GD,M.BIC
.GLOBL M.XP,M.YP,M.ZP
.GLOBL M.X0,M$X0BC
.GLOBL M.DVD,M.QUO
.GLOBL P.RND1
.GLOBL SCRBNK,SCRTWR
.GLOBL SP.COL,SP.LOC,SP.TYP
.GLOBL TSCTWR
.GLOBL TWRMUL
.GLOBB BJ.ID
.GLOBB CL.BDS,CL.BP,CL.TDS,CL.TP
.GLOBB GD.SEQ
.GLOBB LZ.CX,LZ.CY,LZ.HIT,LZ.ON
.GLOBL M.GDCT,M.GDCB,M.GDSC
.GLOBB M$PERS,M$PSUB,M$PSB2
.GLOBB S.GAS,S.ROL
.GLOBB S2.PRM
.GLOBB TD$GND,TD$TWR,TD$BNK,TD$STB
.GLOBL VGCOFF,VGCGRN,VGCRED,VGCYLW,VGCWHT,VGCOPC
.GLOBL VJFLS
.GLOBL Q.KTW
.MACRO .PAGG
.PAGEG N ;GROUND
.ENDM
.CSECT TTWRS
TTWRS: ;TABLE OF NUMBER OF TOWERS IN GROUND MAZE
.CSECT GRND
.PAGG
.SBTTL GROUND OBJECT STUFF
TYP$LV =1 ;ALIVE
TYP$VW =2 ;SETUP TO VIEW THIS BUILDING
TYP$DM =4 ;DAMAGED -- NO GUNS
TYP$AM =8 ;AIM SAYS TO SHOOT SOON
TYP$BK =10 ;BUNKER (OR HAT ON TOWERS) IS VISIBLE
TGD$X =0 ;X LOC
TGD$Y =2 ;Y LOC
TGD$PC =4 ;PICTURE TYPE
TGD$SQ =5 ;SEQUENCE TO TURN ON
TGD$RM =6 ;RAM OFFSET
TGD$IZ =7 ;FINAL SIZE OF TABLE ENTRY
TGD$EQ =32. ;MAX NUMBER OF GROUND OBJECTS PER MAZE
PC$TWR =1 ;TOWER PICTURE
PC$BSH =2 ;BISHOP PICTURE TYPE
PC$BNK =3 ;BUNKER
.MAZENUM=0000
.MACRO MAZESTART
.RMPTR =0 ;CURRENT POINTER INTO RAM TABLE
.TWRS =0 ;RESET # OF TOWERS
.ENDM
.PAGE
.SBTTL TOWER MAZE MACROS
.MACRO MAZEND NAME
Z'NAME':
Y'NAME' =.TWRS
.ENDM
.MACRO TOWER .A,.B,.C ;SHOOTS DIAG AND FORWARDS
.WORD .B,.A
.BYTE 1 ;TOWER
.BYTE .C ;AWAKENING SEQUENCE NUMBER
.BYTE .RMPTR ;RAM OFFSET
.RMPTR=.RMPTR+GD$IZ
.TWRS =.TWRS+1 ;ONE MORE TOWER
.IIF GT,.TWRS&0F-9,.TWRS=.TWRS+6 ;KEEP IT IN BCD
.IIF GT,.RMPTR/GD$IZ-TGD$EQ, .ERROR ;TOO MANY ENTRIES
.ENDM
.MACRO BISHOP .A,.B,.C ;SHOOTS DIAG ONLY
.WORD .B,.A
.BYTE 2 ;BISHOP
.BYTE .C ;AWAKENING SEQUENCE NUMBER
.BYTE .RMPTR ;RAM OFFSET
.RMPTR=.RMPTR+GD$IZ
.TWRS =.TWRS+1 ;ONE MORE TOWER
.IIF GT,.TWRS&0F-9,.TWRS=.TWRS+6 ;KEEP IT IN BCD
.IIF GT,.RMPTR/GD$IZ-TGD$EQ, .ERROR ;TOO MANY ENTRIES
.ENDM
.MACRO BUNKER .A,.B,.C ;SHORTY
.WORD .B,.A
.BYTE 3 ;BUNKER
.BYTE .C ;AWAKENING SEQUENCE NUMBER
.BYTE .RMPTR ;RAM OFFSET
.RMPTR=.RMPTR+GD$IZ
.IIF GT,.RMPTR/GD$IZ-TGD$EQ, .ERROR ;TOO MANY ENTRIES
.ENDM
.PAGE
.SBTTL TOWER MAZES
T3DIFF: ;24 TOWERS, 9-0, 9-1, 8-2, 6-3 WAVE 16
TDIFF: ;20 TOWERS, 7-0, 9-1, 7-2, 5-3 WAVE 07
MAZESTART
;TOP VIEW, X +RIGHT, -LEFT
; Y FORWARD
BUNKER -5000,1000 1 ;A
BUNKER -2000,1000 1
BUNKER 2000,1000 1
BUNKER 5000,1000 1
TOWER -6000,1800 3 ;B
TOWER 6000,1800 2
TOWER -4800,2000 2 ;C
TOWER 4800,2000 2
BUNKER -4000,3000 2 ;D
TOWER 0,3000 0
BUNKER 4000,3000 2
TOWER -6800,3800 3 ;E
TOWER -1000,3800 0
TOWER 1000,3800 0
TOWER 6800,3800 3
BUNKER -7000,4000 3 ;F
BUNKER 7000,4000 3
TOWER -7000,5000 1 ;G
BISHOP 0,5000 1
TOWER 7000,5000 1
TOWER -1C00,5400 1 ;H
TOWER 1C00,5400 1
TOWER -4000,5800 0 ;I
TOWER 4000,5800 0
TOWER -2800,6800 0 ;J
TOWER 2800,6800 0
BISHOP -1000,7000 2 ;K
BISHOP 1000,7000 2
MAZEND DIFF
;---
TOWER -7000,8000 3 ;L
TOWER -2800,8000 0
TOWER 2800,8000 0
TOWER 7000,8000 2
MAZEND 3DIFF
;===
T3CLUSTR: ;20 TOWERS, 8-0, 6-1, 9-2, 9-3 WAVE 13
TCLUSTR: ;16 TOWERS, 8-0, 6-1, 7-2, 7-3 WAVE 04
;CLUSTER'S LAST STAND
MAZESTART
;A
TOWER -7800,3000 2
BUNKER -6800,3000 2
BUNKER -5800,3000 2
TOWER -4800,3000 2
TOWER -1800,3000 0
BUNKER -0800,3000 0
BUNKER 0800,3000 0
TOWER 1800,3000 0
TOWER 4800,3000 3
BUNKER 5800,3000 3
BUNKER 6800,3000 3
TOWER 7800,3000 3
;B
TOWER -7000,4000 2
BUNKER -6000,4000 2
TOWER -5000,4000 2
TOWER -1000,4000 0
TOWER 1000,4000 0
TOWER 5000,4000 3
BUNKER 6000,4000 3
TOWER 7000,4000 3
;C
BUNKER -3400,5400 1
BUNKER 3400,5400 1
;D
TOWER -6000,6000 1
BUNKER -2000,6000 0
BUNKER 2000,6000 0
TOWER 6000,6000 1
;E
TOWER -2000,7400 1
TOWER 2000,7400 1
MAZEND CLUSTR
;---
TOWER -6800,8000 2 ;F
TOWER -4800,8000 2
TOWER 4800,8000 3
TOWER 6800,8000 3
MAZEND 3CLUSTR
;===
TBUNK: ;0 TOWERS, 7-0, 7-1, 7-2, 7-3 WAVE 2 ONLY
;BUNKER WAVE
MAZESTART
BUNKER 3000,0400 1 ;A
BUNKER 2000,0C00 0 ;B
BUNKER -6800,1000 1 ;C
BUNKER 4800,1400 1 ;D
BUNKER -5000,1800 3 ;E
BUNKER -3000,1800 0
BUNKER -4000,2000 1 ;F
BUNKER 3800,2400 2 ;G
BUNKER 7000,2400 2
BUNKER 0000,2800 0 ;H
BUNKER -7800,3000 1 ;I
BUNKER 8000,4000 1 ;J
BUNKER 6000,4400 2 ;K
BUNKER -7000,4800 1 ;L
BUNKER -5800,4800 3
BUNKER 5000,4C00 2 ;M
BUNKER -2000,5000 3 ;N
BUNKER 0000,5000 2
BUNKER 2800,5000 0
BUNKER -4800,6800 3 ;O
BUNKER -2800,6800 0
BUNKER -6000,7000 3 ;P
BUNKER -1800,7000 0
BUNKER 1800,7000 3
BUNKER 5800,7000 3
BUNKER -0800,7800 0 ;Q
BUNKER 4000,7800 2
BUNKER 6800,7800 2
MAZEND BUNK
;===
T3TWRCTY: ;32 TOWERS, 8-0, 8-1, 9-2, 7-3 WAVE 20
TTWRCTY: ;28 TOWERS, 8-0, 8-1, 7-2, 5-3 WAVE 11
;TOWER CITY
MAZESTART
;A
TOWER -7000,0000 0
TOWER -5000,0000 0
TOWER -3000,0000 0
TOWER -1000,0000 0
TOWER 1000,0000 0
TOWER 3000,0000 0
TOWER 5000,0000 0
TOWER 7000,0000 0
;B
TOWER -3800,1000 2
;C
TOWER -4000,2800 2
;D
TOWER -7800,3000 2
TOWER -5800,3000 2
TOWER 4800,3000 2
TOWER 6800,3000 2
;E
TOWER -6000,4000 3
TOWER 4000,4000 2
TOWER 6000,4000 3
TOWER 8000,4000 3
;F
TOWER 0000,6000 3
;G
TOWER -7C00,6800 3
;H
TOWER -6800,7000 1
TOWER -4800,7000 1
TOWER -2800,7000 1
TOWER -0800,7000 1
TOWER 1800,7000 1
TOWER 3800,7000 1
TOWER 5800,7000 1
TOWER 7800,7000 1
MAZEND TWRCTY
;---
TOWER -1800,3000 2 ;D
TOWER 800,3000 2
TOWER -800,4000 3 ;E
TOWER 1800,4000 3
MAZEND 3TWRCTY
;===
T3SYMTRC: ;25 TOWERS, 11-0, 7-1, 7-2, 7-3 WAVE 18
TSYMTRC: ;21 TOWERS, 9-0, 5-1, 7-2, 7-3 WAVE 09
;SYMMETRIC
MAZESTART
;A
BUNKER -5800,0800 2
BUNKER 5800,0800 2
;B
TOWER -1800,0C00 0
TOWER 1800,0C00 0
;C
TOWER -3C00,1400 0
TOWER 3C00,1400 0
;D
TOWER -5800,2800 2
TOWER 5800,2800 2
;E
BUNKER 0000,3000 0
;F
TOWER -2000,3800 0
TOWER 2000,3800 0
;G
TOWER -4000,4800 3
TOWER 4000,4800 3
;H
TOWER -7000,5000 3
BUNKER -2800,5000 1
BUNKER 2800,5000 1
TOWER 7000,5000 2
;I
BUNKER -1000,5800 2
BUNKER 1000,5800 2
;J
TOWER -4800,6800 0
TOWER 4800,6800 0
;K
TOWER -7800,7000 3
TOWER -6000,7000 1
TOWER -3000,7000 3
TOWER 0000,7000 1
TOWER 3000,7000 3
TOWER 6000,7000 1
TOWER 7800,7000 3
MAZEND SYMTRC
;---
TOWER -5000,8000 0 ;L
TOWER -1800,8000 1
TOWER 1800,8000 1
TOWER 5000,8000 0
MAZEND 3SYMTRC
;===
T3TRAP: ;25 TOWERS, 11-0, 8-1, 7-2, 6-3 WAVE 17
TTRAP: ;21 TOWERS, 11-0, 8-1, 7-2, 2-3 WAVE 08
;TRAP
MAZESTART
;A
TOWER -6800,6000 2
TOWER 6800,1000 2
;B
BUNKER -3000,2000 1
;C
BUNKER -7000,3000 2
TOWER -2000,3000 0
TOWER 2000,3000 0
BUNKER 7000,3000 2
;D
TOWER -4800,3800 1
TOWER 4800,3800 1
;E
TOWER -7000,4000 3
BUNKER -1800,4000 0
BUNKER 1800,4000 0
TOWER 4800,4000 1
;F
BUNKER -2000,5000 0
TOWER -1000,5000 0
TOWER 1000,5000 0
BUNKER 2000,5000 0
;G
TOWER -7800,6000 3
TOWER -6000,6000 2
TOWER -4000,6000 1
TOWER -3000,6000 1
TOWER -0800,6000 0
TOWER 0800,6000 0
TOWER 3000,6000 1
TOWER 4000,6000 1
TOWER 6000,6000 2
TOWER 8000,6000 2
;H
TOWER 0000,7000 0
MAZEND TRAP
;---
TOWER -5800,8000 3 ;I
TOWER -2000,8000 3
TOWER 2000,8000 3
TOWER 5800,8000 3
MAZEND 3TRAP
;===
T3WEDGE: ;24 TOWERS, 8-0, 8-1, 8-2, 8-3 WAVE 15
TWEDGE: ;20 TOWERS, 8-0, 8-1, 4-2, 8-3 WAVE 06
;WEDGE
MAZESTART
;A
TOWER -4800,0000 2
TOWER 4800,0000 2
;B
TOWER -6000,1000 3
TOWER -2000,1000 1
TOWER -0800,1000 0
TOWER 0800,1000 0
TOWER 2000,1000 1
;C
TOWER -3800,2000 1
TOWER 3800,2000 1
;D
TOWER -1C00,2C00 0
TOWER 1C00,2C00 0
;E
TOWER -7000,3000 3
;F
BUNKER 0000,4000 1
;G
TOWER 0000,5000 1
BUNKER 8000,5000 3
;H
BUNKER -1800,6000 1
BUNKER 1800,6000 1
TOWER 8000,6000 3
;I
BUNKER -7800,7000 2
TOWER -6000,7000 0
TOWER -5000,7000 0
TOWER -1000,7000 3
TOWER 1000,7000 3
TOWER 5000,7000 0
TOWER 6000,7000 0
BUNKER 7800,7000 2
;J
BUNKER -2000,7800 3
BUNKER 2000,7800 3
MAZEND WEDGE
;---
TOWER -5000,4000 2 ;F
TOWER -4000,4000 2
TOWER 3000,4000 2
TOWER 4000,4000 2
MAZEND 3WEDGE
;===
T3SQUARE: ;20 TOWERS, 8-0, 12-1, 6-2, 6-3 WAVE 12
TSQUARE: ;16 TOWERS, 8-0, 12-1, 6-2, 2-3 WAVE 03
;SQUARE
MAZESTART
;A
BUNKER -8000,2000 2
BUNKER -6000,2000 1
BUNKER -5000,2000 1
BUNKER 5000,2000 1
BUNKER 6000,2000 1
;B
TOWER -8000,3000 2
TOWER -6000,3000 1
TOWER -5000,3000 1
BUNKER -3000,3000 1
BUNKER -2000,3000 0
BUNKER 0000,3000 0
BUNKER 2000,3000 0
BUNKER 3000,3000 1
TOWER 5000,3000 1
TOWER 6000,3000 1
;C
TOWER -3000,4000 2
TOWER -2000,4000 0
TOWER 0000,4000 0
TOWER 2000,4000 0
TOWER 3000,4000 2
;D
BUNKER 5800,4800 2
;E
BUNKER 7000,5400 2
;F
TOWER -7000,6000 3
TOWER 7000,6000 3
;G
TOWER -1000,6800 0
TOWER 1000,6800 0
;H
TOWER -4000,7000 1
TOWER 4000,7000 1
MAZEND SQUARE
;---
TOWER -6000,8000 3 ;I
TOWER -2000,8000 3
TOWER 2000,8000 3
TOWER 6000,8000 3
MAZEND 3SQUARE
;===
T3VALLEY: ;31 TOWERS, 10-0, 7-1, 7-2, 8-3 WAVE 19
TVALLEY: ;27 TOWERS, 10-0, 7-1, 5-2, 6-3 WAVE 10
;VALLEY
MAZESTART
;A
TOWER 0000,0000 1
;B
TOWER -8000,1800 3
;C
TOWER -2800,2000 1
TOWER 2800,2000 1
;D
TOWER -7000,3000 2
BUNKER 6000,3000 2
TOWER 7000,3000 2
;E
TOWER -5000,3800 3
TOWER -2000,3800 0
TOWER 2000,3800 0
TOWER 5000,3800 3
;F
TOWER -1800,4800 0
TOWER 1800,4800 0
;G
TOWER -7800,5000 2
TOWER -6000,5000 3
TOWER -4000,5000 1
TOWER 4000,5000 1
TOWER 6000,5000 3
TOWER 7800,5000 2
;H
TOWER -1C00,5C00 0
TOWER 1C00,5C00 0
;I
TOWER -1000,6000 0
TOWER 1000,6000 0
TOWER 7C00,6000 3
;J
TOWER -3800,7000 1
TOWER -0800,7000 0
TOWER 0800,7000 0
TOWER 3800,7000 1
MAZEND VALLEY
;---
TOWER -6000,0000 3 ;A
TOWER -4000,0000 2
TOWER 4000,0000 2
TOWER 6000,0000 3
MAZEND 3VALLEY
;===
T3TURNON: ;24 TOWERS, 12-0, 11-1, 9-2, 0-3 WAVE 14
TTURNON: ;20 TOWERS, 12-0, 11-1, 5-2, 0-3 WAVE 05
;QUICK TURNON
MAZESTART
;A
TOWER -2000,1000 1
TOWER 2000,1000 1
;B
BUNKER -4000,2000 1
BUNKER 4000,2000 1
;C
TOWER -2000,2800 0
TOWER 2000,2800 0
;D
BUNKER -7000,3000 2
BUNKER -6000,3000 2
BUNKER 6000,3000 2
;E
TOWER -5000,3800 1
TOWER 5000,3800 1
;F
BUNKER -3000,4000 0
BUNKER 0000,4000 0
BUNKER 3000,4000 0
TOWER 8000,4000 1
;G
TOWER -7800,5000 2
TOWER 0000,5000 0
TOWER 7800,5000 2
;H
TOWER -4000,6000 0
TOWER 4000,6000 0
;I
TOWER -3000,6800 0
TOWER 3000,6800 0
;J
TOWER -7000,7000 1
TOWER -6000,7000 1
TOWER -1000,7000 0
TOWER 1000,7000 0
TOWER 6000,7000 1
TOWER 7000,7000 1
MAZEND TURNON
;---
TOWER -4800,1000 2 ;A
TOWER 5800,1000 2
TOWER -6800,2000 2 ;B
TOWER 7000,2000 2
MAZEND 3TURNON
;===
.MACRO TMAP .A
.CSECT TTWRS
.BYTE Y'.A'
.CSECT GRND
.WORD T'.A
.IF GT,<Z'.A-T'.A>/TGD$IZ-TGD$EQ
.ERROR ;TOO MANY GROUND OBJECTS IN THIS MAZE
.WORD T'.A+<TGD$IZ*TGD$EQ> ;LIMIT OVER-RANGE TO THE MAX
.IFF
.WORD Z'.A
.ENDC
.ENDM
MAP$IZ =4
TGDPTR:
;WAVE 1 HAS NO GROUND PHASE
TMAP BUNK ;00 TOWERS, 7-0, 7-1, 7-2, 7-3 WAVE 02
TMAP SQUARE ;16 TOWERS, 8-0, 12-1, 6-2, 2-3 WAVE 03
TMAP CLUSTR ;16 TOWERS, 8-0, 6-1, 7-2, 7-3 WAVE 04
TMAP TURNON ;20 TOWERS, 12-0, 11-1, 5-2, 0-3 WAVE 05
TMAP WEDGE ;20 TOWERS, 8-0, 8-1, 4-2, 8-3 WAVE 06
TMAP DIFF ;20 TOWERS, 7-0, 9-1, 7-2, 5-3 WAVE 07
TMAP TRAP ;21 TOWERS, 11-0, 8-1, 7-2, 2-3 WAVE 08
TMAP SYMTRC ;21 TOWERS, 9-0, 5-1, 7-2, 7-3 WAVE 09
TMAP VALLEY ;27 TOWERS, 10-0, 7-1, 5-2, 6-3 WAVE 10
TMAP TWRCTY ;28 TOWERS, 8-0, 8-1, 7-2, 5-3 WAVE 11
TMAP 3SQUARE ;20 TOWERS, 8-0, 12-1, 6-2, 6-3 WAVE 12
TMAP 3CLUSTR ;20 TOWERS, 8-0, 6-1, 9-2, 9-3 WAVE 13
TMAP 3TURNON ;24 TOWERS, 12-0, 11-1, 9-2, 0-3 WAVE 14
MAP$RPT =.-TGDPTR/MAP$IZ ;REPEAT POINT FOR WRAP AROUND
TMAP 3WEDGE ;24 TOWERS, 8-0, 8-1, 8-2, 8-3 WAVE 15
TMAP 3DIFF ;24 TOWERS, 9-0, 9-1, 8-2, 6-3 WAVE 16
TMAP 3TRAP ;25 TOWERS, 11-0, 8-1, 7-2, 6-3 WAVE 17
TMAP 3SYMTRC ;25 TOWERS, 11-0, 7-1, 7-2, 7-3 WAVE 18
TMAP 3VALLEY ;31 TOWERS, 10-0, 7-1, 7-2, 8-3 WAVE 19
TMAP 3TWRCTY ;32 TOWERS, 8-0, 8-1, 9-2, 7-3 WAVE 20
ZGDPTR: ; >= WAVE 21: CHOOSE RANDOMLY(?) FROM ABOVE 6 MAPS
MAP$EQ =ZGDPTR-TGDPTR/MAP$IZ ;TOTAL # OF MAPS
.CSECT TTWRS
TTWRSZ:
.CSECT GRND
;===
.PAGG
.SBTTL GROUND ROUTINES
IGRND:: ;INIT FOR SEEING GROUND
LDU #GDRAM
BEGIN
LDA #0
STA GD$TYP(U) ;CLEAR OUT TYP -- NOT YET IN SEQUENCE
LEAU GD$IZ(U)
CMPU #GDRAMZ
HSEND
;---
LDA GD.WAV ;LIMIT WAVE #
CMPA #MAP$EQ
IFHS ;?REQUESTED WAVE TOO HI?
LDB #MAP$EQ-MAP$RPT ;# OF REPEAT MAPS TO CHOOSE FROM
LDA P.RND1
MUL
ADDA #MAP$RPT ;ADDED TO BASE REPEAT MAP
STA GD.WAV ;GIVES RANDOM SELECTION FROM TOP MAPS
ENDIF
;---
LDB GD.WAV ;SETUP NUMBER OF TOWERS FOR THIS WAVE
LDX #TTWRS
ABX
CMPX #TTWRSZ
IFHS ;PAST END OF TABLE
LDX #TTWRSZ-1
ENDIF
LDA 0(X)
STA GD.TWL ;# OF TOWERS LEFT, BCD
;---
LDD TSCTWR ;SETUP PROGRESSIVE SCORE TO FIRST VALUE
STD TWRMUL ;PROGRESSIVE SCORE FOR TOWER, BCD
LDA TSCTWR+2 ;
STA TWRMUL+2
;---
LDA #0
STA GD.SEQ ;SEQUENCE TO START WITH
;---
RTS
;===
VWGRND::
LDB #TD$GND ;THE GROUND SHAPE
STB BJ.ID ;INTO OBJECT INDENTIFIER
JSR BJGROT ;ROTATE THE GROUND OBJECT POINTS AND SAVE STARTING AT M.GD
;---
LDD #0
STD M$TX+M.U1 ;SET S1 CENTER TO 0,0,0
STD M$TY+M.U1
STD M$TZ+M.U1
;---
JSR GRLZIN ;INIT LAZAR COLLISION PARMS
;---
LDD M$TX+M.S1 ;RESTORE PLAYER'S POSITION
STD M$TX+M.U1
LDD M$TY+M.S1
STD M$TY+M.U1
LDD M$TZ+M.S1
STD M$TZ+M.U1
;---
LDB GD.WAV ;WAVE NUMBER FOR GROUND SEQUENCE
LSLB ;*4 TO INDEX INTO TABLE
LSLB
LDX #TGDPTR ;TABLE OF POINTERS TO GROUND MAZES
ABX ;POINTS INTO TABLE
CMPX #ZGDPTR
IFHS ;PAST THE TABLE'S END
LDX #ZGDPTR-4 ;USE LAST ENTRY IF OUT OF RANGE
ENDIF
LDX 0(X) ;START OF MAZE
BEGIN ;DO EACH OBJECT
STX S2.PRM
LDA GD.SEQ ;CURRENT SEQUENCE NUMBER
CMPA TGD$SQ(X)
LBLT 90$ ;?ALLOWED IN THIS SEQUENCE?
LDD TGD$X(X)
STD M.GD ;MAP IS IN TOP VIEW, X LEFT/RIGHT(MBOX Y)
LDD TGD$Y(X)
STD M.GD+2
LDD #GD$MDT*2 ;AROUND CENTER OF TOWER(PSUB2 DOES DIV OF 2)
STD M.GD+4
LDD #M$GDBC ;SETUP BIC FOR MATH BOX
STD M.BIC
LDA #M$PSB2 ;OBJECT WITHIN RANGE?
JSR MGOWT
LDD M.XP
;*** IF X SIGN CHANGES, RESTART NEW BUILDING
IFMI ;?FLIP X OVER FOR TIGHTER PACKING?
ANDA #3F ;FLIP IT BACK IN FRONT(PSB2 DIVIDES BY 2)
STD M.XP
ENDIF
STD 4+M.X0 ;SAVE NEW DISTANCE FOR COLLISION
CMPD #100
IFGE ;NOT TOO CLOSE
CMPD #3C00
IFLO ;NOT TOO FAR ==> WITIN RANGE
;CHECK FOR 45 DEGREES
LDD M.YP ;YP
IFMI
NEGD
ENDIF
SUBD M.XP
IFLO ;?OBJECT NOW DEFINATELY VISIBLE?
LDU #GDRAM
LDB TGD$RM(X)
LEAU B(U)
LDA GD$TYP(U)
BITA #TYP$VW
IFNE ;?ALREADY FULLY SETUP TO VIEW NOW?
JSR GDVIEW ;THEN VIEW THE BUILDING
JSR GDGUN ;ALLOW BUILDINGS TO FIRE GUNS
ENDIF
BRA 90$
ENDIF
ENDIF
ENDIF
80$: ;---
;NOT CURRENTLY VISIBLE, BUT SEQUENCE OK
LDX S2.PRM ;MAKE IT VIEWABLE WHILE BACKSTAGE
LDU #GDRAM
LDB TGD$RM(X)
LEAU B(U) ;POINTING TO RAM ENTRY
LDA Q.KTW ;?TRANSIT GROM GROUND TO BASE?
IFNE ;YES
CLR GD$TYP(U) ;KILL ALL GUNS
ELSE
LDA #TYP$LV+TYP$AM+TYP$VW ;WHEN BACKSTAGE, MAKE IT ALIVE, READY TO SHOOT
LDB GD$TYP(U)
BITB #TYP$DM
IFNE ;?PREVIOUSLY DAMAGED?
ORA #TYP$DM ;THEN REMAIN DAMAGED
LDB TGD$PC(X)
CMPB #PC$BNK
IFEQ ;?DAMAGED BUILDING A BUNKER?
ANDA #-1-TYP$VW ;THEN NO VIEW THIS PREVIOUSLY DAMAGED BUNKER
ENDIF
ELSE
ORA #TYP$BK ;ELSE NOT DAMAGED, SO TURN ON BUNKER PART
ENDIF
STA GD$TYP(U)
ENDIF
90$: ;---
;NOT IN THIS SEQUENCE
LDB GD.WAV ;WAVE NUMBER FOR GROUND SEQUENCE
LSLB ;*4 TO INDEX INTO TABLE
LSLB
LDX #TGDPTR ;TABLE OF POINTERS TO GROUND MAZES
ABX ;POINTS INTO TABLE
CMPX #ZGDPTR
IFHS ;PAST THE TABLE'S END
LDX #ZGDPTR-4 ;USE LAST ENTRY IF OUT OF RANGE
ENDIF
TFR X,U ;POINTS INTO TABLE OF POINTERS
LDX S2.PRM
LEAX TGD$IZ(X)
CMPX 2(U) ;CMPARE TO END OF CURRENT MAZE
HSEND
RTS
;===
GDVIEW:
LDX S2.PRM
;---
LDB TGD$PC(X)
CMPB #PC$BNK
IFEQ ;? A BUNKER PICTURE?
LDB #TD$BNK
ELSE ;ELSE A TOWER PIC
LDB #TD$TWR
ENDIF
STB BJ.ID ;UPDATE OBJECT ROUTINES ABOUT IT
;---
LDD #VGCYLW*100+VGCOPC ;THEN ASSUME VISIBLE NORMALLY
STD M.GDCB ;BASE COLOR, INTO MBOX FOR LATER D-PAGE USE
;---
LDU #GDRAM
LDB TGD$RM(X)
LEAU B(U)
LDA GD$TYP(U)
;
LDB TGD$PC(X)
CMPB #PC$BNK
IFNE ;?NOT A LONE BUNKER?
BITA #TYP$DM ;THEN MUST BE A TOWER OR BISHOP
BNE 20$ ;?DAMAGED?
BITA #TYP$BK
IFEQ ;?OR WITH A GONE BUNKER ON TOP?
20$:
LDB #TD$STB ;THEN DRAW JUST THE STUB
STB BJ.ID
LDD #VGCOFF*100+VGCOPC ;NO HAT DRAWN ON TOP
ELSE ;ELSE TOWER HAS A HAT
LDD #VGCWHT*100+VGCOPC ;SO DRAW IT SPECIAL WHITE
ENDIF
ELSE ;ELSE IS LONE BUNKER
BITA #TYP$DM
IFEQ ;?NOT DAMAGED?
LDD #VGCRED*100+VGCOPC-20
ELSE ;ELSE DAMAGED
LDD #VGCOFF*100+VGCOPC ;SHOW IT
ENDIF
ENDIF
;---
STD M.GDCT ;TOP COLOR OF LASAR TOWERS, BUNKER COLOR
;---
LDA #72 ;LIN SCALE TO REDUCE SIZE OF FAR OBJECTS
STA M.GDSC ;SAVE THE SCALE
LDA M.XP ;3F MAX
LSLA
LSLA ;BUMP UP TO UNSIGNED FF
;;; LDB #0FF ;MULT FOR SMALLEST SIZE
;;; MUL
STA M.GDSC+1
LDB #40 ;RANGE OF BRITENESS
COMA ;FLIP FOR BRITENESS
MUL ;
ADDA #40 ;DIMMEST BRITENESS
STA M.GDCB+1 ;PUT INTO COLOR INSTRUCTIONS
;---
LDD M$VX+M.S1 ;GET PLAYER SPEED
LSLD
ADDD #400 ;PLUS OFFSET
SUBD M.XP
;;; IFHS ;?GETTING CLOSE TO TOWER?
LBLT 91$
LDA TGD$PC(X)
CMPA #PC$BNK
IFNE ;?A TOWER?
LDA S.GAS
IFGE ;?STILL IN NORMAL GAMEPLAY?
JSR AUDPF ;TOWER PFFFTS
ENDIF
LDD M.XP
SUBD #200
SUBD M$VX+M.S1
IFLE ;?CLOSE ENUF FOR COLLISION?
LDD #VJFLS ;VERY BRITE HIT
STD M.GDCB ;BASE COLOR, INTO MBOX FOR LATER D-PAGE USE
LDD #VGCOFF*100+VGCOPC
STD M.GDCT ;TOP COLOR OF LASAR TOWERS
LDA S.GAS
IFGE ;?STILL IN REGULAR GAMEPLAY?
JSR BG1GLW ;START GLOWING SHIELDS
JSR AUDCR ;AND CRASH INTO TOWER
ENDIF
LDA S.ROL
IFEQ ;?ANY PREVIOUS DIRECTION PREFERRED?
LDA M.YP ;IF NOT, THEN SELECT ONE
NEGA
ENDIF
LDB #20 ;AMOUNT TO ROLL
TSTA
IFMI ;?WHICH DIRECTION TO CHOOSE?
NEGB
ENDIF
STB S.ROL
ENDIF
ELSE ;ELSE IS BUNKER
;---
LDD M$TZ+M.U1
SUBD #6*120.*2+200 ;HITE*SCALE*PSUB2+SCREEN HITE FOR CLOSE HIT
IFLE ;?CLOSE OVER TOP OF BUNKER?
JSR AUDPF ;BUNKER PFFFTS
;---
LDX S2.PRM
LDU #GDRAM
LDB TGD$RM(X)
LEAU B(U)
LDA GD$TYP(U)
BITA #TYP$DM
IFEQ ;?CHECK COLLISION SINCE BLOWN AWAY?
LDD M$TZ+M.U1
SUBD #6*120.*2 ;HITE*SCALE*PSUB2
IFLT ;?TOO CLOSE OVER TOP OF BUNKER?
LDD M.XP
SUBD #400
SUBD M$VX+M.S1
IFLE ;?CLOSE ENUF FOR COLLISION?
LDD #VJFLS ;VERY BRITE HIT
STD M.GDCT ;TOP COLOR FOR BUNKER, INTO MBOX FOR LATER D-PAGE USE
LDA S.GAS
IFGE ;?STILL IN NORMAL GAME?
JSR BG1GLW ;BEGIN GLOWING SHIELDS
JSR AUDCR ;AND CRASH INTO BUNKER
ENDIF
LDA S.ROL
IFEQ ;?READY FOR ANOTHER HIT? (BE POLITE)
LDA #19. ;ROLLING COUNT FOR PARTIAL ROLL
LDB M.YP
IFPL ;?WHICH DIRECTION TO ROLL?
NEGA ;HIT RIGHT SHOULDER ROLLS US LEFT
ENDIF
ADDA S.ROL ;ROLLS ACCUMULATE -- LOSE CONTROL
STA S.ROL
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
;;; ENDIF
91$: ;---
LDA M.XP
SUBA #8 ;FIRST 1000 AWAY
IFLE ;?TOO CLOSE FOR DISPLAY COMFORT?
JSR BJGCLP ;CLIP CLOSE OBJECTS
ELSE
JSR BJGPNT ;TRANSLATE AND PROJECT GROUND OBJECT'S POINTS
ENDIF
JSR BJGDRW ;DRAW THE OBJECT, NEEDS ORIGINAL M.XP,YP,ZP
JSR GRLZCL ;PROCESS LAZAR COLLISION
RTS
;===
.PAGG
.SBTTL LAZAR COLLISIONS
GRLZIN: ;INIT VALS FOR LATER COLLISION
;TRANSPOSE U1 TO GET UNROTATED LAZAR VIDEO LOC
JSR TRANU1
;---
LDD #0
STD 0+M.X0
LDD LZ.CX
STD 2+M.X0 ;LEFT/RIGHT VID X IS MATH Y
LDD LZ.CY
STD 4+M.X0 ;UP/DOWN VID Y IS MATH Z
LDD #M$X0BC
STD M.BIC
LDA #M$PSUB
JSR MGOWT
LDD M.YP
STD 0+M.X0 ;FOR LATER SAFEKEEPING