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
151
152
|
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
.thumb
.macro transition_tile tile:req, src_layer:req dest_layer:req
.short \tile
.byte \src_layer, \dest_layer
.endm
gUnk_08016984:: @ 08016984
.incbin "code_08016984/gUnk_08016984.bin"
GetNextScriptCommandHalfword::
ldrh r0, [r0]
bx lr
GetNextScriptCommandHalfwordAfterCommandMetadata::
ldrh r0, [r0, #2]
bx lr
GetNextScriptCommandWord::
ldrh r1, [r0]
ldrh r0, [r0, #2]
lsls r0, r0, #0x10
orrs r0, r1
bx lr
GetNextScriptCommandWordAfterCommandMetadata::
ldrh r1, [r0, #2]
ldrh r0, [r0, #4]
lsls r0, r0, #0x10
orrs r0, r1
bx lr
.align 2, 0
gShakeOffsets::
.byte 1, -1, 0, 1, 1, 0, 0, 1, -1, -1, 1, 0, -1, 1, 0, 0
.byte 2, -1, 1, -2, 0, -1, -1, 0, -1, 1, -1, 2, 0, 0, 1, 1
.byte 2, -1, 2, -2, -2, 2, -1, 3, -3, -1, -2, 1, 1, -3, -1, -1
.byte 3, -2, 2, 0, 0, -1, -2, 3, -3, 2, -1, 0, 0, -3, 2, 0
.byte 0, -1, 0, -2, 0, -1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1
.byte 2, 0, 1, 0, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, 1, 0
UpdateSpriteForCollisionLayer:: @ 0x08016A04
movs r1, #0x38
ldrb r1, [r0, r1]
lsls r1, r1, #1
add r3, pc, #0x1C
adds r1, r1, r3
movs r3, #0xc0
ldrb r2, [r0, #0x19]
bics r2, r3
ldrb r3, [r1]
orrs r2, r3
strb r2, [r0, #0x19]
movs r3, #0xc0
ldrb r2, [r0, #0x1b]
bics r2, r3
ldrb r3, [r1, #1]
orrs r2, r3
strb r2, [r0, #0x1b]
bx lr
_08016A28:
.byte 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40
ResolveCollisionLayer::
push {r4, r5, lr}
adds r4, r0, #0
movs r5, #0x38
ldrb r0, [r4, r5]
cmp r0, #0
bne _08016A64
ldrh r0, [r4, #0x2e]
ldrh r1, [r4, #0x32]
movs r2, #2
bl GetTileTypeAtWorldCoords
movs r3, #1
cmp r0, #0
beq _08016A62
bl GetActTileForTileType
movs r3, #2
add r1, pc, #0x40
_08016A54:
adds r1, #4
ldrh r2, [r1]
cmp r2, #0
beq _08016A62
cmp r0, r2
bne _08016A54
ldrb r3, [r1, #3]
_08016A62:
strb r3, [r4, r5]
_08016A64:
adds r0, r4, #0
bl UpdateSpriteForCollisionLayer
pop {r4, r5, pc}
CheckOnLayerTransition::
push {r4, r5, lr}
adds r4, r0, #0
bl GetActTileAtEntity // tile under me
adr r1, gTransitionTiles-4
loop:
adds r1, #4 // p += 4
ldrh r2, [r1] // *(u16*)(p)
cmp r2, #0
beq not_found
cmp r2, r0
bne loop // found the tile under me?
movs r2, #0x38
ldrb r3, [r4, r2] // collision layer
ldrb r5, [r1, #2] // *(u8*)(p + 2)
cmp r3, r5 // am i on the right later?
beq not_found
ldrb r5, [r1, #3] // *(u8*)(p + 3)
strb r5, [r4, r2] // move to a new layer
not_found:
pop {r4, r5, pc}
.align 2, 0
transition_tile 0x2A, 3, 3
transition_tile 0x2D, 3, 3
transition_tile 0x2B, 3, 3
transition_tile 0x2C, 3, 3
transition_tile 0x4C, 3, 3
transition_tile 0x4E, 3, 3
transition_tile 0x4D, 3, 3
transition_tile 0x4F, 3, 3
gTransitionTiles:
transition_tile 0x0A, 2, 1
transition_tile 0x09, 2, 1
transition_tile 0x0C, 1, 2
transition_tile 0x0B, 1, 2
transition_tile 0x52, 3, 3
transition_tile 0x27, 3, 3
transition_tile 0x26, 3, 3
.short 0x0000
UpdateCollisionLayer::
push {r4, lr}
adds r4, r0, #0
bl CheckOnLayerTransition
push {r0}
adds r0, r4, #0
bl UpdateSpriteForCollisionLayer
pop {r0, r4, pc}
|