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
|
#include "global.h"
#include "utils.h"
#include "structures.h"
#include "functions.h"
extern u16 gUnk_081092D4;
extern u8 gUnk_081094CE;
extern u8 gUnk_02036AD8;
extern u8 gUnk_02036A58;
extern void* gUnk_081092AC[];
typedef struct {
u8 filler0[12][16];
} VStruct;
extern VStruct gUnk_0810942E[];
extern u32 gUnk_0810926C[];
typedef struct {
u8 unk0;
u8 unk1;
} UStruct;
void sub_0805F820(WStruct* r0, u32* r1);
u32 sub_0805F7DC(u32 r0, WStruct* r1) {
u32 temp;
u32 temp2;
u32* offset;
if (r1->unk4 <= r1->unk6)
return 0;
offset = sub_0805F25C(r0);
temp = r1->unk6;
if ((r0 >> 8) > 4) {
sub_0805F820(r1, offset);
offset += 0x10;
}
sub_0805F820(r1, offset);
if (r1->unk6 > r1->unk4) {
r1->unk6 = r1->unk4;
}
return r1->unk6 - temp;
}
void sub_0805F820(WStruct* r0, u32* r1) {
u32 bVar1;
u32 bVar2;
s32 uVar3;
s32 uVar4;
void* uVar5;
u32 uVar6;
u32 uVar7;
u8* puVar8;
u8* temp;
void* temp2;
VStruct* temp3;
if (r0->unk4 - r0->unk6 > 0) {
sub_08002724(r1, &gUnk_02036A58);
if (r0->unk1 == 0) {
u32 tmp = sub_0805F7A0(*r1);
uVar6 = tmp & 0xf;
uVar3 = tmp >> 8;
} else {
uVar6 = 0;
uVar3 = 8;
}
uVar4 = r0->unk4 - r0->unk6;
if (uVar4 > 8) {
uVar4 = 8;
}
if (uVar4 < uVar3) {
uVar3 = uVar4;
}
puVar8 = &gUnk_02036A58 + uVar6;
temp2 = r0->unk8;
temp = gUnk_0810942E[r0->unk3].filler0[r0->unk2 * 2];
uVar7 = r0->unk6;
r0->unk6 += uVar3;
if (r0->unk0 / 16 != 1) {
while (uVar3-- > 0) {
sub_080026C4(puVar8, temp2, temp, uVar7);
puVar8++;
uVar7++;
}
} else {
while (uVar3-- > 0) {
sub_080026F2(puVar8, temp2, temp, uVar7);
puVar8++;
uVar7++;
}
}
}
}
void sub_0805F8E4(u32 r0, WStruct* r1) {
u32 old = r1->unk1;
r1->unk1 = 1;
sub_0805F7DC(r0, r1);
r1->unk1 = old;
}
u32 sub_0805F8F8(u32 idx) {
u8* temp = &gUnk_0810942E[idx].filler0[10][10];
return gUnk_0810926C[*temp];
}
void sub_0805F918(u32 idx, u32 idx2, void* dest) {
u32 i;
void* puVar1;
u8* puVar2;
u32 j;
u32 idx3;
u8* temp;
u8* temp2;
MemFill32(sub_0805F8F8(idx2), &gUnk_02036AD8, 0xe0);
puVar1 = gUnk_081092AC[idx];
temp = &gUnk_081094CE + idx2 * 0xc0;
idx3 = 0;
for (i = 0; i < 3; i++) {
puVar2 = &gUnk_02036A58;
sub_08002724(puVar1, &gUnk_02036A58);
puVar1 += 0x40;
for (j = 0; j < 8; j++) {
sub_080026C4(puVar2, &gUnk_02036AD8, temp, idx3);
puVar2++;
idx3++;
}
}
LoadResourceAsync((const void*)&gUnk_02036AD8, (u32)dest, 0xe0);
}
u32 sub_0805F9A0(u32 r0) {
if (gUnk_02000000->gameLanguage == 0) {
u16* val = &gUnk_081092D4;
u32 i = 0;
do {
if (*val == r0) {
return i + 0x800;
}
i++;
val++;
} while (*val != 0);
} else if (r0 == 0x31a) {
r0 = 1;
r0 &= 0xff;
}
return (r0 & 0xff) + 0x800;
}
|