diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/item_menu.c | 335 |
1 files changed, 322 insertions, 13 deletions
diff --git a/src/item_menu.c b/src/item_menu.c index 31da81e03..eebf5ab13 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "berry_tag_screen.h" #include "data2.h" #include "decompress.h" #include "field_effect.h" @@ -14,7 +15,9 @@ #include "menu_helpers.h" #include "palette.h" #include "party_menu.h" +#include "pokemon_menu.h" #include "rom4.h" +#include "script.h" #include "songs.h" #include "sound.h" #include "sprite.h" @@ -42,9 +45,11 @@ extern u8 gUnknown_0203855A; extern u8 gUnknown_0203855B; extern u8 gUnknown_0203855C; extern u8 gUnknown_02038560; +extern u8 gUnknown_02038561; extern u8 gUnknown_02038562; extern u8 gUnknown_02038563; extern u8 gUnknown_02038564; +extern void (*gUnknown_03005D00)(u8); extern u8 gUnknown_03000700; extern u8 gUnknown_03000701; extern const u8 *gUnknown_03000704; @@ -61,6 +66,11 @@ extern u8 sub_80F9284(void); extern void sub_808B5B4(); extern u8 sub_80F92F4(); extern void sub_80C9C7C(u8); +extern void pal_fill_black(void); +extern bool8 sub_807D770(void); +extern u8 sub_80F931C(); +extern void sub_808A3F8(u8); +extern void sub_80B3050(void); extern const struct CompressedSpriteSheet gUnknown_083C1CC8; extern const struct CompressedSpriteSheet gUnknown_083C1CD0; @@ -122,6 +132,8 @@ const u8 gUnknown_083C16AE[][2] = extern const TaskFunc gUnknown_083C16BC[][2]; +extern const struct YesNoFuncTable gUnknown_083C16F4; + void sub_80A34E8(void); bool8 sub_80A3520(void); void sub_80A362C(void); @@ -142,7 +154,9 @@ void sub_80A4F68(u8); void sub_80A50C8(u8); void sub_80A5AE4(u8); void sub_80A5BF8(u8); +void Task_CallItemUseOnFieldCallback(u8); void HandleItemMenuPaletteFade(u8); +void sub_8064E2C(void); void ItemListMenu_InitMenu(void); void sub_80A73C0(void); void sub_80A73F0(void); @@ -155,6 +169,7 @@ void sub_80A7630(void); void sub_80A763C(void); void sub_80A76A0(void); void sub_80A770C(void); +void DisplayCannotUseItemMessage(); void sub_80A7828(void); void sub_80A7834(); int sub_80A78A0(); @@ -874,7 +889,7 @@ void sub_80A418C(u16 a, enum StringConvertMode b, u8 c, u8 d, u8 e) MenuPrint(gStringVar1, c, d); } -void sub_80A41D4(void) +void sub_80A41D4(u8 taskId) { sub_80A763C(); } @@ -1711,7 +1726,7 @@ void sub_80A50C8(u8 taskId) bool8 sub_80A52C4(u8 taskId, u16 b) { s16 *taskData = gTasks[taskId].data; - + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) { if (taskData[1] != b) @@ -1720,7 +1735,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) taskData[1] = 1; return TRUE; } - + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) { if (taskData[1] != 1) @@ -1729,7 +1744,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) taskData[1] = b; return TRUE; } - + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x10) { if (taskData[1] + 10 < b) @@ -1738,7 +1753,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) taskData[1] = b; return TRUE; } - + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x20) { if (taskData[1] > 10) @@ -1747,14 +1762,14 @@ bool8 sub_80A52C4(u8 taskId, u16 b) taskData[1] = 1; return TRUE; } - + return FALSE; } bool8 sub_80A5350(u8 taskId) { s16 *taskData = gTasks[taskId].data; - + if (sub_80A52C4(taskId, gUnknown_03005D24[gUnknown_02038560].quantity) == TRUE) { if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) @@ -1785,7 +1800,7 @@ void sub_80A53F8(void) void sub_80A5414(u8 taskId) { TaskFunc r5 = NULL; - + if (sub_80A78A0() != 0) { if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) @@ -2326,7 +2341,7 @@ _080A57BE:\n\ void sub_80A57C4(void) { u8 r5; - + gUnknown_03000704 = gUnknown_083C16AE[gUnknown_02038559]; if (gUnknown_02038559 == 4) { @@ -2432,11 +2447,11 @@ void sub_80A5AE4(u8 taskId) void HandleItemMenuPaletteFade(u8 taskId) { s16 *taskData = gTasks[taskId].data; - + if (!gPaletteFade.active) { MainCallback cb = (MainCallback)((u16)taskData[8] << 16 | (u16)taskData[9]); - + SetMainCallback2(cb); gpu_pal_allocator_reset__manage_upper_four(); DestroyTask(taskId); @@ -2478,11 +2493,305 @@ void sub_80A5B78(u8 taskId) } } -/* void sub_80A5BF8(u8 taskId) { sub_80A73FC(); sub_80A7590(); DisplayCannotUseItemMessage(taskId, gOtherText_NoPokemon, CleanUpItemMenuMessage, 1); } -*/
\ No newline at end of file + +void sub_80A5C24(u8 taskId) +{ + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void CleanUpItemMenuMessage(u8 taskId) +{ + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + MenuZeroFillWindowRect(7, 7, 13, 12); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A5C24; +} + +void CleanUpOverworldMessage(u8 taskId) +{ + MenuZeroFillWindowRect(0, 13, 29, 19); + DestroyTask(taskId); + sub_8064E2C(); + ScriptContext2_Disable(); +} + +void ExecuteItemUseFromBlackPalette(void) +{ + pal_fill_black(); + CreateTask(Task_CallItemUseOnFieldCallback, 8); +} + +void Task_CallItemUseOnFieldCallback(u8 taskId) +{ + if (sub_807D770() == TRUE) + gUnknown_03005D00(taskId); +} + +void sub_80A5D04(void) +{ + while (1) + { + if (sub_80A317C() == TRUE) + { + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_80A5D38(u8 taskId) +{ + gTasks[taskId].data[1] = 0; + sub_80A4DA4(gBGTilemapBuffers[1]); + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A5D78(void) +{ + sub_80A4008(gBGTilemapBuffers[1], 8, 8, 5, 4); + DisplayYesNoMenu(7, 7, 1); +} + +void sub_80A5DA0(u16 itemId, u16 quantity) +{ + CopyItemName(itemId, gStringVar1); + if (quantity >= 100) + ConvertIntToDecimalStringN(gStringVar2, quantity, 0, 3); + else + ConvertIntToDecimalStringN(gStringVar2, quantity, 0, 2); + sub_80A4DA4(gBGTilemapBuffers[1]); + sub_80A7528(5); + sub_80A5D78(); +} + +void sub_80A5DF8(void) +{ + sub_80A4DA4(gBGTilemapBuffers[1]); + MenuZeroFillWindowRect(7, 6, 11, 13); + sub_80A7528(4); +} + +void sub_80A5E1C(u8 taskId) +{ + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + gTasks[taskId].data[10] = 0; + sub_80A41D4(taskId); + sub_80A5D38(taskId); + } +} + +void sub_80A5E60(u8 taskId) +{ + sub_80A5DF8(); + sub_80A3D5C(taskId); + gTasks[taskId].func = sub_80A5E1C; +} + +void sub_80A5E90(u8 taskId) +{ + sub_80A5D38(taskId); +} + +void sub_80A5EA0(u8 taskId) +{ + if (sub_80A5350(taskId) == TRUE) + return; + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_80A5DA0(gScriptItemId, gTasks[taskId].data[1]); + DoYesNoFuncWithChoice(taskId, &gUnknown_083C16F4); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_80A5D38(taskId); + } +} + +void sub_80A5F14(u8 taskId) +{ + PlaySE(SE_SELECT); + gTasks[taskId].func = sub_80A5EA0; + sub_80A7528(3); + if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) + sub_80A4DD8(taskId, 6, 9, 7, 3, 3); + else + sub_80A4DD8(taskId, 7, 9, 6, 3, 2); +} + +void sub_80A5F80(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A5FAC(u8 taskId) +{ + PlaySE(SE_SELECT); + if (gSaveBlock1.registeredItem == gScriptItemId) + { + sub_80A40D0(); + gSaveBlock1.registeredItem = 0; + } + else + { + sub_80A413C(); + gSaveBlock1.registeredItem = gScriptItemId; + } + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A6000(u8 taskId) +{ + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A6024(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A6000; + } +} + +void DisplayCannotBeHeldMessage(u8 taskId) +{ + sub_80A73FC(); + CopyItemName(gScriptItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeld); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); +} + +void ItemMenu_Give(u8 taskId) +{ + PlaySE(SE_SELECT); + if (sub_80F931C(gScriptItemId) == 0) + { + sub_80A73FC(); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); + } + else if (ItemId_GetImportance(gScriptItemId) == 0) + { + if (CalculatePlayerPartyCount() == 0) + { + sub_80A5BF8(taskId); + } + else + { + gTasks[taskId].data[8] = (u32)sub_808B020 >> 16; + gTasks[taskId].data[9] = (u32)sub_808B020; + gTasks[taskId].func = HandleItemMenuPaletteFade; + gUnknown_02038561 = 1; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + } + } + else + { + DisplayCannotBeHeldMessage(taskId); + } +} + +void sub_80A6178(u8 taskId) +{ + sub_80A5AE4(taskId); + gTasks[taskId].data[8] = (u32)BerryTagScreen_814625C >> 16; + gTasks[taskId].data[9] = (u32)BerryTagScreen_814625C; +} + +void sub_80A61A8(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A61D0(void) +{ + gUnknown_03000701 = 2; + SetMainCallback2(sub_80A61A8); +} + +void sub_80A61EC(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; + gTasks[taskId].data[9] = (u32)sub_808A3F8; + sub_80A5AE4(taskId); +} + +void sub_80A6214(u8 taskId) +{ + u8 r6 = gUnknown_02038559 + 1; + + if (sub_80F931C(gScriptItemId) == 0) + { + sub_80A73FC(); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); + } + else if (sub_80F92F4(gScriptItemId) == 0) + { + sub_80A73FC(); + CopyItemName(gScriptItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeldHere); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); + } + else if (r6 != 5 && ItemId_GetImportance(gScriptItemId) == 0) + { + gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; + gTasks[taskId].data[9] = (u32)sub_808A3F8; + sub_80A5AAC(taskId); + } + else + { + DisplayCannotBeHeldMessage(taskId); + } +} + +void sub_80A62D8(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A6300(void) +{ + gUnknown_03000701 = 3; + SetMainCallback2(sub_80A62D8); +} + +void sub_80A631C(u8 taskId) +{ + gFieldCallback = sub_80B3050; + gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; + gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; + sub_80A5AE4(taskId); +} |