Files
Pokemon-Firered/src/dodrio_berry_picking.c
T
2020-04-10 16:17:46 -04:00

2437 lines
63 KiB
C

#include "global.h"
#include "gflib.h"
#include "dodrio_berry_picking.h"
#include "event_data.h"
#include "item.h"
#include "link.h"
#include "link_rfu.h"
#include "m4a.h"
#include "minigame_countdown.h"
#include "random.h"
#include "script.h"
#include "strings.h"
#include "task.h"
#include "text_window.h"
#include "constants/songs.h"
#include "constants/fanfares.h"
#include "constants/items.h"
#include "constants/species.h"
struct DodrioStruct
{
/*0x0000*/ void (*savedCallback)(void);
/*0x0004*/ u8 ALIGNED(4) unk04;
/*0x0008*/ u8 ALIGNED(4) unk08;
/*0x000C*/ u8 ALIGNED(4) unk0C;
/*0x0010*/ u8 ALIGNED(4) unk10;
/*0x0014*/ u8 ALIGNED(4) unk14;
/*0x0018*/ u8 ALIGNED(4) unk18;
/*0x001C*/ u8 ALIGNED(4) unk1C;
/*0x0020*/ u8 ALIGNED(4) unk20;
/*0x0024*/ u8 ALIGNED(4) unk24;
/*0x0028*/ u8 ALIGNED(4) multiplayerId;
/*0x0030*/ u8 ALIGNED(8) unk30;
/*0x0034*/ u8 ALIGNED(4) unk34[5];
/*0x003C*/ u8 ALIGNED(4) unk3C;
/*0x0040*/ u8 ALIGNED(4) unk40;
/*0x0044*/ u8 ALIGNED(4) unk44;
/*0x0048*/ u8 ALIGNED(4) unk48;
/*0x004A*/ u16 unk4A[5][6];
/*0x0086*/ u16 unk86[5];
/*0x0090*/ u8 ALIGNED(4) unk90[5];
/*0x0098*/ u8 ALIGNED(4) unk98[4];
/*0x009C*/ u8 ALIGNED(4) unk9C[11];
/*0x00A8*/ u8 ALIGNED(4) unkA8[5];
/*0x00B0*/ u8 ALIGNED(4) unkB0[5];
/*0x00B8*/ u8 ALIGNED(4) unkB8[11];
/*0x00C4*/ u8 ALIGNED(4) unkC4[11];
/*0x00D0*/ u8 ALIGNED(4) unkD0[11];
/*0x00DC*/ u8 ALIGNED(4) unkDC[11];
/*0x00E8*/ u8 ALIGNED(4) unkE8[11];
/*0x00F4*/ u8 ALIGNED(4) unkF4[11][2];
/*0x010C*/ u8 ALIGNED(4) unk10C[5];
/*0x0112*/ u16 unk112;
/*0x0114*/ u16 unk114;
/*0x0118*/ u32 unk118;
/*0x011C*/ u32 unk11C;
/*0x0120*/ u32 unk120;
/*0x0124*/ u8 ALIGNED(4) unk124;
/*0x0128*/ u8 ALIGNED(4) unk128;
/*0x012C*/ u32 unk12C;
/*0x0130*/ u32 unk130[5];
/*0x0144*/ u8 ALIGNED(4) unk144;
/*0x0148*/ u8 ALIGNED(4) unk148[11];
/*0x0154*/ u8 ALIGNED(4) unk154;
/*0x0158*/ u8 ALIGNED(4) unk158[5];
/*0x0160*/ struct DodrioSubstruct_0160 unk160;
/*0x318C*/ struct DodrioSubstruct_318C unk318C[5];
/*0x31A0*/ struct DodrioSubstruct_31A0 unk31A0[5];
/*0x32CC*/ struct DodrioSubstruct_31A0 unk32CC;
/*0x3308*/ struct DodrioSubstruct_3308 unk3308[5];
}; // size = 0x3330
static EWRAM_DATA struct DodrioStruct * gUnknown_203F3E0 = NULL;
static bool32 gUnknown_3002044;
static void sub_81508D8(void);
static void sub_81508EC(struct DodrioStruct * dodrio);
static void sub_8150A84(u8 taskId);
static void sub_8150C78(void);
static void sub_8150CBC(void);
static void sub_8150CF4(void);
static void sub_8150D7C(void);
static void sub_8150DA4(void);
static void sub_8150E68(void);
static void sub_8150F40(void);
static void sub_8150FC4(void);
static void sub_8150FDC(void);
static void sub_815109C(void);
static void sub_8151198(void);
static void sub_81512B4(void);
static void sub_8151488(void);
static void sub_81514F0(void);
static void sub_815159C(void);
static void sub_81516DC(u8 taskId);
static void sub_8151750(u8 taskId);
static void sub_8151B54(void);
static void sub_8151BA0(void);
static void sub_8151C5C(void);
static void sub_8151D28(void);
static void sub_8151D98(void);
static void sub_8151E94(void);
static void sub_815201C(void);
static void sub_8152034(void);
static void sub_8152048(struct DodrioSubstruct_318C * dodrioMon, struct Pokemon * partyMon);
static void sub_815205C(TaskFunc func, u8 priority);
static void sub_815206C(TaskFunc func);
static void sub_8152090(u8 a0);
static bool32 sub_81520B4(void);
static void sub_8152110(void);
static bool32 sub_8152484(u8 a0, u8 a1, u8 a2);
static void sub_815256C(void);
static void sub_815293C(void);
static void sub_8152970(void);
static bool32 sub_8152A00(void);
static void sub_8152A70(void);
static void sub_81529A4(u8 a0, u8 *a1, u8 *a2);
static bool32 sub_8152A98(void);
static bool32 sub_8152AD8(void);
static void sub_8152B64(u8 a0);
static u8 sub_8152BD4(u8 a0);
static u8 sub_8152BF8(u8 a0, u8 a1);
static u8 sub_8152CB8(u8 arg0, u8 arg1);
static void sub_8152D34(u8 a0, u8 a1, u8 a2);
static void sub_8152F94(bool32 a0);
static void sub_8153004(void);
static void sub_8153048(void);
static void sub_8153150(void);
static void sub_81531FC(void);
static u8 sub_815327C(u8);
static void sub_81532B8(void);
static void sub_815336C(void);
static u32 sub_8153424(u8 mpId);
static void Task_ShowDodrioBerryPickingRecords(u8 taskId);
static void sub_81538D0(u8 windowId);
// const rom data
// Assets in this header are duplicated
#include "data/dodrio_berry_picking.h"
static const u8 sUnknown_847553C[][3] =
{
{40, 24, 13},
{32, 19, 10},
{22, 13, 7},
};
ALIGNED(4)
static const u8 sUnknown_8475548[] = {8, 5, 8, 11, 15};
ALIGNED(4)
static const u8 sUnknown_8475550[] = {5, 10, 20, 30, 50, 70, 100};
ALIGNED(4)
static const u8 sUnknown_8475558[][10] =
{
{15, 16, 17, 18, 19, 19, 18, 17, 16, 15},
{20, 21, 22, 23, 24, 25, 26, 27, 28, 29},
{30, 31, 32, 33, 34, 34, 33, 32, 31, 30},
};
static void (*const sUnknown_8475578[])(void) =
{
sub_8150C78,
sub_8150CBC,
sub_8150CF4,
sub_8150D7C,
sub_8150DA4,
sub_8150FDC,
sub_8151198,
sub_81512B4,
sub_8151488,
sub_81514F0,
sub_815159C,
sub_8150F40
};
static void (*const sUnknown_84755A8[])(void) =
{
sub_8150C78,
sub_8150CBC,
sub_8150CF4,
sub_8150D7C,
sub_8150E68,
sub_815109C,
sub_8151198,
sub_81512B4,
sub_8151488,
sub_81514F0,
sub_815159C,
sub_8150FC4
};
void StartDodrioBerryPicking(u16 a0, MainCallback callback)
{
gUnknown_3002044 = FALSE;
if (gReceivedRemoteLinkPlayers && (gUnknown_203F3E0 = AllocZeroed(sizeof(*gUnknown_203F3E0))) != NULL)
{
sub_81508D8();
sub_81508EC(gUnknown_203F3E0);
gUnknown_203F3E0->savedCallback = callback;
gUnknown_203F3E0->multiplayerId = GetMultiplayerId();
gUnknown_203F3E0->unk32CC = gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId];
sub_8152048(&gUnknown_203F3E0->unk318C[gUnknown_203F3E0->multiplayerId], &gPlayerParty[a0]);
CreateTask(sub_8150A84, 1);
SetMainCallback2(sub_815201C);
sub_8153150();
sub_81529A4(gUnknown_203F3E0->unk24, &gUnknown_203F3E0->unk44, &gUnknown_203F3E0->unk48);
StopMapMusic();
PlayNewMapMusic(MUS_KINOMIKUI);
}
else
{
SetMainCallback2(callback);
return;
}
}
static void sub_81508D8(void)
{
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
}
static void sub_81508EC(struct DodrioStruct * data)
{
u8 i;
data->unk0C = 0;
data->unk10 = 0;
data->unk14 = 0;
data->unk18 = 0;
data->unk1C = 0;
data->unk11C = 0;
data->unk120 = 0;
data->unk30 = 0;
data->unk40 = 0;
data->unk3C = 0;
data->unk12C = 0;
for (i = 0; i < 4; i++)
{
data->unk98[i] = 0;
}
for (i = 0; i < 5; i++)
{
data->unkA8[i] = 0;
data->unkB0[i] = 0;
data->unk4A[i][0] = 0;
data->unk4A[i][1] = 0;
data->unk4A[i][2] = 0;
data->unk4A[i][3] = 0;
data->unk4A[i][5] = 0;
data->unk10C[i] = 0;
data->unk130[i] = 0;
}
for (i = 0; i < 11; i++)
{
data->unkD0[i] = 0;
data->unkDC[i] = 0;
data->unkC4[i] = 0;
data->unkF4[i][0] = 0xFF;
data->unkF4[i][1] = 0xFF;
}
data->unk20 = GetMultiplayerId() == 0 ? 1 : 0;
data->unk24 = GetLinkPlayerCount();
data->unk34[0] = GetMultiplayerId();
for (i = 1; i < data->unk24; i++)
{
data->unk34[i] = data->unk34[i - 1] + 1;
if (data->unk34[i] > data->unk24 - 1)
data->unk34[i] %= data->unk24;
}
}
static void sub_8150A84(u8 taskId)
{
u8 r4, r5;
switch (gUnknown_203F3E0->unk0C)
{
case 0:
SetVBlankCallback(NULL);
sub_815205C(sub_8151750, 4);
gUnknown_203F3E0->unk0C++;
break;
case 1:
if (!FuncIsActiveTask(sub_8151750))
{
sub_8154968(&gUnknown_203F3E0->unk160);
gUnknown_203F3E0->unk0C++;
}
break;
case 2:
if (!sub_8155E68())
{
LinkRfu_SetRfuFuncToSend6600();
gUnknown_203F3E0->unk0C++;
}
break;
case 3:
if (IsLinkTaskFinished())
{
if (gReceivedRemoteLinkPlayers)
{
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
}
gUnknown_203F3E0->unk0C++;
}
break;
case 4:
r5 = gUnknown_203F3E0->unk24;
sub_8153A9C();
for (r4 = 0; r4 < r5; r4++)
{
sub_8153AFC(&gUnknown_203F3E0->unk318C[gUnknown_203F3E0->unk34[r4]], r4, gUnknown_203F3E0->unk34[r4], gUnknown_203F3E0->unk24);
}
sub_8153D80(FALSE, gUnknown_203F3E0->unk24);
gUnknown_203F3E0->unk0C++;
break;
case 5:
sub_8154128();
sub_815417C();
sub_8154438();
sub_8153E28();
gUnknown_203F3E0->unk0C++;
break;
case 6:
BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
SetVBlankCallback(sub_8152034);
gUnknown_203F3E0->unk0C++;
break;
case 7:
UpdatePaletteFade();
if (!gPaletteFade.active)
{
gUnknown_203F3E0->unk0C++;
}
break;
default:
DestroyTask(taskId);
sub_815206C(sub_81516DC);
break;
}
}
static void sub_8150C08(u8 taskId)
{
sub_8151B54();
sUnknown_8475578[gUnknown_203F3E0->unk18]();
if (!gUnknown_3002044)
{
sub_815293C();
}
sub_8151BA0();
}
static void sub_8150C40(u8 taskId)
{
sub_8151C5C();
sUnknown_84755A8[gUnknown_203F3E0->unk18]();
if (!gUnknown_3002044)
{
sub_8152970();
}
sub_8151D28();
}
static void sub_8150C78(void)
{
switch (gUnknown_203F3E0->unk10)
{
case 0:
sub_8153BF8(1);
sub_81549D4(1);
gUnknown_203F3E0->unk10++;
break;
case 1:
if (!sub_8155E68())
sub_8152090(1);
break;
}
}
static void sub_8150CBC(void)
{
if (gUnknown_203F3E0->unk10 == 0)
{
sub_8152110();
gUnknown_203F3E0->unk10++;
}
else
{
gUnknown_203F3E0->unk118 = 1;
sub_8152090(2);
}
}
static void sub_8150CF4(void)
{
switch (gUnknown_203F3E0->unk10)
{
case 0:
StartMinigameCountdown(7, 8, 120, 80, 0);
gUnknown_203F3E0->unk10++;
break;
case 1:
LinkRfu_SetRfuFuncToSend6600();
gUnknown_203F3E0->unk10++;
break;
case 2:
if (IsLinkTaskFinished())
{
gUnknown_203F3E0->unk10++;
}
break;
case 3:
if (!IsMinigameCountdownRunning())
{
LinkRfu_SetRfuFuncToSend6600();
gUnknown_203F3E0->unk10++;
}
break;
case 4:
if (IsLinkTaskFinished())
{
sub_8152090(3);
}
break;
}
}
static void sub_8150D7C(void)
{
if (gUnknown_203F3E0->unk10 == 0)
{
if (gUnknown_203F3E0->unk11C != 0)
{
sub_8152090(4);
}
}
}
static void sub_8150DA4(void)
{
if (gUnknown_203F3E0->unk10 == 0)
{
if (gUnknown_203F3E0->unk40 < 10)
{
if (gUnknown_203F3E0->unkA8[0] == 0)
{
if (JOY_NEW(DPAD_UP))
{
if (gUnknown_203F3E0->unk31A0[0].unk2C.unk0 == 0)
{
gUnknown_203F3E0->unk31A0[0].unk2C.unk4 = 0;
gUnknown_203F3E0->unk31A0[0].unk2C.unk0 = sub_815327C(2);
}
}
else if (JOY_NEW(DPAD_RIGHT))
{
if (gUnknown_203F3E0->unk31A0[0].unk2C.unk0 == 0)
{
gUnknown_203F3E0->unk31A0[0].unk2C.unk4 = 0;
gUnknown_203F3E0->unk31A0[0].unk2C.unk0 = sub_815327C(1);
}
}
else if (JOY_NEW(DPAD_LEFT))
{
if (gUnknown_203F3E0->unk31A0[0].unk2C.unk0 == 0)
{
gUnknown_203F3E0->unk31A0[0].unk2C.unk4 = 0;
gUnknown_203F3E0->unk31A0[0].unk2C.unk0 = sub_815327C(3);
}
}
else
{
gUnknown_203F3E0->unk31A0[0].unk2C.unk0 = sub_815327C(0);
}
}
}
else
{
sub_8152090(11);
}
sub_815256C();
sub_8151D98();
}
}
static void sub_8150E68(void)
{
if (gUnknown_203F3E0->unk40 < 10)
{
if (JOY_NEW(DPAD_UP))
{
if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 == 0)
{
gUnknown_203F3E0->unk32CC.unk2C.unk0 = 2;
}
}
else if (JOY_NEW(DPAD_RIGHT))
{
if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 == 0)
{
gUnknown_203F3E0->unk32CC.unk2C.unk0 = 1;
}
}
else if (JOY_NEW(DPAD_LEFT))
{
if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 == 0)
{
gUnknown_203F3E0->unk32CC.unk2C.unk0 = 3;
}
}
else
{
gUnknown_203F3E0->unk32CC.unk2C.unk0 = 0;
}
}
else
{
sub_8152090(11);
}
sub_8151E94();
}
static void sub_8150F40(void)
{
u8 i;
sub_815256C();
sub_8151D98();
if (sub_8152A98() == 1)
{
sub_8153004();
sub_8152090(5);
}
else
{
gUnknown_203F3E0->unk12C = 1;
for (i = 1; i < gUnknown_203F3E0->unk24; i++)
{
if (gUnknown_203F3E0->unk130[i] != 1)
{
gUnknown_203F3E0->unk12C = 0;
break;
}
}
}
}
static void sub_8150FC4(void)
{
sub_8151E94();
if (sub_8152AD8() == 1)
sub_8152090(5);
}
static void sub_8150FDC(void)
{
u8 blockReceivedStatus;
u8 i;
switch (gUnknown_203F3E0->unk10)
{
case 0:
SendBlock(0, gUnknown_203F3E0->unk4A, sizeof(gUnknown_203F3E0->unk4A));
gUnknown_203F3E0->unk08 = 0;
gUnknown_203F3E0->unk10++;
break;
case 1:
if (IsLinkTaskFinished())
{
gUnknown_203F3E0->unk10++;
}
break;
case 2:
blockReceivedStatus = GetBlockReceivedStatus();
for (i = 0; i < gUnknown_203F3E0->unk24; blockReceivedStatus >>= 1, i++)
{
if (blockReceivedStatus & 1)
{
ResetBlockReceivedFlag(i);
gUnknown_203F3E0->unk08++;
}
}
if (gUnknown_203F3E0->unk08 >= gUnknown_203F3E0->unk24)
{
gUnknown_203F3E0->unk14++;
gUnknown_203F3E0->unk10++;
}
break;
default:
if (WaitFanfare(TRUE))
{
sub_8152090(6);
FadeOutAndPlayNewMapMusic(MUS_WIN_YASEI, 4);
}
break;
}
}
static void sub_815109C(void)
{
u8 i;
u8 blockReceivedStatus;
switch (gUnknown_203F3E0->unk10) {
case 0:
SendBlock(0, gUnknown_203F3E0->unk4A[gUnknown_203F3E0->unk14], sizeof(gUnknown_203F3E0->unk4A));
gUnknown_203F3E0->unk08 = 0;
gUnknown_203F3E0->unk10++;
break;
case 1:
if (IsLinkTaskFinished()) {
gUnknown_203F3E0->unk10++;
}
break;
case 2:
blockReceivedStatus = GetBlockReceivedStatus();
for (i = 0; i < gUnknown_203F3E0->unk24; blockReceivedStatus >>= 1, i++)
{
if (blockReceivedStatus & 1)
{
memcpy(gUnknown_203F3E0->unk4A, gBlockRecvBuffer, sizeof(gUnknown_203F3E0->unk4A));
ResetBlockReceivedFlag(i);
gUnknown_203F3E0->unk08++;
}
}
if (gUnknown_203F3E0->unk08 >= gUnknown_203F3E0->unk24) {
gUnknown_203F3E0->unk14++;
gUnknown_203F3E0->unk10++;
}
break;
default:
if (WaitFanfare(TRUE)) {
gUnknown_203F3E0->unk114 = gUnknown_203F3E0->unk4A[gUnknown_203F3E0->multiplayerId][5];
sub_8152090(6);
FadeOutAndPlayNewMapMusic(MUS_WIN_YASEI, 4);
}
break;
}
}
static void sub_8151198(void)
{
u8 sp00;
u8 i;
u8 blockReceivedStatus;
switch (gUnknown_203F3E0->unk10)
{
case 0:
sub_81531FC();
sub_81540DC(TRUE);
sub_81544F0();
sub_81545BC(TRUE);
sub_81549D4(2);
gUnknown_203F3E0->unk10++;
break;
case 1:
if (!sub_8155E68())
{
sp00 = 1;
sub_81549D4(5);
sp00 = sub_8155E8C();
SendBlock(0, &sp00, sizeof(sp00));
gUnknown_203F3E0->unk10++;
}
break;
case 2:
if (IsLinkTaskFinished())
{
gUnknown_203F3E0->unk10++;
gUnknown_203F3E0->unk08 = 0;
}
break;
case 3:
blockReceivedStatus = GetBlockReceivedStatus();
for (i = 0; i < gUnknown_203F3E0->unk24; blockReceivedStatus >>= 1, i++)
{
if (blockReceivedStatus & 1)
{
*(gUnknown_203F3E0->unk10C + i) = *(u8 *)gBlockRecvBuffer[i];
ResetBlockReceivedFlag(i);
gUnknown_203F3E0->unk08++;
}
}
if (gUnknown_203F3E0->unk08 >= gUnknown_203F3E0->unk24) {
if (++gUnknown_203F3E0->unk14 >= 120)
{
sub_81549D4(6);
gUnknown_203F3E0->unk10++;
}
}
break;
default:
if (!sub_8155E68())
{
sub_8152090(7);
}
break;
}
}
static void sub_81512B4(void)
{
u8 sp0;
u8 i;
u8 blockReceivedStatus;
switch (gUnknown_203F3E0->unk10)
{
case 0:
if (sub_81534AC() >= 3000)
{
sub_81549D4(4);
}
gUnknown_203F3E0->unk10++;
break;
case 1:
if (!sub_8155E68())
{
sub_81549D4(3);
gUnknown_203F3E0->unk10++;
}
break;
case 2:
sub_81546C0();
sub_8153048();
gUnknown_203F3E0->unk10++;
break;
case 3:
if ((sp0 = sub_8155E8C()) != 0)
{
gUnknown_203F3E0->unk10++;
}
break;
case 4:
if (!sub_8155E68())
{
sub_81549D4(5);
sp0 = sub_8155E8C();
SendBlock(0, &sp0, sizeof(sp0));
gUnknown_203F3E0->unk10++;
}
break;
case 5:
if (IsLinkTaskFinished())
{
gUnknown_203F3E0->unk10++;
gUnknown_203F3E0->unk08 = 0;
}
break;
case 6:
blockReceivedStatus = GetBlockReceivedStatus();
for (i = 0; i < gUnknown_203F3E0->unk24; blockReceivedStatus >>= 1, i++)
{
if (blockReceivedStatus & 1)
{
*(gUnknown_203F3E0->unk10C + i) = *(u8 *)gBlockRecvBuffer[i];
ResetBlockReceivedFlag(i);
gUnknown_203F3E0->unk08++;
}
}
if (gUnknown_203F3E0->unk08 >= gUnknown_203F3E0->unk24) {
if (++gUnknown_203F3E0->unk14 >= 120)
{
sub_815336C();
sub_81549D4(6);
gUnknown_203F3E0->unk10++;
}
}
else
{
sub_81532B8();
}
break;
default:
if (!sub_8155E68())
{
for (i = 0; i < gUnknown_203F3E0->unk24; i++)
{
if (gUnknown_203F3E0->unk10C[i] == 2)
{
sub_8152090(8);
return;
}
}
sub_8152090(10);
}
break;
}
}
static void sub_8151488(void)
{
switch (gUnknown_203F3E0->unk10)
{
case 0:
Link_TryStartSend5FFF();
sub_81549D4(7);
gUnknown_203F3E0->unk10++;
break;
case 1:
if (!sub_8155E68())
{
gUnknown_203F3E0->unk10++;
}
break;
case 2:
if (sub_8155E8C() == 5)
{
gUnknown_203F3E0->unk10++;
}
break;
default:
if (!gReceivedRemoteLinkPlayers)
{
sub_8152090(9);
}
break;
}
}
static void sub_81514F0(void)
{
switch (gUnknown_203F3E0->unk10)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gUnknown_203F3E0->unk10++;
break;
case 1:
UpdatePaletteFade();
if (!gPaletteFade.active)
{
gUnknown_203F3E0->unk10++;
}
break;
case 2:
sub_8154274();
sub_8153ED8();
sub_8153D08(gUnknown_203F3E0->unk24);
sub_8154578();
gUnknown_3002044 = TRUE;
sub_81549D4(8);
gUnknown_203F3E0->unk10++;
break;
default:
if (!sub_8155E68())
{
SetMainCallback2(gUnknown_203F3E0->savedCallback);
DestroyTask(gUnknown_203F3E0->unk04);
Free(gUnknown_203F3E0);
FreeAllWindowBuffers();
}
break;
}
}
static void sub_815159C(void)
{
switch (gUnknown_203F3E0->unk10)
{
case 0:
sub_81549D4(9);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gUnknown_203F3E0->unk10++;
break;
case 1:
UpdatePaletteFade();
if (!gPaletteFade.active)
{
gUnknown_203F3E0->unk10++;
}
break;
case 2:
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
ChangeBgX(2, 0, 0);
ChangeBgY(2, 0, 0);
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0, 0);
gUnknown_203F3E0->unk10++;
break;
case 3:
StopMapMusic();
gUnknown_203F3E0->unk10++;
break;
case 4:
PlayNewMapMusic(MUS_KINOMIKUI);
sub_8154540();
gUnknown_203F3E0->unk10++;
break;
case 5:
BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
gUnknown_203F3E0->unk10++;
break;
case 6:
UpdatePaletteFade();
if (!gPaletteFade.active)
{
gUnknown_203F3E0->unk10++;
}
break;
default:
DestroyTask(gUnknown_203F3E0->unk04);
sub_815206C(sub_81516DC);
sub_8154730();
sub_81508EC(gUnknown_203F3E0);
if (!gReceivedRemoteLinkPlayers)
{
gUnknown_203F3E0->unk24 = 1;
}
sub_8153150();
sub_81545BC(FALSE);
break;
}
}
static void sub_81516DC(u8 taskId)
{
switch (gUnknown_203F3E0->unk10)
{
case 0:
if (sub_81520B4() == 1)
{
gUnknown_203F3E0->unk10++;
}
break;
case 1:
sub_8153DD8();
gUnknown_203F3E0->unk10++;
break;
case 2:
if (sub_8153F1C() == TRUE)
{
gUnknown_203F3E0->unk10++;
}
break;
default:
if (gUnknown_203F3E0->unk20 != 0)
{
sub_815206C(sub_8150C08);
}
else
{
sub_815206C(sub_8150C40);
}
DestroyTask(taskId);
break;
}
}
static void sub_8151750(u8 taskId)
{
s16 * data = gTasks[taskId].data;
u8 i;
u8 blockReceivedStatus;
switch (data[0])
{
case 0:
SendBlock(0, &gUnknown_203F3E0->unk318C[gUnknown_203F3E0->multiplayerId].isShiny, sizeof(gUnknown_203F3E0->unk318C[gUnknown_203F3E0->multiplayerId].isShiny));
gUnknown_203F3E0->unk08 = 0;
data[0]++;
break;
case 1:
if (IsLinkTaskFinished())
{
data[0]++;
}
break;
case 2:
blockReceivedStatus = GetBlockReceivedStatus();
for (i = 0; i < gUnknown_203F3E0->unk24; blockReceivedStatus >>= 1, i++)
{
if (blockReceivedStatus & 1)
{
*(u8 *)&gUnknown_203F3E0->unk318C[i] = *(u8 *)gBlockRecvBuffer[i];
ResetBlockReceivedFlag(i);
gUnknown_203F3E0->unk08++;
}
}
if (gUnknown_203F3E0->unk08 >= gUnknown_203F3E0->unk24)
{
DestroyTask(taskId);
sub_81549D4(6);
gUnknown_203F3E0->unk10++;
}
break;
}
}
static void sub_815184C(void)
{
u8 i;
u8 r7 = gUnknown_203F3E0->unk24;
gUnknown_203F3E0->unk31A0[0].unk10 = sub_815A950(0, &gUnknown_203F3E0->unk31A0[0], &gUnknown_203F3E0->unk31A0[0].unk2C, &gUnknown_203F3E0->unk31A0[1].unk2C, &gUnknown_203F3E0->unk31A0[2].unk2C, &gUnknown_203F3E0->unk31A0[3].unk2C, &gUnknown_203F3E0->unk31A0[4].unk2C, &gUnknown_203F3E0->unk40, &gUnknown_203F3E0->unk120, &gUnknown_203F3E0->unk12C);
gUnknown_203F3E0->unk128 = 1;
for (i = 1; i < r7; i++)
{
if ( gUnknown_203F3E0->unkA8[i] == 0
&& sub_815AB04(i, &gUnknown_203F3E0->unk31A0[i].unk2C.unk0) == 0)
{
gUnknown_203F3E0->unk31A0[i].unk2C.unk0 = 0;
gUnknown_203F3E0->unk128 = 0;
}
}
if (++gUnknown_203F3E0->unk124 >= 60)
{
if (gUnknown_203F3E0->unk128 != 0)
{
sub_80FBA44();
gUnknown_203F3E0->unk124 = 0;
}
else if (gUnknown_203F3E0->unk124 > 70)
{
sub_80FBA44();
gUnknown_203F3E0->unk124 = 0;
}
}
for (i = 0; i < r7; i++)
{
if ( gUnknown_203F3E0->unk31A0[i].unk2C.unk0 != 0
&& gUnknown_203F3E0->unkA8[i] == 0)
{
gUnknown_203F3E0->unkA8[i] = 1;
}
switch (gUnknown_203F3E0->unkA8[i])
{
case 0:
default:
break;
case 1 ... 3:
if (++gUnknown_203F3E0->unkB0[i] >= 6)
{
gUnknown_203F3E0->unkB0[i] = 0;
gUnknown_203F3E0->unkA8[i] = 0;
gUnknown_203F3E0->unk31A0[i].unk2C.unk0 = 0;
gUnknown_203F3E0->unk31A0[i].unk2C.unk4 = 0;
gUnknown_203F3E0->unk31A0[i].unk2C.unk8 = 0;
}
break;
case 4:
if (++gUnknown_203F3E0->unkB0[i] >= 40)
{
gUnknown_203F3E0->unkB0[i] = 0;
gUnknown_203F3E0->unkA8[i] = 0;
gUnknown_203F3E0->unk31A0[i].unk2C.unk0 = 0;
gUnknown_203F3E0->unk31A0[i].unk2C.unk4 = 0;
gUnknown_203F3E0->unk31A0[i].unk2C.unk8 = 0;
}
break;
}
}
}
static void sub_8151A5C(void)
{
u8 i;
u8 r6 = gUnknown_203F3E0->unk24;
gUnknown_203F3E0->unk31A0[0].unk10 = sub_815A950(0, &gUnknown_203F3E0->unk31A0[0], &gUnknown_203F3E0->unk31A0[0].unk2C, &gUnknown_203F3E0->unk31A0[1].unk2C, &gUnknown_203F3E0->unk31A0[2].unk2C, &gUnknown_203F3E0->unk31A0[3].unk2C, &gUnknown_203F3E0->unk31A0[4].unk2C, &gUnknown_203F3E0->unk40, &gUnknown_203F3E0->unk120, &gUnknown_203F3E0->unk12C);
gUnknown_203F3E0->unk128 = 1;
for (i = 1; i < r6; i++)
{
if (sub_815AB60(i) != 0)
{
gUnknown_203F3E0->unk130[i] = 1;
gUnknown_203F3E0->unk128 = 0;
}
}
if (++gUnknown_203F3E0->unk124 >= 60)
{
if (gUnknown_203F3E0->unk128 != 0)
{
sub_80FBA44();
gUnknown_203F3E0->unk124 = 0;
}
else if (gUnknown_203F3E0->unk124 > 70)
{
sub_80FBA44();
gUnknown_203F3E0->unk124 = 0;
}
}
}
static void sub_8151B54(void)
{
switch (gUnknown_203F3E0->unk18)
{
case 3:
if (sub_8152A00() == TRUE)
{
sub_8152A70();
gUnknown_203F3E0->unk11C = 1;
}
break;
case 4:
sub_815184C();
break;
case 11:
sub_8151A5C();
break;
}
}
static void sub_8151BA0(void)
{
switch (gUnknown_203F3E0->unk18)
{
case 4:
sub_815A61C(&gUnknown_203F3E0->unk32CC, &gUnknown_203F3E0->unk31A0[0].unk2C, &gUnknown_203F3E0->unk31A0[1].unk2C, &gUnknown_203F3E0->unk31A0[2].unk2C, &gUnknown_203F3E0->unk31A0[3].unk2C, &gUnknown_203F3E0->unk31A0[4].unk2C, gUnknown_203F3E0->unk40, gUnknown_203F3E0->unk120, gUnknown_203F3E0->unk12C);
break;
case 11:
sub_815A61C(&gUnknown_203F3E0->unk32CC, &gUnknown_203F3E0->unk31A0[0].unk2C, &gUnknown_203F3E0->unk31A0[1].unk2C, &gUnknown_203F3E0->unk31A0[2].unk2C, &gUnknown_203F3E0->unk31A0[3].unk2C, &gUnknown_203F3E0->unk31A0[4].unk2C, gUnknown_203F3E0->unk40, gUnknown_203F3E0->unk120, gUnknown_203F3E0->unk12C);
break;
}
}
static void sub_8151C5C(void)
{
switch (gUnknown_203F3E0->unk18)
{
case 4:
sub_815A950(gUnknown_203F3E0->multiplayerId, &gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId], &gUnknown_203F3E0->unk31A0[0].unk2C, &gUnknown_203F3E0->unk31A0[1].unk2C, &gUnknown_203F3E0->unk31A0[2].unk2C, &gUnknown_203F3E0->unk31A0[3].unk2C, &gUnknown_203F3E0->unk31A0[4].unk2C, &gUnknown_203F3E0->unk40, &gUnknown_203F3E0->unk120, &gUnknown_203F3E0->unk12C);
break;
case 11:
sub_815A950(gUnknown_203F3E0->multiplayerId, &gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId], &gUnknown_203F3E0->unk31A0[0].unk2C, &gUnknown_203F3E0->unk31A0[1].unk2C, &gUnknown_203F3E0->unk31A0[2].unk2C, &gUnknown_203F3E0->unk31A0[3].unk2C, &gUnknown_203F3E0->unk31A0[4].unk2C, &gUnknown_203F3E0->unk40, &gUnknown_203F3E0->unk120, &gUnknown_203F3E0->unk12C);
break;
}
}
static void sub_8151D28(void)
{
switch (gUnknown_203F3E0->unk18)
{
case 3:
sub_815A5BC(1);
gUnknown_203F3E0->unk11C = 1;
break;
case 4:
if (gUnknown_203F3E0->unk32CC.unk2C.unk0 != 0)
{
sub_815AAD8(gUnknown_203F3E0->unk32CC.unk2C.unk0);
}
break;
case 11:
if (gUnknown_203F3E0->unk120 == 0 && gUnknown_203F3E0->unk12C == 0)
{
sub_815AB3C(1);
}
break;
}
}
static void sub_8151D98(void)
{
if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 == 0)
{
if (!IsSEPlaying())
{
gUnknown_203F3E0->unk144 = 0;
}
}
else if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk4 == 1)
{
if (gUnknown_203F3E0->unk144 == 0)
{
m4aSongNumStop(SE_SEIKAI);
PlaySE(SE_SEIKAI);
gUnknown_203F3E0->unk144 = 1;
}
}
else if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk8 == 1)
{
if (gUnknown_203F3E0->unk144 == 0 && !IsSEPlaying())
{
PlaySE(SE_BOO);
sub_8153BC0(1);
gUnknown_203F3E0->unk144 = 1;
}
}
if (gUnknown_203F3E0->unk154 == 0 && gUnknown_203F3E0->unk40 >= 10)
{
StopMapMusic();
gUnknown_203F3E0->unk154 = 1;
}
else if (gUnknown_203F3E0->unk154 == 1)
{
PlayFanfareByFanfareNum(FANFARE_10); // MUS_ME_ZANNEN
gUnknown_203F3E0->unk154 = 2;
}
}
static void sub_8151E94(void)
{
u8 r8 = gUnknown_203F3E0->unk44;
u8 r7 = gUnknown_203F3E0->unk48;
u8 r4;
if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 == 0)
{
if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk4 != 1 && gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk8 != 1)
{
gUnknown_203F3E0->unk144 = 0;
}
}
else if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk4 == 1)
{
if (gUnknown_203F3E0->unk144 == 0)
{
m4aSongNumStop(SE_SEIKAI);
PlaySE(SE_SEIKAI);
gUnknown_203F3E0->unk144 = 1;
}
}
else if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk8 == 1)
{
if (gUnknown_203F3E0->unk144 == 0 && !IsSEPlaying())
{
PlaySE(SE_BOO);
sub_8153BC0(1);
gUnknown_203F3E0->unk144 = 1;
}
}
for (r4 = r8; r4 < r7; r4++)
{
struct DodrioSubstruct_31A0_14 * ptr = &gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk14;
if (ptr->unkB[r4] >= 10)
{
if (gUnknown_203F3E0->unk148[r4] == 0)
{
PlaySE(SE_FUUSEN1 + ptr->unk0[r4]);
gUnknown_203F3E0->unk148[r4] = 1;
}
}
else
{
gUnknown_203F3E0->unk148[r4] = 0;
}
}
if (gUnknown_203F3E0->unk154 == 0 && gUnknown_203F3E0->unk40 >= 10)
{
StopMapMusic();
gUnknown_203F3E0->unk154 = 1;
}
else if (gUnknown_203F3E0->unk154 == 1)
{
PlayFanfareByFanfareNum(FANFARE_10); // MUS_ME_ZANNEN
gUnknown_203F3E0->unk154 = 2;
}
}
static void sub_815201C(void)
{
RunTasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
static void sub_8152034(void)
{
TransferPlttBuffer();
LoadOam();
ProcessSpriteCopyRequests();
}
static void sub_8152048(struct DodrioSubstruct_318C * a0, struct Pokemon * a1)
{
a0->isShiny = IsMonShiny(a1);
}
static void sub_815205C(TaskFunc func, u8 priority)
{
CreateTask(func, priority);
}
static void sub_815206C(TaskFunc func)
{
gUnknown_203F3E0->unk04 = CreateTask(func, 1);
gUnknown_203F3E0->unk10 = 0;
gUnknown_203F3E0->unk0C = 0;
gUnknown_203F3E0->unk14 = 0;
}
static void sub_8152090(u8 a0)
{
gUnknown_203F3E0->unk1C = gUnknown_203F3E0->unk18;
gUnknown_203F3E0->unk18 = a0;
gUnknown_203F3E0->unk10 = 0;
gUnknown_203F3E0->unk14 = 0;
}
static bool32 sub_81520B4(void)
{
u8 r2 = gUnknown_203F3E0->unk14 / 4;
gUnknown_203F3E0->unk14++;
if (r2 != 0 && gUnknown_203F3E0->unk14 % 4 == 0)
{
if (r2 < sUnknown_8475548[gUnknown_203F3E0->unk24 - 1])
{
SetGpuReg(REG_OFFSET_BG1HOFS, (r2 * 8));
SetGpuReg(REG_OFFSET_BG2HOFS, -(r2 * 8));
return FALSE;
}
else
{
return TRUE;
}
}
else
{
return FALSE;
}
}
static void sub_8152110(void)
{
u8 i;
u8 start = gUnknown_203F3E0->unk44;
u8 finish = gUnknown_203F3E0->unk48;
for (i = start; i < finish; i++)
{
struct DodrioSubstruct_31A0_14 * ptr = &gUnknown_203F3E0->unk32CC.unk14;
ptr->unkB[i] = (i % 2 == 0) ? 1 : 0;
ptr->unk0[i] = 0;
}
}
static void sub_8152174(void)
{
u8 sp0 = gUnknown_203F3E0->unk44;
u8 sp4 = gUnknown_203F3E0->unk48;
u8 sp8 = gUnknown_203F3E0->unk24;
u8 i, j, k, r5;
if (gUnknown_203F3E0->unk40 >= 10)
return;
for (i = 0; i < sp8; i++)
{
u8 *ptr = &gUnknown_203F3E0->unk31A0[i].unk2C.unk0;
if (*ptr != 0 && gUnknown_203F3E0->unkA8[i] == 1)
{
for (j = sp0; j < sp4; j++)
{
r5 = sUnknown_8471F50[0][0][j];
if (gUnknown_203F3E0->unkF4[r5][0] == i || gUnknown_203F3E0->unkF4[r5][1] == i)
break;
if (sub_8152484(i, *ptr, r5) == TRUE)
{
for (k = 0; k < 2; k++)
{
if (gUnknown_203F3E0->unkF4[r5][k] == 0xFF)
{
gUnknown_203F3E0->unkF4[r5][k] = i;
gUnknown_203F3E0->unkA8[i] = 2;
gUnknown_203F3E0->unkC4[r5] = 1;
break;
}
}
break;
}
if (gUnknown_203F3E0->unk31A0[i].unk2C.unk8 == 1)
break;
}
}
}
for (j = sp0; j < sp4; j++)
{
u8 id = 0xFF;
r5 = sUnknown_8471F50[0][0][j];
if (gUnknown_203F3E0->unkC4[r5] == 1)
{
s32 r2;
u8 r4, r3 = gUnknown_203F3E0->unk90[sub_8152BD4(r5)] / 7;
if (r3 >= NELEMS(sUnknown_847553C) - 1)
r3 = NELEMS(sUnknown_847553C) - 1;
r2 = sUnknown_847553C[r3][gUnknown_203F3E0->unk31A0[0].unk14.unk0[r5]] - gUnknown_203F3E0->unkD0[r5];
if (r2 < 6)
gUnknown_203F3E0->unk9C[r5] += r2;
if (++gUnknown_203F3E0->unk9C[r5] >= 6)
{
gUnknown_203F3E0->unk9C[r5] = 0;
if (gUnknown_203F3E0->unkF4[r5][0] == 0xFF && gUnknown_203F3E0->unkF4[r5][1] == 0xFF)
{
continue;
}
else if (gUnknown_203F3E0->unkF4[r5][0] != 0xFF && gUnknown_203F3E0->unkF4[r5][1] == 0xFF)
{
r4 = gUnknown_203F3E0->unkF4[r5][0];
}
else
{
u8 unk0 = gUnknown_203F3E0->unkF4[r5][0];
i = gUnknown_203F3E0->unkF4[r5][1]; // Have to re-use the variable to match.
if (!(Random() & 1))
{
r4 = unk0;
id = i;
}
else
{
r4 = i;
id = unk0;
}
}
gUnknown_203F3E0->unk32CC.unk14.unkB[r5] = 7;
gUnknown_203F3E0->unkC4[r5] = 2;
gUnknown_203F3E0->unkA8[r4] = 3;
gUnknown_203F3E0->unkB8[r5] = r4;
gUnknown_203F3E0->unk31A0[r4].unk2C.unk4 = 1;
gUnknown_203F3E0->unk31A0[id].unk2C.unk8 = 1;
gUnknown_203F3E0->unk86[r4]++;
sub_8152D34(0, r5, r4);
sub_8152F94(TRUE);
sub_8152B64(r4);
gUnknown_203F3E0->unkE8[r5] = gUnknown_203F3E0->unk32CC.unk14.unk0[r5];
gUnknown_203F3E0->unk32CC.unk14.unk0[r5] = 3;
gUnknown_203F3E0->unkF4[r5][0] = 0xFF;
gUnknown_203F3E0->unkF4[r5][1] = 0xFF;
}
}
}
}
static bool32 sub_8152484(u8 a0, u8 a1, u8 a2)
{
s32 r7 = 0;
u8 r5 = gUnknown_203F3E0->unk24 - 1;
struct DodrioSubstruct_31A0_14 * ptr = &gUnknown_203F3E0->unk32CC.unk14;
switch (a1)
{
case 3:
default:
r7 = 0;
break;
case 2:
r7 = 1;
break;
case 1:
r7 = 2;
break;
}
if (ptr->unkB[a2] == 6 || ptr->unkB[a2] == 7)
{
if (a2 == sUnknown_8472063[r5][a0][r7])
{
if (gUnknown_203F3E0->unkC4[a2] == 1 || gUnknown_203F3E0->unkC4[a2] == 2)
{
gUnknown_203F3E0->unk31A0[a0].unk2C.unk8 = 1;
return FALSE;
}
else
{
return TRUE;
}
}
}
else
{
if (a2 == sUnknown_8472063[r5][a0][r7])
{
gUnknown_203F3E0->unkA8[a0] = 4;
gUnknown_203F3E0->unk31A0[a0].unk2C.unk8 = 1;
}
}
return FALSE;
}
static void sub_815256C(void)
{
u8 r1 = gUnknown_203F3E0->unk44;
u8 r9 = gUnknown_203F3E0->unk48;
u8 r3 = 0;
u8 r10 = 0;
u8 i;
u8 r2;
struct DodrioStruct * ptr;
gUnknown_203F3E0->unk120 = 0;
for (i = r1; i < r9 - 1; i++)
{
ptr = gUnknown_203F3E0;
if (gUnknown_203F3E0->unkC4[i] == 0 || gUnknown_203F3E0->unkC4[i] == 1)
{
gUnknown_203F3E0->unk120 = 1;
if (ptr->unk32CC.unk14.unkB[i] >= 10)
{
ptr->unk32CC.unk14.unkB[i] = 10;
gUnknown_203F3E0->unkC4[i] = 3;
if (gUnknown_203F3E0->unk148[i] == 0)
{
gUnknown_203F3E0->unk148[i] = 1;
PlaySE(SE_FUUSEN1 + ptr->unk32CC.unk14.unk0[i]);
}
if (gUnknown_203F3E0->unk40 < 10 || r10 == 1)
{
r10 = 1;
gUnknown_203F3E0->unk148[i] = 0;
if (gUnknown_203F3E0->unk40 < 10)
{
gUnknown_203F3E0->unk40++;
}
sub_8152D34(3, i, 0);
sub_8152F94(FALSE);
}
}
else
{
r3 = gUnknown_203F3E0->unk90[sub_8152BD4(i)] / 7;
if (r3 >= NELEMS(sUnknown_847553C) - 1)
{
r3 = NELEMS(sUnknown_847553C) - 1;
}
r2 = sUnknown_847553C[r3][ptr->unk32CC.unk14.unk0[i]];
if (++gUnknown_203F3E0->unkD0[i] >= r2)
{
ptr->unk32CC.unk14.unkB[i]++;
gUnknown_203F3E0->unkD0[i] = 0;
}
sub_8152174();
}
}
else if (gUnknown_203F3E0->unkC4[i] == 2)
{
// gUnknown_203F3E0->unk120 = 1;
if (++gUnknown_203F3E0->unkDC[i] >= 20)
{
gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->unkB8[i]].unk2C.unk4 = 0;
gUnknown_203F3E0->unkDC[i] = 0;
gUnknown_203F3E0->unkD0[i] = 0;
gUnknown_203F3E0->unkC4[i] = 0;
ptr->unk32CC.unk14.unkB[i] = 1;
ptr->unk32CC.unk14.unk0[i] = sub_8152BF8(sub_8152BD4(i), i);
}
}
else if (gUnknown_203F3E0->unkC4[i] == 3)
{
if (++gUnknown_203F3E0->unkDC[i] >= 20)
{
if (gUnknown_203F3E0->unk40 < 10)
{
gUnknown_203F3E0->unkDC[i] = 0;
gUnknown_203F3E0->unkD0[i] = 0;
gUnknown_203F3E0->unkC4[i] = 0;
ptr->unk32CC.unk14.unkB[i] = 1;
gUnknown_203F3E0->unkE8[i] = ptr->unk32CC.unk14.unk0[i];
ptr->unk32CC.unk14.unk0[i] = sub_8152BF8(sub_8152BD4(i), i);
}
}
}
}
}
static void sub_81527D0(void)
{
u8 i, first, count;
first = gUnknown_203F3E0->unk44;
count = gUnknown_203F3E0->unk48;
for (i = first; i < count; i++)
{
struct DodrioSubstruct_31A0 * ptr = &gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId];
u8 var = sUnknown_8471F50[gUnknown_203F3E0->unk24 - 1][gUnknown_203F3E0->multiplayerId][i];
if (ptr->unk14.unkB[var] != 0)
sub_81542EC(i, FALSE);
else
sub_81542EC(i, TRUE);
if (ptr->unk14.unkB[var] > 9)
{
sub_8154398(i, ptr->unk14.unk0[var] + 3);
sub_8154370(i, ptr->unk14.unkB[var] * 2 - 1);
}
else if (ptr->unk14.unk0[var] == 3)
{
ptr->unk14.unkB[var] = 7;
sub_8154398(i, 6);
sub_8154370(i, ptr->unk14.unkB[var] * 2 - 1);
}
else
{
sub_8154398(i, ptr->unk14.unk0[var]);
sub_8154370(i, ptr->unk14.unkB[var] * 2);
}
}
}
static void sub_81528D0(void)
{
u8 i, count;
count = gUnknown_203F3E0->unk24;
for (i = 0; i < count; i++)
{
struct DodrioSubstruct_31A0 * ptr = &gUnknown_203F3E0->unk31A0[i];
sub_8153DA8(i, ptr->unk2C.unk0);
}
}
static void sub_8152910(void)
{
u8 i, count;
count = gUnknown_203F3E0->unk24;
for (i = 0; i < count; i++)
sub_8153DA8(i, 4);
}
static void sub_815293C(void)
{
sub_81527D0();
if (gUnknown_203F3E0->unk40 > 9)
sub_8152910();
else
sub_81528D0();
sub_8153FC8(gUnknown_203F3E0->unk40);
}
// This function is literally the same as the one above...Why?
static void sub_8152970(void)
{
sub_81527D0();
if (gUnknown_203F3E0->unk40 > 9)
sub_8152910();
else
sub_81528D0();
sub_8153FC8(gUnknown_203F3E0->unk40);
}
static void sub_81529A4(u8 arg0, u8 *arg1, u8 *arg2)
{
switch (arg0)
{
case 1:
*arg1 = 4, *arg2 = 7;
break;
case 2:
*arg1 = 3, *arg2 = 8;
break;
case 3:
*arg1 = 2, *arg2 = 9;
break;
case 4:
*arg1 = 1, *arg2 = 10;
break;
case 5:
*arg1 = 0, *arg2 = 11;
break;
}
}
static bool32 sub_8152A00(void)
{
u8 i, count;
count = gUnknown_203F3E0->unk24;
for (i = 1; i < count; i++)
{
if (gUnknown_203F3E0->unk158[i] == 0)
gUnknown_203F3E0->unk158[i] = sub_815A5E8(i);
}
// This loop won't ever run, the seemingly pointless assingment below is to make the compiler
// generate code for it.
count = count;
for (; i < count; i++)
{
if (gUnknown_203F3E0->unk158[i] == 0)
return FALSE;
}
return TRUE;
}
static void sub_8152A70(void)
{
u8 i;
for (i = 0; i < 5; i++)
gUnknown_203F3E0->unk158[i] = 0;
}
static bool32 sub_8152A98(void)
{
if (gUnknown_203F3E0->unk40 > 9 && gUnknown_203F3E0->unk120 == 0)
{
gUnknown_203F3E0->unk40 = 10;
if (gUnknown_203F3E0->unk12C != 0)
return TRUE;
}
return FALSE;
}
static bool32 sub_8152AD8(void)
{
u8 i, first, count;
if (gUnknown_203F3E0->unk40 > 9)
{
first = gUnknown_203F3E0->unk44;
count = gUnknown_203F3E0->unk48;
gUnknown_203F3E0->unk40 = 10;
if (gUnknown_203F3E0->unk12C != 0)
{
for (i = first; i < count; i++)
{
struct DodrioSubstruct_31A0 * ptr = &gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId];
u8 var = sUnknown_8471F50[gUnknown_203F3E0->unk24 - 1][gUnknown_203F3E0->multiplayerId][i];
if (ptr->unk14.unkB[var] != 10)
return FALSE;
}
return TRUE;
}
}
return FALSE;
}
static void sub_8152B64(u8 arg0)
{
u8 var = sUnknown_8475550[gUnknown_203F3E0->unk90[arg0] % 7] + (gUnknown_203F3E0->unk90[arg0] / 7) * 100;
if (gUnknown_203F3E0->unk86[arg0] >= var)
gUnknown_203F3E0->unk90[arg0]++;
}
static u8 sub_8152BD4(u8 arg0)
{
return sUnknown_84720FC[gUnknown_203F3E0->unk24 - 1][arg0];
}
static u8 sub_8152BF8(u8 arg0, u8 arg1)
{
u8 i, var3;
u8 count = gUnknown_203F3E0->unk24 - 1;
u8 var0 = sUnknown_84720AE[count][arg0][0];
u8 var1 = sUnknown_84720AE[count][arg0][1];
u8 var2 = sUnknown_84720AE[count][arg0][2];
for (i = 0; sUnknown_8472133[count][i] != 0; i++)
{
if (arg1 == sUnknown_8472133[count][i])
return sub_8152CB8(gUnknown_203F3E0->unk90[var1], arg1);
}
// Gets the highest of the three.
if (gUnknown_203F3E0->unk90[var0] > gUnknown_203F3E0->unk90[var1])
var3 = gUnknown_203F3E0->unk90[var0];
else
var3 = gUnknown_203F3E0->unk90[var1];
if (gUnknown_203F3E0->unk90[var2] > var3)
var3 = gUnknown_203F3E0->unk90[var2];
return sub_8152CB8(var3, arg1);
}
static u8 sub_8152CB8(u8 arg0, u8 arg1)
{
u8 var = gUnknown_203F3E0->unkE8[arg1];
switch (arg0 % 7)
{
default: return 0;
case 0: return 0;
case 1: return 1;
case 2: return 2;
case 3:
if (var == 0)
return 1;
else
return 0;
case 4:
if (var == 0)
return 2;
else
return 0;
case 5:
if (var == 2)
return 1;
else
return 2;
case 6:
if (var == 0)
return 1;
else if (var == 1)
return 2;
else
return 0;
}
}
static void sub_8152D34(u8 arg0, u8 arg1, u8 arg2)
{
u8 var;
u8 count = gUnknown_203F3E0->unk24;
switch (arg0)
{
case 0:
case 1:
case 2:
var = gUnknown_203F3E0->unk31A0[0].unk14.unk0[arg1];
gUnknown_203F3E0->unk4A[arg2][var] = IncrementWithLimit(gUnknown_203F3E0->unk4A[arg2][var], 20000);
break;
case 3:
switch (count)
{
case 5:
switch (arg1)
{
case 0:
gUnknown_203F3E0->unk4A[2][3]++;
gUnknown_203F3E0->unk4A[3][3]++;
break;
case 1:
gUnknown_203F3E0->unk4A[3][3]++;
break;
case 2:
gUnknown_203F3E0->unk4A[3][3]++;
gUnknown_203F3E0->unk4A[4][3]++;
break;
case 3:
gUnknown_203F3E0->unk4A[4][3]++;
break;
case 4:
gUnknown_203F3E0->unk4A[4][3]++;
gUnknown_203F3E0->unk4A[0][3]++;
break;
case 5:
gUnknown_203F3E0->unk4A[0][3]++;
break;
case 6:
gUnknown_203F3E0->unk4A[0][3]++;
gUnknown_203F3E0->unk4A[1][3]++;
break;
case 7:
gUnknown_203F3E0->unk4A[1][3]++;
break;
case 8:
gUnknown_203F3E0->unk4A[1][3]++;
gUnknown_203F3E0->unk4A[2][3]++;
break;
case 9:
gUnknown_203F3E0->unk4A[2][3]++;
break;
}
break;
case 4:
switch (arg1)
{
case 1:
gUnknown_203F3E0->unk4A[2][3]++;
gUnknown_203F3E0->unk4A[3][3]++;
break;
case 2:
gUnknown_203F3E0->unk4A[3][3]++;
break;
case 3:
gUnknown_203F3E0->unk4A[3][3]++;
gUnknown_203F3E0->unk4A[0][3]++;
break;
case 4:
gUnknown_203F3E0->unk4A[0][3]++;
break;
case 5:
gUnknown_203F3E0->unk4A[0][3]++;
gUnknown_203F3E0->unk4A[1][3]++;
break;
case 6:
gUnknown_203F3E0->unk4A[1][3]++;
break;
case 7:
gUnknown_203F3E0->unk4A[1][3]++;
gUnknown_203F3E0->unk4A[2][3]++;
break;
case 8:
gUnknown_203F3E0->unk4A[2][3]++;
break;
}
break;
case 3:
switch (arg1)
{
case 2:
gUnknown_203F3E0->unk4A[1][3]++;
gUnknown_203F3E0->unk4A[2][3]++;
break;
case 3:
gUnknown_203F3E0->unk4A[2][3]++;
break;
case 4:
gUnknown_203F3E0->unk4A[2][3]++;
gUnknown_203F3E0->unk4A[0][3]++;
break;
case 5:
gUnknown_203F3E0->unk4A[0][3]++;
break;
case 6:
gUnknown_203F3E0->unk4A[0][3]++;
gUnknown_203F3E0->unk4A[1][3]++;
break;
case 7:
gUnknown_203F3E0->unk4A[1][3]++;
break;
}
break;
case 2:
switch (arg1)
{
case 3:
gUnknown_203F3E0->unk4A[0][3]++;
gUnknown_203F3E0->unk4A[1][3]++;
break;
case 4:
gUnknown_203F3E0->unk4A[0][3]++;
break;
case 5:
gUnknown_203F3E0->unk4A[0][3]++;
gUnknown_203F3E0->unk4A[1][3]++;
break;
case 6:
gUnknown_203F3E0->unk4A[1][3]++;
break;
}
break;
}
break;
}
}
static void sub_8152F94(bool32 arg0)
{
if (gUnknown_203F3E0->unk24 != 5)
return;
if (arg0 == TRUE)
{
if (++gUnknown_203F3E0->unk112 > gUnknown_203F3E0->unk114)
gUnknown_203F3E0->unk114 = gUnknown_203F3E0->unk112;
if (gUnknown_203F3E0->unk112 > 9999)
gUnknown_203F3E0->unk112 = 9999;
}
else
{
if (gUnknown_203F3E0->unk112 > gUnknown_203F3E0->unk114)
gUnknown_203F3E0->unk114 = gUnknown_203F3E0->unk112;
gUnknown_203F3E0->unk112 = 0;
}
}
static void sub_8153004(void)
{
u8 i;
for (i = 0; i < gUnknown_203F3E0->unk24; i++)
gUnknown_203F3E0->unk4A[i][5] = gUnknown_203F3E0->unk114;
}
static void sub_8153048(void)
{
u8 i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 11; j++)
gUnknown_203F3E0->unk31A0[i].unk14.unkB[j] = 0;
gUnknown_203F3E0->unk31A0[i].unk2C.unk0 = 0;
gUnknown_203F3E0->unk31A0[i].unk2C.unk4 = 0;
gUnknown_203F3E0->unk90[i] = 0;
gUnknown_203F3E0->unk86[i] = 0;
gUnknown_203F3E0->unk3308[i].unk0 = 0;
gUnknown_203F3E0->unk3308[i].unk4 = 0;
gUnknown_203F3E0->unk4A[i][0] = 0;
gUnknown_203F3E0->unk4A[i][1] = 0;
gUnknown_203F3E0->unk4A[i][2] = 0;
gUnknown_203F3E0->unk4A[i][3] = 0;
gUnknown_203F3E0->unk4A[i][4] = 0;
gUnknown_203F3E0->unk4A[i][5] = 0;
}
gUnknown_203F3E0->unk154 = 0;
gUnknown_203F3E0->unk112 = 0;
gUnknown_203F3E0->unk40 = 0;
sub_81528D0();
sub_81527D0();
}
static const s16 sUnknown_84755D8[] = {10, 30, 50, 50};
static void sub_8153150(void)
{
u8 i, var = 0, var2 = 0;
switch (gUnknown_203F3E0->unk24)
{
case 4: var = 1; break;
case 5: var = 2; break;
}
var2 = Random() % 10;
for (i = 0; i < 5; i++)
gUnknown_203F3E0->unk4A[i][4] = sUnknown_8475558[var][var2];
}
static u32 sub_81531BC(u8 arg0)
{
u32 sum = gUnknown_203F3E0->unk4A[arg0][0]
+ gUnknown_203F3E0->unk4A[arg0][1]
+ gUnknown_203F3E0->unk4A[arg0][2];
return min(sum, 9999);
}
static void sub_81531FC(void)
{
u32 berriesPicked = Min(sub_81531BC(gUnknown_203F3E0->multiplayerId), 9999);
u32 score = Min(sub_8153424(gUnknown_203F3E0->multiplayerId), 999990);
if (gSaveBlock2Ptr->berryPick.bestScore < score)
gSaveBlock2Ptr->berryPick.bestScore = score;
if (gSaveBlock2Ptr->berryPick.berriesPicked < berriesPicked)
gSaveBlock2Ptr->berryPick.berriesPicked = berriesPicked;
if (gSaveBlock2Ptr->berryPick.berriesPickedInRow < gUnknown_203F3E0->unk114)
gSaveBlock2Ptr->berryPick.berriesPickedInRow = gUnknown_203F3E0->unk114;
}
static u8 sub_815327C(u8 arg0)
{
u8 i, saved;
saved = gUnknown_203F3E0->unk98[3];
for (i = 3; i != 0; i--)
gUnknown_203F3E0->unk98[i] = gUnknown_203F3E0->unk98[i - 1];
gUnknown_203F3E0->unk98[0] = arg0;
return saved;
}
static void sub_81532B8(void)
{
if (gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] == 0)
{
if (JOY_NEW(DPAD_UP))
{
gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 = 2;
gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] = 6;
PlaySE(SE_W204);
}
else if (JOY_NEW(DPAD_LEFT))
{
gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 = 3;
gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] = 6;
PlaySE(SE_W204);
}
else if (JOY_NEW(DPAD_RIGHT))
{
gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 = 1;
gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] = 6;
PlaySE(SE_W204);
}
else
{
gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 = 0;
}
}
else
{
gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId]--;
}
}
static void sub_815336C(void)
{
gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 = 0;
}
u16 sub_8153390(void)
{
return gUnknown_203F3E0->unk4A[gUnknown_203F3E0->multiplayerId][4] + FIRST_BERRY_INDEX;
}
u8 sub_81533B4(void)
{
return gUnknown_203F3E0->unk24;
}
u8 *sub_81533C4(u8 id)
{
if (gReceivedRemoteLinkPlayers)
return gLinkPlayers[id].name;
else
return gUnknown_203F3E0->unk31A0[id].name;
}
u16 sub_8153404(u8 arg0, u8 arg1)
{
return gUnknown_203F3E0->unk4A[arg0][arg1];
}
static u32 sub_8153424(u8 arg0)
{
u8 i;
u32 var, sum = 0;
for (i = 0; i < 3; i++)
sum += gUnknown_203F3E0->unk4A[arg0][i] * sUnknown_84755D8[i];
var = gUnknown_203F3E0->unk4A[arg0][3] * sUnknown_84755D8[3];
if (sum <= var)
return 0;
else
return sum - var;
}
u32 sub_81534AC(void)
{
u8 i, count = gUnknown_203F3E0->unk24;
u32 maxVar = sub_8153424(0);
for (i = 1; i < count; i++)
{
u32 var = sub_8153424(i);
if (var > maxVar)
maxVar = var;
}
return Min(maxVar, 999990);
}
u32 sub_81534F0(u8 arg0)
{
u8 i, count = gUnknown_203F3E0->unk24;
u16 maxVar = gUnknown_203F3E0->unk4A[0][arg0];
for (i = 0; i < count; i++)
{
u16 var = gUnknown_203F3E0->unk4A[i][arg0];
if (var > maxVar)
maxVar = var;
}
return maxVar;
}
static u32 sub_8153534(u8 arg0)
{
u32 vals[5], temp;
s16 r6 = TRUE;
u8 i, count = gUnknown_203F3E0->unk24;
for (i = 0; i < count; i++)
vals[i] = temp = sub_8153424(i);
while (r6)
{
r6 = FALSE;
for (i = 0; i < count - 1; i++)
{
if (vals[i] < vals[i + 1])
{
SWAP(vals[i], vals[i + 1], temp);
r6 = TRUE;
}
}
}
return vals[arg0];
}
u32 sub_81535B0(void)
{
u8 i, r10 = 0, r8 = 0, r9 = 0, count = gUnknown_203F3E0->unk24;
// Function called two times for some reason.
sub_81534AC();
if (sub_81534AC() == 0)
{
for (i = 0; i < count; i++)
{
gUnknown_203F3E0->unk3308[i].unk0 = 4;
gUnknown_203F3E0->unk3308[i].unk4 = 0;
}
}
for (i = 0; i < count; i++)
gUnknown_203F3E0->unk3308[i].unk4 = Min(sub_8153424(i), 999990);
do
{
u32 r6 = sub_8153534(r10);
u8 r3 = r8;
for (i = 0; i < count; i++)
{
if (r6 == gUnknown_203F3E0->unk3308[i].unk4)
{
gUnknown_203F3E0->unk3308[i].unk0 = r3;
r8++;
r9++;
}
}
r10 = r8;
} while (r9 < count);
return 0;
}
void sub_81536A0(struct DodrioSubstruct_3308 * dst, u8 id)
{
*dst = gUnknown_203F3E0->unk3308[id];
}
static u8 sub_81536C0(u8 arg0)
{
u8 i, ret = 0, count = gUnknown_203F3E0->unk24;
u32 var, vars[5] = {0};
for (i = 0; i < count; i++)
vars[i] = sub_8153424(i);
var = vars[arg0];
for (i = 0; i < 5; i++)
{
if (i != arg0 && var < vars[i])
ret++;
}
return ret;
}
u8 sub_815372C(void)
{
u8 multiplayerId = gUnknown_203F3E0->multiplayerId;
u16 itemId = sub_8153390();
if (sub_8153424(multiplayerId) != sub_81534AC())
return 3;
if (!CheckBagHasSpace(itemId, 1))
return 2;
AddBagItem(itemId, 1);
if (!CheckBagHasSpace(itemId, 1))
return 1;
return 0;
}
// Really? What next, u32 Add(u32 a)return a+1;?
u32 IncrementWithLimit(u32 a, u32 max)
{
if (a < max)
return a + 1;
else
return max;
}
// Gamefreak pls, min(a, b) ((a) < (b) ? (a) : (b)) is a well-known macro
u32 Min(u32 a, u32 b)
{
if (a < b)
return a;
else
return b;
}
u8 sub_81537AC(u8 id)
{
return gUnknown_203F3E0->unk34[id];
}
void IsDodrioInParty(void)
{
int i;
for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES)
&& GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_DODRIO)
{
gSpecialVar_Result = TRUE;
return;
}
}
gSpecialVar_Result = FALSE;
}
void ShowDodrioBerryPickingRecords(void)
{
u8 taskId = CreateTask(Task_ShowDodrioBerryPickingRecords, 0);
Task_ShowDodrioBerryPickingRecords(taskId);
}
// Data related to printing saved results.
static const struct WindowTemplate sUnknown_84755E0 =
{
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
.width = 28,
.height = 11,
.paletteNum = 15,
.baseBlock = 1,
};
static const u8 *const sUnknown_84755E8[] = {gText_BerryPickingRecords, gText_BerriesPicked, gText_BestScore, gText_BerriesInRowFivePlayers};
static const u8 sUnknown_84755F8[] = {4, 7, 4};
ALIGNED(4)
static const u8 sUnknown_84755FC[][2] = {{24}, {40}, {56}};
static const u8 sUnknown_8475602[][2] = {{24}, {40}, {70}};
static void Task_ShowDodrioBerryPickingRecords(u8 taskId)
{
struct WindowTemplate window;
s32 i, width, widthCurr;
s16 *data = gTasks[taskId].data;
switch (data[0])
{
case 0:
data[1] = AddWindow(&sUnknown_84755E0);
sub_81538D0(data[1]);
CopyWindowToVram(data[1], COPYWIN_BOTH);
data[0]++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
data[0]++;
break;
case 2:
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
rbox_fill_rectangle(data[1]);
CopyWindowToVram(data[1], COPYWIN_MAP);
data[0]++;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
{
RemoveWindow(data[1]);
DestroyTask(taskId);
EnableBothScriptContexts();
}
break;
}
}
static void sub_81538D0(u8 windowId)
{
s32 i, x, numWidth;
s32 results[3];
u8 strbuf[20];
results[0] = gSaveBlock2Ptr->berryPick.berriesPicked;
results[1] = gSaveBlock2Ptr->berryPick.bestScore;
results[2] = gSaveBlock2Ptr->berryPick.berriesPickedInRow;
TextWindow_SetStdFrame0_WithPal(windowId, 0x21D, 0xD0);
DrawTextBorderOuter(windowId, 0x21D, 0xD);
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
AddTextPrinterParameterized(windowId, 2, sUnknown_84755E8[0], 1, 1, TEXT_SPEED_FF, NULL);
for (i = 0; i < 3; i++)
{
ConvertIntToDecimalStringN(strbuf, results[i], STR_CONV_MODE_LEFT_ALIGN, sUnknown_84755F8[i]);
numWidth = GetStringWidth(2, strbuf, -1);
AddTextPrinterParameterized(windowId, 2, sUnknown_84755E8[i + 1], 1, sUnknown_84755FC[i][0], TEXT_SPEED_FF, NULL);
x = 224 - numWidth;
AddTextPrinterParameterized(windowId, 2, strbuf, x, sUnknown_8475602[i][0], TEXT_SPEED_FF, NULL);
}
PutWindowTilemap(windowId);
}
// Debug functions?
static const u16 sUnknown_8475608[][4] =
{
{9999, 0, 90, 9999},
{9999, 9999, 70, 9999},
{9999, 0, 9999, 0},
{9999, 9999, 60, 0},
{9999, 9999, 9999, 0},
};
static const u8 sUnknown_8475630[] = _("あいうえおかき");
static const u8 sUnknown_8475638[] = _("ABCDEFG");
static const u8 sUnknown_8475640[] = _("0123456");
static const u8 *const sPlaceholderPlayerNames[] =
{
sUnknown_8475630,
sUnknown_8475630,
sUnknown_8475630,
sUnknown_8475638,
sUnknown_8475640
};
static void sub_81539EC(void)
{
gUnknown_203F3E0->unk24 = GetLinkPlayerCount();
}
static void sub_8153A04(void)
{
u8 i, playerId;
for (playerId = gUnknown_203F3E0->unk24; playerId < NELEMS(sPlaceholderPlayerNames); playerId++)
StringCopy(gLinkPlayers[playerId].name, sPlaceholderPlayerNames[playerId]);
gUnknown_203F3E0->unk24 = 5;
for (i = 0; i < 4; i++)
{
for (playerId = 0; playerId < gUnknown_203F3E0->unk24; playerId++)
gUnknown_203F3E0->unk4A[playerId][i] = sUnknown_8475608[playerId][i];
}
}