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
|
LoadStageCollisionAttributes: ; 0xe578
ld a, [wCurrentStage]
sla a
ld c, a
ld b, $0
ld hl, StageCollisionAttributesPointers
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [hli]
and a
jr z, .asm_e598
ld a, [wStageCollisionState]
sla a
ld c, a
sla a
add c
ld c, a
ld b, $0 ; bc = 6 * [wStageCollisionState]
add hl, bc
.asm_e598
ld de, wStageCollisionMapPointer
ld b, $6
.asm_e59d
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .asm_e59d
call LoadCollisionAttributes
ret
StageCollisionAttributesPointers: ; 0xe5a7
dw StageRedFieldTopCollisionAttributesPointers
dw StageRedFieldBottomCollisionAttributesPointers
dw StageUnusedCollisionAttributesPointers
dw StageUnused2CollisionAttributesPointers
dw StageBlueFieldTopCollisionAttributesPointers
dw StageBlueFieldBottomCollisionAttributesPointers
dw StageGengarBonusCollisionAttributesPointers
dw StageGengarBonusCollisionAttributesPointers
dw StageMewtwoBonusCollisionAttributesPointers
dw StageMewtwoBonusCollisionAttributesPointers
dw StageMeowthBonusCollisionAttributesPointers
dw StageMeowthBonusCollisionAttributesPointers
dw StageDiglettBonusCollisionAttributesPointers
dw StageDiglettBonusCollisionAttributesPointers
dw StageSeelBonusCollisionAttributesPointers
dw StageSeelBonusCollisionAttributesPointers
StageRedFieldTopCollisionAttributesPointers: ; 0xe5c7
db $01 ; multiple pair entries
dwb StageRedFieldTopCollisionAttributes0, Bank(StageRedFieldTopCollisionAttributes0)
dwb StageRedFieldTopCollisionMasks0, Bank(StageRedFieldTopCollisionMasks0)
dwb StageRedFieldTopCollisionAttributes1, Bank(StageRedFieldTopCollisionAttributes1)
dwb StageRedFieldTopCollisionMasks0, Bank(StageRedFieldTopCollisionMasks0)
dwb StageRedFieldTopCollisionAttributes2, Bank(StageRedFieldTopCollisionAttributes2)
dwb StageRedFieldTopCollisionMasks1, Bank(StageRedFieldTopCollisionMasks1)
dwb StageRedFieldTopCollisionAttributes3, Bank(StageRedFieldTopCollisionAttributes3)
dwb StageRedFieldTopCollisionMasks1, Bank(StageRedFieldTopCollisionMasks1)
dwb StageRedFieldTopCollisionAttributes4, Bank(StageRedFieldTopCollisionAttributes4)
dwb StageRedFieldTopCollisionMasks2, Bank(StageRedFieldTopCollisionMasks2)
dwb StageRedFieldTopCollisionAttributes5, Bank(StageRedFieldTopCollisionAttributes5)
dwb StageRedFieldTopCollisionMasks2, Bank(StageRedFieldTopCollisionMasks2)
dwb StageRedFieldTopCollisionAttributes6, Bank(StageRedFieldTopCollisionAttributes6)
dwb StageRedFieldTopCollisionMasks3, Bank(StageRedFieldTopCollisionMasks3)
dwb StageRedFieldTopCollisionAttributes7, Bank(StageRedFieldTopCollisionAttributes7)
dwb StageRedFieldTopCollisionMasks3, Bank(StageRedFieldTopCollisionMasks3)
StageRedFieldBottomCollisionAttributesPointers: ; 0xe5f8
db $00 ; single pair entry
dwb StageRedFieldBottomCollisionAttributes, Bank(StageRedFieldBottomCollisionAttributes)
dwb StageRedFieldBottomCollisionMasks, Bank(StageRedFieldBottomCollisionMasks)
StageUnusedCollisionAttributesPointers: ; 0xe5ff
; This entry is never used
db $00
StageUnused2CollisionAttributesPointers: ; 0xe600
; This entry is never used
db $00
StageBlueFieldTopCollisionAttributesPointers: ; 0xe601
db $01 ; multiple pair entries
dwb StageBlueFieldTopCollisionAttributesBallEntrance, Bank(StageBlueFieldTopCollisionAttributesBallEntrance)
dwb StageBlueFieldTopCollisionMasks, Bank(StageBlueFieldTopCollisionMasks)
dwb StageBlueFieldTopCollisionAttributes, Bank(StageBlueFieldTopCollisionAttributes)
dwb StageBlueFieldTopCollisionMasks, Bank(StageBlueFieldTopCollisionMasks)
StageBlueFieldBottomCollisionAttributesPointers: ; 0xe60e
db $00 ; single pair entry
dwb StageBlueFieldBottomCollisionAttributes, Bank(StageBlueFieldBottomCollisionAttributes)
dwb StageBlueFieldBottomCollisionMasks, Bank(StageBlueFieldBottomCollisionMasks)
StageGengarBonusCollisionAttributesPointers: ; 0xe615
db $01 ; multiple pair entries
dwb StageGengarBonusCollisionAttributesBallEntrance, Bank(StageGengarBonusCollisionAttributesBallEntrance)
dwb StageGengarBonusCollisionMasks, Bank(StageGengarBonusCollisionMasks)
dwb StageGengarBonusCollisionAttributes, Bank(StageGengarBonusCollisionAttributes)
dwb StageGengarBonusCollisionMasks, Bank(StageGengarBonusCollisionMasks)
StageMewtwoBonusCollisionAttributesPointers: ; 0xe622
db $01 ; multiple pair entries
dwb StageMewtwoBonusCollisionAttributesBallEntrance, Bank(StageMewtwoBonusCollisionAttributesBallEntrance)
dwb StageMewtwoBonusCollisionMasks, Bank(StageMewtwoBonusCollisionMasks)
dwb StageMewtwoBonusCollisionAttributes, Bank(StageMewtwoBonusCollisionAttributes)
dwb StageMewtwoBonusCollisionMasks, Bank(StageMewtwoBonusCollisionMasks)
StageMeowthBonusCollisionAttributesPointers: ; 0xe62f
db $01 ; multiple pair entries
dwb StageMeowthBonusCollisionAttributesBallEntrance, Bank(StageMeowthBonusCollisionAttributesBallEntrance)
dwb StageMeowthBonusCollisionMasks, Bank(StageMeowthBonusCollisionMasks)
dwb StageMeowthBonusCollisionAttributes, Bank(StageMeowthBonusCollisionAttributes)
dwb StageMeowthBonusCollisionMasks, Bank(StageMeowthBonusCollisionMasks)
StageDiglettBonusCollisionAttributesPointers: ; 0xe63c
db $01 ; multiple pair entries
dwb StageDiglettBonusCollisionAttributesBallEntrance, Bank(StageDiglettBonusCollisionAttributesBallEntrance)
dwb StageDiglettBonusCollisionMasks, Bank(StageDiglettBonusCollisionMasks)
dwb StageDiglettBonusCollisionAttributes, Bank(StageDiglettBonusCollisionAttributes)
dwb StageDiglettBonusCollisionMasks, Bank(StageDiglettBonusCollisionMasks)
StageSeelBonusCollisionAttributesPointers: ; 0xe649
db $01 ; multiple pair entries
dwb StageSeelBonusCollisionAttributesBallEntrance, Bank(StageSeelBonusCollisionAttributesBallEntrance)
dwb StageSeelBonusCollisionMasks, Bank(StageSeelBonusCollisionMasks)
dwb StageSeelBonusCollisionAttributes, Bank(StageSeelBonusCollisionAttributes)
dwb StageSeelBonusCollisionMasks, Bank(StageSeelBonusCollisionMasks)
LoadCollisionAttributes: ; 0xe656
; Loads the stage's collision attributes into RAM
; Input: [wStageCollisionMapPointer] = pointer to collision attributes map
; [wStageCollisionMapBank] = ROM bank of collision attributes map
ld hl, wStageCollisionMapPointer
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wStageCollisionMapBank]
ld de, wStageCollisionMap
ld bc, $0300
call FarCopyData
ld hl, wStageCollisionMapPointer
ld [hl], (wStageCollisionMap & $ff)
inc hl
ld [hl], (wStageCollisionMap >> 8)
inc hl
ld [hl], $0 ; Bank 0, because the data is in WRAM, so it doesn't matter which bank is saved
ret
|