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
|
.globl _cpc_CollSp
_cpc_CollSp::
;first parameter sprite
;second parameter value
ld hl,#2
add hl,sp
;ld ix,#2
;add ix,sp
; ld e,2 (ix)
; ld d,3 (ix)
;A=x value
; ld l,0 (ix)
; ld h,1 (ix)
ld e,(hl)
inc hl
ld d,(hl)
push de
inc hl
ld e,(hl)
inc hl
ld d,(hl)
push de
pop iy ;ix sprite2 data
pop ix ;iy sprite1 data
;Sprite coords & sprite dims
;COLISION_sprites
;entran sprite1 y sprite 2 y se actualizan los datos
;ix apunta a sprite1
;iy apunta a sprite2
;coordenadas
ld l,8 (ix)
ld h,9 (ix)
LD (#SPR2X),HL
ld l,8 (iy)
ld h,9 (iy)
LD (#SPR1X),HL
;dimensiones sprite 1
ld l,0 (ix)
ld h,1 (ix)
ld b,(hl)
inc hl
ld c,(hl)
;dimensiones sprite 12
ld l,0 (iy)
ld h,1 (iy)
ld d,(hl)
inc hl
ld e,(hl)
;ld e,(ix+6)
;ld d,(ix+7)
;ld de,DIMENSIONES_SP_PPAL ;dimensiones sprite 2
;ld bc,DIMENSIONES_SP_PPAL ;dimensiones sprite 1
CALL TOCADO
;RET NC ;vuelve si no hay colision
ld h,#0
JP nc,no_colision
;Aquí hay colisión
ld l,#1
RET
no_colision:
ld l,h
ret
TOCADO:
LD HL,#SPR2X
LD A,(#SPR1X)
CP (HL)
jp C,C1
LD A,(HL)
ADD A,B ;alto del sprite1
LD B,A
LD A,(#SPR1X)
SUB B
RET NC
jp COMPROBAR
C1:
ADD A,D ;alto sprite2
LD D,A
LD A,(HL)
SUB D
RET NC
COMPROBAR:
INC HL
LD A,(#SPR1Y)
CP (HL)
jp C,C2
LD A,(HL)
ADD A,C
LD C,A
LD A,(#SPR1Y)
SUB C
RET
C2:
ADD A,E
LD E,A
LD A,(HL)
SUB E
RET
SPR1X:
.db 0
SPR1Y:
.db 0
SPR2X:
.db 0
SPR2Y:
.db 0
|