diff options
Diffstat (limited to 'src/use_pokeblock.c')
-rw-r--r-- | src/use_pokeblock.c | 1385 |
1 files changed, 1295 insertions, 90 deletions
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 762019ecd..f28b651cc 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -2,42 +2,90 @@ #include "main.h" #include "pokeblock.h" #include "alloc.h" +#include "decompress.h" +#include "graphics.h" #include "palette.h" #include "pokenav.h" +#include "menu_specialized.h" #include "scanline_effect.h" #include "text.h" #include "bg.h" #include "window.h" #include "text_window.h" +#include "constants/rgb.h" +#include "sound.h" +#include "constants/songs.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "menu.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "pokemon_summary_screen.h" +#include "item_menu.h" struct UsePokeblockSubStruct { - void (*field_0)(void); - void (*callback)(void); - struct Pokeblock *pokeblock; - struct Pokemon *pokemon; - u8 stringBuffer[0x40]; - u8 field_50; - u8 field_51; - u8 field_52; - u8 field_53; - u8 field_54; - u8 field_55; - u8 field_56; - u8 field_57[5]; - u8 field_5c[5]; - u8 field_61[5]; - s16 field_66[5]; + /*0x00*/ void (*field_0)(void); + /*0x04*/ void (*callback)(void); + /*0x08*/ struct Pokeblock *pokeblock; + /*0x0C*/ struct Pokemon *mon; + /*0x10*/ u8 stringBuffer[0x40]; + /*0x50*/ u8 field_50; + /*0x51*/ u8 field_51; + /*0x52*/ u8 field_52; + /*0x53*/ u8 field_53; + /*0x54*/ u8 field_54; + /*0x55*/ u8 field_55; + /*0x56*/ u8 field_56; + /*0x57*/ u8 field_57[5]; + /*0x5C*/ u8 field_5c[5]; + /*0x61*/ u8 field_61[5]; + /*0x66*/ s16 field_66[5]; + /*0x70*/ u8 field_70; + /*0x71*/ u8 field_71; + /*0x74*/ u8 (*unk74)(void); + /*0x78*/ u8 unk78; + /*0x79*/ u8 filler79[0x1]; + /*0x7A*/ u8 field_7A[0x22]; +}; + +struct Unk7FB8 +{ + u8 unk0; + u8 unk1; + u16 unk2; }; struct UsePokeblockStruct { - u8 field_0[0x7C58]; - u8 field_7C58[0x378]; - struct UsePokeblockSubStruct info; + /*0x0000*/ u8 filler0[4]; + /*0x0000*/ u16 field_4[6][0x40]; + /*0x0304*/ u8 field_304[3][0x2000]; + /*0x6304*/ u8 filler_6304[0x1000]; + /*0x7304*/ u8 tilemapBuffer[BG_SCREEN_SIZE + 2]; + /*0x7B06*/ u8 field_7B06[7]; + /*0x7B0E*/ s16 field_7B0E; + /*0x7B10*/ u8 field_7B10; + /*0x7B12*/ u16 field_7B12; + /*0x7B12*/ u16 field_7B14; + /*0x7B12*/ u8 *field_7B18; + /*0x7B1C*/ struct Sprite *field_7B1C[10]; + /*0x7B44*/ struct Sprite *field_7B44[2]; + /*0x7B4C*/ u8 field_7B4C; + /*0x7B4D*/ u8 field_7B4D[3][24]; + /*0x7B95*/ u8 field_7B95[3][64]; + /*0x7C58*/ struct UnknownStruct_81D1ED4 field_7C58; + /*0x7FB0*/ u8 unk7FB0[3]; + /*0x7FB3*/ s8 field_7FB3; + /*0x7FB4*/ s8 field_7FB4; + /*0x7FB5*/ s8 field_7FB5; + /*0x7FB6*/ s8 field_7FB6; + /*0x7FB8*/ struct Unk7FB8 field_7FB8[6]; + /*0x7FD0*/ struct UsePokeblockSubStruct info; }; -extern u16 gKeyRepeatStartDelay; +extern void sub_81D21DC(u8); // this file's functions void sub_816636C(void (*func)(void)); @@ -50,13 +98,58 @@ void sub_81668F8(void); void sub_8167420(void); void sub_8167760(void); u8 sub_81672E4(u8 arg0); -bool8 sub_8168328(void); +static bool8 sub_8168328(void); bool8 sub_8167930(void); void sub_8167608(u8 arg0); void sub_8167BA0(u16 arg0, u8 copyToVramMode); +void sub_8166634(void); +static void sub_8167CA0(bool8); +void sub_8166BEC(void); +void sub_8166D44(void); +s8 sub_8166DE4(void); +bool8 IsSheenMaxed(void); +void sub_8166F50(void); +void sub_816681C(void); +void sub_8166F94(void); +u8 sub_81672A4(u8 a0); +void sub_8166A34(void); +void sub_8167104(void); +void sub_8167338(void); +void sub_81681F4(u8); +void sub_8166E24(void); +bool8 sub_8166EDC(void); +void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2); +void Pokeblock_MenuWindowTextPrint(const u8 *message); +void sub_8167184(struct Pokeblock *, struct Pokemon *); +void sub_81673DC(struct Sprite *sprite); +void sub_81674BC(void); +void sub_816753C(s16, u8); +static u8 sub_8167EA4(void); +static u8 sub_8167FA4(void); +static u8 sub_8168048(void); +void sub_8168180(struct Sprite *sprite); +void sub_81681B4(struct Sprite *sprite); +void sub_8168168(struct Sprite *sprite); extern const struct BgTemplate gUnknown_085DFCCC[4]; extern const struct WindowTemplate gUnknown_085DFCDC[]; +extern const struct WindowTemplate sUsePokeblockYesNoWinTemplate[]; +extern const u8* sContestStatNames[]; +extern const u32 gUnknown_085DFCB0[]; +extern const u8 gUnknown_085DFCC4[]; +extern const struct SpriteSheet gSpriteSheet_ConditionUpDown; +extern const struct SpritePalette gSpritePalette_ConditionUpDown; +extern const struct SpriteTemplate gSpriteTemplate_085DFD5C; +extern const s16 gUnknown_085DFD28[][2]; +extern const u32 gUnknown_085DFB60[]; +extern const u32 gUnknown_085DFA80[]; +extern const u32 gUnknown_085DFA60[]; +extern const u32 gUnknown_085DFC0C[]; +extern const u16 gUnknown_086231E8[]; +extern const u16 gUnknown_08623208[]; +extern const u8 gUnknown_085DFCC9[]; +extern const struct SpritePalette gUnknown_085DFDB8; +extern const struct SpriteTemplate gUnknown_085DFDA0; // ram variables EWRAM_DATA struct UsePokeblockSubStruct *gUnknown_0203BC90 = NULL; @@ -64,9 +157,9 @@ EWRAM_DATA void (*gUnknown_0203BC94)(void) = NULL; EWRAM_DATA struct Pokeblock *gUnknown_0203BC98 = NULL; EWRAM_DATA u8 gPokeblockMonId = 0; EWRAM_DATA s16 gPokeblockGain = 0; -EWRAM_DATA void *gUnknown_0203BCA0 = NULL; -EWRAM_DATA void *gUnknown_0203BCA4 = NULL; -EWRAM_DATA void *gUnknown_0203BCA8 = NULL; +EWRAM_DATA u8 *gUnknown_0203BCA0 = NULL; +EWRAM_DATA u8 *gUnknown_0203BCA4 = NULL; +EWRAM_DATA u8 *gUnknown_0203BCA8 = NULL; EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL; // const rom data @@ -75,7 +168,7 @@ EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL; // code void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void)) { - gUnknown_0203BCAC = AllocZeroed(0x806C); + gUnknown_0203BCAC = AllocZeroed(sizeof(*gUnknown_0203BCAC)); gUnknown_0203BC90 = &gUnknown_0203BCAC->info; gUnknown_0203BC90->pokeblock = pokeblock; gUnknown_0203BC90->callback = callback; @@ -85,7 +178,7 @@ void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void void CB2_ReturnAndChooseMonToGivePokeblock(void) { - gUnknown_0203BCAC = AllocZeroed(0x806C); + gUnknown_0203BCAC = AllocZeroed(sizeof(*gUnknown_0203BCAC)); gUnknown_0203BC90 = &gUnknown_0203BCAC->info; gUnknown_0203BC90->pokeblock = gUnknown_0203BC98; gUnknown_0203BC90->callback = gUnknown_0203BC94; @@ -130,7 +223,7 @@ void sub_8166340(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_81D2108(gUnknown_0203BCAC->field_7C58); + sub_81D2108(&gUnknown_0203BCAC->field_7C58); ScanlineEffect_InitHBlankDmaTransfer(); } @@ -144,87 +237,1199 @@ void sub_8166380(void) { switch (gUnknown_0203BC90->field_50) { - case 0: - gUnknown_0203BCAC->field_0[0x7B10] = 0xFF; - sub_81D1ED4(gUnknown_0203BCAC->field_7C58); + case 0: + gUnknown_0203BCAC->field_7B10 = 0xFF; + sub_81D1ED4(&gUnknown_0203BCAC->field_7C58); + gUnknown_0203BC90->field_50++; + break; + case 1: + ResetSpriteData(); + FreeAllSpritePalettes(); + gUnknown_0203BC90->field_50++; + break; + case 2: + SetVBlankCallback(NULL); + CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + gUnknown_0203BC90->field_50++; + break; + case 3: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_085DFCCC, ARRAY_COUNT(gUnknown_085DFCCC)); + InitWindows(gUnknown_085DFCDC); + DeactivateAllTextPrinters(); + LoadUserWindowBorderGfx(0, 0x97, 0xE0); + gUnknown_0203BC90->field_50++; + break; + case 4: + gUnknown_0203BC90->field_50++; + break; + case 5: + if (!sub_8168328()) gUnknown_0203BC90->field_50++; - break; - case 1: - ResetSpriteData(); - FreeAllSpritePalettes(); - gUnknown_0203BC90->field_50++; - break; - case 2: - SetVBlankCallback(NULL); - CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + break; + case 6: + gKeyRepeatStartDelay = 20; + sub_8167420(); + gUnknown_0203BC90->field_50++; + break; + case 7: + if (!sub_8167930()) gUnknown_0203BC90->field_50++; - break; - case 3: - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_085DFCCC, ARRAY_COUNT(gUnknown_085DFCCC)); - InitWindows(gUnknown_085DFCDC); - DeactivateAllTextPrinters(); - LoadUserWindowBorderGfx(0, 0x97, 0xE0); + break; + case 8: + sub_8167608(0); + sub_8167760(); + gUnknown_0203BC90->field_50++; + break; + case 9: + if (!sub_81D312C(&gUnknown_0203BCAC->field_7B0E)) gUnknown_0203BC90->field_50++; - break; - case 4: + break; + case 10: + gUnknown_0203BC90->field_50++; + break; + case 11: + sub_81D2754(gUnknown_0203BCAC->field_7C58.unk0[0], gUnknown_0203BCAC->field_7C58.unk14[0]); + sub_81D20AC(&gUnknown_0203BCAC->field_7C58); + gUnknown_0203BC90->field_50++; + break; + case 12: + if (!sub_81D20BC(&gUnknown_0203BCAC->field_7C58)) + { + sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[0], gUnknown_0203BCAC->field_7C58.unk14[0]); gUnknown_0203BC90->field_50++; - break; - case 5: - if (!sub_8168328()) + } + break; + case 13: + sub_81D2230(&gUnknown_0203BCAC->field_7C58); + gUnknown_0203BC90->field_50++; + break; + case 14: + PutWindowTilemap(0); + PutWindowTilemap(1); + sub_8167BA0(0, 1); + gUnknown_0203BC90->field_50++; + break; + case 15: + sub_816636C(sub_8166564); + break; + } +} + +void sub_8166564(void) +{ + switch (gUnknown_0203BC90->field_50) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(sub_8166340); + ShowBg(0); + ShowBg(1); + ShowBg(3); + ShowBg(2); + gUnknown_0203BC90->field_50++; + break; + case 1: + if (!gPaletteFade.active) + { + sub_81D3464(gUnknown_0203BCAC->field_7B1C); + if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) { - gUnknown_0203BC90->field_50++; + u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; + sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); } + + sub_816636C(sub_8166634); + } + break; + } +} + +void sub_8166634(void) +{ + u8 var; + + switch (gUnknown_0203BC90->field_50) + { + case 0: + if (gMain.heldKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + sub_8167CA0(TRUE); + sub_81D3520(gUnknown_0203BCAC->field_7B1C); + gUnknown_0203BC90->field_50 = 1; + } + else if (gMain.heldKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + sub_8167CA0(FALSE); + sub_81D3520(gUnknown_0203BCAC->field_7B1C); + gUnknown_0203BC90->field_50 = 1; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_0203BC90->field_50 = 3; + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_0203BCAC->info.field_71 == gUnknown_0203BCAC->info.field_70 - 1) + gUnknown_0203BC90->field_50 = 3; + else + gUnknown_0203BC90->field_50 = 5; + } + break; + case 1: + var = gUnknown_0203BCAC->info.unk74(); + if (!var) + gUnknown_0203BC90->field_50 = var; + break; + case 2: + break; + case 3: + sub_816636C(sub_8166BEC); + break; + case 4: + break; + case 5: + sub_8166D44(); + gUnknown_0203BC90->field_50++; + break; + case 6: + switch (sub_8166DE4()) + { + case 1: + case -1: + gUnknown_0203BC90->field_50 = 0; break; - case 6: - gKeyRepeatStartDelay = 20; - sub_8167420(); - gUnknown_0203BC90->field_50++; - break; - case 7: - if (!sub_8167930()) + case 0: + if (IsSheenMaxed()) { - gUnknown_0203BC90->field_50++; + sub_8166F50(); + gUnknown_0203BC90->field_50 = 7; } - break; - case 8: - sub_8167608(0); - sub_8167760(); - gUnknown_0203BC90->field_50++; - break; - case 9: - if (!sub_81D312C(&gUnknown_0203BCAC->field_0[0x7B0E])) + else { - gUnknown_0203BC90->field_50++; + sub_816636C(sub_816681C); } break; - case 10: + } + break; + case 7: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_8166F94(); + gUnknown_0203BC90->field_50 = 0; + } + break; + } +} + +void sub_816681C(void) +{ + switch (gUnknown_0203BC90->field_50) + { + case 0: + gPokeblockMonId = sub_81672A4(gUnknown_0203BCAC->info.field_71); + gUnknown_0203BC94 = gUnknown_0203BC90->callback; + gUnknown_0203BC98 = gUnknown_0203BC90->pokeblock; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_0203BC90->field_50++; + break; + case 1: + if (!gPaletteFade.active) + { + SetVBlankCallback(NULL); + FREE_AND_SET_NULL(gUnknown_0203BCA0); + FREE_AND_SET_NULL(gUnknown_0203BCA4); + FREE_AND_SET_NULL(gUnknown_0203BCA8); + FREE_AND_SET_NULL(gUnknown_0203BCAC); + FreeAllWindowBuffers(); + gMain.savedCallback = CB2_ReturnAndChooseMonToGivePokeblock; + CB2_PreparePokeblockFeedScene(); + } + break; + } +} + +void sub_81668F8(void) +{ + u16 var; + + switch (gUnknown_0203BC90->field_50) + { + case 0: + if (gUnknown_0203BCAC->info.field_71 != gPokeblockMonId) + { + sub_8167CA0(gUnknown_0203BC90->field_56); gUnknown_0203BC90->field_50++; - break; - case 11: - sub_81D2754(gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_0[0x7C6C]); - sub_81D20AC(gUnknown_0203BCAC->field_7C58); + } + else + { + gUnknown_0203BC90->field_50 = 3; + } + break; + case 1: + var = gUnknown_0203BCAC->info.unk74(); + if (!var) + gUnknown_0203BC90->field_50 = var; + break; + case 2: + break; + case 3: + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + gUnknown_0203BC90->field_50++; + break; + case 4: + ShowBg(0); + ShowBg(1); + ShowBg(3); + ShowBg(2); + gUnknown_0203BC90->field_50++; + break; + case 5: + SetVBlankCallback(sub_8166340); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gUnknown_0203BC90->field_50++; + break; + case 6: + if (!gPaletteFade.active) + { + sub_81D3464(gUnknown_0203BCAC->field_7B1C); + sub_816636C(sub_8166A34); + SetMainCallback2(sub_816631C); + } + break; + } +} + +void sub_8166A34(void) +{ + u8 var; + + switch (gUnknown_0203BC90->field_50) + { + case 0: + gUnknown_0203BC90->mon = gPlayerParty; + gUnknown_0203BC90->mon += gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1; + sub_81D3520(gUnknown_0203BCAC->field_7B1C); + gUnknown_0203BC90->field_50++; + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) gUnknown_0203BC90->field_50++; - break; - case 12: - if (!sub_81D20BC(gUnknown_0203BCAC->field_7C58)) + break; + case 2: + sub_8167104(); + sub_81D2754(gUnknown_0203BC90->field_5c, gUnknown_0203BCAC->field_7C58.unk14[3]); + sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], gUnknown_0203BCAC->field_7C58.unk14[3]); + sub_8167338(); + gUnknown_0203BC90->field_50++; + break; + case 3: + var = sub_81D2074(&gUnknown_0203BCAC->field_7C58); + if (!var) + { + sub_81681F4(sub_81672A4(gUnknown_0203BCAC->info.field_71)); + if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) { - sub_81D1F84(gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7C58[0x14], &gUnknown_0203BCAC->field_7C58[0x14]); - gUnknown_0203BC90->field_50++; + u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; + sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); } - break; - case 13: - sub_81D2230(gUnknown_0203BCAC->field_7C58); + + gUnknown_0203BC90->field_52 = 0; gUnknown_0203BC90->field_50++; - break; - case 14: - PutWindowTilemap(0); - PutWindowTilemap(1); - sub_8167BA0(0, 1); + } + break; + case 4: + if (++gUnknown_0203BC90->field_52 > 16) + { + sub_8166E24(); gUnknown_0203BC90->field_50++; + } + break; + case 5: + if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8166EDC()) + { + TryClearPokeblock((u8)gSpecialVar_ItemId); + sub_816636C(sub_8166BEC); + } + break; + } +} + +void sub_8166BEC(void) +{ + u8 i, var; + + switch (gUnknown_0203BC90->field_50) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_0203BC90->field_50++; + break; + case 1: + if (!gPaletteFade.active) + gUnknown_0203BC90->field_50 = 2; + break; + case 2: + gScanlineEffect.state = 3; + ScanlineEffect_InitHBlankDmaTransfer(); + gUnknown_0203BC90->field_50++; + break; + case 3: + SetMainCallback2(gUnknown_0203BC90->callback); + sub_81D354C(gUnknown_0203BCAC->field_7B1C); + for (i = 0; i < 7; i++) + DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B06[i]]); + + FreeSpriteTilesByTag(0); + FreeSpriteTilesByTag(1); + FreeSpritePaletteByTag(0); + FreeSpritePaletteByTag(1); + + for (i = 0; i < 2; i++) + DestroySprite(gUnknown_0203BCAC->field_7B44[i]); + + if (gUnknown_0203BCAC->field_7B10 != 0xFF) + DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B10]); + + SetVBlankCallback(NULL); + FREE_AND_SET_NULL(gUnknown_0203BCA0); + FREE_AND_SET_NULL(gUnknown_0203BCA4); + FREE_AND_SET_NULL(gUnknown_0203BCA8); + FREE_AND_SET_NULL(gUnknown_0203BCAC); + FreeAllWindowBuffers(); + break; + } +} + +void sub_8166D44(void) +{ + u8 stringBuffer[0x40]; + + GetMonData(&gPlayerParty[sub_81672A4(gUnknown_0203BCAC->info.field_71)], MON_DATA_NICKNAME, stringBuffer); + StringGetEnd10(stringBuffer); + StringAppend(stringBuffer, gText_GetsAPokeBlockQuestion); + StringCopy(gStringVar4, stringBuffer); + FillWindowPixelBuffer(2, 17); + DrawTextBorderOuter(2, 151, 14); + AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL); + PutWindowTilemap(2); + CopyWindowToVram(2, 3); + CreateYesNoMenu(sUsePokeblockYesNoWinTemplate, 151, 14, 0); +} + +s8 sub_8166DE4(void) +{ + s8 menuItem = Menu_ProcessInputNoWrapClearOnChoose(); + + switch (menuItem) + { + case 0: + break; + case MENU_B_PRESSED: + case 1: + PlaySE(SE_SELECT); + rbox_fill_rectangle(2); + ClearWindowTilemap(2); + break; + } + + return menuItem; +} + +void sub_8166E24(void) +{ + DrawTextBorderOuter(2, 151, 14); + FillWindowPixelBuffer(2, 17); + + for (gUnknown_0203BC90->field_53 = 0; gUnknown_0203BC90->field_53 < 5; gUnknown_0203BC90->field_53++) + { + if (gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] != 0) break; - case 15: - sub_816636C(sub_8166564); - break; + } + + if (gUnknown_0203BC90->field_53 < 5) + Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]); + else + Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, 0); + + Pokeblock_MenuWindowTextPrint(gStringVar4); + PutWindowTilemap(2); + CopyWindowToVram(2, 3); +} + +bool8 sub_8166EDC(void) +{ + FillWindowPixelBuffer(2, 17); + + while (1) + { + gUnknown_0203BC90->field_53++; + if (gUnknown_0203BC90->field_53 < 5) + { + if (gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] != 0) + break; + } + else + { + gUnknown_0203BC90->field_53 = 5; + return FALSE; + } + } + + Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]); + Pokeblock_MenuWindowTextPrint(gStringVar4); + CopyWindowToVram(2, 2); + + return TRUE; +} + +void sub_8166F50(void) +{ + FillWindowPixelBuffer(2, 17); + DrawTextBorderOuter(2, 151, 14); + AddTextPrinterParameterized(2, 1, gText_WontEatAnymore, 0, 1, 0, NULL); + PutWindowTilemap(2); + CopyWindowToVram(2, 3); +} + +void sub_8166F94(void) +{ + rbox_fill_rectangle(2); + ClearWindowTilemap(2); + CopyWindowToVram(2, 3); +} + +void Pokeblock_MenuWindowTextPrint(const u8 *message) +{ + AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL); +} + +// This function is a joke. +#ifdef NONMATCHING +void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2) +{ + if (a2 != 0) + { + StringCopy(dest, sContestStatNames[statId]); + StringAppend(dest, gText_WasEnhanced); + } + else + { + StringCopy(dest, gText_NothingChanged); + } +} +#else +NAKED +void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2) +{ + asm(".syntax unified\n\ +push {r4,lr}\n\ + adds r4, r0, 0\n\ + lsls r1, 24\n\ + lsrs r3, r1, 24\n\ + lsls r2, 16\n\ + lsrs r0, r2, 16\n\ + asrs r2, 16\n\ + cmp r2, 0\n\ + beq _08167010\n\ + cmp r2, 0\n\ + ble _08166FEC\n\ + movs r0, 0\n\ +_08166FEC:\n\ + lsls r0, 16\n\ + ldr r1, =sContestStatNames\n\ + lsls r0, r3, 2\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + adds r0, r4, 0\n\ + bl StringCopy\n\ + ldr r1, =gText_WasEnhanced\n\ + adds r0, r4, 0\n\ + bl StringAppend\n\ + b _08167018\n\ + .pool\n\ +_08167010:\n\ + ldr r1, =gText_NothingChanged\n\ + adds r0, r4, 0\n\ + bl StringCopy\n\ +_08167018:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided\n"); +} +#endif + +void Pokeblock_GetMonContestStats(struct Pokemon *mon, u8 *data) +{ + u16 i; + + for (i = 0; i < 5; i++) + data[i] = GetMonData(mon, gUnknown_085DFCB0[i]); +} + +void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon) +{ + u16 i; + s16 cstat; + u8 data; + + if (GetMonData(mon, MON_DATA_SHEEN) != 255) + { + sub_8167184(pokeblock, mon); + for (i = 0; i < 5; i++) + { + data = GetMonData(mon, gUnknown_085DFCB0[i]); + cstat = data + gUnknown_0203BC90->field_66[i]; + if (cstat < 0) + cstat = 0; + if (cstat > 255) + cstat = 255; + data = cstat; + SetMonData(mon, gUnknown_085DFCB0[i], &data); + } + + cstat = (u8)(GetMonData(mon, MON_DATA_SHEEN)) + pokeblock->feel; + if (cstat > 255) + cstat = 255; + + data = cstat; + SetMonData(mon, MON_DATA_SHEEN, &data); + } +} + +void sub_8167104(void) +{ + u16 i; + struct Pokemon *mon = gPlayerParty; + mon += gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->info.field_71 * 4 + 9]; + + Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_57); + sub_8167054(gUnknown_0203BC90->pokeblock, mon); + Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_5c); + for (i = 0; i < 5; i++) + gUnknown_0203BC90->field_61[i] = gUnknown_0203BC90->field_5c[i] - gUnknown_0203BC90->field_57[i]; +} + +void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon) +{ + s8 i, direction, taste; + + gUnknown_0203BC90->field_66[0] = pokeblock->spicy; + gUnknown_0203BC90->field_66[1] = pokeblock->sour; + gUnknown_0203BC90->field_66[2] = pokeblock->bitter; + gUnknown_0203BC90->field_66[3] = pokeblock->sweet; + gUnknown_0203BC90->field_66[4] = pokeblock->dry; + + if (gPokeblockGain > 0) + direction = 1; + else if (gPokeblockGain < 0) + direction = -1; + else + return; + + for (i = 0; i < 5; i++) + { + s16 amount = gUnknown_0203BC90->field_66[i]; + s8 boost = amount / 10; + + if (amount % 10 >= 5) // round to the nearest + boost++; + + taste = GetMonFlavorRelation(mon, gUnknown_085DFCC4[i]); + if (taste == direction) + gUnknown_0203BC90->field_66[i] += boost * taste; + } +} + +bool8 IsSheenMaxed(void) +{ + if (GetBoxOrPartyMonData(gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk0, + gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1, + MON_DATA_SHEEN, + NULL) == 255) + return TRUE; + else + return FALSE; +} + +u8 sub_81672A4(u8 a0) +{ + u8 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + { + if (a0 == 0) + return i; + a0--; + } + } + + return 0; +} + +u8 sub_81672E4(u8 partyCount) +{ + u8 i, numEggs; + + for (i = 0, numEggs = 0; i < partyCount; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + numEggs++; + } + + return partyCount - numEggs; +} + +u8 sub_8167324(u8 a0) +{ + return sub_81672A4(a0); +} + +void sub_8167338(void) +{ + u16 i, spriteId; + + LoadSpriteSheet(&gSpriteSheet_ConditionUpDown); + LoadSpritePalette(&gSpritePalette_ConditionUpDown); + gUnknown_0203BC90->field_54 = 0; + + for (i = 0; i < 5; i++) + { + if (gUnknown_0203BC90->field_61[i] != 0) + { + spriteId = CreateSprite(&gSpriteTemplate_085DFD5C, gUnknown_085DFD28[i][0], gUnknown_085DFD28[i][1], 0); + if (spriteId != MAX_SPRITES) + { + if (gUnknown_0203BC90->field_61[i] != 0) + gSprites[spriteId].callback = sub_81673DC; + + gUnknown_0203BC90->field_54++; + } + } + } +} + +void sub_81673DC(struct Sprite *sprite) +{ + if (sprite->data[0] < 6) + sprite->pos2.y -= 2; + else if (sprite->data[0] < 12) + sprite->pos2.y += 2; + + if (++sprite->data[0] > 60) + { + DestroySprite(sprite); + gUnknown_0203BC90->field_54--; + } +} + +void sub_8167420(void) +{ + u16 i; + u16 numMons; + + for (i = 0, numMons = 0; i < CalculatePlayerPartyCount(); i++) + { + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + { + gUnknown_0203BCAC->field_7FB8[numMons].unk0 = 14; + gUnknown_0203BCAC->field_7FB8[numMons].unk1 = i; + gUnknown_0203BCAC->field_7FB8[numMons].unk2 = 0; + numMons++; + } + } + + gUnknown_0203BCAC->info.field_71 = 0; + gUnknown_0203BCAC->info.field_70 = numMons + 1; + sub_81674BC(); +} + +void sub_81674BC(void) +{ + s16 var, var2; + + sub_816753C(gUnknown_0203BCAC->info.field_71, 0); + gUnknown_0203BCAC->field_7FB3 = 0; + gUnknown_0203BCAC->field_7FB4 = 1; + gUnknown_0203BCAC->field_7FB5 = 2; + + var = gUnknown_0203BCAC->info.field_71 + 1; + if (var >= gUnknown_0203BCAC->info.field_70) + var = 0; + + var2 = gUnknown_0203BCAC->info.field_71 - 1; + if (var2 < 0) + var2 = gUnknown_0203BCAC->info.field_70 - 1; + + sub_816753C(var, 1); + sub_816753C(var2, 2); +} + +void sub_816753C(s16 id1, u8 id2) +{ + u8 boxId = gUnknown_0203BCAC->field_7FB8[id1].unk0; + u8 monId = gUnknown_0203BCAC->field_7FB8[id1].unk1; + u8 r6 = gUnknown_0203BCAC->info.field_70; + bool8 r8 = FALSE; + + sub_81D2ED4(gUnknown_0203BCAC->field_7B4D[id2], gUnknown_0203BCAC->field_7B95[id2], boxId, monId, id1, r6, r8); + sub_81D2F78(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->unk7FB0, boxId, monId, id1, id2, r6, r8); + sub_81D3094(gUnknown_0203BCAC->field_304[id2], gUnknown_0203BCAC->field_4[id2], boxId, monId, id1, r6, r8); +} + +void sub_8167608(u8 arg0) +{ + u8 spriteId; + struct SpriteTemplate spriteTemplate; + struct SpriteSheet spriteSheet; + struct SpritePalette spritePal; + + if (gUnknown_0203BCAC->field_7B10 == 0xFF) + { + sub_81D31D0(&spriteSheet, &spriteTemplate, &spritePal); + spriteSheet.data = gUnknown_0203BCAC->field_304[arg0]; + spritePal.data = gUnknown_0203BCAC->field_4[arg0]; + gUnknown_0203BCAC->field_7B12 = LoadSpritePalette(&spritePal); + gUnknown_0203BCAC->field_7B14 = LoadSpriteSheet(&spriteSheet); + spriteId = CreateSprite(&spriteTemplate, 38, 104, 0); + gUnknown_0203BCAC->field_7B10 = spriteId; + if (spriteId == MAX_SPRITES) + { + FreeSpriteTilesByTag(100); + FreeSpritePaletteByTag(100); + gUnknown_0203BCAC->field_7B10 = 0xFF; + } + else + { + gUnknown_0203BCAC->field_7B10 = spriteId; + gSprites[gUnknown_0203BCAC->field_7B10].callback = sub_8168168; + gSprites[gUnknown_0203BCAC->field_7B10].pos2.y -= 34; + gUnknown_0203BCAC->field_7B18 = (void*)(OBJ_VRAM0 + (gUnknown_0203BCAC->field_7B14 * 32)); + gUnknown_0203BCAC->field_7B12 = (gUnknown_0203BCAC->field_7B12 * 16) + 0x100; + } + } + else + { + do {} while(0); // Surprised to see something like this? It's a very neat trick for generating the same assembly. It has no practical purpose, feel free to remove it. + DmaCopy16Defvars(3, gUnknown_0203BCAC->field_304[arg0], gUnknown_0203BCAC->field_7B18, 0x800); + LoadPalette(gUnknown_0203BCAC->field_4[arg0], gUnknown_0203BCAC->field_7B12, 32); + } +} + +void sub_8167760(void) +{ + u16 i, spriteId; + struct SpriteSheet spriteSheets[4]; + struct SpriteTemplate spriteTemplate; + struct SpritePalette spritePals[3]; + struct SpriteSheet spriteSheet2; + struct SpritePalette spritePal2; + + sub_81D321C(spriteSheets, &spriteTemplate, spritePals); + LoadSpriteSheets(spriteSheets); + LoadSpritePalettes(spritePals); + + for (i = 0; i < gUnknown_0203BCAC->info.field_70 - 1; i++) + { + spriteId = CreateSprite(&spriteTemplate, 226, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + gUnknown_0203BCAC->field_7B06[i] = spriteId; + gSprites[spriteId].data[0] = i; + gSprites[spriteId].callback = sub_8168180; + } + else + { + gUnknown_0203BCAC->field_7B06[i] = -1; + } + } + + spriteTemplate.tileTag = 103; + for (; i < 6; i++) + { + spriteId = CreateSprite(&spriteTemplate, 230, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + gUnknown_0203BCAC->field_7B06[i] = spriteId; + gSprites[spriteId].oam.size = 0; + } + else + { + gUnknown_0203BCAC->field_7B06[i] = -1; + } + } + + spriteTemplate.tileTag = 102; + spriteTemplate.callback = sub_81681B4; + spriteId = CreateSprite(&spriteTemplate, 222, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + gUnknown_0203BCAC->field_7B06[i] = spriteId; + gSprites[spriteId].oam.shape = 1; + gSprites[spriteId].oam.size = 2; + } + else + { + gUnknown_0203BCAC->field_7B06[i] = -1; + } + + sub_81D32B0(&spriteSheet2, &spritePal2); + LoadSpriteSheet(&spriteSheet2); + LoadSpritePalette(&spritePal2); +} + +bool8 sub_8167930(void) +{ + switch (gUnknown_0203BCAC->info.unk78) + { + case 0: + 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, 136 << 6, 0); + SetGpuReg(REG_OFFSET_DISPCNT, 28736); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2|BLDCNT_EFFECT_BLEND|BLDCNT_TGT2_BG1); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + break; + case 1: + gUnknown_0203BCA4 = Alloc(6656); + gUnknown_0203BCA0 = Alloc(1280); + gUnknown_0203BCA8 = Alloc(1280); + break; + case 2: + LZ77UnCompVram(gUnknown_085DFB60, gUnknown_0203BCA8); + break; + case 3: + LoadBgTiles(3, gUnknown_085DFA80, 224, 0); + break; + case 4: + LoadBgTilemap(3, gUnknown_0203BCA8, 1280, 0); + break; + case 5: + LoadPalette(gUnknown_085DFA60, 208, 32); + gUnknown_0203BCAC->field_7B0E = 0xFFB0; + break; + case 6: + LZ77UnCompVram(gUsePokeblockGraph_Gfx, gUnknown_0203BCA4); + break; + case 7: + LZ77UnCompVram(gUsePokeblockGraph_Tilemap, gUnknown_0203BCA0); + LoadPalette(gUsePokeblockGraph_Pal, 32, 32); + break; + case 8: + LoadBgTiles(1, gUnknown_0203BCA4, 6656, 160 << 2); + break; + case 9: + SetBgTilemapBuffer(1, gUnknown_0203BCA0); + CopyToBgTilemapBufferRect(1, gUsePokeblockNatureWin_Pal, 0, 13, 12, 4); + CopyBgTilemapBufferToVram(1); + break; + case 10: + LZ77UnCompVram(gUnknown_085DFC0C, gUnknown_0203BCAC->tilemapBuffer); + break; + case 11: + LoadBgTilemap(2, gUnknown_0203BCAC->tilemapBuffer, 1280, 0); + LoadPalette(gUnknown_086231E8, 48, 32); + LoadPalette(gUnknown_08623208, 240, 32); + sub_81D21DC(2); + break; + default: + gUnknown_0203BCAC->info.unk78 = 0; + return FALSE; + } + + gUnknown_0203BCAC->info.unk78++; + return TRUE; +} + +void sub_8167BA0(u16 arg0, u8 copyToVramMode) +{ + u8 partyIndex; + u8 nature; + u8 *str; + + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) + { + AddTextPrinterParameterized(0, 1, gUnknown_0203BCAC->field_7B95[arg0], 0, 1, 0, NULL); + partyIndex = sub_81672A4(gUnknown_0203BCAC->info.field_71); + nature = GetNature(&gPlayerParty[partyIndex]); + str = StringCopy(gUnknown_0203BCAC->info.field_7A, gText_NatureSlash); + str = StringCopy(str, gNatureNamePointers[nature]); + AddTextPrinterParameterized3(1, 1, 2, 1, gUnknown_085DFCC9, 0, gUnknown_0203BCAC->info.field_7A); + } + + if (copyToVramMode) + { + CopyWindowToVram(0, 3); + CopyWindowToVram(1, 3); + } + else + { + CopyWindowToVram(0, 2); + CopyWindowToVram(1, 2); + } +} + +static void sub_8167CA0(bool8 arg0) +{ + u16 var0; + bool32 r8, r4; + + if (arg0) + var0 = gUnknown_0203BCAC->field_7FB5; + else + var0 = gUnknown_0203BCAC->field_7FB4; + + sub_81D1F84( + &gUnknown_0203BCAC->field_7C58, + gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], + gUnknown_0203BCAC->field_7C58.unk14[var0]); + + r8 = (gUnknown_0203BCAC->info.field_71 ^ (gUnknown_0203BCAC->info.field_70 - 1)) ? 1 : 0; + if (arg0) + { + gUnknown_0203BCAC->field_7FB5 = gUnknown_0203BCAC->field_7FB4; + gUnknown_0203BCAC->field_7FB4 = gUnknown_0203BCAC->field_7FB3; + gUnknown_0203BCAC->field_7FB3 = var0; + gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB5; + + gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 == 0) + ? gUnknown_0203BCAC->info.field_70 - 1 + : gUnknown_0203BCAC->info.field_71 - 1; + + gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 == 0) + ? gUnknown_0203BCAC->info.field_70 - 1 + : gUnknown_0203BCAC->info.field_71 - 1; + } + else + { + gUnknown_0203BCAC->field_7FB4 = gUnknown_0203BCAC->field_7FB5; + gUnknown_0203BCAC->field_7FB5 = gUnknown_0203BCAC->field_7FB3; + gUnknown_0203BCAC->field_7FB3 = var0; + gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB4; + + gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1) + ? gUnknown_0203BCAC->info.field_71 + 1 + : 0; + + gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1) + ? gUnknown_0203BCAC->info.field_71 + 1 + : 0; + } + + r4 = (gUnknown_0203BCAC->info.field_71 ^ (gUnknown_0203BCAC->info.field_70 - 1)) ? 1 : 0; + sub_81D3520(gUnknown_0203BCAC->field_7B1C); + + if (!r8) + gUnknown_0203BCAC->info.unk74 = sub_8167EA4; + else if (!r4) + gUnknown_0203BCAC->info.unk74 = sub_8167FA4; + else + gUnknown_0203BCAC->info.unk74 = sub_8168048; +} + +static u8 sub_8167EA4(void) +{ + switch (gUnknown_0203BCAC->info.unk78) + { + case 0: + sub_8167608(gUnknown_0203BCAC->field_7FB3); + gUnknown_0203BCAC->info.unk78++; + break; + case 1: + sub_8167BA0(gUnknown_0203BCAC->field_7FB3, 0); + gUnknown_0203BCAC->info.unk78++; + break; + case 2: + if (!sub_81D3178(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7B0E)) + { + sub_816753C(gUnknown_0203BCAC->field_7B4C, gUnknown_0203BCAC->field_7FB6); + gUnknown_0203BCAC->info.unk78++; + } + break; + case 3: + sub_81D3464(gUnknown_0203BCAC->field_7B1C); + if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) + { + u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; + sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); + } + + gUnknown_0203BCAC->info.unk78 = 0; + return FALSE; + } + + return TRUE; +} + +static u8 sub_8167FA4(void) +{ + switch (gUnknown_0203BCAC->info.unk78) + { + case 0: + if (!sub_81D31A4(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7B0E)) + gUnknown_0203BCAC->info.unk78++; + break; + case 1: + sub_8167BA0(gUnknown_0203BCAC->field_7FB3, 0); + gUnknown_0203BCAC->info.unk78++; + break; + case 2: + sub_816753C(gUnknown_0203BCAC->field_7B4C, gUnknown_0203BCAC->field_7FB6); + gUnknown_0203BCAC->info.unk78++; + break; + case 3: + gUnknown_0203BCAC->info.unk78 = 0; + return FALSE; + } + + return TRUE; +} + +static u8 sub_8168048(void) +{ + switch (gUnknown_0203BCAC->info.unk78) + { + case 0: + sub_81D2074(&gUnknown_0203BCAC->field_7C58); + if (!sub_81D3150(&gUnknown_0203BCAC->field_7B0E)) + { + sub_8167608(gUnknown_0203BCAC->field_7FB3); + gUnknown_0203BCAC->info.unk78++; + } + break; + case 1: + sub_8167BA0(gUnknown_0203BCAC->field_7FB3, 0); + gUnknown_0203BCAC->info.unk78++; + break; + case 2: + if (!sub_81D3178(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7B0E)) + { + sub_816753C(gUnknown_0203BCAC->field_7B4C, gUnknown_0203BCAC->field_7FB6); + gUnknown_0203BCAC->info.unk78++; + } + break; + case 3: + sub_81D3464(gUnknown_0203BCAC->field_7B1C); + if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) + { + u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; + sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); + } + + gUnknown_0203BCAC->info.unk78 = 0; + return FALSE; + } + + return TRUE; +} + +void sub_8168168(struct Sprite *sprite) +{ + sprite->pos1.x = gUnknown_0203BCAC->field_7B0E + 38; +} + +void sub_8168180(struct Sprite *sprite) +{ + if (sprite->data[0] == gUnknown_0203BCAC->info.field_71) + StartSpriteAnim(sprite, 0); + else + StartSpriteAnim(sprite, 1); +} + +void sub_81681B4(struct Sprite *sprite) +{ + if (gUnknown_0203BCAC->info.field_71 == gUnknown_0203BCAC->info.field_70 - 1) + sprite->oam.paletteNum = IndexOfSpritePaletteTag(101); + else + sprite->oam.paletteNum = IndexOfSpritePaletteTag(102); +} + +void sub_81681F4(u8 monIndex) +{ + u8 sheen = GetMonData(&gPlayerParty[monIndex], MON_DATA_SHEEN); + + gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3] = (sheen != 255) + ? sheen / 29 + : 9; +} + +static void sub_8168248(void) +{ + struct CompressedSpriteSheet spriteSheet; + struct SpritePalette spritePalette; + + spritePalette = gUnknown_085DFDB8; + spriteSheet.data = gUsePokeblockCondition_Gfx; + spriteSheet.size = 0x800; + spriteSheet.tag = 1; + LoadCompressedSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); +} + +static void sub_8168294(void) +{ + u16 i; + s16 xDiff, xStart; + int yStart = 17; + int var = 8; + struct Sprite **sprites = gUnknown_0203BCAC->field_7B44; + const struct SpriteTemplate *template = &gUnknown_085DFDA0; + + for (i = 0, xDiff = 64, xStart = -96; i < 2; i++) + { + u8 spriteId = CreateSprite(template, i * xDiff + xStart, yStart, 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = var; + gSprites[spriteId].data[1] = (i * xDiff) | 0x20; + gSprites[spriteId].data[2] = i; + StartSpriteAnim(&gSprites[spriteId], i); + sprites[i] = &gSprites[spriteId]; + } + } +} + +static bool8 sub_8168328(void) +{ + switch (gUnknown_0203BCAC->info.unk78) + { + case 0: + sub_8168248(); + gUnknown_0203BCAC->info.unk78++; + return TRUE; + case 1: + sub_8168294(); + gUnknown_0203BCAC->info.unk78 = 0; + return FALSE; + } + + return FALSE; +} + +void sub_8168374(struct Sprite *sprite) +{ + s16 prevX = sprite->pos1.x; + + sprite->pos1.x += sprite->data[0]; + if ((prevX <= sprite->data[1] && sprite->pos1.x >= sprite->data[1]) + || (prevX >= sprite->data[1] && sprite->pos1.x <= sprite->data[1])) + { + sprite->pos1.x = sprite->data[1]; + sprite->callback = SpriteCallbackDummy; } } |