diff options
Diffstat (limited to 'src/field/pokeblock.c')
-rw-r--r-- | src/field/pokeblock.c | 1123 |
1 files changed, 0 insertions, 1123 deletions
diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c deleted file mode 100644 index e08a65f49..000000000 --- a/src/field/pokeblock.c +++ /dev/null @@ -1,1123 +0,0 @@ -#include "global.h" -#include "overworld.h" -#include "sprite.h" -#include "script.h" -#include "strings.h" -#include "task.h" -#include "scanline_effect.h" -#include "text.h" -#include "main.h" -#include "menu.h" -#include "field_fadetransition.h" -#include "palette.h" -#include "graphics.h" -#include "decompress.h" -#include "menu_helpers.h" -#include "battle.h" -#include "item_menu.h" -#include "item_use.h" -#include "item.h" -#include "constants/items.h" -#include "sound.h" -#include "constants/songs.h" -#include "safari_zone.h" -#include "event_data.h" -#include "pokeblock.h" -#include "ewram.h" - -struct UnkPokeblockStruct -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; -}; - -static EWRAM_DATA u8 gUnknown_02039244 = 0; -static EWRAM_DATA struct UnkPokeblockStruct gUnknown_02039248 = {0}; -static EWRAM_DATA u8 gUnknown_0203924C = 0; - -// function declarations - -// gUnknown_083F7EF4 -static void sub_810C508(u8); -static void sub_810C5C0(u8); -static void sub_810C748(u8); -static void sub_810C788(u8); -static void sub_810C854(u8); - -// gUnknown_083F7F24 -static void sub_810C610(u8); -static void sub_810C668(u8); - -// sub_810B6C0 -static bool8 sub_810B998(void); -static void sub_810BC98(void); -static void sub_810BD08(void); -static void sub_810BB0C(void); -static void sub_810BB30(void); -static void sub_810BC84(u8); - -// sub_810B96C -static void sub_810BF7C(u8); - -// sub_810BC84 -static void sub_810BDAC(bool8); - -// sub_810BF38 -static void sub_810C8D4(struct Sprite *); - -// sub_810BF7C -static void sub_810C0C8(u8); -static void sub_810C31C(u8); -static void sub_810C368(u8); - -// sub_810C0C8 -static void sub_810C1C8(u8, u8); -static void sub_810C23C(u8); - -// sub_810C368 -static void sub_810C40C(u8); - -// sub_810C540 -static void sub_810C5EC(u8); - -// sub_810C610 -static void sub_810C704(u8); - -static const u8 *gUnknown_03000758; - -// rodata - -#define GFX_TAG_POKEBLOCK_CASE 14800 - -const s8 gPokeblockFlavorCompatibilityTable[] = { - // Cool, Beauty, Cute, Smart, Tough - 0, 0, 0, 0, 0, // Hardy - 1, 0, 0, 0, -1, // Lonely - 1, 0, -1, 0, 0, // Brave - 1, -1, 0, 0, 0, // Adamant - 1, 0, 0, -1, 0, // Naughty - -1, 0, 0, 0, 1, // Bold - 0, 0, 0, 0, 0, // Docile - 0, 0, -1, 0, 1, // Relaxed - 0, -1, 0, 0, 1, // Impish - 0, 0, 0, -1, 1, // Lax - -1, 0, 1, 0, 0, // Timid - 0, 0, 1, 0, -1, // Hasty - 0, 0, 0, 0, 0, // Serious - 0, -1, 1, 0, 0, // Jolly - 0, 0, 1, -1, 0, // Naive - -1, 1, 0, 0, 0, // Modest - 0, 1, 0, 0, -1, // Mild - 0, 1, -1, 0, 0, // Quiet - 0, 0, 0, 0, 0, // Bashful - 0, 1, 0, -1, 0, // Rash - -1, 0, 0, 1, 0, // Calm - 0, 0, 0, 1, -1, // Gentle - 0, 0, -1, 1, 0, // Sassy - 0, -1, 0, 1, 0, // Careful - 0, 0, 0, 0, 0 // Quirky -}; - -void (*const gUnknown_083F7EA8[])(void) = { - sub_80A5B40, - c2_exit_to_overworld_2_switch, - sub_802E424, - c2_exit_to_overworld_2_switch -}; - -const u8 *const gPokeblockNames[] = { - NULL, - ContestStatsText_RedPokeBlock, - ContestStatsText_BluePokeBlock, - ContestStatsText_PinkPokeBlock, - ContestStatsText_GreenPokeBlock, - ContestStatsText_YellowPokeBlock, - ContestStatsText_PurplePokeBlock, - ContestStatsText_IndigoPokeBlock, - ContestStatsText_BrownPokeBlock, - ContestStatsText_LiteBluePokeBlock, - ContestStatsText_OlivePokeBlock, - ContestStatsText_GrayPokeBlock, - ContestStatsText_BlackPokeBlock, - ContestStatsText_WhitePokeBlock, - ContestStatsText_GoldPokeBlock -}; - -const struct MenuAction2 gUnknown_083F7EF4[] = { - {OtherText_Use, sub_810C508}, - {OtherText_Toss, sub_810C5C0}, - {gOtherText_CancelNoTerminator, sub_810C748}, - {OtherText_Use, sub_810C788}, - {OtherText_Use, sub_810C854}, -}; - -const u8 gUnknown_083F7F1C[] = {0, 1, 2}; -const u8 gUnknown_083F7F1F[] = {3, 2}; -const u8 gUnknown_083F7F21[] = {4, 2}; - -const struct YesNoFuncTable gUnknown_083F7F24 = {sub_810C610, sub_810C668}; - -const u8 UnreferencedData_083F7F2C[] = {0x16, 0x17, 0x18, 0x21, 0x2f}; - -const struct OamData gOamData_83F7F34 = { - .size = 3, - .priority = 2 -}; - -const union AnimCmd gSpriteAnim_83F7F3C[] = { - ANIMCMD_FRAME(.imageValue = 0, .duration = 0), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_83F7F44[] = { - gSpriteAnim_83F7F3C -}; - -const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] = { - AFFINEANIMCMD_FRAME(0, 0, -2, 2), - AFFINEANIMCMD_FRAME(0, 0, 2, 4), - AFFINEANIMCMD_FRAME(0, 0, -2, 4), - AFFINEANIMCMD_FRAME(0, 0, 2, 2), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7F70[] = { - gSpriteAffineAnim_83F7F48 -}; - -const struct CompressedSpriteSheet gUnknown_083F7F74 = { - gMenuPokeblockDevice_Gfx, - 0x800, - GFX_TAG_POKEBLOCK_CASE -}; - -const struct CompressedSpritePalette gUnknown_083F7F7C = { - gMenuPokeblockDevice_Pal, - GFX_TAG_POKEBLOCK_CASE -}; - -const struct SpriteTemplate gSpriteTemplate_83F7F84 = { - GFX_TAG_POKEBLOCK_CASE, - GFX_TAG_POKEBLOCK_CASE, - &gOamData_83F7F34, - gSpriteAnimTable_83F7F44, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy -}; - -const struct Pokeblock gUnknown_083F7F9C[] = { - { PBLOCK_CLR_RED, 20, 0, 0, 0, 0, 20}, - { PBLOCK_CLR_BLUE, 0, 20, 0, 0, 0, 20}, - { PBLOCK_CLR_PINK, 0, 0, 20, 0, 0, 20}, - { PBLOCK_CLR_GREEN, 0, 0, 0, 20, 0, 20}, - { PBLOCK_CLR_YELLOW, 0, 0, 0, 0, 20, 20} -}; - -// text - -static void sub_810B674(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTasks(); - UpdatePaletteFade(); -} - -static void sub_810B68C(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x7800), sizeof gBGTilemapBuffers[2]); -} - -static bool8 sub_810B6C0(void) -{ - u16 ime; - switch (gMain.state) - { - case 0: - ClearVideoCallbacks(); - sub_80F9368(); - REG_BG2CNT = BGCNT_SCREENBASE(15) | BGCNT_CHARBASE(2) | BGCNT_PRIORITY(2); - REG_BLDCNT = 0; - gMain.state++; - break; - case 1: - ScanlineEffect_Stop(); - gMain.state++; - break; - case 2: - ResetPaletteFade(); - gPaletteFade.bufferTransferDisabled = TRUE; - gMain.state++; - break; - case 3: - ResetSpriteData(); - gMain.state++; - break; - case 4: - if (gUnknown_02039244 != 2) - { - ResetTasks(); - } - gMain.state++; - break; - case 5: - Text_LoadWindowTemplate(&gWindowTemplate_81E6E34); - gMain.state++; - break; - case 6: - Text_LoadWindowTemplate(&gWindowTemplate_81E6E50); - gMain.state++; - break; - case 7: - MultistepInitMenuWindowBegin(&gWindowTemplate_81E6E34); - gMain.state++; - break; - case 8: - if (MultistepInitMenuWindowContinue()) - { - gMain.state++; - } - break; - case 9: - MultistepInitMenuWindowBegin(&gWindowTemplate_81E6E50); - gMain.state++; - break; - case 10: - if (MultistepInitMenuWindowContinue()) - { - ewram1FFFF = 0; - gMain.state++; - } - break; - case 11: - if (sub_810B998()) - { - gMain.state++; - } - break; - case 12: - ClearVerticalScrollIndicatorPalettes(); - LoadScrollIndicatorPalette(); - CreateVerticalScrollIndicators(TOP_ARROW, 0xb0, 0x08); - CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xb0, 0x98); - gMain.state++; - break; - case 13: - ewram1FFFE = sub_810BA50(0x38, 0x40, 0); - gMain.state++; - break; - case 14: - sub_810BC98(); - sub_810BD08(); - gMain.state++; - break; - case 15: - sub_810BB0C(); - sub_810BB30(); - sub_810BC84(gUnknown_02039248.unk1); - gMain.state++; - break; - case 16: - ime = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = ime; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - SetVBlankCallback(sub_810B68C); - REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG2_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP; - gMain.state++; - break; - case 17: - if (sub_8055870() != TRUE) - { - gMain.state++; - } - break; - case 18: - BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - gPaletteFade.bufferTransferDisabled = FALSE; - SetMainCallback2(sub_810B674); - return TRUE; - } - return FALSE; -} - -void sub_810B96C(void) -{ - do { - if (sub_810B6C0() == TRUE) - { - CreateTask(sub_810BF7C, 0); - break; - } - } while (sub_80F9344() != TRUE); -} - -static bool8 sub_810B998(void) -{ - switch (ewram1FFFF) - { - case 0: - LZDecompressVram(gMenuPokeblock_Gfx, BG_CHAR_ADDR(2)); - ewram1FFFF++; - break; - case 1: - LZDecompressWram(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]); - ewram1FFFF++; - break; - case 2: - LoadCompressedPalette(gMenuPokeblock_Pal, 0, 0xc0); - ewram1FFFF++; - break; - case 3: - LoadCompressedObjectPic(&gUnknown_083F7F74); - ewram1FFFF++; - break; - case 4: - LoadCompressedObjectPalette(&gUnknown_083F7F7C); - ewram1FFFF = 0; - return TRUE; - } - return FALSE; -} - -u8 sub_810BA50(s16 x, s16 y, u8 subpriority) -{ - return CreateSprite(&gSpriteTemplate_83F7F84, x, y, subpriority); -} - -void sub_810BA7C(u8 a0) -{ - gUnknown_02039244 = a0; - switch (gUnknown_02039244) - { - default: - gUnknown_03000758 = gUnknown_083F7F1C; - gUnknown_0203924C = sizeof gUnknown_083F7F1C; - break; - case 2: - gUnknown_03000758 = gUnknown_083F7F1F; - gUnknown_0203924C = sizeof gUnknown_083F7F1F; - break; - case 3: - gUnknown_03000758 = gUnknown_083F7F21; - gUnknown_0203924C = sizeof gUnknown_083F7F21; - break; - } -} - -void sub_810BADC(void) -{ - sub_810BA7C(2); - SetMainCallback2(sub_810B96C); -} - -void OpenPokeblockCaseOnFeeder(void) -{ - sub_810BA7C(3); - SetMainCallback2(sub_810B96C); -} - -#ifdef DEBUG -void debug_sub_8120F98(void) -{ - u8 i; - for (i=0; i<40 && gUnknown_083F7F9C[i].color != 0; i++) - { - gSaveBlock1.pokeblocks[i] = gUnknown_083F7F9C[i]; - } -} -#endif - -static void sub_810BB0C(void) -{ - BasicInitMenuWindow(&gWindowTemplate_81E6E34); - sub_8072BD8(ItemId_GetItem(ITEM_POKEBLOCK_CASE)->name, 2, 1, 0x48); -} - -static void sub_810BB30(void) -{ - BasicInitMenuWindow(&gWindowTemplate_81E6E34); - Menu_PrintText(gContestStatsText_Spicy, 2, 13); - Menu_PrintText(gContestStatsText_Dry, 2, 15); - Menu_PrintText(gContestStatsText_Sweet, 2, 17); - Menu_PrintText(gContestStatsText_Bitter, 8, 13); - Menu_PrintText(gContestStatsText_Sour, 8, 15); -} - -static void sub_810BB88(u8 a0) -{ - u8 i; - u8 y; - u8 *buf; - BasicInitMenuWindow(&gWindowTemplate_81E6E34); - for (i=a0; i<=a0+8; i++) - { - y = (i - a0) << 1; - if (i == gUnknown_02039248.unk2) - { - buf = sub_8072C74(gStringVar1, gContestStatsText_StowCase, 0x78, 0); - Menu_PrintText(gStringVar1, 15, y + 1); - if (i != a0 + 8) - { - Menu_EraseWindowRect(15, y + 3, 29, 18); - } - break; - } - buf = sub_8072C74(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[i].color], 0x5e, 0); - buf[0] = EXT_CTRL_CODE_BEGIN; - buf[1] = 0x14; - buf[2] = 0x06; - buf += 3; - ConvertIntToDecimalStringN(buf, sub_810C9B0(&gSaveBlock1.pokeblocks[i]), STR_CONV_MODE_RIGHT_ALIGN, 3); - Menu_PrintText(gStringVar1, 15, y + 1); - } -} - -static void sub_810BC84(u8 a0) -{ - sub_810BB88(a0); - sub_810BDAC(FALSE); -} - -static void sub_810BC98(void) -{ - u16 i, j; - struct Pokeblock buf; - for (i=0; i<39; i++) - { - for (j=i+1; j<40; j++) - { - if (gSaveBlock1.pokeblocks[i].color == 0) - { - buf = gSaveBlock1.pokeblocks[i]; - gSaveBlock1.pokeblocks[i] = gSaveBlock1.pokeblocks[j]; - gSaveBlock1.pokeblocks[j] = buf; - } - } - } -} - -static void sub_810BD08(void) -{ - u8 i; - gUnknown_02039248.unk2 = 0; - for (i=0; i<40; i++) - { - if (gSaveBlock1.pokeblocks[i].color != 0) - gUnknown_02039248.unk2++; - } - if (gUnknown_02039248.unk2 < 8) - { - gUnknown_02039248.unk3 = gUnknown_02039248.unk2; - } - else - { - gUnknown_02039248.unk3 = 8; - } - if (gUnknown_02039248.unk1 + 8 > gUnknown_02039248.unk2 && gUnknown_02039248.unk1 != 0) - { - gUnknown_02039248.unk1--; - } -} - -static void sub_810BD64(u16 a0, u16 a1) -{ - u8 i; - int y; - for (i=0; i<14; i++) - { - gBGTilemapBuffers[2][(2 * gUnknown_02039248.unk0 + 1) * 32 + (y = i + 15)] = a0; - gBGTilemapBuffers[2][(2 * gUnknown_02039248.unk0 + 2) * 32 + y] = a0; - } -} - -static void sub_810BDAC(bool8 flag) -{ - u8 i; - u16 v0; - if (!flag) - { - sub_810BD64(0x1005, 0x1014); - } - else - { - sub_810BD64(0x2005, 0x2014); - } - if (gUnknown_02039248.unk1) - { - SetVerticalScrollIndicators(TOP_ARROW, VISIBLE); - } - else - { - SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE); - } - if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2) - { - SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE); - } - else - { - SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE); - } - for (i=0; i<5; i++) - { - v0 = ((i % 3) << 6) + 0x1a1 + (i / 3) * 6; - if (gUnknown_02039248.unk0 + gUnknown_02039248.unk1 != gUnknown_02039248.unk2) - { - if (GetPokeblockData(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1], i + 1) > 0) - { - gBGTilemapBuffers[2][v0] = (i << 12) + 23; - gBGTilemapBuffers[2][v0 + 32] = (i << 12) + 24; - } - else - { - gBGTilemapBuffers[2][v0] = 15; - gBGTilemapBuffers[2][v0 + 32] = 15; - } - } - else - { - gBGTilemapBuffers[2][v0] = 15; - gBGTilemapBuffers[2][v0 + 32] = 15; - } - } - BasicInitMenuWindow(&gWindowTemplate_81E6E34); - if (gUnknown_02039248.unk0 + gUnknown_02039248.unk1 != gUnknown_02039248.unk2) - { - sub_8072C14(gStringVar1, sub_810C9E8(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1]), 16, 1); - Menu_PrintText(gStringVar1, 11, 17); - } - else - { - Menu_EraseWindowRect(11, 17, 12, 18); - } -} - -static void sub_810BF38(bool8 flag) -{ - PlaySE(SE_SELECT); - gSprites[ewram1FFFE].callback = sub_810C8D4; - sub_810BDAC(flag); -} - -static void sub_810BF7C(u8 taskId) -{ - if (!gPaletteFade.active) - { - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (gUnknown_02039248.unk0 != 0) - { - sub_810BD64(5, 20); - gUnknown_02039248.unk0--; - sub_810BF38(FALSE); - } - else if (gUnknown_02039248.unk1 != 0) - { - gUnknown_02039248.unk1--; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BF38(FALSE); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (gUnknown_02039248.unk0 != gUnknown_02039248.unk3) - { - sub_810BD64(5, 20); - gUnknown_02039248.unk0++; - sub_810BF38(FALSE); - } - else if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 != gUnknown_02039248.unk2) - { - gUnknown_02039248.unk1++; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BF38(FALSE); - } - } - else if (gMain.newKeys & SELECT_BUTTON) - { - if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 != gUnknown_02039248.unk2) - { - PlaySE(SE_SELECT); - sub_810BDAC(TRUE); - gTasks[taskId].data[0] = gUnknown_02039248.unk1 + gUnknown_02039248.unk0; - gTasks[taskId].func = sub_810C0C8; - } - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 == gUnknown_02039248.unk2) - { - gSpecialVar_Result = 0xffff; - sub_810C31C(taskId); - } - else - { - sub_810C368(taskId); - } - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gSpecialVar_Result = 0xffff; - sub_810C31C(taskId); - } - } -} - -static void sub_810C0C8(u8 taskId) -{ - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (gUnknown_02039248.unk0 != 0) - { - sub_810BD64(5, 20); - gUnknown_02039248.unk0--; - sub_810BF38(TRUE); - sub_810C1C8(taskId, 1); - } - else if (gUnknown_02039248.unk1 != 0) - { - sub_810C1C8(taskId, 0); - gUnknown_02039248.unk1--; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BF38(TRUE); - sub_810C1C8(taskId, 1); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (gUnknown_02039248.unk0 != gUnknown_02039248.unk3) - { - sub_810BD64(5, 20); - gUnknown_02039248.unk0++; - sub_810BF38(TRUE); - sub_810C1C8(taskId, 1); - } - else if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 != gUnknown_02039248.unk2) - { - sub_810C1C8(taskId, 0); - gUnknown_02039248.unk1++; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BF38(TRUE); - sub_810C1C8(taskId, 1); - } - } - else if (gMain.newKeys & A_BUTTON || gMain.newKeys & SELECT_BUTTON) - { - PlaySE(SE_SELECT); - sub_810C1C8(taskId, 0); - sub_810C23C(taskId); - gTasks[taskId].func = sub_810BF7C; - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_810C1C8(taskId, 0); - sub_810BDAC(0); - gTasks[taskId].func = sub_810BF7C; - } -} - -static void sub_810C1C8(u8 taskId, u8 flag) -{ - u8 i; - u32 x; - s16 y; - u16 v0 = 0x1005; - if (!flag) - { - v0 = 0x0005; - } - y = gTasks[taskId].data[0] - gUnknown_02039248.unk1; - if ((u16)y <= 8 && y != gUnknown_02039248.unk0) - { - for (i=0; i<14; i++) - { - gBGTilemapBuffers[2][(2 * y + 1) * 32 + (x = i + 15)] = v0; - gBGTilemapBuffers[2][(2 * y + 2) * 32 + x] = v0; - } - } -} - -static void sub_810C23C(u8 taskId) -{ - struct Pokeblock buf; - u8 selidx = gUnknown_02039248.unk1 + gUnknown_02039248.unk0; - if (selidx == gUnknown_02039248.unk2) - { - sub_810BDAC(FALSE); - } - else - { - buf = gSaveBlock1.pokeblocks[selidx]; - gSaveBlock1.pokeblocks[selidx] = gSaveBlock1.pokeblocks[gTasks[taskId].data[0]]; - gSaveBlock1.pokeblocks[gTasks[taskId].data[0]] = buf; - sub_810BB88(gUnknown_02039248.unk1); - sub_810BDAC(FALSE); - } -} - -static void sub_810C2B0(void) -{ - DestroyVerticalScrollIndicator(TOP_ARROW); - DestroyVerticalScrollIndicator(BOTTOM_ARROW); - BuyMenuFreeMemory(); -} - -static void sub_810C2C8(u8 taskId) -{ - if (!gPaletteFade.active) - { - if (gUnknown_02039244 == 3) - { - gFieldCallback = sub_8080990; - } - sub_810C2B0(); - SetMainCallback2(gUnknown_083F7EA8[gUnknown_02039244]); - DestroyTask(taskId); - } -} - -static void sub_810C31C(u8 taskId) -{ - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - if (gUnknown_02039244 > 1) - { - gSpecialVar_ItemId = ITEM_NONE; - } - gTasks[taskId].func = sub_810C2C8; -} - -static void sub_810C368(u8 taskId) -{ - int v0 = 0; - if (gUnknown_02039244 > 1) - v0 = 2; - StopVerticalScrollIndicators(TOP_ARROW); - StopVerticalScrollIndicators(BOTTOM_ARROW); - BasicInitMenuWindow(&gWindowTemplate_81E6E50); - Menu_DrawStdWindowFrame(7, v0 + 4, 13, 11); - Menu_PrintItemsReordered(8, v0 + 5, gUnknown_0203924C, gUnknown_083F7EF4, gUnknown_03000758); - InitMenu(0, 8, v0 + 5, gUnknown_0203924C, 0, 5); - gSpecialVar_ItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1; - gTasks[taskId].func = sub_810C40C; -} - -static void sub_810C40C(u8 taskId) -{ - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (Menu_GetCursorPos()) - { - PlaySE(SE_SELECT); - Menu_MoveCursor(-1); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (Menu_GetCursorPos() != gUnknown_0203924C - 1) - { - PlaySE(SE_SELECT); - Menu_MoveCursor(+1); - } - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - gUnknown_083F7EF4[gUnknown_03000758[Menu_GetCursorPos()]].func(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_810C748(taskId); - } -} - -static void sub_810C4C4(u8 taskId) -{ - if (!gPaletteFade.active) - { - sub_810C2B0(); - sub_8136130(&gSaveBlock1.pokeblocks[gSpecialVar_ItemId], sub_810B96C); - DestroyTask(taskId); - } -} - -static void sub_810C508(u8 taskId) -{ - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = sub_810C4C4; -} - -static void sub_810C540(u8 taskId) -{ - BasicInitMenuWindow(&gWindowTemplate_81E6E50); - Menu_DestroyCursor(); - Menu_EraseWindowRect(7, 4, 13, 11); - StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1].color]); - StringExpandPlaceholders(gStringVar4, gContestStatsText_ThrowAwayPrompt); - DisplayItemMessageOnField(taskId, gStringVar4, sub_810C5EC, 0); -} - -static void sub_810C5C0(u8 taskId) -{ - SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE); - gTasks[taskId].func = sub_810C540; -} - -static void sub_810C5EC(u8 taskId) -{ - DisplayYesNoMenu(7, 6, 1); - DoYesNoFuncWithChoice(taskId, &gUnknown_083F7F24); -} - -static void sub_810C610(u8 taskId) -{ - Menu_EraseWindowRect(7, 6, 13, 11); - PokeblockClearIfExists((gUnknown_02039248.unk0 + gUnknown_02039248.unk1)); - StringExpandPlaceholders(gStringVar4, gContestStatsText_WasThrownAway); - DisplayItemMessageOnField(taskId, gStringVar4, sub_810C704, 0); - sub_810BC98(); - sub_810BD08(); -} - -static void sub_810C668(u8 taskId) -{ - StartVerticalScrollIndicators(TOP_ARROW); - StartVerticalScrollIndicators(BOTTOM_ARROW); - if (gUnknown_02039248.unk2 > gUnknown_02039248.unk3 && gUnknown_02039248.unk1 + gUnknown_02039248.unk3 != gUnknown_02039248.unk2) - { - SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE); - } - BasicInitMenuWindow(&gWindowTemplate_81E6E50); - Menu_EraseWindowRect(7, 6, 13, 11); - Menu_EraseWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_810BF7C; -} - -static void sub_810C6DC(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - { - sub_810C668(taskId); - } -} - -static void sub_810C704(u8 taskId) -{ - BasicInitMenuWindow(&gWindowTemplate_81E6E34); - sub_810BC84(gUnknown_02039248.unk1); - SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE); - gTasks[taskId].func = sub_810C6DC; -} - -static void sub_810C748(u8 taskId) -{ - StartVerticalScrollIndicators(TOP_ARROW); - StartVerticalScrollIndicators(BOTTOM_ARROW); - Menu_DestroyCursor(); - Menu_EraseWindowRect(7, 4, 13, 11); - gTasks[taskId].func = sub_810BF7C; -} - -static void sub_810C788(u8 taskId) -{ - s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gSpecialVar_ItemId]); - StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color]); - PokeblockClearIfExists(gSpecialVar_ItemId); - gSpecialVar_ItemId = gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color << 8; - if (v0 == 0) - { - gSpecialVar_ItemId += 1; - } - if (v0 > 0) - { - gSpecialVar_ItemId += 2; - } - if (v0 < 0) - { - gSpecialVar_ItemId += 3; - } - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = sub_810C2C8; -} - -static void sub_810C854(u8 taskId) -{ - SafariZoneActivatePokeblockFeeder(gSpecialVar_ItemId); - StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color]); - gSpecialVar_Result = gSpecialVar_ItemId; - PokeblockClearIfExists(gSpecialVar_ItemId); - BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = sub_810C2C8; -} - -static void sub_810C8D4(struct Sprite *sprite) -{ - if (sprite->data[0] > 1) - { - sprite->data[0] = 0; - } - switch (sprite->data[0]) - { - case 0: - sprite->oam.affineMode = 1; - sprite->affineAnims = gSpriteAffineAnimTable_83F7F70; - InitSpriteAffineAnim(sprite); - sprite->data[0] = 1; - sprite->data[1] = 0; - break; - case 1: - if (++sprite->data[1] > 11) - { - sprite->oam.affineMode = 0; - sprite->data[0] = 0; - sprite->data[1] = 0; - FreeOamMatrix(sprite->oam.matrixNum); - sprite->callback = SpriteCallbackDummy; - } - break; - } -} - -static void ClearPokeblock(u8 pokeblockIdx) -{ - gSaveBlock1.pokeblocks[pokeblockIdx].color = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].spicy = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].dry = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].sweet = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].bitter = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].sour = 0; - gSaveBlock1.pokeblocks[pokeblockIdx].feel = 0; -} - -void ClearPokeblocks(void) -{ - u8 pokeblockIdx; - for (pokeblockIdx=0; pokeblockIdx<ARRAY_COUNT(gSaveBlock1.pokeblocks); pokeblockIdx++) - { - ClearPokeblock(pokeblockIdx); - } -} - -u8 sub_810C9B0(struct Pokeblock *pokeblock) -{ - u8 contestStat; - u8 maxRating; - u8 rating = GetPokeblockData(pokeblock, 1); - for (contestStat=1; contestStat<5; contestStat++) - { - maxRating = GetPokeblockData(pokeblock, contestStat + 1); - if (rating < maxRating) - { - rating = maxRating; - } - } - return rating; -} - -u8 sub_810C9E8(struct Pokeblock *pokeblock) -{ - u8 feel = GetPokeblockData(pokeblock, 6); - if (feel > 99) - feel = 99; - return feel; -} - -s8 GetFirstFreePokeblockSlot(void) -{ - u8 i; - for (i=0; i<ARRAY_COUNT(gSaveBlock1.pokeblocks); i++) - { - if (gSaveBlock1.pokeblocks[i].color == 0) - { - return i; - } - } - return -1; -} - -bool8 sub_810CA34(struct Pokeblock *pokeblock) -{ - s8 idx = GetFirstFreePokeblockSlot(); - if (idx == -1) - { - return FALSE; - } - gSaveBlock1.pokeblocks[idx] = *pokeblock; - return TRUE; -} - -bool8 PokeblockClearIfExists(u8 pokeblockIdx) -{ - if (gSaveBlock1.pokeblocks[pokeblockIdx].color == 0) - { - return FALSE; - } - ClearPokeblock(pokeblockIdx); - return TRUE; -} - -s16 GetPokeblockData(const struct Pokeblock *pokeblock, u8 field) -{ - if (field == PBLOCK_COLOR) - return pokeblock->color; - if (field == PBLOCK_SPICY) - return pokeblock->spicy; - if (field == PBLOCK_DRY) - return pokeblock->dry; - if (field == PBLOCK_SWEET) - return pokeblock->sweet; - if (field == PBLOCK_BITTER) - return pokeblock->bitter; - if (field == PBLOCK_SOUR) - return pokeblock->sour; - if (field == PBLOCK_FEEL) - return pokeblock->feel; - return 0; -} - -s16 PokeblockGetGain(u8 nature, const struct Pokeblock *pokeblock) -{ - u8 flavor; - s16 curGain; - s16 totalGain = 0; - for (flavor=0; flavor<5; flavor++) - { - curGain = GetPokeblockData(pokeblock, flavor + 1); - if (curGain > 0) - { - totalGain += curGain * gPokeblockFlavorCompatibilityTable[5 * nature + flavor]; - } - } - return totalGain; -} - -void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest) -{ - u8 color = GetPokeblockData(pokeblock, PBLOCK_COLOR); - StringCopy(dest, gPokeblockNames[color]); -} - -bool8 sub_810CB68(u8 nature, u8 *dest) -{ - u8 flavor; - for (flavor=0; flavor<5; flavor++) - { - if (PokeblockGetGain(nature, &gUnknown_083F7F9C[flavor]) > 0) - { - StringCopy(dest, gPokeblockNames[flavor + 1]); - return TRUE; - } - } - return FALSE; -} |