diff options
Diffstat (limited to 'src/field/item_menu.c')
-rw-r--r-- | src/field/item_menu.c | 4557 |
1 files changed, 0 insertions, 4557 deletions
diff --git a/src/field/item_menu.c b/src/field/item_menu.c deleted file mode 100644 index 959eb09ae..000000000 --- a/src/field/item_menu.c +++ /dev/null @@ -1,4557 +0,0 @@ -#include "global.h" -#include "berry.h" -#include "berry_tag_screen.h" -#include "data2.h" -#include "decompress.h" -#include "field_effect.h" -#include "field_map_obj_helpers.h" -#include "field_player_avatar.h" -#include "graphics.h" -#include "item.h" -#include "constants/items.h" -#include "item_menu.h" -#include "item_use.h" -#include "link.h" -#include "mail_data.h" -#include "main.h" -#include "map_name_popup.h" -#include "menu.h" -#include "menu_cursor.h" -#include "menu_helpers.h" -#include "money.h" -#include "palette.h" -#include "party_menu.h" -#include "player_pc.h" -#include "pokemon_menu.h" -#include "overworld.h" -#include "script.h" -#include "constants/songs.h" -#include "sound.h" -#include "sprite.h" -#include "strings.h" -#include "strings2.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "scanline_effect.h" -#include "menu_helpers.h" -#include "ewram.h" - -// External stuff -extern void gpu_pal_allocator_reset__manage_upper_four(void); -extern void SetVerticalScrollIndicatorPriority(); -extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); -extern void PauseVerticalScrollIndicator(); -extern u8 sub_80F9284(void); -extern void sub_808B5B4(); -extern u8 sub_80F92F4(); -extern void sub_80C9C7C(u8); -extern void pal_fill_black(void); -extern bool8 IsWeatherNotFadingIn(void); -extern u8 sub_80F931C(); -extern void sub_808A3F8(u8); -extern void Shop_FadeReturnToMartMenu(void); -extern void sub_80546B8(u8); -extern void sub_804E990(u8); -extern void sub_802E424(u8); -extern void sub_8064E2C(void); - -struct UnknownStruct2 -{ - u8 unk0; - u8 textLine; - u8 unk2; -}; - -struct UnknownStruct3 -{ - u8 unk0; - u8 unk1; - u8 unk2; -}; - -struct UnknownStruct4 -{ - u8 unk0; - u8 unk1; - u16 unk2; - const u8 *unk4; - TaskFunc unk8; -}; - -struct UnknownStruct5 -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; -}; - -struct UnknownStruct6 -{ - u8 unk0; -}; - -enum -{ - BAG_POCKET_ITEMS, // 0 - BAG_POCKET_POKE_BALLS, // 1 - BAG_POCKET_TMs_HMs, // 2 - BAG_POCKET_BERRIES, // 3 - BAG_POCKET_KEY_ITEMS, // 4 -}; - -enum -{ - RETURN_TO_FIELD_0, - RETURN_TO_BATTLE, - RETURN_TO_PKMN_LIST, - RETURN_TO_SHOP, - RETURN_TO_FIELD_4, - RETURN_TO_FIELD_5, - RETURN_TO_PC, - RETURN_TO_WALLY_BATTLE, -}; - -enum -{ - ITEM_ACTION_USE_0, // 0 - ITEM_ACTION_TOSS, // 1 - ITEM_ACTION_CANCEL_2, // 2 - ITEM_ACTION_REGISTER, // 3 - ITEM_ACTION_USE_4, // 4 - ITEM_ACTION_CANCEL_5, // 5 - ITEM_ACTION_GIVE, // 6 - ITEM_ACTION_CHECK_TAG, // 7 - ITEM_ACTION_NONE, // 8 - ITEM_ACTION_CONFIRM, // 9 -}; - -// ewram -EWRAM_DATA static struct UnknownStruct2 gUnknown_0203853C = {0}; -EWRAM_DATA static struct UnknownStruct3 gUnknown_02038540 = {0}; -EWRAM_DATA static struct UnknownStruct4 gUnknown_02038544 = {0}; -EWRAM_DATA static struct UnknownStruct5 gUnknown_02038550 = {0}; -EWRAM_DATA static struct UnknownStruct6 gUnknown_02038554 = {0}; // There are 3 bytes of padding after this, so I assume it's a struct -EWRAM_DATA static u8 gUnknown_02038558 = 0; -EWRAM_DATA static s8 sCurrentBagPocket = 0; -EWRAM_DATA static u8 gUnknown_0203855A = 0; -EWRAM_DATA static s8 gUnknown_0203855B = 0; -EWRAM_DATA static s8 gUnknown_0203855C = 0; -EWRAM_DATA u16 gSpecialVar_ItemId = 0; -EWRAM_DATA u8 gUnknown_02038560 = 0; -EWRAM_DATA u8 gUnknown_02038561 = 0; -EWRAM_DATA static u8 gUnknown_02038562 = 0; -EWRAM_DATA static u8 gUnknown_02038563 = 0; -EWRAM_DATA static u8 gUnknown_02038564 = 0; -EWRAM_DATA static u8 sPokeballSpriteId ALIGNED(4) = 0; // HACK: why is there a space before this variable? - -// bss -static u8 sPopupMenuSelection; -static u8 sReturnLocation; -static const u8 *sPopupMenuActionList; - -// common -void (*gFieldItemUseCallback)(u8) = NULL; -extern u16 gBattle_BG1_Y; -extern struct PocketScrollState gBagPocketScrollStates[]; -extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots -extern const u8 Event_NoRegisteredItem[]; - -extern const struct CompressedSpriteSheet sMaleBagSpriteSheet; -extern const struct CompressedSpriteSheet sFemaleBagSpriteSheet; -extern const struct CompressedSpritePalette sBagSpritePalette; - -const struct BagPocket gBagPockets[NUM_BAG_POCKETS] = -{ - {gSaveBlock1.bagPocket_Items, 20}, - {gSaveBlock1.bagPocket_PokeBalls, 16}, - {gSaveBlock1.bagPocket_TMHM, 64}, - {gSaveBlock1.bagPocket_Berries, 46}, - {gSaveBlock1.bagPocket_KeyItems, 20}, -}; - -static void HandlePopupMenuAction_UseOnField(u8); -static void HandlePopupMenuAction_Toss(u8); -static void sub_80A5F80(u8); -static void HandlePopupMenuAction_Register(u8); -static void HandlePopupMenuAction_UseInBattle(u8); -static void sub_80A7124(u8); -static void HandlePopupMenuAction_Give(u8); -static void HandlePopupMenuAction_CheckTag(u8); -static void HandlePopupMenuAction_Confirm(u8); - -static const struct MenuAction2 sItemPopupMenuActions[] = -{ - {OtherText_Use, HandlePopupMenuAction_UseOnField}, - {OtherText_Toss, HandlePopupMenuAction_Toss}, - {gOtherText_CancelNoTerminator, sub_80A5F80}, - {OtherText_Register, HandlePopupMenuAction_Register}, - {OtherText_Use, HandlePopupMenuAction_UseInBattle}, - {gOtherText_CancelNoTerminator, sub_80A7124}, - {OtherText_Give2, HandlePopupMenuAction_Give}, - {OtherText_CheckTag, HandlePopupMenuAction_CheckTag}, - {gOtherText_CancelWithTerminator, NULL}, - {OtherText_Confirm, HandlePopupMenuAction_Confirm}, -}; - -static const u8 sItemPopupMenuChoicesTable[][6] = -{ - [BAG_POCKET_ITEMS] = - { - ITEM_ACTION_USE_0, - ITEM_ACTION_TOSS, - ITEM_ACTION_GIVE, - ITEM_ACTION_CANCEL_2, - }, - - [BAG_POCKET_POKE_BALLS] = - { - ITEM_ACTION_GIVE, - ITEM_ACTION_TOSS, - ITEM_ACTION_NONE, - ITEM_ACTION_CANCEL_2, - }, - - [BAG_POCKET_TMs_HMs] = - { - ITEM_ACTION_USE_0, - ITEM_ACTION_NONE, - ITEM_ACTION_GIVE, - ITEM_ACTION_CANCEL_2, - }, - - [BAG_POCKET_BERRIES] = - { - ITEM_ACTION_CHECK_TAG, - ITEM_ACTION_USE_0, - ITEM_ACTION_TOSS, - ITEM_ACTION_NONE, - ITEM_ACTION_GIVE, - ITEM_ACTION_CANCEL_2 - }, - - [BAG_POCKET_KEY_ITEMS] = - { - ITEM_ACTION_USE_0, - ITEM_ACTION_NONE, - ITEM_ACTION_REGISTER, - ITEM_ACTION_CANCEL_2, - }, -}; - -const u8 gUnknown_083C16AE[][2] = -{ - {6, 2}, - {6, 2}, - {6, 2}, - {6, 2}, - {2, 0}, -}; - -const u8 gUnknown_083C16B8[] = {7, 9, 8, 2}; - -static void OnItemSelect_Field05(u8); -static void OnBagClose_Field0(u8); -static void OnBagClose_PkmnList(u8); -static void OnItemSelect_PkmnList(u8); -static void OnBagClose_Shop(u8); -static void OnItemSelect_Shop(u8); -static void OnBagClose_Field4(u8); -static void OnItemSelect_Field4(u8); -static void OnBagClose_Field5(u8); -static void OnBagClose_PC(u8); -static void OnItemSelect_PC(u8); -static void OnItemSelect_Battle(u8); -static void OnBagClose_Battle(u8); - -static const struct {TaskFunc onItemSelect; TaskFunc onBagClose;} gUnknown_083C16BC[] = -{ - [RETURN_TO_FIELD_0] = {OnItemSelect_Field05, OnBagClose_Field0}, - [RETURN_TO_BATTLE] = {OnItemSelect_Battle, OnBagClose_Battle}, - [RETURN_TO_PKMN_LIST] = {OnItemSelect_PkmnList, OnBagClose_PkmnList}, - [RETURN_TO_SHOP] = {OnItemSelect_Shop, OnBagClose_Shop}, - [RETURN_TO_FIELD_4] = {OnItemSelect_Field4, OnBagClose_Field4}, - [RETURN_TO_FIELD_5] = {OnItemSelect_Field05, OnBagClose_Field5}, - [RETURN_TO_PC] = {OnItemSelect_PC, OnBagClose_PC}, -}; - -static void sub_80A5E60(u8); -static void sub_80A5E90(u8); - -static const struct YesNoFuncTable gUnknown_083C16F4 = {sub_80A5E60, sub_80A5E90}; - -static void sub_80A65AC(u8); -static void sub_80A6618(u8); - -const struct YesNoFuncTable gUnknown_083C16FC = {sub_80A65AC, sub_80A6618}; - -void sub_80A34E8(void); -static bool8 LoadBagGraphicsMultistep(void); -static void sub_80A362C(void); -static void sub_80A3740(void); -static void sub_80A396C(u16 *, u8, u8, u8); -static void sub_80A39B8(u16 *, u8); -static void sub_80A39E4(u16 *, u8, u8, s8); -static void DrawPocketIndicatorDots(u16 *, u8); -static void SortItemSlots(struct BagPocket); -static void UpdateAllBagPockets(void); -static void sub_80A3D24(u8); -static void sub_80A3D40(void); -static void RemoveSelectIconFromRegisteredItem(void); -static void sub_80A48E8(u16, int, int); -static void ItemListMenu_InitDescription(s16); -static void ItemListMenu_ChangeDescription(s16, int); -static void sub_80A4F68(u8); -static void sub_80A50C8(u8); -static void sub_80A5AE4(u8); -static void sub_80A5BF8(u8); -static void Task_CallItemUseOnFieldCallback(u8); -static void sub_80A6444(u8); -static void sub_80A648C(u8); -static void Task_BuyHowManyDialogueHandleInput(u8); -static void BuyMenuPrintItemQuantityAndPrice(u8); -static void BuyMenuDisplayMessage(u16, u16); -static void sub_80A683C(void); -static void sub_80A6870(u16, u8); -static void sub_80A699C(void); -static void sub_80A7230(u8); -static void ItemListMenu_InitMenu(void); -static void sub_80A73C0(void); -static void sub_80A73F0(void); -static void sub_80A73FC(void); -static void sub_80A740C(void); -static void sub_80A7420(void); -static void sub_80A751C(void); -static void sub_80A7528(u8); -static void sub_80A7590(void); -static void sub_80A75E4(void); -static void sub_80A7630(void); -static void sub_80A763C(void); -static void sub_80A76A0(void); -static void sub_80A770C(void); -static void DisplayCannotUseItemMessage(int, const u8 *, TaskFunc, int); -static void sub_80A7768(void); -static void sub_80A7828(void); -static void sub_80A7834(int, int); -static bool32 sub_80A78A0(void); -static void sub_80A78B8(void); -static bool32 sub_80A78C4(void); -static void sub_80A78E8(void); -static int sub_80A78F4(void); -static void sub_80A7918(void); -static int sub_80A7924(void); -static int sub_80A7958(void); -static void sub_80A7970(void); -static void sub_80A797C(void); -static int sub_80A7988(void); -static void sub_80A79B4(struct Sprite *); -static void sub_80A79EC(struct Sprite *); -static void sub_80A7A94(struct Sprite *); -static void sub_80A7AE4(struct Sprite *); -static void CreateBagSprite(void); -static void sub_80A7B6C(struct Sprite *); -static void CreateBagPokeballSprite(u8); -static void sub_80A7C64(void); - -static void sub_80A3118(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTasks(); - sub_80A740C(); - UpdatePaletteFade(); -} - -static void sub_80A3134(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - DmaCopy16Defvars(3, gBGTilemapBuffers[1], (void *)(VRAM + 0x2000), 0x800); - DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x6000), 0x800); -} - -static bool8 SetupBagMultistep(void) -{ - u32 index; - u16 savedIme; - - switch (gMain.state) - { - case 0: - ClearVideoCallbacks(); - sub_80A34E8(); - gMain.state++; - break; - case 1: - ScanlineEffect_Stop(); - gMain.state++; - break; - case 2: - gpu_pal_allocator_reset__manage_upper_four(); - gMain.state++; - break; - case 3: - ClearBGTilemapBuffers(); - ewramBagSetupStep = 0; - gMain.state++; - break; - case 4: - ResetPaletteFade(); - gPaletteFade.bufferTransferDisabled = TRUE; - gMain.state++; - break; - case 5: - ResetSpriteData(); - gMain.state++; - break; - case 6: - if (LoadBagGraphicsMultistep() == FALSE) - break; - gMain.state++; - break; - case 7: - Text_LoadWindowTemplate(&gWindowTemplate_81E6DFC); - gMain.state++; - break; - case 8: - MultistepInitMenuWindowBegin(&gWindowTemplate_81E6DFC); - gMain.state++; - break; - case 9: - if (!MultistepInitMenuWindowContinue()) - break; - gMain.state++; - break; - case 10: - ClearVerticalScrollIndicatorPalettes(); - LoadScrollIndicatorPalette(); - CreateVerticalScrollIndicators(TOP_ARROW, 172, 12); - CreateVerticalScrollIndicators(BOTTOM_ARROW, 172, 148); - CreateVerticalScrollIndicators(LEFT_ARROW, 28, 88); - CreateVerticalScrollIndicators(RIGHT_ARROW, 100, 88); - SetVerticalScrollIndicatorPriority(TOP_ARROW, 2); - SetVerticalScrollIndicatorPriority(BOTTOM_ARROW, 2); - SetVerticalScrollIndicatorPriority(LEFT_ARROW, 2); - SetVerticalScrollIndicatorPriority(RIGHT_ARROW, 2); - if (sReturnLocation == RETURN_TO_FIELD_4 || sReturnLocation == RETURN_TO_FIELD_5) - { - SetVerticalScrollIndicators(LEFT_ARROW, INVISIBLE); - SetVerticalScrollIndicators(RIGHT_ARROW, INVISIBLE); - } - gMain.state++; - break; - case 11: - gUnknown_0203855A = 16; - sub_80A39B8(gBGTilemapBuffers[2], sCurrentBagPocket + 1); - DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket); - UpdateAllBagPockets(); - SortItemSlots(gBagPockets[2]); - SortItemSlots(gBagPockets[3]); - sub_80A3D40(); - gCurrentBagPocketItemSlots = gBagPockets[sCurrentBagPocket].itemSlots; - sub_80A362C(); - gMain.state++; - break; - case 12: - sub_80A48E8(0xFFFF, 0, 7); - index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - ItemListMenu_InitDescription(gCurrentBagPocketItemSlots[index].itemId); - ItemListMenu_InitMenu(); - gUnknown_0203855B = sCurrentBagPocket + 1; - gUnknown_0203855C = 0; - gMain.state++; - break; - case 13: - CreateBagSprite(); - CreateBagPokeballSprite(0); - sub_80A3740(); - gMain.state++; - break; - case 14: - savedIme = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = savedIme; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - gPaletteFade.bufferTransferDisabled = FALSE; - gMain.state++; - break; - case 15: - if (sub_8055870() == TRUE) - break; - gMain.state++; - break; - case 16: - SetVBlankCallback(sub_80A3134); - SetMainCallback2(sub_80A3118); - sub_80A751C(); - sub_80A7630(); - sub_80A770C(); - sub_80A7828(); - sub_80A78B8(); - return TRUE; - } - return FALSE; -} - -static bool8 sub_80A34B4(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - sPopupMenuSelection = 0; - ResetTasks(); - return TRUE; - } - if (sub_80F9344() == TRUE) - break; - } - return FALSE; -} - - -void sub_80A34E8(void) -{ - sub_80F9368(); - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(12) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(4) | BGCNT_16COLOR | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; - REG_BLDCNT = 0; -} - -static bool8 LoadBagGraphicsMultistep(void) -{ - switch (ewramBagSetupStep) - { - case 0: - LZDecompressVram(gBagScreen_Gfx, (void *)(VRAM + 0x4000)); - ewramBagSetupStep++; - break; - case 1: - CpuCopy16(gUnknown_08E77004, gBGTilemapBuffers[2], 0x800); - ewramBagSetupStep++; - break; - case 2: - if (gSaveBlock2.playerGender == MALE || sReturnLocation == RETURN_TO_WALLY_BATTLE) - LoadCompressedPalette(gBagScreenMale_Pal, 0, 64); - else - LoadCompressedPalette(gBagScreenFemale_Pal, 0, 64); - ewramBagSetupStep++; - break; - case 3: - if (gSaveBlock2.playerGender == MALE || sReturnLocation == RETURN_TO_WALLY_BATTLE) - LoadCompressedObjectPic(&sMaleBagSpriteSheet); - else - LoadCompressedObjectPic(&sFemaleBagSpriteSheet); - ewramBagSetupStep++; - break; - case 4: - LoadCompressedObjectPalette(&sBagSpritePalette); - ewramBagSetupStep = 0; - return TRUE; - } - return FALSE; -} - -static void sub_80A362C(void) -{ - u8 i; - - for (i = 0; i < 5; i++) - { - u8 r3; - - if (sReturnLocation == RETURN_TO_FIELD_5) - r3 = gBagPocketScrollStates[i].numSlots - 1; - else - r3 = gBagPocketScrollStates[i].numSlots; - - if (gBagPocketScrollStates[i].scrollTop != 0) - { - if (gBagPocketScrollStates[i].scrollTop + gBagPocketScrollStates[i].cursorMax > r3) - gBagPocketScrollStates[i].scrollTop = r3 - gBagPocketScrollStates[i].cursorMax; - } - else - { - if (gBagPocketScrollStates[i].cursorPos > r3) - gBagPocketScrollStates[i].cursorPos = r3; - } - } -} - -void ResetBagScrollPositions(void) -{ - u16 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - { - gBagPocketScrollStates[i].cursorPos = 0; - gBagPocketScrollStates[i].scrollTop = 0; - gBagPocketScrollStates[i].numSlots = 0; - gBagPocketScrollStates[i].cursorMax = 0; - } - sCurrentBagPocket = 0; -} - -static void sub_80A36B8(u16 *a, u8 b, u8 c, u8 d, u8 e) -{ - u16 i; - u16 j; - - for (i = c; i <= c + e; i++) - { - for (j = b; j <= b + d; j++) - { - u32 index = j + i * 32; - - a[index] = 0; - } - } -} - -void ClearBag(void) -{ - u16 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity); - ResetBagScrollPositions(); -} - -static void sub_80A3740(void) -{ - const u16 colors[2] = {RGB(14, 15, 16), RGB_WHITE}; - - LoadPalette(&colors[1], 0xD1, sizeof(colors[1])); - LoadPalette(&colors[0], 0xD8, sizeof(colors[0])); -} - -static void sub_80A3770(void) -{ - if (sReturnLocation == RETURN_TO_FIELD_0) - { - sPopupMenuActionList = sItemPopupMenuChoicesTable[sCurrentBagPocket]; - if (sCurrentBagPocket != BAG_POCKET_BERRIES) - gUnknown_02038564 = 4; - else - gUnknown_02038564 = 6; - } -} - -static void sub_80A37C0(u8 taskId) -{ - gTasks[taskId].func = sub_80A50C8; - StartVerticalScrollIndicators(TOP_ARROW); - StartVerticalScrollIndicators(BOTTOM_ARROW); - StartVerticalScrollIndicators(LEFT_ARROW); - StartVerticalScrollIndicators(RIGHT_ARROW); -} - -static void sub_80A37F8(u8 taskId) -{ - u8 r5 = gUnknown_0203855A; - - if (r5 < 16) - { - gUnknown_0203855A++; - sub_80A396C(gBGTilemapBuffers[2], r5, gUnknown_0203855A, 0x4F); - sub_80A39E4(gBGTilemapBuffers[2], sCurrentBagPocket + 1, gUnknown_0203855A / 2, gTasks[taskId].data[5]); - gUnknown_02038558 = 1; - sub_80A48E8(taskId, r5 / 2, gUnknown_0203855A / 2 - 1); - gUnknown_02038558 = 0; - return; - } - - if (gLinkOpen == TRUE) - { - u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - - ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, gUnknown_02038562); - gUnknown_02038562++; - } - else - { - while (gUnknown_02038562 < 3) - { - u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - - ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, gUnknown_02038562); - gUnknown_02038562++; - } - } - if (gUnknown_02038562 == 3) - { - gUnknown_0203855A = 16; - gUnknown_0203855B = sCurrentBagPocket + 1; - sub_80A37C0(FindTaskIdByFunc(sub_80A4F68)); - DestroyTask(taskId); - ItemListMenu_InitMenu(); - SetVerticalScrollIndicators(LEFT_ARROW, VISIBLE); - SetVerticalScrollIndicators(RIGHT_ARROW, VISIBLE); - } -} - -static void sub_80A3954(u16 *a) -{ - CpuCopy16(gUnknown_08E77004, a, 0x800); -} - -static void sub_80A396C(u16 *a, u8 b, u8 c, u8 d) -{ - u16 *dst = a + 14 + (b + 2) * 32; - u16 i; - - while (c > b++) - { - for (i = 0; i < 15; i++) - dst[i] = d; - dst += 32; - } -} - -static void sub_80A39B8(u16 *a, u8 b) -{ - u8 var = b * 2; - - sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2); -} - -static void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) -{ - u16 r2 = b * 2; - u16 r7; - - if (d == -1) - { - r7 = (b + 1) * 2; - if (b == 5) - r7 = 2; - - sub_809D104(a, 4, 10, gUnknown_08E96EC8, 8 - c, r2, c, 2); - sub_809D104(a, c + 4, 10, gUnknown_08E96EC8, 0, r7, 8 - c, 2); - } - else if (d == 1) - { - r7 = (b - 1) * 2; - if (b == 1) - r7 = 10; - - sub_809D104(a, 4, 10, gUnknown_08E96EC8, c, r7, 8 - c, 2); - sub_809D104(a, 12 - c, 10, gUnknown_08E96EC8, 0, r2, c, 2); - } -} - -// Draws dots under the bag sprite, showing which pocket is selected -static void DrawPocketIndicatorDots(u16 *tileMapBuffer, u8 selectedPocket) -{ - u8 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - { - if (i == selectedPocket) - tileMapBuffer[0x125 + i] = 0x107D; - else - tileMapBuffer[0x125 + i] = 0x107C; - } -} - -static void ChangePocket(u16 *tileMapBuffer, s8 delta) -{ - u8 taskId; - - sCurrentBagPocket += delta; - // Wrap around - if (sCurrentBagPocket >= NUM_BAG_POCKETS) - sCurrentBagPocket = 0; - if (sCurrentBagPocket < 0) - sCurrentBagPocket = NUM_BAG_POCKETS - 1; - - sub_80A76A0(); - sub_80A7590(); - gCurrentBagPocketItemSlots = gBagPockets[sCurrentBagPocket].itemSlots; - sub_80A3D24(sCurrentBagPocket); - gUnknown_0203855A = 0; - sub_80A3954(tileMapBuffer); - sub_80A396C(tileMapBuffer, 0, 16, 3); - sub_80A39B8(tileMapBuffer, 0); - gUnknown_0203855B = 6; - gUnknown_02038562 = 0; - taskId = FindTaskIdByFunc(sub_80A37F8); - if (taskId == 0xFF) - taskId = CreateTask(sub_80A37F8, 8); - gTasks[taskId].data[5] = delta; -} - -static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b) -{ - struct ItemSlot temp = *a; - - *a = *b; - *b = temp; -} - -static void RemoveEmptyItemSlots(struct BagPocket pocket) -{ - u16 i; - u16 j; - - for (i = 0; i < pocket.capacity - 1; i++) - { - for (j = i + 1; j < pocket.capacity; j++) - { - if (pocket.itemSlots[i].quantity == 0) - SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]); - } - } -} - -static void SortItemSlots(struct BagPocket pocket) -{ - u16 i; - u16 j; - - for (i = 0; i < pocket.capacity; i++) - { - for (j = i + 1; j < pocket.capacity; j++) - { - if (pocket.itemSlots[i].quantity != 0 && pocket.itemSlots[j].quantity != 0 - && pocket.itemSlots[i].itemId > pocket.itemSlots[j].itemId) - SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]); - } - } -} - -static void UpdateBagPocket(u8 pocketNum) -{ - u16 i; - - gBagPocketScrollStates[pocketNum].numSlots = 0; - for (i = 0; i < gBagPockets[pocketNum].capacity; i++) - { - if (gBagPockets[pocketNum].itemSlots[i].quantity != 0) - gBagPocketScrollStates[pocketNum].numSlots++; - } - RemoveEmptyItemSlots(gBagPockets[pocketNum]); -} - -static void UpdateAllBagPockets(void) -{ - u8 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - UpdateBagPocket(i); -} - -static void sub_80A3D24(u8 pocketNum) -{ - if (gBagPocketScrollStates[pocketNum].numSlots >= 7) - gBagPocketScrollStates[pocketNum].cursorMax = 7; - else - gBagPocketScrollStates[pocketNum].cursorMax = gBagPocketScrollStates[pocketNum].numSlots; -} - -static void sub_80A3D40(void) -{ - u8 i; - - for (i = 0; i < NUM_BAG_POCKETS; i++) - sub_80A3D24(i); -} - -static void sub_80A3D5C(u8 taskId) -{ - u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - - gCurrentBagPocketItemSlots[index].quantity -= gTasks[taskId].data[1]; - if (gCurrentBagPocketItemSlots[index].quantity == 0) // item slot will be removed if the quantity is zero - { - // Un-register the item if registered - if (gSaveBlock1.registeredItem == gCurrentBagPocketItemSlots[index].itemId) - { - RemoveSelectIconFromRegisteredItem(); - gSaveBlock1.registeredItem = ITEM_NONE; - } - - gCurrentBagPocketItemSlots[index].itemId = ITEM_NONE; - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 7 == gBagPocketScrollStates[sCurrentBagPocket].numSlots - && gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) - gBagPocketScrollStates[sCurrentBagPocket].scrollTop--; - UpdateBagPocket(sCurrentBagPocket); - } - sub_80A3D24(sCurrentBagPocket); -} - -void sub_80A3E0C(void) -{ - u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - - if (gCurrentBagPocketItemSlots[index].quantity == 0) - { - gCurrentBagPocketItemSlots[index].itemId = 0; - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 7 == gBagPocketScrollStates[sCurrentBagPocket].numSlots - && gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) - gBagPocketScrollStates[sCurrentBagPocket].scrollTop--; - UpdateBagPocket(sCurrentBagPocket); - } - sub_80A3D24(sCurrentBagPocket); -} - -static void nullsub_16(void) -{ -} - -static void sub_80A3E70(u8 a, u8 b) -{ - struct ItemSlot temp = gCurrentBagPocketItemSlots[a]; - - gCurrentBagPocketItemSlots[a] = gCurrentBagPocketItemSlots[b]; - gCurrentBagPocketItemSlots[b] = temp; -} - -static void sub_80A3E90(u8 taskId) -{ - PlaySE(SE_SELECT); - nullsub_16(); - sub_80A3E70( - gTasks[taskId].data[10] - 1, - gBagPocketScrollStates[sCurrentBagPocket].cursorPos + gBagPocketScrollStates[sCurrentBagPocket].scrollTop); - gTasks[taskId].data[10] = 0; - sub_80A763C(); - sub_80A7528(0); - ItemListMenu_InitMenu(); -} - -static void sub_80A3EF4(u8 taskId) -{ - u8 r2; - - PlaySE(SE_SELECT); - nullsub_16(); - r2 = gTasks[taskId].data[10] - gBagPocketScrollStates[sCurrentBagPocket].scrollTop - 1; - gTasks[taskId].data[10] = 0; - if (r2 < 8) - sub_80A48E8(taskId, r2, r2); - sub_80A7528(0); -} - -static void sub_80A3F50(u8 taskId) -{ - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A7528(1); -} - -void sub_80A3FA0(u16 *a, u8 b, u8 c, u8 d, u8 e, u16 f) -{ - s16 i; - s16 j; - - for (i = c; i < c + e; i++) - { - for (j = b; j < b + d; j++) - { - u32 index = j + i * 32; - - a[index] = f; - } - } -} - -static void sub_80A4008(u16 *a, u8 b, u8 c, u8 d, u8 e) -{ - sub_80A3FA0(a, b, c, d, e, 1); -} - -static void DrawSelectIcon(u32 itemPos) -{ - u16 *ptr1 = gBGTilemapBuffers[2] + 0x5A; - - ptr1 += itemPos * 64; - ptr1[0] = 0x5A; - ptr1[1] = 0x5B; - ptr1[2] = 0x5C; - ptr1[32] = 0x6A; - ptr1[33] = 0x6B; - ptr1[34] = 0x6C; -} - -static void MoveSelectIcon(u8 itemPos) -{ - u16 i; - u16 *ptr; - - ptr = gBGTilemapBuffers[2] + 0x5A; - for (i = 0; i < 16; i++) - { - ptr[0] = 0x4F; - ptr[1] = 0x4F; - ptr[2] = 0x4F; - ptr += 32; - } - - ptr = gBGTilemapBuffers[2] + 0x5A + itemPos * 64; - ptr[0] = 0x5A; - ptr[1] = 0x5B; - ptr[2] = 0x5C; - ptr[32] = 0x6A; - ptr[33] = 0x6B; - ptr[34] = 0x6C; -} - -static void EraseSelectIcon(u8 itemPos) -{ - u16 *ptr = gBGTilemapBuffers[2] + 0x5A; - - ptr += itemPos * 64; - ptr[0] = 0x4F; - ptr[1] = 0x4F; - ptr[2] = 0x4F; - ptr[32] = 0x4F; - ptr[33] = 0x4F; - ptr[34] = 0x4F; -} - -static void RemoveSelectIconFromRegisteredItem(void) -{ - u8 i; - - for (i = 0; i < 8; i++) - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - break; - if (gCurrentBagPocketItemSlots[gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i].itemId == gSaveBlock1.registeredItem) - { - EraseSelectIcon(i); - break; - } - } -} - -static void AddSelectIconToRegisteredItem(void) -{ - RemoveSelectIconFromRegisteredItem(); - MoveSelectIcon(gBagPocketScrollStates[sCurrentBagPocket].cursorPos); -} - -void sub_80A4164(u8 *dest, u16 value, enum StringConvertMode mode, u8 digits) -{ - *dest++ = CHAR_MULT_SIGN; - dest[0] = EXT_CTRL_CODE_BEGIN; - dest[1] = 0x14; - dest[2] = 6; - dest += 3; - ConvertIntToDecimalStringN(dest, value, mode, digits); -} - -void sub_80A418C(u16 value, enum StringConvertMode mode, u8 c, u8 d, u8 digits) -{ - sub_80A4164(gStringVar1, value, mode, digits); - Menu_PrintText(gStringVar1, c, d); -} - -static void sub_80A41D4(u8 taskId) -{ - sub_80A763C(); -} - -static void sub_80A41E0(u8 *a, u16 b, const u8 *c, u16 d, u8 e) -{ - a[0] = EXT_CTRL_CODE_BEGIN; - a[1] = 0x13; - a[2] = 8; - a += 3; - a = ConvertIntToDecimalStringN(a, b, STR_CONV_MODE_LEADING_ZEROS, 2); - a[0] = EXT_CTRL_CODE_BEGIN; - a[1] = 0x13; - a[2] = 0x18; - a += 3; - a = sub_8072C74(a, c, 0x78 - (e + 1) * 6, 0); - *a++ = CHAR_MULT_SIGN; - sub_8072C14(a, d, 0x78, 1); -} - -static u8 *sub_80A425C(u8 taskId, u8 *text, u8 c) -{ - if (gTasks[taskId].data[10] - gBagPocketScrollStates[sCurrentBagPocket].scrollTop - 1 == c) - { - text[0] = EXT_CTRL_CODE_BEGIN; - text[1] = 1; - text[2] = 2; - text += 3; - } - return text; -} - -static bool8 sub_80A42B0(u8 itemPos, int b) -{ - u8 r5; - u16 *ptr; - struct UnknownStruct3 *r8 = &gUnknown_02038540; - - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + itemPos > gBagPocketScrollStates[sCurrentBagPocket].numSlots) - return TRUE; - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + itemPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - if (sReturnLocation == RETURN_TO_FIELD_5) - return TRUE; - r5 = itemPos * 2 + 2; - sub_8072C74(gStringVar1, gOtherText_CloseBag, 0x78, 0); - Menu_PrintText(gStringVar1, 14, r5); - ptr = gBGTilemapBuffers[2] + 14 + r5 * 32; - ptr[0] = 0x4F; - ptr[1] = 0x4F; - ptr[32] = 0x4F; - ptr[33] = 0x4F; - if (itemPos == 7) - return TRUE; - if ((b == 1 && r8->unk2 != 0) || b == 2) - Menu_BlankWindowRect(14, r5 + 2, 29, 13); - else - Menu_BlankWindowRect(14, r5 + 2, 29, 17); - return TRUE; - } - return FALSE; -} - -static void sub_80A4380(u16 a, int b, int c, int d) -{ - u8 i; - - for (i = b; i <= c; i++) - { - u8 r4; - u8 r5; - u8 *text; - - if (sub_80A42B0(i, d) == TRUE) - break; - r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; - r5 = i * 2 + 2; - text = gStringVar1; - text = sub_80A425C(a, text, i); - text = sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x66, 0); - *text++ = CHAR_MULT_SIGN; - sub_8072C14(text, gCurrentBagPocketItemSlots[r4].quantity, 0x78, 1); - Menu_PrintText(gStringVar1, 14, r5); - } -} - -static void sub_80A444C(u16 a, int b, int c, int d) -{ - u8 i; - - for (i = b; i <= c; i++) - { - u8 r4; - u8 r5; - u8 *text; - - if (sub_80A42B0(i, d) == TRUE) - break; - r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; - r5 = i * 2 + 2; - text = gStringVar1; - text = sub_80A425C(a, text, i); -#if ENGLISH - sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x60, 0); -#else - sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x63, 0); -#endif - Menu_PrintText(gStringVar1, 14, r5); - if (gUnknown_02038558 != 0) - { - if (gCurrentBagPocketItemSlots[r4].itemId == gSaveBlock1.registeredItem) - DrawSelectIcon(i); - } - else - { - if (gCurrentBagPocketItemSlots[r4].itemId == gSaveBlock1.registeredItem) - MoveSelectIcon(i); - else - EraseSelectIcon(i); - } - } -} - -// more gBGTilemapBuffers shenanigans -#ifdef NONMATCHING -static void sub_80A4548(u16 a, int b, int c, int d) -{ - u8 i; - - for (i = b; i <= c; i++) - { - u8 r4; - u8 sp10; - u32 r5; - u8 *text; - - if (sub_80A42B0(i, d) == TRUE) - break; - r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; - sp10 = i * 2 + 2; - r5 = sp10 * 32 + 14; - text = gStringVar1; - text = sub_80A425C(a, text, i); - if (gCurrentBagPocketItemSlots[r4].itemId < 0x153) - { - const u8 *r2; - - gBGTilemapBuffers[2][r5 + 0] = 0x59; - gBGTilemapBuffers[2][r5 + 1] = 0x4F; - gBGTilemapBuffers[2][r5 + 32] = 0x69; - gBGTilemapBuffers[2][r5 + 33] = 0x4F; - r2 = gMoveNames[ItemIdToBattleMoveId(gCurrentBagPocketItemSlots[r4].itemId)]; - sub_80A41E0(text, gCurrentBagPocketItemSlots[r4].itemId - 288, r2, gCurrentBagPocketItemSlots[r4].quantity, 2); - } - else - { - const u8 *moveName; - - gBGTilemapBuffers[2][r5 + 0] = 0x105D; - gBGTilemapBuffers[2][r5 + 1] = 0x105E; - gBGTilemapBuffers[2][r5 + 32] = 0x106D; - gBGTilemapBuffers[2][r5 + 33] = 0x106E; - text[0] = EXT_CTRL_CODE_BEGIN; - text[1] = 0x13; - text[2] = 0x11; - text += 3; - text = ConvertIntToDecimalString(text, gCurrentBagPocketItemSlots[r4].itemId); - text[0] = EXT_CTRL_CODE_BEGIN; - text[1] = 0x13; - text[2] = 0x18; - text += 3; - moveName = gMoveNames[ItemIdToBattleMoveId(gCurrentBagPocketItemSlots[r4].itemId)]; - sub_8072C74(text, moveName, 0x78, 0); - } - Menu_PrintText(gStringVar1, 14, sp10); - } -} -#else -__attribute__((naked)) -static void sub_80A4548(u16 a, int b, int c, int d) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x14\n\ - str r2, [sp, 0x8]\n\ - str r3, [sp, 0xC]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x4]\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r8, r1\n\ - ldr r0, _080A456C @ =gBGTilemapBuffers + 0x1000\n\ - mov r9, r0\n\ - b _080A46C2\n\ - .align 2, 0\n\ -_080A456C: .4byte gBGTilemapBuffers + 0x1000\n\ -_080A4570:\n\ - ldr r1, _080A461C @ =gBagPocketScrollStates\n\ - ldr r0, _080A4620 @ =sCurrentBagPocket\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r4, [r0, 0x1]\n\ - add r4, r8\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - mov r1, r8\n\ - lsls r0, r1, 25\n\ - movs r3, 0x80\n\ - lsls r3, 18\n\ - adds r0, r3\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x10]\n\ - lsls r0, 5\n\ - adds r0, 0xE\n\ - adds r5, r0, 0\n\ - ldr r6, _080A4624 @ =gStringVar1\n\ - ldr r1, [sp, 0x4]\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - adds r1, r6, 0\n\ - mov r2, r8\n\ - bl sub_80A425C\n\ - adds r6, r0, 0\n\ - ldr r3, _080A4628 @ =gCurrentBagPocketItemSlots\n\ - mov r10, r3\n\ - ldr r0, [r3]\n\ - lsls r7, r4, 2\n\ - adds r3, r7, r0\n\ - ldrh r1, [r3]\n\ - movs r0, 0xA9\n\ - lsls r0, 1\n\ - cmp r1, r0\n\ - bhi _080A4634\n\ - lsls r0, r5, 1\n\ - add r0, r9\n\ - movs r1, 0x59\n\ - strh r1, [r0]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 1\n\ - add r0, r9\n\ - movs r2, 0x4F\n\ - strh r2, [r0]\n\ - adds r0, r5, 0\n\ - adds r0, 0x20\n\ - lsls r0, 1\n\ - add r0, r9\n\ - movs r1, 0x69\n\ - strh r1, [r0]\n\ - adds r0, r5, 0\n\ - adds r0, 0x21\n\ - lsls r0, 1\n\ - add r0, r9\n\ - strh r2, [r0]\n\ - ldrh r0, [r3]\n\ - bl ItemIdToBattleMoveId\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xD\n\ - adds r2, r0, 0\n\ - muls r2, r1\n\ - ldr r0, _080A462C @ =gMoveNames\n\ - adds r2, r0\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - adds r0, r7, r0\n\ - ldr r3, _080A4630 @ =0xfffffee0\n\ - adds r1, r3, 0\n\ - ldrh r3, [r0]\n\ - adds r1, r3\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - ldrh r3, [r0, 0x2]\n\ - movs r0, 0x2\n\ - str r0, [sp]\n\ - adds r0, r6, 0\n\ - bl sub_80A41E0\n\ - b _080A46AE\n\ - .align 2, 0\n\ -_080A461C: .4byte gBagPocketScrollStates\n\ -_080A4620: .4byte sCurrentBagPocket\n\ -_080A4624: .4byte gStringVar1\n\ -_080A4628: .4byte gCurrentBagPocketItemSlots\n\ -_080A462C: .4byte gMoveNames\n\ -_080A4630: .4byte 0xfffffee0\n\ -_080A4634:\n\ - lsls r0, r5, 1\n\ - add r0, r9\n\ - ldr r1, _080A46EC @ =0x0000105d\n\ - strh r1, [r0]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 1\n\ - add r0, r9\n\ - adds r1, 0x1\n\ - strh r1, [r0]\n\ - adds r0, r5, 0\n\ - adds r0, 0x20\n\ - lsls r0, 1\n\ - add r0, r9\n\ - adds r1, 0xF\n\ - strh r1, [r0]\n\ - adds r0, r5, 0\n\ - adds r0, 0x21\n\ - lsls r0, 1\n\ - add r0, r9\n\ - adds r1, 0x1\n\ - strh r1, [r0]\n\ - movs r0, 0xFC\n\ - strb r0, [r6]\n\ - movs r4, 0x13\n\ - strb r4, [r6, 0x1]\n\ - movs r0, 0x11\n\ - strb r0, [r6, 0x2]\n\ - adds r6, 0x3\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - adds r0, r7, r0\n\ - ldrh r1, [r0]\n\ - ldr r3, _080A46F0 @ =0xfffffeae\n\ - adds r1, r3\n\ - adds r0, r6, 0\n\ - bl ConvertIntToDecimalString\n\ - adds r6, r0, 0\n\ - movs r0, 0xFC\n\ - strb r0, [r6]\n\ - strb r4, [r6, 0x1]\n\ - movs r0, 0x18\n\ - strb r0, [r6, 0x2]\n\ - adds r6, 0x3\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - adds r0, r7, r0\n\ - ldrh r0, [r0]\n\ - bl ItemIdToBattleMoveId\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xD\n\ - muls r1, r0\n\ - ldr r0, _080A46F4 @ =gMoveNames\n\ - adds r1, r0\n\ - adds r0, r6, 0\n\ - movs r2, 0x78\n\ - movs r3, 0\n\ - bl sub_8072C74\n\ -_080A46AE:\n\ - ldr r0, _080A46F8 @ =gStringVar1\n\ - movs r1, 0xE\n\ - ldr r2, [sp, 0x10]\n\ - bl Menu_PrintText\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ -_080A46C2:\n\ - ldr r3, [sp, 0x8]\n\ - cmp r8, r3\n\ - bgt _080A46DA\n\ - mov r0, r8\n\ - ldr r1, [sp, 0xC]\n\ - bl sub_80A42B0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - beq _080A46DA\n\ - b _080A4570\n\ -_080A46DA:\n\ - add sp, 0x14\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\ - .align 2, 0\n\ -_080A46EC: .4byte 0x0000105d\n\ -_080A46F0: .4byte 0xfffffeae\n\ -_080A46F4: .4byte gMoveNames\n\ -_080A46F8: .4byte gStringVar1\n\ - .syntax divided\n"); -} -#endif - -static void sub_80A46FC(u16 a, int b, int c, int d) -{ - u8 i; - - for (i = b; i <= c; i++) - { - u8 r4; - u8 r5; - u8 *text; - register int var asm("r0"); - - if (sub_80A42B0(i, d) == TRUE) - break; - r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; - r5 = i * 2 + 2; - - var = 14 + r5 * 32; - gBGTilemapBuffers[2][var] = 0x59; - var += 32; - gBGTilemapBuffers[2][var] = 0x69; - - text = gStringVar1; - text = sub_80A425C(a, text, i); - CopyItemName(gCurrentBagPocketItemSlots[r4].itemId, gStringVar2); - sub_80A41E0(text, gCurrentBagPocketItemSlots[r4].itemId - 0x84, gStringVar2, gCurrentBagPocketItemSlots[r4].quantity, 3); - Menu_PrintText(gStringVar1, 14, r5); - } -} - -static void sub_80A47E8(u16 a, int b, int c, int d) -{ - switch (sCurrentBagPocket) - { - case BAG_POCKET_ITEMS: - case BAG_POCKET_POKE_BALLS: - sub_80A4380(a, b, c, d); - break; - case BAG_POCKET_KEY_ITEMS: - sub_80A444C(a, b, c, d); - break; - case BAG_POCKET_TMs_HMs: - sub_80A4548(a, b, c, d); - break; - case BAG_POCKET_BERRIES: - sub_80A46FC(a, b, c, d); - break; - } - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) - SetVerticalScrollIndicators(TOP_ARROW, VISIBLE); - else - SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE); - if ((sReturnLocation != RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots + 1) - || (sReturnLocation == RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots)) - SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE); - else - SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE); -} - -static void sub_80A48E8(u16 taskId, int b, int c) -{ - sub_80A47E8(taskId, b, c, 0); -} - -static void sub_80A48F8(u16 taskId) -{ - sub_80A47E8(taskId, 0, 5, 2); -} - -static void ItemListMenu_InitDescription(s16 itemId) -{ - u8 r5; - - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - r5 = sub_8072A18(gOtherText_ReturnTo, 4, 0x68, 0x68, 1); - r5 += sub_8072A18(gUnknown_0840E740[sReturnLocation], 4, 0x78, 0x68, 1); - } - else - { - r5 = sub_8072A18(ItemId_GetDescription(itemId), 4, 0x68, 0x68, 1); - } - - if (r5 < 3) - Menu_EraseWindowRect(0, 13 + r5 * 2, 13, 20); -} - -static void ItemListMenu_ChangeDescription(s16 itemId, int b) -{ - u8 description[100]; - - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - if (b == 0) - { - Menu_EraseWindowRect(0, 13, 13, 20); - Menu_PrintTextPixelCoords(gOtherText_ReturnTo, 4, 0x68, 0); - } - else if (b == 1) - { - Menu_PrintTextPixelCoords(gUnknown_0840E740[sReturnLocation], 4, 0x78, 0); - } - } - else - { - if (b == 0) - Menu_EraseWindowRect(0, 13, 13, 20); - if (ItemId_CopyDescription(description, itemId, b)) - Menu_PrintTextPixelCoords(description, 4, 104 + b * 16, 0); - } -} - -static bool32 CopyTextLine(u8 *destination, const u8 *source, u32 c) -{ - u32 r4 = c + 1; - const u8 *src = source; - u8 *dst = destination; - - while (1) - { - if (*src == CHAR_NEWLINE || *src == EOS) - { - r4--; - if (r4 == 0) - { - *dst = EOS; - return TRUE; - } - if (*src == EOS) - return FALSE; - // got a new line - reset dst pointer - dst = destination; - src++; - } - else - { - *dst++ = *src++; - } - } -} - -static void sub_80A4A98(const u8 *text, u32 line) -{ - u8 buffer[100]; - - if (line == 0) - Menu_EraseWindowRect(0, 13, 13, 20); - if (CopyTextLine(buffer, text, line)) - Menu_PrintTextPixelCoords(buffer, 4, 104 + line * 16, 0); -} - -static void sub_80A4ADC(u8 taskId) -{ - if (gTasks[taskId].data[10] == 0) - sub_80A7528(0); - PlaySE(SE_SELECT); - gUnknown_0203855C = 1; -} - -static void sub_80A4B14(s8 a, u8 b) -{ - gBagPocketScrollStates[sCurrentBagPocket].scrollTop += a; - Menu_MoveCursor(0); - sub_80A73C0(); - sub_80A763C(); - sub_80A4ADC(b); -} - -static void sub_80A4B58(s8 delta, u8 b) -{ - gBagPocketScrollStates[sCurrentBagPocket].cursorPos = Menu_MoveCursor(delta); - sub_80A73C0(); - sub_80A4ADC(b); -} - -static const u8 *sub_80A4B90(u16 itemId) -{ - if (TestPlayerAvatarFlags(6)) - { - if (itemId == ITEM_MACH_BIKE || itemId == ITEM_ACRO_BIKE) - return gOtherText_Walk; - } - if (ItemIsMail(itemId) == TRUE) - return gOtherText_Check; - return sItemPopupMenuActions[sPopupMenuActionList[0]].text; -} - -static void sub_80A4BF0(u16 *a) -{ - u8 i; - - if (gUnknown_02038564 == 4) - { - Menu_DrawStdWindowFrame(0, 7, 13, 12); - sub_80A4008(a, 1, 8, 12, 4); - if (sub_80F9344() == TRUE && sReturnLocation == RETURN_TO_FIELD_5) - { - sub_80A7834(1, 0); - } - else - { - for (i = 0; i < gUnknown_02038564; i++) - { - const u8 *text; - - if (i == 0) - text = sub_80A4B90(gSpecialVar_ItemId); - else - text = sItemPopupMenuActions[sPopupMenuActionList[i]].text; - Menu_PrintText(text, 1 + (i / 2) * 6, 8 + (i % 2) * 2); - } - } - if (sReturnLocation == RETURN_TO_FIELD_5) - InitMenu(0, 1, 8, gUnknown_02038564, sPopupMenuSelection, 1); - else - InitMenu(0, 1, 8, gUnknown_02038564, 0, 1); - sub_8072DCC(0x2F); - } - else - { - Menu_DrawStdWindowFrame(0, 5, 13, 12); - sub_80A4008(a, 1, 6, 12, 6); - for (i = 0; i < gUnknown_02038564; i++) - Menu_PrintText(sItemPopupMenuActions[sPopupMenuActionList[i]].text, 1 + (i / 3) * 6, 6 + (i % 3) * 2); - InitMenu(0, 1, 6, gUnknown_02038564, 0, 1); - sub_8072DCC(0x2F); - } - sub_80A7528(2); -} - -static void sub_80A4DA4(u16 *a) -{ - sub_80A73FC(); - sub_80A36B8(a, 0, 6, 13, 6); - Menu_EraseWindowRect(0, 5, 13, 12); - sub_80A7590(); -} - -static void sub_80A4DD8(u8 taskId, u8 b, u8 c, u8 d, u8 e, u8 digits) -{ - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = b + 2; - gTasks[taskId].data[3] = c + 1; - Menu_DrawStdWindowFrame(b, c, b + d, c + e); - sub_80A4008(gBGTilemapBuffers[1], b + 1, c + 1, d - 1, e - 1); - sub_80A418C(1, 1, b + 2, c + 1, digits); -} - -static void sub_80A4E8C(s8 delta, u8 b) -{ - PlaySE(SE_SELECT); - SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE); - SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE); - SetVerticalScrollIndicators(LEFT_ARROW, INVISIBLE); - SetVerticalScrollIndicators(RIGHT_ARROW, INVISIBLE); - PauseVerticalScrollIndicator(TOP_ARROW); - PauseVerticalScrollIndicator(BOTTOM_ARROW); - PauseVerticalScrollIndicator(LEFT_ARROW); - PauseVerticalScrollIndicator(RIGHT_ARROW); - ChangePocket(gBGTilemapBuffers[2], delta); - DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket); - sub_80A3770(); - sub_80A7C64(); - CreateBagPokeballSprite(b); -} - -static bool8 sub_80A4F0C(void) -{ - if (sReturnLocation == RETURN_TO_FIELD_5 || sReturnLocation == RETURN_TO_FIELD_4) - return FALSE; - if (gMain.newKeys == DPAD_RIGHT || sub_80F9284() == 2) - { - sub_80A4E8C(1, 2); - return TRUE; - } - if (gMain.newKeys == DPAD_LEFT || sub_80F9284() == 1) - { - sub_80A4E8C(-1, 1); - return TRUE; - } - return FALSE; -} - -static void sub_80A4F68(u8 taskId) -{ - sub_80A4F0C(); -} - -static bool8 sub_80A4F74(u8 a) -{ - bool8 retVal = FALSE; - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) - { - if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos != 0) - sub_80A4B58(-1, a); - else if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) - sub_80A4B14(-1, a); - if (gLinkOpen == TRUE && gMain.keyRepeatCounter == 5) - gMain.keyRepeatCounter = 11; - retVal = TRUE; - } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) - { - if (sReturnLocation != RETURN_TO_FIELD_5) - { - if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].cursorMax) - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) - sub_80A4B14(1, a); - } - else - { - sub_80A4B58(1, a); - } - } - else - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots - 1) - { - if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].cursorMax) - sub_80A4B58(1, a); - else - sub_80A4B14(1, a); - } - } - retVal = TRUE; - if (gLinkOpen == TRUE && gMain.keyRepeatCounter == 5) - gMain.keyRepeatCounter = 11; - } - else - { - if (gTasks[a].data[10] == 0 && sub_80A4F0C() == TRUE) - { - sub_80A73F0(); - gTasks[a].func = sub_80A4F68; - retVal = TRUE; - } - else - { - sub_80A73C0(); - } - } - return retVal; -} - -static void sub_80A50C8(u8 taskId) -{ - s16 *r5 = gTasks[taskId].data; - - if (!gPaletteFade.active) - { - if (sub_80A4F74(taskId) == TRUE) - { - sub_808B5B4(taskId); - return; - } - - if ((gMain.newKeys & SELECT_BUTTON) - && !(sCurrentBagPocket == BAG_POCKET_BERRIES || sCurrentBagPocket == BAG_POCKET_TMs_HMs) - && (sReturnLocation == RETURN_TO_FIELD_0 || sReturnLocation == RETURN_TO_BATTLE)) - { - if (r5[10] == 0) - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - PlaySE(SE_SELECT); - sub_80A3F50(taskId); - } - sub_808B5B4(taskId); - } - else - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - PlaySE(SE_SELECT); - sub_80A3E90(taskId); - } - else - { - sub_80A3EF4(taskId); - } - sub_808B5B4(taskId); - } - return; - } - - if (gMain.newKeys & A_BUTTON) - { - if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) - { - if (r5[10] == 0) - { - gSpecialVar_ItemId = 0; - gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); - } - else - { - sub_80A3EF4(taskId); - } - sub_808B5B4(taskId); - } - else - { - if (r5[10] == 0) - { - PlaySE(SE_SELECT); - gUnknown_02038560 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - gSpecialVar_ItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId; - gUnknown_083C16BC[sReturnLocation].onItemSelect(taskId); - StopVerticalScrollIndicators(TOP_ARROW); - StopVerticalScrollIndicators(BOTTOM_ARROW); - StopVerticalScrollIndicators(LEFT_ARROW); - StopVerticalScrollIndicators(RIGHT_ARROW); - sub_80A797C(); - } - else - { - sub_80A3E90(taskId); - } - sub_808B5B4(taskId); - } - return; - } - - if (gMain.newKeys & B_BUTTON) - { - if (r5[10] == 0) - { - if (sReturnLocation != RETURN_TO_FIELD_5) - { - gSpecialVar_ItemId = 0; - gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); - } - } - else - { - sub_80A3EF4(taskId); - } - sub_808B5B4(taskId); - return; - } - } -} - -bool8 SellMenu_QuantityRoller(u8 taskId, u16 b) -{ - s16 *taskData = gTasks[taskId].data; - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) - { - if (taskData[1] != b) - taskData[1]++; - else - taskData[1] = 1; - return TRUE; - } - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) - { - if (taskData[1] != 1) - taskData[1]--; - else - taskData[1] = b; - return TRUE; - } - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT) - { - if (taskData[1] + 10 < b) - taskData[1] += 10; - else - taskData[1] = b; - return TRUE; - } - - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT) - { - if (taskData[1] > 10) - taskData[1] -= 10; - else - taskData[1] = 1; - return TRUE; - } - - return FALSE; -} - -static bool8 sub_80A5350(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - if (SellMenu_QuantityRoller(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE) - { - // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way - if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) - sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 3); - else - sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 2); - return TRUE; - } - return FALSE; -} - -static void sub_80A53CC(void) -{ - if (sub_80A34B4() == TRUE) - { - sub_80A3770(); - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - } -} - -void sub_80A53F8(void) -{ - sReturnLocation = RETURN_TO_FIELD_0; - SetMainCallback2(sub_80A53CC); -} - -#ifdef NONMATCHING -static void sub_80A5414(u8 taskId) -{ - TaskFunc r5 = NULL; - - if (sub_80A78A0() != 0) - { - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) - { - if ((sPopupMenuSelection & 1) && sPopupMenuActionList[sPopupMenuSelection - 1] == 8) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor3(-1); - } - } - //_080A546C - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) - { - if (!(sPopupMenuSelection & 1) && sPopupMenuActionList[sPopupMenuSelection + 1] != 8) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor3(1); - } - } - //_080A549C - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x20) - { - if (sPopupMenuSelection > 1 && sPopupMenuActionList[sPopupMenuSelection - 2] != 8) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor3(-2); - } - } - //_080A54CC - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x10) - { - if (sPopupMenuSelection <= 1 && sPopupMenuActionList[sPopupMenuSelection + 2] != 8) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = MoveMenuCursor3(2); - } - } - //_080A5500 - else if (!(gMain.newKeys & A_BUTTON)) - { - if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A4DA4(gBGTilemapBuffers[1]); - r5 = sItemPopupMenuActions[sPopupMenuActionList[3]].func; - r5(taskId); - } - } - else - { - //_080A5590 - gTasks[taskId].data[10] = 0; - sub_80A4DA4(gBGTilemapBuffers[1]); - r5 = sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func; - r5(taskId); - } - } - //_080A5552 - if (r5 == NULL) - { - if (sReturnLocation == RETURN_TO_FIELD_5) - { - if (sPopupMenuSelection == 0) - { - sub_8072DDC(12); - return; - } - //_080A55D4 - //else - //{ - if (sPopupMenuSelection == 0 || sPopupMenuSelection == 1) - sub_8072DCC(0x2F); - else - sub_8072DCC(0x30); - //} - } - //_080A55E0 - else - { - if (sPopupMenuSelection == 0 || sPopupMenuSelection == 1) - sub_8072DCC(0x2F); - else - sub_8072DCC(0x30); - } - } -} -#else -__attribute__((naked)) -static void sub_80A5414(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - movs r5, 0\n\ - bl sub_80A78A0\n\ - cmp r0, 0\n\ - bne _080A5426\n\ - b _080A5552\n\ -_080A5426:\n\ - ldr r2, _080A5460 @ =gMain\n\ - ldrh r0, [r2, 0x30]\n\ - movs r1, 0xF0\n\ - ands r1, r0\n\ - cmp r1, 0x40\n\ - bne _080A546C\n\ - ldr r4, _080A5464 @ =sPopupMenuSelection\n\ - ldrb r1, [r4]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080A5440\n\ - b _080A5552\n\ -_080A5440:\n\ - ldrb r1, [r4]\n\ - ldr r0, _080A5468 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - subs r1, 0x1\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x8\n\ - bne _080A5452\n\ - b _080A5552\n\ -_080A5452:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - b _080A54EE\n\ - .align 2, 0\n\ -_080A5460: .4byte gMain\n\ -_080A5464: .4byte sPopupMenuSelection\n\ -_080A5468: .4byte sPopupMenuActionList\n\ -_080A546C:\n\ - cmp r1, 0x80\n\ - bne _080A549C\n\ - ldr r4, _080A5494 @ =sPopupMenuSelection\n\ - ldrb r1, [r4]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080A5552\n\ - ldrb r1, [r4]\n\ - ldr r0, _080A5498 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0x8\n\ - beq _080A5552\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x1\n\ - b _080A54EE\n\ - .align 2, 0\n\ -_080A5494: .4byte sPopupMenuSelection\n\ -_080A5498: .4byte sPopupMenuActionList\n\ -_080A549C:\n\ - cmp r1, 0x20\n\ - bne _080A54CC\n\ - ldr r4, _080A54C4 @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x1\n\ - bls _080A5552\n\ - adds r1, r0, 0\n\ - ldr r0, _080A54C8 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - subs r1, 0x2\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x8\n\ - beq _080A5552\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - b _080A54EE\n\ - .align 2, 0\n\ -_080A54C4: .4byte sPopupMenuSelection\n\ -_080A54C8: .4byte sPopupMenuActionList\n\ -_080A54CC:\n\ - cmp r1, 0x10\n\ - bne _080A5500\n\ - ldr r4, _080A54F8 @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x1\n\ - bhi _080A5552\n\ - adds r1, r0, 0\n\ - ldr r0, _080A54FC @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x2]\n\ - cmp r0, 0x8\n\ - beq _080A5552\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x2\n\ -_080A54EE:\n\ - bl MoveMenuCursor3\n\ - strb r0, [r4]\n\ - b _080A5552\n\ - .align 2, 0\n\ -_080A54F8: .4byte sPopupMenuSelection\n\ -_080A54FC: .4byte sPopupMenuActionList\n\ -_080A5500:\n\ - ldrh r1, [r2, 0x2E]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080A5590\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080A5552\n\ - ldr r1, _080A5570 @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - strh r5, [r0, 0x1C]\n\ - ldr r1, _080A5574 @ =gBagPocketScrollStates\n\ - ldr r0, _080A5578 @ =sCurrentBagPocket\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r2, [r0]\n\ - adds r0, r4, 0\n\ - adds r1, r2, 0\n\ - bl sub_80A48E8\n\ - ldr r0, _080A557C @ =gBGTilemapBuffers + 0x800\n\ - bl sub_80A4DA4\n\ - ldr r1, _080A5580 @ =sItemPopupMenuActions\n\ - ldr r0, _080A5584 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - ldrb r0, [r0, 0x3]\n\ - lsls r0, 3\n\ - adds r1, 0x4\n\ - adds r0, r1\n\ - ldr r5, [r0]\n\ - adds r0, r4, 0\n\ - bl _call_via_r5\n\ -_080A5552:\n\ - cmp r5, 0\n\ - bne _080A55FA\n\ - ldr r0, _080A5588 @ =sReturnLocation\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x5\n\ - bne _080A55E0\n\ - ldr r0, _080A558C @ =sPopupMenuSelection\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _080A55D4\n\ - movs r0, 0xC\n\ - bl sub_8072DDC\n\ - b _080A55FA\n\ - .align 2, 0\n\ -_080A5570: .4byte gTasks\n\ -_080A5574: .4byte gBagPocketScrollStates\n\ -_080A5578: .4byte sCurrentBagPocket\n\ -_080A557C: .4byte gBGTilemapBuffers + 0x800\n\ -_080A5580: .4byte sItemPopupMenuActions\n\ -_080A5584: .4byte sPopupMenuActionList\n\ -_080A5588: .4byte sReturnLocation\n\ -_080A558C: .4byte sPopupMenuSelection\n\ -_080A5590:\n\ - ldr r1, _080A55C0 @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - strh r5, [r0, 0x1C]\n\ - ldr r0, _080A55C4 @ =gBGTilemapBuffers + 0x800\n\ - bl sub_80A4DA4\n\ - ldr r1, _080A55C8 @ =sItemPopupMenuActions\n\ - ldr r0, _080A55CC @ =sPopupMenuSelection\n\ - ldrb r2, [r0]\n\ - ldr r0, _080A55D0 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - lsls r0, 3\n\ - adds r1, 0x4\n\ - adds r0, r1\n\ - ldr r5, [r0]\n\ - adds r0, r4, 0\n\ - bl _call_via_r5\n\ - b _080A5552\n\ - .align 2, 0\n\ -_080A55C0: .4byte gTasks\n\ -_080A55C4: .4byte gBGTilemapBuffers + 0x800\n\ -_080A55C8: .4byte sItemPopupMenuActions\n\ -_080A55CC: .4byte sPopupMenuSelection\n\ -_080A55D0: .4byte sPopupMenuActionList\n\ -_080A55D4:\n\ - cmp r0, 0x1\n\ - bls _080A55E8\n\ - movs r0, 0x30\n\ - bl sub_8072DCC\n\ - b _080A55FA\n\ -_080A55E0:\n\ - ldr r0, _080A55F0 @ =sPopupMenuSelection\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x1\n\ - bhi _080A55F4\n\ -_080A55E8:\n\ - movs r0, 0x2F\n\ - bl sub_8072DCC\n\ - b _080A55FA\n\ - .align 2, 0\n\ -_080A55F0: .4byte sPopupMenuSelection\n\ -_080A55F4:\n\ - movs r0, 0x30\n\ - bl sub_8072DCC\n\ -_080A55FA:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif - -__attribute__((naked)) -static void sub_80A5600(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - movs r5, 0\n\ - ldr r2, _080A563C @ =gMain\n\ - ldrh r0, [r2, 0x30]\n\ - movs r1, 0xF0\n\ - ands r1, r0\n\ - cmp r1, 0x40\n\ - bne _080A5648\n\ - ldr r4, _080A5640 @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0\n\ - bne _080A561E\n\ - b _080A5736\n\ -_080A561E:\n\ - adds r1, r0, 0\n\ - ldr r0, _080A5644 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - subs r1, 0x1\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x8\n\ - bne _080A5630\n\ - b _080A5736\n\ -_080A5630:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - b _080A56D2\n\ - .align 2, 0\n\ -_080A563C: .4byte gMain\n\ -_080A5640: .4byte sPopupMenuSelection\n\ -_080A5644: .4byte sPopupMenuActionList\n\ -_080A5648:\n\ - cmp r1, 0x80\n\ - bne _080A5680\n\ - ldr r4, _080A5674 @ =sPopupMenuSelection\n\ - ldrb r1, [r4]\n\ - ldr r0, _080A5678 @ =gUnknown_02038564\n\ - ldrb r0, [r0]\n\ - subs r0, 0x1\n\ - cmp r1, r0\n\ - beq _080A5736\n\ - cmp r1, 0x2\n\ - beq _080A5736\n\ - ldr r0, _080A567C @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0, 0x1]\n\ - cmp r0, 0x8\n\ - beq _080A5736\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x1\n\ - b _080A56D2\n\ - .align 2, 0\n\ -_080A5674: .4byte sPopupMenuSelection\n\ -_080A5678: .4byte gUnknown_02038564\n\ -_080A567C: .4byte sPopupMenuActionList\n\ -_080A5680:\n\ - cmp r1, 0x20\n\ - bne _080A56B0\n\ - ldr r4, _080A56A8 @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x2\n\ - bls _080A5736\n\ - adds r1, r0, 0\n\ - ldr r0, _080A56AC @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - subs r1, 0x3\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x8\n\ - beq _080A5736\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x3\n\ - negs r0, r0\n\ - b _080A56D2\n\ - .align 2, 0\n\ -_080A56A8: .4byte sPopupMenuSelection\n\ -_080A56AC: .4byte sPopupMenuActionList\n\ -_080A56B0:\n\ - cmp r1, 0x10\n\ - bne _080A56E4\n\ - ldr r4, _080A56DC @ =sPopupMenuSelection\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x2\n\ - bhi _080A5736\n\ - adds r1, r0, 0\n\ - ldr r0, _080A56E0 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x3]\n\ - cmp r0, 0x8\n\ - beq _080A5736\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - movs r0, 0x3\n\ -_080A56D2:\n\ - bl MoveMenuCursor3\n\ - strb r0, [r4]\n\ - b _080A5736\n\ - .align 2, 0\n\ -_080A56DC: .4byte sPopupMenuSelection\n\ -_080A56E0: .4byte sPopupMenuActionList\n\ -_080A56E4:\n\ - ldrh r1, [r2, 0x2E]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080A5768\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080A5736\n\ - ldr r1, _080A574C @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - strh r5, [r0, 0x1C]\n\ - ldr r1, _080A5750 @ =gBagPocketScrollStates\n\ - ldr r0, _080A5754 @ =sCurrentBagPocket\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r2, [r0]\n\ - adds r0, r4, 0\n\ - adds r1, r2, 0\n\ - bl sub_80A48E8\n\ - ldr r0, _080A5758 @ =gBGTilemapBuffers + 0x800\n\ - bl sub_80A4DA4\n\ - ldr r1, _080A575C @ =sItemPopupMenuActions\n\ - ldr r0, _080A5760 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - ldrb r0, [r0, 0x5]\n\ - lsls r0, 3\n\ - adds r1, 0x4\n\ - adds r0, r1\n\ - ldr r5, [r0]\n\ - adds r0, r4, 0\n\ - bl _call_via_r5\n\ -_080A5736:\n\ - cmp r5, 0\n\ - bne _080A57BE\n\ - ldr r0, _080A5764 @ =sPopupMenuSelection\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _080A57AC\n\ - movs r0, 0xC\n\ - bl sub_8072DDC\n\ - b _080A57BE\n\ - .align 2, 0\n\ -_080A574C: .4byte gTasks\n\ -_080A5750: .4byte gBagPocketScrollStates\n\ -_080A5754: .4byte sCurrentBagPocket\n\ -_080A5758: .4byte gBGTilemapBuffers + 0x800\n\ -_080A575C: .4byte sItemPopupMenuActions\n\ -_080A5760: .4byte sPopupMenuActionList\n\ -_080A5764: .4byte sPopupMenuSelection\n\ -_080A5768:\n\ - ldr r1, _080A5798 @ =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - strh r5, [r0, 0x1C]\n\ - ldr r0, _080A579C @ =gBGTilemapBuffers + 0x800\n\ - bl sub_80A4DA4\n\ - ldr r1, _080A57A0 @ =sItemPopupMenuActions\n\ - ldr r0, _080A57A4 @ =sPopupMenuSelection\n\ - ldrb r2, [r0]\n\ - ldr r0, _080A57A8 @ =sPopupMenuActionList\n\ - ldr r0, [r0]\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - lsls r0, 3\n\ - adds r1, 0x4\n\ - adds r0, r1\n\ - ldr r5, [r0]\n\ - adds r0, r4, 0\n\ - bl _call_via_r5\n\ - b _080A5736\n\ - .align 2, 0\n\ -_080A5798: .4byte gTasks\n\ -_080A579C: .4byte gBGTilemapBuffers + 0x800\n\ -_080A57A0: .4byte sItemPopupMenuActions\n\ -_080A57A4: .4byte sPopupMenuSelection\n\ -_080A57A8: .4byte sPopupMenuActionList\n\ -_080A57AC:\n\ - cmp r0, 0x2\n\ - bhi _080A57B8\n\ - movs r0, 0x2F\n\ - bl sub_8072DCC\n\ - b _080A57BE\n\ -_080A57B8:\n\ - movs r0, 0x30\n\ - bl sub_8072DCC\n\ -_080A57BE:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} - -static void sub_80A57C4(void) -{ - u8 r5; - - sPopupMenuActionList = gUnknown_083C16AE[sCurrentBagPocket]; - if (sCurrentBagPocket == BAG_POCKET_KEY_ITEMS) - { - gUnknown_02038564 = 1; - r5 = 9; - } - else if (sub_80F92F4(gSpecialVar_ItemId) == 0) - { - sPopupMenuActionList = gUnknown_083C16AE[4]; - gUnknown_02038564 = 1; - r5 = 9; - } - else - { - gUnknown_02038564 = 2; - r5 = 7; - } - sub_80A4008(gBGTilemapBuffers[1], 7, r5 + 1, 6, gUnknown_02038564 * 2); - Menu_DrawStdWindowFrame(6, r5, 13, gUnknown_02038564 * 2 + 1 + r5); - sub_80A7834(0, r5); - InitMenu(0, 7, r5 + 1, gUnknown_02038564, 0, 6); -} - -static void sub_80A5888(u8 taskId) -{ - if (sub_80A78A0() != 0) - { - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (sPopupMenuSelection != 0) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = Menu_MoveCursor(-1); - } - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (sPopupMenuSelection != gUnknown_02038564 - 1) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = Menu_MoveCursor(1); - } - } - else if (gMain.newKeys & A_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A4DA4(gBGTilemapBuffers[1]); - sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A4DA4(gBGTilemapBuffers[1]); - sItemPopupMenuActions[2].func(taskId); - } - } -} - -static void OnBagClose_Field0(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_805469C >> 16; - gTasks[taskId].data[9] = (u32)sub_805469C; - gLastFieldPokeMenuOpened = 0; - sub_80A5AE4(taskId); -} - -static void OnItemSelect_Field05(u8 taskId) -{ - sPopupMenuSelection = 0; - if (sReturnLocation == RETURN_TO_FIELD_5) - sPopupMenuSelection = 1; - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - if (sub_80F9344() == TRUE && sReturnLocation != RETURN_TO_FIELD_5) - { - sub_80A57C4(); - gTasks[taskId].func = sub_80A5888; - } - else - { - sub_80A4BF0(gBGTilemapBuffers[1]); - if (sCurrentBagPocket != BAG_POCKET_BERRIES || sReturnLocation == RETURN_TO_FIELD_5) - gTasks[taskId].func = sub_80A5414; - else - gTasks[taskId].func = sub_80A5600; - } -} - -static void sub_80A5AAC(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = HandleItemMenuPaletteFade; -} - -static void sub_80A5AE4(u8 taskId) -{ - PlaySE(SE_SELECT); - sub_80A5AAC(taskId); -} - -void HandleItemMenuPaletteFade(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - if (!gPaletteFade.active) - { - MainCallback cb = (MainCallback)((u16)taskData[8] << 16 | (u16)taskData[9]); - - SetMainCallback2(cb); - gpu_pal_allocator_reset__manage_upper_four(); - DestroyTask(taskId); - } -} - -void sub_80A5B40(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - ResetTasks(); - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -static void HandlePopupMenuAction_UseOnField(u8 taskId) -{ - if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL) - { - PlaySE(SE_SELECT); - if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1) - { - sub_80A5BF8(taskId); - } - else - { - gTasks[taskId].data[2] = 0; - if (sCurrentBagPocket != BAG_POCKET_BERRIES) - ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); - else - sub_80C9C7C(taskId); - } - } -} - -static void sub_80A5BF8(u8 taskId) -{ - sub_80A73FC(); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gOtherText_NoPokemon, CleanUpItemMenuMessage, 1); -} - -static void sub_80A5C24(u8 taskId) -{ - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -void CleanUpItemMenuMessage(u8 taskId) -{ - sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); - Menu_EraseWindowRect(7, 7, 13, 12); - Menu_EraseWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_80A5C24; -} - -void CleanUpOverworldMessage(u8 taskId) -{ - Menu_EraseWindowRect(0, 13, 29, 19); - DestroyTask(taskId); - sub_8064E2C(); - ScriptContext2_Disable(); -} - -void ExecuteItemUseFromBlackPalette(void) -{ - pal_fill_black(); - CreateTask(Task_CallItemUseOnFieldCallback, 8); -} - -static void Task_CallItemUseOnFieldCallback(u8 taskId) -{ - if (IsWeatherNotFadingIn() == TRUE) - gFieldItemUseCallback(taskId); -} - -void sub_80A5D04(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -static void sub_80A5D38(u8 taskId) -{ - gTasks[taskId].data[1] = 0; - sub_80A4DA4(gBGTilemapBuffers[1]); - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A5D78(void) -{ - sub_80A4008(gBGTilemapBuffers[1], 8, 8, 5, 4); - DisplayYesNoMenu(7, 7, 1); -} - -static void sub_80A5DA0(u16 itemId, u16 quantity) -{ - CopyItemName(itemId, gStringVar1); - if (quantity >= 100) - ConvertIntToDecimalStringN(gStringVar2, quantity, STR_CONV_MODE_LEFT_ALIGN, 3); - else - ConvertIntToDecimalStringN(gStringVar2, quantity, STR_CONV_MODE_LEFT_ALIGN, 2); - sub_80A4DA4(gBGTilemapBuffers[1]); - sub_80A7528(5); - sub_80A5D78(); -} - -static void sub_80A5DF8(void) -{ - sub_80A4DA4(gBGTilemapBuffers[1]); - Menu_EraseWindowRect(7, 6, 11, 13); - sub_80A7528(4); -} - -static void sub_80A5E1C(u8 taskId) -{ - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - { - gTasks[taskId].data[10] = 0; - sub_80A41D4(taskId); - sub_80A5D38(taskId); - } -} - -static void sub_80A5E60(u8 taskId) -{ - sub_80A5DF8(); - sub_80A3D5C(taskId); - gTasks[taskId].func = sub_80A5E1C; -} - -static void sub_80A5E90(u8 taskId) -{ - sub_80A5D38(taskId); -} - -static void sub_80A5EA0(u8 taskId) -{ - if (sub_80A5350(taskId) == TRUE) - return; - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_80A5DA0(gSpecialVar_ItemId, gTasks[taskId].data[1]); - DoYesNoFuncWithChoice(taskId, &gUnknown_083C16F4); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - sub_80A5D38(taskId); - } -} - -static void HandlePopupMenuAction_Toss(u8 taskId) -{ - PlaySE(SE_SELECT); - gTasks[taskId].func = sub_80A5EA0; - sub_80A7528(3); - // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way - if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) - sub_80A4DD8(taskId, 6, 9, 7, 3, 3); - else - sub_80A4DD8(taskId, 7, 9, 6, 3, 2); -} - -static void sub_80A5F80(u8 taskId) -{ - PlaySE(SE_SELECT); - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void HandlePopupMenuAction_Register(u8 taskId) -{ - PlaySE(SE_SELECT); - if (gSaveBlock1.registeredItem == gSpecialVar_ItemId) - { - // Un-register the registered item - RemoveSelectIconFromRegisteredItem(); - gSaveBlock1.registeredItem = 0; - } - else - { - AddSelectIconToRegisteredItem(); - gSaveBlock1.registeredItem = gSpecialVar_ItemId; - } - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A6000(u8 taskId) -{ - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A6024(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON) - { - sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); - Menu_EraseWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_80A6000; - } -} - -static void DisplayCannotBeHeldMessage(u8 taskId) -{ - sub_80A73FC(); - CopyItemName(gSpecialVar_ItemId, gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeld); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); -} - -static void HandlePopupMenuAction_Give(u8 taskId) -{ - PlaySE(SE_SELECT); - if (sub_80F931C(gSpecialVar_ItemId) == 0) - { - sub_80A73FC(); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); - } - else if (ItemId_GetImportance(gSpecialVar_ItemId) == 0) - { - if (CalculatePlayerPartyCount() == 0) - { - sub_80A5BF8(taskId); - } - else - { - gTasks[taskId].data[8] = (u32)sub_808B020 >> 16; - gTasks[taskId].data[9] = (u32)sub_808B020; - gTasks[taskId].func = HandleItemMenuPaletteFade; - gUnknown_02038561 = 1; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - } - } - else - { - DisplayCannotBeHeldMessage(taskId); - } -} - -static void HandlePopupMenuAction_CheckTag(u8 taskId) -{ - sub_80A5AE4(taskId); - gTasks[taskId].data[8] = (u32)BerryTagScreen_814625C >> 16; - gTasks[taskId].data[9] = (u32)BerryTagScreen_814625C; -} - -static void sub_80A61A8(void) -{ - if (sub_80A34B4() == TRUE) - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); -} - -void sub_80A61D0(void) -{ - sReturnLocation = RETURN_TO_PKMN_LIST; - SetMainCallback2(sub_80A61A8); -} - -static void OnBagClose_PkmnList(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; - gTasks[taskId].data[9] = (u32)sub_808A3F8; - sub_80A5AE4(taskId); -} - -static void OnItemSelect_PkmnList(u8 taskId) -{ - u8 r6 = sCurrentBagPocket + 1; - - if (sub_80F931C(gSpecialVar_ItemId) == 0) - { - sub_80A73FC(); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); - } - else if (sub_80F92F4(gSpecialVar_ItemId) == 0) - { - sub_80A73FC(); - CopyItemName(gSpecialVar_ItemId, gStringVar1); - StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeldHere); - sub_80A7590(); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); - } - else if (r6 != 5 && ItemId_GetImportance(gSpecialVar_ItemId) == 0) - { - gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; - gTasks[taskId].data[9] = (u32)sub_808A3F8; - sub_80A5AAC(taskId); - } - else - { - DisplayCannotBeHeldMessage(taskId); - } -} - -static void sub_80A62D8(void) -{ - if (sub_80A34B4() == TRUE) - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); -} - -void ItemMenu_LoadSellMenu(void) -{ - sReturnLocation = RETURN_TO_SHOP; - SetMainCallback2(sub_80A62D8); -} - -static void OnBagClose_Shop(u8 taskId) -{ - gFieldCallback = Shop_FadeReturnToMartMenu; - gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; - gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; - sub_80A5AE4(taskId); -} - -static void OnItemSelect_Shop(u8 taskId) -{ - sub_80A7590(); - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - CopyItemName(gSpecialVar_ItemId, gStringVar2); - if (ItemId_GetPrice(gSpecialVar_ItemId) == 0) - { - StringExpandPlaceholders(gStringVar4, gOtherText_CantBuyThat); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6444, 1); - } - else - { - StringExpandPlaceholders(gStringVar4, gOtherText_HowManyToSell); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A648C, 1); - } -} - -static void sub_80A640C(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A6444(u8 taskId) -{ - sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); - Menu_EraseWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_80A640C; -} - -static void sub_80A648C(u8 taskId) -{ - gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput; - sub_80A4008(gBGTilemapBuffers[1], 1, 11, 12, 2); - Menu_DrawStdWindowFrame(0, 10, 13, 13); - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = 1; - gTasks[taskId].data[3] = 11; - // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way - if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) - sub_80A418C(1, 1, 1, 11, 3); - else - sub_80A418C(1, 1, 1, 11, 2); - BuyMenuDisplayMessage(gSpecialVar_ItemId, 1); - sub_80A683C(); -} - -static void sub_80A6520(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - BuyMenuPrintItemQuantityAndPrice(taskId); - } -} - -static void sub_80A6548(u8 taskId) -{ - sub_80A48F8(taskId); - gTasks[taskId].func = sub_80A6520; -} - -static void sub_80A6574(u8 taskId) -{ - PlaySE(SE_REGI); - sub_80A6870(gSpecialVar_ItemId, gTasks[taskId].data[1]); - gTasks[taskId].func = sub_80A6548; -} - -static void sub_80A65AC(u8 taskId) -{ - Menu_EraseWindowRect(7, 6, 13, 12); - sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); - CopyItemName(gSpecialVar_ItemId, gStringVar2); - StringExpandPlaceholders(gStringVar4, gOtherText_SoldItem); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6574, 1); - sub_80A3D5C(taskId); -} - -static void sub_80A6618(u8 taskId) -{ - Menu_EraseWindowRect(7, 6, 13, 12); - sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); - BuyMenuPrintItemQuantityAndPrice(taskId); -} - -static void sub_80A6650(u8 taskId) -{ - sub_80A5D78(); - DoYesNoFuncWithChoice(taskId, &gUnknown_083C16FC); -} - -static void Task_BuyHowManyDialogueHandleInput(u8 taskId) -{ - if (sub_80A5350(taskId) == TRUE) - { - Menu_EraseWindowRect(6, 11, 12, 11); - BuyMenuDisplayMessage(gSpecialVar_ItemId, gTasks[taskId].data[1]); - } - else if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - Menu_EraseWindowRect(0, 10, 13, 13); - sub_80A36B8(gBGTilemapBuffers[1], 0, 10, 13, 3); - ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6); - StringExpandPlaceholders(gStringVar4, gOtherText_CanPay); - DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6650, 1); - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - BuyMenuPrintItemQuantityAndPrice(taskId); - } -} - -static void sub_80A6760(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) -{ - sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); - CloseMoneyWindow(0, 0); - Menu_EraseWindowRect(0, 4, 13, 13); - Menu_EraseWindowRect(0, 14, 29, 19); - gTasks[taskId].func = sub_80A6760; -} - -static void BuyMenuDisplayMessage(u16 itemId, u16 quantity) -{ - PrintMoneyAmount(ItemId_GetPrice(itemId) / 2 * quantity, 6, 6, 11); - ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(itemId) / 2 * quantity, STR_CONV_MODE_LEFT_ALIGN, 6); -} - -static void sub_80A683C(void) -{ - OpenMoneyWindow(gSaveBlock1.money, 0, 0); - sub_80A4008(gBGTilemapBuffers[1], 1, 1, 12, 2); -} - -static void sub_80A6870(u16 itemId, u8 quantity) -{ - AddMoney(&gSaveBlock1.money, ItemId_GetPrice(itemId) / 2 * quantity); - UpdateMoneyWindow(gSaveBlock1.money, 0, 0); -} - -static void sub_80A68A4(void) -{ - if (sub_80A34B4() == TRUE) - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); -} - -void sub_80A68CC(void) -{ - sCurrentBagPocket = BAG_POCKET_BERRIES; - sReturnLocation = RETURN_TO_FIELD_4; - SetMainCallback2(sub_80A68A4); -} - -static void OnBagClose_Field4(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; - gTasks[taskId].data[9] = (u32)sub_80546B8; - sub_80A5AE4(taskId); -} - -static void OnItemSelect_Field4(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; - gTasks[taskId].data[9] = (u32)sub_80546B8; - sub_80A5AAC(taskId); -} - -static void sub_80A6940(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - sub_80A699C(); - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -void sub_80A6978(void) -{ - sCurrentBagPocket = BAG_POCKET_BERRIES; - sReturnLocation = RETURN_TO_FIELD_5; - SetMainCallback2(sub_80A6940); -} - -static void sub_80A699C(void) -{ - sPopupMenuActionList = gUnknown_083C16B8; - gUnknown_02038564 = 4; -} - -static void OnBagClose_Field5(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; - gTasks[taskId].data[9] = (u32)sub_804E990; - sub_80A5AE4(taskId); -} - -static void HandlePopupMenuAction_Confirm(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; - gTasks[taskId].data[9] = (u32)sub_804E990; - sub_80A5AAC(taskId); -} - -static void sub_80A6A08(void) -{ - if (sub_80A34B4() == TRUE) - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); -} - -void sub_80A6A30(void) -{ - sReturnLocation = RETURN_TO_PC; - SetMainCallback2(sub_80A6A08); -} - -static void OnBagClose_PC(u8 taskId) -{ - gFieldCallback = ItemStorage_ReturnToMenuAfterDeposit; - gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; - gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; - sub_80A5AE4(taskId); -} - -static void sub_80A6A84(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - sub_80A4DA4(gBGTilemapBuffers[1]); - CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, taskData[1], STR_CONV_MODE_LEFT_ALIGN, 3); - Menu_EraseWindowRect(7, 6, 11, 13); - sub_80A7528(7); - sub_80A3D5C(taskId); - gTasks[taskId].func = sub_80A5E1C; -} - -static void sub_80A6B00(u8 taskId) -{ - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - PlaySE(SE_SELECT); - sub_80A5D38(taskId); - } -} - -static void sub_80A6B64(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - if (ItemId_GetImportance(gSpecialVar_ItemId) == 2) - { - gTasks[taskId].func = sub_80A6B00; - sub_80A7528(9); - } - else - { - if (AddPCItem(gSpecialVar_ItemId, taskData[1]) == TRUE) - { - sub_80A6A84(taskId); - } - else - { - gTasks[taskId].func = sub_80A6B00; - sub_80A7528(8); - } - } -} - -static void sub_80A6BE0(u8 taskId) -{ - if (sub_80A5350(taskId) == TRUE) - return; - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_80A4DA4(gBGTilemapBuffers[1]); - sub_80A6B64(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - PlaySE(SE_SELECT); - sub_80A5D38(taskId); - } -} - -static void OnItemSelect_PC(u8 taskId) -{ - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - PlaySE(SE_SELECT); - sub_80A7590(); - if (sCurrentBagPocket != BAG_POCKET_KEY_ITEMS) - { - gTasks[taskId].func = sub_80A6BE0; - sub_80A7528(6); - // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way - if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) - sub_80A4DD8(taskId, 6, 9, 7, 3, 3); - else - sub_80A4DD8(taskId, 7, 9, 6, 3, 2); - } - else - { - gTasks[taskId].data[1] = 1; - sub_80A6B64(taskId); - } -} - -bool32 sub_80A6D1C(void) -{ - HideMapNamePopup(); - if (gSaveBlock1.registeredItem != 0) - { - if (CheckBagHasItem(gSaveBlock1.registeredItem, 1) == TRUE) - { - u8 taskId; - - ScriptContext2_Enable(); - FreezeMapObjects(); - sub_80594C0(); - sub_80597F4(); - gSpecialVar_ItemId = gSaveBlock1.registeredItem; - taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1.registeredItem), 8); - gTasks[taskId].data[2] = 1; - return TRUE; - } - gSaveBlock1.registeredItem = 0; - } - ScriptContext1_SetupScript(Event_NoRegisteredItem); - return TRUE; -} - -static void sub_80A6D98(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - gUnknown_02038563 = CreateTask(sub_80A50C8, 0); - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -void sub_80A6DCC(void) -{ - sPopupMenuSelection = 0; - sReturnLocation = RETURN_TO_BATTLE; - SetMainCallback2(sub_80A6D98); -} - -static void sub_80A6DF0(u16 *a) -{ - u8 r6 = (gUnknown_02038564 - 1) * 2; - - Menu_DrawStdWindowFrame(7, 9 - r6, 13, 12); - sub_80A4008(a, 8, 10 - r6, 5, r6 + 2); - if (gUnknown_02038564 == 1) - { - Menu_PrintText(sItemPopupMenuActions[sPopupMenuActionList[0]].text, 8, 10); - } - else - { - Menu_PrintText(sItemPopupMenuActions[sPopupMenuActionList[0]].text, 8, 8); - Menu_PrintText(sItemPopupMenuActions[sPopupMenuActionList[1]].text, 8, 10); - } - InitMenu(0, 8, 10 - r6, gUnknown_02038564, 0, 5); - sub_80A7528(2); -} - -static void sub_80A6EB8(u8 taskId) -{ - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) - { - if (sPopupMenuSelection == 1) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = Menu_MoveCursor(-1); - } - } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) - { - if (sPopupMenuSelection + 1 < gUnknown_02038564) - { - PlaySE(SE_SELECT); - sPopupMenuSelection = Menu_MoveCursor(1); - } - } - else if (gMain.newKeys & A_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A4DA4(gBGTilemapBuffers[1]); - sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func(taskId); - } - else if (gMain.newKeys & B_BUTTON) - { - gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A4DA4(gBGTilemapBuffers[1]); - sItemPopupMenuActions[5].func(taskId); - } -} - -static const u8 gUnknown_083C1708[] = {4, 5}; -static const u8 gUnknown_083C170A[] = {5, 0}; - -static void sub_80A6FDC(void) -{ - if (ItemId_GetBattleUsage(gSpecialVar_ItemId) != 0) - { - sPopupMenuActionList = gUnknown_083C1708; - gUnknown_02038564 = 2; - } - else - { - sPopupMenuActionList = gUnknown_083C170A; - gUnknown_02038564 = 1; - } -} - -static void OnItemSelect_Battle(u8 taskId) -{ - sPopupMenuSelection = 0; - sub_80A6FDC(); - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - sub_80A6DF0(gBGTilemapBuffers[1]); - gTasks[taskId].func = sub_80A6EB8; -} - -void sub_80A7094(u8 taskId) -{ - gTasks[taskId].data[8] = (u32)sub_802E424 >> 16; - gTasks[taskId].data[9] = (u32)sub_802E424; - gTasks[taskId].func = HandleItemMenuPaletteFade; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -} - -static void OnBagClose_Battle(u8 taskId) -{ - PlaySE(SE_SELECT); - sub_80A7094(taskId); -} - -static void HandlePopupMenuAction_UseInBattle(u8 taskId) -{ - if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) - { - PlaySE(SE_SELECT); - ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); - } -} - -static void sub_80A7124(u8 taskId) -{ - PlaySE(SE_SELECT); - sub_80A7528(0); - sub_80A41D4(taskId); - ItemListMenu_InitMenu(); - sub_80A37C0(taskId); -} - -static void sub_80A7150(void) -{ - while (1) - { - if (SetupBagMultistep() == TRUE) - { - gUnknown_02038563 = CreateTask(sub_80A7230, 0); - gTasks[gUnknown_02038563].data[15] = 0; - break; - } - if (sub_80F9344() == TRUE) - break; - } -} - -void PrepareBagForWallyTutorial(void) -{ - u8 i; - - sPopupMenuSelection = 0; - sCurrentBagPocket = BAG_POCKET_ITEMS; - for (i = 0; i < 5; i++) - { - gBagPocketScrollStates[i].cursorPos = 0; - gBagPocketScrollStates[i].scrollTop = 0; - } - - // Save player's items - memcpy(ewramSavedItemsPocket, gSaveBlock1.bagPocket_Items, sizeof(gSaveBlock1.bagPocket_Items)); - memcpy(ewramSavedPokeballsPocket, gSaveBlock1.bagPocket_PokeBalls, sizeof(gSaveBlock1.bagPocket_PokeBalls)); - - // Add Wally's items to the bag - ClearItemSlots(gSaveBlock1.bagPocket_Items, ARRAY_COUNT(gSaveBlock1.bagPocket_Items)); - ClearItemSlots(gSaveBlock1.bagPocket_PokeBalls, ARRAY_COUNT(gSaveBlock1.bagPocket_PokeBalls)); - AddBagItem(ITEM_POTION, 1); - AddBagItem(ITEM_POKE_BALL, 1); - - sReturnLocation = RETURN_TO_WALLY_BATTLE; - SetMainCallback2(sub_80A7150); -} - -static void sub_80A7230(u8 taskId) -{ - s16 *taskData = gTasks[taskId].data; - - switch (taskData[15]) - { - case 102: - PlaySE(SE_SELECT); - sub_80A4E8C(1, 2); - break; - case 204: - PlaySE(SE_SELECT); - StopVerticalScrollIndicators(LEFT_ARROW); - StopVerticalScrollIndicators(RIGHT_ARROW); - gSpecialVar_ItemId = ITEM_POKE_BALL; - sPopupMenuActionList = gUnknown_083C1708; - gUnknown_02038564 = 2; - gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; - sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); - sub_80A73FC(); - sub_80A6DF0(gBGTilemapBuffers[1]); - break; - case 306: - PlaySE(SE_SELECT); - sub_80A4DA4(gBGTilemapBuffers[1]); - - // Restore player's items - memcpy(gSaveBlock1.bagPocket_Items, ewramSavedItemsPocket, sizeof(gSaveBlock1.bagPocket_Items)); - memcpy(gSaveBlock1.bagPocket_PokeBalls, ewramSavedPokeballsPocket, sizeof(gSaveBlock1.bagPocket_PokeBalls)); - - taskData[8] = (u32)sub_802E424 >> 16; - taskData[9] = (u32)sub_802E424; - gTasks[taskId].func = HandleItemMenuPaletteFade; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - return; - } - taskData[15]++; -} - -static void ItemListMenu_InitMenu(void) -{ - InitMenu(0, 14, 2, gBagPocketScrollStates[sCurrentBagPocket].cursorMax + 1, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, 0); - CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 15); - sub_80A73C0(); -} - -static void sub_80A73C0(void) -{ - MenuCursor_SetPos814AD7C(0x70, gBagPocketScrollStates[sCurrentBagPocket].cursorPos * 16 + 16); -} - -static void sub_80A73F0(void) -{ - sub_814ADC8(); -} - -static void sub_80A73FC(void) -{ - Menu_DestroyCursor(); - MenuCursor_Destroy814AD44(); -} - -static void sub_80A740C(void) -{ - sub_80A75E4(); - sub_80A7768(); - sub_80A7420(); -} - -static void sub_80A7420(void) -{ - struct UnknownStruct2 *unkStruct = &gUnknown_0203853C; - int index; - - switch (unkStruct->unk0) - { - case 3: - unkStruct->unk0 = 2; - break; - case 2: - switch (unkStruct->unk2) - { - case 0: - index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, unkStruct->textLine); - break; - case 1: - sub_80A4A98(gOtherText_SwitchWhichItem, unkStruct->textLine); - break; - case 2: - sub_80A4A98(gOtherText_WhatWillYouDo2, unkStruct->textLine); - break; - case 3: - sub_80A4A98(gOtherText_HowManyToToss, unkStruct->textLine); - break; - case 4: - sub_80A4A98(gOtherText_ThrewAwayItem, unkStruct->textLine); - break; - case 5: - sub_80A4A98(gOtherText_OkayToThrowAwayPrompt, unkStruct->textLine); - break; - case 6: - sub_80A4A98(gOtherText_HowManyToDeposit, unkStruct->textLine); - break; - case 7: - sub_80A4A98(gOtherText_DepositedItems, unkStruct->textLine); - break; - case 8: - sub_80A4A98(gOtherText_NoRoomForItems, unkStruct->textLine); - break; - case 9: - sub_80A4A98(gOtherText_CantStoreSomeoneItem, unkStruct->textLine); - break; - } - unkStruct->textLine++; - if (unkStruct->textLine == 3) - { - unkStruct->unk0 = 0; - sub_80A7918(); - } - break; - } -} - -static void sub_80A751C(void) -{ - gUnknown_0203853C.unk0 = 0; -} - -static void sub_80A7528(u8 a) -{ - gUnknown_0203853C.textLine = 0; - gUnknown_0203853C.unk2 = a; - switch (sub_80A78F4()) - { - case 0: - gUnknown_0203853C.unk0 = 2; - while (gUnknown_0203853C.unk0 != 0) - sub_80A7420(); - break; - case 1: - gUnknown_0203853C.unk0 = 3; - break; - case 2: - gUnknown_0203853C.unk0 = 1; - break; - } -} - -static void sub_80A756C(void) -{ - if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) - sub_80A7918(); - gUnknown_0203853C.unk0 = 0; -} - -static void sub_80A7590(void) -{ - Menu_EraseWindowRect(0, 13, 13, 20); - sub_80A756C(); -} - -static void sub_80A75A8(void) -{ - if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) - gUnknown_0203853C.unk0 = 1; -} - -static void sub_80A75C4(void) -{ - switch (gUnknown_0203853C.unk0) - { - case 1: - gUnknown_0203853C.unk0 = 3; - break; - case 0: - sub_80A7918(); - break; - } -} - -static void sub_80A75E4(void) -{ - if (gUnknown_02038540.unk0 == 1 && sub_80A7988() == 0) - { - int r1; - - sub_80A47E8(gUnknown_02038563, gUnknown_02038540.unk1, gUnknown_02038540.unk1, 1); - gUnknown_02038540.unk1++; - if (gUnknown_02038540.unk2 != 0) - r1 = 5; - else - r1 = 7; - if (r1 < gUnknown_02038540.unk1) - { - gUnknown_02038540.unk0 = 0; - sub_80A78E8(); - } - } -} - -static void sub_80A7630(void) -{ - gUnknown_02038540.unk0 = 0; -} - -static void sub_80A763C(void) -{ - struct UnknownStruct3 *r4 = &gUnknown_02038540; - - switch (sub_80A78C4()) - { - case FALSE: - sub_80A48E8(gUnknown_02038563, 0, 7); - break; - case TRUE: - r4->unk0 = 1; - r4->unk1 = 0; - r4->unk2 = 0; - break; - } -} - -static void sub_80A7678(void) -{ - if (gUnknown_02038540.unk0 == 1) - sub_80A78E8(); - gUnknown_02038540.unk0 = 0; -} - -static void sub_80A7694(void) -{ - gUnknown_02038540.unk2 = 1; -} - -static void sub_80A76A0(void) -{ - Menu_EraseWindowRect(14, 2, 29, 18); - sub_80A7678(); -} - -static bool32 sub_80A76B8(void) -{ - struct UnknownStruct3 *s = &gUnknown_02038540; - - return (s->unk0 == 0); -} - -static bool32 sub_80A76D0(void) -{ - struct UnknownStruct3 *s = &gUnknown_02038540; - - return (s->unk1 > 5); -} - -static void sub_80A76E8(void) -{ - if (gUnknown_02038544.unk0 == 1) - { - DisplayItemMessageOnField( - gUnknown_02038544.unk1, - gUnknown_02038544.unk4, - gUnknown_02038544.unk8, - gUnknown_02038544.unk2); - gUnknown_02038544.unk0 = 0; - } -} - -static void sub_80A770C(void) -{ - gUnknown_02038544.unk0 = 0; -} - -static void DisplayCannotUseItemMessage(int a, const u8 *b, TaskFunc func, int d) -{ - struct UnknownStruct4 *r4 = &gUnknown_02038544; - - switch (sub_80A7924()) - { - case 0: - DisplayItemMessageOnField(a, b, func, d); - break; - case 2: - r4->unk0 = 1; - r4->unk1 = a; - r4->unk4 = b; - r4->unk8 = func; - r4->unk2 = d; - break; - } -} - -static void sub_80A7768(void) -{ - struct UnknownStruct5 *r4 = &gUnknown_02038550; - - if (r4->unk0 == 2) - { - if (r4->unk1 != 0) - { - if (r4->unk2 != 1) - { - const u8 *text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text; - int var = r4->unk1 - 1; - - Menu_PrintText(text, 7, var * 2 + 1 + r4->unk3); - } - else - { - const u8 *text; - int var; - - if (r4->unk1 == 1) - text = sub_80A4B90(gSpecialVar_ItemId); - else - text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text; - var = r4->unk1 - 1; - Menu_PrintText(text, (var >> 1) * 6 + 1, (var & 1) * 2 + 8); - } - if (r4->unk1 == gUnknown_02038564) - { - r4->unk0 = 0; - sub_80A7970(); - } - } - r4->unk1++; - } -} - -static void sub_80A7828(void) -{ - gUnknown_02038550.unk0 = 0; -} - -static void sub_80A7834(int a, int b) -{ - struct UnknownStruct5 *r4 = &gUnknown_02038550; - - switch (sub_80A7958()) - { - case 1: - r4->unk0 = 2; - r4->unk1 = 0; - r4->unk2 = a; - r4->unk3 = b; - break; - case 2: - r4->unk0 = 1; - r4->unk1 = 0; - r4->unk2 = a; - r4->unk3 = b; - break; - } -} - -static void sub_80A7868(void) -{ - if (gUnknown_02038550.unk0 == 2) - gUnknown_02038550.unk0 = 1; -} - -static void sub_80A7880(void) -{ - switch (gUnknown_02038550.unk0) - { - case 1: - gUnknown_02038550.unk0 = 2; - break; - case 0: - sub_80A7970(); - break; - } -} - -static bool32 sub_80A78A0(void) -{ - struct UnknownStruct5 *r0 = &gUnknown_02038550; - - return (r0->unk0 == 0); -} - -static void sub_80A78B8(void) -{ - gUnknown_02038554.unk0 = 0; -} - -static bool32 sub_80A78C4(void) -{ - bool32 retVal; - - if (gLinkOpen == TRUE) - { - sub_80A7868(); - sub_80A75A8(); - retVal = TRUE; - } - else - { - retVal = FALSE; - } - return retVal; -} - -static void sub_80A78E8(void) -{ - sub_80A7880(); -} - -static int sub_80A78F4(void) -{ - int retVal; - - if (gLinkOpen == TRUE) - { - if (sub_80A76B8() != 0) - retVal = 1; - else - retVal = 2; - } - else - { - retVal = 0; - } - return retVal; -} - -static void sub_80A7918(void) -{ - sub_80A76E8(); -} - -static int sub_80A7924(void) -{ - if (gLinkOpen == TRUE && sub_80A76B8() == 0) - { - if (sub_80A76D0() != 0) - { - sub_80A7678(); - return 0; - } - } - else - { - return 0; - } - sub_80A7694(); - return 2; -} - -static int sub_80A7958(void) -{ - if (sub_80A76B8() == 0) - return 2; - sub_80A75A8(); - return 1; -} - -static void sub_80A7970(void) -{ - sub_80A75C4(); -} - -static void sub_80A797C(void) -{ - gUnknown_02038554.unk0 = 1; -} - -static int sub_80A7988(void) -{ - int val = gUnknown_02038554.unk0; - - gUnknown_02038554.unk0 = 0; - return val; -} - -static const u16 gPalette_83C170C[] = INCBIN_U16("graphics/unknown/83C170C.gbapal"); -static const u8 gSpriteImage_83C172C[] = INCBIN_U8("graphics/unknown_sprites/83C172C.4bpp"); - -const u8 gSpriteImage_UnusedCherry[] = INCBIN_U8("graphics/unused/cherry.4bpp"); -const u16 gSpritePalette_UnusedCherry[] = INCBIN_U16("graphics/unused/cherry.gbapal"); - -//------------------------------------------------------------------------------ -// Bag Sprite -//------------------------------------------------------------------------------ - -static const struct OamData sBagSpriteOamData = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 2, - .paletteNum = 7, - .affineParam = 0, -}; - -static const union AnimCmd sBagSpriteAnimSeq0[] = -{ - ANIMCMD_FRAME(0, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq1[] = -{ - ANIMCMD_FRAME(64, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq5[] = -{ - ANIMCMD_FRAME(128, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq2[] = -{ - ANIMCMD_FRAME(192, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq3[] = -{ - ANIMCMD_FRAME(256, 4), - ANIMCMD_END, -}; - -static const union AnimCmd sBagSpriteAnimSeq4[] = -{ - ANIMCMD_FRAME(320, 4), - ANIMCMD_END, -}; - -static const union AnimCmd *const sBagSpriteAnimTable[] = -{ - sBagSpriteAnimSeq0, - sBagSpriteAnimSeq1, - sBagSpriteAnimSeq2, - sBagSpriteAnimSeq3, - sBagSpriteAnimSeq4, - sBagSpriteAnimSeq5, -}; - -static const union AffineAnimCmd sBagSpriteAffineAnimSeq[] = -{ - 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, -}; - -static const union AffineAnimCmd *const sBagSpriteAffineAnimTable[] = -{ - sBagSpriteAffineAnimSeq, -}; - -static const struct CompressedSpriteSheet sMaleBagSpriteSheet = {gBagMaleTiles, 0x3000, 30000}; -static const struct CompressedSpriteSheet sFemaleBagSpriteSheet = {gBagFemaleTiles, 0x3000, 30000}; -static const struct CompressedSpritePalette sBagSpritePalette = {gBagPalette, 30000}; - -static void sub_80A7998(struct Sprite *sprite) -{ - sprite->animNum = 0; - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = 0; - sprite->callback = sub_80A79B4; -} - -static void sub_80A79B4(struct Sprite *sprite) -{ - if (gUnknown_0203855B != -1) - sub_80A79EC(sprite); - if (gUnknown_0203855C != 0) - sub_80A7A94(sprite); -} - -static void sub_80A79EC(struct Sprite *sprite) -{ - switch (sprite->data[3]) - { - case 0: - if (gUnknown_0203855B != 6) - { - sprite->animBeginning = TRUE; - sprite->animNum = gUnknown_0203855B; - gUnknown_0203855B = -1; - } - else - { - sprite->animBeginning = TRUE; - sprite->animNum = 0; - sprite->pos1.y -= 4; - sprite->data[0] = 4; - sprite->data[3] = 1; - sub_80A7AE4(sprite); - } - break; - case 1: - if (sprite->data[0] != 0) - { - if (sprite->data[1] != 0) - { - sprite->pos1.y++; - sprite->data[0]--; - } - sprite->data[1] = (sprite->data[1] + 1) & 1; - } - else - { - gUnknown_0203855B = -1; - sprite->data[1] = 0; - sprite->data[3] = 0; - } - break; - } -} - -static void sub_80A7A94(struct Sprite *sprite) -{ - switch (sprite->data[4]) - { - case 0: - sprite->oam.affineMode = 1; - sprite->affineAnims = sBagSpriteAffineAnimTable; - InitSpriteAffineAnim(sprite); - sprite->data[4] = 1; - break; - case 1: - sprite->data[2]++; - if (sprite->data[2] == 12) - sub_80A7AE4(sprite); - break; - } -} - -static void sub_80A7AE4(struct Sprite *sprite) -{ - gUnknown_0203855C = 0; - sprite->oam.affineMode = 0; - sprite->data[2] = 0; - sprite->data[4] = 0; - FreeOamMatrix(sprite->oam.matrixNum); -} - -static const struct SpriteTemplate sBagSpriteTemplate = -{ - .tileTag = 30000, - .paletteTag = 30000, - .oam = &sBagSpriteOamData, - .anims = sBagSpriteAnimTable, - .images = NULL, - .affineAnims = sBagSpriteAffineAnimTable, - .callback = sub_80A7998, -}; - -static void CreateBagSprite(void) -{ - CreateSprite(&sBagSpriteTemplate, 58, 40, 0); -} - -//------------------------------------------------------------------------------ -// Pokeball Sprite -//------------------------------------------------------------------------------ - -static const struct OamData gOamData_83C1CF8 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 4, - .size = 1, - .tileNum = 0, - .priority = 2, - .paletteNum = 8, - .affineParam = 0, -}; - -static const union AffineAnimCmd gSpriteAffineAnim_83C1D00[] = -{ - AFFINEANIMCMD_FRAME(0, 0, 8, 32), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd gSpriteAffineAnim_83C1D10[] = -{ - AFFINEANIMCMD_FRAME(0, 0, -8, 32), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1D20[] = -{ - gSpriteAffineAnim_83C1D00, - gSpriteAffineAnim_83C1D10, -}; - -static const struct SpriteFrameImage gSpriteImageTable_83C1D28[] = -{ - {gSpriteImage_83C172C, sizeof(gSpriteImage_83C172C)}, -}; - -static const struct SpritePalette sPokeballSpritePalette = {gPalette_83C170C, 8}; - -static void sub_80A7B28(struct Sprite *sprite) -{ - sprite->data[3] = 0; - sprite->data[0] = 0; - sub_80A7B6C(sprite); - sprite->callback = sub_80A7B6C; -} - -static void sub_80A7B48(struct Sprite *sprite) -{ - sprite->centerToCornerVecX = sprite->data[5] - ((sprite->data[0] + 1) & 1); - sprite->centerToCornerVecY = sprite->data[6] - ((sprite->data[0] + 1) & 1); -} - -static void sub_80A7B6C(struct Sprite *sprite) -{ - if (sprite->data[7] != 0) - { - switch (sprite->data[3]) - { - case 0: - sprite->oam.affineMode = 1; - if (sprite->data[7] == 1) - sprite->affineAnims = gSpriteAffineAnimTable_83C1D20; - else - sprite->affineAnims = gSpriteAffineAnimTable_83C1D20 + 1; - InitSpriteAffineAnim(sprite); - sprite->data[3] = 1; - sprite->data[5] = sprite->centerToCornerVecX; - sprite->data[6] = sprite->centerToCornerVecY; - sub_80A7B48(sprite); - break; - case 1: - sprite->data[0]++; - sub_80A7B48(sprite); - if (sprite->data[0] == 32) - { - sprite->data[0] = 0; - sprite->data[3] = 0; - sprite->centerToCornerVecX = sprite->data[5]; - sprite->centerToCornerVecY = sprite->data[6]; - FreeOamMatrix(sprite->oam.matrixNum); - sprite->oam.affineMode = 0; - sprite->callback = SpriteCallbackDummy; - } - break; - } - } -} - -static const struct SpriteTemplate sPokeballSpriteTemplate = -{ - .tileTag = 0xFFFF, - .paletteTag = 8, - .oam = &gOamData_83C1CF8, - .anims = sBagSpriteAnimTable, - .images = gSpriteImageTable_83C1D28, - .affineAnims = gSpriteAffineAnimTable_83C1D20, - .callback = sub_80A7B28, -}; - -static void CreateBagPokeballSprite(u8 a) -{ - LoadSpritePalette(&sPokeballSpritePalette); - sPokeballSpriteId = CreateSprite(&sPokeballSpriteTemplate, 16, 88, 0); - gSprites[sPokeballSpriteId].data[7] = a; -} - -static void sub_80A7C64(void) -{ - FreeSpritePaletteByTag(8); - FreeOamMatrix(gSprites[sPokeballSpriteId].oam.matrixNum); - DestroySprite(&gSprites[sPokeballSpriteId]); -} - -static const struct OamData sBerrySpriteOamData = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 7, - .affineParam = 0, -}; - -static const struct OamData gOamData_83C1D58 = -{ - .y = 0, - .affineMode = 3, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 7, - .affineParam = 0, -}; - -static const union AnimCmd sBerrySpriteAnimSeq[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd *const sBerrySpriteAnimTable[] = -{ - sBerrySpriteAnimSeq, -}; - -static const struct SpriteFrameImage sBerrySpriteImageTable[] = -{ - {ewramBerryPic, 0x800}, -}; - -static void SpriteCB_BerrySprite(struct Sprite *); -static const struct SpriteTemplate sBerrySpriteTemplate = -{ - .tileTag = 0xFFFF, - .paletteTag = 30020, - .oam = &sBerrySpriteOamData, - .anims = sBerrySpriteAnimTable, - .images = sBerrySpriteImageTable, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BerrySprite, -}; - -static const union AffineAnimCmd gSpriteAffineAnim_83C1D8C[] = -{ - AFFINEANIMCMD_FRAME(-1, -1, -3, 96), - AFFINEANIMCMD_FRAME(0, 0, 0, 16), - AFFINEANIMCMD_FRAME(-2, -2, -1, 64), - AFFINEANIMCMD_FRAME(-8, 0, 0, 16), - AFFINEANIMCMD_FRAME(0, -8, 0, 16), - AFFINEANIMCMD_FRAME(256, 256, 0, 0), - AFFINEANIMCMD_JUMP(0), -}; - -static const union AffineAnimCmd gSpriteAffineAnim_83C1DC4[] = -{ - AFFINEANIMCMD_FRAME(-1, -1, 3, 96), - AFFINEANIMCMD_FRAME(0, 0, 0, 16), - AFFINEANIMCMD_FRAME(-2, -2, 1, 64), - AFFINEANIMCMD_FRAME(-8, 0, 0, 16), - AFFINEANIMCMD_FRAME(0, -8, 0, 16), - AFFINEANIMCMD_FRAME(256, 256, 0, 0), - AFFINEANIMCMD_JUMP(0), -}; - -static const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1DFC[] = -{ - gSpriteAffineAnim_83C1D8C, - gSpriteAffineAnim_83C1DC4, -}; - -static const struct SpriteTemplate gSpriteTemplate_83C1E04 = -{ - .tileTag = 0xFFFF, - .paletteTag = 30020, - .oam = &gOamData_83C1D58, - .anims = sBerrySpriteAnimTable, - .images = sBerrySpriteImageTable, - .affineAnims = gSpriteAffineAnimTable_83C1DFC, - .callback = SpriteCallbackDummy, -}; - -static const struct {const u8 *lzPic; const u8 *lzPalette;} sBerryGraphicsTable[] = -{ - {gBerryPic_Cheri, gBerryPalette_Cheri}, - {gBerryPic_Chesto, gBerryPalette_Chesto}, - {gBerryPic_Pecha, gBerryPalette_Pecha}, - {gBerryPic_Rawst, gBerryPalette_Rawst}, - {gBerryPic_Aspear, gBerryPalette_Aspear}, - {gBerryPic_Leppa, gBerryPalette_Leppa}, - {gBerryPic_Oran, gBerryPalette_Oran}, - {gBerryPic_Persim, gBerryPalette_Persim}, - {gBerryPic_Lum, gBerryPalette_Lum}, - {gBerryPic_Sitrus, gBerryPalette_Sitrus}, - {gBerryPic_Figy, gBerryPalette_Figy}, - {gBerryPic_Wiki, gBerryPalette_Wiki}, - {gBerryPic_Mago, gBerryPalette_Mago}, - {gBerryPic_Aguav, gBerryPalette_Aguav}, - {gBerryPic_Iapapa, gBerryPalette_Iapapa}, - {gBerryPic_Razz, gBerryPalette_Razz}, - {gBerryPic_Bluk, gBerryPalette_Bluk}, - {gBerryPic_Nanab, gBerryPalette_Nanab}, - {gBerryPic_Wepear, gBerryPalette_Wepear}, - {gBerryPic_Pinap, gBerryPalette_Pinap}, - {gBerryPic_Pomeg, gBerryPalette_Pomeg}, - {gBerryPic_Kelpsy, gBerryPalette_Kelpsy}, - {gBerryPic_Qualot, gBerryPalette_Qualot}, - {gBerryPic_Hondew, gBerryPalette_Hondew}, - {gBerryPic_Grepa, gBerryPalette_Grepa}, - {gBerryPic_Tamato, gBerryPalette_Tamato}, - {gBerryPic_Cornn, gBerryPalette_Cornn}, - {gBerryPic_Magost, gBerryPalette_Magost}, - {gBerryPic_Rabuta, gBerryPalette_Rabuta}, - {gBerryPic_Nomel, gBerryPalette_Nomel}, - {gBerryPic_Spelon, gBerryPalette_Spelon}, - {gBerryPic_Pamtre, gBerryPalette_Pamtre}, - {gBerryPic_Watmel, gBerryPalette_Watmel}, - {gBerryPic_Durin, gBerryPalette_Durin}, - {gBerryPic_Belue, gBerryPalette_Belue}, - {gBerryPic_Liechi, gBerryPalette_Liechi}, - {gBerryPic_Ganlon, gBerryPalette_Ganlon}, - {gBerryPic_Salac, gBerryPalette_Salac}, - {gBerryPic_Petaya, gBerryPalette_Petaya}, - {gBerryPic_Apicot, gBerryPalette_Apicot}, - {gBerryPic_Lansat, gBerryPalette_Lansat}, - {gBerryPic_Starf, gBerryPalette_Starf}, - {gBerryPic_Enigma, gBerryPalette_Enigma}, -}; - -static void DrawBerryPic(const u8 *src, u8 *dst) -{ - u8 i; - u8 j; - - memset(dst, 0, 0x800); - dst += 0x100; - for (i = 0; i < 6; i++) - { - dst += 32; - for (j = 0; j < 6; j++) - { - memcpy(dst, src, 32); - dst += 32; - src += 32; - } - if (i != 5) - dst += 32; - } -} - -static void LoadBerryPic(u8 berryId) -{ - struct SpritePalette spritePal; - - if (berryId == 0x2A && IsEnigmaBerryValid() == TRUE) - { - DrawBerryPic(gSaveBlock1.enigmaBerry.pic, ewramBerryPic); - spritePal.data = gSaveBlock1.enigmaBerry.palette; - spritePal.tag = 0x7544; - LoadSpritePalette(&spritePal); - } - else - { - spritePal.data = (u16 *)sBerryGraphicsTable[berryId].lzPalette; - spritePal.tag = 0x7544; - LoadCompressedObjectPalette((struct CompressedSpritePalette *)&spritePal); - LZDecompressWram(sBerryGraphicsTable[berryId].lzPic, ewramBerryPicTemp); - DrawBerryPic(ewramBerryPicTemp, ewramBerryPic); - } -} - -u8 CreateBerrySprite(u8 berryId, s16 x, s16 y) -{ - LoadBerryPic(berryId); - return CreateSprite(&sBerrySpriteTemplate, x, y, 0); -} - -static void SpriteCB_BerrySprite(struct Sprite *sprite) -{ - sprite->pos2.y = -gBattle_BG1_Y; -} - -void sub_80A7DD4(void) -{ - FreeSpritePaletteByTag(0x7544); - FreeSpritePaletteByTag(8); -} - -u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate) -{ - u8 spriteId; - - FreeSpritePaletteByTag(0x7544); - LoadBerryPic(berryId); - spriteId = CreateSprite(&gSpriteTemplate_83C1E04, x, y, 0); - if (animate == TRUE) - StartSpriteAffineAnim(&gSprites[spriteId], 1); - return spriteId; -} - -const struct CompressedSpriteSheet gUnknown_083C1F74 = {gBerryCheckCircle_Gfx, 2048, 0x2710}; - -const struct CompressedSpritePalette gUnknown_083C1F7C = {gBerryCheck_Pal, 0x2710}; - -static const struct OamData gOamData_83C1F84 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd gSpriteAnim_83C1F8C[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd *const gSpriteAnimTable_83C1F94[] = -{ - gSpriteAnim_83C1F8C, -}; - -static const struct SpriteTemplate gSpriteTemplate_83C1F98 = -{ - .tileTag = 10000, - .paletteTag = 10000, - .oam = &gOamData_83C1F84, - .anims = gSpriteAnimTable_83C1F94, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_BerrySprite, -}; - -u8 sub_80A7E5C(s16 x) -{ - return CreateSprite(&gSpriteTemplate_83C1F98, x, 99, 0); -} |