From 8dcae92a5fba55497bf69d7d263cbabb2f9537ea Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 4 Mar 2020 11:19:39 -0500 Subject: port/decomp through sub_8150FDC --- src/dodrio_berry_picking.c | 957 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 811 insertions(+), 146 deletions(-) (limited to 'src') diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 36dc3fdd2..2341e4341 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -1,40 +1,201 @@ #include "global.h" -#include "bg.h" +#include "gflib.h" +#include "link.h" +#include "minigame_countdown.h" #include "strings.h" -#include "window.h" - -/*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_8150FDC(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_8150F40(void); -/*static*/ void sub_8150E68(void); -/*static*/ void sub_815109C(void); -/*static*/ void sub_8150FC4(void); -/*static*/ void nullsub_97(struct Sprite *sprite); -/*static*/ void sub_81543E8(struct Sprite *sprite); -/*static*/ void sub_8154A2C(void); -/*static*/ void sub_8154B34(void); -/*static*/ void sub_8154F80(void); -/*static*/ void sub_81556E0(void); -/*static*/ void sub_8155A78(void); -/*static*/ void sub_8155B4C(void); -/*static*/ void sub_8155C2C(void); -/*static*/ void sub_8155C80(void); -/*static*/ void unused_0(void); -/*static*/ void nullsub_98(void); +#include "task.h" +#include "constants/songs.h" + +struct DodrioSubstruct_0160 +{ + /*0x0000 : 0x3000*/ u16 ALIGNED(4) tilemapBuffers[3][BG_SCREEN_SIZE]; + /*0x3000 : 0x3160*/ bool32 finished; + /*0x3004 : 0x3164*/ u8 ALIGNED(4) unk3004; + /*0x3008 : 0x3168*/ u8 ALIGNED(4) unk3008[10]; + /*0x3014 : 0x3174*/ u8 ALIGNED(4) state; + /*0x3018 : 0x3178*/ u8 ALIGNED(4) unk3018; + /*0x301C : 0x317C*/ u16 ALIGNED(4) unk301C; + /*0x3020 : 0x3180*/ u8 ALIGNED(4) unk3020; + /*0x3024 : 0x3184*/ u8 ALIGNED(4) unk3024; + /*0x3024 : 0x3184*/ void (*unk3028)(void); +}; // size = 0x302C + +struct DodrioStruct_2022CF4 +{ + u8 filler_00[0xc]; + u8 unkC[10]; + s16 unk16[10]; + u16 unk2A[10]; + u16 unk3E; +}; // size = 0x40 + +struct DodrioSubstruct_31A0_14 +{ + u8 unk0[11]; + u8 unkB[11]; +}; + +struct DodrioSubstruct_31A0_2C +{ + u8 unk0; + u8 ALIGNED(4) unk4; + u8 ALIGNED(4) unk8; +}; + +struct DodrioSubstruct_31A0 +{ + u8 name[0x10]; + u32 unk10; + struct DodrioSubstruct_31A0_14 unk14; + struct DodrioSubstruct_31A0_2C unk2C; + u8 filler_35[4]; +}; // size = 0x3C + +struct DodrioSubstruct_318C +{ + bool8 isShiny; +}; + +struct DodrioSubstruct_3308 +{ + u8 unk0; + u32 unk4; +}; + +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; + /*0x0029*/ u8 filler_0029[7]; + /*0x0030*/ u8 ALIGNED(4) 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 + +EWRAM_DATA struct DodrioStruct * gUnknown_203F3E0 = NULL; +EWRAM_DATA u16 *gUnknown_203F3E4[5] = {NULL}; +EWRAM_DATA u16 *gUnknown_203F3F8[2] = {NULL}; +EWRAM_DATA u16 *gUnknown_203F400[11] = {NULL}; +EWRAM_DATA u16 *gUnknown_203F42C[4] = {NULL}; +EWRAM_DATA struct DodrioStruct_2022CF4 *gUnknown_203F43C = NULL; +EWRAM_DATA struct DodrioSubstruct_0160 *gUnknown_203F440 = NULL; + +IWRAM_DATA bool32 gUnknown_3002044; + +bool32 sub_8155E68(void); +void sub_81508D8(void); +void sub_81508EC(struct DodrioStruct * dodrio); +void sub_8150A84(u8 taskId); +void sub_8150C78(void); +void sub_8150CBC(void); +void sub_8150CF4(void); +void sub_8150D7C(void); +void sub_8150DA4(void); +void sub_8150E68(void); +void sub_8150F40(void); +void sub_8150FC4(void); +void sub_8150FDC(void); +void sub_815109C(void); +void sub_8151198(void); +void sub_81512B4(void); +void sub_8151488(void); +void sub_81514F0(void); +void sub_815159C(void); +void sub_81516DC(u8 taskId); +void sub_8151750(u8 taskId); +void sub_8151B54(void); +void sub_8151BA0(void); +void sub_8151C5C(void); +void sub_8151D28(void); +void sub_8151D98(void); +void sub_8151E94(void); +void sub_815201C(void); +void sub_8152034(void); +void sub_8152048(struct DodrioSubstruct_318C * dodrioMon, struct Pokemon * partyMon); +void sub_815205C(TaskFunc func, u8 priority); +void sub_815206C(TaskFunc func); +void sub_8152090(u8 a0); +void sub_8152110(void); +void sub_815256C(void); +void sub_815293C(void); +void sub_8152970(void); +void sub_81529A4(u8 a0, u8 *a1, u8 *a2); +bool32 sub_8152A98(void); +bool32 sub_8152AD8(void); +void sub_8153004(void); +void sub_8153150(void); +u8 sub_815327C(u8); +void sub_8153A9C(void); +void sub_8153AFC(struct DodrioSubstruct_318C * unk318C, u8 a1, u8 a2, u8 a3); +void sub_8153BF8(u8 a0); +void sub_8153D80(bool8 a0, u8 a1); +void nullsub_97(struct Sprite *sprite); +void sub_8153E28(void); +void sub_8154128(void); +void sub_815417C(void); +void sub_81543E8(struct Sprite *sprite); +void sub_8154438(void); +void sub_8154968(struct DodrioSubstruct_0160 * unk0160); +void sub_81549D4(u8 a0); +void sub_8154A2C(void); +void sub_8154B34(void); +void sub_8154F80(void); +void sub_81556E0(void); +void sub_8155A78(void); +void sub_8155B4C(void); +void sub_8155C2C(void); +void sub_8155C80(void); +void unused_0(void); +void nullsub_98(void); // const rom data // Large chunk of data -/*static*/ const struct BgTemplate sUnknown_847565C_Unref_Dupe[] = +const struct BgTemplate sUnknown_847565C_Unref_Dupe[] = { { .bg = 0, @@ -75,9 +236,9 @@ }; // Unknown unreferenced data, feel free to remove. -/*static*/ const u32 sUnused_Unref_Dupe[] = {255, 0}; +const u32 sUnused_Unref_Dupe[] = {255, 0}; -/*static*/ const struct WindowTemplate sUnknown_8475674_Unref_Dupe[] = +const struct WindowTemplate sUnknown_8475674_Unref_Dupe[] = { { .bg = 0, @@ -99,7 +260,7 @@ } }; -/*static*/ const struct WindowTemplate sUnknown_8475684_Unref_Dupe = +const struct WindowTemplate sUnknown_8475684_Unref_Dupe = { .bg = 0, .tilemapLeft = 1, @@ -110,7 +271,7 @@ .baseBlock = 0x67, }; -/*static*/ const struct WindowTemplate sUnknown_847568C_Unref_Dupe[] = +const struct WindowTemplate sUnknown_847568C_Unref_Dupe[] = { { .bg = 0, @@ -132,7 +293,7 @@ } }; -/*static*/ const struct WindowTemplate sUnknown_847569C_Unref_Dupe = +const struct WindowTemplate sUnknown_847569C_Unref_Dupe = { .bg = 0, .tilemapLeft = 4, @@ -143,7 +304,7 @@ .baseBlock = 0x13, }; -/*static*/ const struct WindowTemplate sUnknown_84756A4_Unref_Dupe = +const struct WindowTemplate sUnknown_84756A4_Unref_Dupe = { .bg = 0, .tilemapLeft = 5, @@ -154,7 +315,7 @@ .baseBlock = 0x13, }; -/*static*/ const u8 sUnknown_8471F50[5][5][11] = +const u8 sUnknown_8471F50[5][5][11] = { { {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, @@ -183,7 +344,7 @@ }, }; -/*static*/ const u8 sUnknown_8472063[5][5][3] = +const u8 sUnknown_8472063[5][5][3] = { { {4, 5, 6}, @@ -212,7 +373,7 @@ }, }; -/*static*/ const u8 sUnknown_84720AE[5][5][3] = +const u8 sUnknown_84720AE[5][5][3] = { { {1, 0, 1}, @@ -242,7 +403,7 @@ }; ALIGNED(4) -/*static*/ const u8 sUnknown_84720FC[5][11] = +const u8 sUnknown_84720FC[5][11] = { {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9}, {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9}, @@ -251,7 +412,7 @@ ALIGNED(4) {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3}, }; -/*static*/ const u8 sUnknown_8472133[5][5] = +const u8 sUnknown_8472133[5][5] = { {5}, {4, 6}, @@ -261,7 +422,7 @@ ALIGNED(4) }; // Duplicate and unused gfx. Feel free to remove. -/*static*/ const u32 sDuplicateGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.gbapal", +const u32 sDuplicateGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.gbapal", "graphics/link_games/dodrioberry_bg2.gbapal", "graphics/link_games/dodrioberry_pkmn.gbapal", "graphics/link_games/dodrioberry_shiny.gbapal", @@ -278,7 +439,7 @@ ALIGNED(4) "graphics/link_games/dodrioberry_bg2right.bin.lz", "graphics/link_games/dodrioberry_bg2left.bin.lz"); -/*static*/ const u8 sUnknown_847553C[][3] = +const u8 sUnknown_847553C[][3] = { {40, 24, 13}, {32, 19, 10}, @@ -286,20 +447,20 @@ ALIGNED(4) }; ALIGNED(4) -/*static*/ const u8 sUnknown_8475548[] = {8, 5, 8, 11, 15}; +const u8 sUnknown_8475548[] = {8, 5, 8, 11, 15}; ALIGNED(4) -/*static*/ const u8 sUnknown_8475550[] = {5, 10, 20, 30, 50, 70, 100}; +const u8 sUnknown_8475550[] = {5, 10, 20, 30, 50, 70, 100}; ALIGNED(4) -/*static*/ const u8 sUnknown_8475558[][10] = +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) = +void (*const sUnknown_8475578[])(void) = { sub_8150C78, sub_8150CBC, @@ -315,7 +476,7 @@ ALIGNED(4) sub_8150F40 }; -/*static*/ void (*const sUnknown_84755A8[])(void) = +void (*const sUnknown_84755A8[])(void) = { sub_8150C78, sub_8150CBC, @@ -331,10 +492,425 @@ ALIGNED(4) sub_8150FC4 }; -/*static*/ const s16 sUnknown_84755D8[] = {10, 30, 50, 50}; +void StartDodrioBerryPicking(u16 a0, MainCallback callback) +{ + gUnknown_3002044 = FALSE; + + if (gReceivedRemoteLinkPlayers != 0 && (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; + } +} + +void sub_81508D8(void) +{ + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); +} + +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; + } +} + +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 != 0) + { + 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, 0x00); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + 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; + } +} + +void sub_8150C08(u8 taskId) +{ + sub_8151B54(); + sUnknown_8475578[gUnknown_203F3E0->unk18](); + if (!gUnknown_3002044) + { + sub_815293C(); + } + sub_8151BA0(); +} + +void sub_8150C40(u8 taskId) +{ + sub_8151C5C(); + sUnknown_84755A8[gUnknown_203F3E0->unk18](); + if (!gUnknown_3002044) + { + sub_8152970(); + } + sub_8151D28(); +} + +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; + } +} + +void sub_8150CBC(void) +{ + if (gUnknown_203F3E0->unk10 == 0) + { + sub_8152110(); + gUnknown_203F3E0->unk10++; + } + else + { + gUnknown_203F3E0->unk118 = 1; + sub_8152090(2); + } +} + +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; + } +} + +void sub_8150D7C(void) +{ + if (gUnknown_203F3E0->unk10 == 0) + { + if (gUnknown_203F3E0->unk11C != 0) + { + sub_8152090(4); + } + } +} + +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(); + } +} +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(); +} + +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; + } + } + } +} + +void sub_8150FC4(void) +{ + sub_8151E94(); + if (sub_8152AD8() == 1) + sub_8152090(5); +} + +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; + } +} + +const s16 sUnknown_84755D8[] = {10, 30, 50, 50}; // Data related to printing saved results. -/*static*/ const struct WindowTemplate sUnknown_84755E0 = +const struct WindowTemplate sUnknown_84755E0 = { .bg = 0, .tilemapLeft = 1, @@ -345,15 +921,15 @@ ALIGNED(4) .baseBlock = 1, }; -/*static*/ const u8 *const sUnknown_84755E8[] = {gText_BerryPickingRecords, gText_BerriesPicked, gText_BestScore, gText_BerriesInRowFivePlayers}; -/*static*/ const u8 sUnknown_84755F8[] = {4, 7, 4}; +const u8 *const sUnknown_84755E8[] = {gText_BerryPickingRecords, gText_BerriesPicked, gText_BestScore, gText_BerriesInRowFivePlayers}; +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}}; +const u8 sUnknown_84755FC[][2] = {{24}, {40}, {56}}; +const u8 sUnknown_8475602[][2] = {{24}, {40}, {70}}; // Debug functions? -/*static*/ const u16 sUnknown_8475608[][4] = +const u16 sUnknown_8475608[][4] = { {9999, 0, 90, 9999}, {9999, 9999, 70, 9999}, @@ -362,11 +938,11 @@ ALIGNED(4) {9999, 9999, 9999, 0}, }; -/*static*/ const u8 sUnknown_8475630[] = _("あいうえおかき"); -/*static*/ const u8 sUnknown_8475638[] = _("ABCDEFG"); -/*static*/ const u8 sUnknown_8475640[] = _("0123456"); +const u8 sUnknown_8475630[] = _("あいうえおかき"); +const u8 sUnknown_8475638[] = _("ABCDEFG"); +const u8 sUnknown_8475640[] = _("0123456"); -/*static*/ const u8 *const sUnknown_8475648[] = +const u8 *const sUnknown_8475648[] = { sUnknown_8475630, sUnknown_8475630, @@ -376,7 +952,7 @@ ALIGNED(4) }; // Large chunk of data -/*static*/ const struct BgTemplate sUnknown_847565C[] = +const struct BgTemplate sUnknown_847565C[] = { { .bg = 0, @@ -417,9 +993,9 @@ ALIGNED(4) }; // Unknown unreferenced data, feel free to remove. -/*static*/ const u32 sUnused[] = {255, 0}; +const u32 sUnused[] = {255, 0}; -/*static*/ const struct WindowTemplate sUnknown_8475674[] = +const struct WindowTemplate sUnknown_8475674[] = { { .bg = 0, @@ -441,7 +1017,7 @@ ALIGNED(4) } }; -/*static*/ const struct WindowTemplate sUnknown_8475684 = +const struct WindowTemplate sUnknown_8475684 = { .bg = 0, .tilemapLeft = 1, @@ -452,7 +1028,7 @@ ALIGNED(4) .baseBlock = 0x67, }; -/*static*/ const struct WindowTemplate sUnknown_847568C[] = +const struct WindowTemplate sUnknown_847568C[] = { { .bg = 0, @@ -474,7 +1050,7 @@ ALIGNED(4) } }; -/*static*/ const struct WindowTemplate sUnknown_847569C = +const struct WindowTemplate sUnknown_847569C = { .bg = 0, .tilemapLeft = 4, @@ -485,7 +1061,7 @@ ALIGNED(4) .baseBlock = 0x13, }; -/*static*/ const struct WindowTemplate sUnknown_84756A4 = +const struct WindowTemplate sUnknown_84756A4 = { .bg = 0, .tilemapLeft = 5, @@ -497,41 +1073,130 @@ ALIGNED(4) }; // This is an unused copy of the tables from the top of the file. Feel free to remove. -/*static*/ const u8 sDuplicateArray[] = -{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0, 0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 2, 9, - 0, 0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0, 0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0, 0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0, 0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0, 0, 7, - 8, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 3, 4, 5, 6, 7, 8, 9, 0, - 1, 2, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 4, 5, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 5, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 6, 7, 2, 2, 3, 4, 0, 0, 0, 0, 0, 0, - 3, 4, 5, 5, 6, 7, 7, 8, 1, 1, 2, 3, 0, 0, 0, 4, 5, 6, 6, 7, 8, 8, 9, 0, 0, 1, 2, 2, 3, 4, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 1, - 2, 1, 2, 3, 2, 3, 0, 0, 0, 0, 4, 0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, 0, 0, 0, 0, 9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 1, 1, 0, 9, 9, 9, 9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9, 9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9, 3, 3, 4, 4, 0, 0, 1, 1, - 2, 2, 3, 5, 0, 0, 0, 0, 4, 6, 0, 0, 0, 3, 5, 7, 0, 0, 2, 4, 6, 8, 0, 1, 3, 5, 6, 9 -}; - -/*static*/ const u16 sDodrioBerryBgPal1[] = INCBIN_U16("graphics/link_games/dodrioberry_bg1.gbapal", +const u8 sUnknown_8471F50_UnrefDup[5][5][11] = +{ + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0}, + {0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0}, + {0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0}, + {0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0}, + {0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0}, + {0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0}, + {0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, + {2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2}, + {4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}, + {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6}, + {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8}, + }, +}; + +const u8 sUnknown_8472063_UnrefDup[5][5][3] = +{ + { + {4, 5, 6}, + }, + { + {3, 4, 5}, + {5, 6, 3}, + }, + { + {4, 5, 6}, + {6, 7, 2}, + {2, 3, 4}, + }, + { + {3, 4, 5}, + {5, 6, 7}, + {7, 8, 1}, + {1, 2, 3}, + }, + { + {4, 5, 6}, + {6, 7, 8}, + {8, 9, 0}, + {0, 1, 2}, + {2, 3, 4}, + }, +}; + +const u8 sUnknown_84720AE_UnrefDup[5][5][3] = +{ + { + {1, 0, 1}, + }, + { + {1, 0, 1}, + {0, 1, 0}, + }, + { + {2, 0, 1}, + {0, 1, 2}, + {1, 2, 0}, + }, + { + {3, 0, 1}, + {0, 1, 2}, + {1, 2, 3}, + {2, 3, 0}, + }, + { + {4, 0, 1}, + {0, 1, 2}, + {1, 2, 3}, + {2, 3, 4}, + {3, 4, 0}, + }, +}; + +ALIGNED(4) +const u8 sUnknown_84720FC_UnrefDup[5][11] = +{ + {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9}, + {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9}, + {9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9}, + {9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9}, + {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3}, +}; + +const u8 sUnknown_8472133_UnrefDup[5][5] = +{ + {5}, + {4, 6}, + {3, 5, 7}, + {2, 4, 6, 8}, + {1, 3, 5, 6, 9}, +}; + +const u16 sDodrioBerryBgPal1[] = INCBIN_U16("graphics/link_games/dodrioberry_bg1.gbapal", "graphics/link_games/dodrioberry_bg2.gbapal"); -/*static*/ const u16 sDodrioBerryPkmnPal[] = INCBIN_U16("graphics/link_games/dodrioberry_pkmn.gbapal"); -/*static*/ const u16 sDodrioBerryShinyPal[] = INCBIN_U16("graphics/link_games/dodrioberry_shiny.gbapal"); -/*static*/ const u16 sDodrioBerryStatusPal[] = INCBIN_U16("graphics/link_games/dodrioberry_status.gbapal"); -/*static*/ const u16 sDodrioBerrySpritesPal[] = INCBIN_U16("graphics/link_games/dodrioberry_berrysprites.gbapal"); -/*static*/ const u32 sDodrioBerrySpritesGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_berrysprites.4bpp.lz"); -/*static*/ const u16 sDodrioBerryPlatformPal[] = INCBIN_U16("graphics/link_games/dodrioberry_platform.gbapal"); -/*static*/ const u32 sDodrioBerryBgGfx1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.4bpp.lz"); -/*static*/ const u32 sDodrioBerryBgGfx2[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2.4bpp.lz"); -/*static*/ const u32 sDodrioBerryStatusGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_status.4bpp.lz"); -/*static*/ const u32 sDodrioBerryPlatformGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_platform.4bpp.lz"); -/*static*/ const u32 sDodrioBerryPkmnGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_pkmn.4bpp.lz"); -/*static*/ const u32 sDodrioBerryBgTilemap1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.bin.lz"); -/*static*/ const u32 sDodrioBerryBgTilemap2Right[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2right.bin.lz"); -/*static*/ const u32 sDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2left.bin.lz"); - -/*static*/ const struct OamData sOamData_8478C98 = +const u16 sDodrioBerryPkmnPal[] = INCBIN_U16("graphics/link_games/dodrioberry_pkmn.gbapal"); +const u16 sDodrioBerryShinyPal[] = INCBIN_U16("graphics/link_games/dodrioberry_shiny.gbapal"); +const u16 sDodrioBerryStatusPal[] = INCBIN_U16("graphics/link_games/dodrioberry_status.gbapal"); +const u16 sDodrioBerrySpritesPal[] = INCBIN_U16("graphics/link_games/dodrioberry_berrysprites.gbapal"); +const u32 sDodrioBerrySpritesGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_berrysprites.4bpp.lz"); +const u16 sDodrioBerryPlatformPal[] = INCBIN_U16("graphics/link_games/dodrioberry_platform.gbapal"); +const u32 sDodrioBerryBgGfx1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.4bpp.lz"); +const u32 sDodrioBerryBgGfx2[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2.4bpp.lz"); +const u32 sDodrioBerryStatusGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_status.4bpp.lz"); +const u32 sDodrioBerryPlatformGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_platform.4bpp.lz"); +const u32 sDodrioBerryPkmnGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_pkmn.4bpp.lz"); +const u32 sDodrioBerryBgTilemap1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.bin.lz"); +const u32 sDodrioBerryBgTilemap2Right[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2right.bin.lz"); +const u32 sDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2left.bin.lz"); + +const struct OamData sOamData_8478C98 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -548,7 +1213,7 @@ ALIGNED(4) .affineParam = 0 }; -/*static*/ const struct OamData sOamData_8478CA0 = +const struct OamData sOamData_8478CA0 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -565,7 +1230,7 @@ ALIGNED(4) .affineParam = 0 }; -/*static*/ const struct OamData sOamData_8478CA8 = +const struct OamData sOamData_8478CA8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -582,7 +1247,7 @@ ALIGNED(4) .affineParam = 0 }; -/*static*/ const struct OamData sOamData_8478CB0 = +const struct OamData sOamData_8478CB0 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -599,37 +1264,37 @@ ALIGNED(4) .affineParam = 0 }; -/*static*/ const union AnimCmd sSpriteAnim_8478CB8[] = +const union AnimCmd sSpriteAnim_8478CB8[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478CC0[] = +const union AnimCmd sSpriteAnim_8478CC0[] = { ANIMCMD_FRAME(64, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478CC8[] = +const union AnimCmd sSpriteAnim_8478CC8[] = { ANIMCMD_FRAME(128, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478CD0[] = +const union AnimCmd sSpriteAnim_8478CD0[] = { ANIMCMD_FRAME(192, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478CD8[] = +const union AnimCmd sSpriteAnim_8478CD8[] = { ANIMCMD_FRAME(256, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd *const sSpriteAnimTable_8478CE0[] = +const union AnimCmd *const sSpriteAnimTable_8478CE0[] = { sSpriteAnim_8478CB8, sSpriteAnim_8478CC0, @@ -638,86 +1303,86 @@ ALIGNED(4) sSpriteAnim_8478CD8 }; -/*static*/ const union AnimCmd sSpriteAnim_8478CF4[] = +const union AnimCmd sSpriteAnim_8478CF4[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478CFC[] = +const union AnimCmd sSpriteAnim_8478CFC[] = { ANIMCMD_FRAME(4, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478D04[] = +const union AnimCmd sSpriteAnim_8478D04[] = { ANIMCMD_FRAME(8, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd *const sSpriteAnimTable_8478D0C[] = +const union AnimCmd *const sSpriteAnimTable_8478D0C[] = { sSpriteAnim_8478CF4, sSpriteAnim_8478CFC, sSpriteAnim_8478D04 }; -/*static*/ const union AnimCmd sSpriteAnim_8478D18[] = +const union AnimCmd sSpriteAnim_8478D18[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478D20[] = +const union AnimCmd sSpriteAnim_8478D20[] = { ANIMCMD_FRAME(4, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478D28[] = +const union AnimCmd sSpriteAnim_8478D28[] = { ANIMCMD_FRAME(8, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478D30[] = +const union AnimCmd sSpriteAnim_8478D30[] = { ANIMCMD_FRAME(12, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478D38[] = +const union AnimCmd sSpriteAnim_8478D38[] = { ANIMCMD_FRAME(16, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478D40[] = +const union AnimCmd sSpriteAnim_8478D40[] = { ANIMCMD_FRAME(20, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478D48[] = +const union AnimCmd sSpriteAnim_8478D48[] = { ANIMCMD_FRAME(24, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478D50[] = +const union AnimCmd sSpriteAnim_8478D50[] = { ANIMCMD_FRAME(28, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd sSpriteAnim_8478D58[] = +const union AnimCmd sSpriteAnim_8478D58[] = { ANIMCMD_FRAME(32, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd *const sSpriteAnimTable_8478D60[] = +const union AnimCmd *const sSpriteAnimTable_8478D60[] = { sSpriteAnim_8478D18, sSpriteAnim_8478D20, @@ -730,22 +1395,22 @@ ALIGNED(4) sSpriteAnim_8478D58 }; -/*static*/ const union AnimCmd sSpriteAnim_8478D84[] = +const union AnimCmd sSpriteAnim_8478D84[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_JUMP(0) }; -/*static*/ const union AnimCmd *const sSpriteAnimTable_8478D8C[] = +const union AnimCmd *const sSpriteAnimTable_8478D8C[] = { sSpriteAnim_8478D84 }; -// These are declared inside pokeemerald's sub_80283A8 +// These are declared inside pokeemerald's sub_8153A9C const struct SpritePalette gUnknown_8478D90 = {sDodrioBerryPkmnPal, 0}; const struct SpritePalette gUnknown_8478D98 = {sDodrioBerryShinyPal, 1}; -// These are declared inside pokeemerald's sub_8028734 +// These are declared inside pokeemerald's sub_8153E28 const struct SpritePalette gUnknown_8478DA0 = {sDodrioBerryStatusPal, 2}; const struct SpriteTemplate gUnknown_8478DA8 = { @@ -759,14 +1424,14 @@ const struct SpriteTemplate gUnknown_8478DA8 = }; // Unknown unused data, feel free to remove. -/*static*/ const u8 sUnused2[] = {0xCD, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0xF4, 0x0, 0x0}; +const u8 sUnused2[] = {0xCD, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0xF4, 0x0, 0x0}; -// This is declared inside pokeemerald's sub_8028A34 +// This is declared inside pokeemerald's sub_8154128 const struct SpritePalette gUnknown_8478DCC = {sDodrioBerrySpritesPal, 3}; -/*static*/ const s16 sUnknown_8478DD4[] = {88, 128, 168, 208}; +const s16 sUnknown_8478DD4[] = {88, 128, 168, 208}; -// These are declared inside pokeemerald's sub_8028A88 +// These are declared inside pokeemerald's sub_815417C const struct SpriteTemplate gUnknown_8478DDC = { .tileTag = 2, @@ -789,11 +1454,11 @@ const struct SpriteTemplate gUnknown_8478DF4 = }; // This is declared inside pokeemerald's sub_8028CF4 -/*static*/ const u8 gUnknown_8478E0C[] = {30, 20}; +const u8 gUnknown_8478E0C[] = {30, 20}; -/*static*/ const s16 gUnknown_8478E0E[][2] = {{230, 55}, {30, 74}}; +const s16 gUnknown_8478E0E[][2] = {{230, 55}, {30, 74}}; -// These are declared inside pokeemerald's sub_8028D44 +// These are declared inside pokeemerald's sub_8154438 const struct SpritePalette gUnknown_8478E18 = {sDodrioBerryPlatformPal, 6}; const struct SpriteTemplate gUnknown_8478E20 = { @@ -812,7 +1477,7 @@ struct WinCoords u8 top; }; -/*static*/ const u8 sUnknown_8478E38[][3] = +const u8 sUnknown_8478E38[][3] = { {1, 2, 3}, {1, 4, 5}, @@ -820,13 +1485,13 @@ struct WinCoords {1, 6, 7}, }; -/*static*/ const struct WinCoords sUnknown_8478E44[] = {{12, 6}}; -/*static*/ const struct WinCoords sUnknown_8478E48[] = {{9, 10}, {15, 6}}; -/*static*/ const struct WinCoords sUnknown_8478E50[] = {{12, 6}, {18, 10}, {6, 10}}; -/*static*/ const struct WinCoords sUnknown_8478E5C[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}}; -/*static*/ const struct WinCoords sUnknown_8478E6C[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}}; +const struct WinCoords sUnknown_8478E44[] = {{12, 6}}; +const struct WinCoords sUnknown_8478E48[] = {{9, 10}, {15, 6}}; +const struct WinCoords sUnknown_8478E50[] = {{12, 6}, {18, 10}, {6, 10}}; +const struct WinCoords sUnknown_8478E5C[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}}; +const struct WinCoords sUnknown_8478E6C[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}}; -/*static*/ const struct WinCoords *const sUnknown_8478E80[] = +const struct WinCoords *const sUnknown_8478E80[] = { sUnknown_8478E44, sUnknown_8478E48, @@ -835,7 +1500,7 @@ struct WinCoords sUnknown_8478E6C, }; -/*static*/ const u8 *const sUnknown_8478E94[] = +const u8 *const sUnknown_8478E94[] = { gText_1Colon, gText_2Colon, @@ -844,9 +1509,9 @@ struct WinCoords gText_5Colon, }; -/*static*/ const u16 sUnknown_8478EA8[] = {92, 132, 172, 212}; -/*static*/ const u16 sUnknown_8478EB0[] = {30, 45, 60, 75, 90}; -/*static*/ const u16 sUnknown_8478EBA[] = {12, 28, 44, 60, 76}; +const u16 sUnknown_8478EA8[] = {92, 132, 172, 212}; +const u16 sUnknown_8478EB0[] = {30, 45, 60, 75, 90}; +const u16 sUnknown_8478EBA[] = {12, 28, 44, 60, 76}; struct { -- cgit v1.2.3 From 171e4bbea427e66c5a30d01d4306dbcdf165e81c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 4 Mar 2020 13:56:54 -0500 Subject: through sub_815184C --- src/dodrio_berry_picking.c | 510 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 486 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 2341e4341..405b22165 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -1,6 +1,8 @@ #include "global.h" #include "gflib.h" +#include "dodrio_berry_picking.h" #include "link.h" +#include "link_rfu.h" #include "minigame_countdown.h" #include "strings.h" #include "task.h" @@ -29,28 +31,6 @@ struct DodrioStruct_2022CF4 u16 unk3E; }; // size = 0x40 -struct DodrioSubstruct_31A0_14 -{ - u8 unk0[11]; - u8 unkB[11]; -}; - -struct DodrioSubstruct_31A0_2C -{ - u8 unk0; - u8 ALIGNED(4) unk4; - u8 ALIGNED(4) unk8; -}; - -struct DodrioSubstruct_31A0 -{ - u8 name[0x10]; - u32 unk10; - struct DodrioSubstruct_31A0_14 unk14; - struct DodrioSubstruct_31A0_2C unk2C; - u8 filler_35[4]; -}; // size = 0x3C - struct DodrioSubstruct_318C { bool8 isShiny; @@ -159,6 +139,7 @@ void sub_8152048(struct DodrioSubstruct_318C * dodrioMon, struct Pokemon * party void sub_815205C(TaskFunc func, u8 priority); void sub_815206C(TaskFunc func); void sub_8152090(u8 a0); +bool32 sub_81520B4(void); void sub_8152110(void); void sub_815256C(void); void sub_815293C(void); @@ -167,18 +148,35 @@ void sub_81529A4(u8 a0, u8 *a1, u8 *a2); bool32 sub_8152A98(void); bool32 sub_8152AD8(void); void sub_8153004(void); +void sub_8153048(void); void sub_8153150(void); +void sub_81531FC(void); u8 sub_815327C(u8); +void sub_81532B8(void); +void sub_815336C(void); +u32 sub_81534AC(void); void sub_8153A9C(void); void sub_8153AFC(struct DodrioSubstruct_318C * unk318C, u8 a1, u8 a2, u8 a3); void sub_8153BF8(u8 a0); +void sub_8153D08(u8 playerCount); void sub_8153D80(bool8 a0, u8 a1); +void sub_8153DD8(void); void nullsub_97(struct Sprite *sprite); void sub_8153E28(void); +void sub_8153ED8(void); +bool32 sub_8153F1C(void); +void sub_81540DC(bool8 a0); void sub_8154128(void); void sub_815417C(void); +void sub_8154274(void); void sub_81543E8(struct Sprite *sprite); void sub_8154438(void); +void sub_81544F0(void); +void sub_8154540(void); +void sub_8154578(void); +void sub_81545BC(bool8 a0); +void sub_81546C0(void); +void sub_8154730(void); void sub_8154968(struct DodrioSubstruct_0160 * unk0160); void sub_81549D4(u8 a0); void sub_8154A2C(void); @@ -191,6 +189,7 @@ void sub_8155C2C(void); void sub_8155C80(void); void unused_0(void); void nullsub_98(void); +u8 sub_8155E8C(void); // const rom data @@ -496,7 +495,7 @@ void StartDodrioBerryPicking(u16 a0, MainCallback callback) { gUnknown_3002044 = FALSE; - if (gReceivedRemoteLinkPlayers != 0 && (gUnknown_203F3E0 = AllocZeroed(sizeof(*gUnknown_203F3E0))) != NULL) + if (gReceivedRemoteLinkPlayers && (gUnknown_203F3E0 = AllocZeroed(sizeof(*gUnknown_203F3E0))) != NULL) { sub_81508D8(); sub_81508EC(gUnknown_203F3E0); @@ -607,7 +606,7 @@ void sub_8150A84(u8 taskId) case 3: if (IsLinkTaskFinished()) { - if (gReceivedRemoteLinkPlayers != 0) + if (gReceivedRemoteLinkPlayers) { LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); @@ -907,6 +906,469 @@ void sub_8150FDC(void) } } +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; + } +} + +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; + } +} + +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; + } +} + +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; + } +} + +void sub_81514F0(void) +{ + switch (gUnknown_203F3E0->unk10) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + 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; + } +} + +void sub_815159C(void) +{ + switch (gUnknown_203F3E0->unk10) + { + case 0: + sub_81549D4(9); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + 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, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + 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; + } +} + +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; + } +} + +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; + } +} + +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; + } + } +} + const s16 sUnknown_84755D8[] = {10, 30, 50, 50}; // Data related to printing saved results. -- cgit v1.2.3 From 6871f3dd3357b5660af6e1607028fde5a0afd862 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 4 Mar 2020 14:58:44 -0500 Subject: through sub_8153048 --- src/dodrio_berry_picking.c | 961 +++++++++++++++++++++++++++++++++++++++++++++ src/sound.c | 29 +- 2 files changed, 976 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 405b22165..3aecec1fc 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -3,10 +3,13 @@ #include "dodrio_berry_picking.h" #include "link.h" #include "link_rfu.h" +#include "m4a.h" #include "minigame_countdown.h" +#include "random.h" #include "strings.h" #include "task.h" #include "constants/songs.h" +#include "constants/fanfares.h" struct DodrioSubstruct_0160 { @@ -141,12 +144,21 @@ void sub_815206C(TaskFunc func); void sub_8152090(u8 a0); bool32 sub_81520B4(void); void sub_8152110(void); +bool32 sub_8152484(u8 a0, u8 a1, u8 a2); void sub_815256C(void); void sub_815293C(void); void sub_8152970(void); +bool32 sub_8152A00(void); +void sub_8152A70(void); void sub_81529A4(u8 a0, u8 *a1, u8 *a2); bool32 sub_8152A98(void); bool32 sub_8152AD8(void); +void sub_8152B64(u8 a0); +u8 sub_8152BD4(u8 a0); +u8 sub_8152BF8(u8 a0, u8 a1); +u8 sub_8152CB8(u8 arg0, u8 arg1); +void sub_8152D34(u8 a0, u8 a1, u8 a2); +void sub_8152F94(bool32 a0); void sub_8153004(void); void sub_8153048(void); void sub_8153150(void); @@ -157,9 +169,12 @@ void sub_815336C(void); u32 sub_81534AC(void); void sub_8153A9C(void); void sub_8153AFC(struct DodrioSubstruct_318C * unk318C, u8 a1, u8 a2, u8 a3); +void sub_8153BC0(u8 a0); void sub_8153BF8(u8 a0); void sub_8153D08(u8 playerCount); void sub_8153D80(bool8 a0, u8 a1); +void sub_8153DA8(u8 a0, u8 a1); +void sub_8153FC8(u8 a0); void sub_8153DD8(void); void nullsub_97(struct Sprite *sprite); void sub_8153E28(void); @@ -169,6 +184,9 @@ void sub_81540DC(bool8 a0); void sub_8154128(void); void sub_815417C(void); void sub_8154274(void); +void sub_81542EC(u8 a0, u8 a1); +void sub_8154370(u8 a0, u8 a1); +void sub_8154398(u8 a0, u8 a1); void sub_81543E8(struct Sprite *sprite); void sub_8154438(void); void sub_81544F0(void); @@ -1369,6 +1387,949 @@ void sub_815184C(void) } } +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; + } + } +} + +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; + } +} + +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; + } +} + +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; + } +} + +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; + } +} + +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; + } +} + +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; + } +} + +void sub_815201C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8152034(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +void sub_8152048(struct DodrioSubstruct_318C * a0, struct Pokemon * a1) +{ + a0->isShiny = IsMonShiny(a1); +} + +void sub_815205C(TaskFunc func, u8 priority) +{ + CreateTask(func, priority); +} + +void sub_815206C(TaskFunc func) +{ + gUnknown_203F3E0->unk04 = CreateTask(func, 1); + gUnknown_203F3E0->unk10 = 0; + gUnknown_203F3E0->unk0C = 0; + gUnknown_203F3E0->unk14 = 0; +} + +void sub_8152090(u8 a0) +{ + gUnknown_203F3E0->unk1C = gUnknown_203F3E0->unk18; + gUnknown_203F3E0->unk18 = a0; + gUnknown_203F3E0->unk10 = 0; + gUnknown_203F3E0->unk14 = 0; +} + +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; + } +} + +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; + } +} + +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; + } + } + } +} + +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; +} + +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); + } + } + } + } +} + +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); + } + } +} + +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); + } +} + +void sub_8152910(void) +{ + u8 i, count; + + count = gUnknown_203F3E0->unk24; + for (i = 0; i < count; i++) + sub_8153DA8(i, 4); +} + +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? +void sub_8152970(void) +{ + sub_81527D0(); + if (gUnknown_203F3E0->unk40 > 9) + sub_8152910(); + else + sub_81528D0(); + + sub_8153FC8(gUnknown_203F3E0->unk40); +} + +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; + } +} + +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 poitnless 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; +} + +void sub_8152A70(void) +{ + u8 i; + + for (i = 0; i < 5; i++) + gUnknown_203F3E0->unk158[i] = 0; +} + +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; +} + +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; +} + +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]++; +} + +u8 sub_8152BD4(u8 arg0) +{ + return sUnknown_84720FC[gUnknown_203F3E0->unk24 - 1][arg0]; +} + +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); +} + +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; + } +} + +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; + } +} + +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; + } +} + +void sub_8153004(void) +{ + u8 i; + for (i = 0; i < gUnknown_203F3E0->unk24; i++) + gUnknown_203F3E0->unk4A[i][5] = gUnknown_203F3E0->unk114; +} + +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(); +} + const s16 sUnknown_84755D8[] = {10, 30, 50, 50}; // Data related to printing saved results. diff --git a/src/sound.c b/src/sound.c index b88d3b642..99e9a162e 100644 --- a/src/sound.c +++ b/src/sound.c @@ -6,6 +6,7 @@ #include "m4a.h" #include "main.h" #include "constants/songs.h" +#include "constants/fanfares.h" #include "task.h" struct Fanfare @@ -41,20 +42,20 @@ extern struct ToneData gCryTable[]; extern struct ToneData gCryTable2[]; static const struct Fanfare sFanfares[] = { - { MUS_FANFA1, 80 }, - { MUS_FANFA4, 160 }, - { MUS_FANFA5, 220 }, - { MUS_ME_WAZA, 220 }, - { MUS_ME_ASA, 160 }, - { MUS_ME_BACHI, 340 }, - { MUS_ME_WASURE, 180 }, - { MUS_ME_KINOMI, 120 }, - { MUS_ME_B_BIG, 250 }, - { MUS_ME_B_SMALL, 150 }, - { MUS_ME_ZANNEN, 160 }, - { MUS_POKEFUE, 450 }, - { MUS_FAN5, 170 }, - { MUS_FAN2, 196 } + [FANFARE_00] = { MUS_FANFA1, 80 }, + [FANFARE_01] = { MUS_FANFA4, 160 }, + [FANFARE_02] = { MUS_FANFA5, 220 }, + [FANFARE_03] = { MUS_ME_WAZA, 220 }, + [FANFARE_04] = { MUS_ME_ASA, 160 }, + [FANFARE_05] = { MUS_ME_BACHI, 340 }, + [FANFARE_06] = { MUS_ME_WASURE, 180 }, + [FANFARE_07] = { MUS_ME_KINOMI, 120 }, + [FANFARE_08] = { MUS_ME_B_BIG, 250 }, + [FANFARE_09] = { MUS_ME_B_SMALL, 150 }, + [FANFARE_10] = { MUS_ME_ZANNEN, 160 }, + [FANFARE_POKEFLUTE] = { MUS_POKEFUE, 450 }, + [FANFARE_KEY_ITEM] = { MUS_FAN5, 170 }, + [FANFARE_DEX_EVAL] = { MUS_FAN2, 196 } }; extern u16 SpeciesToCryId(u16); -- cgit v1.2.3 From ff13649f473ecf8e052c77a5bd464a6149a0922c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 4 Mar 2020 15:14:59 -0500 Subject: through sub_81537AC --- src/dodrio_berry_picking.c | 279 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) (limited to 'src') diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 3aecec1fc..40cf4ccb5 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -1,6 +1,7 @@ #include "global.h" #include "gflib.h" #include "dodrio_berry_picking.h" +#include "item.h" #include "link.h" #include "link_rfu.h" #include "m4a.h" @@ -10,6 +11,7 @@ #include "task.h" #include "constants/songs.h" #include "constants/fanfares.h" +#include "constants/items.h" struct DodrioSubstruct_0160 { @@ -166,7 +168,9 @@ void sub_81531FC(void); u8 sub_815327C(u8); void sub_81532B8(void); void sub_815336C(void); +u32 sub_8153424(u8 mpId); u32 sub_81534AC(void); +u32 Min(u32 x, u32 y); void sub_8153A9C(void); void sub_8153AFC(struct DodrioSubstruct_318C * unk318C, u8 a1, u8 a2, u8 a3); void sub_8153BC0(u8 a0); @@ -2332,6 +2336,281 @@ void sub_8153048(void) const s16 sUnknown_84755D8[] = {10, 30, 50, 50}; +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]; +} + +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); +} + +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; +} + +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; +} + +void sub_81532B8(void) +{ + if (gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] == 0) + { + if (gMain.newKeys & DPAD_UP) + { + gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 = 2; + gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] = 6; + PlaySE(SE_W204); + } + else if (gMain.newKeys & DPAD_LEFT) + { + gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 = 3; + gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] = 6; + PlaySE(SE_W204); + } + else if (gMain.newKeys & 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]--; + } +} + +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]; +} + +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; +} + +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]; +} + +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]; +} + // Data related to printing saved results. const struct WindowTemplate sUnknown_84755E0 = { -- cgit v1.2.3 From e9c3b78d9f7142fda849ea2fe420459480fdf989 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 4 Mar 2020 17:21:41 -0500 Subject: through sub_8154A2C; reorganize dbp files a bit --- src/data/dodrio_berry_picking.h | 247 +++++++++ src/dodrio_berry_picking.c | 1000 ++++--------------------------------- src/dodrio_berry_picking_2.c | 1043 ++++++++++++++++++++++++++++++++++++++- src/dodrio_berry_picking_3.c | 23 + 4 files changed, 1404 insertions(+), 909 deletions(-) create mode 100644 src/data/dodrio_berry_picking.h create mode 100644 src/dodrio_berry_picking_3.c (limited to 'src') diff --git a/src/data/dodrio_berry_picking.h b/src/data/dodrio_berry_picking.h new file mode 100644 index 000000000..e71ce13cf --- /dev/null +++ b/src/data/dodrio_berry_picking.h @@ -0,0 +1,247 @@ +#ifndef GUARD_DATA_DODRIO_BERRY_PICKING_H +#define GUARD_DATA_DODRIO_BERRY_PICKING_H + +static const struct BgTemplate sUnknown_847565C[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 2, + .mapBaseIndex = 12, + .screenSize = 1, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 14, + .screenSize = 1, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +// Unknown unreferenced data, feel free to remove. +static const u32 sUnused[] = {255, 0}; + +static const struct WindowTemplate sUnknown_8475674[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 3, + .paletteNum = 13, + .baseBlock = 0x13, + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 28, + .height = 13, + .paletteNum = 13, + .baseBlock = 0x67, + } +}; + +static const struct WindowTemplate sUnknown_8475684 = +{ + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 28, + .height = 7, + .paletteNum = 13, + .baseBlock = 0x67, +}; + +static const struct WindowTemplate sUnknown_847568C[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 8, + .width = 19, + .height = 3, + .paletteNum = 13, + .baseBlock = 0x13, + }, + { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 7, + .width = 6, + .height = 4, + .paletteNum = 13, + .baseBlock = 0x4C, + } +}; + +static const struct WindowTemplate sUnknown_847569C = +{ + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 6, + .width = 22, + .height = 5, + .paletteNum = 13, + .baseBlock = 0x13, +}; + +static const struct WindowTemplate sUnknown_84756A4 = +{ + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 8, + .width = 19, + .height = 3, + .paletteNum = 13, + .baseBlock = 0x13, +}; + +static const u8 sUnknown_8471F50[5][5][11] = +{ + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0}, + {0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0}, + {0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0}, + {0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0}, + {0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0}, + {0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0}, + {0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, + {2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2}, + {4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}, + {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6}, + {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8}, + }, +}; + +static const u8 sUnknown_8472063[5][5][3] = +{ + { + {4, 5, 6}, + }, + { + {3, 4, 5}, + {5, 6, 3}, + }, + { + {4, 5, 6}, + {6, 7, 2}, + {2, 3, 4}, + }, + { + {3, 4, 5}, + {5, 6, 7}, + {7, 8, 1}, + {1, 2, 3}, + }, + { + {4, 5, 6}, + {6, 7, 8}, + {8, 9, 0}, + {0, 1, 2}, + {2, 3, 4}, + }, +}; + +static const u8 sUnknown_84720AE[5][5][3] = +{ + { + {1, 0, 1}, + }, + { + {1, 0, 1}, + {0, 1, 0}, + }, + { + {2, 0, 1}, + {0, 1, 2}, + {1, 2, 0}, + }, + { + {3, 0, 1}, + {0, 1, 2}, + {1, 2, 3}, + {2, 3, 0}, + }, + { + {4, 0, 1}, + {0, 1, 2}, + {1, 2, 3}, + {2, 3, 4}, + {3, 4, 0}, + }, +}; + +ALIGNED(4) +static const u8 sUnknown_84720FC[5][11] = +{ + {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9}, + {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9}, + {9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9}, + {9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9}, + {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3}, +}; + +static const u8 sUnknown_8472133[5][5] = +{ + {5}, + {4, 6}, + {3, 5, 7}, + {2, 4, 6, 8}, + {1, 3, 5, 6, 9}, +}; + +static const u16 sDodrioBerryBgPal1[] = INCBIN_U16("graphics/link_games/dodrioberry_bg1.gbapal", + "graphics/link_games/dodrioberry_bg2.gbapal"); +static const u16 sDodrioBerryPkmnPal[] = INCBIN_U16("graphics/link_games/dodrioberry_pkmn.gbapal"); +static const u16 sDodrioBerryShinyPal[] = INCBIN_U16("graphics/link_games/dodrioberry_shiny.gbapal"); +static const u16 sDodrioBerryStatusPal[] = INCBIN_U16("graphics/link_games/dodrioberry_status.gbapal"); +static const u16 sDodrioBerrySpritesPal[] = INCBIN_U16("graphics/link_games/dodrioberry_berrysprites.gbapal"); +static const u32 sDodrioBerrySpritesGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_berrysprites.4bpp.lz"); +static const u16 sDodrioBerryPlatformPal[] = INCBIN_U16("graphics/link_games/dodrioberry_platform.gbapal"); +static const u32 sDodrioBerryBgGfx1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.4bpp.lz"); +static const u32 sDodrioBerryBgGfx2[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2.4bpp.lz"); +static const u32 sDodrioBerryStatusGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_status.4bpp.lz"); +static const u32 sDodrioBerryPlatformGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_platform.4bpp.lz"); +static const u32 sDodrioBerryPkmnGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_pkmn.4bpp.lz"); +static const u32 sDodrioBerryBgTilemap1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.bin.lz"); +static const u32 sDodrioBerryBgTilemap2Right[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2right.bin.lz"); +static const u32 sDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2left.bin.lz"); + +#endif //GUARD_DATA_DODRIO_BERRY_PICKING_H diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 40cf4ccb5..294b73053 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -1,45 +1,21 @@ #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" - -struct DodrioSubstruct_0160 -{ - /*0x0000 : 0x3000*/ u16 ALIGNED(4) tilemapBuffers[3][BG_SCREEN_SIZE]; - /*0x3000 : 0x3160*/ bool32 finished; - /*0x3004 : 0x3164*/ u8 ALIGNED(4) unk3004; - /*0x3008 : 0x3168*/ u8 ALIGNED(4) unk3008[10]; - /*0x3014 : 0x3174*/ u8 ALIGNED(4) state; - /*0x3018 : 0x3178*/ u8 ALIGNED(4) unk3018; - /*0x301C : 0x317C*/ u16 ALIGNED(4) unk301C; - /*0x3020 : 0x3180*/ u8 ALIGNED(4) unk3020; - /*0x3024 : 0x3184*/ u8 ALIGNED(4) unk3024; - /*0x3024 : 0x3184*/ void (*unk3028)(void); -}; // size = 0x302C - -struct DodrioStruct_2022CF4 -{ - u8 filler_00[0xc]; - u8 unkC[10]; - s16 unk16[10]; - u16 unk2A[10]; - u16 unk3E; -}; // size = 0x40 - -struct DodrioSubstruct_318C -{ - bool8 isShiny; -}; +#include "constants/species.h" struct DodrioSubstruct_3308 { @@ -102,12 +78,6 @@ struct DodrioStruct }; // size = 0x3330 EWRAM_DATA struct DodrioStruct * gUnknown_203F3E0 = NULL; -EWRAM_DATA u16 *gUnknown_203F3E4[5] = {NULL}; -EWRAM_DATA u16 *gUnknown_203F3F8[2] = {NULL}; -EWRAM_DATA u16 *gUnknown_203F400[11] = {NULL}; -EWRAM_DATA u16 *gUnknown_203F42C[4] = {NULL}; -EWRAM_DATA struct DodrioStruct_2022CF4 *gUnknown_203F43C = NULL; -EWRAM_DATA struct DodrioSubstruct_0160 *gUnknown_203F440 = NULL; IWRAM_DATA bool32 gUnknown_3002044; @@ -171,294 +141,12 @@ void sub_815336C(void); u32 sub_8153424(u8 mpId); u32 sub_81534AC(void); u32 Min(u32 x, u32 y); -void sub_8153A9C(void); -void sub_8153AFC(struct DodrioSubstruct_318C * unk318C, u8 a1, u8 a2, u8 a3); -void sub_8153BC0(u8 a0); -void sub_8153BF8(u8 a0); -void sub_8153D08(u8 playerCount); -void sub_8153D80(bool8 a0, u8 a1); -void sub_8153DA8(u8 a0, u8 a1); -void sub_8153FC8(u8 a0); -void sub_8153DD8(void); -void nullsub_97(struct Sprite *sprite); -void sub_8153E28(void); -void sub_8153ED8(void); -bool32 sub_8153F1C(void); -void sub_81540DC(bool8 a0); -void sub_8154128(void); -void sub_815417C(void); -void sub_8154274(void); -void sub_81542EC(u8 a0, u8 a1); -void sub_8154370(u8 a0, u8 a1); -void sub_8154398(u8 a0, u8 a1); -void sub_81543E8(struct Sprite *sprite); -void sub_8154438(void); -void sub_81544F0(void); -void sub_8154540(void); -void sub_8154578(void); -void sub_81545BC(bool8 a0); -void sub_81546C0(void); -void sub_8154730(void); -void sub_8154968(struct DodrioSubstruct_0160 * unk0160); -void sub_81549D4(u8 a0); -void sub_8154A2C(void); -void sub_8154B34(void); -void sub_8154F80(void); -void sub_81556E0(void); -void sub_8155A78(void); -void sub_8155B4C(void); -void sub_8155C2C(void); -void sub_8155C80(void); -void unused_0(void); -void nullsub_98(void); -u8 sub_8155E8C(void); +void Task_ShowDodrioBerryPickingRecords(u8 taskId); +void sub_81538D0(u8 windowId); // const rom data -// Large chunk of data -const struct BgTemplate sUnknown_847565C_Unref_Dupe[] = -{ - { - .bg = 0, - .charBaseIndex = 0, - .mapBaseIndex = 30, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, - { - .bg = 1, - .charBaseIndex = 2, - .mapBaseIndex = 12, - .screenSize = 1, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 2, - .mapBaseIndex = 14, - .screenSize = 1, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 3, - .charBaseIndex = 3, - .mapBaseIndex = 31, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, -}; - -// Unknown unreferenced data, feel free to remove. -const u32 sUnused_Unref_Dupe[] = {255, 0}; - -const struct WindowTemplate sUnknown_8475674_Unref_Dupe[] = -{ - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 28, - .height = 3, - .paletteNum = 13, - .baseBlock = 0x13, - }, - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 6, - .width = 28, - .height = 13, - .paletteNum = 13, - .baseBlock = 0x67, - } -}; - -const struct WindowTemplate sUnknown_8475684_Unref_Dupe = -{ - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 6, - .width = 28, - .height = 7, - .paletteNum = 13, - .baseBlock = 0x67, -}; - -const struct WindowTemplate sUnknown_847568C_Unref_Dupe[] = -{ - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 8, - .width = 19, - .height = 3, - .paletteNum = 13, - .baseBlock = 0x13, - }, - { - .bg = 0, - .tilemapLeft = 22, - .tilemapTop = 7, - .width = 6, - .height = 4, - .paletteNum = 13, - .baseBlock = 0x4C, - } -}; - -const struct WindowTemplate sUnknown_847569C_Unref_Dupe = -{ - .bg = 0, - .tilemapLeft = 4, - .tilemapTop = 6, - .width = 22, - .height = 5, - .paletteNum = 13, - .baseBlock = 0x13, -}; - -const struct WindowTemplate sUnknown_84756A4_Unref_Dupe = -{ - .bg = 0, - .tilemapLeft = 5, - .tilemapTop = 8, - .width = 19, - .height = 3, - .paletteNum = 13, - .baseBlock = 0x13, -}; - -const u8 sUnknown_8471F50[5][5][11] = -{ - { - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - { - {0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0}, - {0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0}, - }, - { - {0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0}, - {0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0}, - {0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0}, - }, - { - {0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0}, - {0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0}, - {0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0}, - {0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0}, - }, - { - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - {2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2}, - {4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}, - {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6}, - {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8}, - }, -}; - -const u8 sUnknown_8472063[5][5][3] = -{ - { - {4, 5, 6}, - }, - { - {3, 4, 5}, - {5, 6, 3}, - }, - { - {4, 5, 6}, - {6, 7, 2}, - {2, 3, 4}, - }, - { - {3, 4, 5}, - {5, 6, 7}, - {7, 8, 1}, - {1, 2, 3}, - }, - { - {4, 5, 6}, - {6, 7, 8}, - {8, 9, 0}, - {0, 1, 2}, - {2, 3, 4}, - }, -}; - -const u8 sUnknown_84720AE[5][5][3] = -{ - { - {1, 0, 1}, - }, - { - {1, 0, 1}, - {0, 1, 0}, - }, - { - {2, 0, 1}, - {0, 1, 2}, - {1, 2, 0}, - }, - { - {3, 0, 1}, - {0, 1, 2}, - {1, 2, 3}, - {2, 3, 0}, - }, - { - {4, 0, 1}, - {0, 1, 2}, - {1, 2, 3}, - {2, 3, 4}, - {3, 4, 0}, - }, -}; - -ALIGNED(4) -const u8 sUnknown_84720FC[5][11] = -{ - {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9}, - {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9}, - {9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9}, - {9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9}, - {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3}, -}; - -const u8 sUnknown_8472133[5][5] = -{ - {5}, - {4, 6}, - {3, 5, 7}, - {2, 4, 6, 8}, - {1, 3, 5, 6, 9}, -}; - -// Duplicate and unused gfx. Feel free to remove. -const u32 sDuplicateGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.gbapal", - "graphics/link_games/dodrioberry_bg2.gbapal", - "graphics/link_games/dodrioberry_pkmn.gbapal", - "graphics/link_games/dodrioberry_shiny.gbapal", - "graphics/link_games/dodrioberry_status.gbapal", - "graphics/link_games/dodrioberry_berrysprites.gbapal", - "graphics/link_games/dodrioberry_berrysprites.4bpp.lz", - "graphics/link_games/dodrioberry_platform.gbapal", - "graphics/link_games/dodrioberry_bg1.4bpp.lz", - "graphics/link_games/dodrioberry_bg2.4bpp.lz", - "graphics/link_games/dodrioberry_status.4bpp.lz", - "graphics/link_games/dodrioberry_platform.4bpp.lz", - "graphics/link_games/dodrioberry_pkmn.4bpp.lz", - "graphics/link_games/dodrioberry_bg1.bin.lz", - "graphics/link_games/dodrioberry_bg2right.bin.lz", - "graphics/link_games/dodrioberry_bg2left.bin.lz"); +#include "data/dodrio_berry_picking.h" const u8 sUnknown_847553C[][3] = { @@ -2611,6 +2299,28 @@ 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. const struct WindowTemplate sUnknown_84755E0 = { @@ -2630,6 +2340,67 @@ ALIGNED(4) const u8 sUnknown_84755FC[][2] = {{24}, {40}, {56}}; const u8 sUnknown_8475602[][2] = {{24}, {40}, {70}}; +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], 3); + data[0]++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + data[0]++; + break; + case 2: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + rbox_fill_rectangle(data[1]); + CopyWindowToVram(data[1], 1); + data[0]++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + RemoveWindow(data[1]); + DestroyTask(taskId); + EnableBothScriptContexts(); + } + break; + } +} + +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? const u16 sUnknown_8475608[][4] = { @@ -2644,7 +2415,7 @@ const u8 sUnknown_8475630[] = _("あいうえおかき"); const u8 sUnknown_8475638[] = _("ABCDEFG"); const u8 sUnknown_8475640[] = _("0123456"); -const u8 *const sUnknown_8475648[] = +const u8 *const sPlaceholderPlayerNames[] = { sUnknown_8475630, sUnknown_8475630, @@ -2653,585 +2424,22 @@ const u8 *const sUnknown_8475648[] = sUnknown_8475640 }; -// Large chunk of data -const struct BgTemplate sUnknown_847565C[] = -{ - { - .bg = 0, - .charBaseIndex = 0, - .mapBaseIndex = 30, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, - { - .bg = 1, - .charBaseIndex = 2, - .mapBaseIndex = 12, - .screenSize = 1, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 2, - .mapBaseIndex = 14, - .screenSize = 1, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 3, - .charBaseIndex = 3, - .mapBaseIndex = 31, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, -}; - -// Unknown unreferenced data, feel free to remove. -const u32 sUnused[] = {255, 0}; - -const struct WindowTemplate sUnknown_8475674[] = +void sub_81539EC(void) { - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 28, - .height = 3, - .paletteNum = 13, - .baseBlock = 0x13, - }, - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 6, - .width = 28, - .height = 13, - .paletteNum = 13, - .baseBlock = 0x67, - } -}; - -const struct WindowTemplate sUnknown_8475684 = -{ - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 6, - .width = 28, - .height = 7, - .paletteNum = 13, - .baseBlock = 0x67, -}; - -const struct WindowTemplate sUnknown_847568C[] = -{ - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 8, - .width = 19, - .height = 3, - .paletteNum = 13, - .baseBlock = 0x13, - }, - { - .bg = 0, - .tilemapLeft = 22, - .tilemapTop = 7, - .width = 6, - .height = 4, - .paletteNum = 13, - .baseBlock = 0x4C, - } -}; - -const struct WindowTemplate sUnknown_847569C = -{ - .bg = 0, - .tilemapLeft = 4, - .tilemapTop = 6, - .width = 22, - .height = 5, - .paletteNum = 13, - .baseBlock = 0x13, -}; - -const struct WindowTemplate sUnknown_84756A4 = -{ - .bg = 0, - .tilemapLeft = 5, - .tilemapTop = 8, - .width = 19, - .height = 3, - .paletteNum = 13, - .baseBlock = 0x13, -}; + gUnknown_203F3E0->unk24 = GetLinkPlayerCount(); +} -// This is an unused copy of the tables from the top of the file. Feel free to remove. -const u8 sUnknown_8471F50_UnrefDup[5][5][11] = +void sub_8153A04(void) { - { - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - { - {0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0}, - {0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0}, - }, - { - {0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0}, - {0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0}, - {0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0}, - }, - { - {0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0}, - {0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0}, - {0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0}, - {0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0}, - }, - { - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - {2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2}, - {4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}, - {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6}, - {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8}, - }, -}; + u8 i, playerId; -const u8 sUnknown_8472063_UnrefDup[5][5][3] = -{ - { - {4, 5, 6}, - }, - { - {3, 4, 5}, - {5, 6, 3}, - }, - { - {4, 5, 6}, - {6, 7, 2}, - {2, 3, 4}, - }, - { - {3, 4, 5}, - {5, 6, 7}, - {7, 8, 1}, - {1, 2, 3}, - }, - { - {4, 5, 6}, - {6, 7, 8}, - {8, 9, 0}, - {0, 1, 2}, - {2, 3, 4}, - }, -}; + for (playerId = gUnknown_203F3E0->unk24; playerId < NELEMS(sPlaceholderPlayerNames); playerId++) + StringCopy(gLinkPlayers[playerId].name, sPlaceholderPlayerNames[playerId]); -const u8 sUnknown_84720AE_UnrefDup[5][5][3] = -{ - { - {1, 0, 1}, - }, - { - {1, 0, 1}, - {0, 1, 0}, - }, - { - {2, 0, 1}, - {0, 1, 2}, - {1, 2, 0}, - }, - { - {3, 0, 1}, - {0, 1, 2}, - {1, 2, 3}, - {2, 3, 0}, - }, + gUnknown_203F3E0->unk24 = 5; + for (i = 0; i < 4; i++) { - {4, 0, 1}, - {0, 1, 2}, - {1, 2, 3}, - {2, 3, 4}, - {3, 4, 0}, - }, -}; - -ALIGNED(4) -const u8 sUnknown_84720FC_UnrefDup[5][11] = -{ - {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9}, - {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9}, - {9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9}, - {9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9}, - {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3}, -}; - -const u8 sUnknown_8472133_UnrefDup[5][5] = -{ - {5}, - {4, 6}, - {3, 5, 7}, - {2, 4, 6, 8}, - {1, 3, 5, 6, 9}, -}; - -const u16 sDodrioBerryBgPal1[] = INCBIN_U16("graphics/link_games/dodrioberry_bg1.gbapal", - "graphics/link_games/dodrioberry_bg2.gbapal"); -const u16 sDodrioBerryPkmnPal[] = INCBIN_U16("graphics/link_games/dodrioberry_pkmn.gbapal"); -const u16 sDodrioBerryShinyPal[] = INCBIN_U16("graphics/link_games/dodrioberry_shiny.gbapal"); -const u16 sDodrioBerryStatusPal[] = INCBIN_U16("graphics/link_games/dodrioberry_status.gbapal"); -const u16 sDodrioBerrySpritesPal[] = INCBIN_U16("graphics/link_games/dodrioberry_berrysprites.gbapal"); -const u32 sDodrioBerrySpritesGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_berrysprites.4bpp.lz"); -const u16 sDodrioBerryPlatformPal[] = INCBIN_U16("graphics/link_games/dodrioberry_platform.gbapal"); -const u32 sDodrioBerryBgGfx1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.4bpp.lz"); -const u32 sDodrioBerryBgGfx2[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2.4bpp.lz"); -const u32 sDodrioBerryStatusGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_status.4bpp.lz"); -const u32 sDodrioBerryPlatformGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_platform.4bpp.lz"); -const u32 sDodrioBerryPkmnGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_pkmn.4bpp.lz"); -const u32 sDodrioBerryBgTilemap1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.bin.lz"); -const u32 sDodrioBerryBgTilemap2Right[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2right.bin.lz"); -const u32 sDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2left.bin.lz"); - -const struct OamData sOamData_8478C98 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = FALSE, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0 -}; - -const struct OamData sOamData_8478CA0 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = FALSE, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0 -}; - -const struct OamData sOamData_8478CA8 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = FALSE, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0 -}; - -const struct OamData sOamData_8478CB0 = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = FALSE, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(64x32), - .tileNum = 0, - .priority = 3, - .paletteNum = 0, - .affineParam = 0 -}; - -const union AnimCmd sSpriteAnim_8478CB8[] = -{ - ANIMCMD_FRAME(0, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478CC0[] = -{ - ANIMCMD_FRAME(64, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478CC8[] = -{ - ANIMCMD_FRAME(128, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478CD0[] = -{ - ANIMCMD_FRAME(192, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478CD8[] = -{ - ANIMCMD_FRAME(256, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd *const sSpriteAnimTable_8478CE0[] = -{ - sSpriteAnim_8478CB8, - sSpriteAnim_8478CC0, - sSpriteAnim_8478CC8, - sSpriteAnim_8478CD0, - sSpriteAnim_8478CD8 -}; - -const union AnimCmd sSpriteAnim_8478CF4[] = -{ - ANIMCMD_FRAME(0, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478CFC[] = -{ - ANIMCMD_FRAME(4, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478D04[] = -{ - ANIMCMD_FRAME(8, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd *const sSpriteAnimTable_8478D0C[] = -{ - sSpriteAnim_8478CF4, - sSpriteAnim_8478CFC, - sSpriteAnim_8478D04 -}; - -const union AnimCmd sSpriteAnim_8478D18[] = -{ - ANIMCMD_FRAME(0, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478D20[] = -{ - ANIMCMD_FRAME(4, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478D28[] = -{ - ANIMCMD_FRAME(8, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478D30[] = -{ - ANIMCMD_FRAME(12, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478D38[] = -{ - ANIMCMD_FRAME(16, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478D40[] = -{ - ANIMCMD_FRAME(20, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478D48[] = -{ - ANIMCMD_FRAME(24, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478D50[] = -{ - ANIMCMD_FRAME(28, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd sSpriteAnim_8478D58[] = -{ - ANIMCMD_FRAME(32, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd *const sSpriteAnimTable_8478D60[] = -{ - sSpriteAnim_8478D18, - sSpriteAnim_8478D20, - sSpriteAnim_8478D28, - sSpriteAnim_8478D30, - sSpriteAnim_8478D38, - sSpriteAnim_8478D40, - sSpriteAnim_8478D48, - sSpriteAnim_8478D50, - sSpriteAnim_8478D58 -}; - -const union AnimCmd sSpriteAnim_8478D84[] = -{ - ANIMCMD_FRAME(0, 20), - ANIMCMD_JUMP(0) -}; - -const union AnimCmd *const sSpriteAnimTable_8478D8C[] = -{ - sSpriteAnim_8478D84 -}; - -// These are declared inside pokeemerald's sub_8153A9C -const struct SpritePalette gUnknown_8478D90 = {sDodrioBerryPkmnPal, 0}; -const struct SpritePalette gUnknown_8478D98 = {sDodrioBerryShinyPal, 1}; - -// These are declared inside pokeemerald's sub_8153E28 -const struct SpritePalette gUnknown_8478DA0 = {sDodrioBerryStatusPal, 2}; -const struct SpriteTemplate gUnknown_8478DA8 = - { - .tileTag = 1, - .paletteTag = 2, - .oam = &sOamData_8478CA0, - .anims = sSpriteAnimTable_8478D0C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = nullsub_97, - }; - -// Unknown unused data, feel free to remove. -const u8 sUnused2[] = {0xCD, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0xF4, 0x0, 0x0}; - -// This is declared inside pokeemerald's sub_8154128 -const struct SpritePalette gUnknown_8478DCC = {sDodrioBerrySpritesPal, 3}; - -const s16 sUnknown_8478DD4[] = {88, 128, 168, 208}; - -// These are declared inside pokeemerald's sub_815417C -const struct SpriteTemplate gUnknown_8478DDC = - { - .tileTag = 2, - .paletteTag = 3, - .oam = &sOamData_8478CA8, - .anims = sSpriteAnimTable_8478D60, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }; -const struct SpriteTemplate gUnknown_8478DF4 = - { - .tileTag = 2, - .paletteTag = 3, - .oam = &sOamData_8478CA0, - .anims = sSpriteAnimTable_8478D60, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }; - -// This is declared inside pokeemerald's sub_8028CF4 -const u8 gUnknown_8478E0C[] = {30, 20}; - -const s16 gUnknown_8478E0E[][2] = {{230, 55}, {30, 74}}; - -// These are declared inside pokeemerald's sub_8154438 -const struct SpritePalette gUnknown_8478E18 = {sDodrioBerryPlatformPal, 6}; -const struct SpriteTemplate gUnknown_8478E20 = - { - .tileTag = 5, - .paletteTag = 6, - .oam = &sOamData_8478CB0, - .anims = sSpriteAnimTable_8478D8C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81543E8, - }; - -struct WinCoords -{ - u8 left; - u8 top; -}; - -const u8 sUnknown_8478E38[][3] = -{ - {1, 2, 3}, - {1, 4, 5}, - {1, 8, 9}, - {1, 6, 7}, -}; - -const struct WinCoords sUnknown_8478E44[] = {{12, 6}}; -const struct WinCoords sUnknown_8478E48[] = {{9, 10}, {15, 6}}; -const struct WinCoords sUnknown_8478E50[] = {{12, 6}, {18, 10}, {6, 10}}; -const struct WinCoords sUnknown_8478E5C[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}}; -const struct WinCoords sUnknown_8478E6C[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}}; - -const struct WinCoords *const sUnknown_8478E80[] = -{ - sUnknown_8478E44, - sUnknown_8478E48, - sUnknown_8478E50, - sUnknown_8478E5C, - sUnknown_8478E6C, -}; - -const u8 *const sUnknown_8478E94[] = -{ - gText_1Colon, - gText_2Colon, - gText_3Colon, - gText_4Colon, - gText_5Colon, -}; - -const u16 sUnknown_8478EA8[] = {92, 132, 172, 212}; -const u16 sUnknown_8478EB0[] = {30, 45, 60, 75, 90}; -const u16 sUnknown_8478EBA[] = {12, 28, 44, 60, 76}; - -struct -{ - u8 id; - void (*func)(void); -} const gUnknown_8478EC4[] = -{ - {0, sub_8154A2C}, - {1, sub_8154B34}, - {2, sub_8154F80}, - {3, sub_81556E0}, - {4, sub_8155A78}, - {5, sub_8155B4C}, - {6, sub_8155C2C}, - {7, sub_8155C80}, - {8, unused_0}, - {9, nullsub_98}, -}; - -// This is declared inside pokeemerald's sub_80296A8 -const u8 gUnknown_8478F14[5] = {0, 1, 2, 3, 4}; + for (playerId = 0; playerId < gUnknown_203F3E0->unk24; playerId++) + gUnknown_203F3E0->unk4A[playerId][i] = sUnknown_8475608[playerId][i]; + } +} diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index 4260c6f2f..1589b13b8 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -1,23 +1,1040 @@ #include "global.h" +#include "gflib.h" +#include "dodrio_berry_picking.h" #include "link.h" -#include "link_rfu.h" +#include "strings.h" +#include "task.h" +#include "text_window.h" +#include "text_window_graphics.h" +#include "constants/songs.h" -void sub_815A5BC(s32 a0) +// Temporary stopgap to export duplicate data +// included from data/dodrio_berry_picking.h +asm(".global sDodrioBerryStatusGfx\n" + "\t.global sDodrioBerrySpritesGfx\n" + "\t.global sDodrioBerryPlatformGfx\n" + "\t.global sDodrioBerryBgTilemap1\n" + "\t.global sDodrioBerryBgTilemap2Left\n" + "\t.global sDodrioBerryBgTilemap2Right\n" + "\t.global sUnknown_8475674\n" + "\t.global sUnknown_8475684\n" + "\t.global sUnknown_847568C\n" + "\t.global sUnknown_84756A4\n" + "\t.global sUnknown_847569C\n" + "\t.global sUnknown_847565C\n" + "\t.global sDodrioBerryBgPal1\n" + "\t.global sDodrioBerryBgGfx1\n" + "\t.global sDodrioBerryBgGfx2"); + +struct DodrioStruct_2022CF4 +{ + u8 filler_00[0xc]; + u8 unkC[10]; + s16 unk16[10]; + u16 unk2A[10]; + u16 unk3E; +}; // size = 0x40 + +EWRAM_DATA u16 *gUnknown_203F3E4[5] = {NULL}; +EWRAM_DATA u16 *gUnknown_203F3F8[2] = {NULL}; +EWRAM_DATA u16 *gUnknown_203F400[11] = {NULL}; +EWRAM_DATA u16 *gUnknown_203F42C[4] = {NULL}; +EWRAM_DATA struct DodrioStruct_2022CF4 *gUnknown_203F43C = NULL; +EWRAM_DATA struct DodrioSubstruct_0160 *gUnknown_203F440 = NULL; + +void sub_8153B9C(struct Sprite * sprite); +u32 sub_8153C30(struct Sprite * sprite); +u32 sub_8153CA0(struct Sprite * sprite); +void sub_8153D48(bool8 a0, u8 a1); +void nullsub_97(struct Sprite *sprite); +void sub_8154324(bool8 a0); +void sub_81543E8(struct Sprite *sprite); +s16 sub_8154608(u8 a0, u8 a1); +void sub_8154A08(u8 taskId); +void sub_8154A2C(void); +void sub_8154B34(void); +void sub_8154F80(void); +void sub_81556E0(void); +void sub_8155A78(void); +void sub_8155B4C(void); +void sub_8155C2C(void); +void sub_8155C80(void); +void unused_0(void); +void nullsub_98(void); +void sub_8155E24(MainCallback cb); +MainCallback sub_8155E54(void); +void sub_8155EA0(void); +bool32 sub_8155FE0(void); + +#include "data/dodrio_berry_picking.h" + +const struct OamData sOamData_8478C98 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct OamData sOamData_8478CA0 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct OamData sOamData_8478CA8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct OamData sOamData_8478CB0 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0 +}; + +const union AnimCmd sSpriteAnim_8478CB8[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478CC0[] = +{ + ANIMCMD_FRAME(64, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478CC8[] = +{ + ANIMCMD_FRAME(128, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478CD0[] = +{ + ANIMCMD_FRAME(192, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478CD8[] = +{ + ANIMCMD_FRAME(256, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const sSpriteAnimTable_8478CE0[] = +{ + sSpriteAnim_8478CB8, + sSpriteAnim_8478CC0, + sSpriteAnim_8478CC8, + sSpriteAnim_8478CD0, + sSpriteAnim_8478CD8 +}; + +const union AnimCmd sSpriteAnim_8478CF4[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478CFC[] = +{ + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478D04[] = +{ + ANIMCMD_FRAME(8, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const sSpriteAnimTable_8478D0C[] = +{ + sSpriteAnim_8478CF4, + sSpriteAnim_8478CFC, + sSpriteAnim_8478D04 +}; + +const union AnimCmd sSpriteAnim_8478D18[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478D20[] = +{ + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478D28[] = +{ + ANIMCMD_FRAME(8, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478D30[] = +{ + ANIMCMD_FRAME(12, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478D38[] = +{ + ANIMCMD_FRAME(16, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478D40[] = { - struct Padded_U8 data[2]; - data[0].value = 1; - data[1].value = a0; - RfuPrepareSend0x2f00(data); + ANIMCMD_FRAME(20, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478D48[] = +{ + ANIMCMD_FRAME(24, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478D50[] = +{ + ANIMCMD_FRAME(28, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd sSpriteAnim_8478D58[] = +{ + ANIMCMD_FRAME(32, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const sSpriteAnimTable_8478D60[] = +{ + sSpriteAnim_8478D18, + sSpriteAnim_8478D20, + sSpriteAnim_8478D28, + sSpriteAnim_8478D30, + sSpriteAnim_8478D38, + sSpriteAnim_8478D40, + sSpriteAnim_8478D48, + sSpriteAnim_8478D50, + sSpriteAnim_8478D58 +}; + +const union AnimCmd sSpriteAnim_8478D84[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const sSpriteAnimTable_8478D8C[] = +{ + sSpriteAnim_8478D84 +}; + +// Code + +void sub_8153A9C(void) +{ + void *ptr = AllocZeroed(0x3000); + struct SpritePalette pal1 = {sDodrioBerryPkmnPal, 0}; + struct SpritePalette pal2 = {sDodrioBerryShinyPal, 1}; + + LZ77UnCompWram(sDodrioBerryPkmnGfx, ptr); + // This check should be one line up. + if (ptr != NULL) + { + struct SpriteSheet sheet = {ptr, 0x3000, 0}; + LoadSpriteSheet(&sheet); + Free(ptr); + } + LoadSpritePalette(&pal1); + LoadSpritePalette(&pal2); +} + +void sub_8153AFC(struct DodrioSubstruct_318C *arg0, u8 arg1, u8 id, u8 arg3) +{ + struct SpriteTemplate sprTemplate = + { + .tileTag = 0, + .paletteTag = arg0->isShiny, + .oam = &sOamData_8478C98, + .anims = sSpriteAnimTable_8478CE0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8153B9C, + }; + + gUnknown_203F3E4[id] = AllocZeroed(4); + *gUnknown_203F3E4[id] = CreateSprite(&sprTemplate, sub_8154608(arg1, arg3), 136, 3); + sub_8153D48(TRUE, id); +} + +void sub_8153B9C(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + break; + case 1: + sub_8153C30(sprite); + break; + case 2: + sub_8153CA0(sprite); + break; + } +} + +void sub_8153BC0(u8 unused) +{ + struct Sprite *sprite = &gSprites[*gUnknown_203F3E4[GetMultiplayerId()]]; + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; +} + +void sub_8153BF8(u8 unused) +{ + struct Sprite *sprite = &gSprites[*gUnknown_203F3E4[GetMultiplayerId()]]; + sprite->data[0] = 2; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; } -u8 sub_815A5E8(s32 a0) +u32 sub_8153C30(struct Sprite *sprite) { - u8 * r1; - if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) - return 0; - r1 = (u8 *)&gRecvCmds[a0][1]; - if (r1[0] == 1) - return r1[4]; + s8 var; + u8 mod = (++sprite->data[1] / 2) % 4; + + if (sprite->data[1] >= 3) + { + switch (mod) + { + default: + var = 1; + break; + case 1: + case 2: + var = -1; + break; + } + + sprite->pos1.x += var; + if (++sprite->data[1] >= 40) + { + sprite->data[0] = 0; + sprite->pos1.x = sub_8154608(0, sub_81533B4()); + } + } + + return 0; +} + +u32 sub_8153CA0(struct Sprite *sprite) +{ + u8 mod = (++sprite->data[1] / 13) % 4; + + if (sprite->data[1] % 13 == 0 && mod != 0) + PlaySE(SE_W204); + if (sprite->data[1] >= 104) + { + sprite->data[0] = 0; + mod = 0; + } + sub_8153DA8(GetMultiplayerId(), mod); return 0; } +void sub_8153D08(u8 count) +{ + u8 i; + for (i = 0; i < count; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_203F3E4[i]]; + if (sprite != NULL) + DestroySpriteAndFreeResources(sprite); + // Memory should be freed here but is not. + } +} + +void sub_8153D48(bool8 invisible, u8 id) +{ + gSprites[*gUnknown_203F3E4[id]].invisible = invisible; +} + +void sub_8153D80(bool8 invisible, u8 count) +{ + u8 i; + for (i = 0; i < count; i++) + sub_8153D48(invisible, i); +} + +void sub_8153DA8(u8 id, u8 frameNum) +{ + StartSpriteAnim(&gSprites[*gUnknown_203F3E4[id]], frameNum); +} + +void nullsub_97(struct Sprite * sprite) +{ + +} + +void sub_8153DD8(void) +{ + u8 i; + for (i = 0; i < 10; i++) + { + struct Sprite *sprite = &gSprites[gUnknown_203F43C->unk2A[i]]; + sprite->pos1.x = (i * 16) + 48; + sprite->pos1.y = -8 - (i * 8); + gUnknown_203F43C->unkC[i] = 0; + } +} + +void sub_8153E28(void) +{ + u8 i; + void *ptr = AllocZeroed(0x180); + struct SpritePalette spPal = {sDodrioBerryStatusPal, 2}; + + LZ77UnCompWram(sDodrioBerryStatusGfx, ptr); + // This check should be one line up. + if (ptr != NULL) + { + struct SpriteSheet spSheet = {ptr, 0x180, 1}; + struct SpriteTemplate spTemplate = + { + .tileTag = 1, + .paletteTag = 2, + .oam = &sOamData_8478CA0, + .anims = sSpriteAnimTable_8478D0C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = nullsub_97, + }; + + gUnknown_203F43C = AllocZeroed(sizeof(*gUnknown_203F43C)); + LoadSpriteSheet(&spSheet); + LoadSpritePalette(&spPal); + for (i = 0; i < 10; i++) + gUnknown_203F43C->unk2A[i] = CreateSprite(&spTemplate, (i * 16) + 48, -8 - (i * 8), 0); + } + + Free(ptr); +} + +void sub_8153ED8(void) +{ + u8 i; + for (i = 0; i < 10; i++) + { + struct Sprite *sprite = &gSprites[gUnknown_203F43C->unk2A[i]]; + if (sprite != NULL) + DestroySpriteAndFreeResources(sprite); + } + FREE_AND_SET_NULL(gUnknown_203F43C); +} + +bool32 sub_8153F1C(void) +{ + u8 i; + bool32 r3 = FALSE; + for (i = 0; i < 10; i++) + { + struct Sprite *sprite = &gSprites[gUnknown_203F43C->unk2A[i]]; + gUnknown_203F43C->unk16[i] = 2; + if (gUnknown_203F43C->unkC[i] != 0 && sprite->pos1.y == 8) + continue; + r3 = TRUE; + if (sprite->pos1.y == 8) + { + if (gUnknown_203F43C->unkC[i] != 0) + continue; + gUnknown_203F43C->unkC[i] = 1; + gUnknown_203F43C->unk16[i] = -16; + PlaySE(SE_TK_KASYA); + } + sprite->pos1.y += gUnknown_203F43C->unk16[i]; + } + + if (r3) + return FALSE; + else + return TRUE; +} + +void sub_8153FC8(u8 arg0) +{ + u8 i; + + if (arg0 > 10) + { + for (i = 0; i < 10; i++) + StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 1); + } + else + { + for (i = 0; i < 10 - arg0; i++) + { + if (arg0 > 6) + { + gUnknown_203F43C->unk3E += arg0 - 6; + if (gUnknown_203F43C->unk3E > 30) + gUnknown_203F43C->unk3E = 0; + else if (gUnknown_203F43C->unk3E > 10) + StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 2); + else + StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 0); + } + else + { + StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 0); + } + } + for (; i < 10; i++) + StartSpriteAnim(&gSprites[gUnknown_203F43C->unk2A[i]], 1); + } +} + +void sub_81540DC(bool8 invisible) +{ + u8 i; + for (i = 0; i < 10; i++) + gSprites[gUnknown_203F43C->unk2A[i]].invisible = invisible; +} + +// Unknown unused data, feel free to remove. +const u8 sUnused2[] = { + SE_W204, + SE_TOY_C, + SE_TOY_D, + SE_TOY_E, + SE_TOY_F, + SE_TOY_G, + SE_TOY_A, + SE_TOY_B, + SE_TOY_C1, + SE_CARD3 +}; + +void sub_8154128(void) +{ + void *ptr = AllocZeroed(0x480); + struct SpritePalette sprPal = {sDodrioBerrySpritesPal, 3}; + + LZ77UnCompWram(sDodrioBerrySpritesGfx, ptr); + if (ptr != NULL) + { + struct SpriteSheet sprSheet = {ptr, 0x480, 2}; + LoadSpriteSheet(&sprSheet); + } + + LoadSpritePalette(&sprPal); + Free(ptr); +} + +const s16 sUnknown_8478DD4[] = {88, 128, 168, 208}; + +void sub_815417C(void) +{ + u8 i; + s16 x; + + struct SpriteTemplate sprTemplate1 = + { + .tileTag = 2, + .paletteTag = 3, + .oam = &sOamData_8478CA8, + .anims = sSpriteAnimTable_8478D60, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + struct SpriteTemplate sprTemplate2 = + { + .tileTag = 2, + .paletteTag = 3, + .oam = &sOamData_8478CA0, + .anims = sSpriteAnimTable_8478D60, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + for (i = 0; i < 11; i++) + { + gUnknown_203F400[i] = AllocZeroed(4); + x = i * 16; + *gUnknown_203F400[i] = CreateSprite(&sprTemplate1, x + (i * 8), 8, 1); + sub_81542EC(i, TRUE); + } + for (i = 0; i < 4; i++) + { + gUnknown_203F42C[i] = AllocZeroed(4); + if (i == 3) + *gUnknown_203F42C[i] = CreateSprite(&sprTemplate2, sUnknown_8478DD4[i], 57, 0); + else + *gUnknown_203F42C[i] = CreateSprite(&sprTemplate2, sUnknown_8478DD4[i], 60, 0); + StartSpriteAnim(&gSprites[*gUnknown_203F42C[i]], i); + } + + sub_8154324(TRUE); +} + +void sub_8154274(void) +{ + struct Sprite *sprite; + u8 i; + + for (i = 0; i < 11; i++) + { + sprite = &gSprites[*gUnknown_203F400[i]]; + if (sprite != NULL) + DestroySprite(sprite); + FREE_AND_SET_NULL(gUnknown_203F400[i]); + } + for (i = 0; i < 4; i++) + { + sprite = &gSprites[*gUnknown_203F42C[i]]; + if (sprite != NULL) + DestroySprite(sprite); + FREE_AND_SET_NULL(gUnknown_203F42C[i]); + } +} + +void sub_81542EC(u8 id, bool8 invisible) +{ + gSprites[*gUnknown_203F400[id]].invisible = invisible; +} + +void sub_8154324(bool8 invisible) +{ + u8 i; + for (i = 0; i < 4; i++) + gSprites[*gUnknown_203F42C[i]].invisible = invisible; +} + +void sub_8154370(u8 id, u8 y) +{ + gSprites[*gUnknown_203F400[id]].pos1.y = y * 8; +} + +void sub_8154398(u16 id, u8 frameNum) +{ + StartSpriteAnim(&gSprites[*gUnknown_203F400[id]], frameNum); +} + +// Unused +void sub_81543C4(u8 spriteId) +{ + gSprites[spriteId].pos1.x = 20 * spriteId + 50; + gSprites[spriteId].pos1.y = 50; +} + +// Gamefreak made a mistake there and goes out of bounds for the data array as it holds 8 elements +// in turn overwriting sprite's subpriority and subsprites fields. +#if defined(NONMATCHING) +#define sKeepPosX data[1] +#else +#define sKeepPosX data[10] +#endif // NONMATCHING + +void sub_81543E8(struct Sprite *sprite) +{ + u8 i; + static const u8 array[] = {30, 20}; + + if (sprite->sKeepPosX != TRUE) + { + for (i = 0; i < 2; i++) + { + if (++gUnknown_203F3F8[i][1] > array[i]) + { + sprite->pos1.x--; + gUnknown_203F3F8[i][1] = 0; + } + } + } +} + +const s16 gUnknown_8478E0E[][2] = {{230, 55}, {30, 74}}; + +void sub_8154438(void) +{ + u8 i; + void *ptr = AllocZeroed(0x400); + struct SpritePalette sprPal = {sDodrioBerryPlatformPal, 6}; + + LZ77UnCompWram(sDodrioBerryPlatformGfx, ptr); + if (ptr != NULL) + { + struct SpriteSheet sprSheet = {ptr, 0x400, 5}; + struct SpriteTemplate sprTemplate = + { + .tileTag = 5, + .paletteTag = 6, + .oam = &sOamData_8478CB0, + .anims = sSpriteAnimTable_8478D8C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81543E8, + }; + + LoadSpriteSheet(&sprSheet); + LoadSpritePalette(&sprPal); + for (i = 0; i < 2; i++) + { + gUnknown_203F3F8[i] = AllocZeroed(4); + *gUnknown_203F3F8[i] = CreateSprite(&sprTemplate, gUnknown_8478E0E[i][0], gUnknown_8478E0E[i][1], 4); + } + } + + Free(ptr); +} + +void sub_81544F0(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_203F3F8[i]]; + sprite->sKeepPosX = TRUE; + sprite->pos1.x = gUnknown_8478E0E[i][0]; + sprite->pos1.y = gUnknown_8478E0E[i][1]; + } +} + +void sub_8154540(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_203F3F8[i]]; + sprite->sKeepPosX = FALSE; + } +} + +void sub_8154578(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_203F3F8[i]]; + if (sprite) + DestroySprite(sprite); + FREE_AND_SET_NULL(gUnknown_203F3F8[i]); + } +} + +void sub_81545BC(bool8 invisible) +{ + u8 i; + for (i = 0; i < 2; i++) + gSprites[*gUnknown_203F3F8[i]].invisible = invisible; +} + +#undef sKeepPosX + +s16 sub_8154608(u8 arg0, u8 arg1) +{ + s16 x = 0; + switch (arg1) + { + case 1: + x = 15; + break; + case 2: + switch (arg0) + { + case 0: x = 12; break; + case 1: x = 18; break; + } + break; + case 3: + switch (arg0) + { + case 0: x = 15; break; + case 1: x = 21; break; + case 2: x = 9; break; + } + break; + case 4: + switch (arg0) + { + case 0: x = 12; break; + case 1: x = 18; break; + case 2: x = 24; break; + case 3: x = 6; break; + } + break; + case 5: + switch (arg0) + { + case 0: x = 15; break; + case 1: x = 21; break; + case 2: x = 27; break; + case 3: x = 3; break; + case 4: x = 9; break; + } + break; + } + + return x * 8; +} + +void sub_81546C0(void) +{ + u8 i; + for (i = 0; i < 11; i++) + { + sub_81542EC(i, TRUE); + sub_8154370(i, 1); + } + sub_81540DC(FALSE); +} + +void sub_81546EC(u8 frameId) +{ + LoadBgTiles(0, GetUserFrameGraphicsInfo(frameId)->tiles, 0x120, 1); + LoadPalette(GetUserFrameGraphicsInfo(frameId)->palette, 0xA0, 0x20); +} + +void sub_8154720(void) +{ + TextWindow_SetStdFrame0_WithPal(0, 0xA, 0xB0); +} + +void sub_8154730(void) +{ + gUnknown_203F440->finished = FALSE; + gUnknown_203F440->state = 0; + gUnknown_203F440->unk3018 = 0; + gUnknown_203F440->unk3020 = 0; + gUnknown_203F440->unk3024 = 0; +} + +void sub_8154768(const struct WindowTemplate *winTempl) +{ + u8 pal = 0xA; + + FillBgTilemapBufferRect(0, 1, winTempl->tilemapLeft - 1, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 2, winTempl->tilemapLeft, winTempl->tilemapTop - 1, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 3, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 4, winTempl->tilemapLeft - 1, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 6, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 7, winTempl->tilemapLeft - 1, winTempl->tilemapTop + winTempl->height, 1, 1, pal); + FillBgTilemapBufferRect(0, 8, winTempl->tilemapLeft, winTempl->tilemapTop + winTempl->height, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 9, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop + winTempl->height, 1, 1, pal); +} + +void sub_8154868(const struct WindowTemplate *winTempl) +{ + u8 pal = 0xB; + + FillBgTilemapBufferRect(0, 10, winTempl->tilemapLeft - 1, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 11, winTempl->tilemapLeft, winTempl->tilemapTop - 1, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 12, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 13, winTempl->tilemapLeft - 1, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 15, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 16, winTempl->tilemapLeft - 1, winTempl->tilemapTop + winTempl->height, 1, 1, pal); + FillBgTilemapBufferRect(0, 17, winTempl->tilemapLeft, winTempl->tilemapTop + winTempl->height, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 18, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop + winTempl->height, 1, 1, pal); +} + +void sub_8154968(struct DodrioSubstruct_0160 *ptr) +{ + gUnknown_203F440 = ptr; + gUnknown_203F440->finished = FALSE; + gUnknown_203F440->state = 0; + gUnknown_203F440->unk3018 = 0; + gUnknown_203F440->unk3020 = 0; + gUnknown_203F440->unk3024 = 0; + gUnknown_203F440->unk3004 = CreateTask(sub_8154A08, 3); + sub_8155E24(sub_8154A2C); +} + +void sub_81549C8(void) +{ + FreeAllWindowBuffers(); +} + +struct WinCoords +{ + u8 left; + u8 top; +}; + +const u8 sUnknown_8478E38[][3] = +{ + { + TEXT_COLOR_WHITE, + TEXT_COLOR_DARK_GREY, + TEXT_COLOR_LIGHT_GREY + }, { + TEXT_COLOR_WHITE, + TEXT_COLOR_RED, + TEXT_COLOR_LIGHT_RED + }, { + TEXT_COLOR_WHITE, + TEXT_COLOR_BLUE, + TEXT_COLOR_LIGHT_BLUE + }, { + TEXT_COLOR_WHITE, + TEXT_COLOR_GREEN, + TEXT_COLOR_LIGHT_GREEN + } +}; + +const struct WinCoords sUnknown_8478E44[] = {{12, 6}}; +const struct WinCoords sUnknown_8478E48[] = {{9, 10}, {15, 6}}; +const struct WinCoords sUnknown_8478E50[] = {{12, 6}, {18, 10}, {6, 10}}; +const struct WinCoords sUnknown_8478E5C[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}}; +const struct WinCoords sUnknown_8478E6C[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}}; + +const struct WinCoords *const sUnknown_8478E80[] = +{ + sUnknown_8478E44, + sUnknown_8478E48, + sUnknown_8478E50, + sUnknown_8478E5C, + sUnknown_8478E6C, +}; + +const u8 *const sUnknown_8478E94[] = +{ + gText_1Colon, + gText_2Colon, + gText_3Colon, + gText_4Colon, + gText_5Colon, +}; + +const u16 sUnknown_8478EA8[] = {92, 132, 172, 212}; +const u16 sUnknown_8478EB0[] = {30, 45, 60, 75, 90}; +const u16 sUnknown_8478EBA[] = {12, 28, 44, 60, 76}; + +struct +{ + u8 id; + void (*func)(void); +} const gUnknown_8478EC4[] = +{ + {0, sub_8154A2C}, + {1, sub_8154B34}, + {2, sub_8154F80}, + {3, sub_81556E0}, + {4, sub_8155A78}, + {5, sub_8155B4C}, + {6, sub_8155C2C}, + {7, sub_8155C80}, + {8, unused_0}, + {9, nullsub_98}, +}; + +void sub_81549D4(u8 arg0) +{ + u8 i; + for (i = 0; i < 10; i++) + { + if (gUnknown_8478EC4[i].id == arg0) + sub_8155E24(gUnknown_8478EC4[i].func); + } +} + +void sub_8154A08(u8 taskId) +{ + if (!gUnknown_203F440->finished) + sub_8155E54()(); +} + +void sub_8154A2C(void) +{ + switch (gUnknown_203F440->state) + { + case 0: + sub_8155EA0(); + gUnknown_203F440->state++; + break; + case 1: + if (sub_8155FE0() == TRUE) + gUnknown_203F440->state++; + break; + case 2: + CopyToBgTilemapBuffer(3, sDodrioBerryBgTilemap1, 0, 0); + CopyToBgTilemapBuffer(1, sDodrioBerryBgTilemap2Left, 0, 0); + CopyToBgTilemapBuffer(2, sDodrioBerryBgTilemap2Right, 0, 0); + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + gUnknown_203F440->state++; + break; + case 3: + ShowBg(0); + ShowBg(3); + ShowBg(1); + ShowBg(2); + gUnknown_203F440->state++; + break; + case 4: + sub_81546EC(gSaveBlock2Ptr->optionsWindowFrameType); + sub_8154720(); + gUnknown_203F440->state++; + break; + default: + gUnknown_203F440->finished = TRUE; + break; + } +} + +// This is declared inside pokeemerald's sub_80296A8 +const u8 gUnknown_8478F14[5] = {0, 1, 2, 3, 4}; diff --git a/src/dodrio_berry_picking_3.c b/src/dodrio_berry_picking_3.c new file mode 100644 index 000000000..4260c6f2f --- /dev/null +++ b/src/dodrio_berry_picking_3.c @@ -0,0 +1,23 @@ +#include "global.h" +#include "link.h" +#include "link_rfu.h" + +void sub_815A5BC(s32 a0) +{ + struct Padded_U8 data[2]; + data[0].value = 1; + data[1].value = a0; + RfuPrepareSend0x2f00(data); +} + +u8 sub_815A5E8(s32 a0) +{ + u8 * r1; + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + r1 = (u8 *)&gRecvCmds[a0][1]; + if (r1[0] == 1) + return r1[4]; + return 0; +} + -- cgit v1.2.3 From cb99443c51d6263425fb4d853177efc07aee5fb9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 5 Mar 2020 10:31:31 -0500 Subject: through sub_81556E0 --- src/berry_pouch.c | 2 +- src/dodrio_berry_picking.c | 7 - src/dodrio_berry_picking_2.c | 397 ++++++++++++++++++++++++++++++++++++++++++- src/fame_checker.c | 4 +- src/help_system.c | 2 +- src/item_menu.c | 2 +- src/item_pc.c | 2 +- src/list_menu.c | 2 +- src/menu.c | 4 +- src/shop.c | 2 +- src/tm_case.c | 2 +- 11 files changed, 405 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/berry_pouch.c b/src/berry_pouch.c index 63677574b..ef8ded539 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -748,7 +748,7 @@ static void BerryPouchSetArrowCursorAt(u8 y, u8 colorIdx) } else { - BerryPouchPrint(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); + BerryPouchPrint(0, 2, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx); } } diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 294b73053..9ef052f32 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -17,12 +17,6 @@ #include "constants/items.h" #include "constants/species.h" -struct DodrioSubstruct_3308 -{ - u8 unk0; - u32 unk4; -}; - struct DodrioStruct { /*0x0000*/ void (*savedCallback)(void); @@ -139,7 +133,6 @@ u8 sub_815327C(u8); void sub_81532B8(void); void sub_815336C(void); u32 sub_8153424(u8 mpId); -u32 sub_81534AC(void); u32 Min(u32 x, u32 y); void Task_ShowDodrioBerryPickingRecords(u8 taskId); void sub_81538D0(u8 windowId); diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index 1589b13b8..aac4b485f 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -1,7 +1,10 @@ #include "global.h" #include "gflib.h" #include "dodrio_berry_picking.h" +#include "dynamic_placeholder_text_util.h" +#include "item.h" #include "link.h" +#include "menu.h" #include "strings.h" #include "task.h" #include "text_window.h" @@ -914,7 +917,7 @@ struct WinCoords u8 top; }; -const u8 sUnknown_8478E38[][3] = +const u8 sTextColorTable[][3] = { { TEXT_COLOR_WHITE, @@ -1036,5 +1039,393 @@ void sub_8154A2C(void) } } -// This is declared inside pokeemerald's sub_80296A8 -const u8 gUnknown_8478F14[5] = {0, 1, 2, 3, 4}; +void sub_8154B34(void) +{ + u8 i, playersCount, id, colorsId, *name; + u32 left; + struct WindowTemplate window; + const struct WinCoords *ptr; + + switch (gUnknown_203F440->state) + { + case 0: + playersCount = sub_81533B4(); + ptr = sUnknown_8478E80[playersCount - 1]; + window.bg = 0; + window.width = 7; + window.height = 2; + window.paletteNum = 0xD; + window.baseBlock = 0x13; + for (i = 0; i < playersCount; ptr++, i++) + { + colorsId = 0; + id = sub_81537AC(i); + left = (56 - GetStringWidth(0, sub_81533C4(id), -1)) / 2u; + window.tilemapLeft = ptr->left; + window.tilemapTop = ptr->top; + gUnknown_203F440->unk3008[i] = AddWindow(&window); + ClearWindowTilemap(gUnknown_203F440->unk3008[i]); + FillWindowPixelBuffer(gUnknown_203F440->unk3008[i], PIXEL_FILL(1)); + if (id == GetMultiplayerId()) + colorsId = 2; + name = sub_81533C4(id); + AddTextPrinterParameterized3(gUnknown_203F440->unk3008[i], 0, left, 1, sTextColorTable[colorsId], -1, name); + CopyWindowToVram(gUnknown_203F440->unk3008[i], 2); + window.baseBlock += 0xE; + sub_8154868(&window); + } + gUnknown_203F440->state++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + playersCount = sub_81533B4(); + for (i = 0; i < playersCount; i++) + PutWindowTilemap(gUnknown_203F440->unk3008[i]); + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->state++; + } + break; + default: + if (++gUnknown_203F440->state > 180) + { + playersCount = sub_81533B4(); + for (i = 0; i < playersCount; i++) + { + ClearWindowTilemap(gUnknown_203F440->unk3008[i]); + RemoveWindow(gUnknown_203F440->unk3008[i]); + } + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->finished = TRUE; + } + break; + } +} + +void sub_8154D9C(u8 playersCount_) +{ + u8 i, r8 = 0, r6 = 0; + u8 playersCount = playersCount_; // Pointless variable, I know, but it's needed to match. + u8 *name; + u32 x, numWidth; + u8 numString[32]; + u8 array[5] = {0, 1, 2, 3, 4}; + struct DodrioSubstruct_3308 temp, structArray[5]; + + for (i = 0; i < playersCount; i++) + { + array[i] = i; + sub_81536A0(&temp, i); + structArray[i] = temp; + } + + if (sub_81534AC() != 0) + { + do + { + for (i = 0; i < playersCount; i++) + { + if (structArray[i].unk0 == r8) + { + array[r6] = i; + r6++; + } + } + r8 = r6; + } while (r6 < playersCount); + } + + for (i = 0; i < playersCount; i++) + { + if (structArray[i].unk4 == 0) + structArray[i].unk0 = playersCount - 1; + } + + x = 216 - GetStringWidth(0, gText_SpacePoints, 0); + for (i = 0; i < playersCount; i++) + { + u8 colorsId = 0; + u8 id = array[i]; + u32 points = structArray[id].unk4; + + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 0, sUnknown_8478E94[structArray[id].unk0], 8, sUnknown_8478EBA[i], -1, NULL); + if (id == GetMultiplayerId()) + colorsId = 2; + name = sub_81533C4(id); + AddTextPrinterParameterized3(gUnknown_203F440->unk3008[1], 0, 28, sUnknown_8478EBA[i], sTextColorTable[colorsId], -1, name); + ConvertIntToDecimalStringN(numString, points, STR_CONV_MODE_RIGHT_ALIGN, 7); + numWidth = GetStringWidth(0, numString, -1); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 0, numString, x - 35, sUnknown_8478EBA[i], -1, NULL); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 0, gText_SpacePoints, x, sUnknown_8478EBA[i], -1, NULL); + } +} + +void sub_8154F80(void) +{ + u8 i, j, itemGiveRet, playersCount = sub_81533B4(); + u8 *name; + u32 strWidth, x; + u8 sp0C[100]; + u8 sp70[20]; + + switch (gUnknown_203F440->state) + { + case 0: + sub_81535B0(); + gUnknown_203F440->unk301C = 0; + gUnknown_203F440->state++; + break; + case 1: + gUnknown_203F440->unk3008[0] = AddWindow(&sUnknown_8475674[0]); + gUnknown_203F440->unk3008[1] = AddWindow(&sUnknown_8475674[1]); + ClearWindowTilemap(gUnknown_203F440->unk3008[0]); + ClearWindowTilemap(gUnknown_203F440->unk3008[1]); + sub_8154868(&sUnknown_8475674[0]); + sub_8154868(&sUnknown_8475674[1]); + gUnknown_203F440->state++; + break; + case 2: + FillWindowPixelBuffer(gUnknown_203F440->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_203F440->unk3008[1], PIXEL_FILL(1)); + strWidth = GetStringWidth(0, gText_BerryPickingResults, -1); + x = (224 - strWidth) / 2; + AddTextPrinterParameterized(gUnknown_203F440->unk3008[0], 0, gText_BerryPickingResults, x, 2, -1, NULL); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 0, gText_10P30P50P50P, 68, 16, -1, NULL); + for (i = 0; i < playersCount; i++) + { + u8 colorsId = 0; + if (i == GetMultiplayerId()) + colorsId = 2; + + name = sub_81533C4(i); + AddTextPrinterParameterized3(gUnknown_203F440->unk3008[1], 0, 2, sUnknown_8478EB0[i], sTextColorTable[colorsId], -1, name); + for (j = 0; j < 4; j++) + { + u32 width; + u16 result1 = Min(sub_8153404(i, j), 9999); + u16 result2 = Min(sub_81534F0(j), 9999); + + ConvertIntToDecimalStringN(sp0C, result1, STR_CONV_MODE_LEFT_ALIGN, 4); + width = GetStringWidth(0, sp0C, -1); + if (result2 == result1 && result2 != 0) + AddTextPrinterParameterized3(gUnknown_203F440->unk3008[1], 0, sUnknown_8478EA8[j] - width, sUnknown_8478EB0[i], sTextColorTable[1], -1, sp0C); + else + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 0, sp0C, sUnknown_8478EA8[j] - width, sUnknown_8478EB0[i], -1, NULL); + } + } + CopyWindowToVram(gUnknown_203F440->unk3008[0], 2); + CopyWindowToVram(gUnknown_203F440->unk3008[1], 2); + gUnknown_203F440->state++; + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_203F440->unk3008[0]); + PutWindowTilemap(gUnknown_203F440->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + sub_8154324(FALSE); + gUnknown_203F440->state++; + break; + case 4: + if (++gUnknown_203F440->unk301C >= 30 && gMain.newKeys & A_BUTTON) + { + gUnknown_203F440->unk301C = 0; + PlaySE(SE_SELECT); + sub_8154324(TRUE); + gUnknown_203F440->state++; + } + break; + case 5: + FillWindowPixelBuffer(gUnknown_203F440->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_203F440->unk3008[1], PIXEL_FILL(1)); + strWidth = GetStringWidth(0, gText_AnnouncingRankings, -1); + x = (224 - strWidth) / 2; + AddTextPrinterParameterized(gUnknown_203F440->unk3008[0], 0, gText_AnnouncingRankings, x, 2, -1, NULL); + gUnknown_203F440->state++; + break; + case 6: + sub_8154D9C(playersCount); + CopyWindowToVram(gUnknown_203F440->unk3008[0], 2); + CopyWindowToVram(gUnknown_203F440->unk3008[1], 2); + gUnknown_203F440->state++; + break; + case 7: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_203F440->unk3008[0]); + PutWindowTilemap(gUnknown_203F440->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->state++; + break; + case 8: + if (++gUnknown_203F440->unk301C >= 30 && gMain.newKeys & A_BUTTON) + { + gUnknown_203F440->unk301C = 0; + PlaySE(SE_SELECT); + if (sub_81534AC() < 3000) + { + gUnknown_203F440->state = 127; + } + else + { + StopMapMusic(); + gUnknown_203F440->state++; + } + + FillBgTilemapBufferRect_Palette0(0, 0, 0, 5, 30, 15); + RemoveWindow(gUnknown_203F440->unk3008[1]); + gUnknown_203F440->unk3008[1] = AddWindow(&sUnknown_8475684); + ClearWindowTilemap(gUnknown_203F440->unk3008[1]); + sub_8154868(&sUnknown_8475684); + } + break; + case 9: + PlayNewMapMusic(MUS_FANFA1); + FillWindowPixelBuffer(gUnknown_203F440->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_203F440->unk3008[1], PIXEL_FILL(1)); + strWidth = GetStringWidth(0, gText_AnnouncingPrizes, -1); + x = (224 - strWidth) / 2; + AddTextPrinterParameterized(gUnknown_203F440->unk3008[0], 0, gText_AnnouncingPrizes, x, 2, -1, NULL); + DynamicPlaceholderTextUtil_Reset(); + CopyItemName(sub_8153390(), sp70); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sp70); + DynamicPlaceholderTextUtil_ExpandPlaceholders(sp0C, gText_FirstPlacePrize); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 0, sp0C, 8, 2, -1, NULL); + itemGiveRet = sub_815372C(); + if (itemGiveRet != 0 && itemGiveRet != 3) + { + DynamicPlaceholderTextUtil_Reset(); + CopyItemName(sub_8153390(), sp70); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sp70); + if (itemGiveRet == 2) + DynamicPlaceholderTextUtil_ExpandPlaceholders(sp0C, gText_CantHoldAnyMore); + else if (itemGiveRet == 1) + DynamicPlaceholderTextUtil_ExpandPlaceholders(sp0C, gText_FilledStorageSpace); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 0, sp0C, 8, 40, -1, NULL); + } + CopyWindowToVram(gUnknown_203F440->unk3008[0], 2); + CopyWindowToVram(gUnknown_203F440->unk3008[1], 2); + gUnknown_203F440->state++; + break; + case 10: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_203F440->unk3008[0]); + PutWindowTilemap(gUnknown_203F440->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + FadeOutAndFadeInNewMapMusic(MUS_WIN_YASEI, 20, 10); + gUnknown_203F440->state++; + break; + case 11: + if (++gUnknown_203F440->unk301C >= 30 && gMain.newKeys & A_BUTTON) + { + gUnknown_203F440->unk301C = 0; + PlaySE(SE_SELECT); + gUnknown_203F440->state++; + } + break; + default: + ClearWindowTilemap(gUnknown_203F440->unk3008[0]); + ClearWindowTilemap(gUnknown_203F440->unk3008[1]); + RemoveWindow(gUnknown_203F440->unk3008[0]); + RemoveWindow(gUnknown_203F440->unk3008[1]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->finished = TRUE; + break; + } +} + +void sub_81556E0(void) +{ + u8 y; + + switch (gUnknown_203F440->state) + { + case 0: + gUnknown_203F440->unk3008[0] = AddWindow(&sUnknown_847568C[0]); + gUnknown_203F440->unk3008[1] = AddWindow(&sUnknown_847568C[1]); + ClearWindowTilemap(gUnknown_203F440->unk3008[0]); + ClearWindowTilemap(gUnknown_203F440->unk3008[1]); + sub_8154868(&sUnknown_847568C[0]); + sub_8154768(&sUnknown_847568C[1]); + gUnknown_203F440->state++; + gUnknown_203F440->unk3020 = 0; + gUnknown_203F440->unk3024 = 0; + break; + case 1: + FillWindowPixelBuffer(gUnknown_203F440->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_203F440->unk3008[1], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[0], 2, gText_WantToPlayAgain, 0, 6, -1, NULL); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 2, gText_Yes, 8, 2, -1, NULL); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 2, gText_No, 8, 16, -1, NULL); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 2, gText_SelectorArrow2, 0, 2, -1, NULL); + CopyWindowToVram(gUnknown_203F440->unk3008[0], 2); + CopyWindowToVram(gUnknown_203F440->unk3008[1], 2); + gUnknown_203F440->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_203F440->unk3008[0]); + PutWindowTilemap(gUnknown_203F440->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->state++; + break; + case 3: + y = gUnknown_203F440->unk3020; + if (y == 0) + y = 1; + FillWindowPixelBuffer(gUnknown_203F440->unk3008[1], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 2, gText_Yes, 8, 2, -1, NULL); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 2, gText_No, 8, 16, -1, NULL); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 2, gText_SelectorArrow2, 0, y == 1 ? 2 : 16, -1, NULL); + CopyWindowToVram(gUnknown_203F440->unk3008[1], 3); + // Increment state only if A or B button have been pressed. + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_203F440->unk3020 == 0) + gUnknown_203F440->unk3020 = 1; + gUnknown_203F440->state++; + } + else if (gMain.newKeys & (DPAD_UP | DPAD_DOWN)) + { + PlaySE(SE_SELECT); + switch (gUnknown_203F440->unk3020) + { + case 0: + gUnknown_203F440->unk3020 = 2; + break; + case 1: + gUnknown_203F440->unk3020 = 2; + break; + case 2: + gUnknown_203F440->unk3020 = 1; + break; + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_203F440->unk3020 = 2; + gUnknown_203F440->state++; + } + break; + default: + gUnknown_203F440->unk3024 = gUnknown_203F440->unk3020; + ClearWindowTilemap(gUnknown_203F440->unk3008[0]); + ClearWindowTilemap(gUnknown_203F440->unk3008[1]); + RemoveWindow(gUnknown_203F440->unk3008[0]); + RemoveWindow(gUnknown_203F440->unk3008[1]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->finished = TRUE; + break; + } +} diff --git a/src/fame_checker.c b/src/fame_checker.c index 6f60b4a44..a77c89c0d 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1536,7 +1536,7 @@ static void PlaceListMenuCursor(bool8 isActive) { u16 cursorY = ListMenuGetYCoordForPrintingArrowCursor(sFameCheckerData->listMenuTaskId); if (isActive == TRUE) - AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 0, cursorY, 0, 0, sTextColor_DkGrey, 0, gFameCheckerText_ListMenuCursor); + AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 0, cursorY, 0, 0, sTextColor_DkGrey, 0, gText_SelectorArrow2); else - AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 0, cursorY, 0, 0, sTextColor_White, 0, gFameCheckerText_ListMenuCursor); + AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 0, cursorY, 0, 0, sTextColor_White, 0, gText_SelectorArrow2); } diff --git a/src/help_system.c b/src/help_system.c index d68acbaa1..4d037de5d 100644 --- a/src/help_system.c +++ b/src/help_system.c @@ -1085,7 +1085,7 @@ void PlaceListMenuCursor(void) u8 glyphHeight = GetFontAttribute(2, 1) + 1; u8 x = gHelpSystemListMenu.sub.left; u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos; - HelpSystem_PrintTextAt(gFameCheckerText_ListMenuCursor, x, y); + HelpSystem_PrintTextAt(gText_SelectorArrow2, x, y); } void sub_813C860(u8 i) diff --git a/src/item_menu.c b/src/item_menu.c index a407c582f..2253c287e 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -740,7 +740,7 @@ static void bag_menu_print_cursor(u8 y, u8 colorIdx) } else { - BagPrintTextOnWindow(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); + BagPrintTextOnWindow(0, 2, gText_SelectorArrow2, 1, y, 0, 0, 0, colorIdx); } } diff --git a/src/item_pc.c b/src/item_pc.c index 7c7abdce3..f5bc6659b 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -577,7 +577,7 @@ static void ItemPc_PrintOrRemoveCursorAt(u8 y, u8 colorIdx) } else { - ItemPc_AddTextPrinterParameterized(0, 2, gFameCheckerText_ListMenuCursor, 0, y, 0, 0, 0, colorIdx); + ItemPc_AddTextPrinterParameterized(0, 2, gText_SelectorArrow2, 0, y, 0, 0, 0, colorIdx); } } diff --git a/src/list_menu.c b/src/list_menu.c index 21ef40fbe..9439d712c 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -413,7 +413,7 @@ static void ListMenuDrawCursor(struct ListMenu *list) switch (list->template.cursorKind) { case 0: - ListMenuPrint(list, gFameCheckerText_ListMenuCursor, x, y); + ListMenuPrint(list, gText_SelectorArrow2, x, y); break; case 1: break; diff --git a/src/menu.c b/src/menu.c index 2f5b1a5db..b7c3f54eb 100644 --- a/src/menu.c +++ b/src/menu.c @@ -303,7 +303,7 @@ static void Menu_RedrawCursor(u8 oldPos, u8 newPos) width = GetMenuCursorDimensionByFont(sMenu.fontId, 0); height = GetMenuCursorDimensionByFont(sMenu.fontId, 1); FillWindowPixelRect(sMenu.windowId, 1, sMenu.left, sMenu.optionHeight * oldPos + sMenu.top, width, height); - AddTextPrinterParameterized(sMenu.windowId, sMenu.fontId, gFameCheckerText_ListMenuCursor, sMenu.left, sMenu.optionHeight * newPos + sMenu.top, 0, 0); + AddTextPrinterParameterized(sMenu.windowId, sMenu.fontId, gText_SelectorArrow2, sMenu.left, sMenu.optionHeight * newPos + sMenu.top, 0, 0); } u8 Menu_MoveCursor(s8 cursorDelta) @@ -645,7 +645,7 @@ static void MultichoiceGrid_RedrawCursor(u8 oldCursorPos, u8 newCursorPos) FillWindowPixelRect(sMenu.windowId, PIXEL_FILL(1), xPos, yPos, cursorWidth, cursorHeight); xPos = (newCursorPos % sMenu.columns) * sMenu.optionWidth + sMenu.left; yPos = (newCursorPos / sMenu.columns) * sMenu.optionHeight + sMenu.top; - AddTextPrinterParameterized(sMenu.windowId, sMenu.fontId, gFameCheckerText_ListMenuCursor, xPos, yPos, 0, 0); + AddTextPrinterParameterized(sMenu.windowId, sMenu.fontId, gText_SelectorArrow2, xPos, yPos, 0, 0); } static u8 MultichoiceGrid_MoveCursor(s8 deltaX, s8 deltaY) diff --git a/src/shop.c b/src/shop.c index 5a9ee6b95..5cc9ab3f0 100644 --- a/src/shop.c +++ b/src/shop.c @@ -668,7 +668,7 @@ static void BuyMenuPrintCursorAtYPosition(u8 y, u8 a1) } else { - BuyMenuPrint(4, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, a1); + BuyMenuPrint(4, 2, gText_SelectorArrow2, 1, y, 0, 0, 0, a1); } } diff --git a/src/tm_case.c b/src/tm_case.c index f631e1604..04729345f 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -612,7 +612,7 @@ static void PrintListMenuCursorAt_WithColorIdx(u8 a0, u8 a1) } else { - AddTextPrinterParameterized_ColorByIndex(0, 2, gFameCheckerText_ListMenuCursor, 0, a0, 0, 0, 0, a1); + AddTextPrinterParameterized_ColorByIndex(0, 2, gText_SelectorArrow2, 0, a0, 0, 0, 0, a1); } } -- cgit v1.2.3 From b56c2b75b4be20c37e0863a10a3e21c58976f8e2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 5 Mar 2020 13:58:14 -0500 Subject: Finish dodrio_berry_picking_2.c --- src/dodrio_berry_picking_2.c | 221 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 203 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index aac4b485f..15a99fd66 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -5,30 +5,14 @@ #include "item.h" #include "link.h" #include "menu.h" +#include "new_menu_helpers.h" +#include "save.h" #include "strings.h" #include "task.h" #include "text_window.h" #include "text_window_graphics.h" #include "constants/songs.h" -// Temporary stopgap to export duplicate data -// included from data/dodrio_berry_picking.h -asm(".global sDodrioBerryStatusGfx\n" - "\t.global sDodrioBerrySpritesGfx\n" - "\t.global sDodrioBerryPlatformGfx\n" - "\t.global sDodrioBerryBgTilemap1\n" - "\t.global sDodrioBerryBgTilemap2Left\n" - "\t.global sDodrioBerryBgTilemap2Right\n" - "\t.global sUnknown_8475674\n" - "\t.global sUnknown_8475684\n" - "\t.global sUnknown_847568C\n" - "\t.global sUnknown_84756A4\n" - "\t.global sUnknown_847569C\n" - "\t.global sUnknown_847565C\n" - "\t.global sDodrioBerryBgPal1\n" - "\t.global sDodrioBerryBgGfx1\n" - "\t.global sDodrioBerryBgGfx2"); - struct DodrioStruct_2022CF4 { u8 filler_00[0xc]; @@ -1429,3 +1413,204 @@ void sub_81556E0(void) break; } } + +void sub_8155A78(void) +{ + switch (gUnknown_203F440->state) + { + case 0: + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized2(0, 2, gText_SavingDontTurnOffThePower2, 0, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY); + gUnknown_203F440->state++; + break; + case 1: + CopyWindowToVram(0, 3); + gUnknown_203F440->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + CreateTask(sub_80DA634, 0); + gUnknown_203F440->state++; + } + break; + case 3: + if (!FuncIsActiveTask(sub_80DA634)) + gUnknown_203F440->state++; + break; + default: + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->finished = TRUE; + break; + } +} + +void sub_8155B4C(void) +{ + switch (gUnknown_203F440->state) + { + case 0: + gUnknown_203F440->unk3008[0] = AddWindow(&sUnknown_84756A4); + ClearWindowTilemap(gUnknown_203F440->unk3008[0]); + sub_8154868(&sUnknown_84756A4); + gUnknown_203F440->state++; + break; + case 1: + FillWindowPixelBuffer(gUnknown_203F440->unk3008[0], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[0], 2, gText_CommunicationStandby3, 0, 6, -1, NULL); + CopyWindowToVram(gUnknown_203F440->unk3008[0], 2); + gUnknown_203F440->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + PutWindowTilemap(gUnknown_203F440->unk3008[0]); + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->state++; + break; + default: + gUnknown_203F440->finished = TRUE; + break; + } +} + +void sub_8155C2C(void) +{ + ClearWindowTilemap(gUnknown_203F440->unk3008[0]); + RemoveWindow(gUnknown_203F440->unk3008[0]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->finished = TRUE; +} + +void sub_8155C80(void) +{ + switch (gUnknown_203F440->state) + { + case 0: + gUnknown_203F440->unk3008[0] = AddWindow(&sUnknown_847569C); + ClearWindowTilemap(gUnknown_203F440->unk3008[0]); + sub_8154868(&sUnknown_847569C); + gUnknown_203F440->state++; + gUnknown_203F440->unk301C = 0; + gUnknown_203F440->unk3020 = 0; + gUnknown_203F440->unk3024 = 0; + break; + case 1: + FillWindowPixelBuffer(gUnknown_203F440->unk3008[0], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_203F440->unk3008[0], 2, gText_SomeoneDroppedOut, 0, 6, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_203F440->unk3008[0], 2); + gUnknown_203F440->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + PutWindowTilemap(gUnknown_203F440->unk3008[0]); + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->state++; + break; + case 3: + if (++gUnknown_203F440->unk301C >= 120) + gUnknown_203F440->state++; + break; + default: + gUnknown_203F440->unk3024 = 5; + ClearWindowTilemap(gUnknown_203F440->unk3008[0]); + RemoveWindow(gUnknown_203F440->unk3008[0]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_203F440->finished = TRUE; + break; + } +} + +void unused_0(void) +{ + DestroyTask(gUnknown_203F440->unk3004); + gUnknown_203F440->finished = TRUE; +} + +void nullsub_98(void) +{ + +} + +void sub_8155E24(void (*func)(void)) +{ + gUnknown_203F440->state = 0; + gUnknown_203F440->finished = FALSE; + gUnknown_203F440->unk3028 = func; +} + +void (*sub_8155E54(void))(void) +{ + return gUnknown_203F440->unk3028; +} + +bool32 sub_8155E68(void) +{ + if (gUnknown_203F440->finished == TRUE) + return FALSE; + else + return TRUE; +} + +u8 sub_8155E8C(void) +{ + return gUnknown_203F440->unk3024; +} + +void sub_8155EA0(void) +{ + DmaClearLarge16(3, (void *)VRAM, VRAM_SIZE, 0x1000); + DmaClear32(3,(void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, sUnknown_847565C, ARRAY_COUNT(sUnknown_847565C)); + 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); + InitStandardTextBoxWindows(); + ResetBg0(); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + SetBgTilemapBuffer(3, gUnknown_203F440->tilemapBuffers[0]); + SetBgTilemapBuffer(1, gUnknown_203F440->tilemapBuffers[1]); + SetBgTilemapBuffer(2, gUnknown_203F440->tilemapBuffers[2]); +} + +bool32 sub_8155FE0(void) +{ + switch (gUnknown_203F440->unk3018) + { + case 0: + LoadPalette(sDodrioBerryBgPal1, 0, sizeof(sDodrioBerryBgPal1)); + break; + case 1: + ResetTempTileDataBuffers(); + break; + case 2: + DecompressAndCopyTileDataToVram(3, sDodrioBerryBgGfx1, 0, 0, 0); + break; + case 3: + DecompressAndCopyTileDataToVram(1, sDodrioBerryBgGfx2, 0, 0, 0); + break; + case 4: + if (FreeTempTileDataBuffersIfPossible() == TRUE) + return FALSE; + break; + case 5: + LoadPalette(stdpal_get(3), 0xD0, 0x20); + break; + default: + gUnknown_203F440->unk3018 = 0; + return TRUE; + } + + gUnknown_203F440->unk3018++; + return FALSE; +} -- cgit v1.2.3 From 7f81fdc8df5247c926228b784f6878dc3edac051 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 5 Mar 2020 14:03:23 -0500 Subject: Port dodrio_berry_picking_3 from emerald --- src/dodrio_berry_picking_3.c | 636 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 636 insertions(+) (limited to 'src') diff --git a/src/dodrio_berry_picking_3.c b/src/dodrio_berry_picking_3.c index 4260c6f2f..5f5bfaff9 100644 --- a/src/dodrio_berry_picking_3.c +++ b/src/dodrio_berry_picking_3.c @@ -1,4 +1,5 @@ #include "global.h" +#include "dodrio_berry_picking.h" #include "link.h" #include "link_rfu.h" @@ -21,3 +22,638 @@ u8 sub_815A5E8(s32 a0) return 0; } + +struct UnkPacket2 +{ + u8 id; + u8 unk1_0:4; + u8 unk1_1:4; + u8 unk2_0:4; + u8 unk2_1:4; + u8 unk3_0:4; + u8 unk3_1:4; + u8 unk4_0:4; + u8 unk4_1:4; + u8 unk5_0:4; + u8 unk5_1:4; + u8 unk6_0:2; + u8 unk6_1:2; + u8 unk6_2:2; + u8 unk6_3:2; + u8 unk7_0:2; + u8 unk7_1:2; + u8 unk7_2:2; + u8 unk7_3:2; + u8 unk8_0:2; + u8 unk8_1:2; + u8 unk8_2:2; + u8 unk8_3:2; + u8 unk9_0:2; + u8 unk9_1:2; + u8 unk9_2:2; + u8 unk9_3:1; + u8 unk9_4:1; + u8 unkA_0:1; + u8 unkA_1:1; + u8 unkA_2:1; + u8 unkA_3:5; + u8 unkB_0:1; + u8 unkB_1:1; + u8 unkB_2:1; + u8 unkB_3:1; + u8 unkB_4:1; + u8 unkB_5:1; + u8 unkB_6:1; +}; + +#ifdef NONMATCHING +static void sub_815A61C(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8) +{ + struct UnkPacket2 packet; + struct DodrioSubstruct_31A0_14 *ptr = &arg0->unk14; + + packet.id = 2; + packet.unk1_0 = ptr->unkB[0]; + packet.unk1_1 = ptr->unkB[1]; + packet.unk2_0 = ptr->unkB[2]; + packet.unk2_1 = ptr->unkB[3]; + packet.unk3_0 = ptr->unkB[4]; + packet.unk3_1 = ptr->unkB[5]; + packet.unk4_0 = ptr->unkB[6]; + packet.unk4_1 = ptr->unkB[7]; + packet.unk5_0 = ptr->unkB[8]; + packet.unk5_1 = ptr->unkB[9]; + + packet.unk6_0 = ptr->unk0[0]; + packet.unk6_1 = ptr->unk0[1]; + packet.unk6_2 = ptr->unk0[2]; + packet.unk6_3 = ptr->unk0[3]; + packet.unk7_0 = ptr->unk0[4]; + packet.unk7_1 = ptr->unk0[5]; + packet.unk7_2 = ptr->unk0[6]; + packet.unk7_3 = ptr->unk0[7]; + packet.unk8_0 = ptr->unk0[8]; + packet.unk8_1 = ptr->unk0[9]; + + packet.unk8_2 = arg1->unk0; + packet.unk8_3 = arg2->unk0; + packet.unk9_0 = arg3->unk0; + packet.unk9_1 = arg4->unk0; + packet.unk9_2 = arg5->unk0; + + packet.unk9_3 = arg1->unk4; + packet.unk9_4 = arg2->unk4; + packet.unkA_0 = arg3->unk4; + packet.unkA_1 = arg4->unk4; + packet.unkA_2 = arg5->unk4; + + packet.unkB_2 = arg1->unk8; + packet.unkB_3 = arg2->unk8; + packet.unkB_4 = arg3->unk8; + packet.unkB_5 = arg4->unk8; + packet.unkB_6 = arg5->unk8; + + packet.unkA_3 = arg6; + packet.unkB_1 = arg7; + packet.unkB_0 = arg8; + RfuPrepareSend0x2f00(&packet); +} +#else +NAKED +void sub_815A61C(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8) +{ + asm_unified(" push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + ldr r4, [sp, 0x48]\n\ + lsls r4, 24\n\ + str r4, [sp, 0x1C]\n\ + movs r4, 0x14\n\ + adds r4, r0\n\ + mov r9, r4\n\ + mov r5, sp\n\ + movs r4, 0x2\n\ + strb r4, [r5]\n\ + mov r10, sp\n\ + mov r5, r9\n\ + ldrb r4, [r5, 0xB]\n\ + movs r7, 0xF\n\ + adds r5, r7, 0\n\ + ands r5, r4\n\ + mov r6, r10\n\ + ldrb r6, [r6, 0x1]\n\ + mov r8, r6\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x1]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0xC]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x1]\n\ + ldrb r5, [r6, 0xD]\n\ + movs r6, 0xF\n\ + ands r5, r6\n\ + mov r4, r10\n\ + ldrb r4, [r4, 0x2]\n\ + mov r8, r4\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x2]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0xE]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x2]\n\ + ldrb r5, [r6, 0xF]\n\ + movs r6, 0xF\n\ + ands r5, r6\n\ + mov r4, r10\n\ + ldrb r4, [r4, 0x3]\n\ + mov r8, r4\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x3]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0x10]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x3]\n\ + ldrb r5, [r6, 0x11]\n\ + movs r6, 0xF\n\ + ands r5, r6\n\ + mov r4, r10\n\ + ldrb r4, [r4, 0x4]\n\ + mov r8, r4\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x4]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0x12]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x4]\n\ + ldrb r4, [r6, 0x13]\n\ + movs r6, 0xF\n\ + ands r4, r6\n\ + mov r6, r8\n\ + ldrb r5, [r6, 0x5]\n\ + movs r6, 0x10\n\ + negs r6, r6\n\ + ands r6, r5\n\ + orrs r6, r4\n\ + str r6, [sp, 0xC]\n\ + mov r4, r8\n\ + strb r6, [r4, 0x5]\n\ + mov r5, sp\n\ + mov r6, r9\n\ + ldrb r4, [r6, 0x14]\n\ + lsls r4, 4\n\ + ldr r6, [sp, 0xC]\n\ + ands r6, r7\n\ + orrs r6, r4\n\ + strb r6, [r5, 0x5]\n\ + mov r7, sp\n\ + movs r4, 0x3\n\ + mov r8, r4\n\ + ldrb r0, [r0, 0x14]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + ldrb r5, [r7, 0x6]\n\ + movs r6, 0x4\n\ + negs r6, r6\n\ + mov r10, r6\n\ + mov r4, r10\n\ + ands r4, r5\n\ + orrs r4, r0\n\ + strb r4, [r7, 0x6]\n\ + mov r5, r9\n\ + ldrb r0, [r5, 0x1]\n\ + mov r6, r8\n\ + ands r0, r6\n\ + lsls r0, 2\n\ + movs r5, 0xD\n\ + negs r5, r5\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + strb r5, [r7, 0x6]\n\ + mov r0, r9\n\ + ldrb r4, [r0, 0x2]\n\ + ands r4, r6\n\ + lsls r4, 4\n\ + movs r0, 0x31\n\ + negs r0, r0\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + strb r0, [r7, 0x6]\n\ + mov r5, sp\n\ + mov r6, r9\n\ + ldrb r4, [r6, 0x3]\n\ + lsls r4, 6\n\ + movs r6, 0x3F\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x6]\n\ + mov r4, r9\n\ + ldrb r0, [r4, 0x4]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + ldrb r5, [r7, 0x7]\n\ + mov r4, r10\n\ + ands r4, r5\n\ + orrs r4, r0\n\ + strb r4, [r7, 0x7]\n\ + mov r6, r9\n\ + ldrb r0, [r6, 0x5]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + lsls r0, 2\n\ + movs r5, 0xD\n\ + negs r5, r5\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + strb r5, [r7, 0x7]\n\ + ldrb r4, [r6, 0x6]\n\ + mov r6, r8\n\ + ands r4, r6\n\ + lsls r4, 4\n\ + movs r0, 0x31\n\ + negs r0, r0\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + strb r0, [r7, 0x7]\n\ + mov r5, sp\n\ + mov r6, r9\n\ + ldrb r4, [r6, 0x7]\n\ + lsls r4, 6\n\ + movs r6, 0x3F\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x7]\n\ + mov r8, sp\n\ + mov r0, r9\n\ + ldrb r4, [r0, 0x8]\n\ + movs r7, 0x3\n\ + adds r0, r7, 0\n\ + ands r0, r4\n\ + mov r4, r8\n\ + ldrb r5, [r4, 0x8]\n\ + mov r4, r10\n\ + ands r4, r5\n\ + orrs r4, r0\n\ + mov r5, r8\n\ + strb r4, [r5, 0x8]\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0x9]\n\ + adds r0, r7, 0\n\ + ands r0, r5\n\ + lsls r0, 2\n\ + movs r5, 0xD\n\ + negs r5, r5\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + mov r0, r8\n\ + strb r5, [r0, 0x8]\n\ + ldrb r0, [r1]\n\ + adds r4, r7, 0\n\ + ands r4, r0\n\ + lsls r4, 4\n\ + movs r0, 0x31\n\ + negs r0, r0\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r8\n\ + strb r0, [r4, 0x8]\n\ + mov r5, sp\n\ + ldrb r4, [r2]\n\ + lsls r4, 6\n\ + movs r6, 0x3F\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x8]\n\ + ldrb r4, [r3]\n\ + adds r0, r7, 0\n\ + ands r0, r4\n\ + ldrb r4, [r5, 0x9]\n\ + mov r6, r10\n\ + ands r6, r4\n\ + orrs r6, r0\n\ + mov r10, r6\n\ + strb r6, [r5, 0x9]\n\ + ldr r0, [sp, 0x40]\n\ + ldrb r4, [r0]\n\ + adds r0, r7, 0\n\ + ands r0, r4\n\ + lsls r0, 2\n\ + movs r4, 0xD\n\ + negs r4, r4\n\ + ands r6, r4\n\ + orrs r6, r0\n\ + str r6, [sp, 0x10]\n\ + strb r6, [r5, 0x9]\n\ + mov r4, sp\n\ + ldr r5, [sp, 0x44]\n\ + ldrb r0, [r5]\n\ + adds r6, r7, 0\n\ + ands r6, r0\n\ + lsls r0, r6, 4\n\ + subs r7, 0x34\n\ + ldr r5, [sp, 0x10]\n\ + ands r7, r5\n\ + orrs r7, r0\n\ + strb r7, [r4, 0x9]\n\ + mov r5, sp\n\ + ldrb r0, [r1, 0x4]\n\ + movs r6, 0x1\n\ + mov r12, r6\n\ + mov r4, r12\n\ + ands r4, r0\n\ + lsls r4, 6\n\ + movs r0, 0x41\n\ + negs r0, r0\n\ + mov r10, r0\n\ + ands r0, r7\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x9]\n\ + ldrb r4, [r2, 0x4]\n\ + lsls r4, 7\n\ + movs r5, 0x7F\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r8\n\ + strb r0, [r4, 0x9]\n\ + ldrb r4, [r3, 0x4]\n\ + mov r0, r12\n\ + ands r0, r4\n\ + mov r5, r8\n\ + ldrb r4, [r5, 0xA]\n\ + movs r7, 0x2\n\ + negs r7, r7\n\ + adds r5, r7, 0\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + mov r6, r8\n\ + strb r5, [r6, 0xA]\n\ + mov r9, sp\n\ + ldr r4, [sp, 0x40]\n\ + ldrb r0, [r4, 0x4]\n\ + mov r4, r12\n\ + ands r4, r0\n\ + lsls r4, 1\n\ + movs r6, 0x3\n\ + negs r6, r6\n\ + mov r8, r6\n\ + mov r0, r8\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r9\n\ + strb r0, [r4, 0xA]\n\ + ldr r6, [sp, 0x44]\n\ + ldrb r5, [r6, 0x4]\n\ + mov r4, r12\n\ + ands r4, r5\n\ + lsls r4, 2\n\ + movs r5, 0x5\n\ + negs r5, r5\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r9\n\ + strb r0, [r4, 0xA]\n\ + mov r4, sp\n\ + ldrb r1, [r1, 0x8]\n\ + mov r0, r12\n\ + ands r0, r1\n\ + lsls r0, 2\n\ + ldrb r1, [r4, 0xB]\n\ + ands r5, r1\n\ + orrs r5, r0\n\ + strb r5, [r4, 0xB]\n\ + ldrb r1, [r2, 0x8]\n\ + mov r0, r12\n\ + ands r0, r1\n\ + lsls r0, 3\n\ + movs r1, 0x9\n\ + negs r1, r1\n\ + ands r1, r5\n\ + orrs r1, r0\n\ + strb r1, [r4, 0xB]\n\ + ldrb r2, [r3, 0x8]\n\ + mov r0, r12\n\ + ands r0, r2\n\ + lsls r0, 4\n\ + movs r2, 0x11\n\ + negs r2, r2\n\ + ands r2, r1\n\ + orrs r2, r0\n\ + strb r2, [r4, 0xB]\n\ + mov r3, sp\n\ + ldr r5, [sp, 0x40]\n\ + ldrb r0, [r5, 0x8]\n\ + mov r1, r12\n\ + ands r1, r0\n\ + lsls r1, 5\n\ + movs r0, 0x21\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3, 0xB]\n\ + mov r2, sp\n\ + ldrb r1, [r6, 0x8]\n\ + mov r6, r12\n\ + ands r6, r1\n\ + lsls r1, r6, 6\n\ + mov r3, r10\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strb r0, [r2, 0xB]\n\ + ldr r4, [sp, 0x1C]\n\ + lsrs r3, r4, 21\n\ + ldrb r1, [r2, 0xA]\n\ + movs r0, 0x7\n\ + ands r0, r1\n\ + orrs r0, r3\n\ + strb r0, [r2, 0xA]\n\ + mov r1, sp\n\ + ldr r5, [sp, 0x4C]\n\ + movs r6, 0x1\n\ + ands r5, r6\n\ + lsls r2, r5, 1\n\ + ldrb r0, [r1, 0xB]\n\ + mov r3, r8\n\ + ands r3, r0\n\ + orrs r3, r2\n\ + mov r8, r3\n\ + strb r3, [r1, 0xB]\n\ + mov r0, sp\n\ + ldr r4, [sp, 0x50]\n\ + ands r4, r6\n\ + mov r5, r8\n\ + ands r5, r7\n\ + orrs r5, r4\n\ + strb r5, [r0, 0xB]\n\ + bl RfuPrepareSend0x2f00\n\ + add sp, 0x20\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ +"); +} +#endif + +u32 sub_815A950(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8) +{ + struct UnkPacket2 *packet; + struct DodrioSubstruct_31A0_14 *ptr = &arg0->unk14; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[0][1]; + if (packet->id == 2) + { + ptr->unkB[0] = packet->unk1_0; + ptr->unkB[1] = packet->unk1_1; + ptr->unkB[2] = packet->unk2_0; + ptr->unkB[3] = packet->unk2_1; + ptr->unkB[4] = packet->unk3_0; + ptr->unkB[5] = packet->unk3_1; + ptr->unkB[6] = packet->unk4_0; + ptr->unkB[7] = packet->unk4_1; + ptr->unkB[8] = packet->unk5_0; + ptr->unkB[9] = packet->unk5_1; + ptr->unkB[10] = packet->unk1_0; + + ptr->unk0[0] = packet->unk6_0; + ptr->unk0[1] = packet->unk6_1; + ptr->unk0[2] = packet->unk6_2; + ptr->unk0[3] = packet->unk6_3; + ptr->unk0[4] = packet->unk7_0; + ptr->unk0[5] = packet->unk7_1; + ptr->unk0[6] = packet->unk7_2; + ptr->unk0[7] = packet->unk7_3; + ptr->unk0[8] = packet->unk8_0; + ptr->unk0[9] = packet->unk8_1; + ptr->unk0[10] = packet->unk6_0; + + arg1->unk0 = packet->unk8_2; + arg1->unk4 = packet->unk9_3; + arg1->unk8 = packet->unkB_2; + + arg2->unk0 = packet->unk8_3; + arg2->unk4 = packet->unk9_4; + arg2->unk8 = packet->unkB_3; + + arg3->unk0 = packet->unk9_0; + arg3->unk4 = packet->unkA_0; + arg3->unk8 = packet->unkB_4; + + arg4->unk0 = packet->unk9_1; + arg4->unk4 = packet->unkA_1; + arg4->unk8 = packet->unkB_5; + + arg5->unk0 = packet->unk9_2; + arg5->unk4 = packet->unkA_2; + arg5->unk8 = packet->unkB_6; + + *arg6 = packet->unkA_3; + *arg7 = packet->unkB_1; + *arg8 = packet->unkB_0; + return 1; + } + + return 0; +} + +struct UnkPacket3 +{ + u8 id; + u8 ALIGNED(4) unk4; +}; + +void sub_815AAD8(u8 arg0) +{ + struct UnkPacket3 packet; + packet.id = 3; + packet.unk4 = arg0; + RfuPrepareSend0x2f00(&packet); +} + +u32 sub_815AB04(u32 arg0, u8 *arg1) +{ + struct UnkPacket3 *packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[arg0][1]; + if (packet->id == 3) + { + *arg1 = packet->unk4; + return 1; + } + + return 0; +} + +struct UnkPacket4 +{ + u8 id; + u32 unk4; +}; + +void sub_815AB3C(u32 arg0) +{ + struct UnkPacket4 packet; + packet.id = 4; + packet.unk4 = arg0; + RfuPrepareSend0x2f00(&packet); +} + +u32 sub_815AB60(u32 arg0) +{ + struct UnkPacket4 *packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[arg0][1]; + if (packet->id == 4) + return packet->unk4; + + return 0; +} -- cgit v1.2.3 From 3a894f7b089b5bfeb0dbb7fe6bb2dfb8a986d8fc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 5 Mar 2020 14:50:53 -0500 Subject: Static symbols in dbp --- src/dodrio_berry_picking.c | 306 +++++++++++++++++++++---------------------- src/dodrio_berry_picking_2.c | 196 +++++++++++++-------------- 2 files changed, 250 insertions(+), 252 deletions(-) (limited to 'src') diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index ca35532e4..415bcd428 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -71,77 +71,75 @@ struct DodrioStruct /*0x3308*/ struct DodrioSubstruct_3308 unk3308[5]; }; // size = 0x3330 -EWRAM_DATA struct DodrioStruct * gUnknown_203F3E0 = NULL; - -IWRAM_DATA bool32 gUnknown_3002044; - -bool32 sub_8155E68(void); -void sub_81508D8(void); -void sub_81508EC(struct DodrioStruct * dodrio); -void sub_8150A84(u8 taskId); -void sub_8150C78(void); -void sub_8150CBC(void); -void sub_8150CF4(void); -void sub_8150D7C(void); -void sub_8150DA4(void); -void sub_8150E68(void); -void sub_8150F40(void); -void sub_8150FC4(void); -void sub_8150FDC(void); -void sub_815109C(void); -void sub_8151198(void); -void sub_81512B4(void); -void sub_8151488(void); -void sub_81514F0(void); -void sub_815159C(void); -void sub_81516DC(u8 taskId); -void sub_8151750(u8 taskId); -void sub_8151B54(void); -void sub_8151BA0(void); -void sub_8151C5C(void); -void sub_8151D28(void); -void sub_8151D98(void); -void sub_8151E94(void); -void sub_815201C(void); -void sub_8152034(void); -void sub_8152048(struct DodrioSubstruct_318C * dodrioMon, struct Pokemon * partyMon); -void sub_815205C(TaskFunc func, u8 priority); -void sub_815206C(TaskFunc func); -void sub_8152090(u8 a0); -bool32 sub_81520B4(void); -void sub_8152110(void); -bool32 sub_8152484(u8 a0, u8 a1, u8 a2); -void sub_815256C(void); -void sub_815293C(void); -void sub_8152970(void); -bool32 sub_8152A00(void); -void sub_8152A70(void); -void sub_81529A4(u8 a0, u8 *a1, u8 *a2); -bool32 sub_8152A98(void); -bool32 sub_8152AD8(void); -void sub_8152B64(u8 a0); -u8 sub_8152BD4(u8 a0); -u8 sub_8152BF8(u8 a0, u8 a1); -u8 sub_8152CB8(u8 arg0, u8 arg1); -void sub_8152D34(u8 a0, u8 a1, u8 a2); -void sub_8152F94(bool32 a0); -void sub_8153004(void); -void sub_8153048(void); -void sub_8153150(void); -void sub_81531FC(void); -u8 sub_815327C(u8); -void sub_81532B8(void); -void sub_815336C(void); -u32 sub_8153424(u8 mpId); -u32 Min(u32 x, u32 y); -void Task_ShowDodrioBerryPickingRecords(u8 taskId); -void sub_81538D0(u8 windowId); +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 #include "data/dodrio_berry_picking.h" -const u8 sUnknown_847553C[][3] = +static const u8 sUnknown_847553C[][3] = { {40, 24, 13}, {32, 19, 10}, @@ -149,20 +147,20 @@ const u8 sUnknown_847553C[][3] = }; ALIGNED(4) -const u8 sUnknown_8475548[] = {8, 5, 8, 11, 15}; +static const u8 sUnknown_8475548[] = {8, 5, 8, 11, 15}; ALIGNED(4) -const u8 sUnknown_8475550[] = {5, 10, 20, 30, 50, 70, 100}; +static const u8 sUnknown_8475550[] = {5, 10, 20, 30, 50, 70, 100}; ALIGNED(4) -const u8 sUnknown_8475558[][10] = +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}, }; -void (*const sUnknown_8475578[])(void) = +static void (*const sUnknown_8475578[])(void) = { sub_8150C78, sub_8150CBC, @@ -178,7 +176,7 @@ void (*const sUnknown_8475578[])(void) = sub_8150F40 }; -void (*const sUnknown_84755A8[])(void) = +static void (*const sUnknown_84755A8[])(void) = { sub_8150C78, sub_8150CBC, @@ -220,14 +218,14 @@ void StartDodrioBerryPicking(u16 a0, MainCallback callback) } } -void sub_81508D8(void) +static void sub_81508D8(void) { ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); } -void sub_81508EC(struct DodrioStruct * data) +static void sub_81508EC(struct DodrioStruct * data) { u8 i; @@ -281,7 +279,7 @@ void sub_81508EC(struct DodrioStruct * data) } } -void sub_8150A84(u8 taskId) +static void sub_8150A84(u8 taskId) { u8 r4, r5; @@ -354,7 +352,7 @@ void sub_8150A84(u8 taskId) } } -void sub_8150C08(u8 taskId) +static void sub_8150C08(u8 taskId) { sub_8151B54(); sUnknown_8475578[gUnknown_203F3E0->unk18](); @@ -365,7 +363,7 @@ void sub_8150C08(u8 taskId) sub_8151BA0(); } -void sub_8150C40(u8 taskId) +static void sub_8150C40(u8 taskId) { sub_8151C5C(); sUnknown_84755A8[gUnknown_203F3E0->unk18](); @@ -376,7 +374,7 @@ void sub_8150C40(u8 taskId) sub_8151D28(); } -void sub_8150C78(void) +static void sub_8150C78(void) { switch (gUnknown_203F3E0->unk10) { @@ -392,7 +390,7 @@ void sub_8150C78(void) } } -void sub_8150CBC(void) +static void sub_8150CBC(void) { if (gUnknown_203F3E0->unk10 == 0) { @@ -406,7 +404,7 @@ void sub_8150CBC(void) } } -void sub_8150CF4(void) +static void sub_8150CF4(void) { switch (gUnknown_203F3E0->unk10) { @@ -440,7 +438,7 @@ void sub_8150CF4(void) } } -void sub_8150D7C(void) +static void sub_8150D7C(void) { if (gUnknown_203F3E0->unk10 == 0) { @@ -451,7 +449,7 @@ void sub_8150D7C(void) } } -void sub_8150DA4(void) +static void sub_8150DA4(void) { if (gUnknown_203F3E0->unk10 == 0) { @@ -497,7 +495,7 @@ void sub_8150DA4(void) sub_8151D98(); } } -void sub_8150E68(void) +static void sub_8150E68(void) { if (gUnknown_203F3E0->unk40 < 10) { @@ -534,7 +532,7 @@ void sub_8150E68(void) sub_8151E94(); } -void sub_8150F40(void) +static void sub_8150F40(void) { u8 i; @@ -559,14 +557,14 @@ void sub_8150F40(void) } } -void sub_8150FC4(void) +static void sub_8150FC4(void) { sub_8151E94(); if (sub_8152AD8() == 1) sub_8152090(5); } -void sub_8150FDC(void) +static void sub_8150FDC(void) { u8 blockReceivedStatus; u8 i; @@ -609,7 +607,7 @@ void sub_8150FDC(void) } } -void sub_815109C(void) +static void sub_815109C(void) { u8 i; u8 blockReceivedStatus; @@ -651,7 +649,7 @@ void sub_815109C(void) } } -void sub_8151198(void) +static void sub_8151198(void) { u8 sp00; u8 i; @@ -712,7 +710,7 @@ void sub_8151198(void) } } -void sub_81512B4(void) +static void sub_81512B4(void) { u8 sp0; u8 i; @@ -802,7 +800,7 @@ void sub_81512B4(void) } } -void sub_8151488(void) +static void sub_8151488(void) { switch (gUnknown_203F3E0->unk10) { @@ -832,7 +830,7 @@ void sub_8151488(void) } } -void sub_81514F0(void) +static void sub_81514F0(void) { switch (gUnknown_203F3E0->unk10) { @@ -868,7 +866,7 @@ void sub_81514F0(void) } } -void sub_815159C(void) +static void sub_815159C(void) { switch (gUnknown_203F3E0->unk10) { @@ -931,7 +929,7 @@ void sub_815159C(void) } } -void sub_81516DC(u8 taskId) +static void sub_81516DC(u8 taskId) { switch (gUnknown_203F3E0->unk10) { @@ -965,7 +963,7 @@ void sub_81516DC(u8 taskId) } } -void sub_8151750(u8 taskId) +static void sub_8151750(u8 taskId) { s16 * data = gTasks[taskId].data; u8 i; @@ -1005,7 +1003,7 @@ void sub_8151750(u8 taskId) } } -void sub_815184C(void) +static void sub_815184C(void) { u8 i; u8 r7 = gUnknown_203F3E0->unk24; @@ -1072,7 +1070,7 @@ void sub_815184C(void) } } -void sub_8151A5C(void) +static void sub_8151A5C(void) { u8 i; u8 r6 = gUnknown_203F3E0->unk24; @@ -1103,7 +1101,7 @@ void sub_8151A5C(void) } } -void sub_8151B54(void) +static void sub_8151B54(void) { switch (gUnknown_203F3E0->unk18) { @@ -1123,7 +1121,7 @@ void sub_8151B54(void) } } -void sub_8151BA0(void) +static void sub_8151BA0(void) { switch (gUnknown_203F3E0->unk18) { @@ -1136,7 +1134,7 @@ void sub_8151BA0(void) } } -void sub_8151C5C(void) +static void sub_8151C5C(void) { switch (gUnknown_203F3E0->unk18) { @@ -1149,7 +1147,7 @@ void sub_8151C5C(void) } } -void sub_8151D28(void) +static void sub_8151D28(void) { switch (gUnknown_203F3E0->unk18) { @@ -1172,7 +1170,7 @@ void sub_8151D28(void) } } -void sub_8151D98(void) +static void sub_8151D98(void) { if (gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 == 0) { @@ -1212,7 +1210,7 @@ void sub_8151D98(void) } } -void sub_8151E94(void) +static void sub_8151E94(void) { u8 r8 = gUnknown_203F3E0->unk44; u8 r7 = gUnknown_203F3E0->unk48; @@ -1270,7 +1268,7 @@ void sub_8151E94(void) } } -void sub_815201C(void) +static void sub_815201C(void) { RunTasks(); AnimateSprites(); @@ -1278,24 +1276,24 @@ void sub_815201C(void) UpdatePaletteFade(); } -void sub_8152034(void) +static void sub_8152034(void) { TransferPlttBuffer(); LoadOam(); ProcessSpriteCopyRequests(); } -void sub_8152048(struct DodrioSubstruct_318C * a0, struct Pokemon * a1) +static void sub_8152048(struct DodrioSubstruct_318C * a0, struct Pokemon * a1) { a0->isShiny = IsMonShiny(a1); } -void sub_815205C(TaskFunc func, u8 priority) +static void sub_815205C(TaskFunc func, u8 priority) { CreateTask(func, priority); } -void sub_815206C(TaskFunc func) +static void sub_815206C(TaskFunc func) { gUnknown_203F3E0->unk04 = CreateTask(func, 1); gUnknown_203F3E0->unk10 = 0; @@ -1303,7 +1301,7 @@ void sub_815206C(TaskFunc func) gUnknown_203F3E0->unk14 = 0; } -void sub_8152090(u8 a0) +static void sub_8152090(u8 a0) { gUnknown_203F3E0->unk1C = gUnknown_203F3E0->unk18; gUnknown_203F3E0->unk18 = a0; @@ -1311,7 +1309,7 @@ void sub_8152090(u8 a0) gUnknown_203F3E0->unk14 = 0; } -bool32 sub_81520B4(void) +static bool32 sub_81520B4(void) { u8 r2 = gUnknown_203F3E0->unk14 / 4; gUnknown_203F3E0->unk14++; @@ -1334,7 +1332,7 @@ bool32 sub_81520B4(void) } } -void sub_8152110(void) +static void sub_8152110(void) { u8 i; u8 start = gUnknown_203F3E0->unk44; @@ -1348,7 +1346,7 @@ void sub_8152110(void) } } -void sub_8152174(void) +static void sub_8152174(void) { u8 sp0 = gUnknown_203F3E0->unk44; u8 sp4 = gUnknown_203F3E0->unk48; @@ -1448,7 +1446,7 @@ void sub_8152174(void) } } -bool32 sub_8152484(u8 a0, u8 a1, u8 a2) +static bool32 sub_8152484(u8 a0, u8 a1, u8 a2) { s32 r7 = 0; u8 r5 = gUnknown_203F3E0->unk24 - 1; @@ -1493,7 +1491,7 @@ bool32 sub_8152484(u8 a0, u8 a1, u8 a2) return FALSE; } -void sub_815256C(void) +static void sub_815256C(void) { u8 r1 = gUnknown_203F3E0->unk44; u8 r9 = gUnknown_203F3E0->unk48; @@ -1580,7 +1578,7 @@ void sub_815256C(void) } } -void sub_81527D0(void) +static void sub_81527D0(void) { u8 i, first, count; @@ -1615,7 +1613,7 @@ void sub_81527D0(void) } } -void sub_81528D0(void) +static void sub_81528D0(void) { u8 i, count; @@ -1627,7 +1625,7 @@ void sub_81528D0(void) } } -void sub_8152910(void) +static void sub_8152910(void) { u8 i, count; @@ -1636,7 +1634,7 @@ void sub_8152910(void) sub_8153DA8(i, 4); } -void sub_815293C(void) +static void sub_815293C(void) { sub_81527D0(); if (gUnknown_203F3E0->unk40 > 9) @@ -1648,7 +1646,7 @@ void sub_815293C(void) } // This function is literally the same as the one above...Why? -void sub_8152970(void) +static void sub_8152970(void) { sub_81527D0(); if (gUnknown_203F3E0->unk40 > 9) @@ -1659,7 +1657,7 @@ void sub_8152970(void) sub_8153FC8(gUnknown_203F3E0->unk40); } -void sub_81529A4(u8 arg0, u8 *arg1, u8 *arg2) +static void sub_81529A4(u8 arg0, u8 *arg1, u8 *arg2) { switch (arg0) { @@ -1681,7 +1679,7 @@ void sub_81529A4(u8 arg0, u8 *arg1, u8 *arg2) } } -bool32 sub_8152A00(void) +static bool32 sub_8152A00(void) { u8 i, count; @@ -1704,7 +1702,7 @@ bool32 sub_8152A00(void) return TRUE; } -void sub_8152A70(void) +static void sub_8152A70(void) { u8 i; @@ -1712,7 +1710,7 @@ void sub_8152A70(void) gUnknown_203F3E0->unk158[i] = 0; } -bool32 sub_8152A98(void) +static bool32 sub_8152A98(void) { if (gUnknown_203F3E0->unk40 > 9 && gUnknown_203F3E0->unk120 == 0) { @@ -1724,7 +1722,7 @@ bool32 sub_8152A98(void) return FALSE; } -bool32 sub_8152AD8(void) +static bool32 sub_8152AD8(void) { u8 i, first, count; @@ -1750,19 +1748,19 @@ bool32 sub_8152AD8(void) return FALSE; } -void sub_8152B64(u8 arg0) +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]++; } -u8 sub_8152BD4(u8 arg0) +static u8 sub_8152BD4(u8 arg0) { return sUnknown_84720FC[gUnknown_203F3E0->unk24 - 1][arg0]; } -u8 sub_8152BF8(u8 arg0, u8 arg1) +static u8 sub_8152BF8(u8 arg0, u8 arg1) { u8 i, var3; u8 count = gUnknown_203F3E0->unk24 - 1; @@ -1788,7 +1786,7 @@ u8 sub_8152BF8(u8 arg0, u8 arg1) return sub_8152CB8(var3, arg1); } -u8 sub_8152CB8(u8 arg0, u8 arg1) +static u8 sub_8152CB8(u8 arg0, u8 arg1) { u8 var = gUnknown_203F3E0->unkE8[arg1]; switch (arg0 % 7) @@ -1822,7 +1820,7 @@ u8 sub_8152CB8(u8 arg0, u8 arg1) } } -void sub_8152D34(u8 arg0, u8 arg1, u8 arg2) +static void sub_8152D34(u8 arg0, u8 arg1, u8 arg2) { u8 var; u8 count = gUnknown_203F3E0->unk24; @@ -1960,7 +1958,7 @@ void sub_8152D34(u8 arg0, u8 arg1, u8 arg2) } } -void sub_8152F94(bool32 arg0) +static void sub_8152F94(bool32 arg0) { if (gUnknown_203F3E0->unk24 != 5) return; @@ -1980,14 +1978,14 @@ void sub_8152F94(bool32 arg0) } } -void sub_8153004(void) +static void sub_8153004(void) { u8 i; for (i = 0; i < gUnknown_203F3E0->unk24; i++) gUnknown_203F3E0->unk4A[i][5] = gUnknown_203F3E0->unk114; } -void sub_8153048(void) +static void sub_8153048(void) { u8 i, j; @@ -2015,9 +2013,9 @@ void sub_8153048(void) sub_81527D0(); } -const s16 sUnknown_84755D8[] = {10, 30, 50, 50}; +static const s16 sUnknown_84755D8[] = {10, 30, 50, 50}; -void sub_8153150(void) +static void sub_8153150(void) { u8 i, var = 0, var2 = 0; @@ -2032,7 +2030,7 @@ void sub_8153150(void) gUnknown_203F3E0->unk4A[i][4] = sUnknown_8475558[var][var2]; } -u32 sub_81531BC(u8 arg0) +static u32 sub_81531BC(u8 arg0) { u32 sum = gUnknown_203F3E0->unk4A[arg0][0] + gUnknown_203F3E0->unk4A[arg0][1] @@ -2040,7 +2038,7 @@ u32 sub_81531BC(u8 arg0) return min(sum, 9999); } -void sub_81531FC(void) +static void sub_81531FC(void) { u32 berriesPicked = Min(sub_81531BC(gUnknown_203F3E0->multiplayerId), 9999); u32 score = Min(sub_8153424(gUnknown_203F3E0->multiplayerId), 999990); @@ -2053,7 +2051,7 @@ void sub_81531FC(void) gSaveBlock2Ptr->berryPick.berriesPickedInRow = gUnknown_203F3E0->unk114; } -u8 sub_815327C(u8 arg0) +static u8 sub_815327C(u8 arg0) { u8 i, saved; @@ -2064,7 +2062,7 @@ u8 sub_815327C(u8 arg0) return saved; } -void sub_81532B8(void) +static void sub_81532B8(void) { if (gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] == 0) { @@ -2097,7 +2095,7 @@ void sub_81532B8(void) } } -void sub_815336C(void) +static void sub_815336C(void) { gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 = 0; } @@ -2125,7 +2123,7 @@ u16 sub_8153404(u8 arg0, u8 arg1) return gUnknown_203F3E0->unk4A[arg0][arg1]; } -u32 sub_8153424(u8 arg0) +static u32 sub_8153424(u8 arg0) { u8 i; u32 var, sum = 0; @@ -2168,7 +2166,7 @@ u32 sub_81534F0(u8 arg0) return maxVar; } -u32 sub_8153534(u8 arg0) +static u32 sub_8153534(u8 arg0) { u32 vals[5], temp; s16 r6 = TRUE; @@ -2235,7 +2233,7 @@ void sub_81536A0(struct DodrioSubstruct_3308 * dst, u8 id) *dst = gUnknown_203F3E0->unk3308[id]; } -u8 sub_81536C0(u8 arg0) +static u8 sub_81536C0(u8 arg0) { u8 i, ret = 0, count = gUnknown_203F3E0->unk24; u32 var, vars[5] = {0}; @@ -2315,7 +2313,7 @@ void ShowDodrioBerryPickingRecords(void) } // Data related to printing saved results. -const struct WindowTemplate sUnknown_84755E0 = +static const struct WindowTemplate sUnknown_84755E0 = { .bg = 0, .tilemapLeft = 1, @@ -2326,14 +2324,14 @@ const struct WindowTemplate sUnknown_84755E0 = .baseBlock = 1, }; -const u8 *const sUnknown_84755E8[] = {gText_BerryPickingRecords, gText_BerriesPicked, gText_BestScore, gText_BerriesInRowFivePlayers}; -const u8 sUnknown_84755F8[] = {4, 7, 4}; +static const u8 *const sUnknown_84755E8[] = {gText_BerryPickingRecords, gText_BerriesPicked, gText_BestScore, gText_BerriesInRowFivePlayers}; +static const u8 sUnknown_84755F8[] = {4, 7, 4}; ALIGNED(4) -const u8 sUnknown_84755FC[][2] = {{24}, {40}, {56}}; -const u8 sUnknown_8475602[][2] = {{24}, {40}, {70}}; +static const u8 sUnknown_84755FC[][2] = {{24}, {40}, {56}}; +static const u8 sUnknown_8475602[][2] = {{24}, {40}, {70}}; -void Task_ShowDodrioBerryPickingRecords(u8 taskId) +static void Task_ShowDodrioBerryPickingRecords(u8 taskId) { struct WindowTemplate window; s32 i, width, widthCurr; @@ -2370,7 +2368,7 @@ void Task_ShowDodrioBerryPickingRecords(u8 taskId) } } -void sub_81538D0(u8 windowId) +static void sub_81538D0(u8 windowId) { s32 i, x, numWidth; s32 results[3]; @@ -2395,7 +2393,7 @@ void sub_81538D0(u8 windowId) } // Debug functions? -const u16 sUnknown_8475608[][4] = +static const u16 sUnknown_8475608[][4] = { {9999, 0, 90, 9999}, {9999, 9999, 70, 9999}, @@ -2404,11 +2402,11 @@ const u16 sUnknown_8475608[][4] = {9999, 9999, 9999, 0}, }; -const u8 sUnknown_8475630[] = _("あいうえおかき"); -const u8 sUnknown_8475638[] = _("ABCDEFG"); -const u8 sUnknown_8475640[] = _("0123456"); +static const u8 sUnknown_8475630[] = _("あいうえおかき"); +static const u8 sUnknown_8475638[] = _("ABCDEFG"); +static const u8 sUnknown_8475640[] = _("0123456"); -const u8 *const sPlaceholderPlayerNames[] = +static const u8 *const sPlaceholderPlayerNames[] = { sUnknown_8475630, sUnknown_8475630, @@ -2417,12 +2415,12 @@ const u8 *const sPlaceholderPlayerNames[] = sUnknown_8475640 }; -void sub_81539EC(void) +static void sub_81539EC(void) { gUnknown_203F3E0->unk24 = GetLinkPlayerCount(); } -void sub_8153A04(void) +static void sub_8153A04(void) { u8 i, playerId; diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index 1acc25fb9..fc66ad635 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -22,40 +22,40 @@ struct DodrioStruct_2022CF4 u16 unk3E; }; // size = 0x40 -EWRAM_DATA u16 *gUnknown_203F3E4[5] = {NULL}; -EWRAM_DATA u16 *gUnknown_203F3F8[2] = {NULL}; -EWRAM_DATA u16 *gUnknown_203F400[11] = {NULL}; -EWRAM_DATA u16 *gUnknown_203F42C[4] = {NULL}; -EWRAM_DATA struct DodrioStruct_2022CF4 * gUnknown_203F43C = NULL; -EWRAM_DATA struct DodrioSubstruct_0160 * gUnknown_203F440 = NULL; - -void sub_8153B9C(struct Sprite * sprite); -u32 sub_8153C30(struct Sprite * sprite); -u32 sub_8153CA0(struct Sprite * sprite); -void sub_8153D48(bool8 a0, u8 a1); -void nullsub_97(struct Sprite * sprite); -void sub_8154324(bool8 a0); -void sub_81543E8(struct Sprite * sprite); -s16 sub_8154608(u8 a0, u8 a1); -void sub_8154A08(u8 taskId); -void sub_8154A2C(void); -void sub_8154B34(void); -void sub_8154F80(void); -void sub_81556E0(void); -void sub_8155A78(void); -void sub_8155B4C(void); -void sub_8155C2C(void); -void sub_8155C80(void); -void unused_0(void); -void nullsub_98(void); -void sub_8155E24(MainCallback cb); +static EWRAM_DATA u16 *gUnknown_203F3E4[5] = {NULL}; +static EWRAM_DATA u16 *gUnknown_203F3F8[2] = {NULL}; +static EWRAM_DATA u16 *gUnknown_203F400[11] = {NULL}; +static EWRAM_DATA u16 *gUnknown_203F42C[4] = {NULL}; +static EWRAM_DATA struct DodrioStruct_2022CF4 * gUnknown_203F43C = NULL; +static EWRAM_DATA struct DodrioSubstruct_0160 * gUnknown_203F440 = NULL; + +static void sub_8153B9C(struct Sprite * sprite); +static u32 sub_8153C30(struct Sprite * sprite); +static u32 sub_8153CA0(struct Sprite * sprite); +static void sub_8153D48(bool8 a0, u8 a1); +static void nullsub_97(struct Sprite * sprite); +static void sub_8154324(bool8 a0); +static void sub_81543E8(struct Sprite * sprite); +static s16 sub_8154608(u8 a0, u8 a1); +static void sub_8154A08(u8 taskId); +static void sub_8154A2C(void); +static void sub_8154B34(void); +static void sub_8154F80(void); +static void sub_81556E0(void); +static void sub_8155A78(void); +static void sub_8155B4C(void); +static void sub_8155C2C(void); +static void sub_8155C80(void); +static void unused_0(void); +static void nullsub_98(void); +static void sub_8155E24(MainCallback cb); MainCallback sub_8155E54(void); -void sub_8155EA0(void); -bool32 sub_8155FE0(void); +static void sub_8155EA0(void); +static bool32 sub_8155FE0(void); #include "data/dodrio_berry_picking.h" -const struct OamData sOamData_8478C98 = +static const struct OamData sOamData_8478C98 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -72,7 +72,7 @@ const struct OamData sOamData_8478C98 = .affineParam = 0 }; -const struct OamData sOamData_8478CA0 = +static const struct OamData sOamData_8478CA0 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -89,7 +89,7 @@ const struct OamData sOamData_8478CA0 = .affineParam = 0 }; -const struct OamData sOamData_8478CA8 = +static const struct OamData sOamData_8478CA8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -106,7 +106,7 @@ const struct OamData sOamData_8478CA8 = .affineParam = 0 }; -const struct OamData sOamData_8478CB0 = +static const struct OamData sOamData_8478CB0 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -123,37 +123,37 @@ const struct OamData sOamData_8478CB0 = .affineParam = 0 }; -const union AnimCmd sSpriteAnim_8478CB8[] = +static const union AnimCmd sSpriteAnim_8478CB8[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478CC0[] = +static const union AnimCmd sSpriteAnim_8478CC0[] = { ANIMCMD_FRAME(64, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478CC8[] = +static const union AnimCmd sSpriteAnim_8478CC8[] = { ANIMCMD_FRAME(128, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478CD0[] = +static const union AnimCmd sSpriteAnim_8478CD0[] = { ANIMCMD_FRAME(192, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478CD8[] = +static const union AnimCmd sSpriteAnim_8478CD8[] = { ANIMCMD_FRAME(256, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd *const sSpriteAnimTable_8478CE0[] = +static const union AnimCmd *const sSpriteAnimTable_8478CE0[] = { sSpriteAnim_8478CB8, sSpriteAnim_8478CC0, @@ -162,86 +162,86 @@ const union AnimCmd *const sSpriteAnimTable_8478CE0[] = sSpriteAnim_8478CD8 }; -const union AnimCmd sSpriteAnim_8478CF4[] = +static const union AnimCmd sSpriteAnim_8478CF4[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478CFC[] = +static const union AnimCmd sSpriteAnim_8478CFC[] = { ANIMCMD_FRAME(4, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478D04[] = +static const union AnimCmd sSpriteAnim_8478D04[] = { ANIMCMD_FRAME(8, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd *const sSpriteAnimTable_8478D0C[] = +static const union AnimCmd *const sSpriteAnimTable_8478D0C[] = { sSpriteAnim_8478CF4, sSpriteAnim_8478CFC, sSpriteAnim_8478D04 }; -const union AnimCmd sSpriteAnim_8478D18[] = +static const union AnimCmd sSpriteAnim_8478D18[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478D20[] = +static const union AnimCmd sSpriteAnim_8478D20[] = { ANIMCMD_FRAME(4, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478D28[] = +static const union AnimCmd sSpriteAnim_8478D28[] = { ANIMCMD_FRAME(8, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478D30[] = +static const union AnimCmd sSpriteAnim_8478D30[] = { ANIMCMD_FRAME(12, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478D38[] = +static const union AnimCmd sSpriteAnim_8478D38[] = { ANIMCMD_FRAME(16, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478D40[] = +static const union AnimCmd sSpriteAnim_8478D40[] = { ANIMCMD_FRAME(20, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478D48[] = +static const union AnimCmd sSpriteAnim_8478D48[] = { ANIMCMD_FRAME(24, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478D50[] = +static const union AnimCmd sSpriteAnim_8478D50[] = { ANIMCMD_FRAME(28, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd sSpriteAnim_8478D58[] = +static const union AnimCmd sSpriteAnim_8478D58[] = { ANIMCMD_FRAME(32, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd *const sSpriteAnimTable_8478D60[] = +static const union AnimCmd *const sSpriteAnimTable_8478D60[] = { sSpriteAnim_8478D18, sSpriteAnim_8478D20, @@ -254,13 +254,13 @@ const union AnimCmd *const sSpriteAnimTable_8478D60[] = sSpriteAnim_8478D58 }; -const union AnimCmd sSpriteAnim_8478D84[] = +static const union AnimCmd sSpriteAnim_8478D84[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_JUMP(0) }; -const union AnimCmd *const sSpriteAnimTable_8478D8C[] = +static const union AnimCmd *const sSpriteAnimTable_8478D8C[] = { sSpriteAnim_8478D84 }; @@ -303,7 +303,7 @@ void sub_8153AFC(struct DodrioSubstruct_318C * arg0, u8 arg1, u8 id, u8 arg3) sub_8153D48(TRUE, id); } -void sub_8153B9C(struct Sprite * sprite) +static void sub_8153B9C(struct Sprite * sprite) { switch (sprite->data[0]) { @@ -338,7 +338,7 @@ void sub_8153BF8(u8 unused) sprite->data[4] = 0; } -u32 sub_8153C30(struct Sprite * sprite) +static u32 sub_8153C30(struct Sprite * sprite) { s8 var; u8 mod = (++sprite->data[1] / 2) % 4; @@ -367,7 +367,7 @@ u32 sub_8153C30(struct Sprite * sprite) return 0; } -u32 sub_8153CA0(struct Sprite * sprite) +static u32 sub_8153CA0(struct Sprite * sprite) { u8 mod = (++sprite->data[1] / 13) % 4; @@ -394,7 +394,7 @@ void sub_8153D08(u8 count) } } -void sub_8153D48(bool8 invisible, u8 id) +static void sub_8153D48(bool8 invisible, u8 id) { gSprites[*gUnknown_203F3E4[id]].invisible = invisible; } @@ -411,7 +411,7 @@ void sub_8153DA8(u8 id, u8 frameNum) StartSpriteAnim(&gSprites[*gUnknown_203F3E4[id]], frameNum); } -void nullsub_97(struct Sprite * sprite) +static void nullsub_97(struct Sprite * sprite) { } @@ -541,7 +541,7 @@ void sub_81540DC(bool8 invisible) } // Unknown unused data, feel free to remove. -const u8 sUnused2[] = { +static const u8 sUnused2[] = { SE_W204, SE_TOY_C, SE_TOY_D, @@ -570,7 +570,7 @@ void sub_8154128(void) Free(ptr); } -const s16 sUnknown_8478DD4[] = {88, 128, 168, 208}; +static const s16 sUnknown_8478DD4[] = {88, 128, 168, 208}; void sub_815417C(void) { @@ -644,7 +644,7 @@ void sub_81542EC(u8 id, bool8 invisible) gSprites[*gUnknown_203F400[id]].invisible = invisible; } -void sub_8154324(bool8 invisible) +static void sub_8154324(bool8 invisible) { u8 i; for (i = 0; i < 4; i++) @@ -662,7 +662,7 @@ void sub_8154398(u16 id, u8 frameNum) } // Unused -void sub_81543C4(u8 spriteId) +static void sub_81543C4(u8 spriteId) { gSprites[spriteId].pos1.x = 20 * spriteId + 50; gSprites[spriteId].pos1.y = 50; @@ -676,7 +676,7 @@ void sub_81543C4(u8 spriteId) #define sKeepPosX data[10] #endif // NONMATCHING -void sub_81543E8(struct Sprite * sprite) +static void sub_81543E8(struct Sprite * sprite) { u8 i; static const u8 array[] = {30, 20}; @@ -694,7 +694,7 @@ void sub_81543E8(struct Sprite * sprite) } } -const s16 gUnknown_8478E0E[][2] = {{230, 55}, {30, 74}}; +static const s16 gUnknown_8478E0E[][2] = {{230, 55}, {30, 74}}; void sub_8154438(void) { @@ -772,7 +772,7 @@ void sub_81545BC(bool8 invisible) #undef sKeepPosX -s16 sub_8154608(u8 arg0, u8 arg1) +static s16 sub_8154608(u8 arg0, u8 arg1) { s16 x = 0; switch (arg1) @@ -830,13 +830,13 @@ void sub_81546C0(void) sub_81540DC(FALSE); } -void sub_81546EC(u8 frameId) +static void sub_81546EC(u8 frameId) { LoadBgTiles(0, GetUserFrameGraphicsInfo(frameId)->tiles, 0x120, 1); LoadPalette(GetUserFrameGraphicsInfo(frameId)->palette, 0xA0, 0x20); } -void sub_8154720(void) +static void sub_8154720(void) { TextWindow_SetStdFrame0_WithPal(0, 0xA, 0xB0); } @@ -850,7 +850,7 @@ void sub_8154730(void) gUnknown_203F440->unk3024 = 0; } -void sub_8154768(const struct WindowTemplate * winTempl) +static void sub_8154768(const struct WindowTemplate * winTempl) { u8 pal = 0xA; @@ -864,7 +864,7 @@ void sub_8154768(const struct WindowTemplate * winTempl) FillBgTilemapBufferRect(0, 9, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop + winTempl->height, 1, 1, pal); } -void sub_8154868(const struct WindowTemplate * winTempl) +static void sub_8154868(const struct WindowTemplate * winTempl) { u8 pal = 0xB; @@ -890,7 +890,7 @@ void sub_8154968(struct DodrioSubstruct_0160 * ptr) sub_8155E24(sub_8154A2C); } -void sub_81549C8(void) +static void sub_81549C8(void) { FreeAllWindowBuffers(); } @@ -901,7 +901,7 @@ struct WinCoords u8 top; }; -const u8 sTextColorTable[][3] = +static const u8 sTextColorTable[][3] = { { TEXT_COLOR_WHITE, @@ -922,13 +922,13 @@ const u8 sTextColorTable[][3] = } }; -const struct WinCoords sUnknown_8478E44[] = {{12, 6}}; -const struct WinCoords sUnknown_8478E48[] = {{9, 10}, {15, 6}}; -const struct WinCoords sUnknown_8478E50[] = {{12, 6}, {18, 10}, {6, 10}}; -const struct WinCoords sUnknown_8478E5C[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}}; -const struct WinCoords sUnknown_8478E6C[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}}; +static const struct WinCoords sUnknown_8478E44[] = {{12, 6}}; +static const struct WinCoords sUnknown_8478E48[] = {{9, 10}, {15, 6}}; +static const struct WinCoords sUnknown_8478E50[] = {{12, 6}, {18, 10}, {6, 10}}; +static const struct WinCoords sUnknown_8478E5C[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}}; +static const struct WinCoords sUnknown_8478E6C[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}}; -const struct WinCoords * const sUnknown_8478E80[] = +static const struct WinCoords * const sUnknown_8478E80[] = { sUnknown_8478E44, sUnknown_8478E48, @@ -937,7 +937,7 @@ const struct WinCoords * const sUnknown_8478E80[] = sUnknown_8478E6C, }; -const u8 *const sUnknown_8478E94[] = +static const u8 *const sUnknown_8478E94[] = { gText_1Colon, gText_2Colon, @@ -946,9 +946,9 @@ const u8 *const sUnknown_8478E94[] = gText_5Colon, }; -const u16 sUnknown_8478EA8[] = {92, 132, 172, 212}; -const u16 sUnknown_8478EB0[] = {30, 45, 60, 75, 90}; -const u16 sUnknown_8478EBA[] = {12, 28, 44, 60, 76}; +static const u16 sUnknown_8478EA8[] = {92, 132, 172, 212}; +static const u16 sUnknown_8478EB0[] = {30, 45, 60, 75, 90}; +static const u16 sUnknown_8478EBA[] = {12, 28, 44, 60, 76}; struct { @@ -978,13 +978,13 @@ void sub_81549D4(u8 arg0) } } -void sub_8154A08(u8 taskId) +static void sub_8154A08(u8 taskId) { if (!gUnknown_203F440->finished) sub_8155E54()(); } -void sub_8154A2C(void) +static void sub_8154A2C(void) { switch (gUnknown_203F440->state) { @@ -1023,7 +1023,7 @@ void sub_8154A2C(void) } } -void sub_8154B34(void) +static void sub_8154B34(void) { u8 i, playersCount, id, colorsId, *name; u32 left; @@ -1087,7 +1087,7 @@ void sub_8154B34(void) } } -void sub_8154D9C(u8 playersCount_) +static void sub_8154D9C(u8 playersCount_) { u8 i, r8 = 0, r6 = 0; u8 playersCount = playersCount_; // Pointless variable, I know, but it's needed to match. @@ -1145,7 +1145,7 @@ void sub_8154D9C(u8 playersCount_) } } -void sub_8154F80(void) +static void sub_8154F80(void) { u8 i, j, itemGiveRet, playersCount = sub_81533B4(); u8 *name; @@ -1324,7 +1324,7 @@ void sub_8154F80(void) } } -void sub_81556E0(void) +static void sub_81556E0(void) { u8 y; @@ -1414,7 +1414,7 @@ void sub_81556E0(void) } } -void sub_8155A78(void) +static void sub_8155A78(void) { switch (gUnknown_203F440->state) { @@ -1446,7 +1446,7 @@ void sub_8155A78(void) } } -void sub_8155B4C(void) +static void sub_8155B4C(void) { switch (gUnknown_203F440->state) { @@ -1474,7 +1474,7 @@ void sub_8155B4C(void) } } -void sub_8155C2C(void) +static void sub_8155C2C(void) { ClearWindowTilemap(gUnknown_203F440->unk3008[0]); RemoveWindow(gUnknown_203F440->unk3008[0]); @@ -1483,7 +1483,7 @@ void sub_8155C2C(void) gUnknown_203F440->finished = TRUE; } -void sub_8155C80(void) +static void sub_8155C80(void) { switch (gUnknown_203F440->state) { @@ -1523,18 +1523,18 @@ void sub_8155C80(void) } } -void unused_0(void) +static void unused_0(void) { DestroyTask(gUnknown_203F440->unk3004); gUnknown_203F440->finished = TRUE; } -void nullsub_98(void) +static void nullsub_98(void) { } -void sub_8155E24(void (*func)(void)) +static void sub_8155E24(void (*func)(void)) { gUnknown_203F440->state = 0; gUnknown_203F440->finished = FALSE; @@ -1559,7 +1559,7 @@ u8 sub_8155E8C(void) return gUnknown_203F440->unk3024; } -void sub_8155EA0(void) +static void sub_8155EA0(void) { DmaClearLarge16(3, (void *)VRAM, VRAM_SIZE, 0x1000); DmaClear32(3,(void *)OAM, OAM_SIZE); @@ -1583,7 +1583,7 @@ void sub_8155EA0(void) SetBgTilemapBuffer(2, gUnknown_203F440->tilemapBuffers[2]); } -bool32 sub_8155FE0(void) +static bool32 sub_8155FE0(void) { switch (gUnknown_203F440->unk3018) { -- cgit v1.2.3 From 4a24826e0ae4b71edf2e516e2ce99a3064092abe Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 5 Mar 2020 15:00:43 -0500 Subject: Clarify the data/dodrio_berry_picking.h include --- src/dodrio_berry_picking.c | 1 + src/dodrio_berry_picking_2.c | 1 + 2 files changed, 2 insertions(+) (limited to 'src') diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 415bcd428..758dd68da 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -137,6 +137,7 @@ 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] = diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index fc66ad635..e0305e636 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -53,6 +53,7 @@ MainCallback sub_8155E54(void); static void sub_8155EA0(void); static bool32 sub_8155FE0(void); +// Assets in this header are duplicated #include "data/dodrio_berry_picking.h" static const struct OamData sOamData_8478C98 = -- cgit v1.2.3 From 3dc2acc32db7194d37b8ffae5971e492152dbaad Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 5 Mar 2020 15:56:53 -0500 Subject: Address review comments except 2 --- src/dodrio_berry_picking.c | 23 +++++++++++------------ src/dodrio_berry_picking_2.c | 16 ++++++++-------- 2 files changed, 19 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 758dd68da..6c3cb2b08 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -30,8 +30,7 @@ struct DodrioStruct /*0x0020*/ u8 ALIGNED(4) unk20; /*0x0024*/ u8 ALIGNED(4) unk24; /*0x0028*/ u8 ALIGNED(4) multiplayerId; - /*0x0029*/ u8 filler_0029[7]; - /*0x0030*/ u8 ALIGNED(4) unk30; + /*0x0030*/ u8 ALIGNED(8) unk30; /*0x0034*/ u8 ALIGNED(4) unk34[5]; /*0x003C*/ u8 ALIGNED(4) unk3C; /*0x0040*/ u8 ALIGNED(4) unk40; @@ -334,8 +333,8 @@ static void sub_8150A84(u8 taskId) gUnknown_203F3E0->unk0C++; break; case 6: - BlendPalettes(0xFFFFFFFF, 0x10, 0x00); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetVBlankCallback(sub_8152034); gUnknown_203F3E0->unk0C++; break; @@ -836,7 +835,7 @@ static void sub_81514F0(void) switch (gUnknown_203F3E0->unk10) { case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gUnknown_203F3E0->unk10++; break; case 1: @@ -873,7 +872,7 @@ static void sub_815159C(void) { case 0: sub_81549D4(9); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gUnknown_203F3E0->unk10++; break; case 1: @@ -904,8 +903,8 @@ static void sub_815159C(void) gUnknown_203F3E0->unk10++; break; case 5: - BlendPalettes(0xFFFFFFFF, 16, 0); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); gUnknown_203F3E0->unk10++; break; case 6: @@ -1691,7 +1690,7 @@ static bool32 sub_8152A00(void) gUnknown_203F3E0->unk158[i] = sub_815A5E8(i); } - // This loop won't ever run, the seemingly poitnless assingment below is to make the compiler + // 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++) @@ -2067,19 +2066,19 @@ static void sub_81532B8(void) { if (gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] == 0) { - if (gMain.newKeys & DPAD_UP) + 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 (gMain.newKeys & DPAD_LEFT) + 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 (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { gUnknown_203F3E0->unk31A0[gUnknown_203F3E0->multiplayerId].unk2C.unk0 = 1; gUnknown_203F3E0->unkB0[gUnknown_203F3E0->multiplayerId] = 6; diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index e0305e636..dc4296d17 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -561,7 +561,7 @@ void sub_8154128(void) struct SpritePalette sprPal = {sDodrioBerrySpritesPal, 3}; LZ77UnCompWram(sDodrioBerrySpritesGfx, ptr); - if (ptr != NULL) + if (ptr != NULL) // This should be one line up { struct SpriteSheet sprSheet = {ptr, 0x480, 2}; LoadSpriteSheet(&sprSheet); @@ -704,7 +704,7 @@ void sub_8154438(void) struct SpritePalette sprPal = {sDodrioBerryPlatformPal, 6}; LZ77UnCompWram(sDodrioBerryPlatformGfx, ptr); - if (ptr != NULL) + if (ptr != NULL) // This should be one line up { struct SpriteSheet sprSheet = {ptr, 0x400, 5}; struct SpriteTemplate sprTemplate = @@ -1214,7 +1214,7 @@ static void sub_8154F80(void) gUnknown_203F440->state++; break; case 4: - if (++gUnknown_203F440->unk301C >= 30 && gMain.newKeys & A_BUTTON) + if (++gUnknown_203F440->unk301C >= 30 && JOY_NEW(A_BUTTON)) { gUnknown_203F440->unk301C = 0; PlaySE(SE_SELECT); @@ -1246,7 +1246,7 @@ static void sub_8154F80(void) gUnknown_203F440->state++; break; case 8: - if (++gUnknown_203F440->unk301C >= 30 && gMain.newKeys & A_BUTTON) + if (++gUnknown_203F440->unk301C >= 30 && JOY_NEW(A_BUTTON)) { gUnknown_203F440->unk301C = 0; PlaySE(SE_SELECT); @@ -1306,7 +1306,7 @@ static void sub_8154F80(void) gUnknown_203F440->state++; break; case 11: - if (++gUnknown_203F440->unk301C >= 30 && gMain.newKeys & A_BUTTON) + if (++gUnknown_203F440->unk301C >= 30 && JOY_NEW(A_BUTTON)) { gUnknown_203F440->unk301C = 0; PlaySE(SE_SELECT); @@ -1372,14 +1372,14 @@ static void sub_81556E0(void) AddTextPrinterParameterized(gUnknown_203F440->unk3008[1], 2, gText_SelectorArrow2, 0, y == 1 ? 2 : 16, -1, NULL); CopyWindowToVram(gUnknown_203F440->unk3008[1], 3); // Increment state only if A or B button have been pressed. - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (gUnknown_203F440->unk3020 == 0) gUnknown_203F440->unk3020 = 1; gUnknown_203F440->state++; } - else if (gMain.newKeys & (DPAD_UP | DPAD_DOWN)) + else if (JOY_NEW(DPAD_UP | DPAD_DOWN)) { PlaySE(SE_SELECT); switch (gUnknown_203F440->unk3020) @@ -1395,7 +1395,7 @@ static void sub_81556E0(void) break; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); gUnknown_203F440->unk3020 = 2; -- cgit v1.2.3 From 2e8d5d6279088ac5a2aad108f9ce895b2619e3bb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 5 Mar 2020 16:14:40 -0500 Subject: Address remaining review comments --- src/dodrio_berry_picking.c | 2 +- src/dodrio_berry_picking_2.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 6c3cb2b08..ea6d46df2 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -2350,7 +2350,7 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId) data[0]++; break; case 2: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { rbox_fill_rectangle(data[1]); CopyWindowToVram(data[1], 1); diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index dc4296d17..e170ac903 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -671,7 +671,7 @@ static void sub_81543C4(u8 spriteId) // Gamefreak made a mistake there and goes out of bounds for the data array as it holds 8 elements // in turn overwriting sprite's subpriority and subsprites fields. -#if defined(NONMATCHING) +#if defined(BUGFIX) #define sKeepPosX data[1] #else #define sKeepPosX data[10] -- cgit v1.2.3