summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/item_menu.c1353
1 files changed, 1313 insertions, 40 deletions
diff --git a/src/item_menu.c b/src/item_menu.c
index 00ba284bd..55d3f088c 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -1,47 +1,59 @@
#include "global.h"
+#include "battle_frontier_2.h"
#include "bg.h"
#include "constants/items.h"
#include "constants/songs.h"
#include "decompress.h"
#include "event_data.h"
+#include "field_player_avatar.h"
#include "gpu_regs.h"
#include "international_string_util.h"
#include "item.h"
#include "list_menu.h"
+#include "link.h"
+#include "mail.h"
#include "main.h"
#include "malloc.h"
+#include "map_name_popup.h"
#include "menu.h"
#include "menu_indicators.h"
#include "money.h"
#include "new_menu_helpers.h"
+#include "overworld.h"
#include "palette.h"
+#include "pokemon.h"
#include "rom_818CFC8.h"
#include "scanline_effect.h"
+#include "script.h"
#include "sound.h"
#include "sprite.h"
#include "string.h"
#include "string_util.h"
#include "task.h"
+#include "text_window.h"
#include "menu_helpers.h"
#include "window.h"
struct bagStruct {
- void *func;
- u8 unk4;
+ void (*bagCallback)(void);
+ u8 location;
u8 pocket;
u8 unk6[2];
- u16 unk8[5];
- u16 unk12[5];
- void *unk1C;
+ u16 cursorPosition[5];
+ u16 scrollPosition[5];
+ u8 **pocketStringsPtr;
};
struct unkBagStruct {
- void* unk0;
+ MainCallback unk0;
u8 unk4[0x800];
u8 unk804;
- u8 filler4;
+ u8 unk805;
u8 unk806[10];
- u8 unk810[10];
+ u8 unk810[7];
+ u8 unk817;
+ u8 unk818;
+ u8 unk819;
u8 unk81A;
u8 unk81B:4;
u8 unk81B_1:2;
@@ -50,11 +62,17 @@ struct unkBagStruct {
u8 filler3[2];
u8 unk81E;
u8 unk81F;
- u8 filler5[9];
+ u8* unk820;
+ u8 unk824;
+ u8 unk825;
+ u8 filler[2];
+ u8 unk828;
u8 unk829[5];
u8 unk82E[6];
s16 unk834;
- u8 filler2[0x412];
+ u8 filler4[0xE];
+ u8 unk844[32][32];
+ u8 filler2[4];
};
struct listBuffer1 {
@@ -65,10 +83,25 @@ struct listBuffer2 {
s8 name[65][24];
};
+struct unkWallyStruct {
+ struct ItemSlot bagPocket_Items[30];
+ struct ItemSlot bagPocket_PokeBalls[16];
+ u16 cursorPosition[5];
+ u16 scrollPosition[5];
+ u8 filler[0x2];
+ u16 pocket;
+};
+
+struct unkStructTextFunc{
+ u8* text;
+ TaskFunc func;
+};
+
extern struct bagStruct gUnknown_0203CE58;
extern struct unkBagStruct *gUnknown_0203CE54;
extern struct listBuffer1 *gUnknown_0203CE74;
extern struct listBuffer2 *gUnknown_0203CE78;
+extern struct unkWallyStruct *gUnknown_0203CE80;
extern u16 gUnknown_0203CE6A[];
extern u16 gUnknown_0203CE60[];
extern void sub_8086194(void);
@@ -95,6 +128,29 @@ extern void sub_80D6FB4(struct BagPocket*);
extern void sub_80D6F64(struct BagPocket*);
extern u8 GetLRKeysState(void);
extern void sub_81AC23C(u8);
+extern void sub_81AF15C(u8, u8, u8);
+extern void sub_80D4FEC(u8);
+extern void sub_80D4FC8(u8);
+extern void sub_80D702C(struct ItemSlot*, s16, u16);
+extern bool8 sub_8122148(u16);
+extern void AddItemMenuActionTextPrinters (u8, u8, u8, u8, u8, u8, u8, struct unkStructTextFunc*, u8*);
+extern void sub_8198DBC(u8, u8, u8, u8, u8, u8, u8, struct unkStructTextFunc*, u8*);
+extern void sub_8199944(u8, u8, u8, u8, u8);
+extern void sub_8199134(s8, s8);
+extern void sub_80FDD10(u8);
+extern bool8 AdjustQuantityAccordingToDPadInput(s16*, u16);
+extern void sub_81B7F60(void);
+extern bool8 itemid_80BF6D8_mail_related(u16);
+extern void sub_8177C14(void);
+extern void sub_808B864(void);
+extern void sub_808BCF4(void);
+extern void FreezeMapObjects(void);
+extern bool8 InMultiBattleRoom(void);
+extern void (*gFieldCallback)(void);
+extern void sub_819FA50(void);
+extern void sub_818DEF4(void);
+extern void sub_818E564(void);
+extern void sub_819A2BC(u8, u8);
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
void CB2_Bag(void);
@@ -105,7 +161,7 @@ void setup_bag_menu_textboxes(void);
void allocate_bag_item_list_buffers(void);
void load_bag_item_list_buffers(u8);
void bag_menu_print_pocket_names(u8*, u8*);
-void bag_menu_copy_pocket_name_to_window(u8);
+void bag_menu_copy_pocket_name_to_window(u32);
void bag_menu_draw_pocket_indicator_square(u8, u8);
void AddBagVisualObject(u8);
void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void);
@@ -139,6 +195,36 @@ void SetBagVisualPocketId(u8, u8);
void RemoveBagObject(u8);
void AddSwitchPocketRotatingBallObject(s16);
void sub_81AC10C(u8);
+void sub_81AC3C0(u8);
+void sub_81AC498(u8);
+void sub_81AC590(u8);
+void PrintTMHMMoveData(u16);
+void sub_81ACAF8(u8);
+void sub_81ACB54(u8, u8, u8);
+void Task_HandleInBattleItemMenuInput(u8);
+void Task_HandleOutOfBattleItemMenuInput(u8);
+bool8 sub_81ACDFC(s8);
+void bag_menu_remove_window(u8);
+void bag_menu_print_there_is_no_pokemon(u8);
+void Task_ChooseHowManyToToss(u8);
+void BagMenuConfirmToss(u8);
+void bag_menu_yes_no(u8, u8, struct YesNoFuncTable*);
+void Task_ActuallyToss(u8);
+void ItemMenu_Cancel(u8);
+void sub_81AD350(u8);
+void bag_menu_print_cant_be_held_msg(u8);
+void bag_menu_AddMoney_window(void);
+void sub_81AD680(u8);
+void sub_81AD730(u8);
+void sub_81AD6E4(u8);
+void bag_menu_remove_money_window(void);
+void bag_menu_RemoveBagItem_message_window(u8);
+void sub_81AD794(u8);
+void sub_81AD8C8(u8);
+void sub_81AD9C0(u8);
+void sub_81ADB14(u8);
+void sub_81ADA7C(u8);
+void sub_81ADC0C(u8);
extern u8 *gPocketNamesStringsTable[];
extern struct BgTemplate gUnknown_08613F90[];
@@ -164,12 +250,51 @@ extern u32 gUnknown_08614094[];
extern u32 gUnknown_0203CE5E[];
extern u16 gSpecialVar_ItemId;
extern TaskFunc gUnknown_08614054[];
+extern u8 gText_MoveVar1Where[];
+extern u8 gUnknown_0861402C[];
+extern u8 gUnknown_08614030[];
+extern u8 gUnknown_08614034[];
+extern u8 gUnknown_08614038[];
+extern u8 gUnknown_0861403C[];
+extern u8 gUnknown_08614042[];
+extern u8 gUnknown_08614044[];
+extern u8 gUnknown_08614046[];
+extern u8 gUnknown_08614047[];
+extern u8 gUnknown_0861404B[];
+extern u8 gUnknown_0861404D[];
+extern u8 gUnknown_0861404F[];
+extern u8 gText_Var1IsSelected[];
+extern struct unkStructTextFunc gUnknown_08613FB4[];
+extern u8 gText_TossHowManyVar1s[];
+extern u8 gText_ConfirmTossItems[];
+extern struct YesNoFuncTable gUnknown_08614084;
+extern u8 gText_ThrewAwayVar2Var1s[];
+extern u8 gText_CantWriteMail[];
+extern u8 gText_NoPokemon[];
+extern u8 gText_Var1CantBeHeld[];
+extern u8 gText_Var1CantBeHeldHere[];
+extern u8 EventScript_2736B3[];
+extern u8 gText_CantBuyKeyItem[];
+extern u8 gText_HowManyToSell[];
+extern u8 gText_ICanPayVar1[];
+extern struct YesNoFuncTable gUnknown_0861408C;
+extern u8 gText_TurnedOverVar1ForVar2[];
+extern u8 gText_DepositHowManyVar1[];
+extern u8 gText_CantStoreImportantItems[];
+extern u8 gText_DepositedVar2Var1s[];
+extern u8 gText_NoRoomForItems[];
+extern struct WindowTemplate gUnknown_08614174[];
+extern u16 gUnknown_0860F074[];
+extern struct TextColor gUnknown_08614164[];
+extern struct WindowTemplate gUnknown_086141AC[];
+extern struct BattleMove gBattleMoves[];
+extern u8 gText_ThreeDashes[];
void ResetBagScrollPositions(void)
{
gUnknown_0203CE58.pocket = 0;
- memset(gUnknown_0203CE58.unk8, 0, 10);
- memset(gUnknown_0203CE58.unk12, 0, 10);
+ memset(gUnknown_0203CE58.cursorPosition, 0, 10);
+ memset(gUnknown_0203CE58.scrollPosition, 0, 10);
}
void CB2_BagMenuFromStartMenu(void)
@@ -233,12 +358,12 @@ void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)
else
{
if (bagMenuType != 12)
- gUnknown_0203CE58.unk4 = bagMenuType;
+ gUnknown_0203CE58.location = bagMenuType;
if (postExitMenuMainCallback2)
- gUnknown_0203CE58.func = postExitMenuMainCallback2;
+ gUnknown_0203CE58.bagCallback = postExitMenuMainCallback2;
if (pocketId <= 4)
gUnknown_0203CE58.pocket = pocketId;
- temp = gUnknown_0203CE58.unk4 - 4;
+ temp = gUnknown_0203CE58.location - 4;
if (temp <= 1)
gUnknown_0203CE54->unk81B = 1;
gUnknown_0203CE54->unk0 = 0;
@@ -344,8 +469,8 @@ bool8 setup_bag_menu(void)
gMain.state++;
break;
case 14:
- taskId = sub_81AB1F0(gUnknown_0203CE58.unk4);
- gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket], gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket]);
+ taskId = sub_81AB1F0(gUnknown_0203CE58.location);
+ gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[8] = 0;
gMain.state++;
@@ -590,7 +715,7 @@ void bag_menu_print_description_box_text(int a)
str = (u8*)ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a));
else
{
- StringCopy(gStringVar1, gReturnToXStringsTable[gUnknown_0203CE58.unk4]);
+ StringCopy(gStringVar1, gReturnToXStringsTable[gUnknown_0203CE58.location]);
str = gStringVar4;
StringExpandPlaceholders(str, gText_ReturnToVar1);
}
@@ -615,7 +740,7 @@ void bag_menu_print_cursor(u8 a, u8 b)
void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void)
{
if (gUnknown_0203CE54->unk81E == 0xFF)
- gUnknown_0203CE54->unk81E = AddScrollIndicatorArrowPairParametrized(2, 0xAC, 12, 0x94, gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - gUnknown_0203CE54->unk82E[gUnknown_0203CE58.pocket], 0x6E, 0x6E, &gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket]);
+ gUnknown_0203CE54->unk81E = AddScrollIndicatorArrowPairParametrized(2, 0xAC, 12, 0x94, gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - gUnknown_0203CE54->unk82E[gUnknown_0203CE58.pocket], 0x6E, 0x6E, &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]);
}
void sub_81AB824(void)
@@ -662,11 +787,11 @@ void task_close_bag_menu_2(u8 taskId)
s16* data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
- sub_81AE6C8(data[0], &gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket]);
+ sub_81AE6C8(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
if (gUnknown_0203CE54->unk0 != 0)
SetMainCallback2(gUnknown_0203CE54->unk0);
else
- SetMainCallback2(gUnknown_0203CE58.func);
+ SetMainCallback2(gUnknown_0203CE58.bagCallback);
sub_81AB824();
ResetSpriteData();
FreeAllSpritePalettes();
@@ -709,7 +834,7 @@ void sub_81ABA6C(void)
void sub_81ABA88(u8 a)
{
- sub_812225C(&gUnknown_0203CE58.unk12[a], &gUnknown_0203CE58.unk8[a], gUnknown_0203CE54->unk82E[a], gUnknown_0203CE54->unk829[a]);
+ sub_812225C(&gUnknown_0203CE58.scrollPosition[a], &gUnknown_0203CE58.cursorPosition[a], gUnknown_0203CE54->unk82E[a], gUnknown_0203CE54->unk829[a]);
}
void sub_81ABAC4(void)
@@ -723,12 +848,12 @@ void sub_81ABAE0(void)
{
u8 i;
for (i = 0;i < 5;i++)
- sub_8122298(&gUnknown_0203CE58.unk12[i], &gUnknown_0203CE58.unk8[i], gUnknown_0203CE54->unk82E[i], gUnknown_0203CE54->unk829[i], 8);
+ sub_8122298(&gUnknown_0203CE58.scrollPosition[i], &gUnknown_0203CE58.cursorPosition[i], gUnknown_0203CE54->unk82E[i], gUnknown_0203CE54->unk829[i], 8);
}
u8 sub_81ABB2C(u8 a)
{
- return gUnknown_0203CE58.unk12[a] + gUnknown_0203CE58.unk8[a];
+ return gUnknown_0203CE58.scrollPosition[a] + gUnknown_0203CE58.cursorPosition[a];
}
void DisplayItemMessage(u8 taskId, u8 fontId, u8 *str, void ( *callback)(u8 taskId))
@@ -744,14 +869,14 @@ void DisplayItemMessage(u8 taskId, u8 fontId, u8 *str, void ( *callback)(u8 task
void bag_menu_inits_lists_menu(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u16* ScrollPos = &gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket];
- u16* CursorPos = &gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket];
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
bag_menu_RemoveBagItem_message_window(4);
- sub_81AE6C8(data[0], ScrollPos, CursorPos);
+ sub_81AE6C8(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
sub_81ABA88(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *ScrollPos, *CursorPos);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
schedule_bg_copy_tilemap_to_vram(0);
set_callback3_to_bag(taskId);
}
@@ -781,8 +906,8 @@ void sub_81ABCC0(int a, int b, int c)
void Task_BagMenu(u8 taskId)
{
s16* data = gTasks[taskId].data;
- u16* ScrollPos = &gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket];
- u16* CursorPos = &gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket];
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
u16 select;
if (sub_81221EC() != TRUE && !gPaletteFade.active)
{
@@ -799,8 +924,8 @@ void Task_BagMenu(u8 taskId)
{
if (sub_81AC2C0() == 1)
{
- sub_81AE860(data[0], ScrollPos, CursorPos);
- if ((*ScrollPos + *CursorPos) != gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - 1)
+ sub_81AE860(data[0], scrollPos, cursorPos);
+ if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - 1)
{
PlaySE(SE_SELECT);
bag_menu_swap_items(taskId);
@@ -811,13 +936,13 @@ void Task_BagMenu(u8 taskId)
else
{
int r4 = ListMenuHandleInputGetItemId(data[0]);
- sub_81AE860(data[0], ScrollPos, CursorPos);
+ sub_81AE860(data[0], scrollPos, cursorPos);
switch (r4)
{
case -1:
break;
case -2:
- if (gUnknown_0203CE58.unk4 == 5)
+ if (gUnknown_0203CE58.location == 5)
{
PlaySE(SE_HAZURE);
break;
@@ -833,7 +958,7 @@ void Task_BagMenu(u8 taskId)
data[1] = r4;
data[2] = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, r4);
gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, r4);
- gUnknown_08614054[gUnknown_0203CE58.unk4](taskId);
+ gUnknown_08614054[gUnknown_0203CE58.location](taskId);
}
}
}
@@ -896,7 +1021,7 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
{
ClearWindowTilemap(0);
ClearWindowTilemap(1);
- sub_81AE6C8(data[0], &gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket]);
+ sub_81AE6C8(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
schedule_bg_copy_tilemap_to_vram(0);
gSprites[gUnknown_0203CE54->unk806[gUnknown_0203CE54->unk81B_1 ^ 1]].invisible = 1;
sub_81AB824();
@@ -1100,9 +1225,9 @@ void sub_81AC10C(u8 taskId)
if (!(++data[12] & 1))
{
if (data[11] == 1)
- bag_menu_copy_pocket_name_to_window(data[12] >> 1);
+ bag_menu_copy_pocket_name_to_window((u8)(data[12] >> 1));
else
- bag_menu_copy_pocket_name_to_window(8 - (data[12] >> 1));
+ bag_menu_copy_pocket_name_to_window((u8)(8 - (data[12] >> 1)));
}
if (data[12] == 16)
data[13]++;
@@ -1110,7 +1235,7 @@ void sub_81AC10C(u8 taskId)
case 1:
ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
- data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket], gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket]);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
PutWindowTilemap(1);
PutWindowTilemap(2);
schedule_bg_copy_tilemap_to_vram(0);
@@ -1119,3 +1244,1151 @@ void sub_81AC10C(u8 taskId)
SwitchTaskToFollowupFunc(taskId);
}
}
+
+void sub_81AC23C(u8 a)
+{
+ FillBgTilemapBufferRect_Palette0(2, 17, 14, a + 2, 15, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void bag_menu_draw_pocket_indicator_square(u8 x, u8 is_current_bag)
+{
+ if (is_current_bag == 0)
+ FillBgTilemapBufferRect_Palette0(2, 0x1017, x + 5, 3, 1, 1);
+ else
+ FillBgTilemapBufferRect_Palette0(2, 0x102B, x + 5, 3, 1, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+bool8 sub_81AC2C0(void)
+{
+ if (gUnknown_0203CE58.location <= 1)
+ {
+ u8 temp = gUnknown_0203CE58.pocket - 2;
+ if (temp > 1)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void bag_menu_swap_items(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ sub_81AF15C(data[0], 16, 1);
+ data[1] = gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket] + gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+ gUnknown_0203CE54->unk81A = data[1];
+ CopyItemName(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, data[1]), gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ sub_80D4FEC(data[1]);
+ sub_81AB89C();
+ bag_menu_print_cursor_(data[0], 2);
+ gTasks[taskId].func = sub_81AC3C0;
+}
+
+void sub_81AC3C0(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ int r7;
+
+ if (sub_81221EC() != TRUE)
+ {
+ if (gMain.newKeys & SELECT_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_81AE860(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ sub_81AC498(taskId);
+ }
+ else
+ {
+ r7 = ListMenuHandleInputGetItemId(data[0]);
+ sub_81AE860(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ sub_80D4FC8(0);
+ sub_80D4FEC(gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ switch (r7)
+ {
+ case -1:
+ break;
+ case -2:
+ PlaySE(SE_SELECT);
+ if (gMain.newKeys & A_BUTTON)
+ sub_81AC498(taskId);
+ else
+ sub_81AC590(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ sub_81AC498(taskId);
+ }
+ }
+ }
+}
+
+void sub_81AC498(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+ u16 realPos = *scrollPos + *cursorPos;
+
+ if (data[1] == realPos || data[1] == (realPos - 1))
+ sub_81AC590(taskId);
+ else
+ {
+ sub_80D702C(gBagPockets[gUnknown_0203CE58.pocket].itemSlots, data[1], realPos);
+ gUnknown_0203CE54->unk81A = -1;
+ sub_81AE6C8(data[0], scrollPos, cursorPos);
+ if (data[1] < realPos)
+ gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--;
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ sub_80D4FC8(1);
+ bag_menu_add_list_scroll_arrow_indicators_maybe();
+ gTasks[taskId].func = Task_BagMenu;
+ }
+}
+
+void sub_81AC590(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+
+ gUnknown_0203CE54->unk81A = -1;
+ sub_81AE6C8(data[0], scrollPos, cursorPos);
+ if (data[1] < (*scrollPos + *cursorPos))
+ gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--;
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ sub_80D4FC8(1);
+ bag_menu_add_list_scroll_arrow_indicators_maybe();
+ gTasks[taskId].func = Task_BagMenu;
+}
+
+void sub_81AC644(u8 unused)
+{
+ switch (gUnknown_0203CE58.location - 1)
+ {
+ case 0:
+ case 9:
+ if (ItemId_GetBattleUsage(gSpecialVar_ItemId))
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_08614042;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ break;
+ case 4:
+ gUnknown_0203CE54->unk820 = gUnknown_08614047;
+ gUnknown_0203CE54->unk828 = 4;
+ break;
+ case 8:
+ if (!itemid_is_unique(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_0861404B;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ break;
+ case 6:
+ if (!itemid_is_unique(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_0861404D;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ break;
+ case 7:
+ if (!itemid_is_unique(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY)
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_0861404F;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ break;
+ case 1:
+ case 2:
+ case 3:
+ case 5:
+ default:
+ if (sub_81221AC() == TRUE || InUnionRoom() == TRUE)
+ {
+ if (gUnknown_0203CE58.pocket == 4 || !sub_8122148(gSpecialVar_ItemId))
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_08614046;
+ gUnknown_0203CE54->unk828 = 1;
+ }
+ else
+ {
+ gUnknown_0203CE54->unk820 = gUnknown_08614044;
+ gUnknown_0203CE54->unk828 = 2;
+ }
+ }
+ else
+ {
+ switch (gUnknown_0203CE58.pocket)
+ {
+ case 0:
+ gUnknown_0203CE54->unk820 = &gUnknown_0203CE54->unk824;
+ gUnknown_0203CE54->unk828 = 4;
+ memcpy(&gUnknown_0203CE54->unk824, &gUnknown_0861402C, 4);
+ if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
+ gUnknown_0203CE54->unk824 = 6;
+ break;
+ case 4:
+ gUnknown_0203CE54->unk820 = &gUnknown_0203CE54->unk824;
+ gUnknown_0203CE54->unk828 = 4;
+ memcpy(&gUnknown_0203CE54->unk824, &gUnknown_08614030, 4);
+ if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
+ gUnknown_0203CE54->unk825 = 8;
+ if (gSpecialVar_ItemId == ITEM_MACH_BIKE || gSpecialVar_ItemId == ITEM_ACRO_BIKE)
+ {
+ if (TestPlayerAvatarFlags(6))
+ gUnknown_0203CE54->unk824 = 7;
+ }
+ break;
+ case 1:
+ gUnknown_0203CE54->unk820 = gUnknown_08614034;
+ gUnknown_0203CE54->unk828 = 4;
+ break;
+ case 2:
+ gUnknown_0203CE54->unk820 = gUnknown_08614038;
+ gUnknown_0203CE54->unk828 = 4;
+ break;
+ case 3:
+ gUnknown_0203CE54->unk820 = gUnknown_0861403C;
+ gUnknown_0203CE54->unk828 = 6;
+ break;
+ }
+ }
+ }
+ if (gUnknown_0203CE58.pocket == 2)
+ {
+ ClearWindowTilemap(1);
+ PrintTMHMMoveData(gSpecialVar_ItemId);
+ PutWindowTilemap(3);
+ PutWindowTilemap(4);
+ schedule_bg_copy_tilemap_to_vram(0);
+ }
+ else
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ }
+ if (gUnknown_0203CE54->unk828 == 1)
+ sub_81ACAF8(bag_menu_add_window(0));
+ else if (gUnknown_0203CE54->unk828 == 2)
+ {
+ sub_81ACAF8(bag_menu_add_window(1));
+ }
+ else if (gUnknown_0203CE54->unk828 == 4)
+ {
+ sub_81ACB54(bag_menu_add_window(2), 2, 2);
+ }
+ else
+ sub_81ACB54(bag_menu_add_window(3), 2, 3);
+}
+
+void sub_81ACAF8(u8 a)
+{
+ AddItemMenuActionTextPrinters(a, 7, 8, 1, 0, 16, gUnknown_0203CE54->unk828, gUnknown_08613FB4, gUnknown_0203CE54->unk820);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(a, gUnknown_0203CE54->unk828, 0);
+}
+
+void sub_81ACB54(u8 a, u8 b, u8 c)
+{
+ sub_8198DBC(a, 7, 8, 1, 0x38, b, c, gUnknown_08613FB4, gUnknown_0203CE54->unk820);
+ sub_8199944(a, 0x38, b, c, 0);
+}
+
+void unknown_item_menu_type(u8 taskId)
+{
+ sub_81AC644(taskId);
+ if (gUnknown_0203CE54->unk828 <= 2)
+ gTasks[taskId].func = Task_HandleInBattleItemMenuInput;
+ else
+ gTasks[taskId].func = Task_HandleOutOfBattleItemMenuInput;
+}
+
+void Task_HandleInBattleItemMenuInput(u8 taskId)
+{
+ if (sub_81221EC() != TRUE)
+ {
+ s8 r4 = ProcessMenuInputNoWrapAround();
+ switch (r4)
+ {
+ case -2:
+ break;
+ case -1:
+ PlaySE(SE_SELECT);
+ gUnknown_08613FB4[4].func(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ gUnknown_08613FB4[gUnknown_0203CE54->unk820[r4]].func(taskId);
+ break;
+ }
+ }
+}
+
+void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
+{
+ if (sub_81221EC() != TRUE)
+ {
+ s8 cursorPos = GetMenuCursorPos();
+ if (gMain.newKeys & DPAD_UP)
+ {
+ if (cursorPos > 0 && sub_81ACDFC(cursorPos - 2))
+ {
+ PlaySE(SE_SELECT);
+ sub_8199134(0, -1);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (cursorPos < (gUnknown_0203CE54->unk828 - 2) && sub_81ACDFC(cursorPos + 2))
+ {
+ PlaySE(SE_SELECT);
+ sub_8199134(0, 1);
+ }
+ }
+ else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysState() == 1)
+ {
+ if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1))
+ {
+ PlaySE(SE_SELECT);
+ sub_8199134(-1, 0);
+ }
+ }
+ else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysState() == 2)
+ {
+ if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1))
+ {
+ PlaySE(SE_SELECT);
+ sub_8199134(1, 0);
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_08613FB4[gUnknown_0203CE54->unk820[cursorPos]].func(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_08613FB4[4].func(taskId);
+ }
+ }
+}
+
+bool8 sub_81ACDFC(s8 a)
+{
+ if (a < 0)
+ return FALSE;
+ if (a > gUnknown_0203CE54->unk828)
+ return FALSE;
+ if (gUnknown_0203CE54->unk820[a] == 14)
+ return FALSE;
+ return TRUE;
+}
+
+void bag_menu_remove_some_window(void)
+{
+ if (gUnknown_0203CE54->unk828 == 1)
+ bag_menu_remove_window(0);
+ else if (gUnknown_0203CE54->unk828 == 2)
+ {
+ bag_menu_remove_window(1);
+ }
+ else if (gUnknown_0203CE54->unk828 == 4)
+ {
+ bag_menu_remove_window(2);
+ }
+ else
+ bag_menu_remove_window(3);
+}
+
+void ItemMenu_UseOutOfBattle(u8 taskId)
+{
+ if (ItemId_GetFieldFunc(gSpecialVar_ItemId))
+ {
+ bag_menu_remove_some_window();
+ if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1)
+ bag_menu_print_there_is_no_pokemon(taskId);
+ else
+ {
+ FillWindowPixelBuffer(1, 0);
+ schedule_bg_copy_tilemap_to_vram(0);
+ if (gUnknown_0203CE58.pocket != 3)
+ ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
+ else
+ sub_80FDD10(taskId);
+ }
+ }
+}
+
+void ItemMenu_Toss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ bag_menu_remove_some_window();
+ data[8] = 1;
+ if (data[2] == 1)
+ BagMenuConfirmToss(taskId);
+ else
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_TossHowManyVar1s);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ sub_81ABC3C(7);
+ gTasks[taskId].func = Task_ChooseHowManyToToss;
+ }
+}
+
+void BagMenuConfirmToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3);
+ StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ bag_menu_yes_no(taskId, 5, &gUnknown_08614084);
+}
+
+void BagMenuCancelToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ bag_menu_print_description_box_text(data[1]);
+ bag_menu_print_cursor_(data[0], 0);
+ set_callback3_to_bag(taskId);
+}
+
+void Task_ChooseHowManyToToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
+ sub_81ABC54(gUnknown_0203CE54->unk817, data[8]);
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_window(7);
+ BagMenuConfirmToss(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_window(7);
+ BagMenuCancelToss(taskId);
+ }
+}
+
+void BagMenuActuallyToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3);
+ StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ gTasks[taskId].func = Task_ActuallyToss;
+}
+
+void Task_ActuallyToss(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ RemoveBagItem(gSpecialVar_ItemId, data[8]);
+ sub_81AE6C8(data[0], scrollPos, cursorPos);
+ sub_81AB9A8(gUnknown_0203CE58.pocket);
+ sub_81ABA88(gUnknown_0203CE58.pocket);
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ schedule_bg_copy_tilemap_to_vram(0);
+ set_callback3_to_bag(taskId);
+ }
+}
+
+void ItemMenu_Register(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+
+ if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
+ gSaveBlock1Ptr->registeredItem = 0;
+ else
+ gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId;
+ sub_81AE6C8(data[0], scrollPos, cursorPos);
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ schedule_bg_copy_tilemap_to_vram(0);
+ ItemMenu_Cancel(taskId);
+}
+
+void ItemMenu_Give(u8 taskId)
+{
+ bag_menu_remove_some_window();
+ if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
+ DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
+ else if (!itemid_is_unique(gSpecialVar_ItemId))
+ {
+ if (CalculatePlayerPartyCount() == 0)
+ bag_menu_print_there_is_no_pokemon(taskId);
+ else
+ {
+ gUnknown_0203CE54->unk0 = sub_81B7F60;
+ unknown_ItemMenu_Confirm(taskId);
+ }
+ }
+ else
+ bag_menu_print_cant_be_held_msg(taskId);
+}
+
+void bag_menu_print_there_is_no_pokemon(u8 taskId)
+{
+ DisplayItemMessage(taskId, 1, gText_NoPokemon, sub_81AD350);
+}
+
+void bag_menu_print_cant_be_held_msg(u8 taskId)
+{
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD350);
+}
+
+void sub_81AD350(u8 taskId)
+{
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_inits_lists_menu(taskId);
+ }
+}
+
+void ItemMenu_CheckTag(u8 taskId)
+{
+ gUnknown_0203CE54->unk0 = sub_8177C14;
+ unknown_ItemMenu_Confirm(taskId);
+}
+
+void ItemMenu_Cancel(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ bag_menu_remove_some_window();
+ bag_menu_print_description_box_text(data[1]);
+ schedule_bg_copy_tilemap_to_vram(0);
+ schedule_bg_copy_tilemap_to_vram(1);
+ bag_menu_print_cursor_(data[0], 0);
+ set_callback3_to_bag(taskId);
+}
+
+void ItemMenu_UseInBattle(u8 taskId)
+{
+ if (ItemId_GetBattleFunc(gSpecialVar_ItemId))
+ {
+ bag_menu_remove_some_window();
+ ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId);
+ }
+}
+
+void bag_menu_mail_related(void)
+{
+ GoToBagMenu(12, 5, NULL);
+}
+
+void item_menu_type_2(u8 taskId)
+{
+ if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
+ DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
+ else if (!sub_8122148(gSpecialVar_ItemId))
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeldHere);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD350);
+ }
+ else if (gUnknown_0203CE58.pocket != 4 && !itemid_is_unique(gSpecialVar_ItemId))
+ {
+ unknown_ItemMenu_Confirm(taskId);
+ }
+ else
+ bag_menu_print_cant_be_held_msg(taskId);
+}
+
+void item_menu_type_b(u8 taskId)
+{
+ if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
+ DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
+ else if (gUnknown_0203CE58.pocket != 4 && !itemid_is_unique(gSpecialVar_ItemId))
+ {
+ gTasks[taskId].func = unknown_ItemMenu_Confirm;
+ }
+ else
+ bag_menu_print_cant_be_held_msg(taskId);
+}
+
+bool8 UseRegisteredKeyItemOnField(void)
+{
+ u8 taskId;
+
+ if (InUnionRoom() == TRUE || InBattlePyramid() || InBattlePike() || InMultiBattleRoom() == TRUE)
+ return FALSE;
+ else
+ {
+ HideMapNamePopUpWindow();
+ ChangeBgY_ScreenOff(0, 0, 0);
+ if (gSaveBlock1Ptr->registeredItem != ITEM_NONE)
+ {
+ if (CheckBagHasItem(gSaveBlock1Ptr->registeredItem, 1) == TRUE)
+ {
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ sub_808B864();
+ sub_808BCF4();
+ gSpecialVar_ItemId = gSaveBlock1Ptr->registeredItem;
+ taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1Ptr->registeredItem), 8);
+ gTasks[taskId].data[3] = 1;
+ return TRUE;
+ }
+ else
+ gSaveBlock1Ptr->registeredItem = ITEM_NONE;
+ }
+ ScriptContext1_SetupScript(EventScript_2736B3);
+ }
+ return TRUE;
+}
+
+void display_sell_item_ask_str(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (itemid_get_market_price(gSpecialVar_ItemId) == 0)
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_CantBuyKeyItem);
+ DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu);
+ }
+ else
+ {
+ data[8] = 1;
+ if (data[2] == 1)
+ {
+ bag_menu_AddMoney_window();
+ sub_81AD680(taskId);
+ }
+ else
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_HowManyToSell);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD730);
+ }
+ }
+}
+
+void sub_81AD680(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ ConvertIntToDecimalStringN(gStringVar1, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8], 0, 6);
+ StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD6E4);
+}
+
+void sub_81AD6E4(u8 taskId)
+{
+ bag_menu_yes_no(taskId, 6, &gUnknown_0861408C);
+}
+
+void sub_81AD6FC(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ bag_menu_remove_money_window();
+ bag_menu_RemoveBagItem_message_window(4);
+ bag_menu_print_cursor_(data[0], 0);
+ set_callback3_to_bag(taskId);
+}
+
+void sub_81AD730(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u8 windowId = bag_menu_add_window(8);
+
+ sub_81ABCC0(windowId, 1, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8]);
+ bag_menu_AddMoney_window();
+ gTasks[taskId].func = sub_81AD794;
+}
+
+void sub_81AD794(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
+ sub_81ABCC0(gUnknown_0203CE54->unk818, data[8], (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8]);
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_window(8);
+ sub_81AD680(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_print_cursor_(data[0], 0);
+ bag_menu_remove_money_window();
+ bag_menu_remove_window(8);
+ bag_menu_RemoveBagItem_message_window(4);
+ set_callback3_to_bag(taskId);
+ }
+}
+
+void sub_81AD84C(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ ConvertIntToDecimalStringN(gStringVar1, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8], 0, 6);
+ StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2);
+ DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD8C8);
+}
+
+void sub_81AD8C8(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
+ u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
+
+ PlaySE(SE_REGI);
+ RemoveBagItem(gSpecialVar_ItemId, data[8]);
+ AddMoney(&gSaveBlock1Ptr->money, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8]);
+ sub_81AE6C8(data[0], scrollPos, cursorPos);
+ sub_81AB9A8(gUnknown_0203CE58.pocket);
+ sub_81ABA88(gUnknown_0203CE58.pocket);
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ bag_menu_print_cursor_(data[0], 2);
+ PrintMoneyAmountInMoneyBox(gUnknown_0203CE54->unk819, GetMoney(&gSaveBlock1Ptr->money), 0);
+ gTasks[taskId].func = sub_81AD9C0;
+}
+
+void sub_81AD9C0(u8 taskId)
+{
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_money_window();
+ bag_menu_inits_lists_menu(taskId);
+ }
+}
+
+void display_deposit_item_ask_str(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ data[8] = 1;
+ if (data[2] == 1)
+ sub_81ADB14(taskId);
+ else
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_DepositHowManyVar1);
+ FillWindowPixelBuffer(1, 0);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ sub_81ABC3C(7);
+ gTasks[taskId].func = sub_81ADA7C;
+ }
+}
+
+void sub_81ADA7C(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
+ sub_81ABC54(gUnknown_0203CE54->unk817, data[8]);
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_remove_window(7);
+ sub_81ADB14(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_print_description_box_text(data[1]);
+ bag_menu_print_cursor_(data[0], 0);
+ bag_menu_remove_window(7);
+ set_callback3_to_bag(taskId);
+ }
+}
+
+void sub_81ADB14(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ FillWindowPixelBuffer(1, 0);
+ if (itemid_is_unique(gSpecialVar_ItemId))
+ {
+ bag_menu_print(1, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, 0);
+ gTasks[taskId].func = sub_81ADC0C;
+ }
+ else if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE)
+ {
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3);
+ StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s);
+ bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
+ gTasks[taskId].func = Task_ActuallyToss;
+ }
+ else
+ {
+ bag_menu_print(1, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, 0);
+ gTasks[taskId].func = sub_81ADC0C;
+ }
+}
+
+void sub_81ADC0C(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ bag_menu_print_description_box_text(data[1]);
+ bag_menu_print_cursor_(data[0], 0);
+ set_callback3_to_bag(taskId);
+ }
+}
+
+bool8 IsWallysBag(void)
+{
+ if (gUnknown_0203CE58.location == 10)
+ return TRUE;
+ return FALSE;
+}
+
+void PrepareBagForWallyTutorial(void)
+{
+ u32 i;
+
+ gUnknown_0203CE80 = AllocZeroed(sizeof(struct unkWallyStruct));
+ memcpy(gUnknown_0203CE80->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, sizeof(gSaveBlock1Ptr->bagPocket_Items));
+ memcpy(gUnknown_0203CE80->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, sizeof(gSaveBlock1Ptr->bagPocket_PokeBalls));
+ gUnknown_0203CE80->pocket = gUnknown_0203CE58.pocket;
+ for (i = 0; i <= 4; i++)
+ {
+ gUnknown_0203CE80->cursorPosition[i] = gUnknown_0203CE58.cursorPosition[i];
+ gUnknown_0203CE80->scrollPosition[i] = gUnknown_0203CE58.scrollPosition[i];
+ }
+ ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, 30);
+ ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, 16);
+ ResetBagScrollPositions();
+}
+
+void RestoreBagAfterWallyTutorial(void)
+{
+ u32 i;
+
+ memcpy(gSaveBlock1Ptr->bagPocket_Items, gUnknown_0203CE80->bagPocket_Items, sizeof(gUnknown_0203CE80->bagPocket_Items));
+ memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, gUnknown_0203CE80->bagPocket_PokeBalls, sizeof(gUnknown_0203CE80->bagPocket_PokeBalls));
+ gUnknown_0203CE58.pocket = gUnknown_0203CE80->pocket;
+ for (i = 0; i <= 4; i++)
+ {
+ gUnknown_0203CE58.cursorPosition[i] = gUnknown_0203CE80->cursorPosition[i];
+ gUnknown_0203CE58.scrollPosition[i] = gUnknown_0203CE80->scrollPosition[i];
+ }
+ Free(gUnknown_0203CE80);
+}
+
+void DoWallyTutorialBagMenu(void)
+{
+ PrepareBagForWallyTutorial();
+ AddBagItem(ITEM_POTION, 1);
+ AddBagItem(ITEM_POKE_BALL, 1);
+ GoToBagMenu(10, 0, SetCB2ToReshowScreenAfterMenu2);
+}
+
+void Task_WallyTutorialBagMenu(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ switch (data[8])
+ {
+ case 0x66:
+ PlaySE(SE_SELECT);
+ SwitchBagPocket(taskId, 1, 0);
+ data[8]++;
+ break;
+ case 0xCC:
+ PlaySE(SE_SELECT);
+ bag_menu_print_cursor_(data[0], 2);
+ gSpecialVar_ItemId = ITEM_POKE_BALL;
+ sub_81AC644(taskId);
+ data[8]++;
+ break;
+ case 0x132:
+ PlaySE(SE_SELECT);
+ bag_menu_remove_some_window();
+ sub_81AE6C8(data[0], 0, 0);
+ RestoreBagAfterWallyTutorial();
+ unknown_ItemMenu_Confirm(taskId);
+ break;
+ default:
+ data[8]++;
+ break;
+ }
+ }
+}
+
+void unknown_ItemMenu_Show(u8 taskId)
+{
+ gSpecialVar_0x8005 = gSpecialVar_ItemId;
+ gSpecialVar_Result = 1;
+ bag_menu_remove_some_window();
+ unknown_ItemMenu_Confirm(taskId);
+}
+
+void bag_menu_leave_maybe_3(void)
+{
+ gFieldCallback = sub_819FA50;
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+}
+
+void unknown_ItemMenu_Give2(u8 taskId)
+{
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ gSpecialVar_Result = 1;
+ bag_menu_remove_some_window();
+ unknown_ItemMenu_Confirm(taskId);
+}
+
+void bag_menu_leave_maybe_2(void)
+{
+ gFieldCallback = sub_818DEF4;
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+}
+
+void unknown_ItemMenu_Confirm2(u8 taskId)
+{
+ gSpecialVar_Result = 1;
+ bag_menu_remove_some_window();
+ unknown_ItemMenu_Confirm(taskId);
+}
+
+void bag_menu_leave_maybe(void)
+{
+ gFieldCallback = sub_818E564;
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+}
+
+void bag_menu_print_pocket_names(u8 *pocketName1, u8 *pocketName2)
+{
+ struct WindowTemplate window = {0, 0, 0, 0, 0, 0, 0};
+ u16 windowId;
+ int offset;
+
+ window.width = 16;
+ window.height = 2;
+ windowId = AddWindow(&window);
+ FillWindowPixelBuffer(windowId, 0);
+ offset = GetStringCenterAlignXOffset(1, pocketName1, 0x40);
+ bag_menu_print(windowId, 1, pocketName1, offset, 1, 0, 0, -1, 1);
+ if (pocketName2)
+ {
+ offset = GetStringCenterAlignXOffset(1, pocketName2, 0x40);
+ bag_menu_print(windowId, 1, pocketName2, offset + 0x40, 1, 0, 0, -1, 1);
+ }
+ CpuCopy32((u8*)GetWindowAttribute(windowId, 7), gUnknown_0203CE54->unk844, 0x400);
+ RemoveWindow(windowId);
+}
+
+// probably a fakematching
+
+void bag_menu_copy_pocket_name_to_window(u32 a)
+{
+ u8 (* r4)[32][32];
+ u8* windowAttribute;
+ int b;
+ if (a > 8)
+ a = 8;
+ r4 = &gUnknown_0203CE54->unk844;
+ windowAttribute = (u8*)GetWindowAttribute(2, 7);
+ CpuCopy32(r4[0][a], windowAttribute, 0x100);
+ b = a + 16;
+ CpuCopy32(r4[0][b], windowAttribute + 0x100, 0x100);
+ CopyWindowToVram(2, 2);
+}
+
+void setup_bag_menu_textboxes(void)
+{
+ u8 i;
+
+ InitWindows(gUnknown_08614174);
+ DeactivateAllTextPrinters();
+ sub_809882C(0, 1, -32);
+ copy_textbox_border_tile_patterns_to_vram(0, 10, -48);
+ sub_819A2BC(-64, 1);
+ LoadPalette(&gUnknown_0860F074, 0xF0, 0x20);
+ for (i = 0;i < 3; i++)
+ {
+ FillWindowPixelBuffer(i, 0);
+ PutWindowTilemap(i);
+ }
+ schedule_bg_copy_tilemap_to_vram(0);
+ schedule_bg_copy_tilemap_to_vram(1);
+}
+
+void bag_menu_print(u8 a, u8 b, u8 *str, u8 c, u8 d, u8 e, u8 f, u8 g, u8 h)
+{
+ AddTextPrinterParameterized2(a, b, c, d, e, f, &gUnknown_08614164[h], g, str);
+}
+
+u8 sub_81AE124(u8 a)
+{
+ return gUnknown_0203CE54->unk810[a];
+}
+
+u8 bag_menu_add_window(u8 a)
+{
+ u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ if (*ptr == 0xFF)
+ {
+ *ptr = AddWindow(&gUnknown_086141AC[a]);
+ SetWindowBorderStyle(*ptr, 0, 1, 14);
+ schedule_bg_copy_tilemap_to_vram(1);
+ }
+ return *ptr;
+}
+
+void bag_menu_remove_window(u8 a)
+{
+ u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ if (*ptr != 0xFF)
+ {
+ sub_8198070(*ptr, 0);
+ ClearWindowTilemap(*ptr);
+ RemoveWindow(*ptr);
+ schedule_bg_copy_tilemap_to_vram(1);
+ *ptr = 0xFF;
+ }
+}
+
+u8 AddItemMessageWindow(u8 a)
+{
+ u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ if (*ptr == 0xFF)
+ *ptr = AddWindow(&gUnknown_086141AC[a]);
+ return *ptr;
+}
+
+void bag_menu_RemoveBagItem_message_window(u8 a)
+{
+ u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ if (*ptr != 0xFF)
+ {
+ sub_8197DF8(*ptr, 0);
+ ClearWindowTilemap(*ptr);
+ RemoveWindow(*ptr);
+ schedule_bg_copy_tilemap_to_vram(1);
+ *ptr = 0xFF;
+ }
+}
+
+void bag_menu_yes_no(u8 a, u8 b, struct YesNoFuncTable *funcTable)
+{
+ CreateYesNoMenuWithCallbacks(a, &gUnknown_086141AC[b], 1, 0, 2, 1, 14, funcTable);
+}
+
+void bag_menu_AddMoney_window(void)
+{
+ u8 windowId = bag_menu_add_window(9);
+ PrintMoneyAmountInMoneyBoxWithBorder(windowId, 1, 14, GetMoney(&gSaveBlock1Ptr->money));
+ AddMoneyLabelObject(19, 11);
+}
+
+void bag_menu_remove_money_window(void)
+{
+ bag_menu_remove_window(9);
+ RemoveMoneyLabelObject();
+}
+
+void bag_menu_prepare_tmhm_move_window(void)
+{
+ FillWindowPixelBuffer(3, 0);
+ blit_move_info_icon(3, 19, 0, 0);
+ blit_move_info_icon(3, 20, 0, 12);
+ blit_move_info_icon(3, 21, 0, 24);
+ blit_move_info_icon(3, 22, 0, 36);
+ CopyWindowToVram(3, 2);
+}
+
+void PrintTMHMMoveData(u16 itemId)
+{
+ u8 i;
+ u16 moveId;
+ u8* text;
+
+ FillWindowPixelBuffer(4, 0);
+ if (itemId == ITEM_NONE)
+ {
+ for (i = 0;i < 4; i++)
+ bag_menu_print(4, 1, gText_ThreeDashes, 7, i * 12, 0, 0, -1, 4);
+ CopyWindowToVram(4, 2);
+ }
+ else
+ {
+ moveId = ItemIdToBattleMoveId(itemId);
+ blit_move_info_icon(4, gBattleMoves[moveId].type + 1, 0, 0);
+ if (gBattleMoves[moveId].power <= 1)
+ text = gText_ThreeDashes;
+ else
+ {
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].power, 1, 3);
+ text = gStringVar1;
+ }
+ bag_menu_print(4, 1, text, 7, 12, 0, 0, -1, 4);
+ if (gBattleMoves[moveId].accuracy == 0)
+ text = gText_ThreeDashes;
+ else
+ {
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].accuracy, 1, 3);
+ text = gStringVar1;
+ }
+ bag_menu_print(4, 1, text, 7, 24, 0, 0, -1, 4);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].pp, 1, 3);
+ bag_menu_print(4, 1, gStringVar1, 7, 36, 0, 0, -1, 4);
+ CopyWindowToVram(4, 2);
+ }
+}