mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-24 01:34:29 -05:00
decompile unk_020030E8.s
This commit is contained in:
File diff suppressed because it is too large
Load Diff
708
arm9/src/unk_020030E8.c
Normal file
708
arm9/src/unk_020030E8.c
Normal 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, ¶m0->unk000[r4], ¶m2);
|
||||
|
||||
FUN_020033A4(¶m0->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, ¶m0->unk000[param1].unk0c, param2);
|
||||
}
|
||||
}
|
||||
|
||||
FUN_02003684(param0, (u8)param1, ¶m0->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(¶m0->unk000[param1].unk00[param4], param3, (u32)((param5 - param4) * 2));
|
||||
}
|
||||
|
||||
if (param2 == 0 || param2 == 2)
|
||||
{
|
||||
MI_CpuFill16(¶m0->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);
|
||||
}
|
||||
@@ -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
32
include/unk_020030E8.h
Normal 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);
|
||||
Reference in New Issue
Block a user