decompile unk_020030E8.s

This commit is contained in:
Rémi Calixte
2021-06-27 09:12:49 +02:00
parent ac7337cc64
commit b27aae4db3
4 changed files with 792 additions and 1439 deletions

File diff suppressed because it is too large Load Diff

708
arm9/src/unk_020030E8.c Normal file
View File

@@ -0,0 +1,708 @@
#include "global.h"
#include "MI_memory.h"
#include "unk_02002F08.h"
#include "unk_0200CA44.h"
#include "unk_020030E8.h"
extern void *FUN_020222E8();
extern void *FUN_020222F8();
extern void *FUN_02022308();
extern void *FUN_02022310();
extern int abs(int);
THUMB_FUNC void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3)
{
GF_ASSERT(param2 * 2 + param3 <= param0->unk000[param1].unk08);
u16 *r1;
switch (param1)
{
case 0:
r1 = FUN_020222E8();
break;
case 1:
r1 = FUN_020222F8();
break;
case 2:
r1 = FUN_02022308();
break;
case 3:
r1 = FUN_02022310();
break;
default:
GF_ASSERT(FALSE);
return;
}
FUN_02003054(param0, r1 + param2, param1, param2, (u16)param3);
}
THUMB_FUNC void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest)
{
NNSG2dPaletteData *pltData;
void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id);
GF_ASSERT(ptr != NULL);
if (size == 0)
{
size = pltData->szByte;
}
MI_CpuCopy16(pltData->pRawData + offset * 2, dest, size);
FreeToHeap(ptr);
}
THUMB_FUNC void FUN_020031B8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5)
{
MI_CpuCopy16(param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk00 + param4, param5);
MI_CpuCopy16(param0->unk000[param1].unk00 + param2, param0->unk000[param3].unk04 + param4, param5);
}
THUMB_FUNC u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1)
{
return param0->unk000[param1].unk00;
}
THUMB_FUNC u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1)
{
return param0->unk000[param1].unk04;
}
THUMB_FUNC u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u16 param1, u16 param2, s16 param3, u8 param6, u8 param7, u16 param8)
{
u16 stc = param2;
u32 r6 = 0;
for (u8 r4 = 0; r4 < 14; r4++)
{
if (FUN_02003314(param1, r4) != 1)
{
continue;
}
if (FUN_02003314(param0->unk118_2, r4) != 0)
{
continue;
}
FUN_02003368(r4, &param0->unk000[r4], &param2);
FUN_020033A4(&param0->unk000[r4].unk0c, param2, param3, param6, param7, param8);
FUN_02003328(param0, r4);
if (r4 >= 4)
{
FUN_0200359C(param0, r4, 0x100);
}
else
{
FUN_0200359C(param0, r4, 0x10);
}
param2 = stc;
r6 = 1;
}
if (r6 == 1)
{
param0->unk118_2 |= param1;
if (param0->unk11a_e == 0)
{
param0->unk11a_e = 1;
param0->unk118_0 = 1;
param0->unk11c = 0;
//wtf is that?
FUN_0200CA44((void (*)(u32, struct TextPrinter *))FUN_02003464, (struct TextPrinter *)param0, (u32)(-2));
}
}
return r6;
}
THUMB_FUNC u8 FUN_02003314(u16 param0, u16 param1)
{
u32 r3 = 1;
if ((param0 & (1 << param1)) == 0)
{
r3 = 0;
}
return (u8)r3;
}
THUMB_FUNC void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1)
{
if (FUN_02003314(param0->unk11a_0, param1) != 1)
{
param0->unk11a_0 |= 1 << param1;
}
}
THUMB_FUNC void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, u16 *param2)
{
u8 r0;
if (param0 < 4)
{
r0 = (u8)(param1->unk08 >> 5);
}
else
{
r0 = (u8)(param1->unk08 >> 9);
}
u16 r4 = 0;
for (u8 i = 0; i < r0; i++)
{
r4 += 1 << i;
}
*param2 &= r4;
}
THUMB_FUNC void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, u16 param1, s16 param2, u8 param3, u8 param4, u16 param5)
{
if (param2 < 0)
{
param0->unk06_0 = abs(param2) + 2;
param0->unk02_0 = 0;
}
else
{
param0->unk06_0 = 2;
param0->unk02_0 = param2;
}
param0->unk00 = param1;
param0->unk02_6 = param3;
param0->unk02_b = param4;
param0->unk04_0 = param5;
param0->unk06_4 = param0->unk02_0;
if (param3 < param4)
{
param0->unk04_f = 0;
return;
}
param0->unk04_f = 1;
}
THUMB_FUNC void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1)
{
if (param1->unk11c == 1)
{
param1->unk11c = 0;
param1->unk11a_0 = 0;
param1->unk118_2 = 0;
param1->unk11a_e = 0;
FUN_0200CAB4((s32)param0);
return;
}
if (param1->unk118_0 == 1)
{
param1->unk11a_0 = param1->unk118_2;
FUN_02003500(param1);
FUN_02003520(param1);
if (param1->unk118_2 == 0)
{
param1->unk11a_e = 0;
FUN_0200CAB4((s32)param0);
}
}
}
THUMB_FUNC void FUN_02003500(struct UnkStruct_02002F08 *param0)
{
for (u8 i = 0; i < 4; i++)
{
FUN_02003540(param0, i, 0x10);
}
}
THUMB_FUNC void FUN_02003520(struct UnkStruct_02002F08 *param0)
{
for (u8 i = 4; i < 14; i++)
{
FUN_02003540(param0, i, 0x100);
}
}
THUMB_FUNC void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 param2)
{
if (FUN_02003314(param0->unk118_2, param1) != 0)
{
if (param0->unk000[param1].unk0c.unk06_4 < param0->unk000[param1].unk0c.unk02_0)
{
param0->unk000[param1].unk0c.unk06_4++;
return;
}
param0->unk000[param1].unk0c.unk06_4 = 0;
FUN_0200359C(param0, param1, param2);
}
}
THUMB_FUNC void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2)
{
for (u32 r6 = 0; r6 < 0x10; r6++)
{
if (FUN_02003314(param0->unk000[param1].unk0c.unk00, (u16)r6) != 0)
{
FUN_020035F8(param0->unk000[param1].unk00 + param2 * r6, param0->unk000[param1].unk04 + param2 * r6, &param0->unk000[param1].unk0c, param2);
}
}
FUN_02003684(param0, (u8)param1, &param0->unk000[param1].unk0c);
}
THUMB_FUNC void FUN_020035F8(u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3)
{
for (u32 i = 0; i < param3; i++)
{
u8 lo = (u8)((param0[i] & 0x1f) + ((((param2->unk04_0 & 0x1f) - (param0[i] & 0x1f)) * param2->unk02_6) >> 4));
u8 hi = (u8)(((param0[i] >> 10) & 0x1f) + (((((param2->unk04_0 >> 10) & 0x1f) - ((param0[i] >> 10) & 0x1f)) * param2->unk02_6) >> 4));
u8 mid = (u8)(((param0[i] >> 5) & 0x1f) + (((((param2->unk04_0 >> 5) & 0x1f) - ((param0[i] >> 5) & 0x1f)) * param2->unk02_6) >> 4));
param1[i] = (u16)((hi << 10) | (mid << 5) | lo);
}
}
THUMB_FUNC void FUN_02003684(struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2)
{
s16 r4;
if (param2->unk02_6 == param2->unk02_b)
{
if ((param0->unk118_2 & (1 << param1)) == 0)
{
return;
}
param0->unk118_2 ^= (1 << param1);
return;
}
if (param2->unk04_f == 0)
{
r4 = (s16)param2->unk02_6;
r4 += param2->unk06_0;
if (r4 > param2->unk02_b)
{
r4 = (s16)param2->unk02_b;
}
param2->unk02_6 = r4;
return;
}
r4 = (s16)param2->unk02_6;
r4 -= param2->unk06_0;
if (r4 < param2->unk02_b)
{
r4 = (s16)param2->unk02_b;
}
param2->unk02_6 = r4;
}
THUMB_FUNC void FUN_0200372C(struct UnkStruct_02002F08 *param0)
{
if (param0->unk11a_f == 0 && param0->unk118_0 != 1)
{
return;
}
for (s32 r5 = 0; r5 < 14; r5++)
{
if (param0->unk11a_f != 0 || (param0->unk000[r5].unk04 != 0 && FUN_02003314(param0->unk11a_0, (u16)r5) != 0))
{
DC_FlushRange(param0->unk000[r5].unk04, param0->unk000[r5].unk08);
switch (r5)
{
case 0:
GX_LoadBGPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
break;
case 1:
GXS_LoadBGPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
break;
case 2:
GX_LoadOBJPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
break;
case 3:
GXS_LoadOBJPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
break;
case 4:
GX_BeginLoadBGExtPltt();
GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
GX_EndLoadBGExtPltt();
break;
case 5:
GX_BeginLoadBGExtPltt();
GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x2000, param0->unk000[r5].unk08);
GX_EndLoadBGExtPltt();
break;
case 6:
GX_BeginLoadBGExtPltt();
GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x4000, param0->unk000[r5].unk08);
GX_EndLoadBGExtPltt();
break;
case 7:
GX_BeginLoadBGExtPltt();
GX_LoadBGExtPltt(param0->unk000[r5].unk04, 0x6000, param0->unk000[r5].unk08);
GX_EndLoadBGExtPltt();
break;
case 8:
GXS_BeginLoadBGExtPltt();
GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
GXS_EndLoadBGExtPltt();
break;
case 9:
GXS_BeginLoadBGExtPltt();
GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x2000, param0->unk000[r5].unk08);
GXS_EndLoadBGExtPltt();
break;
case 10:
GXS_BeginLoadBGExtPltt();
GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x4000, param0->unk000[r5].unk08);
GXS_EndLoadBGExtPltt();
break;
case 11:
GXS_BeginLoadBGExtPltt();
GXS_LoadBGExtPltt(param0->unk000[r5].unk04, 0x6000, param0->unk000[r5].unk08);
GXS_EndLoadBGExtPltt();
break;
case 12:
GX_BeginLoadOBJExtPltt();
GX_LoadOBJExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
GX_EndLoadOBJExtPltt();
break;
case 13:
GXS_BeginLoadOBJExtPltt();
GXS_LoadOBJExtPltt(param0->unk000[r5].unk04, 0, param0->unk000[r5].unk08);
GXS_EndLoadOBJExtPltt();
break;
}
}
}
param0->unk11a_0 = param0->unk118_2;
if (param0->unk11a_0 == 0)
{
param0->unk118_0 = 0;
}
}
THUMB_FUNC u16 FUN_020038E4(struct UnkStruct_02002F08 *param0)
{
return param0->unk118_2;
}
THUMB_FUNC void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1)
{
param0->unk11a_f = param1;
}
THUMB_FUNC void FUN_02003914(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5)
{
GF_ASSERT(param5 * 2 <= param0->unk000[param1].unk08);
if (param2 - 1 <= 1)
{
MI_CpuFill16(&param0->unk000[param1].unk00[param4], param3, (u32)((param5 - param4) * 2));
}
if (param2 == 0 || param2 == 2)
{
MI_CpuFill16(&param0->unk000[param1].unk04[param4], param3, (u32)((param5 - param4) * 2));
}
}
#ifdef NONMATCHING
THUMB_FUNC void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4)
{
s32 r12 = ((u32)(param4 << 0x1b)) >> 0x1b;
s32 lr = ((u32)(param4 << 0x16)) >> 0x1b;
s32 st8 = ((u32)(param4 << 0x11)) >> 0x1b;
s32 lo, mid, hi;
for (u16 i = 0; i < param2; i++)
{
lo = (((u32)(param0[i] << 0x1b)) >> 0x1b);
mid = (((u32)(param0[i] << 0x16)) >> 0x1b);
hi = (((u32)(param0[i] << 0x11)) >> 0x1b);
param1[i] = (lo + ((r12 - lo) * param3) >> 4) | (mid + ((lr - mid) * param3) >> 4) << 5 | (hi + ((st8 - hi) * param3) >> 4) << 10;
}
}
#else
asm void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4)
{
// clang-format off
push {r4-r7, lr}
sub sp, #0xc
str r0, [sp, #0x0]
add r0, sp, #0x10
ldrh r0, [r0, #0x10]
str r1, [sp, #0x4]
add r7, r2, #0x0
lsl r1, r0, #0x1b
lsr r1, r1, #0x1b
mov r12, r1
lsl r1, r0, #0x16
lsl r0, r0, #0x11
lsr r1, r1, #0x1b
lsr r0, r0, #0x1b
mov r2, #0x0
mov lr, r1
str r0, [sp, #0x8]
cmp r7, #0x0
bls _020039E2
_0200399A:
ldr r0, [sp, #0x0]
lsl r6, r2, #0x1
ldrh r4, [r0, r6]
lsl r0, r4, #0x1b
lsr r1, r0, #0x1b
lsl r0, r4, #0x16
lsl r4, r4, #0x11
lsr r5, r4, #0x1b
ldr r4, [sp, #0x8]
lsr r0, r0, #0x1b
sub r4, r4, r5
mul r4, r3
asr r4, r4, #0x4
add r4, r5, r4
lsl r5, r4, #0xa
mov r4, r12
sub r4, r4, r1
mul r4, r3
asr r4, r4, #0x4
add r1, r1, r4
mov r4, lr
sub r4, r4, r0
mul r4, r3
asr r4, r4, #0x4
add r0, r0, r4
lsl r0, r0, #0x5
orr r0, r1
add r1, r5, #0x0
orr r1, r0
ldr r0, [sp, #0x4]
strh r1, [r0, r6]
add r0, r2, #0x1
lsl r0, r0, #0x10
lsr r2, r0, #0x10
cmp r2, r7
blo _0200399A
_020039E2:
add sp, #0xc
pop {r4-r7, pc}
// clang-format on
}
#endif
THUMB_FUNC void FUN_020039E8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5)
{
BOOL r0 = FALSE;
if (param0->unk000[param1].unk00 != 0 && param0->unk000[param1].unk04 != 0)
{
r0 = TRUE;
}
GF_ASSERT(r0);
FUN_02003974(param0->unk000[param1].unk00 + param2, param0->unk000[param1].unk04 + param2, param3, param4, param5);
}
THUMB_FUNC void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4)
{
while (param2 != 0)
{
if ((param2 & 1) != 0)
{
FUN_02003974(param0, param1, 0x10, param3, param4);
}
param2 >>= 1;
param1 += 0x10;
param0 += 0x10;
}
}
THUMB_FUNC void FUN_02003A64(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4)
{
u32 r4 = 0;
BOOL r0 = FALSE;
if (param0->unk000[param1].unk00 != 0 && param0->unk000[param1].unk04 != 0)
{
r0 = TRUE;
}
GF_ASSERT(r0);
while (param2 != 0)
{
if ((param2 & 1) != 0)
{
FUN_020039E8(param0, param1, (u16)r4, 0x10, param3, param4);
}
param2 >>= 1;
r4 += 0x10;
}
}
#ifdef NONMATCHING
THUMB_FUNC void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4)
{
s32 r4, lo, mid, hi, add;
for (r4 = 0; r4 < param1; r4++)
{
lo = ((param0[r4]) & 0x1f);
mid = ((param0[r4] >> 5) & 0x1f);
hi = ((param0[r4] >> 10) & 0x1f);
add = (lo * 0x4c + mid * 0x97 + hi * 0x1d) >> 8;
lo = (u16)(add * param2) >> 8;
mid = (u16)(add * param3) >> 8;
hi = (u16)(add * param4) >> 8;
if (lo > 0x1f)
{
lo = 0x1f;
}
if (mid > 0x1f)
{
mid = 0x1f;
}
if (hi > 0x1f)
{
hi = 0x1f;
}
param0[r4] = (hi << 10) | (mid << 5) | lo;
}
}
#else
asm void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4)
{
// clang-format off
push {r3-r7, lr}
mov lr, r1
mov r12, r2
add r7, r3, #0x0
mov r4, #0x0
cmp r1, #0x0
ble _02003B3C
ldr r6, [sp, #0x18]
_02003AD4:
ldrh r3, [r0, #0x0]
mov r1, #0x1f
add r2, r3, #0x0
asr r5, r3, #0xa
and r2, r1
and r5, r1
mov r1, #0x1d
mul r1, r5
mov r5, #0x4c
mul r5, r2
asr r3, r3, #0x5
mov r2, #0x1f
and r3, r2
mov r2, #0x97
mul r2, r3
add r2, r5, r2
add r1, r1, r2
asr r3, r1, #0x8
mov r1, r12
add r2, r1, #0x0
mul r2, r3
lsl r1, r2, #0x10
lsr r1, r1, #0x10
asr r2, r1, #0x8
add r1, r7, #0x0
mul r1, r3
mul r3, r6
lsl r1, r1, #0x10
lsl r3, r3, #0x10
lsr r1, r1, #0x10
lsr r3, r3, #0x10
asr r1, r1, #0x8
asr r3, r3, #0x8
cmp r2, #0x1f
ble _02003B1C
mov r2, #0x1f
_02003B1C:
cmp r1, #0x1f
ble _02003B22
mov r1, #0x1f
_02003B22:
cmp r3, #0x1f
ble _02003B28
mov r3, #0x1f
_02003B28:
lsl r3, r3, #0xa
lsl r1, r1, #0x5
orr r1, r3
orr r1, r2
strh r1, [r0, #0x0]
add r4, r4, #0x1
mov r1, lr
add r0, r0, #0x2
cmp r4, r1
blt _02003AD4
_02003B3C:
pop {r3-r7, pc}
// clang-format on
}
#endif
THUMB_FUNC void FUN_02003B40(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 param5, u16 param6, u32 param7, u32 param8, u32 param9)
{
NNSG2dPaletteData *pltData;
void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id);
GF_ASSERT(ptr != NULL);
if (param5 == 0)
{
param5 = pltData->szByte;
}
FUN_02003AC4(pltData->pRawData, 0x10, param7, param8, param9);
FUN_02003054(param0, pltData->pRawData, param4, param6, (u16)param5);
FreeToHeap(ptr);
}

View File

@@ -6,19 +6,41 @@
#include "string16.h"
struct UnkStruct_02002F08_sub_sub {
u16 unk00;
u16 unk02_0: 6;
u16 unk02_6: 5;
u16 unk02_b: 5;
u16 unk04_0: 15;
u16 unk04_f: 1;
u16 unk06_0: 4;
u16 unk06_4: 6;
u16 unk06_a: 6;
};
struct UnkStruct_02002F08_sub
{
u16 *unk00;
u16 *unk04;
u32 unk08;
struct UnkStruct_02002F08_sub_sub unk0c;
};
struct UnkStruct_02002F08
{
struct
{
u16 *unk00;
u16 *unk04;
u32 unk08;
u32 unk0c;
u32 unk10;
} unk000[14];
struct UnkStruct_02002F08_sub unk000[14];
u32 unk118;
u32 unk11c;
u16 unk118_0 : 2;
u16 unk118_2 : 14;
u16 unk11a_0 : 14;
u16 unk11a_e : 1;
u16 unk11a_f : 1;
u8 unk11c;
u8 unk11d;
u16 unk11e;
};
s32 FUN_02002F08(u32 param0, struct String *str, u32 param2);
@@ -28,11 +50,26 @@ u32 FUN_02002F90(struct String *str);
s32 FUN_02002F9C(u32 param0, struct String *str);
struct UnkStruct_02002F08 *FUN_02002FD0(u32 heap_id);
void FUN_02002FEC(struct UnkStruct_02002F08 *ptr);
void FUN_02002FF4(struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size);
void FUN_02002FF4(
struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size);
void FUN_02003008(struct UnkStruct_02002F08 *param0, u32 param1, u32 size, u32 heap_id);
void FUN_02003038(struct UnkStruct_02002F08 *param0, u32 param1);
void FUN_02003054(struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size);
void FUN_02003084(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset, u16 param7);
void FUN_020030E8(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset);
void FUN_02003054(
struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size);
void FUN_02003084(struct UnkStruct_02002F08 *param0,
NarcId narcId,
s32 memberId,
u32 heap_id,
u32 param4,
u32 size,
u16 offset,
u16 param7);
void FUN_020030E8(struct UnkStruct_02002F08 *param0,
NarcId narcId,
s32 memberId,
u32 heap_id,
u32 param4,
u32 size,
u16 offset);
#endif //POKEDIAMOND_UNK_02002F08_H
#endif // POKEDIAMOND_UNK_02002F08_H

32
include/unk_020030E8.h Normal file
View File

@@ -0,0 +1,32 @@
#include "global.h"
#include "filesystem.h"
#include "unk_02002F08.h"
void FUN_02003108(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3);
void FUN_0200317C(NarcId narcId, s32 memberId, u32 heap_id, u32 size, u16 offset, void *dest);
void FUN_020031B8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u32 param3, u16 param4, u16 param5);
u16 *FUN_020031FC(struct UnkStruct_02002F08 *param0, u32 param1);
u16 *FUN_02003204(struct UnkStruct_02002F08 *param0, u32 param1);
u32 FUN_02003210(struct UnkStruct_02002F08 *param0, u16 param1, u16 param2, s16 param3, u8 param6, u8 param7, u16 param8);
u8 FUN_02003314(u16 param0, u16 param1);
void FUN_02003328(struct UnkStruct_02002F08 *param0, u16 param1);
void FUN_02003368(s32 param0, struct UnkStruct_02002F08_sub *param1, u16 *param2);
void FUN_020033A4(struct UnkStruct_02002F08_sub_sub *param0, u16 param1, s16 param2, u8 param3, u8 param4, u16 param5);
void FUN_02003464(u32 param0, struct UnkStruct_02002F08 *param1);
void FUN_02003500(struct UnkStruct_02002F08 *param0);
void FUN_02003520(struct UnkStruct_02002F08 *param0);
void FUN_02003540(struct UnkStruct_02002F08 *param0, u8 param1, u32 param2);
void FUN_0200359C(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2);
void FUN_020035F8(u16 *param0, u16 *param1, struct UnkStruct_02002F08_sub_sub *param2, u32 param3);
void FUN_02003684(struct UnkStruct_02002F08 *param0, u8 param1, struct UnkStruct_02002F08_sub_sub *param2);
void FUN_0200372C(struct UnkStruct_02002F08 *param0);
u16 FUN_020038E4(struct UnkStruct_02002F08 *param0);
void FUN_020038F0(struct UnkStruct_02002F08 *param0, u32 param1);
void FUN_02003914(struct UnkStruct_02002F08 *param0, u32 param1, u32 param2, u16 param3, u16 param4, u16 param5);
void FUN_02003974(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4);
void FUN_020039E8(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u16 param3, u8 param4, u16 param5);
void FUN_02003A30(u16 *param0, u16 *param1, u16 param2, u8 param3, u16 param4);
void FUN_02003A64(struct UnkStruct_02002F08 *param0, u32 param1, u16 param2, u8 param3, u16 param4);
void FUN_02003AC4(u16 *param0, u16 param1, u32 param2, u32 param3, u32 param4);
void FUN_02003B40(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 param5, u16 param6, u32 param7, u32 param8, u32 param9);