From 7e1c966eb36db080c43d9aad2419ee68356656ef Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 15 Jun 2019 21:26:46 -0400 Subject: item_pc: through sub_810D4C0 --- src/item_pc.c | 238 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 src/item_pc.c (limited to 'src/item_pc.c') diff --git a/src/item_pc.c b/src/item_pc.c new file mode 100644 index 000000000..8e4502430 --- /dev/null +++ b/src/item_pc.c @@ -0,0 +1,238 @@ +#include "global.h" +#include "help_system.h" +#include "item_menu_icons.h" +#include "list_menu.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "menu_helpers.h" +#include "palette.h" +#include "pc_screen_effect.h" +#include "scanline_effect.h" +#include "sound.h" +#include "task.h" +#include "constants/songs.h" + +struct ItemPcResources +{ + u32 field_00; + u8 field_04; + u8 field_05; + u8 filler_06[2]; + u8 field_08; + u8 filler_09[3]; + u16 field_0C[3]; +}; + +struct ItemPcStaticResources +{ + MainCallback field_0; + u16 field_4; + u16 field_6; + u8 field_8; +}; + +EWRAM_DATA struct ItemPcResources * gUnknown_203ADBC = NULL; +EWRAM_DATA u32 gUnknown_203ADC0 = 0; +EWRAM_DATA u32 gUnknown_203ADC4 = 0; +EWRAM_DATA u32 gUnknown_203ADC8 = 0; +EWRAM_DATA struct ItemPcStaticResources gUnknown_203ADCC = {}; + +void sub_810D4A0(void); +bool8 sub_810D4C0(void); +void sub_810D6AC(void); +bool8 sub_810D71C(void); +bool8 sub_810D78C(void); +bool8 sub_810D83C(void); +void sub_810D878(void); +void sub_810E8F0(void); +void sub_810DB34(void); +void sub_810DB5C(void); +void sub_810DBF0(void); +void sub_810DDA4(void); +void sub_810DE08(void); +void sub_810DE94(u8); +void sub_810DEA0(u8 taskId); + +void sub_810D3F4(u8 a0, MainCallback callback) +{ + u8 i; + + if (a0 >= 2) + { + SetMainCallback2(callback); + return; + } + if ((gUnknown_203ADBC = Alloc(sizeof(struct ItemPcResources))) == NULL) + { + SetMainCallback2(callback); + return; + } + if (a0 != 1) + { + gUnknown_203ADCC.field_0 = callback; + gUnknown_203ADCC.field_4 = gUnknown_203ADCC.field_6 = 0; + } + gUnknown_203ADBC->field_04 = 0xFF; + gUnknown_203ADBC->field_05 = 0; + gUnknown_203ADBC->field_08 = 0xFF; + gUnknown_203ADBC->field_00 = 0; + for (i = 0; i < 3; i++) + { + gUnknown_203ADBC->field_0C[i] = 0; + } + SetMainCallback2(sub_810D4A0); +} + +void sub_810D470(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +void sub_810D48C(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_810D4A0(void) +{ + while (1) + { + if (sub_810D4C0() == TRUE) + break; + if (sub_80BF708() == TRUE) + break; + } +} + +bool8 sub_810D4C0(void) +{ + u8 taskId; + switch (gMain.state) + { + case 0: + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + gMain.state++; + break; + case 1: + ScanlineEffect_Stop(); + gMain.state++; + break; + case 2: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + ResetPaletteFade(); + gMain.state++; + break; + case 4: + ResetSpriteData(); + gMain.state++; + break; + case 5: + sub_80984D8(); + gMain.state++; + break; + case 6: + ResetTasks(); + gMain.state++; + break; + case 7: + if (sub_810D71C()) + { + gUnknown_203ADBC->field_0C[0] = 0; + gMain.state++; + } + else + { + sub_810D6AC(); + return TRUE; + } + break; + case 8: + if (sub_810D78C() == TRUE) + gMain.state++; + break; + case 9: + sub_810E8F0(); + gMain.state++; + break; + case 10: + sub_810DDA4(); + sub_810DBF0(); + sub_810DE08(); + gMain.state++; + break; + case 11: + if (sub_810D83C()) + gMain.state++; + else + { + sub_810D6AC(); + return TRUE; + } + break; + case 12: + sub_810D878(); + gMain.state++; + break; + case 13: + sub_810DB34(); + gMain.state++; + break; + case 14: + sub_80985E4(); + gMain.state++; + break; + case 15: + taskId = CreateTask(sub_810DEA0, 0); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ADCC.field_4, gUnknown_203ADCC.field_6); + gMain.state++; + break; + case 16: + sub_810DB5C(); + gMain.state++; + break; + case 17: + HelpSystem_SetSomeVariable2(29); + gMain.state++; + break; + case 18: + if (gUnknown_203ADCC.field_8 == 1) + { + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + } + gMain.state++; + break; + case 19: + if (gUnknown_203ADCC.field_8 == 1) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + } + else + { + sub_80A0A48(0, 0, 0); + sub_810DE94(1); + PlaySE(SE_PC_LOGON); + } + gMain.state++; + break; + case 20: + if (sub_80BF72C() != TRUE) + gMain.state++; + break; + default: + SetVBlankCallback(sub_810D48C); + SetMainCallback2(sub_810D470); + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From 4f4b03af6077787ceef226d9085242966c69b6bd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 16 Jun 2019 12:36:34 -0400 Subject: item_pc: sub_810D878 --- src/item_pc.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 151 insertions(+), 5 deletions(-) (limited to 'src/item_pc.c') diff --git a/src/item_pc.c b/src/item_pc.c index 8e4502430..2b63651e7 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -1,5 +1,10 @@ #include "global.h" +#include "bg.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" #include "help_system.h" +#include "item.h" #include "item_menu_icons.h" #include "list_menu.h" #include "main.h" @@ -10,6 +15,7 @@ #include "pc_screen_effect.h" #include "scanline_effect.h" #include "sound.h" +#include "strings.h" #include "task.h" #include "constants/songs.h" @@ -18,10 +24,11 @@ struct ItemPcResources u32 field_00; u8 field_04; u8 field_05; - u8 filler_06[2]; + u8 field_06; + u8 field_07; u8 field_08; u8 filler_09[3]; - u16 field_0C[3]; + s16 field_0C[3]; }; struct ItemPcStaticResources @@ -33,27 +40,48 @@ struct ItemPcStaticResources }; EWRAM_DATA struct ItemPcResources * gUnknown_203ADBC = NULL; -EWRAM_DATA u32 gUnknown_203ADC0 = 0; -EWRAM_DATA u32 gUnknown_203ADC4 = 0; -EWRAM_DATA u32 gUnknown_203ADC8 = 0; +EWRAM_DATA u8 * gUnknown_203ADC0 = NULL; +EWRAM_DATA struct ListMenuItem * gUnknown_203ADC4 = NULL; +EWRAM_DATA void * gUnknown_203ADC8 = NULL; EWRAM_DATA struct ItemPcStaticResources gUnknown_203ADCC = {}; +extern const struct CompressedSpriteSheet gUnknown_83D4240; +extern const struct CompressedSpritePalette gUnknown_83D4248; + void sub_810D4A0(void); bool8 sub_810D4C0(void); void sub_810D6AC(void); +void sub_810D6E8(u8 taskId); bool8 sub_810D71C(void); bool8 sub_810D78C(void); bool8 sub_810D83C(void); void sub_810D878(void); +void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list); +void sub_810DA20(u8 windowId, s32 itemId, u8 y); void sub_810E8F0(void); void sub_810DB34(void); void sub_810DB5C(void); void sub_810DBF0(void); +void sub_810DC40(void); void sub_810DDA4(void); void sub_810DE08(void); void sub_810DE94(u8); void sub_810DEA0(u8 taskId); +const struct BgTemplate gUnknown_8453F6C[2] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .priority = 0 + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 30, + .priority = 1 + } +}; + void sub_810D3F4(u8 a0, MainCallback callback) { u8 i; @@ -236,3 +264,121 @@ bool8 sub_810D4C0(void) } return FALSE; } + +void sub_810D6AC(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + CreateTask(sub_810D6E8, 0); + SetVBlankCallback(sub_810D48C); + SetMainCallback2(sub_810D470); +} + +void sub_810D6E8(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gUnknown_203ADCC.field_0); + sub_810DC40(); + DestroyTask(taskId); + } +} + +bool8 sub_810D71C(void) +{ + InitBgReg(); + gUnknown_203ADC0 = Alloc(0x800); + if (gUnknown_203ADC0 == NULL) + return FALSE; + memset(gUnknown_203ADC0, 0, 0x800); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_8453F6C, NELEMS(gUnknown_8453F6C)); + SetBgTilemapBuffer(1, gUnknown_203ADC0); + schedule_bg_copy_tilemap_to_vram(1); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT , 0); + ShowBg(0); + ShowBg(1); + return TRUE; +} + +bool8 sub_810D78C(void) +{ + switch (gUnknown_203ADBC->field_0C[0]) + { + case 0: + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(1, gUnknown_8E85090, 0, 0, 0); + gUnknown_203ADBC->field_0C[0]++; + break; + case 1: + if (free_temp_tile_data_buffers_if_possible() != TRUE) + { + LZDecompressWram(gUnknown_8E85458, gUnknown_203ADC0); + gUnknown_203ADBC->field_0C[0]++; + } + break; + case 2: + LoadCompressedPalette(gUnknown_8E85408, 0x00, 0x60); + gUnknown_203ADBC->field_0C[0]++; + break; + case 3: + LoadCompressedObjectPic(&gUnknown_83D4240); + gUnknown_203ADBC->field_0C[0]++; + break; + default: + LoadCompressedObjectPalette(&gUnknown_83D4248); + gUnknown_203ADBC->field_0C[0] = 0; + return TRUE; + } + return FALSE; +} + +#define sub_810D83C_sub(ptr__, size) ({ \ + void ** ptr = (void **)&(ptr__); \ + *ptr = Alloc(size); \ + if (*ptr == NULL) \ + { \ + sub_810DC40(); \ + sub_810D6AC(); \ + return FALSE; \ + } \ +}) + +bool8 sub_810D83C(void) +{ + sub_810D83C_sub(gUnknown_203ADC4, 0x0F8); + sub_810D83C_sub(gUnknown_203ADC8, 0x1B2); + return TRUE; +} + +void sub_810D878(void) +{ + u16 i; + + for (i = 0; i < gUnknown_203ADBC->field_07; i++) + { + gUnknown_203ADC4[i].label = ItemId_GetItem(gSaveBlock1Ptr->pcItems[i].itemId)->name; + gUnknown_203ADC4[i].index = i; + } + gUnknown_203ADC4[i].label = gFameCheckerText_Cancel; + gUnknown_203ADC4[i].index = -2; + + gMultiuseListMenuTemplate.items = gUnknown_203ADC4; + gMultiuseListMenuTemplate.totalItems = gUnknown_203ADBC->field_07 + 1; + gMultiuseListMenuTemplate.windowId = 0; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 1; + gMultiuseListMenuTemplate.itemVerticalPadding = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.maxShowed = gUnknown_203ADBC->field_06; + gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.cursorPal = 2; + gMultiuseListMenuTemplate.fillValue = 0; + gMultiuseListMenuTemplate.cursorShadowPal = 3; + gMultiuseListMenuTemplate.moveCursorFunc = sub_810D954; + gMultiuseListMenuTemplate.itemPrintFunc = sub_810DA20; + gMultiuseListMenuTemplate.scrollMultiple = 0; + gMultiuseListMenuTemplate.cursorKind = 0; +} -- cgit v1.2.3 From d0633593e8446d6985967d4859c5100067c7d779 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 16 Jun 2019 15:14:57 -0400 Subject: item_pc: through sub_810DBD0 --- src/item_pc.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) (limited to 'src/item_pc.c') diff --git a/src/item_pc.c b/src/item_pc.c index 2b63651e7..c3d3ade9d 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -1,5 +1,6 @@ #include "global.h" #include "bg.h" +#include "data2.h" #include "decompress.h" #include "gpu_regs.h" #include "graphics.h" @@ -11,12 +12,16 @@ #include "malloc.h" #include "menu.h" #include "menu_helpers.h" +#include "menu_indicators.h" #include "palette.h" +#include "party_menu.h" #include "pc_screen_effect.h" #include "scanline_effect.h" #include "sound.h" +#include "string_util.h" #include "strings.h" #include "task.h" +#include "constants/items.h" #include "constants/songs.h" struct ItemPcResources @@ -27,7 +32,7 @@ struct ItemPcResources u8 field_06; u8 field_07; u8 field_08; - u8 filler_09[3]; + u16 field_0A; s16 field_0C[3]; }; @@ -58,15 +63,19 @@ bool8 sub_810D83C(void); void sub_810D878(void); void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list); void sub_810DA20(u8 windowId, s32 itemId, u8 y); +void sub_810DAD4(u8 y, u8 state); void sub_810E8F0(void); void sub_810DB34(void); void sub_810DB5C(void); void sub_810DBF0(void); void sub_810DC40(void); +u16 ItemPc_GetItemIdBySlotId(u16 itemIndex); +u16 ItemPc_GetItemQuantityBySlotId(u16 itemIndex); void sub_810DDA4(void); void sub_810DE08(void); void sub_810DE94(u8); void sub_810DEA0(u8 taskId); +void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); const struct BgTemplate gUnknown_8453F6C[2] = { { @@ -382,3 +391,95 @@ void sub_810D878(void) gMultiuseListMenuTemplate.scrollMultiple = 0; gMultiuseListMenuTemplate.cursorKind = 0; } + +void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list) +{ + u16 itemId; + const u8 * desc; + if (onInit != TRUE) + PlaySE(SE_SELECT); + + if (gUnknown_203ADBC->field_04 == 0xFF) + { + sub_8098940(gUnknown_203ADBC->field_05 ^ 1); + if (itemIndex != -2) + { + itemId = ItemPc_GetItemIdBySlotId(itemIndex); + sub_80988E8(itemId, gUnknown_203ADBC->field_05); + if (ItemId_GetPocket(itemId) == POCKET_TM_CASE) + desc = gMoveNames[ItemIdToBattleMoveId(itemId)]; + else + desc = ItemId_GetDescription(itemId); + } + else + { + sub_80988E8(ITEM_N_A, gUnknown_203ADBC->field_05); + desc = gUnknown_84178BE; + } + gUnknown_203ADBC->field_05 ^= 1; + FillWindowPixelBuffer(1, 0); + sub_810EA34(1, 2, desc, 0, 3, 2, 0, 0, 3); + } +} + +void sub_810DA20(u8 windowId, s32 itemId, u8 y) +{ + if (gUnknown_203ADBC->field_04 != 0xFF) + { + if (gUnknown_203ADBC->field_04 == (u8)itemId) + sub_810DAD4(y, 2); + else + sub_810DAD4(y, 0xFF); + } + if (itemId != -2) + { + u16 quantity = ItemPc_GetItemQuantityBySlotId(itemId); + ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810EA34(windowId, 0, gStringVar4, 110, y, 0, 0, 0xFF, 1); + } +} + +void sub_810DAB4(u8 listMenuId, u8 colorIdx) +{ + sub_810DAD4(ListMenuGetYCoordForPrintingArrowCursor(listMenuId), colorIdx); +} + +void sub_810DAD4(u8 y, u8 colorIdx) +{ + if (colorIdx == 0xFF) + { + u8 maxWidth = GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH); + u8 maxHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); + FillWindowPixelRect(0, 0, 0, y, maxWidth, maxHeight); + } + else + { + sub_810EA34(0, 2, gFameCheckerText_ListMenuCursor, 0, y, 0, 0, 0, colorIdx); + } +} + +void sub_810DB34(void) +{ + sub_810EA34(2, 0, gUnknown_84178A7, 0, 1, 0, 1, 0, 0); +} + +void sub_810DB5C(void) +{ + gUnknown_203ADBC->field_08 = AddScrollIndicatorArrowPairParameterized(2, 128, 8, 104, gUnknown_203ADBC->field_07 - gUnknown_203ADBC->field_06 + 1, 110, 110, &gUnknown_203ADCC.field_4); +} + +void sub_810DB98(void) +{ + gUnknown_203ADBC->field_0A = 1; + gUnknown_203ADBC->field_08 = AddScrollIndicatorArrowPairParameterized(2, 212, 120, 152, 2, 110, 110, &gUnknown_203ADBC->field_0A); +} + +void sub_810DBD0(void) +{ + if (gUnknown_203ADBC->field_08 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203ADBC->field_08); + gUnknown_203ADBC->field_08 = 0xFF; + } +} -- cgit v1.2.3 From b624de76db01db7e8b2e65f054483bfe1ec4b590 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 16 Jun 2019 16:55:40 -0400 Subject: item_pc: through sub_810DE94 --- src/item_pc.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 118 insertions(+), 3 deletions(-) (limited to 'src/item_pc.c') diff --git a/src/item_pc.c b/src/item_pc.c index c3d3ade9d..8b0b67d2f 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -13,6 +13,7 @@ #include "menu.h" #include "menu_helpers.h" #include "menu_indicators.h" +#include "new_menu_helpers.h" #include "palette.h" #include "party_menu.h" #include "pc_screen_effect.h" @@ -26,7 +27,7 @@ struct ItemPcResources { - u32 field_00; + MainCallback field_00; u8 field_04; u8 field_05; u8 field_06; @@ -64,17 +65,18 @@ void sub_810D878(void); void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list); void sub_810DA20(u8 windowId, s32 itemId, u8 y); void sub_810DAD4(u8 y, u8 state); -void sub_810E8F0(void); void sub_810DB34(void); void sub_810DB5C(void); void sub_810DBF0(void); void sub_810DC40(void); +void sub_810DCE4(u8 taskId); u16 ItemPc_GetItemIdBySlotId(u16 itemIndex); u16 ItemPc_GetItemQuantityBySlotId(u16 itemIndex); void sub_810DDA4(void); void sub_810DE08(void); void sub_810DE94(u8); void sub_810DEA0(u8 taskId); +void sub_810E8F0(void); void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); const struct BgTemplate gUnknown_8453F6C[2] = { @@ -355,7 +357,7 @@ bool8 sub_810D78C(void) bool8 sub_810D83C(void) { - sub_810D83C_sub(gUnknown_203ADC4, 0x0F8); + sub_810D83C_sub(gUnknown_203ADC4, sizeof(struct ListMenuItem) * (PC_ITEMS_COUNT + 1)); sub_810D83C_sub(gUnknown_203ADC8, 0x1B2); return TRUE; } @@ -483,3 +485,116 @@ void sub_810DBD0(void) gUnknown_203ADBC->field_08 = 0xFF; } } + +void sub_810DBF0(void) +{ + if (gUnknown_203ADCC.field_4 != 0 && gUnknown_203ADCC.field_4 + gUnknown_203ADBC->field_06 > gUnknown_203ADBC->field_07 + 1) + gUnknown_203ADCC.field_4 = (gUnknown_203ADBC->field_07 + 1) - gUnknown_203ADBC->field_06; + if (gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6 >= gUnknown_203ADBC->field_07 + 1) + { + if (gUnknown_203ADBC->field_07 + 1 < 2) + gUnknown_203ADCC.field_6 = 0; + else + gUnknown_203ADCC.field_6 = gUnknown_203ADBC->field_07; + } +} + +#define sub_810DC40_sub(ptr) ({ \ + void ** ptr__ = (void **)&(ptr); \ + if (*ptr__ != NULL) \ + Free(*ptr__); \ +}) + +void sub_810DC40(void) +{ + sub_810DC40_sub(gUnknown_203ADBC); + sub_810DC40_sub(gUnknown_203ADC0); + sub_810DC40_sub(gUnknown_203ADC4); + sub_810DC40_sub(gUnknown_203ADC8); + FreeAllWindowBuffers(); +} + +void sub_810DC8C(u8 taskId) +{ + if (gUnknown_203ADCC.field_8 == 1) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + } + else + { + sub_80A0A70(0, 0, 0); + PlaySE(SE_PC_OFF); + } + gTasks[taskId].func = sub_810DCE4; +} + +void sub_810DCE4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (!gPaletteFade.active && !sub_80A0AAC()) + { + DestroyListMenu(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + if (gUnknown_203ADBC->field_00 != NULL) + SetMainCallback2(gUnknown_203ADBC->field_00); + else + SetMainCallback2(gUnknown_203ADCC.field_0); + sub_810DBD0(); + sub_810DC40(); + DestroyTask(taskId); + } +} + +u8 sub_810DD54(void) +{ + return gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6; +} + +u16 ItemPc_GetItemIdBySlotId(u16 idx) +{ + return gSaveBlock1Ptr->pcItems[idx].itemId; +} + +u16 ItemPc_GetItemQuantityBySlotId(u16 idx) +{ + return GetBagItemId(&gSaveBlock1Ptr->pcItems[idx].quantity); +} + +void sub_810DDA4(void) +{ + u16 i; + + sub_809A4E8(); + gUnknown_203ADBC->field_07 = 0; + for (i = 0; i < PC_ITEMS_COUNT; gUnknown_203ADBC->field_07++, i++) + { + if (gSaveBlock1Ptr->pcItems[i].itemId == ITEM_NONE) + break; + } + gUnknown_203ADBC->field_06 = gUnknown_203ADBC->field_07 + 1 <= 6 ? gUnknown_203ADBC->field_07 + 1 : 6; +} + +void sub_810DE08(void) +{ + u8 i; + + if (gUnknown_203ADCC.field_6 > 3) + { + for (i = 0; i <= gUnknown_203ADCC.field_6 - 3; gUnknown_203ADCC.field_6--, gUnknown_203ADCC.field_4++, i++) + { + if (gUnknown_203ADCC.field_4 + gUnknown_203ADBC->field_06 == gUnknown_203ADBC->field_07 + 1) + break; + } + } +} + +void sub_810DE6C(int a0) +{ + sub_80F6B08(1, 0, 14, 30, 6, a0 + 1); + schedule_bg_copy_tilemap_to_vram(1); +} + +void sub_810DE94(u8 a0) +{ + gUnknown_203ADCC.field_8 = a0; +} -- cgit v1.2.3 From d681d7f727e01f1e5b167f5042e9edd1542ae6c6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 16 Jun 2019 18:12:11 -0400 Subject: item_pc: through sub_810E200 --- src/item_pc.c | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 126 insertions(+), 1 deletion(-) (limited to 'src/item_pc.c') diff --git a/src/item_pc.c b/src/item_pc.c index 8b0b67d2f..7a3fbd7af 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -6,6 +6,7 @@ #include "graphics.h" #include "help_system.h" #include "item.h" +#include "item_menu.h" #include "item_menu_icons.h" #include "list_menu.h" #include "main.h" @@ -76,6 +77,11 @@ void sub_810DDA4(void); void sub_810DE08(void); void sub_810DE94(u8); void sub_810DEA0(u8 taskId); +void sub_810DFE0(u8 taskId, s16 pos); +void sub_810E0B4(u8 taskId); +void sub_810E160(u8 taskId, u32 pos); +void sub_810E200(u8 taskId, u32 pos); +void sub_810E274(u8 taskId); void sub_810E8F0(void); void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); @@ -368,7 +374,7 @@ void sub_810D878(void) for (i = 0; i < gUnknown_203ADBC->field_07; i++) { - gUnknown_203ADC4[i].label = ItemId_GetItem(gSaveBlock1Ptr->pcItems[i].itemId)->name; + gUnknown_203ADC4[i].label = ItemId_GetName(gSaveBlock1Ptr->pcItems[i].itemId); gUnknown_203ADC4[i].index = i; } gUnknown_203ADC4[i].label = gFameCheckerText_Cancel; @@ -598,3 +604,122 @@ void sub_810DE94(u8 a0) { gUnknown_203ADCC.field_8 = a0; } + +void sub_810DEA0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u16 scroll; + u16 row; + s32 input; + + if (!gPaletteFade.active && !sub_80A0A98()) + { + if (JOY_NEW(SELECT_BUTTON)) + { + ListMenuGetScrollAndRow(data[0], &scroll, &row); + if (scroll + row != gUnknown_203ADBC->field_07) + { + PlaySE(SE_SELECT); + sub_810DFE0(taskId, scroll + row); + return; + } + } + input = ListMenuHandleInput(data[0]); + ListMenuGetScrollAndRow(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + switch (input) + { + case -1: + break; + case -2: + PlaySE(SE_SELECT); + sub_810DE94(0); + gTasks[taskId].func = sub_810DC8C; + break; + default: + PlaySE(SE_SELECT); + sub_810DE6C(1); + sub_810DBD0(); + data[1] = input; + data[2] = ItemPc_GetItemQuantityBySlotId(input); + sub_810DAB4(data[0], 2); + gTasks[taskId].func = sub_810E274; + break; + } + } +} + +void sub_810DFB0(u8 taskId) +{ + sub_810DE6C(0); + sub_810DB5C(); + gTasks[taskId].func = sub_810DEA0; +} + +void sub_810DFE0(u8 taskId, s16 pos) +{ + s16 * data = gTasks[taskId].data; + + sub_8107BD0(data[0], 16, 1); + data[1] = pos; + gUnknown_203ADBC->field_04 = pos; + StringCopy(gStringVar1, ItemId_GetName(ItemPc_GetItemIdBySlotId(data[1]))); + StringExpandPlaceholders(gStringVar4, gUnknown_841633F); + FillWindowPixelBuffer(1, 0x00); + sub_810EA34(1, 2, gStringVar4, 0, 3, 2, 3, 0, 0); + sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + sub_8098660(0); + sub_810DAB4(data[0], 2); + gTasks[taskId].func = sub_810E0B4; +} + +void sub_810E0B4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + ListMenuHandleInput(data[0]); + ListMenuGetScrollAndRow(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + gUnknown_203ADBC->field_04 = 0xFF; + sub_810E160(taskId, gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + gUnknown_203ADBC->field_04 = 0xFF; + sub_810E200(taskId, gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6); + } +} + +void sub_810E160(u8 taskId, u32 pos) +{ + s16 * data = gTasks[taskId].data; + if (data[1] == pos || data[1] == pos - 1) + sub_810E200(taskId, pos); + else + { + sub_8108D60(gSaveBlock1Ptr->pcItems, data[1], pos); + DestroyListMenu(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + if (data[1] < pos) + gUnknown_203ADCC.field_6--; + sub_810D878(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ADCC.field_4, gUnknown_203ADCC.field_6); + sub_8098660(1); + gTasks[taskId].func = sub_810DEA0; + } +} + +void sub_810E200(u8 taskId, u32 pos) +{ + s16 * data = gTasks[taskId].data; + + DestroyListMenu(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + if (data[1] < pos) + gUnknown_203ADCC.field_6--; + sub_810D878(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ADCC.field_4, gUnknown_203ADCC.field_6); + sub_8098660(1); + gTasks[taskId].func = sub_810DEA0; +} -- cgit v1.2.3 From 105716d701e54270179c20425dfcc1e396211519 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 16 Jun 2019 19:37:28 -0400 Subject: item_pc: through sub_810E548 --- src/item_pc.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) (limited to 'src/item_pc.c') diff --git a/src/item_pc.c b/src/item_pc.c index 7a3fbd7af..753463761 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -9,6 +9,7 @@ #include "item_menu.h" #include "item_menu_icons.h" #include "list_menu.h" +#include "item_use.h" #include "main.h" #include "malloc.h" #include "menu.h" @@ -82,8 +83,21 @@ void sub_810E0B4(u8 taskId); void sub_810E160(u8 taskId, u32 pos); void sub_810E200(u8 taskId, u32 pos); void sub_810E274(u8 taskId); +void sub_810E358(u8 taskId); +void sub_810E3A4(u8 taskId); +void sub_810E418(u8 taskId); +void sub_810E4F4(u8 taskId); +void sub_810E548(u8 taskId); +void sub_810E578(u8 taskId); +void sub_810E5E0(u16 itemId); +void sub_810E6D8(u8 taskId); +void sub_810E79C(u8 taskId); +void sub_810E8A0(u8 taskId); void sub_810E8F0(void); void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); +void sub_810EA9C(u8 windowId); +u8 sub_810EAB4(u8 idx); +void sub_810EAF0(u8 idx); const struct BgTemplate gUnknown_8453F6C[2] = { { @@ -99,6 +113,12 @@ const struct BgTemplate gUnknown_8453F6C[2] = { } }; +const struct MenuAction gUnknown_8453F74[] = { + {gUnknown_84178B5, {.void_u8 = sub_810E3A4}}, + {gOtherText_Give, {.void_u8 = sub_810E79C}}, + {gFameCheckerText_Cancel, {.void_u8 = sub_810E8A0}} +}; + void sub_810D3F4(u8 a0, MainCallback callback) { u8 i; @@ -723,3 +743,107 @@ void sub_810E200(u8 taskId, u32 pos) sub_8098660(1); gTasks[taskId].func = sub_810DEA0; } + +void sub_810E274(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 windowId; + + sub_810EA9C(4); + windowId = sub_810EAB4(0); + PrintTextArray(4, 2, 8, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, gUnknown_8453F74); + ProgramAndPlaceMenuCursorOnWindow(4, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, 0); + CopyItemName(ItemPc_GetItemIdBySlotId(data[1]), gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_84162FF); + sub_810EA34(windowId, 2, gStringVar4, 0, 2, 1, 0, 0, 1); + schedule_bg_copy_tilemap_to_vram(0); + gTasks[taskId].func = sub_810E358; +} + +void sub_810E358(u8 taskId) +{ + s8 input = ProcessMenuInputNoWrapAround(); + switch (input) + { + case -1: + PlaySE(SE_SELECT); + sub_810E8A0(taskId); + break; + case -2: + break; + default: + PlaySE(SE_SELECT); + gUnknown_8453F74[input].func.void_u8(taskId); + } +} + +void sub_810E3A4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + sub_810F4D8(4, 0); + sub_810EAF0(0); + ClearWindowTilemap(4); + data[8] = 1; + if (ItemPc_GetItemQuantityBySlotId(data[1]) == 1) + { + PutWindowTilemap(0); + schedule_bg_copy_tilemap_to_vram(0); + sub_810E418(taskId); + } + else + { + PutWindowTilemap(0); + sub_810E5E0(data[1]); + sub_810DB98(); + gTasks[taskId].func = sub_810E6D8; + } +} + +void sub_810E418(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u16 itemId = ItemPc_GetItemIdBySlotId(data[1]); + u8 windowId; + + if (AddBagItem(itemId, data[8]) == TRUE) + { + sub_80A2294(29, 0, itemId, 0xFFFF); + CopyItemName(itemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gUnknown_84177C5); + windowId = sub_810EAB4(2); + AddTextPrinterParameterized(windowId, 2, gStringVar4, 0, 2, 0, NULL); + gTasks[taskId].func = sub_810E4F4; + } + else + { + windowId = sub_810EAB4(2); + AddTextPrinterParameterized(windowId, 2, gUnknown_841778A, 0, 2, 0, NULL); + gTasks[taskId].func = sub_810E548; + } +} + +void sub_810E4F4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u16 itemId; + + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + itemId = ItemPc_GetItemIdBySlotId(data[1]); + sub_809A460(itemId, data[8]); + sub_809A4E8(); + sub_810E578(taskId); + } +} + +void sub_810E548(u8 taskId) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810E578(taskId); + } +} -- cgit v1.2.3 From 632a7e8c08158470cbe5120fc8c8ec0141fe7303 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 16 Jun 2019 21:14:16 -0400 Subject: finish item_pc --- src/item_pc.c | 305 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 303 insertions(+), 2 deletions(-) (limited to 'src/item_pc.c') diff --git a/src/item_pc.c b/src/item_pc.c index 753463761..f158831c9 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -24,6 +24,7 @@ #include "string_util.h" #include "strings.h" #include "task.h" +#include "text_window.h" #include "constants/items.h" #include "constants/songs.h" @@ -52,6 +53,7 @@ EWRAM_DATA u8 * gUnknown_203ADC0 = NULL; EWRAM_DATA struct ListMenuItem * gUnknown_203ADC4 = NULL; EWRAM_DATA void * gUnknown_203ADC8 = NULL; EWRAM_DATA struct ItemPcStaticResources gUnknown_203ADCC = {}; +EWRAM_DATA u8 gUnknown_203ADD8[3] = {}; extern const struct CompressedSpriteSheet gUnknown_83D4240; extern const struct CompressedSpritePalette gUnknown_83D4248; @@ -89,15 +91,19 @@ void sub_810E418(u8 taskId); void sub_810E4F4(u8 taskId); void sub_810E548(u8 taskId); void sub_810E578(u8 taskId); -void sub_810E5E0(u16 itemId); +void sub_810E5E0(u16 slotId); void sub_810E6D8(u8 taskId); void sub_810E79C(u8 taskId); +void sub_810E7F8(void); +void sub_810E838(void); +void sub_810E848(u8 taskId); void sub_810E8A0(u8 taskId); void sub_810E8F0(void); void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); void sub_810EA9C(u8 windowId); u8 sub_810EAB4(u8 idx); void sub_810EAF0(u8 idx); +void sub_810EB30(u8 taskId, const u8 * str, TaskFunc taskFunc); const struct BgTemplate gUnknown_8453F6C[2] = { { @@ -119,6 +125,93 @@ const struct MenuAction gUnknown_8453F74[] = { {gFameCheckerText_Cancel, {.void_u8 = sub_810E8A0}} }; +const struct TextColor gUnknown_8453F8C[] = { + {0, 1, 2}, + {0, 2, 3}, + {0, 3, 2}, + {0, 10, 2} +}; + +const struct WindowTemplate gUnknown_8453F98[] = { + { + .bg = 0, + .tilemapLeft = 0x07, + .tilemapTop = 0x01, + .width = 0x13, + .height = 0x0c, + .paletteNum = 0x0f, + .baseBlock = 0x02bf + }, { + .bg = 0, + .tilemapLeft = 0x05, + .tilemapTop = 0x0e, + .width = 0x19, + .height = 0x06, + .paletteNum = 0x0d, + .baseBlock = 0x0229 + }, { + .bg = 0, + .tilemapLeft = 0x01, + .tilemapTop = 0x01, + .width = 0x05, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x0215 + }, { + .bg = 0, + .tilemapLeft = 0x18, + .tilemapTop = 0x0f, + .width = 0x05, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x0201 + }, { + .bg = 0, + .tilemapLeft = 0x16, + .tilemapTop = 0x0d, + .width = 0x07, + .height = 0x06, + .paletteNum = 0x0f, + .baseBlock = 0x01d7 + }, { + .bg = 0, + .tilemapLeft = 0x02, + .tilemapTop = 0x0f, + .width = 0x1a, + .height = 0x04, + .paletteNum = 0x0b, + .baseBlock = 0x016f + }, DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate gUnknown_8453FD0[] = { + { + .bg = 0, + .tilemapLeft = 0x06, + .tilemapTop = 0x0f, + .width = 0x0e, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x0137 + }, { + .bg = 0, + .tilemapLeft = 0x06, + .tilemapTop = 0x0f, + .width = 0x10, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x0137 + }, { + .bg = 0, + .tilemapLeft = 0x06, + .tilemapTop = 0x0f, + .width = 0x17, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x009b + } +}; + void sub_810D3F4(u8 a0, MainCallback callback) { u8 i; @@ -781,7 +874,7 @@ void sub_810E3A4(u8 taskId) { s16 * data = gTasks[taskId].data; - sub_810F4D8(4, 0); + sub_810F4D8(4, FALSE); sub_810EAF0(0); ClearWindowTilemap(4); data[8] = 1; @@ -847,3 +940,211 @@ void sub_810E548(u8 taskId) sub_810E578(taskId); } } + +void sub_810E578(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + sub_810EAF0(2); + PutWindowTilemap(1); + DestroyListMenu(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + sub_810DDA4(); + sub_810DBF0(); + sub_810D878(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ADCC.field_4, gUnknown_203ADCC.field_6); + schedule_bg_copy_tilemap_to_vram(0); + sub_810DFB0(taskId); +} + +void sub_810E5E0(u16 slotId) +{ + u16 itemId = ItemPc_GetItemIdBySlotId(slotId); + + CopyItemName(itemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_84177AC); + AddTextPrinterParameterized(sub_810EAB4(1), 2, gStringVar4, 0, 2, 0, NULL); + ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810EA9C(3); + sub_810EA34(3, 0, gStringVar4, 8, 10, 1, 0, 0, 1); + schedule_bg_copy_tilemap_to_vram(0); +} + +void sub_810E670(s16 quantity) +{ + FillWindowPixelRect(3, 0x11, 10, 10, 28, 12); + ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810EA34(3, 0, gStringVar4, 8, 10, 1, 0, 0, 1); +} + +void sub_810E6D8(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (sub_80BF848(&data[8], data[2]) == TRUE) + sub_810E670(data[8]); + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810EAF0(1); + ClearWindowTilemap(3); + PutWindowTilemap(0); + sub_810DAB4(data[0], 1); + schedule_bg_copy_tilemap_to_vram(0); + sub_810DBD0(); + sub_810E418(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810F4D8(3, FALSE); + sub_810EAF0(1); + ClearWindowTilemap(3); + PutWindowTilemap(0); + PutWindowTilemap(1); + sub_810DAB4(data[0], 1); + schedule_bg_copy_tilemap_to_vram(0); + sub_810DBD0(); + sub_810DFB0(taskId); + } +} + +void sub_810E79C(u8 taskId) +{ + if (CalculatePlayerPartyCount() == 0) + { + sub_810F4D8(4, FALSE); + sub_810EAF0(0); + ClearWindowTilemap(4); + PutWindowTilemap(0); + sub_810EB30(taskId, gText_ThereIsNoPokemon, sub_810E848); + } + else + { + gUnknown_203ADBC->field_00 = sub_810E7F8; + sub_810DC8C(taskId); + } +} + +void sub_810E7F8(void) +{ + sub_811EA44(0, 0, 6, 0, 6, sub_811FB28, sub_810E838); + gUnknown_203B0A0.unkC = ItemPc_GetItemIdBySlotId(sub_810DD54()); +} + +void sub_810E838(void) +{ + sub_810D3F4(1, NULL); +} + +void sub_810E848(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810F260(5, 0); + ClearWindowTilemap(5); + PutWindowTilemap(1); + sub_810DAB4(data[0], 1); + schedule_bg_copy_tilemap_to_vram(0); + sub_810DFB0(taskId); + } +} + +void sub_810E8A0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + sub_810F4D8(4, FALSE); + sub_810EAF0(0); + ClearWindowTilemap(4); + PutWindowTilemap(0); + PutWindowTilemap(1); + sub_810DAB4(data[0], 1); + schedule_bg_copy_tilemap_to_vram(0); + sub_810DFB0(taskId); +} + +void sub_810E8F0(void) +{ + u8 i; + + InitWindows(gUnknown_8453F98); + DeactivateAllTextPrinters(); + sub_815001C(0, 0x3C0, 0xE0); + sub_814FF2C(0, 0x3A3, 0xC0); + sub_814FEAC(0, 0x3AC, 0xB0); + LoadPalette(stdpal_get(2), 0xD0, 0x20); + LoadPalette(gTMCaseMainWindowPalette, 0xF0, 0x20); + for (i = 0; i < 3; i++) + { + FillWindowPixelBuffer(i, 0x00); + PutWindowTilemap(i); + } + schedule_bg_copy_tilemap_to_vram(0); + for (i = 0; i < 3; i++) + gUnknown_203ADD8[i] = 0xFF; +} + +void sub_810E984(u8 windowId, const u8 * string, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed) +{ + struct TextPrinterTemplate template; + + template.currentChar = string; + template.windowId = windowId; + template.fontId = 3; + template.x = x; + template.y = y; + template.currentX = x; + template.currentY = y; + template.fgColor = 2; + template.bgColor = 0; + template.shadowColor = 3; + template.unk = GetFontAttribute(3, FONTATTR_UNKNOWN); + template.letterSpacing = letterSpacing + GetFontAttribute(3, FONTATTR_LETTER_SPACING); + template.lineSpacing = lineSpacing + GetFontAttribute(3, FONTATTR_LINE_SPACING); + AddTextPrinter(&template, speed, NULL); +} + +void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) +{ + AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, &gUnknown_8453F8C[colorIdx], speed, str); +} + +void sub_810EA9C(u8 windowId) +{ + SetWindowBorderStyle(windowId, FALSE, 0x3C0, 0x0E); +} + +u8 sub_810EAB4(u8 idx) +{ + if (gUnknown_203ADD8[idx] == 0xFF) + { + gUnknown_203ADD8[idx] = AddWindow(&gUnknown_8453FD0[idx]); + SetWindowBorderStyle(gUnknown_203ADD8[idx], TRUE, 0x3A3, 0x0C); + } + + return gUnknown_203ADD8[idx]; +} + +void sub_810EAF0(u8 idx) +{ + sub_810F4D8(gUnknown_203ADD8[idx], 0); + ClearWindowTilemap(gUnknown_203ADD8[idx]); + RemoveWindow(gUnknown_203ADD8[idx]); + gUnknown_203ADD8[idx] = 0xFF; +} + +u8 sub_810EB20(u8 idx) +{ + return gUnknown_203ADD8[idx]; +} + +void sub_810EB30(u8 taskId, const u8 * str, TaskFunc taskFunc) +{ + DisplayMessageAndContinueTask(taskId, 5, 0x3AC, 0x0B, 2, GetTextSpeedSetting(), str, taskFunc); + schedule_bg_copy_tilemap_to_vram(0); +} -- cgit v1.2.3 From 2b750cf44491aee3b2fe8265afb4ac6620500afa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 17 Jun 2019 10:21:32 -0400 Subject: Rename Item PC symbols --- src/item_pc.c | 724 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 362 insertions(+), 362 deletions(-) (limited to 'src/item_pc.c') diff --git a/src/item_pc.c b/src/item_pc.c index f158831c9..3e139503e 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -9,6 +9,7 @@ #include "item_menu.h" #include "item_menu_icons.h" #include "list_menu.h" +#include "item_pc.h" #include "item_use.h" #include "main.h" #include "malloc.h" @@ -30,82 +31,81 @@ struct ItemPcResources { - MainCallback field_00; - u8 field_04; - u8 field_05; - u8 field_06; - u8 field_07; - u8 field_08; - u16 field_0A; - s16 field_0C[3]; + MainCallback savedCallback; + u8 moveModeOrigPos; + u8 itemMenuIconSlot; + u8 maxShowed; + u8 nItems; + u8 scrollIndicatorArrowPairId; + u16 withdrawQuantitySubmenuCursorPos; + s16 data[3]; }; struct ItemPcStaticResources { - MainCallback field_0; - u16 field_4; - u16 field_6; - u8 field_8; + MainCallback savedCallback; + u16 scroll; + u16 row; + u8 initialized; }; -EWRAM_DATA struct ItemPcResources * gUnknown_203ADBC = NULL; -EWRAM_DATA u8 * gUnknown_203ADC0 = NULL; -EWRAM_DATA struct ListMenuItem * gUnknown_203ADC4 = NULL; -EWRAM_DATA void * gUnknown_203ADC8 = NULL; -EWRAM_DATA struct ItemPcStaticResources gUnknown_203ADCC = {}; -EWRAM_DATA u8 gUnknown_203ADD8[3] = {}; - -extern const struct CompressedSpriteSheet gUnknown_83D4240; -extern const struct CompressedSpritePalette gUnknown_83D4248; - -void sub_810D4A0(void); -bool8 sub_810D4C0(void); -void sub_810D6AC(void); -void sub_810D6E8(u8 taskId); -bool8 sub_810D71C(void); -bool8 sub_810D78C(void); -bool8 sub_810D83C(void); -void sub_810D878(void); -void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list); -void sub_810DA20(u8 windowId, s32 itemId, u8 y); -void sub_810DAD4(u8 y, u8 state); -void sub_810DB34(void); -void sub_810DB5C(void); -void sub_810DBF0(void); -void sub_810DC40(void); -void sub_810DCE4(u8 taskId); -u16 ItemPc_GetItemIdBySlotId(u16 itemIndex); -u16 ItemPc_GetItemQuantityBySlotId(u16 itemIndex); -void sub_810DDA4(void); -void sub_810DE08(void); -void sub_810DE94(u8); -void sub_810DEA0(u8 taskId); -void sub_810DFE0(u8 taskId, s16 pos); -void sub_810E0B4(u8 taskId); -void sub_810E160(u8 taskId, u32 pos); -void sub_810E200(u8 taskId, u32 pos); -void sub_810E274(u8 taskId); -void sub_810E358(u8 taskId); -void sub_810E3A4(u8 taskId); -void sub_810E418(u8 taskId); -void sub_810E4F4(u8 taskId); -void sub_810E548(u8 taskId); -void sub_810E578(u8 taskId); -void sub_810E5E0(u16 slotId); -void sub_810E6D8(u8 taskId); -void sub_810E79C(u8 taskId); -void sub_810E7F8(void); -void sub_810E838(void); -void sub_810E848(u8 taskId); -void sub_810E8A0(u8 taskId); -void sub_810E8F0(void); -void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); -void sub_810EA9C(u8 windowId); -u8 sub_810EAB4(u8 idx); -void sub_810EAF0(u8 idx); -void sub_810EB30(u8 taskId, const u8 * str, TaskFunc taskFunc); - -const struct BgTemplate gUnknown_8453F6C[2] = { +static EWRAM_DATA struct ItemPcResources * sStateDataPtr = NULL; +static EWRAM_DATA u8 * sBg1TilemapBuffer = NULL; +static EWRAM_DATA struct ListMenuItem * sListMenuItems = NULL; +static EWRAM_DATA u8 * sUnusedStringAllocation = NULL; +static EWRAM_DATA struct ItemPcStaticResources sListMenuState = {}; +static EWRAM_DATA u8 sSubmenuWindowIds[3] = {}; + +extern const struct CompressedSpriteSheet gBagSwapSpriteSheet; +extern const struct CompressedSpritePalette gBagSwapSpritePalette; + +static void ItemPc_RunSetup(void); +static bool8 ItemPc_DoGfxSetup(void); +static void ItemPc_FadeAndBail(void); +static void Task_ItemPcWaitFadeAndBail(u8 taskId); +static bool8 ItemPc_InitBgs(void); +static bool8 ItemPc_LoadGraphics(void); +static bool8 ItemPc_AllocateResourcesForListMenu(void); +static void ItemPc_BuildListMenuTemplate(void); +static void ItemPc_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * list); +static void ItemPc_ItemPrintFunc(u8 windowId, s32 itemId, u8 y); +static void ItemPc_PrintOrRemoveCursorAt(u8 y, u8 state); +static void ItemPc_PrintWithdrawItem(void); +static void ItemPc_PlaceTopMenuScrollIndicatorArrows(void); +static void ItemPc_SetCursorPosition(void); +static void ItemPc_FreeResources(void); +static void Task_ItemPcTurnOff2(u8 taskId); +static u16 ItemPc_GetItemIdBySlotId(u16 itemIndex); +static u16 ItemPc_GetItemQuantityBySlotId(u16 itemIndex); +static void ItemPc_CountPcItems(void); +static void ItemPc_SetScrollPosition(void); +static void Task_ItemPcMain(u8 taskId); +static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos); +static void Task_ItemPcMoveItemModeRun(u8 taskId); +static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos); +static void ItemPc_MoveItemModeCancel(u8 taskId, u32 pos); +static void Task_ItemPcSubmenuInit(u8 taskId); +static void Task_ItemPcSubmenuRun(u8 taskId); +static void Task_ItemPcWithdraw(u8 taskId); +static void ItemPc_DoWithdraw(u8 taskId); +static void Task_ItemPcWaitButtonAndFinishWithdrawMultiple(u8 taskId); +static void Task_ItemPcWaitButtonWithdrawMultipleFailed(u8 taskId); +static void Task_ItemPcCleanUpWithdraw(u8 taskId); +static void ItemPc_WithdrawMultipleInitWindow(u16 slotId); +static void Task_ItemPcHandleWithdrawMultiple(u8 taskId); +static void Task_ItemPcGive(u8 taskId); +static void ItemPc_CB2_SwitchToPartyMenu(void); +static void ItemPc_CB2_ReturnFromPartyMenu(void); +static void gTask_ItemPcWaitButtonAndExitSubmenu(u8 taskId); +static void Task_ItemPcCancel(u8 taskId); +static void ItemPc_InitWindows(void); +static void ItemPc_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); +static void ItemPc_SetBorderStyleOnWindow(u8 windowId); +static u8 ItemPc_GetOrCreateSubwindow(u8 idx); +static void ItemPc_DestroySubwindow(u8 idx); +static void ItemPc_PrintOnWindow5WithContinueTask(u8 taskId, const u8 * str, TaskFunc taskFunc); + +static const struct BgTemplate sBgTemplates[2] = { { .bg = 0, .charBaseIndex = 0, @@ -119,20 +119,20 @@ const struct BgTemplate gUnknown_8453F6C[2] = { } }; -const struct MenuAction gUnknown_8453F74[] = { - {gUnknown_84178B5, {.void_u8 = sub_810E3A4}}, - {gOtherText_Give, {.void_u8 = sub_810E79C}}, - {gFameCheckerText_Cancel, {.void_u8 = sub_810E8A0}} +static const struct MenuAction sItemPcSubmenuOptions[] = { + {gText_Withdraw, {.void_u8 = Task_ItemPcWithdraw}}, + {gOtherText_Give, {.void_u8 = Task_ItemPcGive}}, + {gFameCheckerText_Cancel, {.void_u8 = Task_ItemPcCancel}} }; -const struct TextColor gUnknown_8453F8C[] = { +static const struct TextColor gUnknown_8453F8C[] = { {0, 1, 2}, {0, 2, 3}, {0, 3, 2}, {0, 10, 2} }; -const struct WindowTemplate gUnknown_8453F98[] = { +static const struct WindowTemplate gUnknown_8453F98[] = { { .bg = 0, .tilemapLeft = 0x07, @@ -184,7 +184,7 @@ const struct WindowTemplate gUnknown_8453F98[] = { }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_8453FD0[] = { +static const struct WindowTemplate gUnknown_8453FD0[] = { { .bg = 0, .tilemapLeft = 0x06, @@ -212,7 +212,7 @@ const struct WindowTemplate gUnknown_8453FD0[] = { } }; -void sub_810D3F4(u8 a0, MainCallback callback) +void ItemPc_Init(u8 a0, MainCallback callback) { u8 i; @@ -221,28 +221,28 @@ void sub_810D3F4(u8 a0, MainCallback callback) SetMainCallback2(callback); return; } - if ((gUnknown_203ADBC = Alloc(sizeof(struct ItemPcResources))) == NULL) + if ((sStateDataPtr = Alloc(sizeof(struct ItemPcResources))) == NULL) { SetMainCallback2(callback); return; } if (a0 != 1) { - gUnknown_203ADCC.field_0 = callback; - gUnknown_203ADCC.field_4 = gUnknown_203ADCC.field_6 = 0; + sListMenuState.savedCallback = callback; + sListMenuState.scroll = sListMenuState.row = 0; } - gUnknown_203ADBC->field_04 = 0xFF; - gUnknown_203ADBC->field_05 = 0; - gUnknown_203ADBC->field_08 = 0xFF; - gUnknown_203ADBC->field_00 = 0; + sStateDataPtr->moveModeOrigPos = 0xFF; + sStateDataPtr->itemMenuIconSlot = 0; + sStateDataPtr->scrollIndicatorArrowPairId = 0xFF; + sStateDataPtr->savedCallback = 0; for (i = 0; i < 3; i++) { - gUnknown_203ADBC->field_0C[i] = 0; + sStateDataPtr->data[i] = 0; } - SetMainCallback2(sub_810D4A0); + SetMainCallback2(ItemPc_RunSetup); } -void sub_810D470(void) +static void ItemPc_MainCB(void) { RunTasks(); AnimateSprites(); @@ -251,25 +251,25 @@ void sub_810D470(void) UpdatePaletteFade(); } -void sub_810D48C(void) +static void ItemPc_VBlankCB(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_810D4A0(void) +static void ItemPc_RunSetup(void) { while (1) { - if (sub_810D4C0() == TRUE) + if (ItemPc_DoGfxSetup() == TRUE) break; - if (sub_80BF708() == TRUE) + if (MenuHelpers_LinkSomething() == TRUE) break; } } -bool8 sub_810D4C0(void) +static bool8 ItemPc_DoGfxSetup(void) { u8 taskId; switch (gMain.state) @@ -296,7 +296,7 @@ bool8 sub_810D4C0(void) gMain.state++; break; case 5: - sub_80984D8(); + ResetItemMenuIconState(); gMain.state++; break; case 6: @@ -304,46 +304,46 @@ bool8 sub_810D4C0(void) gMain.state++; break; case 7: - if (sub_810D71C()) + if (ItemPc_InitBgs()) { - gUnknown_203ADBC->field_0C[0] = 0; + sStateDataPtr->data[0] = 0; gMain.state++; } else { - sub_810D6AC(); + ItemPc_FadeAndBail(); return TRUE; } break; case 8: - if (sub_810D78C() == TRUE) + if (ItemPc_LoadGraphics() == TRUE) gMain.state++; break; case 9: - sub_810E8F0(); + ItemPc_InitWindows(); gMain.state++; break; case 10: - sub_810DDA4(); - sub_810DBF0(); - sub_810DE08(); + ItemPc_CountPcItems(); + ItemPc_SetCursorPosition(); + ItemPc_SetScrollPosition(); gMain.state++; break; case 11: - if (sub_810D83C()) + if (ItemPc_AllocateResourcesForListMenu()) gMain.state++; else { - sub_810D6AC(); + ItemPc_FadeAndBail(); return TRUE; } break; case 12: - sub_810D878(); + ItemPc_BuildListMenuTemplate(); gMain.state++; break; case 13: - sub_810DB34(); + ItemPc_PrintWithdrawItem(); gMain.state++; break; case 14: @@ -351,12 +351,12 @@ bool8 sub_810D4C0(void) gMain.state++; break; case 15: - taskId = CreateTask(sub_810DEA0, 0); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ADCC.field_4, gUnknown_203ADCC.field_6); + taskId = CreateTask(Task_ItemPcMain, 0); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); gMain.state++; break; case 16: - sub_810DB5C(); + ItemPc_PlaceTopMenuScrollIndicatorArrows(); gMain.state++; break; case 17: @@ -364,21 +364,21 @@ bool8 sub_810D4C0(void) gMain.state++; break; case 18: - if (gUnknown_203ADCC.field_8 == 1) + if (sListMenuState.initialized == 1) { BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); } gMain.state++; break; case 19: - if (gUnknown_203ADCC.field_8 == 1) + if (sListMenuState.initialized == 1) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); } else { sub_80A0A48(0, 0, 0); - sub_810DE94(1); + ItemPc_SetInitializedFlag(1); PlaySE(SE_PC_LOGON); } gMain.state++; @@ -388,41 +388,41 @@ bool8 sub_810D4C0(void) gMain.state++; break; default: - SetVBlankCallback(sub_810D48C); - SetMainCallback2(sub_810D470); + SetVBlankCallback(ItemPc_VBlankCB); + SetMainCallback2(ItemPc_MainCB); return TRUE; } return FALSE; } -void sub_810D6AC(void) +static void ItemPc_FadeAndBail(void) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - CreateTask(sub_810D6E8, 0); - SetVBlankCallback(sub_810D48C); - SetMainCallback2(sub_810D470); + CreateTask(Task_ItemPcWaitFadeAndBail, 0); + SetVBlankCallback(ItemPc_VBlankCB); + SetMainCallback2(ItemPc_MainCB); } -void sub_810D6E8(u8 taskId) +static void Task_ItemPcWaitFadeAndBail(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(gUnknown_203ADCC.field_0); - sub_810DC40(); + SetMainCallback2(sListMenuState.savedCallback); + ItemPc_FreeResources(); DestroyTask(taskId); } } -bool8 sub_810D71C(void) +static bool8 ItemPc_InitBgs(void) { InitBgReg(); - gUnknown_203ADC0 = Alloc(0x800); - if (gUnknown_203ADC0 == NULL) + sBg1TilemapBuffer = Alloc(0x800); + if (sBg1TilemapBuffer == NULL) return FALSE; - memset(gUnknown_203ADC0, 0, 0x800); + memset(sBg1TilemapBuffer, 0, 0x800); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_8453F6C, NELEMS(gUnknown_8453F6C)); - SetBgTilemapBuffer(1, gUnknown_203ADC0); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); + SetBgTilemapBuffer(1, sBg1TilemapBuffer); schedule_bg_copy_tilemap_to_vram(1); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BLDCNT , 0); @@ -431,70 +431,70 @@ bool8 sub_810D71C(void) return TRUE; } -bool8 sub_810D78C(void) +static bool8 ItemPc_LoadGraphics(void) { - switch (gUnknown_203ADBC->field_0C[0]) + switch (sStateDataPtr->data[0]) { case 0: reset_temp_tile_data_buffers(); - decompress_and_copy_tile_data_to_vram(1, gUnknown_8E85090, 0, 0, 0); - gUnknown_203ADBC->field_0C[0]++; + decompress_and_copy_tile_data_to_vram(1, gItemPcTiles, 0, 0, 0); + sStateDataPtr->data[0]++; break; case 1: if (free_temp_tile_data_buffers_if_possible() != TRUE) { - LZDecompressWram(gUnknown_8E85458, gUnknown_203ADC0); - gUnknown_203ADBC->field_0C[0]++; + LZDecompressWram(gItemPcTilemap, sBg1TilemapBuffer); + sStateDataPtr->data[0]++; } break; case 2: - LoadCompressedPalette(gUnknown_8E85408, 0x00, 0x60); - gUnknown_203ADBC->field_0C[0]++; + LoadCompressedPalette(gItemPcBgPals, 0x00, 0x60); + sStateDataPtr->data[0]++; break; case 3: - LoadCompressedObjectPic(&gUnknown_83D4240); - gUnknown_203ADBC->field_0C[0]++; + LoadCompressedObjectPic(&gBagSwapSpriteSheet); + sStateDataPtr->data[0]++; break; default: - LoadCompressedObjectPalette(&gUnknown_83D4248); - gUnknown_203ADBC->field_0C[0] = 0; + LoadCompressedObjectPalette(&gBagSwapSpritePalette); + sStateDataPtr->data[0] = 0; return TRUE; } return FALSE; } -#define sub_810D83C_sub(ptr__, size) ({ \ +#define try_alloc(ptr__, size) ({ \ void ** ptr = (void **)&(ptr__); \ *ptr = Alloc(size); \ if (*ptr == NULL) \ { \ - sub_810DC40(); \ - sub_810D6AC(); \ + ItemPc_FreeResources(); \ + ItemPc_FadeAndBail(); \ return FALSE; \ } \ }) -bool8 sub_810D83C(void) +static bool8 ItemPc_AllocateResourcesForListMenu(void) { - sub_810D83C_sub(gUnknown_203ADC4, sizeof(struct ListMenuItem) * (PC_ITEMS_COUNT + 1)); - sub_810D83C_sub(gUnknown_203ADC8, 0x1B2); + try_alloc(sListMenuItems, sizeof(struct ListMenuItem) * (PC_ITEMS_COUNT + 1)); + try_alloc(sUnusedStringAllocation, 14 * (PC_ITEMS_COUNT + 1)); return TRUE; } -void sub_810D878(void) +static void ItemPc_BuildListMenuTemplate(void) { u16 i; - for (i = 0; i < gUnknown_203ADBC->field_07; i++) + for (i = 0; i < sStateDataPtr->nItems; i++) { - gUnknown_203ADC4[i].label = ItemId_GetName(gSaveBlock1Ptr->pcItems[i].itemId); - gUnknown_203ADC4[i].index = i; + sListMenuItems[i].label = ItemId_GetName(gSaveBlock1Ptr->pcItems[i].itemId); + sListMenuItems[i].index = i; } - gUnknown_203ADC4[i].label = gFameCheckerText_Cancel; - gUnknown_203ADC4[i].index = -2; + sListMenuItems[i].label = gFameCheckerText_Cancel; + sListMenuItems[i].index = -2; - gMultiuseListMenuTemplate.items = gUnknown_203ADC4; - gMultiuseListMenuTemplate.totalItems = gUnknown_203ADBC->field_07 + 1; + gMultiuseListMenuTemplate.items = sListMenuItems; + gMultiuseListMenuTemplate.totalItems = sStateDataPtr->nItems + 1; gMultiuseListMenuTemplate.windowId = 0; gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.item_X = 9; @@ -502,31 +502,31 @@ void sub_810D878(void) gMultiuseListMenuTemplate.lettersSpacing = 1; gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.upText_Y = 2; - gMultiuseListMenuTemplate.maxShowed = gUnknown_203ADBC->field_06; + gMultiuseListMenuTemplate.maxShowed = sStateDataPtr->maxShowed; gMultiuseListMenuTemplate.fontId = 2; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorShadowPal = 3; - gMultiuseListMenuTemplate.moveCursorFunc = sub_810D954; - gMultiuseListMenuTemplate.itemPrintFunc = sub_810DA20; + gMultiuseListMenuTemplate.moveCursorFunc = ItemPc_MoveCursorFunc; + gMultiuseListMenuTemplate.itemPrintFunc = ItemPc_ItemPrintFunc; gMultiuseListMenuTemplate.scrollMultiple = 0; gMultiuseListMenuTemplate.cursorKind = 0; } -void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list) +static void ItemPc_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * list) { u16 itemId; const u8 * desc; if (onInit != TRUE) PlaySE(SE_SELECT); - if (gUnknown_203ADBC->field_04 == 0xFF) + if (sStateDataPtr->moveModeOrigPos == 0xFF) { - sub_8098940(gUnknown_203ADBC->field_05 ^ 1); + DestroyItemMenuIcon(sStateDataPtr->itemMenuIconSlot ^ 1); if (itemIndex != -2) { itemId = ItemPc_GetItemIdBySlotId(itemIndex); - sub_80988E8(itemId, gUnknown_203ADBC->field_05); + CreateItemMenuIcon(itemId, sStateDataPtr->itemMenuIconSlot); if (ItemId_GetPocket(itemId) == POCKET_TM_CASE) desc = gMoveNames[ItemIdToBattleMoveId(itemId)]; else @@ -534,39 +534,39 @@ void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list) } else { - sub_80988E8(ITEM_N_A, gUnknown_203ADBC->field_05); - desc = gUnknown_84178BE; + CreateItemMenuIcon(ITEM_N_A, sStateDataPtr->itemMenuIconSlot); + desc = gText_ReturnToPC; } - gUnknown_203ADBC->field_05 ^= 1; + sStateDataPtr->itemMenuIconSlot ^= 1; FillWindowPixelBuffer(1, 0); - sub_810EA34(1, 2, desc, 0, 3, 2, 0, 0, 3); + ItemPc_AddTextPrinterParameterized(1, 2, desc, 0, 3, 2, 0, 0, 3); } } -void sub_810DA20(u8 windowId, s32 itemId, u8 y) +static void ItemPc_ItemPrintFunc(u8 windowId, s32 itemId, u8 y) { - if (gUnknown_203ADBC->field_04 != 0xFF) + if (sStateDataPtr->moveModeOrigPos != 0xFF) { - if (gUnknown_203ADBC->field_04 == (u8)itemId) - sub_810DAD4(y, 2); + if (sStateDataPtr->moveModeOrigPos == (u8)itemId) + ItemPc_PrintOrRemoveCursorAt(y, 2); else - sub_810DAD4(y, 0xFF); + ItemPc_PrintOrRemoveCursorAt(y, 0xFF); } if (itemId != -2) { u16 quantity = ItemPc_GetItemQuantityBySlotId(itemId); ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810EA34(windowId, 0, gStringVar4, 110, y, 0, 0, 0xFF, 1); + ItemPc_AddTextPrinterParameterized(windowId, 0, gStringVar4, 110, y, 0, 0, 0xFF, 1); } } -void sub_810DAB4(u8 listMenuId, u8 colorIdx) +static void ItemPc_PrintOrRemoveCursor(u8 listMenuId, u8 colorIdx) { - sub_810DAD4(ListMenuGetYCoordForPrintingArrowCursor(listMenuId), colorIdx); + ItemPc_PrintOrRemoveCursorAt(ListMenuGetYCoordForPrintingArrowCursor(listMenuId), colorIdx); } -void sub_810DAD4(u8 y, u8 colorIdx) +static void ItemPc_PrintOrRemoveCursorAt(u8 y, u8 colorIdx) { if (colorIdx == 0xFF) { @@ -576,66 +576,66 @@ void sub_810DAD4(u8 y, u8 colorIdx) } else { - sub_810EA34(0, 2, gFameCheckerText_ListMenuCursor, 0, y, 0, 0, 0, colorIdx); + ItemPc_AddTextPrinterParameterized(0, 2, gFameCheckerText_ListMenuCursor, 0, y, 0, 0, 0, colorIdx); } } -void sub_810DB34(void) +static void ItemPc_PrintWithdrawItem(void) { - sub_810EA34(2, 0, gUnknown_84178A7, 0, 1, 0, 1, 0, 0); + ItemPc_AddTextPrinterParameterized(2, 0, gText_WithdrawItem, 0, 1, 0, 1, 0, 0); } -void sub_810DB5C(void) +static void ItemPc_PlaceTopMenuScrollIndicatorArrows(void) { - gUnknown_203ADBC->field_08 = AddScrollIndicatorArrowPairParameterized(2, 128, 8, 104, gUnknown_203ADBC->field_07 - gUnknown_203ADBC->field_06 + 1, 110, 110, &gUnknown_203ADCC.field_4); + sStateDataPtr->scrollIndicatorArrowPairId = AddScrollIndicatorArrowPairParameterized(2, 128, 8, 104, sStateDataPtr->nItems - sStateDataPtr->maxShowed + 1, 110, 110, &sListMenuState.scroll); } -void sub_810DB98(void) +static void ItemPc_PlaceWithdrawQuantityScrollIndicatorArrows(void) { - gUnknown_203ADBC->field_0A = 1; - gUnknown_203ADBC->field_08 = AddScrollIndicatorArrowPairParameterized(2, 212, 120, 152, 2, 110, 110, &gUnknown_203ADBC->field_0A); + sStateDataPtr->withdrawQuantitySubmenuCursorPos = 1; + sStateDataPtr->scrollIndicatorArrowPairId = AddScrollIndicatorArrowPairParameterized(2, 212, 120, 152, 2, 110, 110, &sStateDataPtr->withdrawQuantitySubmenuCursorPos); } -void sub_810DBD0(void) +static void ItemPc_RemoveScrollIndicatorArrowPair(void) { - if (gUnknown_203ADBC->field_08 != 0xFF) + if (sStateDataPtr->scrollIndicatorArrowPairId != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_203ADBC->field_08); - gUnknown_203ADBC->field_08 = 0xFF; + RemoveScrollIndicatorArrowPair(sStateDataPtr->scrollIndicatorArrowPairId); + sStateDataPtr->scrollIndicatorArrowPairId = 0xFF; } } -void sub_810DBF0(void) +static void ItemPc_SetCursorPosition(void) { - if (gUnknown_203ADCC.field_4 != 0 && gUnknown_203ADCC.field_4 + gUnknown_203ADBC->field_06 > gUnknown_203ADBC->field_07 + 1) - gUnknown_203ADCC.field_4 = (gUnknown_203ADBC->field_07 + 1) - gUnknown_203ADBC->field_06; - if (gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6 >= gUnknown_203ADBC->field_07 + 1) + if (sListMenuState.scroll != 0 && sListMenuState.scroll + sStateDataPtr->maxShowed > sStateDataPtr->nItems + 1) + sListMenuState.scroll = (sStateDataPtr->nItems + 1) - sStateDataPtr->maxShowed; + if (sListMenuState.scroll + sListMenuState.row >= sStateDataPtr->nItems + 1) { - if (gUnknown_203ADBC->field_07 + 1 < 2) - gUnknown_203ADCC.field_6 = 0; + if (sStateDataPtr->nItems + 1 < 2) + sListMenuState.row = 0; else - gUnknown_203ADCC.field_6 = gUnknown_203ADBC->field_07; + sListMenuState.row = sStateDataPtr->nItems; } } -#define sub_810DC40_sub(ptr) ({ \ +#define try_free(ptr) ({ \ void ** ptr__ = (void **)&(ptr); \ if (*ptr__ != NULL) \ Free(*ptr__); \ }) -void sub_810DC40(void) +static void ItemPc_FreeResources(void) { - sub_810DC40_sub(gUnknown_203ADBC); - sub_810DC40_sub(gUnknown_203ADC0); - sub_810DC40_sub(gUnknown_203ADC4); - sub_810DC40_sub(gUnknown_203ADC8); + try_free(sStateDataPtr); + try_free(sBg1TilemapBuffer); + try_free(sListMenuItems); + try_free(sUnusedStringAllocation); FreeAllWindowBuffers(); } -void sub_810DC8C(u8 taskId) +static void Task_ItemPcTurnOff1(u8 taskId) { - if (gUnknown_203ADCC.field_8 == 1) + if (sListMenuState.initialized == 1) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); } @@ -644,81 +644,81 @@ void sub_810DC8C(u8 taskId) sub_80A0A70(0, 0, 0); PlaySE(SE_PC_OFF); } - gTasks[taskId].func = sub_810DCE4; + gTasks[taskId].func = Task_ItemPcTurnOff2; } -void sub_810DCE4(u8 taskId) +static void Task_ItemPcTurnOff2(u8 taskId) { s16 * data = gTasks[taskId].data; if (!gPaletteFade.active && !sub_80A0AAC()) { - DestroyListMenu(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); - if (gUnknown_203ADBC->field_00 != NULL) - SetMainCallback2(gUnknown_203ADBC->field_00); + DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row); + if (sStateDataPtr->savedCallback != NULL) + SetMainCallback2(sStateDataPtr->savedCallback); else - SetMainCallback2(gUnknown_203ADCC.field_0); - sub_810DBD0(); - sub_810DC40(); + SetMainCallback2(sListMenuState.savedCallback); + ItemPc_RemoveScrollIndicatorArrowPair(); + ItemPc_FreeResources(); DestroyTask(taskId); } } -u8 sub_810DD54(void) +static u8 ItemPc_GetCursorPosition(void) { - return gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6; + return sListMenuState.scroll + sListMenuState.row; } -u16 ItemPc_GetItemIdBySlotId(u16 idx) +static u16 ItemPc_GetItemIdBySlotId(u16 idx) { return gSaveBlock1Ptr->pcItems[idx].itemId; } -u16 ItemPc_GetItemQuantityBySlotId(u16 idx) +static u16 ItemPc_GetItemQuantityBySlotId(u16 idx) { return GetBagItemId(&gSaveBlock1Ptr->pcItems[idx].quantity); } -void sub_810DDA4(void) +static void ItemPc_CountPcItems(void) { u16 i; - sub_809A4E8(); - gUnknown_203ADBC->field_07 = 0; - for (i = 0; i < PC_ITEMS_COUNT; gUnknown_203ADBC->field_07++, i++) + ItemPcCompaction(); + sStateDataPtr->nItems = 0; + for (i = 0; i < PC_ITEMS_COUNT; sStateDataPtr->nItems++, i++) { if (gSaveBlock1Ptr->pcItems[i].itemId == ITEM_NONE) break; } - gUnknown_203ADBC->field_06 = gUnknown_203ADBC->field_07 + 1 <= 6 ? gUnknown_203ADBC->field_07 + 1 : 6; + sStateDataPtr->maxShowed = sStateDataPtr->nItems + 1 <= 6 ? sStateDataPtr->nItems + 1 : 6; } -void sub_810DE08(void) +static void ItemPc_SetScrollPosition(void) { u8 i; - if (gUnknown_203ADCC.field_6 > 3) + if (sListMenuState.row > 3) { - for (i = 0; i <= gUnknown_203ADCC.field_6 - 3; gUnknown_203ADCC.field_6--, gUnknown_203ADCC.field_4++, i++) + for (i = 0; i <= sListMenuState.row - 3; sListMenuState.row--, sListMenuState.scroll++, i++) { - if (gUnknown_203ADCC.field_4 + gUnknown_203ADBC->field_06 == gUnknown_203ADBC->field_07 + 1) + if (sListMenuState.scroll + sStateDataPtr->maxShowed == sStateDataPtr->nItems + 1) break; } } } -void sub_810DE6C(int a0) +static void ItemPc_SetMessageWindowPalette(int a0) { - sub_80F6B08(1, 0, 14, 30, 6, a0 + 1); + SetBgRectPal(1, 0, 14, 30, 6, a0 + 1); schedule_bg_copy_tilemap_to_vram(1); } -void sub_810DE94(u8 a0) +void ItemPc_SetInitializedFlag(u8 a0) { - gUnknown_203ADCC.field_8 = a0; + sListMenuState.initialized = a0; } -void sub_810DEA0(u8 taskId) +static void Task_ItemPcMain(u8 taskId) { s16 * data = gTasks[taskId].data; u16 scroll; @@ -730,170 +730,170 @@ void sub_810DEA0(u8 taskId) if (JOY_NEW(SELECT_BUTTON)) { ListMenuGetScrollAndRow(data[0], &scroll, &row); - if (scroll + row != gUnknown_203ADBC->field_07) + if (scroll + row != sStateDataPtr->nItems) { PlaySE(SE_SELECT); - sub_810DFE0(taskId, scroll + row); + ItemPc_MoveItemModeInit(taskId, scroll + row); return; } } input = ListMenuHandleInput(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + ListMenuGetScrollAndRow(data[0], &sListMenuState.scroll, &sListMenuState.row); switch (input) { case -1: break; case -2: PlaySE(SE_SELECT); - sub_810DE94(0); - gTasks[taskId].func = sub_810DC8C; + ItemPc_SetInitializedFlag(0); + gTasks[taskId].func = Task_ItemPcTurnOff1; break; default: PlaySE(SE_SELECT); - sub_810DE6C(1); - sub_810DBD0(); + ItemPc_SetMessageWindowPalette(1); + ItemPc_RemoveScrollIndicatorArrowPair(); data[1] = input; data[2] = ItemPc_GetItemQuantityBySlotId(input); - sub_810DAB4(data[0], 2); - gTasks[taskId].func = sub_810E274; + ItemPc_PrintOrRemoveCursor(data[0], 2); + gTasks[taskId].func = Task_ItemPcSubmenuInit; break; } } } -void sub_810DFB0(u8 taskId) +static void ItemPc_ReturnFromSubmenu(u8 taskId) { - sub_810DE6C(0); - sub_810DB5C(); - gTasks[taskId].func = sub_810DEA0; + ItemPc_SetMessageWindowPalette(0); + ItemPc_PlaceTopMenuScrollIndicatorArrows(); + gTasks[taskId].func = Task_ItemPcMain; } -void sub_810DFE0(u8 taskId, s16 pos) +static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos) { s16 * data = gTasks[taskId].data; sub_8107BD0(data[0], 16, 1); data[1] = pos; - gUnknown_203ADBC->field_04 = pos; + sStateDataPtr->moveModeOrigPos = pos; StringCopy(gStringVar1, ItemId_GetName(ItemPc_GetItemIdBySlotId(data[1]))); - StringExpandPlaceholders(gStringVar4, gUnknown_841633F); + StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced); FillWindowPixelBuffer(1, 0x00); - sub_810EA34(1, 2, gStringVar4, 0, 3, 2, 3, 0, 0); + ItemPc_AddTextPrinterParameterized(1, 2, gStringVar4, 0, 3, 2, 3, 0, 0); sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); sub_8098660(0); - sub_810DAB4(data[0], 2); - gTasks[taskId].func = sub_810E0B4; + ItemPc_PrintOrRemoveCursor(data[0], 2); + gTasks[taskId].func = Task_ItemPcMoveItemModeRun; } -void sub_810E0B4(u8 taskId) +static void Task_ItemPcMoveItemModeRun(u8 taskId) { s16 * data = gTasks[taskId].data; ListMenuHandleInput(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + ListMenuGetScrollAndRow(data[0], &sListMenuState.scroll, &sListMenuState.row); sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) { PlaySE(SE_SELECT); - gUnknown_203ADBC->field_04 = 0xFF; - sub_810E160(taskId, gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6); + sStateDataPtr->moveModeOrigPos = 0xFF; + ItemPc_InsertItemIntoNewSlot(taskId, sListMenuState.scroll + sListMenuState.row); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - gUnknown_203ADBC->field_04 = 0xFF; - sub_810E200(taskId, gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6); + sStateDataPtr->moveModeOrigPos = 0xFF; + ItemPc_MoveItemModeCancel(taskId, sListMenuState.scroll + sListMenuState.row); } } -void sub_810E160(u8 taskId, u32 pos) +static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos) { s16 * data = gTasks[taskId].data; if (data[1] == pos || data[1] == pos - 1) - sub_810E200(taskId, pos); + ItemPc_MoveItemModeCancel(taskId, pos); else { - sub_8108D60(gSaveBlock1Ptr->pcItems, data[1], pos); - DestroyListMenu(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + ItemMenu_MoveItemSlotToNewPositionInArray(gSaveBlock1Ptr->pcItems, data[1], pos); + DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row); if (data[1] < pos) - gUnknown_203ADCC.field_6--; - sub_810D878(); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ADCC.field_4, gUnknown_203ADCC.field_6); + sListMenuState.row--; + ItemPc_BuildListMenuTemplate(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); sub_8098660(1); - gTasks[taskId].func = sub_810DEA0; + gTasks[taskId].func = Task_ItemPcMain; } } -void sub_810E200(u8 taskId, u32 pos) +static void ItemPc_MoveItemModeCancel(u8 taskId, u32 pos) { s16 * data = gTasks[taskId].data; - DestroyListMenu(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row); if (data[1] < pos) - gUnknown_203ADCC.field_6--; - sub_810D878(); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ADCC.field_4, gUnknown_203ADCC.field_6); + sListMenuState.row--; + ItemPc_BuildListMenuTemplate(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); sub_8098660(1); - gTasks[taskId].func = sub_810DEA0; + gTasks[taskId].func = Task_ItemPcMain; } -void sub_810E274(u8 taskId) +static void Task_ItemPcSubmenuInit(u8 taskId) { s16 * data = gTasks[taskId].data; u8 windowId; - sub_810EA9C(4); - windowId = sub_810EAB4(0); - PrintTextArray(4, 2, 8, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, gUnknown_8453F74); + ItemPc_SetBorderStyleOnWindow(4); + windowId = ItemPc_GetOrCreateSubwindow(0); + PrintTextArray(4, 2, 8, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, sItemPcSubmenuOptions); ProgramAndPlaceMenuCursorOnWindow(4, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, 0); CopyItemName(ItemPc_GetItemIdBySlotId(data[1]), gStringVar1); - StringExpandPlaceholders(gStringVar4, gUnknown_84162FF); - sub_810EA34(windowId, 2, gStringVar4, 0, 2, 1, 0, 0, 1); + StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1); + ItemPc_AddTextPrinterParameterized(windowId, 2, gStringVar4, 0, 2, 1, 0, 0, 1); schedule_bg_copy_tilemap_to_vram(0); - gTasks[taskId].func = sub_810E358; + gTasks[taskId].func = Task_ItemPcSubmenuRun; } -void sub_810E358(u8 taskId) +static void Task_ItemPcSubmenuRun(u8 taskId) { s8 input = ProcessMenuInputNoWrapAround(); switch (input) { case -1: PlaySE(SE_SELECT); - sub_810E8A0(taskId); + Task_ItemPcCancel(taskId); break; case -2: break; default: PlaySE(SE_SELECT); - gUnknown_8453F74[input].func.void_u8(taskId); + sItemPcSubmenuOptions[input].func.void_u8(taskId); } } -void sub_810E3A4(u8 taskId) +static void Task_ItemPcWithdraw(u8 taskId) { s16 * data = gTasks[taskId].data; - sub_810F4D8(4, FALSE); - sub_810EAF0(0); + ClearMenuWindow(4, FALSE); + ItemPc_DestroySubwindow(0); ClearWindowTilemap(4); data[8] = 1; if (ItemPc_GetItemQuantityBySlotId(data[1]) == 1) { PutWindowTilemap(0); schedule_bg_copy_tilemap_to_vram(0); - sub_810E418(taskId); + ItemPc_DoWithdraw(taskId); } else { PutWindowTilemap(0); - sub_810E5E0(data[1]); - sub_810DB98(); - gTasks[taskId].func = sub_810E6D8; + ItemPc_WithdrawMultipleInitWindow(data[1]); + ItemPc_PlaceWithdrawQuantityScrollIndicatorArrows(); + gTasks[taskId].func = Task_ItemPcHandleWithdrawMultiple; } } -void sub_810E418(u8 taskId) +static void ItemPc_DoWithdraw(u8 taskId) { s16 * data = gTasks[taskId].data; u16 itemId = ItemPc_GetItemIdBySlotId(data[1]); @@ -901,23 +901,23 @@ void sub_810E418(u8 taskId) if (AddBagItem(itemId, data[8]) == TRUE) { - sub_80A2294(29, 0, itemId, 0xFFFF); + ItemUse_SetQuestLogEvent(29, NULL, itemId, 0xFFFF); CopyItemName(itemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); - StringExpandPlaceholders(gStringVar4, gUnknown_84177C5); - windowId = sub_810EAB4(2); + StringExpandPlaceholders(gStringVar4, gText_WithdrewQuantItem); + windowId = ItemPc_GetOrCreateSubwindow(2); AddTextPrinterParameterized(windowId, 2, gStringVar4, 0, 2, 0, NULL); - gTasks[taskId].func = sub_810E4F4; + gTasks[taskId].func = Task_ItemPcWaitButtonAndFinishWithdrawMultiple; } else { - windowId = sub_810EAB4(2); - AddTextPrinterParameterized(windowId, 2, gUnknown_841778A, 0, 2, 0, NULL); - gTasks[taskId].func = sub_810E548; + windowId = ItemPc_GetOrCreateSubwindow(2); + AddTextPrinterParameterized(windowId, 2, gText_NoMoreRoomInBag, 0, 2, 0, NULL); + gTasks[taskId].func = Task_ItemPcWaitButtonWithdrawMultipleFailed; } } -void sub_810E4F4(u8 taskId) +static void Task_ItemPcWaitButtonAndFinishWithdrawMultiple(u8 taskId) { s16 * data = gTasks[taskId].data; u16 itemId; @@ -926,59 +926,59 @@ void sub_810E4F4(u8 taskId) { PlaySE(SE_SELECT); itemId = ItemPc_GetItemIdBySlotId(data[1]); - sub_809A460(itemId, data[8]); - sub_809A4E8(); - sub_810E578(taskId); + RemoveItemFromPC(itemId, data[8]); + ItemPcCompaction(); + Task_ItemPcCleanUpWithdraw(taskId); } } -void sub_810E548(u8 taskId) +static void Task_ItemPcWaitButtonWithdrawMultipleFailed(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810E578(taskId); + Task_ItemPcCleanUpWithdraw(taskId); } } -void sub_810E578(u8 taskId) +static void Task_ItemPcCleanUpWithdraw(u8 taskId) { s16 * data = gTasks[taskId].data; - sub_810EAF0(2); + ItemPc_DestroySubwindow(2); PutWindowTilemap(1); - DestroyListMenu(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); - sub_810DDA4(); - sub_810DBF0(); - sub_810D878(); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ADCC.field_4, gUnknown_203ADCC.field_6); + DestroyListMenu(data[0], &sListMenuState.scroll, &sListMenuState.row); + ItemPc_CountPcItems(); + ItemPc_SetCursorPosition(); + ItemPc_BuildListMenuTemplate(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); schedule_bg_copy_tilemap_to_vram(0); - sub_810DFB0(taskId); + ItemPc_ReturnFromSubmenu(taskId); } -void sub_810E5E0(u16 slotId) +static void ItemPc_WithdrawMultipleInitWindow(u16 slotId) { u16 itemId = ItemPc_GetItemIdBySlotId(slotId); CopyItemName(itemId, gStringVar1); - StringExpandPlaceholders(gStringVar4, gUnknown_84177AC); - AddTextPrinterParameterized(sub_810EAB4(1), 2, gStringVar4, 0, 2, 0, NULL); + StringExpandPlaceholders(gStringVar4, gText_WithdrawHowMany); + AddTextPrinterParameterized(ItemPc_GetOrCreateSubwindow(1), 2, gStringVar4, 0, 2, 0, NULL); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810EA9C(3); - sub_810EA34(3, 0, gStringVar4, 8, 10, 1, 0, 0, 1); + ItemPc_SetBorderStyleOnWindow(3); + ItemPc_AddTextPrinterParameterized(3, 0, gStringVar4, 8, 10, 1, 0, 0, 1); schedule_bg_copy_tilemap_to_vram(0); } -void sub_810E670(s16 quantity) +static void sub_810E670(s16 quantity) { FillWindowPixelRect(3, 0x11, 10, 10, 28, 12); ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810EA34(3, 0, gStringVar4, 8, 10, 1, 0, 0, 1); + ItemPc_AddTextPrinterParameterized(3, 0, gStringVar4, 8, 10, 1, 0, 0, 1); } -void sub_810E6D8(u8 taskId) +static void Task_ItemPcHandleWithdrawMultiple(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -987,96 +987,96 @@ void sub_810E6D8(u8 taskId) else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_810EAF0(1); + ItemPc_DestroySubwindow(1); ClearWindowTilemap(3); PutWindowTilemap(0); - sub_810DAB4(data[0], 1); + ItemPc_PrintOrRemoveCursor(data[0], 1); schedule_bg_copy_tilemap_to_vram(0); - sub_810DBD0(); - sub_810E418(taskId); + ItemPc_RemoveScrollIndicatorArrowPair(); + ItemPc_DoWithdraw(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810F4D8(3, FALSE); - sub_810EAF0(1); + ClearMenuWindow(3, FALSE); + ItemPc_DestroySubwindow(1); ClearWindowTilemap(3); PutWindowTilemap(0); PutWindowTilemap(1); - sub_810DAB4(data[0], 1); + ItemPc_PrintOrRemoveCursor(data[0], 1); schedule_bg_copy_tilemap_to_vram(0); - sub_810DBD0(); - sub_810DFB0(taskId); + ItemPc_RemoveScrollIndicatorArrowPair(); + ItemPc_ReturnFromSubmenu(taskId); } } -void sub_810E79C(u8 taskId) +static void Task_ItemPcGive(u8 taskId) { if (CalculatePlayerPartyCount() == 0) { - sub_810F4D8(4, FALSE); - sub_810EAF0(0); + ClearMenuWindow(4, FALSE); + ItemPc_DestroySubwindow(0); ClearWindowTilemap(4); PutWindowTilemap(0); - sub_810EB30(taskId, gText_ThereIsNoPokemon, sub_810E848); + ItemPc_PrintOnWindow5WithContinueTask(taskId, gText_ThereIsNoPokemon, gTask_ItemPcWaitButtonAndExitSubmenu); } else { - gUnknown_203ADBC->field_00 = sub_810E7F8; - sub_810DC8C(taskId); + sStateDataPtr->savedCallback = ItemPc_CB2_SwitchToPartyMenu; + Task_ItemPcTurnOff1(taskId); } } -void sub_810E7F8(void) +static void ItemPc_CB2_SwitchToPartyMenu(void) { - sub_811EA44(0, 0, 6, 0, 6, sub_811FB28, sub_810E838); - gUnknown_203B0A0.unkC = ItemPc_GetItemIdBySlotId(sub_810DD54()); + PartyMenuInit(0, 0, 6, 0, 6, sub_811FB28, ItemPc_CB2_ReturnFromPartyMenu); + gUnknown_203B0A0.unkC = ItemPc_GetItemIdBySlotId(ItemPc_GetCursorPosition()); } -void sub_810E838(void) +static void ItemPc_CB2_ReturnFromPartyMenu(void) { - sub_810D3F4(1, NULL); + ItemPc_Init(1, NULL); } -void sub_810E848(u8 taskId) +static void gTask_ItemPcWaitButtonAndExitSubmenu(u8 taskId) { s16 * data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_810F260(5, 0); + ClearMenuWindow_BorderThickness2(5, 0); ClearWindowTilemap(5); PutWindowTilemap(1); - sub_810DAB4(data[0], 1); + ItemPc_PrintOrRemoveCursor(data[0], 1); schedule_bg_copy_tilemap_to_vram(0); - sub_810DFB0(taskId); + ItemPc_ReturnFromSubmenu(taskId); } } -void sub_810E8A0(u8 taskId) +static void Task_ItemPcCancel(u8 taskId) { s16 * data = gTasks[taskId].data; - sub_810F4D8(4, FALSE); - sub_810EAF0(0); + ClearMenuWindow(4, FALSE); + ItemPc_DestroySubwindow(0); ClearWindowTilemap(4); PutWindowTilemap(0); PutWindowTilemap(1); - sub_810DAB4(data[0], 1); + ItemPc_PrintOrRemoveCursor(data[0], 1); schedule_bg_copy_tilemap_to_vram(0); - sub_810DFB0(taskId); + ItemPc_ReturnFromSubmenu(taskId); } -void sub_810E8F0(void) +static void ItemPc_InitWindows(void) { u8 i; InitWindows(gUnknown_8453F98); DeactivateAllTextPrinters(); - sub_815001C(0, 0x3C0, 0xE0); - sub_814FF2C(0, 0x3A3, 0xC0); - sub_814FEAC(0, 0x3AC, 0xB0); + TextWindow_SetUserSelectedFrame(0, 0x3C0, 0xE0); + TextWindow_SetStdFrame0_WithPal(0, 0x3A3, 0xC0); + TextWindow_SetBubbleFrame_841F1C8(0, 0x3AC, 0xB0); LoadPalette(stdpal_get(2), 0xD0, 0x20); LoadPalette(gTMCaseMainWindowPalette, 0xF0, 0x20); for (i = 0; i < 3; i++) @@ -1086,10 +1086,10 @@ void sub_810E8F0(void) } schedule_bg_copy_tilemap_to_vram(0); for (i = 0; i < 3; i++) - gUnknown_203ADD8[i] = 0xFF; + sSubmenuWindowIds[i] = 0xFF; } -void sub_810E984(u8 windowId, const u8 * string, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed) +static void unused_ItemPc_AddTextPrinterParameterized(u8 windowId, const u8 * string, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed) { struct TextPrinterTemplate template; @@ -1109,41 +1109,41 @@ void sub_810E984(u8 windowId, const u8 * string, u8 x, u8 y, u8 letterSpacing, u AddTextPrinter(&template, speed, NULL); } -void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) +static void ItemPc_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) { AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, &gUnknown_8453F8C[colorIdx], speed, str); } -void sub_810EA9C(u8 windowId) +static void ItemPc_SetBorderStyleOnWindow(u8 windowId) { SetWindowBorderStyle(windowId, FALSE, 0x3C0, 0x0E); } -u8 sub_810EAB4(u8 idx) +static u8 ItemPc_GetOrCreateSubwindow(u8 idx) { - if (gUnknown_203ADD8[idx] == 0xFF) + if (sSubmenuWindowIds[idx] == 0xFF) { - gUnknown_203ADD8[idx] = AddWindow(&gUnknown_8453FD0[idx]); - SetWindowBorderStyle(gUnknown_203ADD8[idx], TRUE, 0x3A3, 0x0C); + sSubmenuWindowIds[idx] = AddWindow(&gUnknown_8453FD0[idx]); + SetWindowBorderStyle(sSubmenuWindowIds[idx], TRUE, 0x3A3, 0x0C); } - return gUnknown_203ADD8[idx]; + return sSubmenuWindowIds[idx]; } -void sub_810EAF0(u8 idx) +static void ItemPc_DestroySubwindow(u8 idx) { - sub_810F4D8(gUnknown_203ADD8[idx], 0); - ClearWindowTilemap(gUnknown_203ADD8[idx]); - RemoveWindow(gUnknown_203ADD8[idx]); - gUnknown_203ADD8[idx] = 0xFF; + ClearMenuWindow(sSubmenuWindowIds[idx], FALSE); + ClearWindowTilemap(sSubmenuWindowIds[idx]); // redundant + RemoveWindow(sSubmenuWindowIds[idx]); + sSubmenuWindowIds[idx] = 0xFF; } -u8 sub_810EB20(u8 idx) +static u8 ItemPc_GetSubwindow(u8 idx) { - return gUnknown_203ADD8[idx]; + return sSubmenuWindowIds[idx]; } -void sub_810EB30(u8 taskId, const u8 * str, TaskFunc taskFunc) +static void ItemPc_PrintOnWindow5WithContinueTask(u8 taskId, const u8 * str, TaskFunc taskFunc) { DisplayMessageAndContinueTask(taskId, 5, 0x3AC, 0x0B, 2, GetTextSpeedSetting(), str, taskFunc); schedule_bg_copy_tilemap_to_vram(0); -- cgit v1.2.3 From 649a351c4c11bf054ad67885e6f24e80fa690305 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 19 Jun 2019 21:41:43 -0400 Subject: item: through sub_809A584 --- src/item_pc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/item_pc.c') diff --git a/src/item_pc.c b/src/item_pc.c index 3e139503e..e2fa33f0a 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -676,7 +676,7 @@ static u16 ItemPc_GetItemIdBySlotId(u16 idx) static u16 ItemPc_GetItemQuantityBySlotId(u16 idx) { - return GetBagItemId(&gSaveBlock1Ptr->pcItems[idx].quantity); + return GetPcItemQuantity(&gSaveBlock1Ptr->pcItems[idx].quantity); } static void ItemPc_CountPcItems(void) -- cgit v1.2.3