-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBank $93.asm
2929 lines (2576 loc) · 161 KB
/
Bank $93.asm
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
;;; $8000..81D0: Initialise projectile ;;;
{
;;; $8000: Initialise projectile ;;;
{
;; Parameters:
;; X: Projectile index
; Used for beam (uncharged / charged / hyper), (super) missile, ice SBA
$93:8000 08 PHP
$93:8001 8B PHB
$93:8002 4B PHK ;\
$93:8003 AB PLB ;} DB = $93
$93:8004 C2 30 REP #$30
$93:8006 BD 04 0C LDA $0C04,x[$7E:0C04] ;\
$93:8009 29 0F 00 AND #$000F ;|
$93:800C 0A ASL A ;} $12 = [projectile direction] * 2
$93:800D 85 12 STA $12 [$7E:0012] ;/
$93:800F BD 18 0C LDA $0C18,x[$7E:0C18] ;\
$93:8012 89 00 0F BIT #$0F00 ;} If not beam: go to BRANCH_NOT_BEAM
$93:8015 D0 1B BNE $1B [$8032] ;/
$93:8017 89 10 00 BIT #$0010 ;\
$93:801A D0 0B BNE $0B [$8027] ;} If not charged:
$93:801C 29 0F 00 AND #$000F ;\
$93:801F 0A ASL A ;|
$93:8020 A8 TAY ;} Y = [$83C1 + (beam type) * 2]
$93:8021 B9 C1 83 LDA $83C1,y[$93:83C1] ;|
$93:8024 A8 TAY ;/
$93:8025 80 15 BRA $15 [$803C] ; Go to BRANCH_MERGE
$93:8027 29 0F 00 AND #$000F ;\ Else (charged):
$93:802A 0A ASL A ;|
$93:802B A8 TAY ;} Y = [$83D9 + (beam type) * 2]
$93:802C B9 D9 83 LDA $83D9,y[$93:83E1] ;|
$93:802F A8 TAY ;/
$93:8030 80 0A BRA $0A [$803C] ; Go to BRANCH_MERGE
; BRANCH_NOT_BEAM
$93:8032 EB XBA ;\
$93:8033 29 0F 00 AND #$000F ;|
$93:8036 0A ASL A ;|
$93:8037 A8 TAY ;} Y = [$83F1 + (projectile type) * 2]
$93:8038 B9 F1 83 LDA $83F1,y[$93:83F3] ;|
$93:803B A8 TAY ;/
; BRANCH_MERGE
$93:803C B9 00 00 LDA $0000,y[$93:8641] ;\
$93:803F 9D 2C 0C STA $0C2C,x[$7E:0C2C] ;} Projectile damage = [[Y]]
$93:8042 10 04 BPL $04 [$8048] ; If [projectile damage] < 0:
$93:8044 5C 73 85 80 JML $808573[$80:8573] ; Crash
$93:8048 C8 INY ;\
$93:8049 C8 INY ;|
$93:804A 98 TYA ;|
$93:804B 18 CLC ;|
$93:804C 65 12 ADC $12 [$7E:0012] ;} Projectile instruction pointer = [[Y] + 2 + [projectile direction] * 2]
$93:804E A8 TAY ;|
$93:804F B9 00 00 LDA $0000,y[$93:8651] ;|
$93:8052 9D 40 0C STA $0C40,x[$7E:0C40] ;/
$93:8055 A8 TAY ;\
$93:8056 B9 04 00 LDA $0004,y[$93:9F07] ;|
$93:8059 29 FF 00 AND #$00FF ;} Projectile X radius = [[projectile instruction pointer] + 4]
$93:805C 9D B4 0B STA $0BB4,x[$7E:0BB4] ;/
$93:805F B9 05 00 LDA $0005,y[$93:9F08] ;\
$93:8062 29 FF 00 AND #$00FF ;} Projectile Y radius = [[projectile instruction pointer] + 5]
$93:8065 9D C8 0B STA $0BC8,x[$7E:0BC8] ;/
$93:8068 A9 01 00 LDA #$0001 ;\
$93:806B 9D 54 0C STA $0C54,x[$7E:0C54] ;} Projectile instruction timer = 1
$93:806E AB PLB
$93:806F 28 PLP
$93:8070 6B RTL
}
;;; $8071: Initialise super missile link ;;;
{
; Instruction list is $9F7B (loop of single instruction with 8x8 radius and dummy empty spritemap)
$93:8071 08 PHP
$93:8072 8B PHB
$93:8073 4B PHK ;\
$93:8074 AB PLB ;} DB = $93
$93:8075 C2 30 REP #$30
$93:8077 BD 19 0C LDA $0C19,x[$7E:0C1B] ;\
$93:807A 29 0F 00 AND #$000F ;|
$93:807D 0A ASL A ;|
$93:807E A8 TAY ;|
$93:807F B9 2B 84 LDA $842B,y[$93:842F] ;} Projectile damage = [[$842B + (projectile type) * 2]]
$93:8082 A8 TAY ;|
$93:8083 B9 00 00 LDA $0000,y[$93:866D] ;|
$93:8086 9D 2C 0C STA $0C2C,x[$7E:0C2E] ;/
$93:8089 10 04 BPL $04 [$808F] ; If [projectile damage] < 0:
$93:808B 5C 73 85 80 JML $808573[$80:8573] ; Crash
$93:808F C8 INY ;\
$93:8090 C8 INY ;|
$93:8091 B9 00 00 LDA $0000,y[$93:866F] ;} Projectile instruction pointer = [[$842B + (projectile type) * 2] + 2]
$93:8094 9D 40 0C STA $0C40,x[$7E:0C42] ;/
$93:8097 A9 01 00 LDA #$0001 ;\
$93:809A 9D 54 0C STA $0C54,x[$7E:0C56] ;} Projectile instruction timer = 1
$93:809D AB PLB
$93:809E 28 PLP
$93:809F 6B RTL
}
;;; $80A0: Initialise (power) bomb ;;;
{
$93:80A0 08 PHP
$93:80A1 8B PHB
$93:80A2 4B PHK ;\
$93:80A3 AB PLB ;} DB = $93
$93:80A4 C2 30 REP #$30
$93:80A6 BD 19 0C LDA $0C19,x[$7E:0C23] ;\
$93:80A9 29 0F 00 AND #$000F ;|
$93:80AC 0A ASL A ;|
$93:80AD A8 TAY ;|
$93:80AE B9 F1 83 LDA $83F1,y[$93:83FB] ;} Projectile damage = [[$83F1 + (projectile type) * 2]]
$93:80B1 A8 TAY ;|
$93:80B2 B9 00 00 LDA $0000,y[$93:8675] ;|
$93:80B5 9D 2C 0C STA $0C2C,x[$7E:0C36] ;/
$93:80B8 10 04 BPL $04 [$80BE] ; If [projectile damage] < 0:
$93:80BA 5C 73 85 80 JML $808573[$80:8573] ; Crash
$93:80BE C8 INY ;\
$93:80BF C8 INY ;|
$93:80C0 B9 00 00 LDA $0000,y[$93:8677] ;} Projectile instruction = [[$83F1 + (projectile type) * 2] + 2]
$93:80C3 9D 40 0C STA $0C40,x[$7E:0C4A] ;/
$93:80C6 A9 01 00 LDA #$0001 ;\
$93:80C9 9D 54 0C STA $0C54,x[$7E:0C5E] ;} Projectile instruction timer = 1
$93:80CC AB PLB
$93:80CD 28 PLP
$93:80CE 6B RTL
}
;;; $80CF: Part of kill projectile - queue sound effect and set instruction ;;;
{
; Called by $90:AE06 (kill projectile)
$93:80CF 08 PHP
$93:80D0 8B PHB
$93:80D1 4B PHK ;\
$93:80D2 AB PLB ;} DB = $93
$93:80D3 C2 30 REP #$30
$93:80D5 BD 18 0C LDA $0C18,x[$7E:0C18] ;\
$93:80D8 89 00 0F BIT #$0F00 ;} If beam:
$93:80DB D0 1B BNE $1B [$80F8] ;/
$93:80DD BD 18 0C LDA $0C18,x[$7E:0C18] ;\
$93:80E0 29 FF F0 AND #$F0FF ;|
$93:80E3 09 00 07 ORA #$0700 ;} Projectile type = beam explosion
$93:80E6 9D 18 0C STA $0C18,x[$7E:0C18] ;/
$93:80E9 AD 7B 86 LDA $867B [$93:867B] ;\
$93:80EC 9D 40 0C STA $0C40,x[$7E:0C40] ;} Projectile instruction pointer = $A007 (beam explosion)
$93:80EF A9 0C 00 LDA #$000C ;\
$93:80F2 22 CB 90 80 JSL $8090CB[$80:90CB] ;} Queue sound Ch, sound library 2, max queued sounds allowed = 6 (beam hit wall)
$93:80F6 80 47 BRA $47 [$813F] ; Go to BRANCH_RETURN
$93:80F8 AD 51 1F LDA $1F51 [$7E:1F51] ;\
$93:80FB D0 07 BNE $07 [$8104] ;} If [cinematic function] = 0:
$93:80FD A9 07 00 LDA #$0007 ;\
$93:8100 22 CB 90 80 JSL $8090CB[$80:90CB] ;} Queue sound 7, sound library 2, max queued sounds allowed = 6 (missile hit wall)
$93:8104 BD 18 0C LDA $0C18,x[$7E:0C18] ;\
$93:8107 48 PHA ;|
$93:8108 29 FF F0 AND #$F0FF ;} Projectile type = (super) missile explosion
$93:810B 09 00 08 ORA #$0800 ;|
$93:810E 9D 18 0C STA $0C18,x[$7E:0C18] ;/
$93:8111 68 PLA ;\
$93:8112 89 00 02 BIT #$0200 ;} If not super missile:
$93:8115 D0 08 BNE $08 [$811F] ;/
$93:8117 AD 7F 86 LDA $867F [$93:867F] ;\
$93:811A 9D 40 0C STA $0C40,x[$7E:0C40] ;} Projectile instruction pointer = $A039 (missile explosion)
$93:811D 80 12 BRA $12 [$8131]
$93:811F AD 93 86 LDA $8693 [$93:8693] ;\ Else (super missile):
$93:8122 9D 40 0C STA $0C40,x[$7E:0C40] ;} Projectile instruction pointer = $A0C1 (super missile explosion)
$93:8125 A9 14 00 LDA #$0014 ;\
$93:8128 8D 3E 18 STA $183E [$7E:183E] ;} Earthquake type = BG1, BG2 and enemies, 1 pixel displacement, diagonal
$93:812B A9 1E 00 LDA #$001E ;\
$93:812E 8D 40 18 STA $1840 [$7E:1840] ;} Earthquake timer = 30
$93:8131 AD CC 0C LDA $0CCC [$7E:0CCC] ;\
$93:8134 C9 15 00 CMP #$0015 ;|
$93:8137 30 06 BMI $06 [$813F] ;} Cooldown timer = min(20, [cooldown timer])
$93:8139 A9 14 00 LDA #$0014 ;|
$93:813C 8D CC 0C STA $0CCC [$7E:0CCC] ;/
; BRANCH_RETURN
$93:813F A9 01 00 LDA #$0001 ;\
$93:8142 9D 54 0C STA $0C54,x[$7E:0C54] ;} Projectile instruction timer = 1
$93:8145 A9 08 00 LDA #$0008 ;\
$93:8148 9D 2C 0C STA $0C2C,x[$7E:0C2C] ;} Projectile damage = 8
$93:814B AB PLB
$93:814C 28 PLP
$93:814D 6B RTL
}
;;; $814E: Initialise bomb explosion ;;;
{
$93:814E 08 PHP
$93:814F 8B PHB
$93:8150 4B PHK ;\
$93:8151 AB PLB ;} DB = $93
$93:8152 C2 30 REP #$30
$93:8154 AD 83 86 LDA $8683 [$93:8683] ;\
$93:8157 9D 40 0C STA $0C40,x[$7E:0C4A] ;} Projectile instruction pointer = $A06B (bomb explosion)
$93:815A A9 01 00 LDA #$0001 ;\
$93:815D 9D 54 0C STA $0C54,x[$7E:0C5E] ;} Projectile instruction timer = 1
$93:8160 AB PLB
$93:8161 28 PLP
$93:8162 6B RTL
}
;;; $8163: Initialise shinespark echo or spazer SBA trail projectile ;;;
{
$93:8163 08 PHP
$93:8164 8B PHB
$93:8165 4B PHK ;\
$93:8166 AB PLB ;} DB = $93
$93:8167 C2 30 REP #$30
$93:8169 BD 04 0C LDA $0C04,x[$7E:0C0A] ;\
$93:816C 29 0F 00 AND #$000F ;|
$93:816F 0A ASL A ;} $12 = (projectile direction) * 2
$93:8170 85 12 STA $12 [$7E:0012] ;/
$93:8172 BD 18 0C LDA $0C18,x[$7E:0C1E] ;\
$93:8175 29 FF 00 AND #$00FF ;|
$93:8178 38 SEC ;|
$93:8179 E9 22 00 SBC #$0022 ;|
$93:817C 0A ASL A ;|
$93:817D A8 TAY ;} Projectile damage = [[$8403 + (([projectile type] & FFh) - 22h) * 2]]
$93:817E B9 03 84 LDA $8403,y[$93:8411] ;|
$93:8181 A8 TAY ;|
$93:8182 B9 00 00 LDA $0000,y[$93:86C1] ;|
$93:8185 9D 2C 0C STA $0C2C,x[$7E:0C32] ;/
$93:8188 10 04 BPL $04 [$818E] ; If [projectile damage] < 0:
$93:818A 5C 73 85 80 JML $808573[$80:8573] ; Crash
$93:818E C8 INY ;\
$93:818F C8 INY ;|
$93:8190 98 TYA ;|
$93:8191 18 CLC ;|
$93:8192 65 12 ADC $12 [$7E:0012] ;} Projectile instruction pointer = [[$8403 + (([projectile type] & FFh) - 22h) * 2] + (projectile direction + 1) * 2 ]
$93:8194 A8 TAY ;|
$93:8195 B9 00 00 LDA $0000,y[$93:86C3] ;|
$93:8198 9D 40 0C STA $0C40,x[$7E:0C46] ;/
$93:819B A9 01 00 LDA #$0001 ;\
$93:819E 9D 54 0C STA $0C54,x[$7E:0C5A] ;} Projectile instruction timer = 1
$93:81A1 AB PLB
$93:81A2 28 PLP
$93:81A3 6B RTL
}
;;; $81A4: Initialise SBA projectile ;;;
{
; Excluding ice SBA, which is run as a regular projectile
$93:81A4 08 PHP
$93:81A5 8B PHB
$93:81A6 4B PHK ;\
$93:81A7 AB PLB ;} DB = $93
$93:81A8 C2 30 REP #$30
$93:81AA BD 18 0C LDA $0C18,x[$7E:0C1E] ;\
$93:81AD 29 0F 00 AND #$000F ;|
$93:81B0 0A ASL A ;|
$93:81B1 A8 TAY ;|
$93:81B2 B9 13 84 LDA $8413,y[$93:8423] ;} Projectile damage = [[$8413 + (beam type) * 2]]
$93:81B5 A8 TAY ;|
$93:81B6 B9 00 00 LDA $0000,y[$93:8685] ;|
$93:81B9 9D 2C 0C STA $0C2C,x[$7E:0C32] ;/
$93:81BC 10 04 BPL $04 [$81C2] ; If [projectile damage] < 0:
$93:81BE 5C 73 85 80 JML $808573[$80:8573] ; Crash
$93:81C2 B9 02 00 LDA $0002,y[$93:8687] ;\
$93:81C5 9D 40 0C STA $0C40,x[$7E:0C46] ;} Projectile instruction = [[$8413 + (beam type) * 2] + 2]
$93:81C8 A9 01 00 LDA #$0001 ;\
$93:81CB 9D 54 0C STA $0C54,x[$7E:0C5A] ;} Projectile instruction timer = 1
$93:81CE AB PLB
$93:81CF 28 PLP
$93:81D0 6B RTL
}
}
;;; $81D1: $16 = projectile trail frame ;;;
{
$93:81D1 08 PHP
$93:81D2 8B PHB
$93:81D3 4B PHK ;\
$93:81D4 AB PLB ;} DB = $93
$93:81D5 C2 30 REP #$30
$93:81D7 5A PHY
$93:81D8 BD 40 0C LDA $0C40,x[$7E:0C40] ;\
$93:81DB 38 SEC ;|
$93:81DC E9 08 00 SBC #$0008 ;|
$93:81DF A8 TAY ;} $16 = [[projectile instruction pointer] - 2]
$93:81E0 B9 06 00 LDA $0006,y[$93:9F09] ;|
$93:81E3 85 16 STA $16 [$7E:0016] ;/
$93:81E5 7A PLY
$93:81E6 AB PLB
$93:81E7 28 PLP
$93:81E8 6B RTL
}
;;; $81E9: Projectile instruction handler ;;;
{
; Called by $90:AECE (handle projectiles)
$93:81E9 08 PHP
$93:81EA 8B PHB
$93:81EB 4B PHK ;\
$93:81EC AB PLB ;} DB = $93
$93:81ED C2 30 REP #$30
$93:81EF AE DE 0D LDX $0DDE [$7E:0DDE] ; X = [projectile index]
$93:81F2 DE 54 0C DEC $0C54,x[$7E:0C54] ; Decrement projectile instruction timer
$93:81F5 D0 35 BNE $35 [$822C] ; If [projectile instruction timer] != 0: return
$93:81F7 BC 40 0C LDY $0C40,x[$7E:0C40] ; Y = [projectile instruction pointer]
; LOOP
$93:81FA B9 00 00 LDA $0000,y[$93:9F03] ;\
$93:81FD 10 0A BPL $0A [$8209] ;} If [[Y]] & 8000h != 0:
$93:81FF 85 12 STA $12 [$7E:0012] ;\
$93:8201 C8 INY ;|
$93:8202 C8 INY ;} Execute [[Y]], Y += 2, go to LOOP
$93:8203 F4 F9 81 PEA $81F9 ;|
$93:8206 6C 12 00 JMP ($0012)[$93:8239] ;/
$93:8209 9D 54 0C STA $0C54,x[$7E:0C54] ; Projectile instruction timer = [[Y]]
$93:820C B9 02 00 LDA $0002,y[$93:9F05] ;\
$93:820F 9D B8 0C STA $0CB8,x[$7E:0CB8] ;} Projectile spritemap pointer = [[Y] + 2]
$93:8212 B9 04 00 LDA $0004,y[$93:9F07] ;\
$93:8215 29 FF 00 AND #$00FF ;} Projectile X radius = [[Y] + 4]
$93:8218 9D B4 0B STA $0BB4,x[$7E:0BB4] ;/
$93:821B B9 05 00 LDA $0005,y[$93:9F08] ;\
$93:821E 29 FF 00 AND #$00FF ;} Projectile Y radius = [[Y] + 5]
$93:8221 9D C8 0B STA $0BC8,x[$7E:0BC8] ;/
$93:8224 98 TYA ;\
$93:8225 18 CLC ;|
$93:8226 69 08 00 ADC #$0008 ;} Projectile instruction pointer = [Y] + 8
$93:8229 9D 40 0C STA $0C40,x[$7E:0C40] ;/
$93:822C AB PLB
$93:822D 28 PLP
$93:822E 6B RTL
}
;;; $822F..53: Instructions ;;;
{
;;; $822F: Instruction - delete ;;;
{
$93:822F C2 30 REP #$30
$93:8231 22 B7 AD 90 JSL $90ADB7[$90:ADB7] ; Clear projectile
$93:8235 68 PLA ; Terminate projectile handling
$93:8236 AB PLB
$93:8237 28 PLP
$93:8238 6B RTL
}
;;; $8239: Instruction - go to [[Y]] ;;;
{
$93:8239 C2 30 REP #$30
$93:823B B9 00 00 LDA $0000,y[$93:9F0D]
$93:823E A8 TAY
$93:823F 60 RTS
}
;;; $8240: Unused. Instruction - go to [[Y] + 2] if [bomb timer] <= [[Y]] else go to [[Y] + 4] ;;;
{
$93:8240 C2 30 REP #$30
$93:8242 B9 00 00 LDA $0000,y
$93:8245 DD 7C 0C CMP $0C7C,x
$93:8248 10 05 BPL $05 [$824F]
$93:824A B9 04 00 LDA $0004,y
$93:824D A8 TAY
$93:824E 60 RTS
$93:824F B9 02 00 LDA $0002,y
$93:8252 A8 TAY
$93:8253 60 RTS
}
}
;;; $8254: Draw projectiles ;;;
{
$93:8254 08 PHP
$93:8255 C2 30 REP #$30
$93:8257 A2 08 00 LDX #$0008 ;\
$93:825A 8E DE 0D STX $0DDE [$7E:0DDE] ;} Projectile index = 8
; LOOP
$93:825D BD 40 0C LDA $0C40,x[$7E:0C48] ;\
$93:8260 D0 03 BNE $03 [$8265] ;} If [projectile instruction pointer] = 0:
$93:8262 4C E9 82 JMP $82E9 [$93:82E9] ; Go to BRANCH_NEXT
$93:8265 BD 18 0C LDA $0C18,x[$7E:0C18] ;\
$93:8268 89 10 0F BIT #$0F10 ;} If projectile is not uncharged beam: go to BRANCH_NO_FLICKER
$93:826B D0 39 BNE $39 [$82A6] ;/
$93:826D 89 0C 00 BIT #$000C ;\
$93:8270 D0 1A BNE $1A [$828C] ;} If beam is spazer or plasma: go to BRANCH_SPAZER_PLASMA
$93:8272 8A TXA ;\
$93:8273 89 02 00 BIT #$0002 ;} If [projectile index] / 2 % 2 = 0:
$93:8276 D0 0A BNE $0A [$8282] ;/
$93:8278 AD B6 05 LDA $05B6 [$7E:05B6] ;\
$93:827B 89 01 00 BIT #$0001 ;} If [frame counter] % 2 != 0: go to BRANCH_DRAW
$93:827E D0 2E BNE $2E [$82AE] ;/
$93:8280 80 67 BRA $67 [$82E9] ; Go to BRANCH_NEXT
$93:8282 AD B6 05 LDA $05B6 [$7E:05B6] ;\
$93:8285 89 01 00 BIT #$0001 ;} If [frame counter] % 2 != 0: go to BRANCH_NEXT
$93:8288 D0 5F BNE $5F [$82E9] ;/
$93:828A 80 22 BRA $22 [$82AE] ; Go to BRANCH_DRAW
; BRANCH_SPAZER_PLASMA
$93:828C 8A TXA ;\
$93:828D 89 02 00 BIT #$0002 ;} If [projectile index] / 2 % 2 = 0:
$93:8290 D0 0A BNE $0A [$829C] ;/
$93:8292 AD B6 05 LDA $05B6 [$7E:05B6] ;\
$93:8295 89 02 00 BIT #$0002 ;} If [frame counter] & 2 != 0: go to BRANCH_NEXT
$93:8298 D0 4F BNE $4F [$82E9] ;/
$93:829A 80 12 BRA $12 [$82AE] ; Go to BRANCH_DRAW
$93:829C AD B6 05 LDA $05B6 [$7E:05B6] ;\
$93:829F 89 02 00 BIT #$0002 ;} If [frame counter] & 2 = 0: go to BRANCH_NEXT
$93:82A2 F0 45 BEQ $45 [$82E9] ;/
$93:82A4 80 08 BRA $08 [$82AE] ; Go to BRANCH_DRAW
; BRANCH_NO_FLICKER
$93:82A6 29 00 0F AND #$0F00 ;\
$93:82A9 C9 00 03 CMP #$0300 ;} If projectile is (power) bomb: go to BRANCH_NEXT
$93:82AC 10 3B BPL $3B [$82E9] ;/
; BRANCH_DRAW
$93:82AE AD 3F 09 LDA $093F [$7E:093F] ;\
$93:82B1 10 08 BPL $08 [$82BB] ;} If Ceres elevator room is rotating:
$93:82B3 22 D9 8A 8B JSL $8B8AD9[$8B:8AD9] ; Calculate position of projectile in rotating elevator room
$93:82B7 A5 12 LDA $12 [$7E:0012]
$93:82B9 80 12 BRA $12 [$82CD] ; Go to BRANCH_POSITION_CALCULATED
$93:82BB BD 64 0B LDA $0B64,x[$7E:0B64] ;\
$93:82BE 38 SEC ;|
$93:82BF ED 11 09 SBC $0911 [$7E:0911] ;} $14 = [projectile X position] - [layer 1 X position]
$93:82C2 85 14 STA $14 [$7E:0014] ;/
$93:82C4 BD 78 0B LDA $0B78,x[$7E:0B78] ;\
$93:82C7 38 SEC ;|
$93:82C8 ED 15 09 SBC $0915 [$7E:0915] ;} $12 = [projectile Y position] - [layer 1 Y position]
$93:82CB 85 12 STA $12 [$7E:0012] ;/
; BRANCH_POSITION_CALCULATED
$93:82CD 29 00 FF AND #$FF00 ;\
$93:82D0 D0 0B BNE $0B [$82DD] ;} If 0 <= [$12] < 100h:
$93:82D2 BD B8 0C LDA $0CB8,x[$7E:0CB8] ;\
$93:82D5 10 0F BPL $0F [$82E6] ;} If [projectile spritemap pointer] & 8000h != 0:
$93:82D7 22 4B 8A 81 JSL $818A4B[$81:8A4B] ; Add projectile spritemap to OAM
$93:82DB 80 09 BRA $09 [$82E6]
$93:82DD BD B8 0C LDA $0CB8,x[$7E:0CBA] ;\ Else (not 0 <= [$14] < 100h):
$93:82E0 10 04 BPL $04 [$82E6] ;} If [projectile spritemap pointer] & 8000h != 0:
$93:82E2 22 B7 8A 81 JSL $818AB7[$81:8AB7] ; RTL
$93:82E6 AE DE 0D LDX $0DDE [$7E:0DDE]
; BRANCH_NEXT
$93:82E9 CA DEX ;\
$93:82EA CA DEX ;} Projectile index -= 2
$93:82EB 8E DE 0D STX $0DDE [$7E:0DDE] ;/
$93:82EE 30 03 BMI $03 [$82F3] ; If [projectile index] >= 0:
$93:82F0 4C 5D 82 JMP $825D [$93:825D] ; Go to LOOP
$93:82F3 22 53 89 90 JSL $908953[$90:8953] ; Draw shinespark crash echoes
$93:82F7 22 A9 B6 90 JSL $90B6A9[$90:B6A9] ; Draw projectile trail
$93:82FB 28 PLP
$93:82FC 6B RTL
}
;;; $82FD: Unused. Partial draw projectiles ;;;
{
; Compared to $8254, this routine doesn't handle flickering,
; doesn't drawn shinespark crash echoes, and doesn't handle Ceres elevator room rotation.
; It also randomly subtracts 8 from the projectile's Y position.
$93:82FD 08 PHP
$93:82FE C2 30 REP #$30
$93:8300 A2 08 00 LDX #$0008 ;\
$93:8303 8E DE 0D STX $0DDE [$7E:0DDE] ;} Projectile index = 8
; LOOP
$93:8306 BD 40 0C LDA $0C40,x ;\
$93:8309 F0 32 BEQ $32 [$833D] ;} If [projectile instruction pointer] = 0: go to BRANCH_NEXT
$93:830B BD 64 0B LDA $0B64,x ;\
$93:830E 38 SEC ;|
$93:830F ED 11 09 SBC $0911 [$7E:0911] ;} $14 = [projectile X position] - [layer 1 X position]
$93:8312 85 14 STA $14 [$7E:0014] ;/
$93:8314 BD 78 0B LDA $0B78,x ;\
$93:8317 38 SEC ;|
$93:8318 E9 08 00 SBC #$0008 ;|
$93:831B 38 SEC ;} $14 = [projectile Y position] - 8 - [layer 1 X position]
$93:831C ED 15 09 SBC $0915 [$7E:0915] ;|
$93:831F 85 12 STA $12 [$7E:0012] ;/
$93:8321 29 00 FF AND #$FF00 ;\
$93:8324 D0 0B BNE $0B [$8331] ;} If 0 <= [$14] < 100h:
$93:8326 BD B8 0C LDA $0CB8,x ;\
$93:8329 10 0F BPL $0F [$833A] ;} If [projectile spritemap pointer] & 8000h != 0:
$93:832B 22 4B 8A 81 JSL $818A4B[$81:8A4B] ; Add projectile spritemap to OAM
$93:832F 80 09 BRA $09 [$833A]
$93:8331 BD B8 0C LDA $0CB8,x ;\ Else (not 0 <= [$14] < 100h):
$93:8334 10 04 BPL $04 [$833A] ;} If [projectile spritemap pointer] & 8000h != 0:
$93:8336 22 B7 8A 81 JSL $818AB7[$81:8AB7] ; RTL
$93:833A AE DE 0D LDX $0DDE [$7E:0DDE]
; BRANCH_NEXT
$93:833D CA DEX ;\
$93:833E CA DEX ;} Projectile index -= 2
$93:833F 8E DE 0D STX $0DDE [$7E:0DDE] ;/
$93:8342 30 03 BMI $03 [$8347] ; If [projectile index] >= 0:
$93:8344 4C 06 83 JMP $8306 [$93:8306] ; Go to LOOP
$93:8347 22 A9 B6 90 JSL $90B6A9[$90:B6A9] ; Draw projectile trail
$93:834B 28 PLP
$93:834C 6B RTL
}
;;; $834D: Draw bombs and projectile explosions ;;;
{
$93:834D 08 PHP
$93:834E C2 30 REP #$30
$93:8350 A2 12 00 LDX #$0012 ;\
$93:8353 8E DE 0D STX $0DDE [$7E:0DDE] ;} Projectile index = 12h
; LOOP
$93:8356 BD 40 0C LDA $0C40,x[$7E:0C52] ;\
$93:8359 F0 5B BEQ $5B [$83B6] ;} If [projectile instruction] = 0: go to BRANCH_NEXT
$93:835B BD 18 0C LDA $0C18,x[$7E:0C18] ;\
$93:835E 29 00 0F AND #$0F00 ;|
$93:8361 C9 00 03 CMP #$0300 ;} If projectile is beam or (super) missile: go to BRANCH_NEXT
$93:8364 30 50 BMI $50 [$83B6] ;/
$93:8366 F0 12 BEQ $12 [$837A] ; If projectile is not a power bomb:
$93:8368 C9 00 05 CMP #$0500 ;\
$93:836B F0 12 BEQ $12 [$837F] ;} If projectile is a bomb: go to BRANCH_NORMAL_POSITION_CALCULATION
$93:836D AD 3F 09 LDA $093F [$7E:093F] ;\
$93:8370 10 0D BPL $0D [$837F] ;} If [Ceres status] != elevator room rotates: go to BRANCH_NORMAL_POSITION_CALCULATION
$93:8372 22 D9 8A 8B JSL $8B8AD9[$8B:8AD9] ; Calculate position of projectile in rotating elevator room
$93:8376 A5 12 LDA $12 [$7E:0012] ; A = [$12]
$93:8378 80 21 BRA $21 [$839B] ; Go to BRANCH_CALCULATED_POSITION
$93:837A BD 7C 0C LDA $0C7C,x[$7E:0C86] ;\
$93:837D F0 37 BEQ $37 [$83B6] ;} If [bomb timer] = 0: go to BRANCH_NEXT
; BRANCH_NORMAL_POSITION_CALCULATION
$93:837F BD 64 0B LDA $0B64,x[$7E:0B64] ;\
$93:8382 38 SEC ;|
$93:8383 ED 11 09 SBC $0911 [$7E:0911] ;} Spritemap X position = [projectile X position] - [layer 1 X position]
$93:8386 85 14 STA $14 [$7E:0014] ;/
$93:8388 C9 30 01 CMP #$0130 ;\
$93:838B 10 29 BPL $29 [$83B6] ;} If projectile at least three blocks off right of screen: go to BRANCH_NEXT
$93:838D C9 D0 FF CMP #$FFD0 ;\
$93:8390 30 24 BMI $24 [$83B6] ;} If projectile over three blocks off left of screen: go to BRANCH_NEXT
$93:8392 BD 78 0B LDA $0B78,x[$7E:0B78] ;\
$93:8395 38 SEC ;|
$93:8396 ED 15 09 SBC $0915 [$7E:0915] ;} Spritemap Y position = [projectile Y position] - [layer 1 Y position]
$93:8399 85 12 STA $12 [$7E:0012] ;/
; BRANCH_CALCULATED_POSITION
$93:839B 29 00 FF AND #$FF00 ;\
$93:839E D0 0C BNE $0C [$83AC] ;} If on screen:
$93:83A0 BD B8 0C LDA $0CB8,x[$7E:0CB8] ; Spritemap address = [projectile spritemap pointer]
$93:83A3 22 4B 8A 81 JSL $818A4B[$81:8A4B] ; Add spritemap to OAM
$93:83A7 AE DE 0D LDX $0DDE [$7E:0DDE] ; X = [projectile index]
$93:83AA 80 0A BRA $0A [$83B6] ; Go to BRANCH_NEXT
$93:83AC BD B8 0C LDA $0CB8,x[$7E:0CBA] ; A = [projectile spritemap pointer]
$93:83AF 22 B7 8A 81 JSL $818AB7[$81:8AB7] ; RTL
$93:83B3 AE DE 0D LDX $0DDE [$7E:0DDE] ; X = [projectile index]
; BRANCH_NEXT
$93:83B6 CA DEX ;\
$93:83B7 CA DEX ;} X -= 2
$93:83B8 8E DE 0D STX $0DDE [$7E:0DDE] ; Projectile index = [X]
$93:83BB 10 99 BPL $99 [$8356] ; If [projectile index] >= 0: go to LOOP
$93:83BD 28 PLP
$93:83BE 6B RTL
}
;;; $83BF: Hyper beam damage value ;;;
{
$93:83BF dw 03E8
}
;;; $83C1: Projectile damage and instruction list table pointers ;;;
{
; Uncharged beams. Indexed by beam type
$93:83C1 dw 8431, 84B5, 849F, 84E1, 8447, 84F7, 845D, 8473, 84CB, 850D, 8523, 8489
; Charged beams. Indexed by beam type. Used by ice SBA
$93:83D9 dw 8539, 85D3, 85A7, 85E9, 854F, 85FF, 8565, 857B, 85BD, 862B, 8615, 8591
; Non-beam projectiles. Indexed by projectile type. Used for (super) missile, (power) bomb
$93:83F1 dw 8641, 8641, 8657, 8671, 8641, 8675, 8641, 8679, 867D
; Shinespark echo and spazer SBA trail projectile. Indexed by projectile type - 22h
$93:8403 dw 0000, 0000, 86AB, 8695, 86AB, 86D7, 0000, 86C1
; Non-ice SBA projectiles. Indexed by beam type
$93:8413 dw 0000, 8689, 0000, 0000, 868D, 868D, 0000, 0000, 8685, 8685, 0000, 0000
; Super missile link. Indexed by projectile type (always 2)
$93:842B dw 0000, 0000, 866D
}
;;; $8431: Projectile damage and instruction list tables ;;;
{
; ___________________________________________________ Damage
; | ______________________________________________ Up, facing right
; | | _________________________________________ Up-right
; | | | ____________________________________ Right
; | | | | _______________________________ Down-right
; | | | | | __________________________ Down, facing right
; | | | | | | _____________________ Down, facing left
; | | | | | | | ________________ Down-left
; | | | | | | | | ___________ Left
; | | | | | | | | | ______ Up-left
; | | | | | | | | | | _ Up, facing left
; | | | | | | | | | | |
; Uncharged beams
$93:8431 dw 0014,86DB,86E7,86F3,86FF,870B,870B,8717,8723,872F,86DB ; Power
$93:8447 dw 0028,8977,8993,89AF,89CB,89E7,89E7,8A03,8A1F,8A3B,8977 ; Spazer
$93:845D dw 003C,8977,8993,89AF,89CB,89E7,89E7,8A03,8A1F,8A3B,8977 ; Spazer + ice
$93:8473 dw 0064,8A57,8AAB,8AFF,8B53,8BA7,8BA7,8BFB,8C4F,8CA3,8A57 ; Spazer + ice + wave
$93:8489 dw 012C,8D47,8D93,8DDF,8E2B,8D47,8D47,8D93,8DDF,8E2B,8D47 ; Plasma + ice + wave
$93:849F dw 001E,8953,8953,8953,8953,8953,8953,8953,8953,8953,8953 ; Ice
$93:84B5 dw 0032,873B,87C7,884B,88CF,8743,8743,87C7,884B,88CF,873B ; Wave
$93:84CB dw 0096,8CF7,8D0B,8D1F,8D33,8CF7,8CF7,8D0B,8D1F,8D33,8CF7 ; Plasma
$93:84E1 dw 003C,873B,87C7,884B,88CF,8743,8743,87C7,884B,88CF,873B ; Ice + wave
$93:84F7 dw 0046,8A57,8AAB,8AFF,8B53,8BA7,8BA7,8BFB,8C4F,8CA3,8A57 ; Spazer + wave
$93:850D dw 00FA,8D4F,8D9B,8DDF,8E33,8D4F,8D4F,8D9B,8DDF,8E33,8D4F ; Plasma + wave
$93:8523 dw 00C8,8CF7,8D0B,8D1F,8D33,8CF7,8CF7,8D0B,8D1F,8D33,8CF7 ; Plasma + ice
; Charged beams
$93:8539 dw 003C,8E77,8E8B,8E9F,8EB3,8EC7,8EC7,8EDB,8EEF,8F03,8E77 ; Power
$93:854F dw 0078,936B,93BF,9413,9467,936B,936B,93BF,9413,9467,936B ; Spazer
$93:8565 dw 00B4,936B,93BF,9413,9467,936B,936B,93BF,9413,9467,936B ; Spazer + ice
$93:857B dw 012C,94BB,957F,9643,9707,97CB,97CB,988F,9953,9A17,94BB ; Spazer + ice + wave
$93:8591 dw 0384,9BEB,9C9F,9D53,9E07,9BEB,9BEB,9C9F,9D53,9E07,9BEB ; Plasma + ice + wave
$93:85A7 dw 005A,912F,912F,912F,912F,912F,912F,912F,912F,912F,912F ; Ice / ice SBA
$93:85BD dw 01C2,9ADB,9B1F,9B63,9BA7,9ADB,9ADB,9B1F,9B63,9BA7,9ADB ; Plasma
$93:85D3 dw 0096,8F17,8FA3,9027,90AB,8F1F,8F1F,8FA3,9027,90AB,8F17 ; Wave
$93:85E9 dw 00B4,9153,91DF,9263,92E7,915B,915B,91DF,9263,92E7,9153 ; Ice + wave
$93:85FF dw 00D2,94BB,957F,9643,9707,97CB,97CB,988F,9953,9A17,94BB ; Spazer + wave
$93:8615 dw 0258,9ADB,9B1F,9B63,9BA7,9ADB,9ADB,9B1F,9B63,9BA7,9ADB ; Plasma + ice
$93:862B dw 02EE,9BEB,9C9F,9D53,9E07,9BEB,9BEB,9C9F,9D53,9E07,9BEB ; Plasma + wave
; Non-beam projectiles
$93:8641 dw 0064,9EBB,9EC7,9ED3,9EDF,9EEB,9EEB,9EF7,9F03,9F0F,9EBB ; Missile
$93:8657 dw 012C,9F1B,9F27,9F33,9F3F,9F4B,9F4B,9F57,9F63,9F6F,9F1B ; Super missile
$93:866D dw 012C,9F7B ; Super missile link
$93:8671 dw 00C8,9F87 ; Power bomb
$93:8675 dw 001E,9FBF ; Bomb
$93:8679 dw 0008,A007 ; Beam explosion. Damage is ignored
$93:867D dw 0008,A039 ; Missile explosion. Damage is ignored
$93:8681 dw 0000,A06B ; Bomb explosion. Damage is ignored
$93:8685 dw 012C,A095 ; Plasma SBA
$93:8689 dw 012C,A159 ; Wave SBA
$93:868D dw 012C,8977 ; Spazer SBA
$93:8691 dw 0008,A0C1 ; Super missile explosion. Damage is ignored
$93:8695 dw F000,A0F3,A0F3,A0F3,A0F3,A0F3,A0F3,A0F3,A0F3,A0F3,A0F3 ; Unused projectile 25h
$93:86AB dw 012C,A13D,A13D,A13D,A13D,A13D,A13D,A13D,A13D,A13D,A13D ; Spazer SBA trail
$93:86C1 dw 1000,A119,A119,A119,A119,A119,A119,A119,A119,A119,A119 ; Shinespark echo
$93:86D7 dw 0000,A16D ; Unused projectile 27h (unused shinespark beam?)
}
;;; $86DB..A1A0: Projectile instruction lists ;;;
{
;;; $86DB: Instruction list - power - up ;;;
{
$93:86DB dx 000F,A25B,04,04,0000,
8239,86DB ; Go to $86DB
}
;;; $86E7: Instruction list - power - up-right ;;;
{
$93:86E7 dx 000F,A262,08,04,0000,
8239,86E7 ; Go to $86E7
}
;;; $86F3: Instruction list - power - right ;;;
{
$93:86F3 dx 000F,A269,08,04,0000,
8239,86F3 ; Go to $86F3
}
;;; $86FF: Instruction list - power - down-right ;;;
{
$93:86FF dx 000F,A270,08,04,0000,
8239,86FF ; Go to $86FF
}
;;; $870B: Instruction list - power - down ;;;
{
$93:870B dx 000F,A277,04,04,0000,
8239,870B ; Go to $870B
}
;;; $8717: Instruction list - power - down-left ;;;
{
$93:8717 dx 000F,A27E,08,04,0000,
8239,8717 ; Go to $8717
}
;;; $8723: Instruction list - power - left ;;;
{
$93:8723 dx 000F,A24D,08,04,0000,
8239,8723 ; Go to $8723
}
;;; $872F: Instruction list - power - up-left ;;;
{
$93:872F dx 000F,A254,08,04,0000,
8239,872F ; Go to $872F
}
;;; $873B: Instruction list - wave / ice + wave - up ;;;
{
$93:873B dx 0004,A117,0C,04,0000
}
;;; $8743: Instruction list - wave / ice + wave - down ;;;
{
$93:8743 dx 0001,AE65,0C,04,0000,
0001,AEDC,0C,04,0001,
0001,AEE3,0C,04,0002,
0001,AEEA,10,04,0003,
0001,AEF1,14,04,0004,
0001,AEEA,10,04,0005,
0001,AEE3,0C,04,0006,
0001,AEDC,0C,04,0007,
0001,AE65,0C,04,0008,
0001,AEF8,0C,04,0009,
0001,AEFF,0C,04,000A,
0001,AF06,10,04,000B,
0001,AF0D,14,04,000C,
0001,AF06,10,04,000D,
0001,AEFF,0C,04,000E,
0001,AEF8,0C,04,000F,
8239,8743 ; Go to $8743
}
;;; $87C7: Instruction list - wave / ice + wave - down-left / up-right ;;;
{
$93:87C7 dx 0001,AE65,08,08,0000,
0001,AF14,08,08,0001,
0001,AF1B,08,08,0002,
0001,AF22,0A,0A,0003,
0001,AF29,0C,0C,0004,
0001,AF22,0A,0A,0005,
0001,AF1B,08,08,0006,
0001,AF14,06,06,0007,
0001,AE65,04,04,0008,
0001,AF30,06,06,0009,
0001,AF37,08,08,000A,
0001,AF3E,0A,0A,000B,
0001,AF45,0C,0C,000C,
0001,AF3E,0A,0A,000D,
0001,AF37,08,08,000E,
0001,AF30,08,08,000F,
8239,87C7 ; Go to $87C7
}
;;; $884B: Instruction list - wave / ice + wave - left / right ;;;
{
$93:884B dx 0001,AE65,04,0C,0000,
0001,AE6C,04,0C,0001,
0001,AE73,04,0C,0002,
0001,AE7A,04,10,0003,
0001,AE81,04,14,0004,
0001,AE7A,04,10,0005,
0001,AE73,04,0C,0006,
0001,AE6C,04,0C,0007,
0001,AE65,04,0C,0008,
0001,AE88,04,0C,0009,
0001,AE8F,04,0C,000A,
0001,AE96,04,10,000B,
0001,AE9D,04,14,000C,
0001,AE96,04,10,000D,
0001,AE8F,04,0C,000E,
0001,AE88,04,0C,000F,
8239,884B ; Go to $884B
}
;;; $88CF: Instruction list - wave / ice + wave - down-right / up-left ;;;
{
$93:88CF dx 0001,AE65,08,08,0000,
0001,AEA4,08,08,0001,
0001,AEAB,08,08,0002,
0001,AEB2,0A,0A,0003,
0001,AEB9,0C,0C,0004,
0001,AEB2,0A,0A,0005,
0001,AEAB,08,08,0006,
0001,AEA4,06,06,0007,
0001,AE65,04,04,0008,
0001,AEC0,06,06,0009,
0001,AEC7,08,08,000A,
0001,AECE,0A,0A,000B,
0001,AED5,0C,0C,000C,
0001,AECE,0A,0A,000D,
0001,AEC7,08,08,000E,
0001,AEC0,08,08,000F,
8239,88CF ; Go to $88CF
}
;;; $8953: Instruction list - ice ;;;
{
$93:8953 dx 0001,EDF6,08,08,0000,
0001,EDFD,08,08,0001,
0001,EE04,08,08,0002,
0001,EE0B,08,08,0003,
8239,8953 ; Go to $8953
}
;;; $8977: Instruction list - spazer / spazer + ice - up ;;;
{
$93:8977 dx 0002,D796,0C,08,0000,
0002,D7C2,0C,08,0001,
$93:8987 dx 0002,D822,14,08,0002,
8239,8987 ; Go to $8987
}
;;; $8993: Instruction list - spazer / spazer + ice - up-right ;;;
{
$93:8993 dx 0002,D10E,08,08,0000,
0002,D124,0C,0C,0001,
$93:89A3 dx 0002,D1DE,10,10,0002,
8239,89A3 ; Go to $89A3
}
;;; $89AF: Instruction list - spazer / spazer + ice - right ;;;
{
$93:89AF dx 0002,D842,08,0C,0000,
0002,D86E,08,0C,0001,
$93:89BF dx 0002,D8CE,08,14,0002,
8239,89BF ; Go to $89BF
}
;;; $89CB: Instruction list - spazer / spazer + ice - down-right ;;;
{
$93:89CB dx 0002,D25A,08,08,0000,
0002,D270,0C,0C,0001,
$93:89DB dx 0002,D32A,10,10,0002,
8239,89DB ; Go to $89DB
}
;;; $89E7: Instruction list - spazer / spazer + ice - down ;;;
{
$93:89E7 dx 0002,D63E,0C,08,0000,
0002,D66A,0C,08,0001,
$93:89F7 dx 0002,D6CA,14,08,0002,
8239,89F7 ; Go to $89F7
}
;;; $8A03: Instruction list - spazer / spazer + ice - down-left ;;;
{
$93:8A03 dx 0002,D3A6,08,08,0000,
0002,D3BC,0C,0C,0001,
$93:8A13 dx 0002,D476,10,10,0002,
8239,8A13 ; Go to $8A13
}
;;; $8A1F: Instruction list - spazer / spazer + ice - left ;;;
{
$93:8A1F dx 0002,D6EA,08,0C,0000,
0002,D716,08,0C,0001,
$93:8A2F dx 0002,D776,08,14,0002,
8239,8A2F ; Go to $8A2F
}
;;; $8A3B: Instruction list - spazer / spazer + ice - up-left ;;;
{
$93:8A3B dx 0002,D4F2,08,08,0000,
0002,D508,0C,0C,0001,
$93:8A4B dx 0002,D5C2,10,10,0002,
8239,8A4B ; Go to $8A4B
}
;;; $8A57: Instruction list - spazer + wave / spazer + ice + wave - up ;;;
{
$93:8A57 dx 0002,D796,0C,08,0000,
0002,D7A2,0C,08,0001,
0002,D7C2,0C,08,0002,
0002,D7E2,11,08,0003,
0002,D802,13,08,0004,
0002,D822,14,08,0005,
0002,D802,13,08,0006,
0002,D7E2,11,08,0007,
0002,D7C2,0C,08,0008,
0002,D7A2,0C,08,0009,
8239,8A57 ; Go to $8A57
}
;;; $8AAB: Instruction list - spazer + wave / spazer + ice + wave - up-right ;;;
{
$93:8AAB dx 0002,D10E,08,08,0000,
0002,D21C,08,08,0001,
0002,D124,0C,0C,0002,
0002,D162,10,10,0003,
0002,D1A0,10,10,0004,
0002,D1DE,10,10,0005,
0002,D1A0,10,10,0006,
0002,D162,10,10,0007,
0002,D124,0C,0C,0008,
0002,D21C,08,08,0009,
8239,8AAB ; Go to $8AAB
}
;;; $8AFF: Instruction list - spazer + wave / spazer + ice + wave - right ;;;
{
$93:8AFF dx 0002,D842,08,0C,0000,
0002,D84E,08,0C,0001,
0002,D86E,08,0C,0002,
0002,D88E,08,11,0003,
0002,D8AE,08,13,0004,
0002,D8CE,08,14,0005,
0002,D8AE,08,13,0006,
0002,D88E,08,11,0007,
0002,D86E,08,0C,0008,
0002,D84E,08,0C,0009,
8239,8AFF ; Go to $8AFF
}
;;; $8B53: Instruction list - spazer + wave / spazer + ice + wave - down-right ;;;
{
$93:8B53 dx 0002,D25A,08,08,0000,
0002,D368,08,08,0001,
0002,D270,0C,0C,0002,
0002,D2AE,10,10,0003,
0002,D2EC,10,10,0004,
0002,D32A,10,10,0005,
0002,D2EC,10,10,0006,
0002,D2AE,10,10,0007,
0002,D270,0C,0C,0008,
0002,D368,08,08,0009,
8239,8B53 ; Go to $8B53
}
;;; $8BA7: Instruction list - spazer + wave / spazer + ice + wave - down ;;;
{
$93:8BA7 dx 0002,D63E,0C,08,0000,
0002,D64A,0C,08,0001,
0002,D66A,0C,08,0002,
0002,D68A,11,08,0003,
0002,D6AA,13,08,0004,
0002,D6CA,14,08,0005,
0002,D6AA,13,08,0006,
0002,D68A,11,08,0007,
0002,D66A,0C,08,0008,
0002,D64A,0C,08,0009,
8239,8BA7 ; Go to $8BA7
}
;;; $8BFB: Instruction list - spazer + wave / spazer + ice + wave - down-left ;;;
{
$93:8BFB dx 0002,D3A6,08,08,0000,
0002,D3BC,08,08,0001,
0002,D3FA,0C,0C,0002,
0002,D438,10,10,0003,