-
Notifications
You must be signed in to change notification settings - Fork 0
/
collision_detection.dasm
52 lines (47 loc) · 1.12 KB
/
collision_detection.dasm
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
;;;; COLLISION DETECTOR
;
; works by putting object data into the following 0 page variables
;
; collision_0_x byte
; collision_0_y byte
; collision_0_w byte
; collision_0_h byte
; collision_1_x byte
; collision_1_y byte
; collision_1_w byte
; collision_1_h byte
;
; returns ff (true) or 00 (false) in accumulator
; the detect_collision subroutine was moved to player_bullets.asm
; saving over 12 cycles per usage
player_collision_detect: subroutine
; returns true/false in a
lda state_iframes
bne .no_collision
clc
lda collision_0_x
adc collision_0_w
bcs .no_collision ; make sure x+w is not less than x
cmp player_x_hi
bcc .no_collision
clc
lda player_coll_x
adc #$0b ; player width
cmp collision_0_x
bcc .no_collision
clc
lda collision_0_y
adc collision_0_h
cmp player_coll_y
bcc .no_collision
clc
lda player_coll_y
adc #$03 ; player height
cmp collision_0_y
bcc .no_collision
.collision
lda #$ff
rts
.no_collision
lda #$00
rts