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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
|
.include "asm/macros.inc"
.include "global.inc"
.section .text
.balign 4, 0
thumb_func_start MOD05_021F46C8
MOD05_021F46C8: ; 0x021F46C8
push {r4, r5, r6, lr}
add r5, r1, #0
mov r1, #0xca
lsl r1, r1, #2
add r6, r0, #0
bl AllocFromHeap
mov r2, #0xca
mov r1, #0
lsl r2, r2, #2
add r4, r0, #0
bl memset
mov r2, #0x63
mov r0, #0
add r1, r4, #0
lsl r2, r2, #2
str r0, [r4]
add r0, r6, #0
add r1, #0xc
add r2, r4, r2
bl FUN_02012944
mov r1, #0xc3
lsl r1, r1, #2
str r0, [r4, r1]
add r0, r1, #4
str r5, [r4, r0]
add r0, r4, #0
pop {r4, r5, r6, pc}
thumb_func_start MOD05_021F4704
MOD05_021F4704: ; 0x021F4704
push {r4, lr}
add r4, r0, #0
ldr r1, [r4]
cmp r1, #1
bne _021F4712
bl MOD05_021F491C
_021F4712:
mov r0, #0xc3
lsl r0, r0, #2
ldr r0, [r4, r0]
bl FUN_02012974
add r0, r4, #0
bl FreeToHeap
pop {r4, pc}
thumb_func_start MOD05_021F4724
MOD05_021F4724: ; 0x021F4724
push {r4, lr}
add r4, r0, #0
ldr r0, [r4]
cmp r0, #0
beq _021F4732
bl GF_AssertFail
_021F4732:
mov r0, #0x31
lsl r0, r0, #4
ldr r0, [r4, r0]
ldr r1, _021F47A4 ; =MOD05_021F48CC
add r2, r4, #0
bl MOD05_021F4624
mov r2, #0xc5
lsl r2, r2, #2
str r0, [r4, r2]
ldr r0, _021F47A8 ; =MOD05_021F47B4
add r1, r4, #0
add r2, #0xec
bl FUN_0200CA44
mov r2, #0xc7
lsl r2, r2, #2
str r0, [r4, r2]
ldr r0, _021F47AC ; =MOD05_021F48BC
add r1, r4, #0
add r2, #0xe4
bl FUN_0200CA60
mov r2, #0x32
lsl r2, r2, #4
str r0, [r4, r2]
ldr r0, _021F47B0 ; =MOD05_021F48F0
add r1, r4, #0
add r2, #0xe0
bl FUN_0200CA60
mov r1, #0xc9
lsl r1, r1, #2
str r0, [r4, r1]
add r0, r4, #0
mov r2, #6
add r0, #0xc
mov r1, #0
lsl r2, r2, #6
bl memset
mov r2, #0x63
lsl r2, r2, #2
add r0, r4, r2
mov r1, #0
sub r2, #0xc
bl memset
mov r0, #1
str r0, [r4]
mov r0, #0
str r0, [r4, #8]
mov r0, #0x61
lsl r0, r0, #4
bl PlaySE
pop {r4, pc}
.balign 4, 0
_021F47A4: .word MOD05_021F48CC
_021F47A8: .word MOD05_021F47B4
_021F47AC: .word MOD05_021F48BC
_021F47B0: .word MOD05_021F48F0
thumb_func_start MOD05_021F47B4
MOD05_021F47B4: ; 0x021F47B4
push {r4, lr}
add r4, r1, #0
ldr r0, [r4, #8]
cmp r0, #3
bhi _021F483C
add r0, r0, r0
add r0, pc
ldrh r0, [r0, #6]
lsl r0, r0, #0x10
asr r0, r0, #0x10
add pc, r0
_021F47CA: ; jump table
.short _021F47D2 - _021F47CA - 2 ; case 0
.short _021F47DE - _021F47CA - 2 ; case 1
.short _021F480A - _021F47CA - 2 ; case 2
.short _021F4830 - _021F47CA - 2 ; case 3
_021F47D2:
mov r0, #3
str r0, [r4, #4]
ldr r0, [r4, #8]
add r0, r0, #1
str r0, [r4, #8]
pop {r4, pc}
_021F47DE:
ldr r0, [r4, #4]
sub r0, r0, #1
str r0, [r4, #4]
mov r0, #0xc3
lsl r0, r0, #2
ldr r0, [r4, r0]
bl FUN_02012988
ldr r1, [r4, #4]
mov r2, #3
sub r1, r2, r1
bl MOD05_021F4878
ldr r0, [r4, #4]
cmp r0, #0
bgt _021F483C
mov r0, #3
str r0, [r4, #4]
ldr r0, [r4, #8]
add r0, r0, #1
str r0, [r4, #8]
pop {r4, pc}
_021F480A:
ldr r0, [r4, #4]
sub r0, r0, #1
str r0, [r4, #4]
mov r0, #0xc3
lsl r0, r0, #2
ldr r0, [r4, r0]
bl FUN_02012988
ldr r1, [r4, #4]
mov r2, #3
bl MOD05_021F4878
ldr r0, [r4, #4]
cmp r0, #0
bgt _021F483C
ldr r0, [r4, #8]
add r0, r0, #1
str r0, [r4, #8]
pop {r4, pc}
_021F4830:
add r0, r4, #0
bl MOD05_021F491C
mov r0, #0
bl G3X_SetHOffset
_021F483C:
pop {r4, pc}
.balign 4, 0
thumb_func_start MOD05_021F4840
MOD05_021F4840: ; 0x021F4840
push {r4, lr}
ldr r1, _021F4870 ; =0x04000006
ldrh r4, [r1]
mov r1, #0xc3
lsl r1, r1, #2
ldr r0, [r0, r1]
bl FUN_0201299C
cmp r4, #0xc0
bge _021F486E
add r3, r4, #1
cmp r3, #0xc0
blt _021F485C
sub r3, #0xc0
_021F485C:
ldr r1, _021F4874 ; =0x04000004
ldrh r2, [r1]
mov r1, #2
tst r1, r2
beq _021F486E
lsl r1, r3, #1
ldrh r0, [r0, r1]
bl G3X_SetHOffset
_021F486E:
pop {r4, pc}
.balign 4, 0
_021F4870: .word 0x04000006
_021F4874: .word 0x04000004
thumb_func_start MOD05_021F4878
MOD05_021F4878: ; 0x021F4878
push {r3, r4, r5, r6, r7, lr}
add r5, r0, #0
lsl r0, r1, #1
add r0, r1, r0
add r1, r2, #0
mov r4, #1
bl _s32_div_f
neg r1, r0
lsl r1, r1, #0x10
lsr r1, r1, #0x10
lsl r0, r0, #0x10
mov r6, #0
str r1, [sp]
lsr r7, r0, #0x10
_021F4896:
add r0, r6, #0
mov r1, #0xa
bl _s32_div_f
cmp r1, #0
bne _021F48A6
mov r0, #1
eor r4, r0
_021F48A6:
cmp r4, #0
beq _021F48AE
strh r7, [r5]
b _021F48B2
_021F48AE:
ldr r0, [sp]
strh r0, [r5]
_021F48B2:
add r6, r6, #1
add r5, r5, #2
cmp r6, #0xc0
blt _021F4896
pop {r3, r4, r5, r6, r7, pc}
thumb_func_start MOD05_021F48BC
MOD05_021F48BC: ; 0x021F48BC
mov r2, #0xc6
ldr r3, _021F48C8 ; =G3X_SetHOffset
mov r0, #0
lsl r2, r2, #2
str r0, [r1, r2]
bx r3
.balign 4, 0
_021F48C8: .word G3X_SetHOffset
thumb_func_start MOD05_021F48CC
MOD05_021F48CC: ; 0x021F48CC
ldr r3, _021F48D4 ; =MOD05_021F48D8
add r0, r1, #0
bx r3
nop
_021F48D4: .word MOD05_021F48D8
thumb_func_start MOD05_021F48D8
MOD05_021F48D8: ; 0x021F48D8
push {r3, lr}
ldr r1, [r0]
cmp r1, #1
bne _021F48EE
mov r1, #0xc6
lsl r1, r1, #2
ldr r1, [r0, r1]
cmp r1, #1
bne _021F48EE
bl MOD05_021F4840
_021F48EE:
pop {r3, pc}
thumb_func_start MOD05_021F48F0
MOD05_021F48F0: ; 0x021F48F0
ldr r3, _021F48F8 ; =MOD05_021F48FC
add r0, r1, #0
bx r3
nop
_021F48F8: .word MOD05_021F48FC
thumb_func_start MOD05_021F48FC
MOD05_021F48FC: ; 0x021F48FC
push {r4, lr}
add r4, r0, #0
ldr r0, [r4]
cmp r0, #1
bne _021F4918
mov r0, #0xc3
lsl r0, r0, #2
ldr r0, [r4, r0]
bl FUN_020129B4
mov r0, #0xc6
mov r1, #1
lsl r0, r0, #2
str r1, [r4, r0]
_021F4918:
pop {r4, pc}
.balign 4, 0
thumb_func_start MOD05_021F491C
MOD05_021F491C: ; 0x021F491C
push {r4, lr}
add r4, r0, #0
mov r0, #0xc5
lsl r0, r0, #2
ldr r0, [r4, r0]
bl MOD05_021F4648
mov r0, #0xc5
mov r1, #0
lsl r0, r0, #2
str r1, [r4, r0]
add r0, #8
ldr r0, [r4, r0]
bl FUN_0200CAB4
mov r0, #0xc7
mov r1, #0
lsl r0, r0, #2
str r1, [r4, r0]
add r0, r0, #4
ldr r0, [r4, r0]
bl FUN_0200CAB4
mov r0, #0x32
mov r1, #0
lsl r0, r0, #4
str r1, [r4, r0]
add r0, r0, #4
ldr r0, [r4, r0]
bl FUN_0200CAB4
mov r0, #0xc9
mov r1, #0
lsl r0, r0, #2
str r1, [r4, r0]
str r1, [r4]
pop {r4, pc}
.balign 4, 0
|