-
Notifications
You must be signed in to change notification settings - Fork 0
/
objectEnemyBank1.asm
755 lines (724 loc) · 31 KB
/
objectEnemyBank1.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
; bank 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; in y position of Anim table of "bug"
failureBehaviourBank1 ;#isfunction
;-------
lda BUG_MOVEMENT_DOUBLER+u_offset1,s
sta tmp8_tmp
ldb BUG_ADDS_YX+u_offset1,s ; target y, x position in d
sex
addd Y_POS16+u_offset1,s
std Y_POS16+u_offset1,s
ldb 1+BUG_ADDS_YX+u_offset1,s ; target y, x position in d
sex
addd X_POS16+u_offset1,s
std X_POS16+u_offset1,s
suba X_POS+u_offset1,s
bpl noNegB1
nega
noNegB1
cmpa #4
bhi noNewTargetNecessary
lda Y_POS16+u_offset1,s
suba Y_POS+u_offset1,s
bpl noNegB2
nega
noNegB2
cmpa #4
bhi noNewTargetNecessary
RANDOM_A2
anda #%10000001
sta tmp8_tmp
doubleMovement
clr 1+Y_POS16+u_offset1,s
clr 1+X_POS16+u_offset1,s
RANDOM_A
RANDOM_B
anda #%01111000 ; not negative and smaller ($7f-7) y pos
std Y_POS+u_offset1,s ; that is the target
; Y
ldb Y_POS16+u_offset1,s
sex
std tmp16_tmp
ldb Y_POS+u_offset1,s
sex
subd tmp16_tmp
clr BUG_MOVEMENT_DOUBLER+u_offset1,s
tst tmp8_tmp
beq double1
bpl normal1
half1
ASRA
RORB ; half it
bra normal1
double1
inc BUG_MOVEMENT_DOUBLER+u_offset1,s
normal1
stb BUG_ADDS_YX+u_offset1,s
; X
ldb X_POS16+u_offset1,s
sex
std tmp16_tmp
ldb X_POS+u_offset1,s
sex
subd tmp16_tmp
tst tmp8_tmp
bpl normal2
half2
ASRA
RORB ; half it
normal2
stb 1+BUG_ADDS_YX+u_offset1,s
clr tmp8_tmp
noNewTargetNecessary
dec tmp8_tmp
bpl doubleMovement
; --------
lda BUG_ENEMY_HITPOINTS+u_offset1,s
cmpa #50
bhi slowAnim
cmpa #20
bhi mediumAnim
fastAnim
inc ANIM_POSITION+u_offset1,s
lda ANIM_POSITION+u_offset1,s
asla
; in y from other bank ldx WAIT_ANIM_TABLE,u
ldx a,y
bne animNotFinishedB1
clr ANIM_POSITION+u_offset1,s
noAnimChangeEnemyB1_2
lda ANIM_POSITION+u_offset1,s
lsla
bra animaDone
mediumAnim
lda animDelayCounter
lsra
bne noAnimChangeEnemyB1_1
inc ANIM_POSITION+u_offset1,s
lda ANIM_POSITION+u_offset1,s
asla
; in y from other bank
ldx a,y
bne animNotFinishedB1
clr ANIM_POSITION+u_offset1,s
noAnimChangeEnemyB1_1
lda ANIM_POSITION+u_offset1,s
lsla
bra animaDone
slowAnim
tst animDelayCounter
bpl noAnimChangeEnemyB1
inc ANIM_POSITION+u_offset1,s
lda ANIM_POSITION+u_offset1,s
asla
; in y from other bank
ldx a,y
bne animNotFinishedB1
clr ANIM_POSITION+u_offset1,s
noAnimChangeEnemyB1
lda ANIM_POSITION+u_offset1,s
lsla
animNotFinishedB1
animaDone
ldu a,y
lda ALL_PURPOSE +u_offset1,s
beq normalEndMacroB1
cmpa #HIT_FLASH_LENGTH
bgt normalEndMacro2B1
inc lightningOn
dec ALL_PURPOSE +u_offset1,s
lda #$7f
MY_MOVE_TO_B_END
_INTENSITY_A
bra startDrawingB1
normalEndMacroB1
tst lightningOn
beq normalEndMacro2B1
clr lightningOn
lda #DEFAULT_ENEMY_INTENSITY
MY_MOVE_TO_B_END
_INTENSITY_A
bra startDrawingB1
normalEndMacro2B1
MY_MOVE_TO_A_END
startDrawingB1
sts introWaveCurrentPattern ;StringOutputBuffer_6
lds #MY_STACK ; CBFC - allow subroutines
jsr SMVB_drawSmart
lds introWaveCurrentPattern ;StringOutputBuffer_6
REPLACE_1_2_backToBehaviour_varFrom1_1
ldx #0 ; backToBehaviour
jmp jmpBankIRQ3X
;
;***************************************************************************
;
enemyBank1ExplosionBehaviour ;#isfunction
ldu SMARTLIST_ORG +u_offset1,s
ldu ,u
lda EXPLOSION_INTENSITY +u_offset1,s
suba #10
sta EXPLOSION_INTENSITY +u_offset1,s
inc lightningOn
MY_MOVE_TO_B_END
_INTENSITY_A
sts backJump ;tmp_debug +2;StringOutputBuffer_6
lds #MY_STACK ; CBFC - allow subroutines
jsr SMVB_drawSmart
lds backJump ;tmp_debug +2;StringOutputBuffer_6
REPLACE_1_2_backToExplosionBehaviour_varFrom1_1
ldx #0 ; backToExplosionBehaviour
jmp jmpBankIRQ3X
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
saucerBehaviourBank1 ;#isfunction
; check col detect
; move right
; fire x "missiles" at player
; col detect with player
lda playSoundFlags
anda #%11000000
bne noSoundEffect3
ldx sfx_pointer_1
bne noNewSaurcerSound
ldx #UFOAproachingdata ; spawnXData
stx sfx_pointer_1
noNewSaurcerSound
noSoundEffect3
lda X_POS +u_offset1,s
ldb saucerCount
cmpb #2
blo notFasterSaucer
cmpb #3
blo notFasterSaucer2
adda #1
notFasterSaucer2
adda #1
notFasterSaucer
adda #1
sta X_POS +u_offset1,s
cmpa #120
blt noposaddms_l
lda diverseFlags
anda #$ff-BIT_BIG_ENEMY_IN_PLAY
sta diverseFlags
REPLACE_1_2_destroyEnemyObject_varFrom1_1
ldx #0 ; destroyEnemyObject
jmp jmpBankIRQ3X
noposaddms_l
if ENEMY_NO_SHOOTING = 1
bra noBulletSpawnSaucer
endif
; init a # of shots depending on saucer number
; IGNORE current shots
ldd Y_POS +u_offset1,s
cmpb #2
bne noBulletSpawnSaucer1
std bulletSpawnAt
lda ENEMY_BULLET_SPEED, x
sta isBugShot
;makeHunter
lda #%10000001
sta isBugShot
bra noBulletSpawnSaucer
noBulletSpawnSaucer1
lda saucerCount
cmpa #2
blo noSecondSaucerShot
ldd Y_POS +u_offset1,s
cmpb #-64
bne noSecondSaucerShot3
std bulletSpawnAt
lda ENEMY_BULLET_SPEED, x
sta isBugShot
;makeHunter
lda #%01000111
sta isBugShot
noSecondSaucerShot3
lda saucerCount
cmpa #3
blo noSecondSaucerShot
ldd Y_POS +u_offset1,s
cmpb #65
bne noBulletSpawnSaucer
std bulletSpawnAt
lda ENEMY_BULLET_SPEED, x
sta isBugShot
lda #%01000111
sta isBugShot
bra noBulletSpawnSaucer
noSecondSaucerShot
noBulletSpawnSaucer
ldx #SaucerWindowAnim
tst animDelayCounter
bpl noAnimChangeEnemySaucer
inc ANIM_POSITION+u_offset1,s
lda ANIM_POSITION+u_offset1,s
asla
ldx a,x
bne animNotFinishedSaucer
clr ANIM_POSITION+u_offset1,s
noAnimChangeEnemySaucer
lda ANIM_POSITION+u_offset1,s
lsla
animNotFinishedSaucer
ldu #SaucerWindowAnim
endAllBiggyBank1
ldu a,u
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END_ENEMY_DISPLAY macro
lda ALL_PURPOSE +u_offset1,s
beq normalEndMacro\?
cmpa #HIT_FLASH_LENGTH
bgt normalEndMacro2\?
inc lightningOn
dec ALL_PURPOSE +u_offset1,s
lda #$7f
MY_MOVE_TO_B_END
_INTENSITY_A
bra out\?
normalEndMacro\?
tst lightningOn
beq normalEndMacro2\?
clr lightningOn
lda #DEFAULT_ENEMY_INTENSITY
MY_MOVE_TO_B_END
_INTENSITY_A
bra out\?
normalEndMacro2\?
MY_MOVE_TO_A_END
out\?
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END_ENEMY_DISPLAY
sts backJump ; introWaveCurrentPattern ;tmp_debug +2;StringOutputBuffer_6
lds #MY_STACK ; CBFC - allow subroutines
jsr SMVB_drawSmart
lds backJump ; introWaveCurrentPattern ;tmp_debug +2;StringOutputBuffer_6
REPLACE_1_2_backBank3Behaviour_varFrom1_1
ldx #0 ; backBank3Behaviour
jmp jmpBankIRQ3X
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
moneyMothershipBehaviourBank1 ;#isfunction
MY_MOVE_TO_D_START
; move right
; col detect with player
lda Vec_Loop_Count+1
anda #1
beq noposadd
lda X_POS +u_offset1,s
adda #1
sta X_POS +u_offset1,s
cmpa #120
blt noposadd
lda diverseFlags
anda #$ff-BIT_BIG_ENEMY_IN_PLAY
sta diverseFlags
REPLACE_1_2_destroyEnemyObject_varFrom1_2
ldx #0 ; destroyEnemyObject
jmp jmpBankIRQ3X
nodestroyEnemyObject
noposadd
noBulletMoneyMothership
ldx #MoneyMothershipAnim
tst animDelayCounter
bpl noAnimChangeEnemyMoneyMothership
inc ANIM_POSITION+u_offset1,s
lda ANIM_POSITION+u_offset1,s
asla
ldx a,x
bne animNotFinishedMoneyMothership
clr ANIM_POSITION+u_offset1,s
noAnimChangeEnemyMoneyMothership
lda ANIM_POSITION+u_offset1,s
lsla
animNotFinishedMoneyMothership
ldu #MoneyMothershipAnim
jmp endAllBiggyBank1
;
;***************************************************************************
;
moneySuckerBehaviourBank1 ;#isfunction
lda playSoundFlags
anda #%11000000
bne noSoundEffect1
ldx sfx_pointer_1
bne noNewSuckerSound
ldx #MegafiendPresentData ; spawnXData
stx sfx_pointer_1
noSoundEffect1
noNewSuckerSound
; move right
; col detect with player
lda Vec_Loop_Count+1
anda #1
beq noposaddms
lda X_POS +u_offset1,s
adda #1
sta X_POS +u_offset1,s
cmpa #120
blt noposaddms
lda diverseFlags
anda #$ff-BIT_BIG_ENEMY_IN_PLAY
sta diverseFlags
ldd #0
std suckerAddress
REPLACE_1_2_destroyEnemyObject_varFrom1_3
ldx #0 ; destroyEnemyObject
jmp jmpBankIRQ3X
noposaddms
dec MONEY_SUCK_TIMER+u_offset1,s
bpl noNewSuck
lda #MONEY_SUCK_WAIT ; such each half second
sta MONEY_SUCK_TIMER+u_offset1,s
sts tmp1_tmp ;StringOutputBuffer_6
lds #MY_STACK ; CBFC - allow subroutines
REPLACE_1_2_suckRandomMoney_varFrom0_1
ldx #0
jsr jsrBank2_from1_SHIFT ; jsrBank0X ; suckRandomMoney
lds tmp1_tmp ;StringOutputBuffer_6 d
noNewSuck
ldx #MoneySuckerBaseAnim
tst animDelayCounter
bpl noAnimChangeEnemyMoneySucker
inc ANIM_POSITION+u_offset1,s
lda ANIM_POSITION+u_offset1,s
asla
ldx a,x
bne animNotFinishedMoneySucker
clr ANIM_POSITION+u_offset1,s
noAnimChangeEnemyMoneySucker
lda ANIM_POSITION+u_offset1,s
lsla
animNotFinishedMoneySucker
ldu #MoneySuckerBaseAnim
jmp endAllBiggyBank1
;
;***************************************************************************
;
megaFiendBehaviourBank1 ;#isfunction
lda playSoundFlags
anda #%11000000
bne noSoundEffect2
ldx sfx_pointer_1
bne noNewMegaSound
ldx #MegafiendPresentData ; spawnXData
stx sfx_pointer_1
noSoundEffect2
noNewMegaSound
; move right
ldb #OBJECT_SCALE
stb VIA_t1_cnt_lo
lda STAY_HERE_LOOP_COUNTER+u_offset1,s
bne noposaddms_mf2
lda Vec_Loop_Count+1
anda #1
beq noposaddms_mf
lda X_POS +u_offset1,s
adda #1
sta X_POS +u_offset1,s
cmpa #120
blt noposaddms_mf
lda diverseFlags
anda #$ff-BIT_BIG_ENEMY_IN_PLAY
sta diverseFlags
REPLACE_1_2_destroyEnemyObject_varFrom1_4
ldx #0 ; destroyEnemyObject
jmp jmpBankIRQ3X
noposaddms_mf
lda X_POS +u_offset1,s
cmpa #-100 ; first stop
beq initMegaLaser
cmpa #-35 ; stop
beq initMegaLaser
cmpa #35 ; stop
beq initMegaLaser
cmpa #100 ; stop
beq initMegaLaser
bra normalGoOnBiggi
initMegaLaser
lda #100 ; 2 seconds
sta STAY_HERE_LOOP_COUNTER+u_offset1,s
clr LASER_X+u_offset1,s
normalGoOnBiggi
ldx #MegaFiendAnim
tst animDelayCounter
bpl noAnimChangeEnemyMegaFiend
inc ANIM_POSITION+u_offset1,s
lda ANIM_POSITION+u_offset1,s
asla
ldx a,x
bne animNotFinishedMegaFiend
clr ANIM_POSITION+u_offset1,s
noAnimChangeEnemyMegaFiend
lda ANIM_POSITION+u_offset1,s
lsla
animNotFinishedMegaFiend
ldu #MegaFiendAnim
jmp endAllBiggyBank1
; stay put and fire
noposaddms_mf2
dec STAY_HERE_LOOP_COUNTER+u_offset1,s
tst BACK_OR_FORTH+u_offset1,s
bne goForth
ldb LASER_X+u_offset1,s
subb #19
bvc doit_now
inc BACK_OR_FORTH+u_offset1,s
bra npLaserReset
goForth
ldb LASER_X+u_offset1,s
addb #19
bvc doit_now
clr BACK_OR_FORTH+u_offset1,s
bra npLaserReset
doit_now
stb LASER_X+u_offset1,s
npLaserReset
ldb LASER_X+u_offset1,s
MY_MOVE_TO_A_END
clra
MY_MOVE_TO_D_START_NO_SHIFT
lda gameScale
sta VIA_t1_cnt_lo
MY_MOVE_TO_A_END
lda #$7f
_INTENSITY_A
lda #-96 ;PLAYER_YPOS - $e0
ldb #0
STA <VIA_port_a ;Store Y in D/A register
STb <VIA_port_b ;Enable mux ; hey dis si "break integratorzero 440"
lda #$ee ; light ON, ZERO OFF
sta <VIA_cntl ; [4] ZERO disabled, and BLANK disabled
if IS_VIA_FAULTY_RESISTENT = 1
incb
stb <VIA_port_b ;Disable mux
decb
else
INC <VIA_port_b ;Disable mux
endif
STB <VIA_port_a ;Store X in D/A register
STb <VIA_t1_cnt_hi ;enable timer
MY_MOVE_TO_A_END
lda #DEFAULT_ENEMY_INTENSITY
_INTENSITY_A
clra
lda #$ce ; light ON, ZERO OFF
sta <VIA_cntl ; [4] ZERO disabled, and BLANK disabled
lda #96 ;PLAYER_YPOS - $e0
ldb #0
STA <VIA_port_a ;Store Y in D/A register
STb <VIA_port_b ;Enable mux ; hey dis si "break integratorzero 440"
NOP
if IS_VIA_FAULTY_RESISTENT = 1
incb
stb <VIA_port_b ;Disable mux
decb
else
INC <VIA_port_b ;Disable mux
endif
STB <VIA_port_a ;Store X in D/A register
STb <VIA_t1_cnt_hi ;enable timer
MY_MOVE_TO_A_END
_ZERO_VECTOR_BEAM
ldb X_POS +u_offset1,s
sex
addd #$80
std tmp4_tmp
ldd Y_POS+u_offset1,s
MY_MOVE_TO_D_START_NO_SHIFT
ldb #OBJECT_SCALE
stb <VIA_t1_cnt_lo
; col detect
; first check "player"
ldb playerXpos
sex
addd #$80
; compare two 160 bit positions from 0 - 256
subd tmp4_tmp
bpl noNeggi
negb
noNeggi
RADIUS_BIG_LASER = 30
cmpb #RADIUS_BIG_LASER
bhi testForScoopies
if UNDYING = 1
bra testForScoopies
endif
lda playerBonusActive
bita #BITFIELD_SHIELD ; shield saved player (from all shots)
bne testForScoopies ; shield protects
; armor does not <really> protect!
if SHORT_INVULNERABILITY
bita #BITFIELD_ARMOR
beq playerCaughtShot2 ; armor saved player for one shot
SWITCH_TO_SHORT_SHIELD
bra testForScoopies
playerCaughtShot2
endif
lda #1 ; TODO strength of enemy bullet
sta playerWasHitFor
testForScoopies
; check scoopies
if SCOOPIE_DONT_DIE = 1
jmp normalGoOnBiggi
endif
; scoopy left side
ldx scoopEnemy2
beq testRightScoopy
LEFT_SCOOPYMIDDLE_OFFSET = -13
ldb playerXpos
sex
addd #$80
addd #LEFT_SCOOPYMIDDLE_OFFSET
; compare two 16 bit positions from 0 - 256
subd tmp4_tmp
bpl noNeggi_2
negb
noNeggi_2
cmpb #RADIUS_BIG_LASER
bhi testRightScoopy
ldd #0
std scoopEnemy2
lda #2
sta explosionSound
inc enemyCount ; because after explosion, the remove enemy - does again a "dec enemy count" this would screw the counting
; since scoopies were removed before!
lda #-1
sta ALL_PURPOSE ,x ; negative means this enemy is an explosion
REPLACE_1_2_enemyExplosionBehaviour_varFrom1_4
ldd #0 ; enemyExplosionBehaviour
; ldd #enemyExplosionBehaviour
std BEHAVIOUR ,x ; negative means this enemy is an explosion
clr ANIM_POSITION ,x
ldu ENEMY_STRUCT ,x
tfr x,y
REPLACE_1_2_getUPointer1_varFrom1_1
ldx #0 ;
jmp jmpBank3_from1
getUPointer1Back
tfr y,x
; those are in BANK 3
; and can not be addressed from here!
; ldu WAIT_ANIM_TABLE, u
; ldu ,u
stu SMARTLIST_ORG ,x
lda #9 ; scale
sta EXPLOSION_SCALE ,x
lda #$7f ; intensity
sta EXPLOSION_INTENSITY ,x
testRightScoopy
ldx scoopEnemy1
lbeq normalGoOnBiggi
RIGHT_SCOOPYMIDDLE_OFFSET = 13
ldb playerXpos
sex
addd #$80
addd #RIGHT_SCOOPYMIDDLE_OFFSET
; compare two 16 bit positions from 0 - 256
subd tmp4_tmp
bpl noNeggi_3
negb
noNeggi_3
cmpb #RADIUS_BIG_LASER
lbhi normalGoOnBiggi
ldd #0
std scoopEnemy1
lda #2
sta explosionSound
inc enemyCount ; because after explosion, the remove enemy - does again a "dec enemy count" this would screw the counting
; since scoopies were removed before!
lda #-1
sta ALL_PURPOSE ,x ; negative means this enemy is an explosion
REPLACE_1_2_enemyExplosionBehaviour_varFrom1_5
ldd #0 ; enemyExplosionBehaviour
; ldd #enemyExplosionBehaviour
std BEHAVIOUR ,x ; negative means this enemy is an explosion
clr ANIM_POSITION ,x
ldu ENEMY_STRUCT ,x
tfr x,y
REPLACE_1_2_getUPointer2_varFrom1_1
ldx #0 ;
jmp jmpBank3_from1
getUPointer2Back
tfr y,x
stu SMARTLIST_ORG ,x
lda #9 ; scale
sta EXPLOSION_SCALE ,x
lda #$7f ; intensity
sta EXPLOSION_INTENSITY ,x
jmp normalGoOnBiggi
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
PLAYER_RADIUS_X = 15
PLAYER_RADIUS_Y = 22
fallCashBehaviourBank1 ;#isfunction
; col detect with player
lda Y_POS +u_offset1,s
cmpa #$80+PLAYER_RADIUS_Y
bgt notHit_Cash
ldb X_POS +u_offset1,s
subb playerXpos
bpl noNegCash
negb
noNegCash
cmpb #PLAYER_RADIUS_X
bhi notHit_Cash
lda playSoundFlags
anda #%11000000
bne nosfx6
ldx #collectDiamondData ;collectDiamondData
stx sfx_pointer_1
nosfx6
ADD_CASH 42
destroyEnemyObjectb1internal
REPLACE_1_2_destroyEnemyObject_varFrom1_6
ldx #0 ; destroyEnemyObject
jmp jmpBankIRQ3X
; set HP = 0
notHit_Cash
; no shots can effect diamonds
lda Y_POS+u_offset1,s
suba #2 ; falling speed
bvs destroyEnemyObjectb1internal
sta Y_POS+u_offset1,s
lda #OBJECT_SCALE
sta <VIA_t1_cnt_lo
ldx #FallingCash
tst animDelayCounter
bpl noAnimChangeEnemyCash
inc ANIM_POSITION+u_offset1,s
lda ANIM_POSITION+u_offset1,s
asla
ldx a,x
bne animNotFinishedCash
clr ANIM_POSITION+u_offset1,s
noAnimChangeEnemyCash
lda ANIM_POSITION+u_offset1,s
lsla
animNotFinishedCash
ldu #FallingCash
ldu a,u
tst lightningOn
beq normalEndMacro2Cash
clr lightningOn
lda #DEFAULT_ENEMY_INTENSITY
MY_MOVE_TO_B_END
_INTENSITY_A
bra goOn2
normalEndMacro2Cash
MY_MOVE_TO_B_END
goOn2
sts backJump ; introWaveCurrentPattern ;tmp_debug +2;StringOutputBuffer_6
lds #MY_STACK ; CBFC - allow subroutines
jsr SMVB_drawSmart
lds backJump ; introWaveCurrentPattern ;tmp_debug +2;StringOutputBuffer_6
REPLACE_1_2_backBank3Behaviour_varFrom1_7
ldx #0 ; backBank3Behaviour
jmp jmpBankIRQ3X