WIP sub_8026324

This commit is contained in:
PikalaxALT
2019-03-26 08:43:49 -04:00
committed by scnorton
parent 03e58d7dc9
commit df538ff7ab
3 changed files with 526 additions and 394 deletions

View File

@@ -4,6 +4,7 @@
#include "window.h"
#include "bg.h"
#include "gpu_regs.h"
#include "random.h"
#include "link.h"
#include "link_rfu.h"
#include "task.h"
@@ -85,19 +86,25 @@ struct DodrioBerryPickingStruct
/*0x0048*/ u8 unk_0048;
// align 1
/*0x004A*/ u16 unk_004A[5][6];
/*0x0086*/ u8 filler_0086[18];
/*0x0086*/ u16 unk_0086[5];
/*0x0090*/ u8 unk_0090[5];
/*0x0095*/ u8 filler_0095[3];
/*0x0098*/ u8 unk_0098[4];
/*0x009C*/ u8 filler_009C[12];
/*0x009C*/ u8 unk_009C[12];
/*0x00A8*/ u8 unk_00A8[5];
/*0x00AD*/ u8 filler_00AD[3];
/*0x00B0*/ u8 unk_00B0[5];
/*0x00B5*/ u8 filler_00B5[0xC4 - 0xB5];
/*0x00B5*/ u8 filler_00B5[3];
/*0x00B8*/ u8 unk_00B8[5];
/*0x00BD*/ u8 filler_00BD[7];
/*0x00C4*/ u8 unk_00C4[11];
/*0x00CF*/ u8 filler_00CF[1];
/*0x00D0*/ u8 unk_00D0[11];
/*0x00DB*/ u8 filler_00DB[1];
/*0x00DC*/ u8 unk_00DC[11];
/*0x00E7*/ u8 filler_0xE7[0xF4 - 0xE7];
/*0x00E7*/ u8 filler_0xE7[1];
/*0x00E8*/ u8 unk_00E8[5];
/*0x00ED*/ u8 filler_00ED[7];
/*0x00F4*/ u8 unk_00F4[11][2];
/*0x010A*/ u8 filler_010A[2];
/*0x010C*/ u8 unk_010C[5];
@@ -170,6 +177,7 @@ void sub_802621C(TaskFunc);
void sub_8026240(u8);
bool32 sub_8026264(void);
void sub_80262C0(void);
u32 sub_8026634(u8, u8, u8);
void sub_802671C(void);
void sub_8026AF4(void);
void sub_8026B28(void);
@@ -178,8 +186,12 @@ u32 sub_8026BB8(void);
void sub_8026C28(void);
bool32 sub_8026C50(void);
bool32 sub_8026C90(void);
void sub_80272E8(void);
void sub_8026D1C(u8);
u8 sub_8026D8C(u8);
void sub_8026F1C(u8, u8, u8);
void sub_8027234(u8);
void sub_80272A4(void);
void sub_80272E8(void);
void sub_80273F0(void);
void sub_802749C(void);
u8 sub_8027518(u8);
@@ -219,11 +231,12 @@ void sub_80292E0(u8);
bool32 sub_802A770(void);
u8 sub_802A794(void);
extern const u8 gUnknown_082F7A88[][3];
extern const u8 gUnknown_082F449C[];
extern const u8 gUnknown_082F7A94[];
extern void (*const gUnknown_082F7AC4[])(void);
extern void (*const gUnknown_082F7AF4[])(void);
extern const u8 gUnknown_082F7A94[];
void sub_802493C(u16 a0, void (*a1)(void))
{
gUnknown_03000DB0 = FALSE;
@@ -1396,3 +1409,508 @@ void sub_80262C0(void)
r4[i] = 0;
}
}
#ifdef NONMATCHING
void sub_8026324(void)
{
u8 sp0 = gUnknown_02022C98->unk_0044;
u8 sp4 = gUnknown_02022C98->unk_0048;
u8 sp8 = gUnknown_02022C98->unk_0024;
u8 r6;
u8 r10;
u8 r2;
u8 r5;
u8 r3;
s32 r2_2;
u8 r4;
u8 r7, r7_2;
if (gUnknown_02022C98->unk_0040 < 10)
{
for (r6 = 0; r6 < sp8; r6++)
{
if ( gUnknown_02022C98->unk_31A0[r6].unk_2C != 0
&& gUnknown_02022C98->unk_00A8[r6] == 1)
{
for (r10 = sp0; r10 < sp4; r10++)
{
r5 = gUnknown_082F449C[r10];
if (gUnknown_02022C98->unk_00F4[r5][0] == r6)
{
break;
}
if (gUnknown_02022C98->unk_00F4[r5][1] == r6)
{
break;
}
if (sub_8026634(gUnknown_02022C98->unk_31A0[r6].unk_2C, r6, gUnknown_082F449C[r10]) == 1)
{
for (r2 = 0; r2 < 2; r2++)
{
if (gUnknown_02022C98->unk_00F4[r5][r2] == 0xFF)
{
gUnknown_02022C98->unk_00F4[r5][r2] = r6;
gUnknown_02022C98->unk_00A8[r6] = 2;
gUnknown_02022C98->unk_00C4[r5] = 1;
break;
}
}
break;
}
if (gUnknown_02022C98->unk_31A0[r6].unk_34 == 1)
{
break;
}
}
}
}
for (r10 = sp0; r10 < sp4; r10++)
{
r6 = 0xFF;
r5 = gUnknown_082F449C[r10];
if (gUnknown_02022C98->unk_00C4[r5] == 1)
{
r3 = gUnknown_02022C98->unk_0090[sub_8026D8C(r5)] / 7;
if (r3 < 2)
{
r3 = 2;
}
r2 = gUnknown_082F7A88[r3][gUnknown_02022C98->unk_31A0[0].unk_14[r5]] - gUnknown_02022C98->unk_00D0[r5];
if (r2 < 6)
{
gUnknown_02022C98->unk_009C[r5] += r2;
}
if (++gUnknown_02022C98->unk_009C[r5] < 6)
{
gUnknown_02022C98->unk_009C[r5] = 0;
if (gUnknown_02022C98->unk_00F4[r5][0] != 0xFF && gUnknown_02022C98->unk_00F4[r5][1] == 0xFF)
{
r4 = gUnknown_02022C98->unk_00F4[r5][0];
}
else if (gUnknown_02022C98->unk_00F4[r5][0] == 0xFF && gUnknown_02022C98->unk_00F4[r5][1] == 0xFF)
{
continue;
}
else
{
r7 = gUnknown_02022C98->unk_00F4[r5][0];
r7_2 = gUnknown_02022C98->unk_00F4[r5][1];
if ((Random() & 1))
{
r4 = r7_2;
r6 = r7;
}
else
{
r4 = r7;
r6 = r7_2;
}
}
gUnknown_02022C98->unk_32CC.unk_1F[r5] = 7;
gUnknown_02022C98->unk_00C4[r5] = 2;
gUnknown_02022C98->unk_00A8[r4] = 3;
gUnknown_02022C98->unk_00B8[r5] = r4;
gUnknown_02022C98->unk_31A0[r4].unk_30 = 1;
gUnknown_02022C98->unk_31A0[r6].unk_34 = 1;
gUnknown_02022C98->unk_0086[r4]++;
sub_8026F1C(0, r5, r4);
sub_8027234(1);
sub_8026D1C(r4);
gUnknown_02022C98->unk_00E8[r5] = gUnknown_02022C98->unk_32CC.unk_14[r5];
gUnknown_02022C98->unk_32CC.unk_14[r5] = 3;
gUnknown_02022C98->unk_00F4[r5][0] = 0xFF;
gUnknown_02022C98->unk_00F4[r5][1] = 0xFF;
}
}
}
}
}
#else
NAKED
void sub_8026324(void)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
"\tmov r6, r9\n"
"\tmov r5, r8\n"
"\tpush {r5-r7}\n"
"\tsub sp, 0x10\n"
"\tldr r0, =gUnknown_02022C98\n"
"\tldr r1, [r0]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0x44\n"
"\tldrb r0, [r0]\n"
"\tstr r0, [sp]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0x48\n"
"\tldrb r0, [r0]\n"
"\tstr r0, [sp, 0x4]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0x24\n"
"\tldrb r0, [r0]\n"
"\tstr r0, [sp, 0x8]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0x40\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0x9\n"
"\tbls _08026358\n"
"\tb _08026614\n"
"_08026358:\n"
"\tmovs r6, 0\n"
"\tldr r0, [sp, 0x8]\n"
"\tcmp r6, r0\n"
"\tbcs _08026440\n"
"_08026360:\n"
"\tldr r3, =gUnknown_02022C98\n"
"\tlsls r0, r6, 4\n"
"\tsubs r1, r0, r6\n"
"\tlsls r1, 2\n"
"\tldr r2, [r3]\n"
"\tadds r1, r2\n"
"\tldr r4, =0x000031cc\n"
"\tadds r4, r1\n"
"\tmov r8, r4\n"
"\tldrb r1, [r4]\n"
"\tmov r9, r0\n"
"\tadds r0, r6, 0x1\n"
"\tstr r0, [sp, 0xC]\n"
"\tcmp r1, 0\n"
"\tbeq _08026434\n"
"\tadds r0, r2, 0\n"
"\tadds r0, 0xA8\n"
"\tadds r0, r6\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0x1\n"
"\tbne _08026434\n"
"\tldr r1, [sp]\n"
"\tmov r10, r1\n"
"\tldr r2, [sp, 0x4]\n"
"\tcmp r10, r2\n"
"\tbcs _08026434\n"
"\tadds r7, r3, 0\n"
"_08026396:\n"
"\tldr r0, =gUnknown_082F449C\n"
"\tadd r0, r10\n"
"\tldrb r5, [r0]\n"
"\tldr r1, [r7]\n"
"\tlsls r4, r5, 1\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0xF4\n"
"\tadds r0, r4\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, r6\n"
"\tbeq _08026434\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0xF5\n"
"\tadds r0, r4\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, r6\n"
"\tbeq _08026434\n"
"\tmov r0, r8\n"
"\tldrb r1, [r0]\n"
"\tadds r0, r6, 0\n"
"\tadds r2, r5, 0\n"
"\tbl sub_8026634\n"
"\tcmp r0, 0x1\n"
"\tbne _08026410\n"
"\tmovs r2, 0\n"
"\tldr r3, =gUnknown_02022C98\n"
"\tmov r8, r4\n"
"_080263CE:\n"
"\tldr r0, [r3]\n"
"\tmov r4, r8\n"
"\tadds r1, r2, r4\n"
"\tadds r0, 0xF4\n"
"\tadds r1, r0, r1\n"
"\tldrb r0, [r1]\n"
"\tcmp r0, 0xFF\n"
"\tbne _08026404\n"
"\tstrb r6, [r1]\n"
"\tldr r0, [r3]\n"
"\tadds r0, 0xA8\n"
"\tadds r0, r6\n"
"\tmovs r1, 0x2\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r3]\n"
"\tadds r0, 0xC4\n"
"\tadds r0, r5\n"
"\tmovs r1, 0x1\n"
"\tstrb r1, [r0]\n"
"\tb _08026434\n"
"\t.pool\n"
"_08026404:\n"
"\tadds r0, r2, 0x1\n"
"\tlsls r0, 24\n"
"\tlsrs r2, r0, 24\n"
"\tcmp r2, 0x1\n"
"\tbls _080263CE\n"
"\tb _08026434\n"
"_08026410:\n"
"\tldr r0, [r7]\n"
"\tmov r2, r9\n"
"\tsubs r1, r2, r6\n"
"\tlsls r1, 2\n"
"\tadds r0, r1\n"
"\tldr r4, =0x000031d4\n"
"\tadds r0, r4\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0x1\n"
"\tbeq _08026434\n"
"\tmov r0, r10\n"
"\tadds r0, 0x1\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tmov r10, r0\n"
"\tldr r0, [sp, 0x4]\n"
"\tcmp r10, r0\n"
"\tbcc _08026396\n"
"_08026434:\n"
"\tldr r1, [sp, 0xC]\n"
"\tlsls r0, r1, 24\n"
"\tlsrs r6, r0, 24\n"
"\tldr r2, [sp, 0x8]\n"
"\tcmp r6, r2\n"
"\tbcc _08026360\n"
"_08026440:\n"
"\tldr r4, [sp]\n"
"\tmov r10, r4\n"
"\tldr r0, [sp, 0x4]\n"
"\tcmp r10, r0\n"
"\tbcc _0802644C\n"
"\tb _08026614\n"
"_0802644C:\n"
"\tldr r1, =gUnknown_02022C98\n"
"\tmov r9, r1\n"
"_08026450:\n"
"\tmovs r6, 0xFF\n"
"\tldr r0, =gUnknown_082F449C\n"
"\tadd r0, r10\n"
"\tldrb r5, [r0]\n"
"\tmov r2, r9\n"
"\tldr r0, [r2]\n"
"\tadds r0, 0xC4\n"
"\tadds r0, r5\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0x1\n"
"\tbeq _08026468\n"
"\tb _08026602\n"
"_08026468:\n"
"\tadds r0, r5, 0\n"
"\tbl sub_8026D8C\n"
"\tmov r1, r9\n"
"\tldr r4, [r1]\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tadds r1, r4, 0\n"
"\tadds r1, 0x90\n"
"\tadds r1, r0\n"
"\tldrb r0, [r1]\n"
"\tmovs r1, 0x7\n"
"\tbl __udivsi3\n"
"\tlsls r0, 24\n"
"\tlsrs r3, r0, 24\n"
"\tcmp r3, 0x1\n"
"\tbls _0802648E\n"
"\tmovs r3, 0x2\n"
"_0802648E:\n"
"\tldr r2, =gUnknown_082F7A88\n"
"\tldr r0, =0x000031b4\n"
"\tadds r1, r4, r0\n"
"\tadds r1, r5\n"
"\tlsls r0, r3, 1\n"
"\tadds r0, r3\n"
"\tldrb r1, [r1]\n"
"\tadds r0, r1\n"
"\tadds r0, r2\n"
"\tldrb r1, [r0]\n"
"\tadds r0, r4, 0\n"
"\tadds r0, 0xD0\n"
"\tadds r0, r5\n"
"\tldrb r0, [r0]\n"
"\tsubs r2, r1, r0\n"
"\tcmp r2, 0x5\n"
"\tbgt _080264BC\n"
"\tadds r1, r4, 0\n"
"\tadds r1, 0x9C\n"
"\tadds r1, r5\n"
"\tldrb r0, [r1]\n"
"\tadds r0, r2\n"
"\tstrb r0, [r1]\n"
"_080264BC:\n"
"\tmov r2, r9\n"
"\tldr r1, [r2]\n"
"\tadds r1, 0x9C\n"
"\tadds r1, r5\n"
"\tldrb r0, [r1]\n"
"\tadds r0, 0x1\n"
"\tmovs r2, 0\n"
"\tstrb r0, [r1]\n"
"\tmovs r4, 0xFF\n"
"\tands r0, r4\n"
"\tcmp r0, 0x5\n"
"\tbhi _080264D6\n"
"\tb _08026602\n"
"_080264D6:\n"
"\tmov r1, r9\n"
"\tldr r0, [r1]\n"
"\tadds r0, 0x9C\n"
"\tadds r0, r5\n"
"\tstrb r2, [r0]\n"
"\tldr r3, [r1]\n"
"\tlsls r1, r5, 1\n"
"\tadds r0, r3, 0\n"
"\tadds r0, 0xF4\n"
"\tadds r2, r0, r1\n"
"\tldrb r0, [r2]\n"
"\tmov r8, r1\n"
"\tcmp r0, 0xFF\n"
"\tbne _08026518\n"
"\tadds r0, r3, 0\n"
"\tadds r0, 0xF5\n"
"\tadd r0, r8\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0xFF\n"
"\tbne _08026500\n"
"\tb _08026602\n"
"_08026500:\n"
"\tb _08026528\n"
"\t.pool\n"
"_08026518:\n"
"\tadds r0, r3, 0\n"
"\tadds r0, 0xF5\n"
"\tadd r0, r8\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0xFF\n"
"\tbne _08026528\n"
"\tldrb r4, [r2]\n"
"\tb _0802654E\n"
"_08026528:\n"
"\tmov r2, r9\n"
"\tldr r1, [r2]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0xF4\n"
"\tadd r0, r8\n"
"\tldrb r7, [r0]\n"
"\tadds r1, 0xF5\n"
"\tadd r1, r8\n"
"\tldrb r6, [r1]\n"
"\tbl Random\n"
"\tmovs r1, 0x1\n"
"\tands r1, r0\n"
"\tcmp r1, 0\n"
"\tbne _0802654A\n"
"\tadds r4, r7, 0\n"
"\tb _0802654E\n"
"_0802654A:\n"
"\tadds r4, r6, 0\n"
"\tadds r6, r7, 0\n"
"_0802654E:\n"
"\tmov r1, r9\n"
"\tldr r0, [r1]\n"
"\tldr r2, =0x000032eb\n"
"\tadds r0, r2\n"
"\tadds r0, r5\n"
"\tmovs r1, 0x7\n"
"\tstrb r1, [r0]\n"
"\tmov r1, r9\n"
"\tldr r0, [r1]\n"
"\tadds r0, 0xC4\n"
"\tadds r0, r5\n"
"\tmovs r1, 0x2\n"
"\tstrb r1, [r0]\n"
"\tmov r2, r9\n"
"\tldr r0, [r2]\n"
"\tadds r0, 0xA8\n"
"\tadds r0, r4\n"
"\tmovs r1, 0x3\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r2]\n"
"\tadds r0, 0xB8\n"
"\tadds r0, r5\n"
"\tstrb r4, [r0]\n"
"\tldr r1, [r2]\n"
"\tlsls r0, r4, 4\n"
"\tsubs r0, r4\n"
"\tlsls r0, 2\n"
"\tadds r1, r0\n"
"\tldr r2, =0x000031d0\n"
"\tadds r1, r2\n"
"\tmovs r0, 0x1\n"
"\tstrb r0, [r1]\n"
"\tmov r2, r9\n"
"\tldr r1, [r2]\n"
"\tlsls r0, r6, 4\n"
"\tsubs r0, r6\n"
"\tlsls r0, 2\n"
"\tadds r1, r0\n"
"\tldr r0, =0x000031d4\n"
"\tadds r1, r0\n"
"\tmovs r2, 0x1\n"
"\tstrb r2, [r1]\n"
"\tmov r0, r9\n"
"\tldr r1, [r0]\n"
"\tlsls r0, r4, 1\n"
"\tadds r1, 0x86\n"
"\tadds r1, r0\n"
"\tldrh r0, [r1]\n"
"\tadds r0, 0x1\n"
"\tstrh r0, [r1]\n"
"\tmovs r0, 0\n"
"\tadds r1, r5, 0\n"
"\tadds r2, r4, 0\n"
"\tbl sub_8026F1C\n"
"\tmovs r0, 0x1\n"
"\tbl sub_8027234\n"
"\tadds r0, r4, 0\n"
"\tbl sub_8026D1C\n"
"\tmov r1, r9\n"
"\tldr r0, [r1]\n"
"\tadds r1, r0, 0\n"
"\tadds r1, 0xE8\n"
"\tadds r1, r5\n"
"\tldr r2, =0x000032e0\n"
"\tadds r0, r2\n"
"\tadds r0, r5\n"
"\tldrb r0, [r0]\n"
"\tstrb r0, [r1]\n"
"\tmov r4, r9\n"
"\tldr r0, [r4]\n"
"\tadds r0, r2\n"
"\tadds r0, r5\n"
"\tmovs r1, 0x3\n"
"\tstrb r1, [r0]\n"
"\tldr r1, [r4]\n"
"\tadds r1, 0xF4\n"
"\tadd r1, r8\n"
"\tldrb r0, [r1]\n"
"\tmovs r2, 0xFF\n"
"\torrs r0, r2\n"
"\tstrb r0, [r1]\n"
"\tldr r1, [r4]\n"
"\tadds r1, 0xF5\n"
"\tadd r1, r8\n"
"\tldrb r0, [r1]\n"
"\torrs r0, r2\n"
"\tstrb r0, [r1]\n"
"_08026602:\n"
"\tmov r0, r10\n"
"\tadds r0, 0x1\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tmov r10, r0\n"
"\tldr r4, [sp, 0x4]\n"
"\tcmp r10, r4\n"
"\tbcs _08026614\n"
"\tb _08026450\n"
"_08026614:\n"
"\tadd sp, 0x10\n"
"\tpop {r3-r5}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tmov r10, r5\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.pool");
}
#endif // NONMATCHING