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
|
CheckWarpCollision::
; Is this tile a warp?
ld a, [wPlayerStandingTile]
cp COLL_PIT
jr z, .warp
cp COLL_PIT_68
jr z, .warp
and $f0
cp HI_NYBBLE_WARPS
jr z, .warp
and a
ret
.warp
scf
ret
CheckDirectionalWarp::
; If this is a directional warp, clear carry (press the designated button to warp).
; Else, set carry (immediate warp).
ld a, [wPlayerStandingTile]
cp COLL_WARP_CARPET_DOWN
jr z, .directional
cp COLL_WARP_CARPET_LEFT
jr z, .directional
cp COLL_WARP_CARPET_UP
jr z, .directional
cp COLL_WARP_CARPET_RIGHT
jr z, .directional
scf
ret
.directional
xor a
ret
CheckWarpFacingDown:
ld de, 1
ld hl, .blocks
ld a, [wPlayerStandingTile]
call IsInArray
ret
.blocks
db COLL_DOOR
db COLL_DOOR_79
db COLL_STAIRCASE
db COLL_STAIRCASE_73
db COLL_CAVE
db COLL_CAVE_74
db COLL_WARP_PANEL
db COLL_DOOR_75
db COLL_DOOR_7D
db -1
CheckGrassCollision::
ld a, [wPlayerStandingTile]
ld hl, .blocks
ld de, 1
call IsInArray
ret
.blocks
db COLL_CUT_08
db COLL_TALL_GRASS
db COLL_LONG_GRASS
db COLL_CUT_28
db COLL_WATER
db COLL_GRASS_48
db COLL_GRASS_49
db COLL_GRASS_4A
db COLL_GRASS_4B
db COLL_GRASS_4C
db -1
CheckCutCollision:
ld a, c
ld hl, .blocks
ld de, 1
call IsInArray
ret
.blocks
db COLL_CUT_TREE
db COLL_CUT_TREE_1A
db COLL_TALL_GRASS_10
db COLL_TALL_GRASS
db COLL_LONG_GRASS
db COLL_LONG_GRASS_1C
db -1
GetWarpSFX::
ld a, [wPlayerStandingTile]
ld de, SFX_ENTER_DOOR
cp COLL_DOOR
ret z
ld de, SFX_WARP_TO
cp COLL_WARP_PANEL
ret z
ld de, SFX_EXIT_BUILDING
ret
|