aboutsummaryrefslogtreecommitdiff
path: root/enemiesattacks/grab.gbasm
blob: a3d71fad4c4f89f87307f885e33ac17e670c8f49 (plain)
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
Grab_sight_check: ; BC = XY of the enemy. D = direction (must be unchanged). Direction to face in E (or 0 if not)
	LD E, $00

	LD A, L
	AND $f0
	ADD $09
	LD L, A
	LD A, $00
	CP (HL)
	JR Z, =.end

	.vertical:
	LD A, $mem_bunny_x
	CP B
	JR NZ, =.horizontal

	; up
	LD A, $mem_bunny_y
	SUB $02
	CP C
	LD E, $enum_direction_down
	JR Z, =.end

	; down
	ADD $04
	CP C
	LD E, $enum_direction_up
	JR Z, =.end

	LD E, $00
	JR =.end

	.horizontal:

	LD A, $mem_bunny_y
	CP C
	LD E, $00
	JR NZ, =.end

	; left
	LD A, $mem_bunny_x
	SUB $02
	CP B
	LD E, $enum_direction_right
	JR Z, =.end

	; right
	ADD $04
	CP B
	LD E, $enum_direction_left
	JR Z, =.end

	LD E, $00

	LD A, E
	CP $00
	RET Z

	.end:
	PUSH BC
	PUSH DE
	LD D, E
	LD A, $01
	.ADD_A_TO_DIRECTION_BC
	CALL =Is_Collisionable
	POP DE
	POP BC

	CP $00
	RET Z

	LD E, $00
	RET

Grab_Enemy_Attack: ; Entity in HL (whatever alignment), Direction to face in E. Result in BC (XY), Direction in D
	LD A, D
	AND $f0
	SWAP A
	LD D, A
	LD A, E
	DEC A
	DEC D
	XOR D
	INC D
	CP $00
	JR Z, =.attack
	BIT 1, A
	JR NZ, =.attack

	LD D, E
	LD A, D
	SWAP A
	AND $70
	OR D
	LD D, A
	RET

	.attack:
	LD A, E
	SWAP A
	AND $70
	OR E
	LD D, A
	LD A, L
	AND $f0
	OR $0a
	LD L, A
	LD (HL), $01

	PUSH BC
	LD A, $mem_bunny_direction
	AND $08
	LD B, A
	LD A, $mem_bunny_flags
	AND $01
	OR B
	CP $09
	POP BC
	RET Z

	PUSH DE
	PUSH BC

	LD D, E	
	LD A, E
	DEC A
	XOR $01
	INC A
	OR $08
	AND $0f
	LD B, A
	LD A, $mem_bunny_direction
	AND $f0
	OR B
	LD $mem_bunny_direction, A
	LD A, $06
	LD $mem_bunny_animation, A

	POP BC
	POP DE

	.SET_SOUND_EFFECT =_sound_effect_Grab

	LD A, L
	AND $f0
	ADD $09
	LD L, A
	DEC (HL)

	RET