summaryrefslogtreecommitdiff
path: root/arm9/modules/05/asm/mod05_021F46C8.s
blob: e23f3da625cdab6ace16f8368930cfbf489882ce (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
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