From 8bbd22ef3ead2a18fe36fd161a0473992120b7ba Mon Sep 17 00:00:00 2001 From: CharlesFolz4 Date: Sun, 22 Jun 2025 16:59:52 -0400 Subject: [PATCH] Document box user input handling (#533) Co-authored-by: narf0708@gmail.com --- include/constants/heap.h | 4 +- include/enums.h | 65 - include/overlay019/box_menu.h | 18 + include/overlay019/ov19_021D0D80.h | 12 +- include/overlay019/ov19_021D61B0.h | 67 +- include/overlay019/ov19_021D79F8.h | 2 +- include/overlay019/ov19_021D8B54.h | 2 +- include/overlay019/ov19_021DA270.h | 2 +- include/overlay019/ov19_021DB2FC.h | 8 +- include/overlay019/ov19_021DF964.h | 20 - include/overlay019/struct_box_menu.h | 91 + include/overlay019/struct_ov19_021D4DF0.h | 7 +- include/overlay019/struct_ov19_021D4EE4.h | 2 +- include/overlay019/struct_ov19_021D5D20.h | 8 - include/overlay019/struct_ov19_021DF964.h | 14 - include/struct_defs/struct_02042434.h | 2 +- include/struct_defs/struct_0208737C.h | 2 +- platinum.us/main.lsf | 2 +- src/battle/battle_script.c | 2 +- src/meson.build | 2 +- src/overlay019/box_menu.c | 299 +++ src/overlay019/ov19_021D0D80.c | 2709 +++++++++++---------- src/overlay019/ov19_021D61B0.c | 878 ++++--- src/overlay019/ov19_021D79F8.c | 80 +- src/overlay019/ov19_021D8B54.c | 16 +- src/overlay019/ov19_021DA270.c | 16 +- src/overlay019/ov19_021DA814.c | 4 +- src/overlay019/ov19_021DA92C.c | 18 +- src/overlay019/ov19_021DB2FC.c | 68 +- src/overlay019/ov19_021DB8E4.c | 36 +- src/overlay019/ov19_021DC5F0.c | 22 +- src/overlay019/ov19_021DCF88.c | 30 +- src/overlay019/ov19_021DE3E8.c | 20 +- src/overlay019/ov19_021DEC04.c | 85 +- src/overlay019/ov19_021DF964.c | 300 --- src/overlay064/ov64_0222DCE0.c | 8 +- src/overlay073/ov73_021D0D80.c | 14 +- src/scrcmd.c | 2 +- src/unk_0203D1B8.c | 10 +- src/unk_0208694C.c | 20 +- src/unk_02098218.c | 2 +- 41 files changed, 2631 insertions(+), 2338 deletions(-) create mode 100644 include/overlay019/box_menu.h delete mode 100644 include/overlay019/ov19_021DF964.h create mode 100644 include/overlay019/struct_box_menu.h delete mode 100644 include/overlay019/struct_ov19_021D5D20.h delete mode 100644 include/overlay019/struct_ov19_021DF964.h create mode 100644 src/overlay019/box_menu.c delete mode 100644 src/overlay019/ov19_021DF964.c diff --git a/include/constants/heap.h b/include/constants/heap.h index d936aa5176..8d9f4fdf7d 100644 --- a/include/constants/heap.h +++ b/include/constants/heap.h @@ -11,8 +11,8 @@ enum HeapId { HEAP_ID_6, HEAP_ID_POKETCH_MAIN, HEAP_ID_POKETCH_APP, - HEAP_ID_9, - HEAP_ID_10, + HEAP_ID_BOX_DATA, + HEAP_ID_BOX_GRAPHICS, HEAP_ID_FIELDMAP, HEAP_ID_12, HEAP_ID_13, diff --git a/include/enums.h b/include/enums.h index 98d7a2c24a..057e273239 100644 --- a/include/enums.h +++ b/include/enums.h @@ -43,71 +43,6 @@ typedef enum { UnkEnum_0202F510_38 = 0xff, } UnkEnum_0202F510; -typedef enum { - UnkEnum_021DFB94_00, - UnkEnum_021DFB94_01, - UnkEnum_021DFB94_02, - UnkEnum_021DFB94_03, - UnkEnum_021DFB94_04, - UnkEnum_021DFB94_05, - UnkEnum_021DFB94_06, - UnkEnum_021DFB94_07, - UnkEnum_021DFB94_08, - UnkEnum_021DFB94_09, - UnkEnum_021DFB94_10, - UnkEnum_021DFB94_11, - UnkEnum_021DFB94_12, - UnkEnum_021DFB94_13, - UnkEnum_021DFB94_14, - UnkEnum_021DFB94_15, - UnkEnum_021DFB94_16, - UnkEnum_021DFB94_17, - UnkEnum_021DFB94_18, - UnkEnum_021DFB94_19, - UnkEnum_021DFB94_20, - UnkEnum_021DFB94_21, - UnkEnum_021DFB94_22, - UnkEnum_021DFB94_23, - UnkEnum_021DFB94_24, - UnkEnum_021DFB94_25, - UnkEnum_021DFB94_26, - UnkEnum_021DFB94_27, - UnkEnum_021DFB94_28, - UnkEnum_021DFB94_29, - UnkEnum_021DFB94_30, - UnkEnum_021DFB94_31, - UnkEnum_021DFB94_32, - UnkEnum_021DFB94_33, - UnkEnum_021DFB94_34, - UnkEnum_021DFB94_35, - UnkEnum_021DFB94_36, - UnkEnum_021DFB94_37, - UnkEnum_021DFB94_38, - UnkEnum_021DFB94_39, - UnkEnum_021DFB94_40, - UnkEnum_021DFB94_41, - UnkEnum_021DFB94_42, - UnkEnum_021DFB94_43, - UnkEnum_021DFB94_44, - UnkEnum_021DFB94_45, - UnkEnum_021DFB94_46, - UnkEnum_021DFB94_47, - UnkEnum_021DFB94_48, - UnkEnum_021DFB94_49, - UnkEnum_021DFB94_50, - UnkEnum_021DFB94_51, - UnkEnum_021DFB94_52, - UnkEnum_021DFB94_53, - UnkEnum_021DFB94_54, - UnkEnum_021DFB94_55, - UnkEnum_021DFB94_56, - UnkEnum_021DFB94_57, - UnkEnum_021DFB94_58, - UnkEnum_021DFB94_59, - UnkEnum_021DFB94_60, - UnkEnum_021DFB94_61, -} UnkEnum_021DFB94; - typedef enum { UnkEnum_ov87_021D12C0_0, UnkEnum_ov87_021D12C0_1, diff --git a/include/overlay019/box_menu.h b/include/overlay019/box_menu.h new file mode 100644 index 0000000000..ad7871c76f --- /dev/null +++ b/include/overlay019/box_menu.h @@ -0,0 +1,18 @@ +#ifndef POKEPLATINUM_BOX_MENU_H +#define POKEPLATINUM_BOX_MENU_H + +#include "overlay019/struct_ov19_021D4DF0.h" + +void BoxMenu_FillYesNo(UnkStruct_ov19_021D4DF0 *param0, u32 menuItemIndex); +void BoxMenu_FillTopLevelMenuItems(UnkStruct_ov19_021D4DF0 *param0); +void BoxMenu_FillItemsMenu(UnkStruct_ov19_021D4DF0 *param0); +void BoxMenu_FillHeaderMenu(UnkStruct_ov19_021D4DF0 *param0); +void BoxMenu_FillWallpaperMenu(UnkStruct_ov19_021D4DF0 *param0, enum BoxMenuItem menuItem); +void BoxMenu_FillWallpaperSelectionMenu(UnkStruct_ov19_021D4DF0 *param0, enum BoxMenuItem menuItem); +void BoxMenu_FillMarkingsMenu(UnkStruct_ov19_021D4DF0 *param0); +void BoxMenu_ToggleMarking(UnkStruct_ov19_021D4DF0 *param0, u32 marking); +enum BoxMenuItem BoxMenu_GetMenuNavigation(UnkStruct_ov19_021D4DF0 *param0); +enum BoxMenuItem BoxMenu_GetSelectedMenuItem(UnkStruct_ov19_021D4DF0 *param0); +enum BoxMenuItem BoxMenu_GetDefaultMenuItem(UnkStruct_ov19_021D4DF0 *param0); + +#endif // POKEPLATINUM_BOX_MENU_H diff --git a/include/overlay019/ov19_021D0D80.h b/include/overlay019/ov19_021D0D80.h index f3e9d6f1f9..89c15f5c2b 100644 --- a/include/overlay019/ov19_021D0D80.h +++ b/include/overlay019/ov19_021D0D80.h @@ -50,10 +50,10 @@ enum CursorMovementState { int ov19_021D0D80(ApplicationManager *appMan, int *param1); int ov19_021D0DEC(ApplicationManager *appMan, int *param1); int ov19_021D0E58(ApplicationManager *appMan, int *param1); -BOOL ov19_021D3B18(const UnkStruct_ov19_021D5DF8 *param0); -BOOL ov19_021D3B20(const UnkStruct_ov19_021D5DF8 *param0); +BOOL ov19_HasCheckedCanReleaseMon(const UnkStruct_ov19_021D5DF8 *param0); +BOOL ov19_CanReleaseMon(const UnkStruct_ov19_021D5DF8 *param0); MessageLoader *ov19_GetBoxMessagesLoader(const UnkStruct_ov19_021D5DF8 *param0); -const StringTemplate *ov19_021D5DF0(const UnkStruct_ov19_021D5DF8 *param0); +const StringTemplate *ov19_GetMessageVariableBuffer(const UnkStruct_ov19_021D5DF8 *param0); int ov19_GetOptionsFrame(const UnkStruct_ov19_021D5DF8 *param0); enum BoxMode ov19_GetBoxMode(const UnkStruct_ov19_021D4DF0 *param0); enum CursorLocation ov19_GetCursorLocation(const UnkStruct_ov19_021D4DF0 *param0); @@ -73,19 +73,19 @@ const PCBoxes *ov19_GetPCBoxes(const UnkStruct_ov19_021D4DF0 *param0); u32 ov19_GetBoxMessageID(const UnkStruct_ov19_021D4DF0 *param0); BoxPokemon *ov19_GetPreviewedBoxMon(const UnkStruct_ov19_021D4DF0 *param0); u32 ov19_GetPreviewedMonMarkings(const UnkStruct_ov19_021D4DF0 *param0); -u32 ov19_021D5EA8(const UnkStruct_ov19_021D4DF0 *param0); +u32 ov19_GetBoxSelectionBoxID(const UnkStruct_ov19_021D4DF0 *param0); s32 ov19_021D5EB0(const UnkStruct_ov19_021D4DF0 *param0); u32 ov19_021D5EB8(const UnkStruct_ov19_021D4DF0 *param0); u32 ov19_GetMarkingsButtonsScrollOffset(const UnkStruct_ov19_021D4DF0 *param0); u32 ov19_GetMonSpriteTransparencyMask(const UnkStruct_ov19_021D4DF0 *param0); BOOL ov19_IsCursorFastMode(const UnkStruct_ov19_021D4DF0 *param0); -void ov19_GetMultiSelectBoundingBox(const UnkStruct_ov19_021D4DF0 *param0, u32 *leftCol, u32 *rightCol, u32 *topCol, u32 *bottomCol); +void ov19_GetMultiSelectBoundingBox(const UnkStruct_ov19_021D4DF0 *param0, u32 *leftCol, u32 *rightCol, u32 *topRow, u32 *bottomRow); BOOL ov19_IsMultiSelectSingleSelect(const UnkStruct_ov19_021D4DF0 *param0); u32 ov19_GetMultiSelectTopLeftPos(const UnkStruct_ov19_021D4DF0 *param0); u32 ov19_GetRelativeMonPosInMultiSelection(const UnkStruct_ov19_021D4DF0 *param0, u32 param1); u32 ov19_GetCursorItem(const UnkStruct_ov19_021D4DF0 *param0); u32 ov19_GetCursorOrPreviewedItem(const UnkStruct_ov19_021D4DF0 *param0); -u32 ov19_021D5F9C(const UnkStruct_ov19_021D4DF0 *param0); +u32 ov19_GetCompareMonSlot(const UnkStruct_ov19_021D4DF0 *param0); u32 ov19_021D5FA4(const UnkStruct_ov19_021D4DF0 *param0); const PCCompareMon *ov19_GetCompareMonFrom(const UnkStruct_ov19_021D4DF0 *param0, int compareSlot); BOOL ov19_021D5FB8(const UnkStruct_ov19_021D4DF0 *param0, int param1); diff --git a/include/overlay019/ov19_021D61B0.h b/include/overlay019/ov19_021D61B0.h index 9eb088b700..4255b705b6 100644 --- a/include/overlay019/ov19_021D61B0.h +++ b/include/overlay019/ov19_021D61B0.h @@ -17,11 +17,66 @@ #include "sprite.h" #include "sys_task_manager.h" -BOOL ov19_021D61B0(UnkStruct_ov19_021D61B0 **param0, const UnkStruct_ov19_021D4DF0 *param1, const UnkStruct_ov19_021D5DF8 *param2); -void ov19_021D64A0(UnkStruct_ov19_021D61B0 *param0); -void ov19_021D6594(UnkStruct_ov19_021D61B0 *param0, u32 param1); -BOOL ov19_021D6600(UnkStruct_ov19_021D61B0 *param0, u32 param1); -BOOL ov19_021D6628(UnkStruct_ov19_021D61B0 *param0); +enum BoxGraphicsFunctions { + FUNC_ov19_021D6694, + FUNC_BoxGraphics_ScreenFadeBothToBlack0, + FUNC_BoxGraphics_ScreenFadeBothToBlack1, + FUNC_BoxGraphics_ScreenFadeBothToBlack2, + FUNC_BoxGraphics_ChangeToNewBox, + FUNC_BoxGraphics_MoveCursor, + FUNC_BoxGraphics_PreviewMon, + FUNC_ov19_021D69BC, + FUNC_ov19_021D6A1C, + FUNC_BoxGraphics_PickUpMonIntoCursor, + FUNC_BoxGraphics_PlaceMonDownFromCursor, + FUNC_ov19_021D6AB0, + FUNC_ov19_021D6AEC, + FUNC_ov19_021D6B1C, + FUNC_BoxGraphics_PlayReleaseCursorMonAnimation, + FUNC_BoxGraphics_PlayReleaseBoxMonAnimation, + FUNC_BoxGraphics_PlayReleasePartyMonAnimation, + FUNC_BoxGraphics_DisplayItemInfo, + FUNC_BoxGraphics_CloseItemInfo, + FUNC_ov19_021D6CB0, + FUNC_ov19_021D6CF8, + FUNC_ov19_021D6D40, + FUNC_ov19_021D6D88, + FUNC_BoxGraphics_ItemShrinkToNothing, + FUNC_BoxGraphics_DisplayBoxMessage, + FUNC_BoxGraphics_ShowMenu, + FUNC_BoxGraphics_CloseMessageBox, + FUNC_ov19_021D6EC0, + FUNC_BoxGraphics_UpdateMenuCursor, + FUNC_ov19_021D6F0C, + FUNC_BoxGraphics_ShowBoxSelectionPopup, + FUNC_BoxGraphics_ScrollBoxSelectionPopup, + FUNC_ov19_021D6FB0, + FUNC_BoxGraphics_TransitionWallpaper, + FUNC_BoxGraphics_PressBoxButton, + FUNC_BoxGraphics_OpenPartyPopup, + FUNC_ov19_021D7138, + FUNC_BoxGraphics_PlayAdjustPartyAnimation, + FUNC_ov19_021D71F8, + FUNC_ov19_021D7248, + FUNC_ov19_021D7278, + FUNC_ov19_021D72E8, + FUNC_ov19_021D7324, + FUNC_ov19_021D7340, + FUNC_BoxGraphics_StartDrawMultiSelect, + FUNC_ov19_021D7380, + FUNC_BoxGraphics_ApplyMultiSelectMonShadingTask, + FUNC_ov19_021D73B0, + FUNC_ov19_021D73EC, + FUNC_ov19_021D7408, + FUNC_ov19_021D7424, + FUNC_BoxGraphics_ScreenFadeBothToBlackLogOff, +}; + +BOOL BoxGraphics_Load(UnkStruct_ov19_021D61B0 **param0, const UnkStruct_ov19_021D4DF0 *param1, const UnkStruct_ov19_021D5DF8 *param2); +void BoxGraphics_Free(UnkStruct_ov19_021D61B0 *param0); +void ov19_BoxTaskHandler(UnkStruct_ov19_021D61B0 *param0, enum BoxGraphicsFunctions function); +BOOL ov19_IsSysTaskDone(UnkStruct_ov19_021D61B0 *param0, enum BoxGraphicsFunctions function); +BOOL ov19_CheckAllTasksDone(UnkStruct_ov19_021D61B0 *param0); SysTask *ov19_021D77C8(SysTaskFunc param0, void *param1, u32 param2); NNSG2dImagePaletteProxy *ov19_021D77D0(UnkStruct_ov19_021D61B0 *param0); UnkStruct_ov19_021DA384 *ov19_021D77D8(UnkStruct_ov19_021D61B0 *param0); @@ -34,7 +89,7 @@ PokemonSpriteManager *ov19_021D7818(UnkStruct_ov19_021D61B0 *param0); int ov19_021D7820(UnkStruct_ov19_021D61B0 *param0); void ov19_021D783C(SpriteResourcesHeader *param0, NNSG2dImageProxy *param1, NNSG2dImagePaletteProxy *param2, NNSG2dCellDataBank *param3, NNSG2dCellAnimBankData *param4, u32 param5); Sprite *ov19_021D785C(SpriteList *param0, SpriteResourcesHeader *param1, u32 param2, u32 param3, u32 param4, int param5); -void ov19_021D78AC(Sprite *param0, u32 param1); +void BoxGraphics_SetSpritePriority(Sprite *sprite, u32 priority); void ov19_021D78C8(const u16 *param0, u16 *param1, u32 param2, u16 param3, u32 param4); const UnkStruct_ov19_021D5DF8 *ov19_021D7964(UnkStruct_ov19_021D61B0 *param0); void ov19_021D79B8(void *param0, UnkFuncPtr_ov19_021D79B8 param1, void *param2); diff --git a/include/overlay019/ov19_021D79F8.h b/include/overlay019/ov19_021D79F8.h index 960d827e8e..9178346fd2 100644 --- a/include/overlay019/ov19_021D79F8.h +++ b/include/overlay019/ov19_021D79F8.h @@ -28,7 +28,7 @@ void ov19_021D8938(UnkStruct_ov19_021D8318 *param0); void ov19_021D8988(UnkStruct_ov19_021D8318 *param0, u32 param1, u32 param2); void ov19_021D89F4(UnkStruct_ov19_021D8318 *param0, u32 param1); void ov19_021D8A24(UnkStruct_ov19_021D8318 *param0); -void ov19_021D8A6C(UnkStruct_ov19_021D8318 *param0); +void BoxGraphics_ApplyMultiSelectMonShading(UnkStruct_ov19_021D8318 *param0); void ov19_021D8B14(UnkStruct_ov19_021D8318 *param0); #endif // POKEPLATINUM_OV19_021D79F8_H diff --git a/include/overlay019/ov19_021D8B54.h b/include/overlay019/ov19_021D8B54.h index 5584150b75..338ffabb9e 100644 --- a/include/overlay019/ov19_021D8B54.h +++ b/include/overlay019/ov19_021D8B54.h @@ -34,7 +34,7 @@ void ov19_021D9A64(UnkStruct_ov19_021D8E00 *param0); void ov19_021D9A8C(UnkStruct_ov19_021D8E00 *param0); void ov19_021D9AB0(UnkStruct_ov19_021D8E00 *param0, u32 param1); void ov19_021D9AEC(UnkStruct_ov19_021D8E00 *param0); -void ov19_021D9B10(UnkStruct_ov19_021D8E00 *param0); +void BoxGraphics_OpenMultiSelectCursor(UnkStruct_ov19_021D8E00 *param0); void ov19_021D9B1C(UnkStruct_ov19_021D8E00 *param0, VecFx32 *param1); void ov19_021D9B34(UnkStruct_ov19_021D8E00 *param0); BOOL ov19_021D9B64(UnkStruct_ov19_021D8E00 *param0); diff --git a/include/overlay019/ov19_021DA270.h b/include/overlay019/ov19_021DA270.h index b38c05775e..142e8dd5f5 100644 --- a/include/overlay019/ov19_021DA270.h +++ b/include/overlay019/ov19_021DA270.h @@ -27,7 +27,7 @@ void ov19_021DA744(UnkStruct_ov19_021DA384 *param0, void *param1, u32 param2, u3 void ov19_021DA754(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021DCD18 *param1, u32 param2); void ov19_021DA7B8(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021DCD18 *param1, u32 param2); BOOL ov19_021DA7E0(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021DCD18 *param1); -void ov19_021DA7F4(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021DCD18 *param1, BOOL param2); +void BoxGraphics_ApplyMonInMultiSelectShading(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021DCD18 *param1, BOOL isSelected); NNSG2dCellDataBank *ov19_021DA80C(UnkStruct_ov19_021DA384 *param0); NNSG2dAnimBankData *ov19_021DA810(UnkStruct_ov19_021DA384 *param0); diff --git a/include/overlay019/ov19_021DB2FC.h b/include/overlay019/ov19_021DB2FC.h index 76630b3bfd..a7029e29dd 100644 --- a/include/overlay019/ov19_021DB2FC.h +++ b/include/overlay019/ov19_021DB2FC.h @@ -1,10 +1,10 @@ #ifndef POKEPLATINUM_OV19_021DB2FC_H #define POKEPLATINUM_OV19_021DB2FC_H +#include "overlay019/struct_box_menu.h" #include "overlay019/struct_ov19_021D4DF0.h" #include "overlay019/struct_ov19_021D61B0_decl.h" #include "overlay019/struct_ov19_021DB6F0.h" -#include "overlay019/struct_ov19_021DF964.h" #include "bg_window.h" #include "message.h" @@ -15,10 +15,10 @@ BOOL ov19_021DB2FC(UnkStruct_ov19_021DB6F0 *param0, UnkStruct_ov19_021D61B0 *par void ov19_021DB370(UnkStruct_ov19_021DB6F0 *param0); void ov19_021DB3C4(UnkStruct_ov19_021DB6F0 *param0); void ov19_021DB448(UnkStruct_ov19_021DB6F0 *param0, u32 boxMessageID); -void ov19_021DB57C(UnkStruct_ov19_021DB6F0 *param0, const UnkStruct_ov19_021DF964 *param1); +void ov19_021DB57C(UnkStruct_ov19_021DB6F0 *param0, const BoxMenu *menu); void ov19_021DB6F0(UnkStruct_ov19_021DB6F0 *param0); void ov19_021DB724(UnkStruct_ov19_021DB6F0 *param0); -void ov19_021DB748(UnkStruct_ov19_021DB6F0 *param0, const UnkStruct_ov19_021DF964 *param1); -void ov19_021DB790(UnkStruct_ov19_021DB6F0 *param0, const UnkStruct_ov19_021DF964 *param1); +void BoxGraphics_DrawMenuCursorBox(UnkStruct_ov19_021DB6F0 *param0, const BoxMenu *menu); +void ov19_021DB790(UnkStruct_ov19_021DB6F0 *param0, const BoxMenu *menu); #endif // POKEPLATINUM_OV19_021DB2FC_H diff --git a/include/overlay019/ov19_021DF964.h b/include/overlay019/ov19_021DF964.h deleted file mode 100644 index 2e387a3ed6..0000000000 --- a/include/overlay019/ov19_021DF964.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef POKEPLATINUM_OV19_021DF964_H -#define POKEPLATINUM_OV19_021DF964_H - -#include "overlay019/struct_ov19_021D4DF0.h" - -#include "enums.h" - -void ov19_021DF964(UnkStruct_ov19_021D4DF0 *param0, u32 param1); -void ov19_021DF990(UnkStruct_ov19_021D4DF0 *param0); -void ov19_021DFAD0(UnkStruct_ov19_021D4DF0 *param0); -void ov19_021DFB50(UnkStruct_ov19_021D4DF0 *param0); -void ov19_021DFB94(UnkStruct_ov19_021D4DF0 *param0, UnkEnum_021DFB94 param1); -void ov19_021DFC04(UnkStruct_ov19_021D4DF0 *param0, UnkEnum_021DFB94 param1); -void ov19_021DFC80(UnkStruct_ov19_021D4DF0 *param0); -void ov19_021DFCE4(UnkStruct_ov19_021D4DF0 *param0, u32 param1); -int ov19_021DFD2C(UnkStruct_ov19_021D4DF0 *param0); -UnkEnum_021DFB94 ov19_021DFDDC(UnkStruct_ov19_021D4DF0 *param0); -UnkEnum_021DFB94 ov19_021DFDEC(UnkStruct_ov19_021D4DF0 *param0); - -#endif // POKEPLATINUM_OV19_021DF964_H diff --git a/include/overlay019/struct_box_menu.h b/include/overlay019/struct_box_menu.h new file mode 100644 index 0000000000..0d0d66556b --- /dev/null +++ b/include/overlay019/struct_box_menu.h @@ -0,0 +1,91 @@ +#ifndef POKEPLATINUM_STRUCT_BOX_MENU_H +#define POKEPLATINUM_STRUCT_BOX_MENU_H + +enum BoxMenuItem { + BOX_MENU_NAVIGATION_NONE = -3, + BOX_MENU_NAVIGATION_UP_DOWN, + BOX_MENU_NAVIGATION_B, + BOX_MENU_JUMP, + BOX_MENU_WALLPAPER, + BOX_MENU_NAME, + BOX_MENU_HEADER_CANCEL, + BOX_MENU_FIRST_WALLPAPER_PAGE, + BOX_MENU_SCENERY_1 = BOX_MENU_FIRST_WALLPAPER_PAGE, + BOX_MENU_SCENERY_2, + BOX_MENU_SCENERY_3, + BOX_MENU_ETCETERA, + BOX_MENU_LAST_DEFAULT_WALLPAPER_PAGE = BOX_MENU_ETCETERA, + BOX_MENU_FRIENDS_1, + BOX_MENU_FRIENDS_2, + BOX_MENU_LAST_WALLPAPER_PAGE = BOX_MENU_FRIENDS_2, + BOX_MENU_FIRST_WALLPAPER, + BOX_MENU_FOREST = BOX_MENU_FIRST_WALLPAPER, + BOX_MENU_CITY, + BOX_MENU_DESERT, + BOX_MENU_SAVANNA, + BOX_MENU_CRAG, + BOX_MENU_VOLCANO, + BOX_MENU_SNOW, + BOX_MENU_CAVE, + BOX_MENU_BEACH, + BOX_MENU_SEAFLOOR, + BOX_MENU_RIVER, + BOX_MENU_SKY, + BOX_MENU_POKECENTER, + BOX_MENU_MACHINE, + BOX_MENU_CHECKS, + BOX_MENU_SIMPLE, + BOX_MENU_FIRST_UNLOCKABLE_WALLPAPER, + BOX_MENU_DISTORTION = BOX_MENU_FIRST_UNLOCKABLE_WALLPAPER, + BOX_MENU_CONTEST, + BOX_MENU_NOSTALGIC, + BOX_MENU_CROAGUNK, + BOX_MENU_TRIO, + BOX_MENU_PIKAPIKA, + BOX_MENU_LEGEND, + BOX_MENU_TEAM_GALACTIC, + BOX_MENU_LAST_WALLPAPER = BOX_MENU_TEAM_GALACTIC, + BOX_MENU_MOVE, + BOX_MENU_PLACE, + BOX_MENU_SHIFT, + BOX_MENU_SUMMARY, + BOX_MENU_WITHDRAW, + BOX_MENU_STORE, + BOX_MENU_ITEM, + BOX_MENU_MARK, + BOX_MENU_RELEASE, + BOX_MENU_CANCEL, + BOX_MENU_CONFIRM, + BOX_MENU_MARK_CANCEL, + BOX_MENU_GIVE, + BOX_MENU_TAKE, + BOX_MENU_INFO, + BOX_MENU_SWITCH, + BOX_MENU_BAG, + BOX_MENU_ITEMS_CANCEL, + BOX_MENU_SET_ON_LEFT, + BOX_MENU_SET_ON_RIGHT, + BOX_MENU_YES, + BOX_MENU_NO, + BOX_MENU_FIRST_MARKING, + BOX_MENU_CIRCLE = BOX_MENU_FIRST_MARKING, + BOX_MENU_TRIANGLE, + BOX_MENU_SQUARE, + BOX_MENU_HEART, + BOX_MENU_STAR, + BOX_MENU_DIAMOND, + BOX_MENU_LAST_MARKING = BOX_MENU_DIAMOND +}; + +#define MAX_MENU_ITEMS 8 +#define MAX_WALLPAPERS_PER_PAGE 4 + +typedef struct BoxMenu { + enum BoxMenuItem menuItems[MAX_MENU_ITEMS]; + u8 selectedMenuItemIndex; + u8 totalMenuItems; + u8 markings; + u8 unused; // only assigned to, never read from +} BoxMenu; + +#endif // POKEPLATINUM_STRUCT_BOX_MENU_H diff --git a/include/overlay019/struct_ov19_021D4DF0.h b/include/overlay019/struct_ov19_021D4DF0.h index 0e03ebcf40..d466bfc6d6 100644 --- a/include/overlay019/struct_ov19_021D4DF0.h +++ b/include/overlay019/struct_ov19_021D4DF0.h @@ -8,10 +8,9 @@ #include "overlay019/box_mon_selection.h" #include "overlay019/box_settings.h" #include "overlay019/pc_mon_preview.h" +#include "overlay019/struct_box_menu.h" #include "overlay019/struct_ov19_021D4EE4.h" #include "overlay019/struct_ov19_021D4F34.h" -#include "overlay019/struct_ov19_021D5D20.h" -#include "overlay019/struct_ov19_021DF964.h" #include "party.h" @@ -23,8 +22,8 @@ typedef struct { BoxCustomization customization; BoxSettings boxSettings; PCMonPreview pcMonPreview; - UnkStruct_ov19_021DF964 unk_74; - UnkStruct_ov19_021D5D20 unk_98; + BoxMenu boxMenu; + u32 boxSelectionBoxID; UnkStruct_ov19_021D4F34 unk_9C; u8 padding_A2[2]; UnkStruct_ov19_021D4EE4 unk_A4; diff --git a/include/overlay019/struct_ov19_021D4EE4.h b/include/overlay019/struct_ov19_021D4EE4.h index 0c23f6d00f..634ea68a49 100644 --- a/include/overlay019/struct_ov19_021D4EE4.h +++ b/include/overlay019/struct_ov19_021D4EE4.h @@ -4,7 +4,7 @@ #include "overlay019/pc_compare_mon.h" typedef struct { - u8 unk_00; + u8 compareMonSlot; u8 unk_01; u8 unk_02[2]; BOOL compareButtonAnimationPressed; diff --git a/include/overlay019/struct_ov19_021D5D20.h b/include/overlay019/struct_ov19_021D5D20.h deleted file mode 100644 index a0c850b902..0000000000 --- a/include/overlay019/struct_ov19_021D5D20.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV19_021D5D20_H -#define POKEPLATINUM_STRUCT_OV19_021D5D20_H - -typedef struct { - u32 unk_00; -} UnkStruct_ov19_021D5D20; - -#endif // POKEPLATINUM_STRUCT_OV19_021D5D20_H diff --git a/include/overlay019/struct_ov19_021DF964.h b/include/overlay019/struct_ov19_021DF964.h deleted file mode 100644 index 9029fbfc7a..0000000000 --- a/include/overlay019/struct_ov19_021DF964.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_OV19_021DF964_H -#define POKEPLATINUM_STRUCT_OV19_021DF964_H - -#include "enums.h" - -typedef struct { - UnkEnum_021DFB94 unk_00[8]; - u8 unk_20; - u8 unk_21; - u8 unk_22; - u8 unk_23; -} UnkStruct_ov19_021DF964; - -#endif // POKEPLATINUM_STRUCT_OV19_021DF964_H diff --git a/include/struct_defs/struct_02042434.h b/include/struct_defs/struct_02042434.h index acdbefa6c0..962404e5c7 100644 --- a/include/struct_defs/struct_02042434.h +++ b/include/struct_defs/struct_02042434.h @@ -8,7 +8,7 @@ typedef struct { SaveData *saveData; enum BoxMode boxMode; - BOOL unk_08; + BOOL recordBoxUseInJournal; } UnkStruct_02042434; #endif // POKEPLATINUM_STRUCT_02042434_H diff --git a/include/struct_defs/struct_0208737C.h b/include/struct_defs/struct_0208737C.h index 931ccf7437..0b3d1a55a6 100644 --- a/include/struct_defs/struct_0208737C.h +++ b/include/struct_defs/struct_0208737C.h @@ -13,7 +13,7 @@ typedef struct { int unk_0C; int unk_10; int unk_14; - Strbuf *unk_18; + Strbuf *textInputStr; u16 unk_1C[20]; int unk_44; PCBoxes *unk_48; diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index af0bc466e8..fff226a7f4 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -761,7 +761,7 @@ Overlay overlay19 Object main.nef.p/src_overlay019_ov19_021DCF88.c.o Object main.nef.p/src_overlay019_ov19_021DE3E8.c.o Object main.nef.p/src_overlay019_ov19_021DEC04.c.o - Object main.nef.p/src_overlay019_ov19_021DF964.c.o + Object main.nef.p/src_overlay019_box_menu.c.o } Overlay overlay20 diff --git a/src/battle/battle_script.c b/src/battle/battle_script.c index 6ad1c95149..c6acc1e761 100644 --- a/src/battle/battle_script.c +++ b/src/battle/battle_script.c @@ -10907,7 +10907,7 @@ static void BattleScript_CatchMonTask(SysTask *param0, void *param1) v3 = BattleSystem_PartyPokemon(v2->battleSys, v1, v2->battleCtx->selectedPartySlot[v1]); if (v19->unk_14 == 0) { - Pokemon_SetValue(v3, MON_DATA_NICKNAME_STRBUF_AND_FLAG, v19->unk_18); + Pokemon_SetValue(v3, MON_DATA_NICKNAME_STRBUF_AND_FLAG, v19->textInputStr); ov16_0223F24C(v2->battleSys, (1 + 48)); } diff --git a/src/meson.build b/src/meson.build index a5023d7559..33c1183697 100644 --- a/src/meson.build +++ b/src/meson.build @@ -582,7 +582,7 @@ pokeplatinum_c = files( 'overlay019/ov19_021DCF88.c', 'overlay019/ov19_021DE3E8.c', 'overlay019/ov19_021DEC04.c', - 'overlay019/ov19_021DF964.c', + 'overlay019/box_menu.c', 'overlay020/ov20_021D0D80.c', 'overlay020/ov20_021D2098.c', 'overlay020/ov20_021D2EA4.c', diff --git a/src/overlay019/box_menu.c b/src/overlay019/box_menu.c new file mode 100644 index 0000000000..dedfc382c3 --- /dev/null +++ b/src/overlay019/box_menu.c @@ -0,0 +1,299 @@ +#include "overlay019/box_menu.h" + +#include +#include + +#include "constants/items.h" + +#include "struct_decls/pc_boxes_decl.h" + +#include "overlay019/ov19_021D0D80.h" +#include "overlay019/pc_mon_preview.h" +#include "overlay019/struct_box_menu.h" +#include "overlay019/struct_ov19_021D4DF0.h" + +#include "enums.h" +#include "pc_boxes.h" +#include "sound_playback.h" +#include "system.h" + +static void BoxMenu_ClearMenuItems(BoxMenu *menu); +static void BoxMenu_AddMenuItem(BoxMenu *menu, enum BoxMenuItem menuItem); + +void BoxMenu_FillYesNo(UnkStruct_ov19_021D4DF0 *param0, u32 menuItemIndex) +{ + BoxMenu *menu = ¶m0->boxMenu; + + BoxMenu_ClearMenuItems(menu); + BoxMenu_AddMenuItem(menu, BOX_MENU_YES); + BoxMenu_AddMenuItem(menu, BOX_MENU_NO); + + menu->selectedMenuItemIndex = menuItemIndex; + menu->unused = 0; +} + +void BoxMenu_FillTopLevelMenuItems(UnkStruct_ov19_021D4DF0 *param0) +{ + BoxMenu *menu = &(param0->boxMenu); + + BoxMenu_ClearMenuItems(menu); + menu->unused = 1; + + switch (ov19_GetBoxMode(param0)) { + case PC_MODE_MOVE_MONS: + default: + if (ov19_GetPreviewMonSource(param0) == PREVIEW_MON_IN_CURSOR) { + BoxMenu_AddMenuItem(menu, ov19_IsMonUnderCursor(param0) ? BOX_MENU_SHIFT : BOX_MENU_PLACE); + } else { + BoxMenu_AddMenuItem(menu, BOX_MENU_MOVE); + } + + BoxMenu_AddMenuItem(menu, BOX_MENU_SUMMARY); + + const PCMonPreview *preview = ov19_GetPCMonPreview(param0); + + if (preview->isEgg == FALSE) { + BoxMenu_AddMenuItem(menu, BOX_MENU_ITEM); + } + + BoxMenu_AddMenuItem(menu, (ov19_GetCursorLocation(param0) == CURSOR_IN_BOX) ? BOX_MENU_WITHDRAW : BOX_MENU_STORE); + BoxMenu_AddMenuItem(menu, BOX_MENU_MARK); + BoxMenu_AddMenuItem(menu, BOX_MENU_RELEASE); + BoxMenu_AddMenuItem(menu, BOX_MENU_CANCEL); + break; + case PC_MODE_DEPOSIT: + BoxMenu_AddMenuItem(menu, BOX_MENU_STORE); + BoxMenu_AddMenuItem(menu, BOX_MENU_SUMMARY); + BoxMenu_AddMenuItem(menu, BOX_MENU_MARK); + BoxMenu_AddMenuItem(menu, BOX_MENU_RELEASE); + BoxMenu_AddMenuItem(menu, BOX_MENU_CANCEL); + break; + case PC_MODE_WITHDRAW: + BoxMenu_AddMenuItem(menu, BOX_MENU_WITHDRAW); + BoxMenu_AddMenuItem(menu, BOX_MENU_SUMMARY); + BoxMenu_AddMenuItem(menu, BOX_MENU_MARK); + BoxMenu_AddMenuItem(menu, BOX_MENU_RELEASE); + BoxMenu_AddMenuItem(menu, BOX_MENU_CANCEL); + break; + case PC_MODE_COMPARE: + BoxMenu_AddMenuItem(menu, (ov19_GetCompareMonSlot(param0) == 0) ? BOX_MENU_SET_ON_LEFT : BOX_MENU_SET_ON_RIGHT); + BoxMenu_AddMenuItem(menu, (ov19_GetCursorLocation(param0) == CURSOR_IN_BOX) ? BOX_MENU_WITHDRAW : BOX_MENU_STORE); + BoxMenu_AddMenuItem(menu, BOX_MENU_MARK); + BoxMenu_AddMenuItem(menu, BOX_MENU_CANCEL); + } +} + +void BoxMenu_FillItemsMenu(UnkStruct_ov19_021D4DF0 *param0) +{ + BoxMenu *menu; + u32 cursorItem, monItem; + + menu = &(param0->boxMenu); + cursorItem = ov19_GetCursorItem(param0); + monItem = ov19_GetPreviewedMonHeldItem(param0); + + BoxMenu_ClearMenuItems(menu); + menu->unused = 1; + + if (cursorItem != ITEM_NONE) { + if (monItem != ITEM_NONE) { + BoxMenu_AddMenuItem(menu, BOX_MENU_SWITCH); + } else { + BoxMenu_AddMenuItem(menu, BOX_MENU_GIVE); + } + + BoxMenu_AddMenuItem(menu, BOX_MENU_BAG); + BoxMenu_AddMenuItem(menu, BOX_MENU_INFO); + } else { + if (monItem != ITEM_NONE) { + BoxMenu_AddMenuItem(menu, BOX_MENU_TAKE); + BoxMenu_AddMenuItem(menu, BOX_MENU_BAG); + BoxMenu_AddMenuItem(menu, BOX_MENU_INFO); + } else { + BoxMenu_AddMenuItem(menu, BOX_MENU_GIVE); + } + } + + BoxMenu_AddMenuItem(menu, BOX_MENU_ITEMS_CANCEL); +} + +void BoxMenu_FillHeaderMenu(UnkStruct_ov19_021D4DF0 *param0) +{ + BoxMenu *menu = &(param0->boxMenu); + const PCBoxes *unused = ov19_GetPCBoxes(param0); + + BoxMenu_ClearMenuItems(menu); + BoxMenu_AddMenuItem(menu, BOX_MENU_JUMP); + + if (ov19_GetBoxMode(param0) != PC_MODE_COMPARE) { + BoxMenu_AddMenuItem(menu, BOX_MENU_WALLPAPER); + BoxMenu_AddMenuItem(menu, BOX_MENU_NAME); + } + + BoxMenu_AddMenuItem(menu, BOX_MENU_HEADER_CANCEL); + + menu->unused = 2; +} + +void BoxMenu_FillWallpaperMenu(UnkStruct_ov19_021D4DF0 *param0, enum BoxMenuItem menuItem) +{ + BoxMenu *menu = &(param0->boxMenu); + const PCBoxes *pcBoxes = ov19_GetPCBoxes(param0); + u32 numUnlockedWallpapers; + + BoxMenu_ClearMenuItems(menu); + BoxMenu_AddMenuItem(menu, BOX_MENU_SCENERY_1); + BoxMenu_AddMenuItem(menu, BOX_MENU_SCENERY_2); + BoxMenu_AddMenuItem(menu, BOX_MENU_SCENERY_3); + BoxMenu_AddMenuItem(menu, BOX_MENU_ETCETERA); + + numUnlockedWallpapers = PCBoxes_CountUnlockedWallpapers(pcBoxes); + + if (numUnlockedWallpapers > 0) { + BoxMenu_AddMenuItem(menu, BOX_MENU_FRIENDS_1); + } + + if (numUnlockedWallpapers > 4) { + BoxMenu_AddMenuItem(menu, BOX_MENU_FRIENDS_2); + } + + menu->unused = 3; + + if (menuItem >= BOX_MENU_FIRST_WALLPAPER_PAGE && menuItem <= BOX_MENU_LAST_WALLPAPER_PAGE) { + menu->selectedMenuItemIndex = menuItem - BOX_MENU_FIRST_WALLPAPER_PAGE; + } else { + GF_ASSERT(0); + } +} + +void BoxMenu_FillWallpaperSelectionMenu(UnkStruct_ov19_021D4DF0 *param0, enum BoxMenuItem menuItem) +{ + static const u16 sWallpaperPages[][MAX_WALLPAPERS_PER_PAGE] = { + { BOX_MENU_FOREST, BOX_MENU_CITY, BOX_MENU_DESERT, BOX_MENU_SAVANNA }, + { BOX_MENU_CRAG, BOX_MENU_VOLCANO, BOX_MENU_SNOW, BOX_MENU_CAVE }, + { BOX_MENU_BEACH, BOX_MENU_SEAFLOOR, BOX_MENU_RIVER, BOX_MENU_SKY }, + { BOX_MENU_POKECENTER, BOX_MENU_MACHINE, BOX_MENU_CHECKS, BOX_MENU_SIMPLE }, + }; + BoxMenu *menu = &(param0->boxMenu); + const PCBoxes *pcBoxes = ov19_GetPCBoxes(param0); + int i; + + BoxMenu_ClearMenuItems(menu); + + if (menuItem >= BOX_MENU_FIRST_WALLPAPER_PAGE && menuItem <= BOX_MENU_LAST_DEFAULT_WALLPAPER_PAGE) { + menuItem -= BOX_MENU_FIRST_WALLPAPER_PAGE; + + for (i = 0; i < MAX_WALLPAPERS_PER_PAGE; i++) { + BoxMenu_AddMenuItem(menu, sWallpaperPages[menuItem][i]); + } + } else { // unlockable wallpapers + int firstUnlockedWallpaperPageCount = 0; + int addedWallpaperCount = 0; + + if (menuItem == BOX_MENU_FRIENDS_2) { + firstUnlockedWallpaperPageCount = 4; + } + + for (i = 0; i < MAX_UNLOCKABLE_WALLPAPERS; i++) { + if (PCBoxes_CheckHasUnlockedWallpaper(pcBoxes, i)) { + if (firstUnlockedWallpaperPageCount) { + firstUnlockedWallpaperPageCount--; + } else { + BoxMenu_AddMenuItem(menu, BOX_MENU_FIRST_UNLOCKABLE_WALLPAPER + i); + + if (++addedWallpaperCount >= MAX_WALLPAPERS_PER_PAGE) { + break; + } + } + } + } + } + + menu->unused = 3; +} + +void BoxMenu_FillMarkingsMenu(UnkStruct_ov19_021D4DF0 *param0) +{ + BoxMenu *menu = &(param0->boxMenu); + BoxMenu_ClearMenuItems(menu); + + menu->unused = 4; + menu->markings = param0->pcMonPreview.markings; + + BoxMenu_AddMenuItem(menu, BOX_MENU_CIRCLE); + BoxMenu_AddMenuItem(menu, BOX_MENU_TRIANGLE); + BoxMenu_AddMenuItem(menu, BOX_MENU_SQUARE); + BoxMenu_AddMenuItem(menu, BOX_MENU_HEART); + BoxMenu_AddMenuItem(menu, BOX_MENU_STAR); + BoxMenu_AddMenuItem(menu, BOX_MENU_DIAMOND); + BoxMenu_AddMenuItem(menu, BOX_MENU_CONFIRM); + BoxMenu_AddMenuItem(menu, BOX_MENU_MARK_CANCEL); +} + +void BoxMenu_ToggleMarking(UnkStruct_ov19_021D4DF0 *param0, u32 marking) +{ + BoxMenu *menu = &(param0->boxMenu); + menu->markings ^= (1 << marking); +} + +static void BoxMenu_ClearMenuItems(BoxMenu *menu) +{ + menu->totalMenuItems = 0; + menu->selectedMenuItemIndex = 0; +} + +static void BoxMenu_AddMenuItem(BoxMenu *menu, enum BoxMenuItem menuItem) +{ + if (menu->totalMenuItems < MAX_MENU_ITEMS) { + menu->menuItems[menu->totalMenuItems++] = menuItem; + } +} + +enum BoxMenuItem BoxMenu_GetMenuNavigation(UnkStruct_ov19_021D4DF0 *param0) +{ + BoxMenu *menu = &(param0->boxMenu); + + if (JOY_NEW(PAD_KEY_UP)) { + if (menu->selectedMenuItemIndex) { + menu->selectedMenuItemIndex--; + return BOX_MENU_NAVIGATION_UP_DOWN; + } else if (menu->totalMenuItems >= 3) { + menu->selectedMenuItemIndex = menu->totalMenuItems - 1; + return BOX_MENU_NAVIGATION_UP_DOWN; + } + } + + if (JOY_NEW(PAD_KEY_DOWN)) { + if (menu->selectedMenuItemIndex < (menu->totalMenuItems - 1)) { + menu->selectedMenuItemIndex++; + return BOX_MENU_NAVIGATION_UP_DOWN; + } else if (menu->totalMenuItems >= 3) { + menu->selectedMenuItemIndex = 0; + return BOX_MENU_NAVIGATION_UP_DOWN; + } + } + + if (JOY_NEW(PAD_BUTTON_B)) { + Sound_PlayEffect(SEQ_SE_DP_DECIDE); + return BOX_MENU_NAVIGATION_B; + } + + if (JOY_NEW(PAD_BUTTON_A)) { + Sound_PlayEffect(SEQ_SE_DP_DECIDE); + return menu->menuItems[menu->selectedMenuItemIndex]; + } + + return BOX_MENU_NAVIGATION_NONE; +} + +enum BoxMenuItem BoxMenu_GetSelectedMenuItem(UnkStruct_ov19_021D4DF0 *param0) +{ + BoxMenu *menu = &(param0->boxMenu); + return menu->menuItems[menu->selectedMenuItemIndex]; +} + +enum BoxMenuItem BoxMenu_GetDefaultMenuItem(UnkStruct_ov19_021D4DF0 *param0) +{ + BoxMenu *menu = &(param0->boxMenu); + return menu->menuItems[0]; +} diff --git a/src/overlay019/ov19_021D0D80.c b/src/overlay019/ov19_021D0D80.c index 5ce4cba820..c11d7ba3a1 100644 --- a/src/overlay019/ov19_021D0D80.c +++ b/src/overlay019/ov19_021D0D80.c @@ -15,17 +15,16 @@ #include "applications/pokemon_summary_screen/main.h" #include "overlay019/box_cursor.h" #include "overlay019/box_customization.h" +#include "overlay019/box_menu.h" #include "overlay019/box_mon_selection.h" #include "overlay019/box_settings.h" #include "overlay019/ov19_021D603C.h" #include "overlay019/ov19_021D61B0.h" -#include "overlay019/ov19_021DF964.h" #include "overlay019/pc_compare_mon.h" #include "overlay019/pc_mon_preview.h" #include "overlay019/struct_ov19_021D4DF0.h" #include "overlay019/struct_ov19_021D4EE4.h" #include "overlay019/struct_ov19_021D4F34.h" -#include "overlay019/struct_ov19_021D5D20.h" #include "overlay019/struct_ov19_021D6104.h" #include "overlay019/struct_ov19_021D61B0_decl.h" #include "overlay084/const_ov84_02241130.h" @@ -65,6 +64,19 @@ FS_EXTERN_OVERLAY(overlay84); +enum ReleasedFrom { + RELEASED_FROM_CURSOR, + RELEASED_FROM_BOX, + RELEASED_FROM_PARTY +}; + +enum BoxSelectorState { + BOX_SELECTOR_START, + BOX_SELECTOR_DISPLAY_MESSAGE_START, + BOX_SELECTOR_DISPLAY_MESSAGE_DONE, + BOX_SELECTOR_WAIT_FOR_USER +}; + static const TouchScreenHitTable sMainPcButtons[] = { { TOUCHSCREEN_USE_CIRCLE, MAIN_PC_LEFT_BUTTON_X, MAIN_PC_BUTTON_Y, MAIN_PC_BUTTON_RADIUS }, { TOUCHSCREEN_USE_CIRCLE, MAIN_PC_RIGHT_BUTTON_X, MAIN_PC_BUTTON_Y, MAIN_PC_BUTTON_RADIUS }, @@ -88,31 +100,31 @@ static const TouchScreenHitTable sPokemonMarkingsButtons[] = { { TOUCHSCREEN_TABLE_TERMINATOR, 0, 0, 0 } }; -static const u16 Unk_ov19_021DFDF0[] = { - 0x39, - 0x1AF, - 0x7F +static const u16 sReleaseBlockingMoves[] = { + MOVE_SURF, + MOVE_ROCK_CLIMB, + MOVE_WATERFALL }; -typedef struct { - u32 unk_00; - u8 unk_04; - s8 unk_05; +typedef struct BoxSelectorPopup { + u32 state; + u8 hasReset; + s8 boxID; u16 boxMessageID; -} UnkStruct_ov19_021D4468; +} BoxSelectorPopup; typedef struct { - u8 unk_00; - u8 unk_01; + u8 checkedCanReleaseMon; + u8 canReleaseMon; u8 boxID; u8 monPosInBox; - u8 unk_04[NELEMS(Unk_ov19_021DFDF0)]; - u16 unk_08[NELEMS(Unk_ov19_021DFDF0)]; + u8 hasReleaseBlockingMove[NELEMS(sReleaseBlockingMoves)]; + u16 monsWithReleaseBlockingMoveCount[NELEMS(sReleaseBlockingMoves)]; BoxPokemon *boxMon; PCBoxes *pcBoxes; Party *party; - BOOL unk_1C; -} UnkStruct_ov19_021D38E0; + BOOL monHeldInCursor; +} ReleaseMon; typedef struct UnkStruct_ov19_021D5DF8_t { UnkStruct_ov19_021D4DF0 unk_00; @@ -123,7 +135,7 @@ typedef struct UnkStruct_ov19_021D5DF8_t { Party *party; UnkStruct_0208737C *unk_128; PokemonSummary monSummary; - UnkStruct_ov19_021D38E0 unk_15C; + ReleaseMon releaseMon; TouchScreenActions *mainBoxAndCompareButtonsAction; TouchScreenActions *markingsButtonsAction; u32 touchScreenButtonPressed; @@ -132,15 +144,18 @@ typedef struct UnkStruct_ov19_021D5DF8_t { MessageLoader *speciesNameLoader; MessageLoader *natureNameLoader; MessageLoader *abilityNameLoader; - StringTemplate *unk_19C; + StringTemplate *MessageVariableBuffer; Pokemon *mon; Options *options; - int (*unk_1A8)(struct UnkStruct_ov19_021D5DF8_t *param0); - void (*unk_1AC)(struct UnkStruct_ov19_021D5DF8_t *param0, u32 *param1); - u32 unk_1B0; - u32 unk_1B4; - s32 unk_1B8; - UnkStruct_ov19_021D4468 unk_1BC; + int (*cursorLocationInputHandler)(struct UnkStruct_ov19_021D5DF8_t *param0); + void (*boxApplicationAction)(struct UnkStruct_ov19_021D5DF8_t *param0, u32 *state); + u32 cursorLocationHandlerState; + u32 boxApplicationActionState; + union { + enum BoxMenuItem menuItem; + enum ReleasedFrom releasedFrom; + }; + BoxSelectorPopup boxSelector; u32 unk_1C4; UnkStruct_ov19_021D6104 unk_1C8; int unk_1FC; @@ -153,57 +168,57 @@ typedef struct UnkStruct_ov19_021D5DF8_t { u32 unk_218; } UnkStruct_ov19_021D5DF8; -typedef int (*UnkFuncPtr_ov19_021D0EA0)(UnkStruct_ov19_021D5DF8 *); -typedef void (*UnkFuncPtr_ov19_021D0EB0)(UnkStruct_ov19_021D5DF8 *, u32 *); +typedef int (*CursorLocationInputHandler)(UnkStruct_ov19_021D5DF8 *); +typedef void (*BoxApplicationAction)(UnkStruct_ov19_021D5DF8 *, u32 *); -static void ov19_021D0EA0(UnkStruct_ov19_021D5DF8 *param0, UnkFuncPtr_ov19_021D0EA0 param1); -static void ov19_021D0EB0(UnkStruct_ov19_021D5DF8 *param0, UnkFuncPtr_ov19_021D0EB0 param1); -static void ov19_021D0EC0(UnkStruct_ov19_021D5DF8 *param0); -static UnkFuncPtr_ov19_021D0EA0 ov19_021D0ECC(UnkStruct_ov19_021D5DF8 *param0); -static void ov19_021D0F14(UnkStruct_ov19_021D5DF8 *param0); +static void ov19_RegisterCursorLocationInputHandler(UnkStruct_ov19_021D5DF8 *param0, CursorLocationInputHandler cursorLocationInputHandler); +static void ov19_RegisterBoxApplicationAction(UnkStruct_ov19_021D5DF8 *param0, BoxApplicationAction boxApplicationAction); +static void ov19_ClearBoxApplicationAction(UnkStruct_ov19_021D5DF8 *param0); +static CursorLocationInputHandler ov19_GetCursorLocationInputHandler(UnkStruct_ov19_021D5DF8 *param0); +static void ov19_FlagRecordBoxUseInJournal(UnkStruct_ov19_021D5DF8 *param0); static void ov19_021D0F20(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D0F88(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); +static void ov19_ReturnToBoxFade1Action(UnkStruct_ov19_021D5DF8 *param0, u32 *state); static inline int inline_ov19_021D0FF0(UnkStruct_ov19_021D5DF8 *param0); -static int ov19_021D0FF0(UnkStruct_ov19_021D5DF8 *param0); +static int ov19_CursorInBoxInputHandler(UnkStruct_ov19_021D5DF8 *param0); static BOOL ov19_IsPreviewedMonHoldingMailOrHasBallCapsule(UnkStruct_ov19_021D5DF8 *param0, int *destMessageID); -static int ov19_021D1270(UnkStruct_ov19_021D5DF8 *param0); -static int ov19_021D15C0(UnkStruct_ov19_021D5DF8 *param0); -static int ov19_021D17AC(UnkStruct_ov19_021D5DF8 *param0); -static int ov19_021D19B8(UnkStruct_ov19_021D5DF8 *param0); -static void ov19_021D1C84(UnkStruct_ov19_021D5DF8 *param0); -static int ov19_021D1DAC(UnkStruct_ov19_021D5DF8 *param0); -static void ov19_021D1DEC(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D1F5C(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D20A4(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D2308(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D2694(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D27E8(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D2890(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D2A5C(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D2B54(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); +static int ov19_CursorInPartyInputHandler(UnkStruct_ov19_021D5DF8 *param0); +static int ov19_CursorOnHeaderInputHandler(UnkStruct_ov19_021D5DF8 *param0); +static int ov19_CursorOnCloseInputHandler(UnkStruct_ov19_021D5DF8 *param0); +static int ov19_CursorOnPartyButtonInputHandler(UnkStruct_ov19_021D5DF8 *param0); +static void ov19_InitSummary(UnkStruct_ov19_021D5DF8 *param0); +static int ov19_LogOffScreenFade(UnkStruct_ov19_021D5DF8 *param0); +static void ov19_CloseBoxAction(UnkStruct_ov19_021D5DF8 *param0, u32 *close); +static void ov19_ContinueBoxOperationsAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_MonCursorMenuAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_MonItemMenuAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_BoxHeaderMenuAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_BoxJumpAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_WallpaperMenu(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_MarkAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_MultiSelectAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); static BOOL ov19_IsBoxUnderSelectedMonsEmpty(const UnkStruct_ov19_021D4DF0 *param0); -static void ov19_021D2E1C(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D2F14(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D3010(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D30D0(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D3294(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); +static void ov19_PickUpMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_PlaceMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_ShiftMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_WithdrawMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_StoreMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); static BOOL ov19_OnLastAliveMon(UnkStruct_ov19_021D5DF8 *param0); static BOOL ov19_CheckReleaseMonValid(UnkStruct_ov19_021D5DF8 *param0, int *destBoxMessageID); -static void ov19_021D35F8(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D38E0(UnkStruct_ov19_021D5DF8 *param0); -static void ov19_021D3978(SysTask *param0, void *param1); -static BOOL BoxPokemon_HasMove(BoxPokemon *boxMon, u16 param1); -static void ov19_021D3B34(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D3C28(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); +static void ov19_ReleaseMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_CheckShouldMonReturn(UnkStruct_ov19_021D5DF8 *param0); +static void ov19_CheckLastMonWithReleaseBlockingMove(SysTask *task, void *releaseMon); +static BOOL BoxPokemon_HasMove(BoxPokemon *boxMon, u16 move); +static void ov19_RenameBoxAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_OpenSummaryAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); static void ov19_SetCursorPosToSummaryMonPos(UnkStruct_ov19_021D4DF0 *param0, UnkStruct_ov19_021D5DF8 *param1); -static void ov19_021D3D44(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D3FB0(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D4184(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D4390(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); -static void ov19_021D443C(UnkStruct_ov19_021D5DF8 *param0, u32 param1, u32 param2); -static void ov19_021D4458(UnkStruct_ov19_021D5DF8 *param0); -static BOOL ov19_021D4468(UnkStruct_ov19_021D5DF8 *param0); -static void ov19_021D45A8(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); +static void ov19_GiveItemFromBagAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_MonItemHeldAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_PutAwayItemAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void ov19_DisplayItemInfoAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); +static void BoxSelectorPopup_Init(UnkStruct_ov19_021D5DF8 *param0, u32 boxID, u32 boxMessageID); +static void BoxSelectorPopup_Reset(UnkStruct_ov19_021D5DF8 *param0); +static BOOL ov19_TrySelectBoxFromPopup(UnkStruct_ov19_021D5DF8 *param0); +static void ov19_ChangeToNewBoxAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state); static void ov19_021D4640(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); static void ov19_021D4938(UnkStruct_ov19_021D5DF8 *param0, u32 *param1); static BOOL ov19_021D4B88(UnkStruct_ov19_021D5DF8 *param0); @@ -243,21 +258,21 @@ static void ov19_PutDownSelectedMons(UnkStruct_ov19_021D5DF8 *param0, UnkStruct_ static void ov19_SwapMonInCursor(UnkStruct_ov19_021D5DF8 *param0, UnkStruct_ov19_021D4DF0 *param1); static BOOL ov19_TryStoreCursorMonInBox(UnkStruct_ov19_021D5DF8 *param0, u32 boxID); static BOOL ov19_TryStoreSelectedMonInBox(UnkStruct_ov19_021D5DF8 *param0, u32 boxID); -static void ov19_021D5834(UnkStruct_ov19_021D5DF8 *param0); +static void ov19_RemoveCursorMon(UnkStruct_ov19_021D5DF8 *param0); static void ov19_RemoveMonUnderCursor(UnkStruct_ov19_021D5DF8 *param0); static void ov19_PreviewBoxMon(UnkStruct_ov19_021D4DF0 *param0, BoxPokemon *boxMon, UnkStruct_ov19_021D5DF8 *param2); static void ov19_LoadBoxMonIntoPreview(UnkStruct_ov19_021D4DF0 *param0, BoxPokemon *boxMon, UnkStruct_ov19_021D5DF8 *param2); static void ov19_LoadBoxMonIntoComparison(UnkStruct_ov19_021D4DF0 *param0, BoxPokemon *boxMon, UnkStruct_ov19_021D5DF8 *param2); -static void ov19_021D5B70(UnkStruct_ov19_021D4DF0 *param0); +static void ov19_ToggleCompareMonSlot(UnkStruct_ov19_021D4DF0 *param0); static void ov19_021D5B80(UnkStruct_ov19_021D4DF0 *param0); static void ov19_SetCompareButtonPressed(UnkStruct_ov19_021D4DF0 *param0, BOOL pressed); static void ov19_SetPreviewedBoxMon(UnkStruct_ov19_021D4DF0 *param0, BoxPokemon *boxMon); -static void ov19_021D5BAC(UnkStruct_ov19_021D4DF0 *param0); +static void ov19_UpdatePreviewMonMarkings(UnkStruct_ov19_021D4DF0 *param0); static void ov19_GiveItemToSelectedMon(UnkStruct_ov19_021D4DF0 *param0, u16 item, UnkStruct_ov19_021D5DF8 *param2); static void ov19_LoadRightBoxCustomization(UnkStruct_ov19_021D4DF0 *param0); static void ov19_LoadLeftBoxCustomization(UnkStruct_ov19_021D4DF0 *param0); static void ov19_LoadCustomizationsFor(UnkStruct_ov19_021D4DF0 *param0, u32 boxID); -static void ov19_021D5D20(UnkStruct_ov19_021D4DF0 *param0, u32 param1); +static void ov19_SetBoxSelectionBoxID(UnkStruct_ov19_021D4DF0 *param0, u32 boxID); static void ov19_PickUpHeldItem(UnkStruct_ov19_021D4DF0 *param0, UnkStruct_ov19_021D5DF8 *param1); static void ov19_RemoveCursorItem(UnkStruct_ov19_021D4DF0 *param0); static void ov19_GiveItemFromCursor(UnkStruct_ov19_021D4DF0 *param0, UnkStruct_ov19_021D5DF8 *param1); @@ -275,19 +290,19 @@ int ov19_021D0D80(ApplicationManager *appMan, int *param1) { UnkStruct_ov19_021D5DF8 *v0; - Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_9, 16384); - Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_10, 245760); + Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_BOX_DATA, 16384); + Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_BOX_GRAPHICS, 245760); - v0 = ApplicationManager_NewData(appMan, sizeof(UnkStruct_ov19_021D5DF8), HEAP_ID_9); + v0 = ApplicationManager_NewData(appMan, sizeof(UnkStruct_ov19_021D5DF8), HEAP_ID_BOX_DATA); if (v0 != NULL) { ov19_021D4BE0(v0, ApplicationManager_Args(appMan)); - ov19_021D61B0(&(v0->unk_114), &v0->unk_00, v0); + BoxGraphics_Load(&(v0->unk_114), &v0->unk_00, v0); - v0->unk_1B0 = 0; - v0->unk_1A8 = ov19_021D0ECC(v0); + v0->cursorLocationHandlerState = 0; + v0->cursorLocationInputHandler = ov19_GetCursorLocationInputHandler(v0); - ov19_021D0EB0(v0, ov19_021D0F20); + ov19_RegisterBoxApplicationAction(v0, ov19_021D0F20); } return 1; @@ -297,20 +312,20 @@ int ov19_021D0DEC(ApplicationManager *appMan, int *param1) { UnkStruct_ov19_021D5DF8 *v0 = ApplicationManager_Data(appMan); - if (v0->unk_1AC != NULL) { - v0->unk_1AC(v0, &(v0->unk_1B4)); + if (v0->boxApplicationAction != NULL) { + v0->boxApplicationAction(v0, &(v0->boxApplicationActionState)); return 0; } else { - if (v0->unk_1A8 != NULL) { - if (gSystem.pressedKeys & PAD_BUTTON_Y) { - if (ov19_021D6628(v0->unk_114) == 1) { + if (v0->cursorLocationInputHandler != NULL) { + if (JOY_NEW(PAD_BUTTON_Y)) { + if (ov19_CheckAllTasksDone(v0->unk_114) == 1) { ov19_ToggleCursorFastMode(&v0->unk_00); - ov19_021D6594(v0->unk_114, 43); + ov19_BoxTaskHandler(v0->unk_114, FUNC_ov19_021D7340); return 0; } } - return v0->unk_1A8(v0); + return v0->cursorLocationInputHandler(v0); } } @@ -328,91 +343,91 @@ int ov19_021D0E58(ApplicationManager *appMan, int *param1) ResetChatotCryDataStatus(chatotCry); } - ov19_021D64A0(v0->unk_114); + BoxGraphics_Free(v0->unk_114); ov19_021D4D58(v0); - Heap_Destroy(HEAP_ID_9); - Heap_Destroy(HEAP_ID_10); + Heap_Destroy(HEAP_ID_BOX_DATA); + Heap_Destroy(HEAP_ID_BOX_GRAPHICS); return 1; } -static void ov19_021D0EA0(UnkStruct_ov19_021D5DF8 *param0, UnkFuncPtr_ov19_021D0EA0 param1) +static void ov19_RegisterCursorLocationInputHandler(UnkStruct_ov19_021D5DF8 *param0, CursorLocationInputHandler cursorLocationInputHandler) { - param0->unk_1A8 = param1; - param0->unk_1B0 = 0; + param0->cursorLocationInputHandler = cursorLocationInputHandler; + param0->cursorLocationHandlerState = 0; } -static void ov19_021D0EB0(UnkStruct_ov19_021D5DF8 *param0, UnkFuncPtr_ov19_021D0EB0 param1) +static void ov19_RegisterBoxApplicationAction(UnkStruct_ov19_021D5DF8 *param0, BoxApplicationAction boxApplicationAction) { - param0->unk_1AC = param1; - param0->unk_1B4 = 0; + param0->boxApplicationAction = boxApplicationAction; + param0->boxApplicationActionState = 0; } -static void ov19_021D0EC0(UnkStruct_ov19_021D5DF8 *param0) +static void ov19_ClearBoxApplicationAction(UnkStruct_ov19_021D5DF8 *param0) { - param0->unk_1AC = NULL; + param0->boxApplicationAction = NULL; } -static UnkFuncPtr_ov19_021D0EA0 ov19_021D0ECC(UnkStruct_ov19_021D5DF8 *param0) +static CursorLocationInputHandler ov19_GetCursorLocationInputHandler(UnkStruct_ov19_021D5DF8 *param0) { switch (ov19_GetCursorLocation(&(param0->unk_00))) { case CURSOR_IN_BOX: default: - return ov19_021D0FF0; + return ov19_CursorInBoxInputHandler; case CURSOR_IN_PARTY: - return ov19_021D1270; + return ov19_CursorInPartyInputHandler; case CURSOR_ON_BOX_HEADER: - return ov19_021D15C0; + return ov19_CursorOnHeaderInputHandler; case CURSOR_ON_CLOSE_BUTTON: - return ov19_021D17AC; + return ov19_CursorOnCloseInputHandler; case CURSOR_ON_PARTY_BUTTON: - return ov19_021D19B8; + return ov19_CursorOnPartyButtonInputHandler; } } -static void ov19_021D0F14(UnkStruct_ov19_021D5DF8 *param0) +static void ov19_FlagRecordBoxUseInJournal(UnkStruct_ov19_021D5DF8 *param0) { - param0->unk_118->unk_08 = 1; + param0->unk_118->recordBoxUseInJournal = TRUE; } -static void ov19_021D0F20(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +static void ov19_021D0F20(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { + switch (*state) { case 0: - ov19_021D6594(param0->unk_114, 0); - (*param1)++; + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6694); + (*state)++; break; case 1: - if (ov19_021D6600(param0->unk_114, 0)) { - ov19_021D6594(param0->unk_114, 1); - (*param1)++; + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D6694)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack0); + (*state)++; } break; case 2: - if (ov19_021D6600(param0->unk_114, 1)) { - ov19_021D0EC0(param0); + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack0)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D0F88(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +static void ov19_ReturnToBoxFade1Action(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { + switch (*state) { case 0: - ov19_021D6594(param0->unk_114, 0); - (*param1)++; + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6694); + (*state)++; break; case 1: - if (ov19_021D6600(param0->unk_114, 0)) { - ov19_021D6594(param0->unk_114, 2); - (*param1)++; + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D6694)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack1); + (*state)++; } break; case 2: - if (ov19_021D6600(param0->unk_114, 2)) { - ov19_021D0EC0(param0); + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack1)) { + ov19_ClearBoxApplicationAction(param0); } break; } @@ -420,10 +435,10 @@ static void ov19_021D0F88(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) static inline void inline_ov19_021D0FF0_sub1(UnkStruct_ov19_021D5DF8 *wk) { - ov19_021D5B70(&wk->unk_00); + ov19_ToggleCompareMonSlot(&wk->unk_00); ov19_PreviewBoxMon(&wk->unk_00, wk->unk_00.cursor.mon, wk); - ov19_021D6594(wk->unk_114, 49); - ov19_021D6594(wk->unk_114, 6); + ov19_BoxTaskHandler(wk->unk_114, FUNC_ov19_021D7408); + ov19_BoxTaskHandler(wk->unk_114, FUNC_BoxGraphics_PreviewMon); } static inline int inline_ov19_021D0FF0(UnkStruct_ov19_021D5DF8 *param0) @@ -432,11 +447,11 @@ static inline int inline_ov19_021D0FF0(UnkStruct_ov19_021D5DF8 *param0) if (ov19_GetBoxMode(¶m0->unk_00) != PC_MODE_COMPARE) { switch (param0->touchScreenButtonPressed) { case 0: - ov19_021D0EB0(param0, ov19_021D4640); + ov19_RegisterBoxApplicationAction(param0, ov19_021D4640); break; case 1: if (ov19_GetBoxMode(¶m0->unk_00) != PC_MODE_MOVE_ITEMS) { - ov19_021D0EB0(param0, ov19_021D4938); + ov19_RegisterBoxApplicationAction(param0, ov19_021D4938); } else { Sound_PlayEffect(SEQ_SE_DP_BOX03); } @@ -445,7 +460,7 @@ static inline int inline_ov19_021D0FF0(UnkStruct_ov19_021D5DF8 *param0) } else { switch (param0->touchScreenButtonPressed) { case 0: - if ((ov19_021D5F9C(¶m0->unk_00) == 0) && (ov19_IsMonUnderCursor(¶m0->unk_00) == TRUE)) { + if ((ov19_GetCompareMonSlot(¶m0->unk_00) == 0) && (ov19_IsMonUnderCursor(¶m0->unk_00) == TRUE)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); inline_ov19_021D0FF0_sub1(param0); return 1; @@ -454,7 +469,7 @@ static inline int inline_ov19_021D0FF0(UnkStruct_ov19_021D5DF8 *param0) } break; case 1: - if ((ov19_021D5F9C(¶m0->unk_00) == 1) && (ov19_IsMonUnderCursor(¶m0->unk_00) == TRUE)) { + if ((ov19_GetCompareMonSlot(¶m0->unk_00) == 1) && (ov19_IsMonUnderCursor(¶m0->unk_00) == TRUE)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); inline_ov19_021D0FF0_sub1(param0); return 1; @@ -465,7 +480,7 @@ static inline int inline_ov19_021D0FF0(UnkStruct_ov19_021D5DF8 *param0) case 2: Sound_PlayEffect(SEQ_SE_DP_DECIDE); ov19_021D5B80(¶m0->unk_00); - ov19_021D6594(param0->unk_114, 50); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7424); return 1; } } @@ -474,61 +489,67 @@ static inline int inline_ov19_021D0FF0(UnkStruct_ov19_021D5DF8 *param0) return 0; } -static int ov19_021D0FF0(UnkStruct_ov19_021D5DF8 *param0) +enum CursorInBoxState { + CURSOR_IN_BOX_WAIT_FOR_INPUT, + CURSOR_IN_BOX_WAIT_FOR_MOVE_CURSOR, + CURSOR_IN_BOX_WAIT_FOR_TOUCHSCREEN_DONE +}; + +static int ov19_CursorInBoxInputHandler(UnkStruct_ov19_021D5DF8 *param0) { - switch (param0->unk_1B0) { - case 0: + switch (param0->cursorLocationHandlerState) { + case CURSOR_IN_BOX_WAIT_FOR_INPUT: if (JOY_NEW(PAD_BUTTON_A)) { if (ov19_IsMonAvailableToCursor(¶m0->unk_00)) { if (ov19_GetBoxMode(¶m0->unk_00) != PC_MODE_MOVE_ITEMS) { - ov19_021D0EB0(param0, ov19_021D20A4); + ov19_RegisterBoxApplicationAction(param0, ov19_MonCursorMenuAction); } else { - ov19_021D0EB0(param0, ov19_021D2308); + ov19_RegisterBoxApplicationAction(param0, ov19_MonItemMenuAction); } break; } } if (JOY_NEW(PAD_BUTTON_B)) { - ov19_021D0EB0(param0, ov19_021D1F5C); + ov19_RegisterBoxApplicationAction(param0, ov19_ContinueBoxOperationsAction); break; } if (JOY_HELD(PAD_BUTTON_L)) { ov19_LoadLeftBoxCustomization(¶m0->unk_00); - ov19_021D0EB0(param0, ov19_021D45A8); + ov19_RegisterBoxApplicationAction(param0, ov19_ChangeToNewBoxAction); break; } if (JOY_HELD(PAD_BUTTON_R)) { ov19_LoadRightBoxCustomization(&(param0->unk_00)); - ov19_021D0EB0(param0, ov19_021D45A8); + ov19_RegisterBoxApplicationAction(param0, ov19_ChangeToNewBoxAction); break; } if (ov19_TryMoveCursorFromUserInput(gSystem.heldKeys, param0)) { - ov19_021D6594(param0->unk_114, 5); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } - param0->unk_1B0++; + param0->cursorLocationHandlerState++; break; } if (inline_ov19_021D0FF0(param0)) { - param0->unk_1B0 = 2; + param0->cursorLocationHandlerState = CURSOR_IN_BOX_WAIT_FOR_TOUCHSCREEN_DONE; } break; - case 1: - if (ov19_021D6600(param0->unk_114, 5)) { - ov19_021D0EA0(param0, ov19_021D0ECC(param0)); + case CURSOR_IN_BOX_WAIT_FOR_MOVE_CURSOR: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_MoveCursor)) { + ov19_RegisterCursorLocationInputHandler(param0, ov19_GetCursorLocationInputHandler(param0)); } break; - case 2: - if (ov19_021D6628(param0->unk_114)) { - param0->unk_1B0 = 0; + case CURSOR_IN_BOX_WAIT_FOR_TOUCHSCREEN_DONE: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + param0->cursorLocationHandlerState = CURSOR_IN_BOX_WAIT_FOR_INPUT; } break; } @@ -551,21 +572,31 @@ static BOOL ov19_IsPreviewedMonHoldingMailOrHasBallCapsule(UnkStruct_ov19_021D5D return FALSE; } -static int ov19_021D1270(UnkStruct_ov19_021D5DF8 *param0) +enum CursorInPartyState { + CURSOR_IN_PARTY_WAIT_FOR_INPUT, + CURSOR_IN_PARTY_WAIT_FOR_MOVE_CURSOR, + CURSOR_IN_PARTY_LEAVE_PARTY, + CURSOR_IN_PARTY_RETURN_TO_BOX, + CURSOR_IN_PARTY_WAIT_FOR_MOVE_CURSOR_TO_BOX, + CURSOR_IN_PARTY_CONFIRM_MESSAGE, + CURSOR_IN_PARTY_WAIT_FOR_TOUCHSCREEN_DONE +}; + +static int ov19_CursorInPartyInputHandler(UnkStruct_ov19_021D5DF8 *param0) { - switch (param0->unk_1B0) { - case 0: + switch (param0->cursorLocationHandlerState) { + case CURSOR_IN_PARTY_WAIT_FOR_INPUT: if (JOY_NEW(PAD_BUTTON_A)) { if (ov19_GetCursorPartyPosition(¶m0->unk_00) == MAX_PARTY_SIZE) { - param0->unk_1B0 = 2; + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_LEAVE_PARTY; break; } if (ov19_IsMonAvailableToCursor(¶m0->unk_00)) { if (ov19_GetBoxMode(¶m0->unk_00) != PC_MODE_MOVE_ITEMS) { - ov19_021D0EB0(param0, ov19_021D20A4); + ov19_RegisterBoxApplicationAction(param0, ov19_MonCursorMenuAction); } else { - ov19_021D0EB0(param0, ov19_021D2308); + ov19_RegisterBoxApplicationAction(param0, ov19_MonItemMenuAction); } break; } @@ -573,79 +604,79 @@ static int ov19_021D1270(UnkStruct_ov19_021D5DF8 *param0) } if (JOY_NEW(PAD_BUTTON_B) || JOY_NEW(PAD_KEY_RIGHT) && ov19_GetCursorPartyPosition(¶m0->unk_00) & 1 || JOY_NEW(PAD_KEY_RIGHT) && ov19_GetCursorPartyPosition(¶m0->unk_00) == MAX_PARTY_SIZE) { - param0->unk_1B0 = 2; + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_LEAVE_PARTY; break; } if (ov19_TryMoveCursorFromUserInput(gSystem.heldKeys, param0)) { - ov19_021D6594(param0->unk_114, 5); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } - param0->unk_1B0 = 1; + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_WAIT_FOR_MOVE_CURSOR; break; } if (inline_ov19_021D0FF0(param0)) { - param0->unk_1B0 = 6; + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_WAIT_FOR_TOUCHSCREEN_DONE; break; } break; - case 1: - if (ov19_021D6600(param0->unk_114, 5)) { - param0->unk_1B0 = 0; + case CURSOR_IN_PARTY_WAIT_FOR_MOVE_CURSOR: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_MoveCursor)) { + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_WAIT_FOR_INPUT; } break; - case 2: + case CURSOR_IN_PARTY_LEAVE_PARTY: if (ov19_GetBoxMode(¶m0->unk_00) == PC_MODE_DEPOSIT) { - ov19_021D0EB0(param0, ov19_021D1F5C); - param0->unk_1B0 = 0; + ov19_RegisterBoxApplicationAction(param0, ov19_ContinueBoxOperationsAction); + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_WAIT_FOR_INPUT; } else { int messageID; if (ov19_GetPreviewMonSource(¶m0->unk_00) != PREVIEW_MON_UNDER_CURSOR && ov19_IsPreviewedMonHoldingMailOrHasBallCapsule(param0, &messageID)) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, messageID); - ov19_021D6594(param0->unk_114, 24); - param0->unk_1B0 = 5; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_CONFIRM_MESSAGE; } else { - ov19_021D6594(param0->unk_114, 36); - param0->unk_1B0 = 3; + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7138); + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_RETURN_TO_BOX; } } break; - case 3: - if (ov19_021D6600(param0->unk_114, 36)) { + case CURSOR_IN_PARTY_RETURN_TO_BOX: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D7138)) { ov19_ReturnCursorToBox(param0); - ov19_021D6594(param0->unk_114, 5); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } - param0->unk_1B0 = 4; + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_WAIT_FOR_MOVE_CURSOR_TO_BOX; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 5)) { - ov19_021D0EA0(param0, ov19_021D0ECC(param0)); + case CURSOR_IN_PARTY_WAIT_FOR_MOVE_CURSOR_TO_BOX: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_MoveCursor)) { + ov19_RegisterCursorLocationInputHandler(param0, ov19_GetCursorLocationInputHandler(param0)); } break; - case 5: - if (ov19_021D6600(param0->unk_114, 24) == 0) { + case CURSOR_IN_PARTY_CONFIRM_MESSAGE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage) == FALSE) { break; } if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - param0->unk_1B0 = 0; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_WAIT_FOR_INPUT; } break; - case 6: - if (ov19_021D6628(param0->unk_114)) { - param0->unk_1B0 = 0; + case CURSOR_IN_PARTY_WAIT_FOR_TOUCHSCREEN_DONE: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + param0->cursorLocationHandlerState = CURSOR_IN_PARTY_WAIT_FOR_INPUT; } break; } @@ -653,48 +684,53 @@ static int ov19_021D1270(UnkStruct_ov19_021D5DF8 *param0) return 0; } -static int ov19_021D15C0(UnkStruct_ov19_021D5DF8 *param0) +enum CursorOnHeaderState { + CURSOR_ON_HEADER_WAIT_FOR_INPUT, + CURSOR_ON_HEADER_WAIT_FOR_MOVE_CURSOR +}; + +static int ov19_CursorOnHeaderInputHandler(UnkStruct_ov19_021D5DF8 *param0) { - switch (param0->unk_1B0) { - case 0: - if (gSystem.heldKeys & (PAD_KEY_LEFT | PAD_BUTTON_L)) { + switch (param0->cursorLocationHandlerState) { + case CURSOR_ON_HEADER_WAIT_FOR_INPUT: + if (JOY_HELD(PAD_KEY_LEFT | PAD_BUTTON_L)) { ov19_LoadLeftBoxCustomization(¶m0->unk_00); - ov19_021D0EB0(param0, ov19_021D45A8); + ov19_RegisterBoxApplicationAction(param0, ov19_ChangeToNewBoxAction); break; } - if (gSystem.heldKeys & (PAD_KEY_RIGHT | PAD_BUTTON_R)) { + if (JOY_HELD(PAD_KEY_RIGHT | PAD_BUTTON_R)) { ov19_LoadRightBoxCustomization(&(param0->unk_00)); - ov19_021D0EB0(param0, ov19_021D45A8); + ov19_RegisterBoxApplicationAction(param0, ov19_ChangeToNewBoxAction); break; } if (JOY_NEW(PAD_BUTTON_A)) { - ov19_021D0EB0(param0, ov19_021D2694); + ov19_RegisterBoxApplicationAction(param0, ov19_BoxHeaderMenuAction); break; } if (JOY_NEW(PAD_BUTTON_B)) { - ov19_021D0EB0(param0, ov19_021D1F5C); + ov19_RegisterBoxApplicationAction(param0, ov19_ContinueBoxOperationsAction); break; } if (ov19_TryMoveCursorFromUserInput(gSystem.heldKeys, param0)) { - ov19_021D6594(param0->unk_114, 5); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } - param0->unk_1B0 = 1; + param0->cursorLocationHandlerState = CURSOR_ON_HEADER_WAIT_FOR_MOVE_CURSOR; break; } inline_ov19_021D0FF0(param0); break; - case 1: - if (ov19_021D6600(param0->unk_114, 5)) { - ov19_021D0EA0(param0, ov19_021D0ECC(param0)); + case CURSOR_ON_HEADER_WAIT_FOR_MOVE_CURSOR: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_MoveCursor)) { + ov19_RegisterCursorLocationInputHandler(param0, ov19_GetCursorLocationInputHandler(param0)); } break; } @@ -702,53 +738,59 @@ static int ov19_021D15C0(UnkStruct_ov19_021D5DF8 *param0) return 0; } -static int ov19_021D17AC(UnkStruct_ov19_021D5DF8 *param0) +enum CursorOnCloseState { + CURSOR_CLOSE_WAIT_FOR_INPUT, + CURSOR_CLOSE_WAIT_FOR_BOX_CHANGE, + CURSOR_CLOSE_WAIT_FOR_CURSOR_MOVE +}; + +static int ov19_CursorOnCloseInputHandler(UnkStruct_ov19_021D5DF8 *param0) { - switch (param0->unk_1B0) { - case 0: + switch (param0->cursorLocationHandlerState) { + case CURSOR_CLOSE_WAIT_FOR_INPUT: if (JOY_NEW(PAD_BUTTON_A)) { - ov19_021D0EB0(param0, ov19_021D1DEC); + ov19_RegisterBoxApplicationAction(param0, ov19_CloseBoxAction); break; } if (JOY_NEW(PAD_BUTTON_B)) { - ov19_021D0EB0(param0, ov19_021D1F5C); + ov19_RegisterBoxApplicationAction(param0, ov19_ContinueBoxOperationsAction); break; } if (JOY_HELD(PAD_BUTTON_L)) { ov19_LoadLeftBoxCustomization(¶m0->unk_00); - ov19_021D0EB0(param0, ov19_021D45A8); + ov19_RegisterBoxApplicationAction(param0, ov19_ChangeToNewBoxAction); break; } if (JOY_HELD(PAD_BUTTON_R)) { ov19_LoadRightBoxCustomization(&(param0->unk_00)); - ov19_021D0EB0(param0, ov19_021D45A8); + ov19_RegisterBoxApplicationAction(param0, ov19_ChangeToNewBoxAction); break; } if (ov19_TryMoveCursorFromUserInput(gSystem.heldKeys, param0)) { - ov19_021D6594(param0->unk_114, 5); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } - param0->unk_1B0 = 2; + param0->cursorLocationHandlerState = CURSOR_CLOSE_WAIT_FOR_CURSOR_MOVE; break; } inline_ov19_021D0FF0(param0); break; - case 1: - if (ov19_021D6600(param0->unk_114, 4)) { - param0->unk_1B0 = 0; + case CURSOR_CLOSE_WAIT_FOR_BOX_CHANGE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox)) { + param0->cursorLocationHandlerState = CURSOR_CLOSE_WAIT_FOR_INPUT; } break; - case 2: - if (ov19_021D6600(param0->unk_114, 5)) { - ov19_021D0EA0(param0, ov19_021D0ECC(param0)); + case CURSOR_CLOSE_WAIT_FOR_CURSOR_MOVE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_MoveCursor)) { + ov19_RegisterCursorLocationInputHandler(param0, ov19_GetCursorLocationInputHandler(param0)); } break; } @@ -756,86 +798,95 @@ static int ov19_021D17AC(UnkStruct_ov19_021D5DF8 *param0) return 0; } -static int ov19_021D19B8(UnkStruct_ov19_021D5DF8 *param0) +enum CursorOnPartyButtonState { + CURSOR_ON_PARTY_BUTTON_STATE_WAIT_FOR_INPUT, + CURSOR_ON_PARTY_BUTTON_ANIMATE_PRESS_BUTTON, + CURSOR_ON_PARTY_BUTTON_WAIT_FOR_OPEN_PARTY, + CURSOR_ON_PARTY_BUTTON_WAIT_FOR_CHANGE_BOX, + CURSOR_ON_PARTY_BUTTON_WAIT_FOR_MOVE_CURSOR, + CURSOR_ON_PARTY_BUTTON_CONFIRM_MESSAGE +}; + +static int ov19_CursorOnPartyButtonInputHandler(UnkStruct_ov19_021D5DF8 *param0) { - switch (param0->unk_1B0) { - case 0: + switch (param0->cursorLocationHandlerState) { + case CURSOR_ON_PARTY_BUTTON_STATE_WAIT_FOR_INPUT: if (JOY_NEW(PAD_BUTTON_A)) { if (ov19_GetBoxMode(¶m0->unk_00) != PC_MODE_WITHDRAW) { - ov19_021D6594(param0->unk_114, 34); - param0->unk_1B0 = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PressBoxButton); + param0->cursorLocationHandlerState = CURSOR_ON_PARTY_BUTTON_ANIMATE_PRESS_BUTTON; } else { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_PickOne); - ov19_021D6594(param0->unk_114, 24); - param0->unk_1B0 = 5; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + param0->cursorLocationHandlerState = CURSOR_ON_PARTY_BUTTON_CONFIRM_MESSAGE; } break; } if (JOY_NEW(PAD_BUTTON_B)) { - ov19_021D0EB0(param0, ov19_021D1F5C); + ov19_RegisterBoxApplicationAction(param0, ov19_ContinueBoxOperationsAction); break; } if (JOY_HELD(PAD_BUTTON_L)) { ov19_LoadLeftBoxCustomization(¶m0->unk_00); - ov19_021D0EB0(param0, ov19_021D45A8); + ov19_RegisterBoxApplicationAction(param0, ov19_ChangeToNewBoxAction); break; } if (JOY_HELD(PAD_BUTTON_R)) { ov19_LoadRightBoxCustomization(&(param0->unk_00)); - ov19_021D0EB0(param0, ov19_021D45A8); + ov19_RegisterBoxApplicationAction(param0, ov19_ChangeToNewBoxAction); break; } if (ov19_TryMoveCursorFromUserInput(gSystem.heldKeys, param0)) { - ov19_021D6594(param0->unk_114, 5); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } - param0->unk_1B0 = 4; + param0->cursorLocationHandlerState = CURSOR_ON_PARTY_BUTTON_WAIT_FOR_MOVE_CURSOR; break; } inline_ov19_021D0FF0(param0); break; - case 1: - if (ov19_021D6600(param0->unk_114, 34)) { - ov19_021D6594(param0->unk_114, 35); - param0->unk_1B0 = 2; + case CURSOR_ON_PARTY_BUTTON_ANIMATE_PRESS_BUTTON: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_PressBoxButton)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_OpenPartyPopup); + param0->cursorLocationHandlerState = CURSOR_ON_PARTY_BUTTON_WAIT_FOR_OPEN_PARTY; } break; - case 2: - if (ov19_021D6600(param0->unk_114, 35)) { + case CURSOR_ON_PARTY_BUTTON_WAIT_FOR_OPEN_PARTY: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_OpenPartyPopup)) { ov19_MoveCursorToParty(param0); - ov19_021D6594(param0->unk_114, 5); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } - param0->unk_1B0 = 4; + param0->cursorLocationHandlerState = CURSOR_ON_PARTY_BUTTON_WAIT_FOR_MOVE_CURSOR; } break; - case 3: - if (ov19_021D6600(param0->unk_114, 4)) { - param0->unk_1B0 = 0; + case CURSOR_ON_PARTY_BUTTON_WAIT_FOR_CHANGE_BOX: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox)) { + param0->cursorLocationHandlerState = CURSOR_ON_PARTY_BUTTON_STATE_WAIT_FOR_INPUT; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 5)) { - ov19_021D0EA0(param0, ov19_021D0ECC(param0)); + case CURSOR_ON_PARTY_BUTTON_WAIT_FOR_MOVE_CURSOR: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_MoveCursor)) { + ov19_RegisterCursorLocationInputHandler(param0, ov19_GetCursorLocationInputHandler(param0)); } break; - case 5: + case CURSOR_ON_PARTY_BUTTON_CONFIRM_MESSAGE: if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - param0->unk_1B0 = 0; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + param0->cursorLocationHandlerState = 0; } break; } @@ -843,10 +894,18 @@ static int ov19_021D19B8(UnkStruct_ov19_021D5DF8 *param0) return 0; } -static void ov19_021D1C84(UnkStruct_ov19_021D5DF8 *param0) +static void ov19_InitSummary(UnkStruct_ov19_021D5DF8 *param0) { static const u8 summaryPages[] = { - 0, 1, 2, 4, 3, 5, 6, 7, 8 + SUMMARY_PAGE_INFO, + SUMMARY_PAGE_MEMO, + SUMMARY_PAGE_SKILLS, + SUMMARY_PAGE_CONDITION, + SUMMARY_PAGE_BATTLE_MOVES, + SUMMARY_PAGE_CONTEST_MOVES, + SUMMARY_PAGE_RIBBONS, + SUMMARY_PAGE_EXIT, + SUMMARY_PAGE_MAX }; if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_IN_CURSOR) { @@ -884,15 +943,15 @@ static void ov19_021D1C84(UnkStruct_ov19_021D5DF8 *param0) PokemonSummaryScreen_SetPlayerProfile(&(param0->monSummary), SaveData_GetTrainerInfo(param0->saveData)); } -static int ov19_021D1DAC(UnkStruct_ov19_021D5DF8 *param0) +static int ov19_LogOffScreenFade(UnkStruct_ov19_021D5DF8 *param0) { - switch (param0->unk_1B0) { + switch (param0->cursorLocationHandlerState) { case 0: - ov19_021D6594(param0->unk_114, 51); - param0->unk_1B0++; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlackLogOff); + param0->cursorLocationHandlerState++; break; case 1: - if (ov19_021D6628(param0->unk_114)) { + if (ov19_CheckAllTasksDone(param0->unk_114)) { return 1; } } @@ -900,644 +959,725 @@ static int ov19_021D1DAC(UnkStruct_ov19_021D5DF8 *param0) return 0; } -static void ov19_021D1DEC(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum CloseBoxState { + CLOSE_BOX_START, + CLOSE_BOX_SHOW_MENU, + CLOSE_BOX_YES_NO, + CLOSE_BOX_UNUSED, + CLOSE_BOX_CANNOT_CLOSE, + CLOSE_BOX_CONFIRM_MESSAGE, + CLOSE_BOX_END +}; + +static void ov19_CloseBoxAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: + switch (*state) { + case CLOSE_BOX_START: if (ov19_GetBoxMode(&(param0->unk_00)) == PC_MODE_MOVE_ITEMS && ov19_GetCursorItem(&(param0->unk_00)) != ITEM_NONE) { - ov19_021D0EB0(param0, ov19_021D4184); + ov19_RegisterBoxApplicationAction(param0, ov19_PutAwayItemAction); break; } if (ov19_GetPreviewMonSource(&(param0->unk_00)) != PREVIEW_MON_UNDER_CURSOR) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_HoldingMon); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 4; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = CLOSE_BOX_CANNOT_CLOSE; break; } else { - ov19_021D6594(param0->unk_114, 34); - (*param1) = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PressBoxButton); + *state = CLOSE_BOX_SHOW_MENU; } break; - case 1: - if (ov19_021D6600(param0->unk_114, 34)) { + case CLOSE_BOX_SHOW_MENU: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_PressBoxButton)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); ov19_SetBoxMessage(¶m0->unk_00, BoxText_ConfirmExit); - ov19_021DF964(&(param0->unk_00), 1); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 2; + BoxMenu_FillYesNo(&(param0->unk_00), 1); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = CLOSE_BOX_YES_NO; } break; - case 2: - switch (ov19_021DFD2C(&(param0->unk_00))) { - case -2: - ov19_021D6594(param0->unk_114, 28); + case CLOSE_BOX_YES_NO: + switch (BoxMenu_GetMenuNavigation(&(param0->unk_00))) { + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); break; - case -1: - case UnkEnum_021DFB94_55: + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_NO: Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 26); - (*param1) = 6; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = CLOSE_BOX_END; break; - case UnkEnum_021DFB94_54: - ov19_021D0EA0(param0, ov19_021D1DAC); - ov19_021D0EC0(param0); + case BOX_MENU_YES: + ov19_RegisterCursorLocationInputHandler(param0, ov19_LogOffScreenFade); + ov19_ClearBoxApplicationAction(param0); break; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 25) == 0) { + case CLOSE_BOX_CANNOT_CLOSE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ShowMenu) == FALSE) { break; } - (*param1) = 5; - case 5: - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - (*param1) = 6; + *state = CLOSE_BOX_CONFIRM_MESSAGE; + case CLOSE_BOX_CONFIRM_MESSAGE: + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = CLOSE_BOX_END; } break; - case 6: - if (ov19_021D6600(param0->unk_114, 26)) { - ov19_021D0EC0(param0); + case CLOSE_BOX_END: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox)) { + ov19_ClearBoxApplicationAction(param0); } break; } } +enum ContinueBoxOperationsState { + CONTINUE_OPERATIONS_START, + CONTINUE_OPERATIONS_UNUSED, + CONTINUE_OPERATIONS_WAIT_FOR_MESSAGE, + CONTINUE_OPERATIONS_CONFIRM_MESSAGE, + CONTINUE_OPERATIONS_END, + CONTINUE_OPERATIONS_YES_NO +}; -static void ov19_021D1F5C(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +static void ov19_ContinueBoxOperationsAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: + switch (*state) { + case CONTINUE_OPERATIONS_START: if (ov19_GetPreviewMonSource(&(param0->unk_00)) != PREVIEW_MON_UNDER_CURSOR) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_HoldingMon); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 2; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = CONTINUE_OPERATIONS_WAIT_FOR_MESSAGE; break; } else if (ov19_GetBoxMode(¶m0->unk_00) == PC_MODE_MOVE_ITEMS && ov19_GetCursorItem(¶m0->unk_00) != ITEM_NONE) { - ov19_021D0EB0(param0, ov19_021D4184); + ov19_RegisterBoxApplicationAction(param0, ov19_PutAwayItemAction); break; } else { Sound_PlayEffect(SEQ_SE_DP_DECIDE); ov19_SetBoxMessage(¶m0->unk_00, BoxText_ConfirmContinue); - ov19_021DF964(&(param0->unk_00), 0); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 5; + BoxMenu_FillYesNo(&(param0->unk_00), 0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = CONTINUE_OPERATIONS_YES_NO; } break; - case 5: - switch (ov19_021DFD2C(&(param0->unk_00))) { - case -2: - ov19_021D6594(param0->unk_114, 28); + case CONTINUE_OPERATIONS_YES_NO: + switch (BoxMenu_GetMenuNavigation(&(param0->unk_00))) { + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); break; - case -1: - case UnkEnum_021DFB94_55: - ov19_021D0EA0(param0, ov19_021D1DAC); - ov19_021D0EC0(param0); + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_NO: + ov19_RegisterCursorLocationInputHandler(param0, ov19_LogOffScreenFade); + ov19_ClearBoxApplicationAction(param0); break; - case UnkEnum_021DFB94_54: - ov19_021D6594(param0->unk_114, 26); - (*param1) = 4; + case BOX_MENU_YES: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = CONTINUE_OPERATIONS_END; break; } break; - case 2: - if (ov19_021D6600(param0->unk_114, 25) == 0) { + case CONTINUE_OPERATIONS_WAIT_FOR_MESSAGE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ShowMenu) == FALSE) { break; } - (*param1) = 3; - case 3: - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - (*param1) = 4; + *state = CONTINUE_OPERATIONS_CONFIRM_MESSAGE; + case CONTINUE_OPERATIONS_CONFIRM_MESSAGE: + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = CONTINUE_OPERATIONS_END; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 26)) { - ov19_021D0EC0(param0); + case CONTINUE_OPERATIONS_END: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D20A4(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum MonCursorMenuState { + MON_CURSOR_MENU_START, + MON_CURSOR_MENU_SHOW_MENU, + MON_CURSOR_MENU_NAVIGATE_MENU, + MON_CURSOR_MENU_ITEM_SELECTED, + MON_CURSOR_MENU_END_WHEN_READY, + MON_CURSOR_MENU_END +}; + +static void ov19_MonCursorMenuAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: - StringTemplate_SetNickname(param0->unk_19C, 0, ov19_GetPreviewedBoxMon(¶m0->unk_00)); + switch (*state) { + case MON_CURSOR_MENU_START: + StringTemplate_SetNickname(param0->MessageVariableBuffer, 0, ov19_GetPreviewedBoxMon(¶m0->unk_00)); ov19_SetBoxMessage(¶m0->unk_00, BoxText_MonSelected); - ov19_021DF990(¶m0->unk_00); + BoxMenu_FillTopLevelMenuItems(¶m0->unk_00); if (ov19_IsCursorFastMode(¶m0->unk_00)) { - param0->unk_1B8 = ov19_021DFDEC(¶m0->unk_00); - (*param1) = 3; + param0->menuItem = BoxMenu_GetDefaultMenuItem(¶m0->unk_00); + *state = MON_CURSOR_MENU_ITEM_SELECTED; } else { Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = MON_CURSOR_MENU_SHOW_MENU; } break; - case 1: - if (ov19_021D6600(param0->unk_114, 25) == 0) { + case MON_CURSOR_MENU_SHOW_MENU: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ShowMenu) == FALSE) { break; } - (*param1) = 2; - case 2: - param0->unk_1B8 = ov19_021DFD2C(&(param0->unk_00)); + *state = MON_CURSOR_MENU_NAVIGATE_MENU; + case MON_CURSOR_MENU_NAVIGATE_MENU: + param0->menuItem = BoxMenu_GetMenuNavigation(&(param0->unk_00)); - switch (param0->unk_1B8) { - case -3: + switch (param0->menuItem) { + case BOX_MENU_NAVIGATION_NONE: break; - case -2: - ov19_021D6594(param0->unk_114, 28); + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); break; - case -1: - case UnkEnum_021DFB94_43: + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_CANCEL: Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 26); - (*param1) = 4; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = MON_CURSOR_MENU_END_WHEN_READY; break; default: - (*param1) = 3; + *state = MON_CURSOR_MENU_ITEM_SELECTED; break; } break; - case 3: - switch (param0->unk_1B8) { - case UnkEnum_021DFB94_34: - if (ov19_GetCursorLocation(¶m0->unk_00) == CURSOR_IN_BOX && ov19_IsCursorFastMode(¶m0->unk_00) == 1) { - ov19_021D0EB0(param0, ov19_021D2B54); + case MON_CURSOR_MENU_ITEM_SELECTED: + switch (param0->menuItem) { + case BOX_MENU_MOVE: + if (ov19_GetCursorLocation(¶m0->unk_00) == CURSOR_IN_BOX && ov19_IsCursorFastMode(¶m0->unk_00) == TRUE) { + ov19_RegisterBoxApplicationAction(param0, ov19_MultiSelectAction); } else { - ov19_021D6594(param0->unk_114, 26); - ov19_021D0EB0(param0, ov19_021D2E1C); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_RegisterBoxApplicationAction(param0, ov19_PickUpMonAction); } break; - case UnkEnum_021DFB94_35: - ov19_021D6594(param0->unk_114, 26); - ov19_021D0EB0(param0, ov19_021D2F14); + case BOX_MENU_PLACE: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_RegisterBoxApplicationAction(param0, ov19_PlaceMonAction); break; - case UnkEnum_021DFB94_36: - ov19_021D6594(param0->unk_114, 26); - ov19_021D0EB0(param0, ov19_021D3010); + case BOX_MENU_SHIFT: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_RegisterBoxApplicationAction(param0, ov19_ShiftMonAction); break; - case UnkEnum_021DFB94_38: - ov19_021D0EB0(param0, ov19_021D30D0); + case BOX_MENU_WITHDRAW: + ov19_RegisterBoxApplicationAction(param0, ov19_WithdrawMonAction); break; - case UnkEnum_021DFB94_39: - ov19_021D0EB0(param0, ov19_021D3294); + case BOX_MENU_STORE: + ov19_RegisterBoxApplicationAction(param0, ov19_StoreMonAction); break; - case UnkEnum_021DFB94_41: - ov19_021D0EB0(param0, ov19_021D2A5C); + case BOX_MENU_MARK: + ov19_RegisterBoxApplicationAction(param0, ov19_MarkAction); break; - case UnkEnum_021DFB94_42: - ov19_021D0EB0(param0, ov19_021D35F8); + case BOX_MENU_RELEASE: + ov19_RegisterBoxApplicationAction(param0, ov19_ReleaseMonAction); break; - case UnkEnum_021DFB94_37: - ov19_021D0EB0(param0, ov19_021D3C28); + case BOX_MENU_SUMMARY: + ov19_RegisterBoxApplicationAction(param0, ov19_OpenSummaryAction); break; - case UnkEnum_021DFB94_40: { - if (ov19_GetPreviewedMonHeldItem(¶m0->unk_00) == 0) { - ov19_021D0EB0(param0, ov19_021D3D44); + case BOX_MENU_ITEM: { + if (ov19_GetPreviewedMonHeldItem(¶m0->unk_00) == ITEM_NONE) { + ov19_RegisterBoxApplicationAction(param0, ov19_GiveItemFromBagAction); } else { - ov19_021D0EB0(param0, ov19_021D3FB0); + ov19_RegisterBoxApplicationAction(param0, ov19_MonItemHeldAction); } } break; - case UnkEnum_021DFB94_52: - case UnkEnum_021DFB94_53: - ov19_021D5B70(¶m0->unk_00); + case BOX_MENU_SET_ON_LEFT: + case BOX_MENU_SET_ON_RIGHT: + ov19_ToggleCompareMonSlot(¶m0->unk_00); ov19_PreviewBoxMon(¶m0->unk_00, param0->unk_00.cursor.mon, param0); - ov19_021D6594(param0->unk_114, 26); - ov19_021D6594(param0->unk_114, 48); - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D73EC); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); Sound_PlayEffect(SEQ_SE_DP_DECIDE); - (*param1) = 5; + *state = MON_CURSOR_MENU_END; break; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 26)) { - ov19_021D0EC0(param0); + case MON_CURSOR_MENU_END_WHEN_READY: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox)) { + ov19_ClearBoxApplicationAction(param0); } break; - case 5: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case MON_CURSOR_MENU_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D2308(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum MonItemMenuState { + MON_ITEM_MENU_START, + MON_ITEM_MENU_WAIT_FOR_MENU, + MON_ITEM_MENU_NAVIGATE_MENU, + MON_ITEM_MENU_SELECTED, + MON_ITEM_MENU_END_WHEN_READY, + MON_ITEM_MENU_WAIT_FOR_ANIMATIONS, + MON_ITEM_MENU_END, + MON_ITEM_MENU_CONFIRM_MESSAGE +}; + +static void ov19_MonItemMenuAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: { + switch (*state) { + case MON_ITEM_MENU_START: u32 item = ov19_GetCursorItem(¶m0->unk_00); if (item != ITEM_NONE) { - StringTemplate_SetItemName(param0->unk_19C, ITEM_NONE, item); + StringTemplate_SetItemName(param0->MessageVariableBuffer, ITEM_NONE, item); ov19_SetBoxMessage(¶m0->unk_00, BoxText_ItemSelected); } else { item = ov19_GetPreviewedMonHeldItem(¶m0->unk_00); if (item != ITEM_NONE) { - StringTemplate_SetItemName(param0->unk_19C, 0, item); + StringTemplate_SetItemName(param0->MessageVariableBuffer, 0, item); ov19_SetBoxMessage(¶m0->unk_00, BoxText_ItemSelected); } else { ov19_SetBoxMessage(¶m0->unk_00, BoxText_GiveToMon); } } - ov19_021DFAD0(¶m0->unk_00); - } + BoxMenu_FillItemsMenu(¶m0->unk_00); if (ov19_IsPreviewedMonEgg(¶m0->unk_00)) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_EggsCantHoldItems); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 7; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = MON_ITEM_MENU_CONFIRM_MESSAGE; } else if (ov19_IsCursorFastMode(¶m0->unk_00)) { - param0->unk_1B8 = ov19_021DFDEC(¶m0->unk_00); - (*param1) = 3; + param0->menuItem = BoxMenu_GetDefaultMenuItem(¶m0->unk_00); + *state = MON_ITEM_MENU_SELECTED; } else { Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = MON_ITEM_MENU_WAIT_FOR_MENU; } break; - case 1: - if (ov19_021D6600(param0->unk_114, 25) == 0) { + case MON_ITEM_MENU_WAIT_FOR_MENU: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ShowMenu) == FALSE) { break; } - (*param1) = 2; - case 2: - param0->unk_1B8 = ov19_021DFD2C(&(param0->unk_00)); + *state = MON_ITEM_MENU_NAVIGATE_MENU; + case MON_ITEM_MENU_NAVIGATE_MENU: + param0->menuItem = BoxMenu_GetMenuNavigation(&(param0->unk_00)); - switch (param0->unk_1B8) { - case -3: + switch (param0->menuItem) { + case BOX_MENU_NAVIGATION_NONE: break; - case -2: - ov19_021D6594(param0->unk_114, 28); + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); break; - case -1: - case UnkEnum_021DFB94_51: + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_ITEMS_CANCEL: Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 26); - (*param1) = 4; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = MON_ITEM_MENU_END_WHEN_READY; break; default: Sound_PlayEffect(SEQ_SE_DP_DECIDE); - (*param1) = 3; + *state = MON_ITEM_MENU_SELECTED; break; } break; - case 3: - switch (param0->unk_1B8) { - case UnkEnum_021DFB94_46: + case MON_ITEM_MENU_SELECTED: + switch (param0->menuItem) { + case BOX_MENU_GIVE: if (ov19_GetCursorItem(¶m0->unk_00) == ITEM_GRISEOUS_ORB && BoxPokemon_GetValue(param0->unk_00.pcMonPreview.mon, MON_DATA_SPECIES, NULL) != SPECIES_GIRATINA) { - StringTemplate_SetItemName(param0->unk_19C, 0, ITEM_GRISEOUS_ORB); + StringTemplate_SetItemName(param0->MessageVariableBuffer, 0, ITEM_GRISEOUS_ORB); ov19_SetBoxMessage(¶m0->unk_00, BoxText_MonCantHoldItem); - ov19_021D6594(param0->unk_114, 24); - *param1 = 7; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = MON_ITEM_MENU_CONFIRM_MESSAGE; } else if (ov19_GetCursorItem(¶m0->unk_00) != ITEM_NONE) { ov19_GiveItemFromCursor(¶m0->unk_00, param0); - ov19_021D6594(param0->unk_114, 26); - ov19_021D6594(param0->unk_114, 20); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6CF8); Sound_PlayEffect(SEQ_SE_DP_DECIDE); - (*param1) = 5; + *state = MON_ITEM_MENU_WAIT_FOR_ANIMATIONS; } else { - ov19_021D0EB0(param0, ov19_021D3D44); + ov19_RegisterBoxApplicationAction(param0, ov19_GiveItemFromBagAction); } break; - case UnkEnum_021DFB94_47: + case BOX_MENU_TAKE: if (Item_IsMail(ov19_GetPreviewedMonHeldItem(¶m0->unk_00))) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_CantTakeMail); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 7; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = MON_ITEM_MENU_CONFIRM_MESSAGE; } else { ov19_PickUpHeldItem(¶m0->unk_00, param0); - ov19_021D0F14(param0); - ov19_021D6594(param0->unk_114, 26); - ov19_021D6594(param0->unk_114, 19); + ov19_FlagRecordBoxUseInJournal(param0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6CB0); Sound_PlayEffect(SEQ_SE_DP_DECIDE); - (*param1) = 5; + *state = MON_ITEM_MENU_WAIT_FOR_ANIMATIONS; } break; - case UnkEnum_021DFB94_48: - ov19_021D0EB0(param0, ov19_021D4390); + case BOX_MENU_INFO: + ov19_RegisterBoxApplicationAction(param0, ov19_DisplayItemInfoAction); break; - case UnkEnum_021DFB94_49: + case BOX_MENU_SWITCH: if (Item_IsMail(ov19_GetPreviewedMonHeldItem(¶m0->unk_00))) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_CantTakeMail); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 7; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = MON_ITEM_MENU_CONFIRM_MESSAGE; } else if (param0->unk_00.cursorItem == ITEM_GRISEOUS_ORB && (BoxPokemon_GetValue(param0->unk_00.pcMonPreview.mon, MON_DATA_SPECIES, NULL) != SPECIES_GIRATINA)) { - StringTemplate_SetItemName(param0->unk_19C, ITEM_NONE, ITEM_GRISEOUS_ORB); + StringTemplate_SetItemName(param0->MessageVariableBuffer, ITEM_NONE, ITEM_GRISEOUS_ORB); ov19_SetBoxMessage(¶m0->unk_00, BoxText_MonCantHoldItem); - ov19_021D6594(param0->unk_114, 24); - *param1 = 7; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = MON_ITEM_MENU_CONFIRM_MESSAGE; } else { ov19_SwapMonAndCursorItems(¶m0->unk_00, param0); - ov19_021D6594(param0->unk_114, 26); - ov19_021D6594(param0->unk_114, 21); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6D40); Sound_PlayEffect(SEQ_SE_DP_DECIDE); - (*param1) = 5; + *state = MON_ITEM_MENU_WAIT_FOR_ANIMATIONS; } break; - case UnkEnum_021DFB94_50: - ov19_021D0EB0(param0, ov19_021D4184); + case BOX_MENU_BAG: + ov19_RegisterBoxApplicationAction(param0, ov19_PutAwayItemAction); break; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 26)) { - ov19_021D0EC0(param0); + case MON_ITEM_MENU_END_WHEN_READY: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox)) { + ov19_ClearBoxApplicationAction(param0); } break; - case 5: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D6594(param0->unk_114, 6); - ov19_021D6594(param0->unk_114, 22); - *param1 = 6; + case MON_ITEM_MENU_WAIT_FOR_ANIMATIONS: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6D88); + *state = MON_ITEM_MENU_END; } break; - case 6: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case MON_ITEM_MENU_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; - case 7: - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - (*param1) = 6; + case MON_ITEM_MENU_CONFIRM_MESSAGE: + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = MON_ITEM_MENU_END; } break; } } -static void ov19_021D2694(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum BoxHeaderActionState { + BOX_HEADER_MENU_START, + BOX_HEADER_MENU_SHOW_MENU, + BOX_HEADER_MENU_NAVIGATE_MENU, + BOX_HEADER_MENU_ITEM_SELECTED, + BOX_HEADER_MENU_END_WHEN_READY, + BOX_HEADER_MENU_UNUSED1, + BOX_HEADER_MENU_UNUSED2, + BOX_HEADER_MENU_END +}; + +static void ov19_BoxHeaderMenuAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: + switch (*state) { + case BOX_HEADER_MENU_START: ov19_SetBoxMessage(¶m0->unk_00, BoxText_WhatDo); - ov19_021DFB50(¶m0->unk_00); + BoxMenu_FillHeaderMenu(¶m0->unk_00); if (ov19_IsCursorFastMode(¶m0->unk_00)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); - param0->unk_1B8 = ov19_021DFDEC(¶m0->unk_00); - (*param1) = 3; + param0->menuItem = BoxMenu_GetDefaultMenuItem(¶m0->unk_00); + *state = BOX_HEADER_MENU_ITEM_SELECTED; } else { Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = BOX_HEADER_MENU_SHOW_MENU; } break; - case 1: - if (ov19_021D6600(param0->unk_114, 25) == 0) { + case BOX_HEADER_MENU_SHOW_MENU: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ShowMenu) == FALSE) { break; } - (*param1) = 2; - case 2: - param0->unk_1B8 = ov19_021DFD2C(&(param0->unk_00)); + *state = BOX_HEADER_MENU_NAVIGATE_MENU; + case BOX_HEADER_MENU_NAVIGATE_MENU: + param0->menuItem = BoxMenu_GetMenuNavigation(&(param0->unk_00)); - switch (param0->unk_1B8) { - case -3: + switch (param0->menuItem) { + case BOX_MENU_NAVIGATION_NONE: break; - case -2: - ov19_021D6594(param0->unk_114, 28); + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); break; - case -1: - case UnkEnum_021DFB94_03: - ov19_021D6594(param0->unk_114, 26); - (*param1) = 4; + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_HEADER_CANCEL: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = BOX_HEADER_MENU_END_WHEN_READY; break; default: - (*param1) = 3; + *state = BOX_HEADER_MENU_ITEM_SELECTED; break; } break; - case 3: - switch (param0->unk_1B8) { - case UnkEnum_021DFB94_00: - ov19_021D6594(param0->unk_114, 26); - ov19_021D0EB0(param0, ov19_021D27E8); + case BOX_HEADER_MENU_ITEM_SELECTED: + switch (param0->menuItem) { + case BOX_MENU_JUMP: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_RegisterBoxApplicationAction(param0, ov19_BoxJumpAction); break; - case UnkEnum_021DFB94_01: - ov19_021D6594(param0->unk_114, 27); - (*param1) = 7; + case BOX_MENU_WALLPAPER: + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6EC0); + *state = BOX_HEADER_MENU_END; break; - case UnkEnum_021DFB94_02: - ov19_021D0EB0(param0, ov19_021D3B34); + case BOX_MENU_NAME: + ov19_RegisterBoxApplicationAction(param0, ov19_RenameBoxAction); break; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 26)) { - ov19_021D0EC0(param0); + case BOX_HEADER_MENU_END_WHEN_READY: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox)) { + ov19_ClearBoxApplicationAction(param0); } break; - case 7: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EB0(param0, ov19_021D2890); + case BOX_HEADER_MENU_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_RegisterBoxApplicationAction(param0, ov19_WallpaperMenu); } break; } } -static void ov19_021D27E8(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum BoxJumpState { + JUMP_START, + JUMP_TO_BOX, + JUMP_END +}; + +static void ov19_BoxJumpAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: - ov19_021D443C(param0, ov19_GetCurrentBox(¶m0->unk_00), BoxText_JumpToBox); - (*param1) = 1; + switch (*state) { + case JUMP_START: + BoxSelectorPopup_Init(param0, ov19_GetCurrentBox(¶m0->unk_00), BoxText_JumpToBox); + *state = JUMP_TO_BOX; break; - case 1: - if (ov19_021D4468(param0) == 0) { + case JUMP_TO_BOX: + if (ov19_TrySelectBoxFromPopup(param0) == FALSE) { break; } - if ((param0->unk_1BC.unk_05 == -1) || (param0->unk_1BC.unk_05 == ov19_GetCurrentBox(¶m0->unk_00))) { - (*param1) = 2; + if (param0->boxSelector.boxID == -1 || param0->boxSelector.boxID == ov19_GetCurrentBox(¶m0->unk_00)) { + *state = JUMP_END; } else { - ov19_LoadCustomizationsFor(¶m0->unk_00, param0->unk_1BC.unk_05); - PCBoxes_SetCurrentBox(param0->pcBoxes, param0->unk_1BC.unk_05); - ov19_021D6594(param0->unk_114, 4); - (*param1) = 2; + ov19_LoadCustomizationsFor(¶m0->unk_00, param0->boxSelector.boxID); + PCBoxes_SetCurrentBox(param0->pcBoxes, param0->boxSelector.boxID); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox); + *state = JUMP_END; } - ov19_021D6594(param0->unk_114, 26); - ov19_021D6594(param0->unk_114, 32); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6FB0); break; - case 2: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case JUMP_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D2890(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) -{ - switch (*param1) { - case 0: - param0->unk_1B8 = UnkEnum_021DFB94_04; - (*param1) = 1; - case 1: - ov19_SetBoxMessage(¶m0->unk_00, BoxText_PickTheme); - ov19_021DFB94(¶m0->unk_00, param0->unk_1B8); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 2; - break; - case 2: - if (ov19_021D6600(param0->unk_114, 25) == 0) { - break; - } - (*param1) = 3; - case 3: - switch (ov19_021DFD2C(&(param0->unk_00))) { - case -3: - break; - case -2: - ov19_021D6594(param0->unk_114, 28); - break; - case -1: - case UnkEnum_021DFB94_03: - default: - ov19_021D6594(param0->unk_114, 26); - (*param1) = 8; - break; - case UnkEnum_021DFB94_04: - case UnkEnum_021DFB94_05: - case UnkEnum_021DFB94_06: - case UnkEnum_021DFB94_07: - case UnkEnum_021DFB94_08: - case UnkEnum_021DFB94_09: - param0->unk_1B8 = ov19_021DFDDC(¶m0->unk_00); - ov19_SetBoxMessage(¶m0->unk_00, BoxText_Wallpaper); - ov19_021DFC04(¶m0->unk_00, param0->unk_1B8); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 4; - break; - } - break; - case 4: - if (ov19_021D6600(param0->unk_114, 25) == 0) { - break; - } - (*param1) = 5; - case 5: - switch (ov19_021DFD2C(&(param0->unk_00))) { - case -3: - break; - case -2: - ov19_021D6594(param0->unk_114, 28); - break; - case -1: - case UnkEnum_021DFB94_03: - (*param1) = 1; - break; - default: - param0->unk_1B8 = ov19_021DFDDC(¶m0->unk_00); +enum WallpaperMenuState { + WALLPAPER_MENU_START, + WALLPAPER_MENU_PICK_THEME_INIT, + WALLPAPER_MENU_PICK_THEME_WAIT_FOR_TASK, + WALLPAPER_MENU_PICK_THEME_WAIT_FOR_USER, + WALLPAPER_MENU_PICK_WALLPAPER_WAIT_FOR_TASK, + WALLPAPER_MENU_PICK_WALLPAPER_WAIT_FOR_USER, + WALLPAPER_MENU_TRANSITION_WALLPAPER, + WALLPAPER_MENU_UNREACHABLE, + WALLPAPER_MENU_END, +}; - if ((param0->unk_1B8 >= UnkEnum_021DFB94_10) && (param0->unk_1B8 <= UnkEnum_021DFB94_33)) { - PCBoxes_SetWallpaper(param0->pcBoxes, USE_CURRENT_BOX, param0->unk_1B8 - UnkEnum_021DFB94_10); +static void ov19_WallpaperMenu(UnkStruct_ov19_021D5DF8 *param0, u32 *state) +{ + switch (*state) { + case WALLPAPER_MENU_START: + param0->menuItem = BOX_MENU_SCENERY_1; + *state = WALLPAPER_MENU_PICK_THEME_INIT; + case WALLPAPER_MENU_PICK_THEME_INIT: + ov19_SetBoxMessage(¶m0->unk_00, BoxText_PickTheme); + BoxMenu_FillWallpaperMenu(¶m0->unk_00, param0->menuItem); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = WALLPAPER_MENU_PICK_THEME_WAIT_FOR_TASK; + break; + case WALLPAPER_MENU_PICK_THEME_WAIT_FOR_TASK: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ShowMenu) == FALSE) { + break; + } + *state = WALLPAPER_MENU_PICK_THEME_WAIT_FOR_USER; + case WALLPAPER_MENU_PICK_THEME_WAIT_FOR_USER: + switch (BoxMenu_GetMenuNavigation(&(param0->unk_00))) { + case BOX_MENU_NAVIGATION_NONE: + break; + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); + break; + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_HEADER_CANCEL: + default: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = WALLPAPER_MENU_END; + break; + case BOX_MENU_SCENERY_1: + case BOX_MENU_SCENERY_2: + case BOX_MENU_SCENERY_3: + case BOX_MENU_ETCETERA: + case BOX_MENU_FRIENDS_1: + case BOX_MENU_FRIENDS_2: + param0->menuItem = BoxMenu_GetSelectedMenuItem(¶m0->unk_00); + ov19_SetBoxMessage(¶m0->unk_00, BoxText_Wallpaper); + BoxMenu_FillWallpaperSelectionMenu(¶m0->unk_00, param0->menuItem); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = WALLPAPER_MENU_PICK_WALLPAPER_WAIT_FOR_TASK; + break; + } + break; + case WALLPAPER_MENU_PICK_WALLPAPER_WAIT_FOR_TASK: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ShowMenu) == FALSE) { + break; + } + *state = WALLPAPER_MENU_PICK_WALLPAPER_WAIT_FOR_USER; + case WALLPAPER_MENU_PICK_WALLPAPER_WAIT_FOR_USER: + switch (BoxMenu_GetMenuNavigation(&(param0->unk_00))) { + case BOX_MENU_NAVIGATION_NONE: + break; + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); + break; + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_HEADER_CANCEL: + *state = WALLPAPER_MENU_PICK_THEME_INIT; + break; + default: + param0->menuItem = BoxMenu_GetSelectedMenuItem(¶m0->unk_00); + + if (param0->menuItem >= BOX_MENU_FIRST_WALLPAPER && param0->menuItem <= BOX_MENU_LAST_WALLPAPER) { + PCBoxes_SetWallpaper(param0->pcBoxes, USE_CURRENT_BOX, param0->menuItem - BOX_MENU_FIRST_WALLPAPER); ov19_LoadWallpaper(¶m0->unk_00, param0->pcBoxes); - ov19_021D6594(param0->unk_114, 26); - (*param1) = 6; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = WALLPAPER_MENU_TRANSITION_WALLPAPER; } else { - GF_ASSERT(0); - (*param1) = 1; + GF_ASSERT(FALSE); + *state = WALLPAPER_MENU_PICK_THEME_INIT; } } break; - case 6: - ov19_021D6594(param0->unk_114, 33); - (*param1) = 8; + case WALLPAPER_MENU_TRANSITION_WALLPAPER: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_TransitionWallpaper); + *state = WALLPAPER_MENU_END; break; - case 7: - if (ov19_021D6628(param0->unk_114)) { - (*param1) = 1; + case WALLPAPER_MENU_UNREACHABLE: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + *state = WALLPAPER_MENU_PICK_THEME_INIT; } break; - case 8: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case WALLPAPER_MENU_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D2A5C(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum MarkState { + MARK_START, + MARK_PROCESS_USER_INPUT, + MARK_END, +}; + +static void ov19_MarkAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: - ov19_021DFC80(¶m0->unk_00); + switch (*state) { + case MARK_START: + BoxMenu_FillMarkingsMenu(¶m0->unk_00); ov19_SetBoxMessage(¶m0->unk_00, BoxText_MarkMon); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = MARK_PROCESS_USER_INPUT; break; - case 1: - if (ov19_021D6628(param0->unk_114) == 0) { + case MARK_PROCESS_USER_INPUT: + if (ov19_CheckAllTasksDone(param0->unk_114) == FALSE) { break; } else { - u32 v0 = ov19_021DFD2C(&(param0->unk_00)); + u32 selectedItem = BoxMenu_GetMenuNavigation(&(param0->unk_00)); - switch (v0) { - case -3: + switch (selectedItem) { + case BOX_MENU_NAVIGATION_NONE: break; - case -2: - ov19_021D6594(param0->unk_114, 28); + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); break; - case -1: - case UnkEnum_021DFB94_45: - ov19_021D6594(param0->unk_114, 26); - (*param1) = 2; + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_MARK_CANCEL: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = MARK_END; break; - case UnkEnum_021DFB94_44: - ov19_021D5BAC(¶m0->unk_00); - ov19_021D6594(param0->unk_114, 26); - ov19_021D6594(param0->unk_114, 7); - ov19_021D6594(param0->unk_114, 39); - (*param1) = 2; + case BOX_MENU_CONFIRM: + ov19_UpdatePreviewMonMarkings(¶m0->unk_00); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D69BC); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7248); + *state = MARK_END; break; default: - if ((v0 >= UnkEnum_021DFB94_56) && (v0 <= UnkEnum_021DFB94_61)) { - v0 -= UnkEnum_021DFB94_56; - ov19_021DFCE4(¶m0->unk_00, v0); - ov19_021D6594(param0->unk_114, 29); + if (selectedItem >= BOX_MENU_FIRST_MARKING && selectedItem <= BOX_MENU_LAST_MARKING) { + selectedItem -= BOX_MENU_FIRST_MARKING; + BoxMenu_ToggleMarking(¶m0->unk_00, selectedItem); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6F0C); } break; } } break; - case 2: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case MARK_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D2B54(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum MultiSelectMoveStates { + MULTI_MOVE_START, + MULTI_MOVE_DEFINE_SELECTION, + MULTI_MOVE_SELECTED_MONS, + MULTI_MOVE_WAIT_FOR_ANIMATIONS, + MULTI_MOVE_END, + MULTI_MOVE_PREVIEW_MON +}; + +static void ov19_MultiSelectAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: + switch (*state) { + case MULTI_MOVE_START: if (JOY_HELD(PAD_BUTTON_A)) { ov19_ResetMultiSelectLocation(param0, ¶m0->unk_00); - ov19_021D6594(param0->unk_114, 44); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_StartDrawMultiSelect); Sound_PlayEffect(SEQ_SE_CONFIRM); - *param1 = 1; + *state = MULTI_MOVE_DEFINE_SELECTION; } else { - ov19_021D0EB0(param0, ov19_021D2E1C); + ov19_RegisterBoxApplicationAction(param0, ov19_PickUpMonAction); } break; - case 1: + case MULTI_MOVE_DEFINE_SELECTION: if (JOY_HELD(PAD_BUTTON_A)) { switch (ov19_TryMoveSelectionFromUserInput(gSystem.heldKeys, param0)) { case CURSOR_STOP: @@ -1548,27 +1688,27 @@ static void ov19_021D2B54(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) case CURSOR_MOVE: ov19_SetMultiSelectionEndLocation(param0, ¶m0->unk_00); - ov19_021D6594(param0->unk_114, 46); - ov19_021D6594(param0->unk_114, 5); - ov19_021D6594(param0->unk_114, 6); - *param1 = 3; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ApplyMultiSelectMonShadingTask); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + *state = MULTI_MOVE_WAIT_FOR_ANIMATIONS; break; } } else { if (ov19_IsMultiSelectSingleSelect(¶m0->unk_00)) { - ov19_021D6594(param0->unk_114, 45); - ov19_021D0EB0(param0, ov19_021D2E1C); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7380); + ov19_RegisterBoxApplicationAction(param0, ov19_PickUpMonAction); } else { ov19_PickUpMultiSelectedMons(param0, ¶m0->unk_00); - ov19_021D6594(param0->unk_114, 47); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D73B0); Sound_PlayEffect(SEQ_SE_DP_BOX02); - *param1 = 2; + *state = MULTI_MOVE_SELECTED_MONS; } } break; - case 2: - if (ov19_021D6628(param0->unk_114) == FALSE) { + case MULTI_MOVE_SELECTED_MONS: + if (ov19_CheckAllTasksDone(param0->unk_114) == FALSE) { break; } @@ -1580,33 +1720,33 @@ static void ov19_021D2B54(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) break; case CURSOR_MOVE: - ov19_021D6594(param0->unk_114, 5); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); if ((ov19_GetPreviewMonSource(¶m0->unk_00) & PREVIEW_MON_HELD) == 0) { - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } break; case CURSOR_MOVE_TO_LEFT_BOX: ov19_LoadLeftBoxCustomization(¶m0->unk_00); PCBoxes_SetCurrentBox(param0->pcBoxes, ov19_GetCurrentBox(¶m0->unk_00)); - ov19_021D6594(param0->unk_114, 4); - *param1 = 5; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox); + *state = MULTI_MOVE_PREVIEW_MON; break; case CURSOR_MOVE_TO_RIGHT_BOX: ov19_LoadRightBoxCustomization(&(param0->unk_00)); PCBoxes_SetCurrentBox(param0->pcBoxes, ov19_GetCurrentBox(¶m0->unk_00)); - ov19_021D6594(param0->unk_114, 4); - *param1 = 5; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox); + *state = MULTI_MOVE_PREVIEW_MON; break; case CURSOR_NO_MOVEMENT: if (JOY_NEW(PAD_BUTTON_A)) { if (ov19_IsBoxUnderSelectedMonsEmpty(¶m0->unk_00)) { ov19_PutDownSelectedMons(param0, ¶m0->unk_00); - ov19_021D6594(param0->unk_114, 10); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PlaceMonDownFromCursor); Sound_PlayEffect(SEQ_SE_DP_BOX01); - *param1 = 4; + *state = MULTI_MOVE_END; } else { Sound_PlayEffect(SEQ_SE_DP_BOX03); } @@ -1619,25 +1759,25 @@ static void ov19_021D2B54(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) } break; - case 5: - if (ov19_021D6600(param0->unk_114, 4)) { + case MULTI_MOVE_PREVIEW_MON: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox)) { if (!(ov19_GetPreviewMonSource(¶m0->unk_00) & PREVIEW_MON_HELD)) { ov19_TryPreviewCursorMon(param0); - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } - *param1 = 2; + *state = MULTI_MOVE_SELECTED_MONS; } break; - case 3: - if (ov19_021D6628(param0->unk_114)) { - *param1 = 1; + case MULTI_MOVE_WAIT_FOR_ANIMATIONS: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + *state = MULTI_MOVE_DEFINE_SELECTION; } break; - case 4: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case MULTI_MOVE_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } @@ -1665,56 +1805,69 @@ static BOOL ov19_IsBoxUnderSelectedMonsEmpty(const UnkStruct_ov19_021D4DF0 *para return TRUE; } -static void ov19_021D2E1C(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum PickUpMonState { + PICK_UP_MON_START, + PICK_UP_PARTY_MON, + PICK_UP_MON_CONFIRM_LAST_MON, + PICK_UP_MON_DONE +}; + +static void ov19_PickUpMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: + switch (*state) { + case PICK_UP_MON_START: if (ov19_GetCursorLocation(¶m0->unk_00) == CURSOR_IN_PARTY) { if (ov19_OnLastAliveMon(param0) == FALSE) { Sound_PlayEffect(SEQ_SE_DP_BOX02); ov19_PickUpMon(param0, ¶m0->unk_00); - ov19_021D6594(param0->unk_114, 9); - (*param1) = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PickUpMonIntoCursor); + *state = PICK_UP_PARTY_MON; } else { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_LastMon); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 2; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = PICK_UP_MON_CONFIRM_LAST_MON; } } else { Sound_PlayEffect(SEQ_SE_DP_BOX02); ov19_PickUpMon(param0, ¶m0->unk_00); - ov19_021D6594(param0->unk_114, 9); - (*param1) = 3; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PickUpMonIntoCursor); + *state = PICK_UP_MON_DONE; } break; - case 1: - if (ov19_021D6628(param0->unk_114)) { + case PICK_UP_PARTY_MON: + if (ov19_CheckAllTasksDone(param0->unk_114)) { ov19_TryPreviewCursorMon(param0); - ov19_021D6594(param0->unk_114, 37); - (*param1) = 3; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PlayAdjustPartyAnimation); + *state = PICK_UP_MON_DONE; } break; - case 2: - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - (*param1) = 3; + case PICK_UP_MON_CONFIRM_LAST_MON: + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = PICK_UP_MON_DONE; } break; - case 3: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case PICK_UP_MON_DONE: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D2F14(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum PlaceMonState { + PLACE_MON_DOWN, + PLACE_ADJUST_PARTY_ANIMATION, + PLACE_MON_END +}; + +static void ov19_PlaceMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: + switch (*state) { + case PLACE_MON_DOWN: ov19_PutDownCursorMon(param0, ¶m0->unk_00); - ov19_021D6594(param0->unk_114, 10); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PlaceMonDownFromCursor); Sound_PlayEffect(SEQ_SE_DP_BOX01); if (ov19_GetCursorLocation(¶m0->unk_00) == CURSOR_IN_PARTY) { @@ -1722,25 +1875,25 @@ static void ov19_021D2F14(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) u32 partyCount = Party_GetCurrentCount(param0->party); if (cursorPosition != (partyCount - 1)) { - (*param1) = 1; + *state = PLACE_ADJUST_PARTY_ANIMATION; ov19_TryPreviewCursorMon(param0); break; } } - (*param1) = 2; + *state = PLACE_MON_END; break; - case 1: - if (ov19_021D6628(param0->unk_114)) { + case PLACE_ADJUST_PARTY_ANIMATION: + if (ov19_CheckAllTasksDone(param0->unk_114)) { ov19_TryPreviewCursorMon(param0); - ov19_021D6594(param0->unk_114, 38); - ov19_021D6594(param0->unk_114, 6); - (*param1) = 2; + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D71F8); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + *state = PLACE_MON_END; } break; - case 2: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0F14(param0); - ov19_021D0EC0(param0); + case PLACE_MON_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_FlagRecordBoxUseInJournal(param0); + ov19_ClearBoxApplicationAction(param0); } break; } @@ -1765,221 +1918,249 @@ static BOOL ov19_CheckLastAliveMonReason(UnkStruct_ov19_021D5DF8 *param0, u32 *d return FALSE; } -static void ov19_021D3010(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum ShiftState { + SHIFT_START, + SHIFT_CONFIRM_MESSAGE, + SHIFT_END +}; + +static void ov19_ShiftMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: { + switch (*state) { + case SHIFT_START: { u32 messageID; if (ov19_CheckLastAliveMonReason(param0, &messageID)) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, messageID); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = SHIFT_CONFIRM_MESSAGE; } else { ov19_SwapMonInCursor(param0, ¶m0->unk_00); Sound_PlayEffect(SEQ_SE_CONFIRM); - ov19_021D6594(param0->unk_114, 11); - ov19_021D6594(param0->unk_114, 6); - (*param1) = 2; + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6AB0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + *state = SHIFT_END; } } break; - case 1: - if (ov19_021D6600(param0->unk_114, 24) == 0) { + case SHIFT_CONFIRM_MESSAGE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage) == FALSE) { break; } if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - (*param1) = 2; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = SHIFT_END; } break; - case 2: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0F14(param0); - ov19_021D0EC0(param0); + case SHIFT_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_FlagRecordBoxUseInJournal(param0); + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D30D0(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum WithdrawMonState { + WITHDRAW_START, + WITHDRAW_WAIT_FOR_PICK_UP_MON, + WITHDRAW_WAIT_FOR_PARTY_POPUP, + WITHDRAW_WAIT_FOR_MOVE_CURSOR_TO_PARTY, + WITHDRAW_WAIT_FOR_MOVE_PLACE_MON_DOWN, + WITHDRAW_RETURN_TO_BOX, + WITHDRAW_UNUSED, + WITHDRAW_CONFIRM_PARTY_FULL, + WITHDRAW_END +}; + +static void ov19_WithdrawMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: + switch (*state) { + case WITHDRAW_START: if (Party_GetCurrentCount(param0->party) != MAX_PARTY_SIZE) { - ov19_021D6594(param0->unk_114, 26); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_IN_CURSOR) { - ov19_021D6594(param0->unk_114, 35); - (*param1) = 2; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_OpenPartyPopup); + *state = WITHDRAW_WAIT_FOR_PARTY_POPUP; } else { Sound_PlayEffect(SEQ_SE_DP_BOX02); ov19_PickUpMon(param0, ¶m0->unk_00); - ov19_021D6594(param0->unk_114, 9); - (*param1) = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PickUpMonIntoCursor); + *state = WITHDRAW_WAIT_FOR_PICK_UP_MON; } } else { - ov19_021D6594(param0->unk_114, 27); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6EC0); ov19_SetBoxMessage(¶m0->unk_00, BoxText_PartyFull); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 7; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = WITHDRAW_CONFIRM_PARTY_FULL; } break; - case 1: - if (ov19_021D6600(param0->unk_114, 9)) { - ov19_021D6594(param0->unk_114, 35); - (*param1) = 2; + case WITHDRAW_WAIT_FOR_PICK_UP_MON: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_PickUpMonIntoCursor)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_OpenPartyPopup); + *state = WITHDRAW_WAIT_FOR_PARTY_POPUP; } break; - case 2: - if (ov19_021D6600(param0->unk_114, 35)) { + case WITHDRAW_WAIT_FOR_PARTY_POPUP: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_OpenPartyPopup)) { ov19_MoveCursorToParty(param0); - ov19_021D6594(param0->unk_114, 5); - (*param1) = 3; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); + *state = WITHDRAW_WAIT_FOR_MOVE_CURSOR_TO_PARTY; } break; - case 3: - if (ov19_021D6600(param0->unk_114, 5)) { + case WITHDRAW_WAIT_FOR_MOVE_CURSOR_TO_PARTY: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_MoveCursor)) { ov19_PutDownCursorMon(param0, ¶m0->unk_00); - ov19_021D0F14(param0); - ov19_021D6594(param0->unk_114, 10); - (*param1) = 4; + ov19_FlagRecordBoxUseInJournal(param0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PlaceMonDownFromCursor); + *state = WITHDRAW_WAIT_FOR_MOVE_PLACE_MON_DOWN; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 10)) { - ov19_021D6594(param0->unk_114, 36); - (*param1) = 5; + case WITHDRAW_WAIT_FOR_MOVE_PLACE_MON_DOWN: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_PlaceMonDownFromCursor)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7138); + *state = WITHDRAW_RETURN_TO_BOX; } break; - case 5: - if (ov19_021D6600(param0->unk_114, 36)) { + case WITHDRAW_RETURN_TO_BOX: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D7138)) { ov19_ReturnCursorToBox(param0); - ov19_021D6594(param0->unk_114, 5); - ov19_021D6594(param0->unk_114, 6); - (*param1) = 8; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_MoveCursor); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + *state = WITHDRAW_END; } break; - case 7: - if (ov19_021D6600(param0->unk_114, 24) == 0) { + case WITHDRAW_CONFIRM_PARTY_FULL: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage) == FALSE) { break; } - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - (*param1) = 8; + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = WITHDRAW_END; } break; - case 8: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case WITHDRAW_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D3294(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum StoreMonState { + STORE_MON_CHECK_CAN_STORE_MON, + STORE_MON_SELECT_BOX, + STORE_MON_BOX_FULL, + STORE_MON_CONFIRM_CANNOT_STORE_MON, + STORE_MON_FROM_CURSOR, + STORE_MON_FROM_PARTY, + STORE_MON_END +}; + +static void ov19_StoreMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: + switch (*state) { + case STORE_MON_CHECK_CAN_STORE_MON: if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR && ov19_OnLastAliveMon(param0) == TRUE) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_LastMon); - ov19_021D6594(param0->unk_114, 27); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 3; + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6EC0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = STORE_MON_CONFIRM_CANNOT_STORE_MON; } else { int boxMessageID; if (ov19_IsPreviewedMonHoldingMailOrHasBallCapsule(param0, &boxMessageID)) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, boxMessageID); - ov19_021D6594(param0->unk_114, 27); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 3; + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6EC0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = STORE_MON_CONFIRM_CANNOT_STORE_MON; } else { - ov19_021D443C(param0, param0->unk_00.unk_110, BoxText_PickDepositBox); - ov19_021D6594(param0->unk_114, 26); - (*param1) = 1; + BoxSelectorPopup_Init(param0, param0->unk_00.unk_110, BoxText_PickDepositBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = STORE_MON_SELECT_BOX; } } break; - case 1: - if (ov19_021D4468(param0) == 0) { + case STORE_MON_SELECT_BOX: + if (ov19_TrySelectBoxFromPopup(param0) == FALSE) { break; } - if (param0->unk_1BC.unk_05 == -1) { - ov19_021D6594(param0->unk_114, 26); - ov19_021D6594(param0->unk_114, 32); - (*param1) = 6; + if (param0->boxSelector.boxID == -1) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6FB0); + *state = STORE_MON_END; break; } - param0->unk_00.unk_110 = param0->unk_1BC.unk_05; + param0->unk_00.unk_110 = param0->boxSelector.boxID; if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_IN_CURSOR) { - if (ov19_TryStoreCursorMonInBox(param0, param0->unk_1BC.unk_05)) { - ov19_021D0F14(param0); - ov19_021D6594(param0->unk_114, 26); - ov19_021D6594(param0->unk_114, 32); - (*param1) = 4; + if (ov19_TryStoreCursorMonInBox(param0, param0->boxSelector.boxID)) { + ov19_FlagRecordBoxUseInJournal(param0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6FB0); + *state = STORE_MON_FROM_CURSOR; break; } } else { - if (ov19_TryStoreSelectedMonInBox(param0, param0->unk_1BC.unk_05)) { - ov19_021D0F14(param0); - ov19_021D6594(param0->unk_114, 26); - ov19_021D6594(param0->unk_114, 32); - (*param1) = 5; + if (ov19_TryStoreSelectedMonInBox(param0, param0->boxSelector.boxID)) { + ov19_FlagRecordBoxUseInJournal(param0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6FB0); + *state = STORE_MON_FROM_PARTY; break; } } Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_BoxFull); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 2; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = STORE_MON_BOX_FULL; break; - case 2: - if (ov19_021D6600(param0->unk_114, 24) == 0) { + case STORE_MON_BOX_FULL: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage) == FALSE) { break; } - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D4458(param0); - (*param1) = 1; + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { + BoxSelectorPopup_Reset(param0); + *state = STORE_MON_SELECT_BOX; } break; - case 3: - if (ov19_021D6600(param0->unk_114, 24) == 0) { + case STORE_MON_CONFIRM_CANNOT_STORE_MON: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage) == FALSE) { break; } - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - (*param1) = 6; + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = STORE_MON_END; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 32)) { - ov19_021D6594(param0->unk_114, 12); - ov19_021D6594(param0->unk_114, 6); - (*param1) = 6; + case STORE_MON_FROM_CURSOR: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D6FB0)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6AEC); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + *state = STORE_MON_END; } break; - case 5: - if (ov19_021D6600(param0->unk_114, 32)) { - ov19_021D6594(param0->unk_114, 13); - ov19_021D6594(param0->unk_114, 6); - (*param1) = 6; + case STORE_MON_FROM_PARTY: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D6FB0)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6B1C); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + *state = STORE_MON_END; } break; - case 6: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case STORE_MON_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } @@ -2051,248 +2232,261 @@ static BOOL ov19_CheckReleaseMonValid(UnkStruct_ov19_021D5DF8 *param0, int *dest return TRUE; } -static void ov19_021D35F8(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum ReleaseMonState { + RELEASE_MON_START, + RELEASE_MON_CONFIRM, + RELEASE_MON_RELEASE_ANIMATION, + RELEASE_MON_TRY_RELEASE, + RELEASE_MON_CONFIRM_RETURNED, + RELEASE_MON_CONFIRM_RELEASED, + RELEASE_MON_CLOSE_MESSAGE_BOX, + RELEASE_MON_PREPARE_END_RELEASE, + RELEASE_MON_CANNOT_RELEASE, + RELEASE_MON_END +}; + +static void ov19_ReleaseMonAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: { + switch (*state) { + case RELEASE_MON_START: { int boxMessageID; if (ov19_CheckReleaseMonValid(param0, &boxMessageID)) { ov19_SetBoxMessage(¶m0->unk_00, BoxText_ReleaseMon); - ov19_021DF964(&(param0->unk_00), 1); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 1; + BoxMenu_FillYesNo(&(param0->unk_00), 1); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = RELEASE_MON_CONFIRM; } else { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, boxMessageID); - ov19_021D6594(param0->unk_114, 27); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 8; + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6EC0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = RELEASE_MON_CANNOT_RELEASE; } } break; - case 1: - if (ov19_021D6628(param0->unk_114) == 0) { + case RELEASE_MON_CONFIRM: + if (ov19_CheckAllTasksDone(param0->unk_114) == FALSE) { break; } - switch (ov19_021DFD2C(&(param0->unk_00))) { - case -2: - ov19_021D6594(param0->unk_114, 28); + switch (BoxMenu_GetMenuNavigation(&(param0->unk_00))) { + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); break; - case -1: - case UnkEnum_021DFB94_55: - ov19_021D6594(param0->unk_114, 26); - (*param1) = 9; + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_NO: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = RELEASE_MON_END; break; - case UnkEnum_021DFB94_54: - ov19_021D6594(param0->unk_114, 26); - (*param1) = 2; + case BOX_MENU_YES: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = RELEASE_MON_RELEASE_ANIMATION; break; } break; - case 2: - if (ov19_021D6600(param0->unk_114, 26)) { - StringTemplate_SetNickname(param0->unk_19C, 0, ov19_GetPreviewedBoxMon(¶m0->unk_00)); - ov19_021D38E0(param0); + case RELEASE_MON_RELEASE_ANIMATION: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox)) { + StringTemplate_SetNickname(param0->MessageVariableBuffer, 0, ov19_GetPreviewedBoxMon(¶m0->unk_00)); + ov19_CheckShouldMonReturn(param0); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_IN_CURSOR) { - ov19_021D6594(param0->unk_114, 14); - param0->unk_1B8 = 0; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PlayReleaseCursorMonAnimation); + param0->releasedFrom = RELEASED_FROM_CURSOR; } else { if (ov19_GetCursorLocation(¶m0->unk_00) == CURSOR_IN_BOX) { - ov19_021D6594(param0->unk_114, 15); - param0->unk_1B8 = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PlayReleaseBoxMonAnimation); + param0->releasedFrom = RELEASED_FROM_BOX; } else { - ov19_021D6594(param0->unk_114, 16); - param0->unk_1B8 = 2; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PlayReleasePartyMonAnimation); + param0->releasedFrom = RELEASED_FROM_PARTY; } } - (*param1) = 3; + *state = RELEASE_MON_TRY_RELEASE; } break; - case 3: - if (ov19_021D6628(param0->unk_114)) { - if (ov19_021D3B20(param0)) { + case RELEASE_MON_TRY_RELEASE: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + if (ov19_CanReleaseMon(param0)) { if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_IN_CURSOR) { - ov19_021D5834(param0); + ov19_RemoveCursorMon(param0); } else { ov19_RemoveMonUnderCursor(param0); } ov19_SetBoxMessage(¶m0->unk_00, BoxText_MonReleased); - (*param1) = 5; + *state = RELEASE_MON_CONFIRM_RELEASED; } else { ov19_SetBoxMessage(¶m0->unk_00, BoxText_MonReturned); - (*param1) = 4; + *state = RELEASE_MON_CONFIRM_RETURNED; } - ov19_021D6594(param0->unk_114, 24); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); } break; - case 5: - if (ov19_021D6628(param0->unk_114) == 0) { + case RELEASE_MON_CONFIRM_RELEASED: + if (ov19_CheckAllTasksDone(param0->unk_114) == FALSE) { break; } if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { ov19_SetBoxMessage(¶m0->unk_00, BoxText_GoodbyeForever); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 6; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = RELEASE_MON_CLOSE_MESSAGE_BOX; } break; - case 4: - if (ov19_021D6628(param0->unk_114) == 0) { + case RELEASE_MON_CONFIRM_RETURNED: + if (ov19_CheckAllTasksDone(param0->unk_114) == FALSE) { break; } if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { ov19_SetBoxMessage(¶m0->unk_00, BoxText_MonWasWorried); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 6; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = RELEASE_MON_CLOSE_MESSAGE_BOX; } break; - case 6: - if (ov19_021D6628(param0->unk_114) == 0) { + case RELEASE_MON_CLOSE_MESSAGE_BOX: + if (ov19_CheckAllTasksDone(param0->unk_114) == FALSE) { break; } if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - (*param1) = 7; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = RELEASE_MON_PREPARE_END_RELEASE; } break; - case 7: - if (ov19_021D6628(param0->unk_114)) { - if (ov19_021D3B20(param0)) { - if (param0->unk_1B8 == 2) { - ov19_021D6594(param0->unk_114, 37); + case RELEASE_MON_PREPARE_END_RELEASE: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + if (ov19_CanReleaseMon(param0)) { + if (param0->releasedFrom == RELEASED_FROM_PARTY) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PlayAdjustPartyAnimation); } - ov19_021D0F14(param0); + ov19_FlagRecordBoxUseInJournal(param0); } - ov19_021D6594(param0->unk_114, 6); - (*param1) = 9; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + *state = RELEASE_MON_END; } break; - case 8: - if (ov19_021D6600(param0->unk_114, 24) == 0) { + case RELEASE_MON_CANNOT_RELEASE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage) == FALSE) { break; } if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { - ov19_021D6594(param0->unk_114, 26); - (*param1) = 9; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = RELEASE_MON_END; } break; - case 9: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case RELEASE_MON_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D38E0(UnkStruct_ov19_021D5DF8 *param0) +static void ov19_CheckShouldMonReturn(UnkStruct_ov19_021D5DF8 *param0) { - UnkStruct_ov19_021D38E0 *v0 = &(param0->unk_15C); - int v1, v2; + ReleaseMon *releaseMon = &(param0->releaseMon); + int i, releaseBlockingMovesCount; - v0->boxMon = param0->unk_00.pcMonPreview.mon; + releaseMon->boxMon = param0->unk_00.pcMonPreview.mon; - for (v1 = 0, v2 = 0; v1 < (NELEMS(Unk_ov19_021DFDF0)); v1++) { - v0->unk_04[v1] = BoxPokemon_HasMove(v0->boxMon, Unk_ov19_021DFDF0[v1]); + for (i = 0, releaseBlockingMovesCount = 0; i < (NELEMS(sReleaseBlockingMoves)); i++) { + releaseMon->hasReleaseBlockingMove[i] = BoxPokemon_HasMove(releaseMon->boxMon, sReleaseBlockingMoves[i]); - if (v0->unk_04[v1]) { - v2++; + if (releaseMon->hasReleaseBlockingMove[i]) { + releaseBlockingMovesCount++; } } - if (v2 == 0) { - v0->unk_00 = 1; - v0->unk_01 = 1; + if (releaseBlockingMovesCount == 0) { + releaseMon->checkedCanReleaseMon = TRUE; + releaseMon->canReleaseMon = TRUE; return; } else { - v0->unk_00 = 0; - v0->unk_01 = 0; - v0->boxID = 0; - v0->monPosInBox = 0; - v0->pcBoxes = param0->pcBoxes; - v0->party = param0->party; - v0->unk_1C = ov19_GetPreviewMonSource(¶m0->unk_00) != PREVIEW_MON_UNDER_CURSOR; + releaseMon->checkedCanReleaseMon = FALSE; + releaseMon->canReleaseMon = FALSE; + releaseMon->boxID = 0; + releaseMon->monPosInBox = 0; + releaseMon->pcBoxes = param0->pcBoxes; + releaseMon->party = param0->party; + releaseMon->monHeldInCursor = ov19_GetPreviewMonSource(¶m0->unk_00) != PREVIEW_MON_UNDER_CURSOR; - for (v1 = 0; v1 < (NELEMS(Unk_ov19_021DFDF0)); v1++) { - v0->unk_08[v1] = 0; + for (i = 0; i < NELEMS(sReleaseBlockingMoves); i++) { + releaseMon->monsWithReleaseBlockingMoveCount[i] = 0; } - SysTask_Start(ov19_021D3978, v0, 0); + SysTask_Start(ov19_CheckLastMonWithReleaseBlockingMove, releaseMon, 0); } } -static void ov19_021D3978(SysTask *param0, void *param1) +static void ov19_CheckLastMonWithReleaseBlockingMove(SysTask *task, void *releaseMonParam) { - UnkStruct_ov19_021D38E0 *v0 = param1; + ReleaseMon *releaseMon = releaseMonParam; BoxPokemon *boxMon; - int monIndex, v3; + int monIndex, i; - if (v0->boxID < MAX_PC_BOXES) { - int v4 = v0->monPosInBox + 15; + if (releaseMon->boxID < MAX_PC_BOXES) { + int v4 = releaseMon->monPosInBox + 15; // why + 15? if (v4 > MAX_MONS_PER_BOX) { v4 = MAX_MONS_PER_BOX; } - for (monIndex = v0->monPosInBox; monIndex < v4; monIndex++) { - boxMon = PCBoxes_GetBoxMonAt(v0->pcBoxes, v0->boxID, monIndex); + for (monIndex = releaseMon->monPosInBox; monIndex < v4; monIndex++) { + boxMon = PCBoxes_GetBoxMonAt(releaseMon->pcBoxes, releaseMon->boxID, monIndex); if (BoxPokemon_GetValue(boxMon, MON_DATA_SPECIES_EXISTS, NULL)) { - for (v3 = 0; v3 < (NELEMS(Unk_ov19_021DFDF0)); v3++) { - if (BoxPokemon_HasMove(boxMon, Unk_ov19_021DFDF0[v3])) { - v0->unk_08[v3]++; + for (i = 0; i < NELEMS(sReleaseBlockingMoves); i++) { + if (BoxPokemon_HasMove(boxMon, sReleaseBlockingMoves[i])) { + releaseMon->monsWithReleaseBlockingMoveCount[i]++; } } } } if (v4 == MAX_MONS_PER_BOX) { - v0->monPosInBox = 0; - v0->boxID++; + releaseMon->monPosInBox = 0; + releaseMon->boxID++; } else { - v0->monPosInBox = v4; + releaseMon->monPosInBox = v4; } } else { - int partyCount = Party_GetCurrentCount(v0->party); + int partyCount = Party_GetCurrentCount(releaseMon->party); for (monIndex = 0; monIndex < partyCount; monIndex++) { - boxMon = (BoxPokemon *)Party_GetPokemonBySlotIndex(v0->party, monIndex); + boxMon = (BoxPokemon *)Party_GetPokemonBySlotIndex(releaseMon->party, monIndex); - for (v3 = 0; v3 < (NELEMS(Unk_ov19_021DFDF0)); v3++) { - if (BoxPokemon_HasMove(boxMon, Unk_ov19_021DFDF0[v3])) { - v0->unk_08[v3]++; + for (i = 0; i < NELEMS(sReleaseBlockingMoves); i++) { + if (BoxPokemon_HasMove(boxMon, sReleaseBlockingMoves[i])) { + releaseMon->monsWithReleaseBlockingMoveCount[i]++; } } } - if (v0->unk_1C) { - for (v3 = 0; v3 < (NELEMS(Unk_ov19_021DFDF0)); v3++) { - if (BoxPokemon_HasMove(v0->boxMon, Unk_ov19_021DFDF0[v3])) { - v0->unk_08[v3]++; + if (releaseMon->monHeldInCursor) { + for (i = 0; i < NELEMS(sReleaseBlockingMoves); i++) { + if (BoxPokemon_HasMove(releaseMon->boxMon, sReleaseBlockingMoves[i])) { + releaseMon->monsWithReleaseBlockingMoveCount[i]++; } } } - v0->unk_01 = 1; + releaseMon->canReleaseMon = TRUE; - for (v3 = 0; v3 < (NELEMS(Unk_ov19_021DFDF0)); v3++) { - if ((v0->unk_08[v3] == 1) && (v0->unk_04[v3] == 1)) { - v0->unk_01 = 0; + for (i = 0; i < NELEMS(sReleaseBlockingMoves); i++) { + if (releaseMon->monsWithReleaseBlockingMoveCount[i] == 1 && releaseMon->hasReleaseBlockingMove[i] == TRUE) { + releaseMon->canReleaseMon = FALSE; break; } } - v0->unk_00 = 1; - SysTask_Done(param0); + releaseMon->checkedCanReleaseMon = TRUE; + SysTask_Done(task); } } @@ -2314,85 +2508,97 @@ static BOOL BoxPokemon_HasMove(BoxPokemon *boxMon, u16 move) return hasMove; } -BOOL ov19_021D3B18(const UnkStruct_ov19_021D5DF8 *param0) +BOOL ov19_HasCheckedCanReleaseMon(const UnkStruct_ov19_021D5DF8 *param0) { - const UnkStruct_ov19_021D38E0 *v0 = &(param0->unk_15C); - return v0->unk_00; + const ReleaseMon *releaseMon = &(param0->releaseMon); + return releaseMon->checkedCanReleaseMon; } -BOOL ov19_021D3B20(const UnkStruct_ov19_021D5DF8 *param0) +BOOL ov19_CanReleaseMon(const UnkStruct_ov19_021D5DF8 *param0) { - const UnkStruct_ov19_021D38E0 *v0 = &(param0->unk_15C); + const ReleaseMon *releaseMon = &(param0->releaseMon); - if (v0->unk_00) { - return v0->unk_01; + if (releaseMon->checkedCanReleaseMon) { + return releaseMon->canReleaseMon; } return FALSE; } -static void ov19_021D3B34(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum RenameBoxStates { + RENAME_BOX_START, + RENAME_BOX_LAUNCH_TEXT_INPUT_APP, + RENAME_BOX_RETURN_TO_BOX +}; + +static void ov19_RenameBoxAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: - ov19_021D6594(param0->unk_114, 3); - (*param1)++; + switch (*state) { + case RENAME_BOX_START: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack2); + (*state)++; break; - case 1: - if (ov19_021D6600(param0->unk_114, 3)) { - ov19_021D64A0(param0->unk_114); - Heap_Destroy(HEAP_ID_10); - PCBoxes_BufferBoxName(param0->pcBoxes, PCBoxes_GetCurrentBoxID(param0->pcBoxes), param0->unk_128->unk_18); - param0->ApplicationManager = ApplicationManager_New(&Unk_020F2DAC, param0->unk_128, HEAP_ID_9); - (*param1)++; + case RENAME_BOX_LAUNCH_TEXT_INPUT_APP: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack2)) { + BoxGraphics_Free(param0->unk_114); + Heap_Destroy(HEAP_ID_BOX_GRAPHICS); + PCBoxes_BufferBoxName(param0->pcBoxes, PCBoxes_GetCurrentBoxID(param0->pcBoxes), param0->unk_128->textInputStr); + param0->ApplicationManager = ApplicationManager_New(&Unk_020F2DAC, param0->unk_128, HEAP_ID_BOX_DATA); + (*state)++; } break; - case 2: + case RENAME_BOX_RETURN_TO_BOX: if (ApplicationManager_Exec(param0->ApplicationManager)) { u32 boxID = PCBoxes_GetCurrentBoxID(param0->pcBoxes); ApplicationManager_Free(param0->ApplicationManager); - Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_10, 245760); - PCBoxes_RenameBox(param0->pcBoxes, boxID, param0->unk_128->unk_18); + Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_BOX_GRAPHICS, 245760); + PCBoxes_RenameBox(param0->pcBoxes, boxID, param0->unk_128->textInputStr); PCBoxes_LoadCustomization(param0->pcBoxes, ¶m0->unk_00.customization); - ov19_021D61B0(&(param0->unk_114), ¶m0->unk_00, param0); - ov19_021D0EB0(param0, ov19_021D0F88); + BoxGraphics_Load(&(param0->unk_114), ¶m0->unk_00, param0); + ov19_RegisterBoxApplicationAction(param0, ov19_ReturnToBoxFade1Action); } break; } } -static void ov19_021D3C28(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum SummaryState { + SUMMARY_START, + SUMMARY_LAUNCH, + SUMMARY_RETURN_TO_BOX, +}; + +static void ov19_OpenSummaryAction(UnkStruct_ov19_021D5DF8 *param0, u32 *openSummaryState) { - switch (*param1) { - case 0: - ov19_021D6594(param0->unk_114, 3); - (*param1)++; + switch (*openSummaryState) { + case SUMMARY_START: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack2); + (*openSummaryState)++; break; - case 1: - if (ov19_021D6600(param0->unk_114, 3)) { - ov19_021D64A0(param0->unk_114); - Heap_Destroy(HEAP_ID_10); - ov19_021D1C84(param0); - param0->ApplicationManager = ApplicationManager_New(&gPokemonSummaryScreenApp, &(param0->monSummary), HEAP_ID_9); - (*param1)++; + case SUMMARY_LAUNCH: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack2)) { + BoxGraphics_Free(param0->unk_114); + Heap_Destroy(HEAP_ID_BOX_GRAPHICS); + ov19_InitSummary(param0); + param0->ApplicationManager = ApplicationManager_New(&gPokemonSummaryScreenApp, &(param0->monSummary), HEAP_ID_BOX_DATA); + (*openSummaryState)++; } break; - case 2: + case SUMMARY_RETURN_TO_BOX: if (ApplicationManager_Exec(param0->ApplicationManager)) { - u32 v0 = PCBoxes_GetCurrentBoxID(param0->pcBoxes); + u32 unused = PCBoxes_GetCurrentBoxID(param0->pcBoxes); ApplicationManager_Free(param0->ApplicationManager); - Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_10, 245760); + Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_BOX_GRAPHICS, 245760); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { ov19_SetCursorPosToSummaryMonPos(&(param0->unk_00), param0); } - ov19_021D61B0(&(param0->unk_114), ¶m0->unk_00, param0); - ov19_021D0EB0(param0, ov19_021D0F88); - ov19_021D0F14(param0); + BoxGraphics_Load(&(param0->unk_114), ¶m0->unk_00, param0); + ov19_RegisterBoxApplicationAction(param0, ov19_ReturnToBoxFade1Action); + ov19_FlagRecordBoxUseInJournal(param0); } } } @@ -2417,7 +2623,17 @@ static void ov19_SetCursorPosToSummaryMonPos(UnkStruct_ov19_021D4DF0 *param0, Un ov19_TryPreviewCursorMon(param1); } -static void ov19_021D3D44(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum GiveItemFromBag { + GIVE_FROM_BAG_START, + GIVE_FROM_BAG_INIT_BAG_APP, + GIVE_FROM_BAG_SELECT_ITEM, + GIVE_FROM_BAG_RETURN_TO_BOX, + GIVE_FROM_BAG_DISPLAY_MESSAGE, + GIVE_FROM_BAG_CONFIRM_MESSAGE, + GIVE_FROM_BAG_END +}; + +static void ov19_GiveItemFromBagAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { FS_EXTERN_OVERLAY(overlay84); @@ -2433,25 +2649,25 @@ static void ov19_021D3D44(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) }; static u32 item; - switch (*param1) { - case 0: - ov19_021D6594(param0->unk_114, 3); - (*param1)++; + switch (*state) { + case GIVE_FROM_BAG_START: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack2); + (*state)++; break; - case 1: - if (ov19_021D6600(param0->unk_114, 3)) { - ov19_021D64A0(param0->unk_114); - Heap_Destroy(HEAP_ID_10); + case GIVE_FROM_BAG_INIT_BAG_APP: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack2)) { + BoxGraphics_Free(param0->unk_114); + Heap_Destroy(HEAP_ID_BOX_GRAPHICS); Bag *bag = SaveData_GetBag(param0->saveData); - param0->unk_214 = sub_0207D824(bag, bagPockets, HEAP_ID_9); + param0->unk_214 = sub_0207D824(bag, bagPockets, HEAP_ID_BOX_DATA); sub_0207CB2C(param0->unk_214, param0->saveData, 1, NULL); Overlay_LoadByID(FS_OVERLAY_ID(overlay84), 2); - param0->ApplicationManager = ApplicationManager_New(&Unk_ov84_02241130, param0->unk_214, HEAP_ID_9); - (*param1)++; + param0->ApplicationManager = ApplicationManager_New(&Unk_ov84_02241130, param0->unk_214, HEAP_ID_BOX_DATA); + (*state)++; } break; - case 2: + case GIVE_FROM_BAG_SELECT_ITEM: if (ApplicationManager_Exec(param0->ApplicationManager)) { item = sub_0207CB94((UnkStruct_0207CB08 *)(param0->unk_214)); @@ -2459,328 +2675,355 @@ static void ov19_021D3D44(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) Heap_FreeToHeap(param0->unk_214); Overlay_UnloadByID(FS_OVERLAY_ID(overlay84)); - if ((item == ITEM_GRISEOUS_ORB) && (BoxPokemon_GetValue(param0->unk_00.pcMonPreview.mon, MON_DATA_SPECIES, NULL) != SPECIES_GIRATINA)) { + if (item == ITEM_GRISEOUS_ORB && BoxPokemon_GetValue(param0->unk_00.pcMonPreview.mon, MON_DATA_SPECIES, NULL) != SPECIES_GIRATINA) { (void)0; } else if (item != ITEM_NONE) { - Bag_TryRemoveItem(SaveData_GetBag(param0->saveData), item, 1, HEAP_ID_9); + Bag_TryRemoveItem(SaveData_GetBag(param0->saveData), item, 1, HEAP_ID_BOX_DATA); ov19_GiveItemToSelectedMon(¶m0->unk_00, item, param0); - ov19_021D0F14(param0); + ov19_FlagRecordBoxUseInJournal(param0); } - Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_10, 245760); - ov19_021D61B0(&(param0->unk_114), ¶m0->unk_00, param0); - ov19_021D6594(param0->unk_114, 0); - (*param1)++; + Heap_Create(HEAP_ID_APPLICATION, HEAP_ID_BOX_GRAPHICS, 245760); + BoxGraphics_Load(&(param0->unk_114), ¶m0->unk_00, param0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6694); + (*state)++; } break; - case 3: - if (ov19_021D6600(param0->unk_114, 0)) { - ov19_021D6594(param0->unk_114, 2); - (*param1)++; + case GIVE_FROM_BAG_RETURN_TO_BOX: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D6694)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack1); + (*state)++; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 2)) { + case GIVE_FROM_BAG_DISPLAY_MESSAGE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ScreenFadeBothToBlack1)) { if (item == ITEM_NONE) { - ov19_021D0EC0(param0); - } else if ((item == ITEM_GRISEOUS_ORB) && (BoxPokemon_GetValue(param0->unk_00.pcMonPreview.mon, MON_DATA_SPECIES, NULL) != SPECIES_GIRATINA)) { - StringTemplate_SetItemName(param0->unk_19C, 0, item); + ov19_ClearBoxApplicationAction(param0); + } else if (item == ITEM_GRISEOUS_ORB && BoxPokemon_GetValue(param0->unk_00.pcMonPreview.mon, MON_DATA_SPECIES, NULL) != SPECIES_GIRATINA) { + StringTemplate_SetItemName(param0->MessageVariableBuffer, 0, item); ov19_SetBoxMessage(¶m0->unk_00, BoxText_MonCantHoldItem); - ov19_021D6594(param0->unk_114, 24); - (*param1)++; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + (*state)++; } else { - StringTemplate_SetItemName(param0->unk_19C, 0, item); + StringTemplate_SetItemName(param0->MessageVariableBuffer, 0, item); ov19_SetBoxMessage(¶m0->unk_00, BoxText_HoldingItem); - ov19_021D6594(param0->unk_114, 24); - (*param1)++; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + (*state)++; } } break; - case 5: - if (ov19_021D6600(param0->unk_114, 24)) { - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { + case GIVE_FROM_BAG_CONFIRM_MESSAGE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage)) { + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 26); - (*param1)++; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + (*state)++; } } break; - case 6: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case GIVE_FROM_BAG_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D3FB0(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum ItemHeldState { + ITEM_HELD_START, + ITEM_HELD_YES_NO, + ITEM_HELD_ADD_TO_BAG, + ITEM_HELD_DISPLAY_TOOK_ITEM_MESSAGE, + ITEM_HELD_CONFIRM_MESSAGE, + ITEM_HELD_END +}; + +static void ov19_MonItemHeldAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { static u32 item; - switch (*param1) { - case 0: + switch (*state) { + case ITEM_HELD_START: item = ov19_GetPreviewedMonHeldItem(¶m0->unk_00); if (Item_IsMail(item)) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_CantTakeMail); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 4; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = ITEM_HELD_CONFIRM_MESSAGE; } else { - StringTemplate_SetItemName(param0->unk_19C, 0, item); - ov19_021DF964(&(param0->unk_00), 0); + StringTemplate_SetItemName(param0->MessageVariableBuffer, 0, item); + BoxMenu_FillYesNo(&(param0->unk_00), 0); ov19_SetBoxMessage(¶m0->unk_00, BoxText_ConfirmTakeItem); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 1; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = ITEM_HELD_YES_NO; } break; - case 1: - if (ov19_021D6628(param0->unk_114) == 0) { + case ITEM_HELD_YES_NO: + if (ov19_CheckAllTasksDone(param0->unk_114) == FALSE) { break; } - switch (ov19_021DFD2C(&(param0->unk_00))) { - case -2: - ov19_021D6594(param0->unk_114, 28); + switch (BoxMenu_GetMenuNavigation(&(param0->unk_00))) { + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); break; - case -1: - case UnkEnum_021DFB94_55: - ov19_021D6594(param0->unk_114, 26); - (*param1) = 5; + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_NO: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = ITEM_HELD_END; break; - case UnkEnum_021DFB94_54: - ov19_021D6594(param0->unk_114, 27); - (*param1) = 2; + case BOX_MENU_YES: + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6EC0); + *state = ITEM_HELD_ADD_TO_BAG; break; } break; - case 2: - if (Bag_TryAddItem(SaveData_GetBag(param0->saveData), item, 1, HEAP_ID_9)) { + case ITEM_HELD_ADD_TO_BAG: + if (Bag_TryAddItem(SaveData_GetBag(param0->saveData), item, 1, HEAP_ID_BOX_DATA)) { ov19_GiveItemToSelectedMon(¶m0->unk_00, ITEM_NONE, param0); - ov19_021D6594(param0->unk_114, 22); - ov19_021D6594(param0->unk_114, 6); - *param1 = 3; + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6D88); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + *state = ITEM_HELD_DISPLAY_TOOK_ITEM_MESSAGE; } else { ov19_SetBoxMessage(¶m0->unk_00, BoxText_BagFull); - ov19_021D6594(param0->unk_114, 24); - *param1 = 4; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = ITEM_HELD_CONFIRM_MESSAGE; } break; - case 3: - if (ov19_021D6628(param0->unk_114)) { + case ITEM_HELD_DISPLAY_TOOK_ITEM_MESSAGE: + if (ov19_CheckAllTasksDone(param0->unk_114)) { ov19_SetBoxMessage(¶m0->unk_00, BoxText_TookItem); - ov19_021D6594(param0->unk_114, 24); - *param1 = 4; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = ITEM_HELD_CONFIRM_MESSAGE; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 24)) { - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { + case ITEM_HELD_CONFIRM_MESSAGE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage)) { + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 26); - (*param1) = 5; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = ITEM_HELD_END; } } break; - case 5: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case ITEM_HELD_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D4184(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum PutAwayItemState { + PUT_AWAY_ITEM_START, + PUT_AWAY_ITEM_YES_NO, + PUT_AWAY_ITEM_ADD_TO_BAG, + PUT_AWAY_ITEM_ANIMATE_ITEM_AWAY, + PUT_AWAY_ITEM_SHOW_STORED_MESSAGE, + PUT_AWAY_ITEM_CONFIRM_MESSAGE, + PUT_AWAY_ITEM_END +}; + +static void ov19_PutAwayItemAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { static u32 item; - switch (*param1) { - case 0: + switch (*state) { + case PUT_AWAY_ITEM_START: item = ov19_GetCursorOrPreviewedItem(¶m0->unk_00); if (Item_IsMail(item)) { Sound_PlayEffect(SEQ_SE_DP_BOX03); ov19_SetBoxMessage(¶m0->unk_00, BoxText_CantTakeMail); - ov19_021D6594(param0->unk_114, 24); - (*param1) = 5; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = PUT_AWAY_ITEM_CONFIRM_MESSAGE; } else { - StringTemplate_SetItemName(param0->unk_19C, 0, item); + StringTemplate_SetItemName(param0->MessageVariableBuffer, 0, item); ov19_SetBoxMessage(¶m0->unk_00, BoxText_PutAwayItem); - ov19_021DF964(&(param0->unk_00), 0); - ov19_021D6594(param0->unk_114, 25); - (*param1) = 1; + BoxMenu_FillYesNo(&(param0->unk_00), 0); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowMenu); + *state = PUT_AWAY_ITEM_YES_NO; } break; - case 1: - if (ov19_021D6628(param0->unk_114) == 0) { + case PUT_AWAY_ITEM_YES_NO: + if (ov19_CheckAllTasksDone(param0->unk_114) == FALSE) { break; } - switch (ov19_021DFD2C(&(param0->unk_00))) { - case -2: - ov19_021D6594(param0->unk_114, 28); + switch (BoxMenu_GetMenuNavigation(&(param0->unk_00))) { + case BOX_MENU_NAVIGATION_UP_DOWN: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_UpdateMenuCursor); break; - case -1: - case UnkEnum_021DFB94_55: - ov19_021D6594(param0->unk_114, 26); - (*param1) = 6; + case BOX_MENU_NAVIGATION_B: + case BOX_MENU_NO: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = PUT_AWAY_ITEM_END; break; - case UnkEnum_021DFB94_54: - ov19_021D6594(param0->unk_114, 26); - (*param1) = 2; + case BOX_MENU_YES: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = PUT_AWAY_ITEM_ADD_TO_BAG; break; } break; - case 2: - if (Bag_TryAddItem(SaveData_GetBag(param0->saveData), item, 1, HEAP_ID_9)) { + case PUT_AWAY_ITEM_ADD_TO_BAG: + if (Bag_TryAddItem(SaveData_GetBag(param0->saveData), item, 1, HEAP_ID_BOX_DATA)) { if (ov19_GetCursorItem(¶m0->unk_00) != ITEM_NONE) { ov19_RemoveCursorItem(¶m0->unk_00); - *param1 = 4; + *state = PUT_AWAY_ITEM_SHOW_STORED_MESSAGE; } else { ov19_GiveItemToSelectedMon(¶m0->unk_00, ITEM_NONE, param0); - *param1 = 3; + *state = PUT_AWAY_ITEM_ANIMATE_ITEM_AWAY; } - ov19_021D6594(param0->unk_114, 23); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ItemShrinkToNothing); } else { ov19_SetBoxMessage(¶m0->unk_00, BoxText_BagFull); - ov19_021D6594(param0->unk_114, 24); - *param1 = 5; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = PUT_AWAY_ITEM_CONFIRM_MESSAGE; } break; - case 3: - if (ov19_021D6600(param0->unk_114, 23)) { - ov19_021D6594(param0->unk_114, 22); - ov19_021D6594(param0->unk_114, 6); - (*param1) = 4; + case PUT_AWAY_ITEM_ANIMATE_ITEM_AWAY: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ItemShrinkToNothing)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6D88); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + *state = PUT_AWAY_ITEM_SHOW_STORED_MESSAGE; } break; - case 4: - if (ov19_021D6628(param0->unk_114)) { + case PUT_AWAY_ITEM_SHOW_STORED_MESSAGE: + if (ov19_CheckAllTasksDone(param0->unk_114)) { ov19_SetBoxMessage(¶m0->unk_00, BoxText_PlaceItemInBag); - ov19_021D6594(param0->unk_114, 24); - *param1 = 5; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + *state = PUT_AWAY_ITEM_CONFIRM_MESSAGE; } break; - case 5: - if (ov19_021D6600(param0->unk_114, 24)) { - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { + case PUT_AWAY_ITEM_CONFIRM_MESSAGE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage)) { + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 26); - (*param1) = 6; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + *state = PUT_AWAY_ITEM_END; } } break; - case 6: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + case PUT_AWAY_ITEM_END: + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D4390(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum ItemInfoState { + ITEM_INFO_START, + ITEM_INFO_CLOSE_MENU, + ITEM_INFO_DISPLAY, + ITEM_INFO_CONFIRM, + ITEM_INFO_END +}; + +static void ov19_DisplayItemInfoAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: - ov19_021D6594(param0->unk_114, 26); - (*param1)++; + switch (*state) { + case ITEM_INFO_START: + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox); + (*state)++; break; - case 1: - if (ov19_021D6600(param0->unk_114, 26)) { - ov19_021D6594(param0->unk_114, 17); - (*param1)++; + case ITEM_INFO_CLOSE_MENU: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_CloseMessageBox)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayItemInfo); + (*state)++; } break; - case 2: - if (ov19_021D6600(param0->unk_114, 17)) { - (*param1)++; + case ITEM_INFO_DISPLAY: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayItemInfo)) { + (*state)++; } break; - case 3: - if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B | PAD_PLUS_KEY_MASK)) { - ov19_021D6594(param0->unk_114, 18); - (*param1)++; + case ITEM_INFO_CONFIRM: + if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B | PAD_PLUS_KEY_MASK)) { + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_CloseItemInfo); + (*state)++; } break; - case 4: - if (ov19_021D6600(param0->unk_114, 18)) { - ov19_021D0EC0(param0); + case ITEM_INFO_END: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_CloseItemInfo)) { + ov19_ClearBoxApplicationAction(param0); } break; } } -static void ov19_021D443C(UnkStruct_ov19_021D5DF8 *param0, u32 boxID, u32 boxMessageID) +static void BoxSelectorPopup_Init(UnkStruct_ov19_021D5DF8 *param0, u32 boxID, u32 boxMessageID) { - param0->unk_1BC.unk_00 = 0; - param0->unk_1BC.unk_05 = boxID; - param0->unk_1BC.boxMessageID = boxMessageID; - param0->unk_1BC.unk_04 = 0; + param0->boxSelector.state = BOX_SELECTOR_START; + param0->boxSelector.boxID = boxID; + param0->boxSelector.boxMessageID = boxMessageID; + param0->boxSelector.hasReset = FALSE; } -static void ov19_021D4458(UnkStruct_ov19_021D5DF8 *param0) +static void BoxSelectorPopup_Reset(UnkStruct_ov19_021D5DF8 *param0) { - param0->unk_1BC.unk_00 = 0; - param0->unk_1BC.unk_04 = 1; + param0->boxSelector.state = BOX_SELECTOR_START; + param0->boxSelector.hasReset = TRUE; } -static BOOL ov19_021D4468(UnkStruct_ov19_021D5DF8 *param0) +static BOOL ov19_TrySelectBoxFromPopup(UnkStruct_ov19_021D5DF8 *param0) { - UnkStruct_ov19_021D4468 *v0 = &(param0->unk_1BC); + BoxSelectorPopup *boxSelector = &(param0->boxSelector); - switch (v0->unk_00) { - case 0: - if (v0->unk_04 == 1) { - v0->unk_00 = 1; + switch (boxSelector->state) { + case BOX_SELECTOR_START: + if (boxSelector->hasReset == TRUE) { + boxSelector->state = BOX_SELECTOR_DISPLAY_MESSAGE_START; break; } - if (v0->unk_05 == -1) { - v0->unk_05 = 0; + if (boxSelector->boxID == -1) { + boxSelector->boxID = 0; } - ov19_021D5D20(¶m0->unk_00, v0->unk_05); - ov19_021D6594(param0->unk_114, 30); - v0->unk_00 = 1; + ov19_SetBoxSelectionBoxID(¶m0->unk_00, boxSelector->boxID); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ShowBoxSelectionPopup); + boxSelector->state = BOX_SELECTOR_DISPLAY_MESSAGE_START; break; - case 1: - if (ov19_021D6600(param0->unk_114, 30)) { - ov19_SetBoxMessage(¶m0->unk_00, v0->boxMessageID); - ov19_021D6594(param0->unk_114, 24); - v0->unk_00 = 2; + case BOX_SELECTOR_DISPLAY_MESSAGE_START: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ShowBoxSelectionPopup)) { + ov19_SetBoxMessage(¶m0->unk_00, boxSelector->boxMessageID); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage); + boxSelector->state = BOX_SELECTOR_DISPLAY_MESSAGE_DONE; } break; - case 2: - if (ov19_021D6600(param0->unk_114, 24) == 0) { + case BOX_SELECTOR_DISPLAY_MESSAGE_DONE: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_DisplayBoxMessage) == FALSE) { break; } - v0->unk_00 = 3; - case 3: - if (ov19_021D6600(param0->unk_114, 31) == 0) { + boxSelector->state = BOX_SELECTOR_WAIT_FOR_USER; + case BOX_SELECTOR_WAIT_FOR_USER: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ScrollBoxSelectionPopup) == FALSE) { break; } if (JOY_NEW(PAD_KEY_LEFT | PAD_BUTTON_L)) { - v0->unk_05--; + boxSelector->boxID--; - if (v0->unk_05 < 0) { - v0->unk_05 = 18 - 1; + if (boxSelector->boxID < 0) { + boxSelector->boxID = MAX_PC_BOXES - 1; } - ov19_021D5D20(¶m0->unk_00, v0->unk_05); - ov19_021D6594(param0->unk_114, 31); + ov19_SetBoxSelectionBoxID(¶m0->unk_00, boxSelector->boxID); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ScrollBoxSelectionPopup); break; } if (JOY_NEW(PAD_KEY_RIGHT | PAD_BUTTON_R)) { - if (++(v0->unk_05) >= MAX_PC_BOXES) { - v0->unk_05 = 0; + if (++(boxSelector->boxID) >= MAX_PC_BOXES) { + boxSelector->boxID = 0; } - ov19_021D5D20(¶m0->unk_00, v0->unk_05); - ov19_021D6594(param0->unk_114, 31); + ov19_SetBoxSelectionBoxID(¶m0->unk_00, boxSelector->boxID); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ScrollBoxSelectionPopup); break; } @@ -2791,7 +3034,7 @@ static BOOL ov19_021D4468(UnkStruct_ov19_021D5DF8 *param0) if (JOY_NEW(PAD_BUTTON_B)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); - v0->unk_05 = -1; + boxSelector->boxID = -1; return TRUE; } break; @@ -2800,28 +3043,34 @@ static BOOL ov19_021D4468(UnkStruct_ov19_021D5DF8 *param0) return FALSE; } -static void ov19_021D45A8(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) +enum MoveBoxState { + MOVE_BOX_START, + MOVE_BOX_WAIT_FOR_ANIMATION, + MOVE_BOX_END +}; + +static void ov19_ChangeToNewBoxAction(UnkStruct_ov19_021D5DF8 *param0, u32 *state) { - switch (*param1) { - case 0: + switch (*state) { + case MOVE_BOX_START: PCBoxes_SetCurrentBox(param0->pcBoxes, ov19_GetCurrentBox(¶m0->unk_00)); ov19_TryPreviewCursorMon(param0); - ov19_021D6594(param0->unk_114, 4); - (*param1)++; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox); + (*state)++; break; - case 1: - if (ov19_021D6600(param0->unk_114, 4)) { + case MOVE_BOX_WAIT_FOR_ANIMATION: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox)) { if (ov19_GetCursorLocation(¶m0->unk_00) == CURSOR_IN_BOX && ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { - ov19_021D6594(param0->unk_114, 6); - (*param1)++; + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); + (*state)++; } else { - ov19_021D0EC0(param0); + ov19_ClearBoxApplicationAction(param0); } } break; - case 2: - if (ov19_021D6600(param0->unk_114, 6)) { - ov19_021D0EC0(param0); + case MOVE_BOX_END: + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_PreviewMon)) { + ov19_ClearBoxApplicationAction(param0); } break; } @@ -2834,21 +3083,21 @@ static void ov19_021D4640(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) Sound_PlayEffect(SEQ_SE_DP_BUTTON9); ov19_021D5D94(¶m0->unk_00, 1); ov19_021D5D9C(&(param0->unk_00), ov19_GetCurrentBox(¶m0->unk_00)); - ov19_021D6594(param0->unk_114, 40); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7278); ov19_021D603C(&(param0->unk_1C8), 0, 192, 56, 88); param0->unk_204 = 0; param0->unk_208 = 1; (*param1) = 1; break; case 1: - if (ov19_021D6600(param0->unk_114, 40) == 0) { + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D7278) == FALSE) { break; } if (ov19_TryPressTouchScreenButton(param0)) { if (param0->touchScreenButtonPressed == 1) { if (ov19_GetBoxMode(¶m0->unk_00) != PC_MODE_MOVE_ITEMS) { - ov19_021D0EB0(param0, ov19_021D4938); + ov19_RegisterBoxApplicationAction(param0, ov19_021D4938); } else { Sound_PlayEffect(SEQ_SE_DP_BOX03); } @@ -2856,11 +3105,11 @@ static void ov19_021D4640(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) } } - if (gSystem.pressedKeys & (PAD_PLUS_KEY_MASK | PAD_BUTTON_A | PAD_BUTTON_B)) { + if (JOY_NEW(PAD_PLUS_KEY_MASK | PAD_BUTTON_A | PAD_BUTTON_B)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); ov19_021D5D94(&(param0->unk_00), 0); ov19_021D5D9C(&(param0->unk_00), ov19_GetCurrentBox(¶m0->unk_00)); - ov19_021D6594(param0->unk_114, 40); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7278); (*param1) = 5; break; } @@ -2875,10 +3124,10 @@ static void ov19_021D4640(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) ov19_TryPreviewCursorMon(param0); if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR) { - ov19_021D6594(param0->unk_114, 8); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D6A1C); } - ov19_021D6594(param0->unk_114, 4); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox); param0->unk_204 = 0; param0->unk_200 = 0; (*param1) = 3; @@ -2914,7 +3163,7 @@ static void ov19_021D4640(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) param0->unk_20C = v1; ov19_021D5D9C(&(param0->unk_00), v3); ov19_021D5DAC(&(param0->unk_00), v2); - ov19_021D6594(param0->unk_114, 41); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D72E8); Sound_PlayEffect(SEQ_SE_CONFIRM); (*param1) = 2; } @@ -2945,14 +3194,14 @@ static void ov19_021D4640(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) } } - if (ov19_021D6600(param0->unk_114, 41)) { + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D72E8)) { (*param1) = 1; } break; case 3: - if (ov19_021D6600(param0->unk_114, 4)) { + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_ChangeToNewBox)) { if (ov19_GetPreviewMonSource(¶m0->unk_00) == PREVIEW_MON_UNDER_CURSOR && ov19_IsMonUnderCursor(¶m0->unk_00)) { - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); (*param1) = 4; } else { (*param1) = 1; @@ -2960,13 +3209,13 @@ static void ov19_021D4640(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) } break; case 4: - if (ov19_021D6600(param0->unk_114, 6)) { + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_BoxGraphics_PreviewMon)) { (*param1) = 1; } break; case 5: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } @@ -2980,35 +3229,35 @@ static void ov19_021D4938(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) ov19_021D5D94(¶m0->unk_00, 2); ov19_SetMarkingsButtonsScrollOffset(&(param0->unk_00), 0); ov19_021D5D9C(&(param0->unk_00), 0); - ov19_021D6594(param0->unk_114, 40); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7278); ov19_021D603C(&(param0->unk_1C8), 255, 192, 56, 88); param0->unk_204 = 0; param0->unk_208 = 1; (*param1) = 1; break; case 1: - if (ov19_021D6600(param0->unk_114, 40) == 0) { + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D7278) == FALSE) { break; } if (ov19_TryPressTouchScreenButton(param0)) { if (param0->touchScreenButtonPressed == 0) { - ov19_021D0EB0(param0, ov19_021D4640); + ov19_RegisterBoxApplicationAction(param0, ov19_021D4640); break; } } - if (gSystem.pressedKeys & (PAD_PLUS_KEY_MASK | PAD_BUTTON_A | PAD_BUTTON_B)) { + if (JOY_NEW(PAD_PLUS_KEY_MASK | PAD_BUTTON_A | PAD_BUTTON_B)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); ov19_021D5D94(¶m0->unk_00, 0); - ov19_021D6594(param0->unk_114, 40); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7278); (*param1) = 3; } if (ov19_021D4B88(param0)) { Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021D6594(param0->unk_114, 42); - ov19_021D6594(param0->unk_114, 39); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7324); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D7248); break; } @@ -3041,7 +3290,7 @@ static void ov19_021D4938(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) ov19_021D5D9C(&(param0->unk_00), offset); ov19_SetMarkingsButtonsScrollOffset(&(param0->unk_00), offset); ov19_021D5DAC(&(param0->unk_00), v1); - ov19_021D6594(param0->unk_114, 41); + ov19_BoxTaskHandler(param0->unk_114, FUNC_ov19_021D72E8); Sound_PlayEffect(SEQ_SE_CONFIRM); (*param1) = 2; } @@ -3072,13 +3321,13 @@ static void ov19_021D4938(UnkStruct_ov19_021D5DF8 *param0, u32 *param1) } } - if (ov19_021D6600(param0->unk_114, 41)) { + if (ov19_IsSysTaskDone(param0->unk_114, FUNC_ov19_021D72E8)) { (*param1) = 1; } break; case 3: - if (ov19_021D6628(param0->unk_114)) { - ov19_021D0EC0(param0); + if (ov19_CheckAllTasksDone(param0->unk_114)) { + ov19_ClearBoxApplicationAction(param0); } break; } @@ -3123,24 +3372,24 @@ static void ov19_021D4BE0(UnkStruct_ov19_021D5DF8 *param0, UnkStruct_02042434 *p param0->party = SaveData_GetParty(param1->saveData); param0->options = SaveData_GetOptions(param1->saveData); param0->unk_118 = param1; - param1->unk_08 = 0; - param0->boxMessagesLoader = MessageLoader_Init(MESSAGE_LOADER_BANK_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_BOX_MESSAGES, HEAP_ID_9); - param0->speciesNameLoader = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_SPECIES_NAME, HEAP_ID_9); - param0->natureNameLoader = MessageLoader_Init(MESSAGE_LOADER_BANK_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_NATURE_NAMES, HEAP_ID_9); - param0->abilityNameLoader = MessageLoader_Init(MESSAGE_LOADER_BANK_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_ABILITY_NAMES, HEAP_ID_9); - param0->unk_19C = StringTemplate_Default(HEAP_ID_9); - param0->mon = Heap_AllocFromHeap(HEAP_ID_9, Pokemon_StructSize()); + param1->recordBoxUseInJournal = FALSE; + param0->boxMessagesLoader = MessageLoader_Init(MESSAGE_LOADER_BANK_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_BOX_MESSAGES, HEAP_ID_BOX_DATA); + param0->speciesNameLoader = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_SPECIES_NAME, HEAP_ID_BOX_DATA); + param0->natureNameLoader = MessageLoader_Init(MESSAGE_LOADER_BANK_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_NATURE_NAMES, HEAP_ID_BOX_DATA); + param0->abilityNameLoader = MessageLoader_Init(MESSAGE_LOADER_BANK_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_ABILITY_NAMES, HEAP_ID_BOX_DATA); + param0->MessageVariableBuffer = StringTemplate_Default(HEAP_ID_BOX_DATA); + param0->mon = Heap_AllocFromHeap(HEAP_ID_BOX_DATA, Pokemon_StructSize()); - GF_ASSERT(param0->unk_19C); - param0->unk_128 = sub_0208712C(HEAP_ID_9, 2, 0, 8, param0->options); + GF_ASSERT(param0->MessageVariableBuffer); + param0->unk_128 = sub_0208712C(HEAP_ID_BOX_DATA, 2, 0, 8, param0->options); if (param1->boxMode != PC_MODE_COMPARE) { - param0->mainBoxAndCompareButtonsAction = TouchScreenActions_RegisterHandler(sMainPcButtons, NELEMS(sMainPcButtons), ov19_BoxTouchScreenButtonHandler, param0, HEAP_ID_9); + param0->mainBoxAndCompareButtonsAction = TouchScreenActions_RegisterHandler(sMainPcButtons, NELEMS(sMainPcButtons), ov19_BoxTouchScreenButtonHandler, param0, HEAP_ID_BOX_DATA); } else { - param0->mainBoxAndCompareButtonsAction = TouchScreenActions_RegisterHandler(sComparePokemonButtons, NELEMS(sComparePokemonButtons), ov19_BoxTouchScreenButtonHandler, param0, HEAP_ID_9); + param0->mainBoxAndCompareButtonsAction = TouchScreenActions_RegisterHandler(sComparePokemonButtons, NELEMS(sComparePokemonButtons), ov19_BoxTouchScreenButtonHandler, param0, HEAP_ID_BOX_DATA); } - param0->markingsButtonsAction = TouchScreenActions_RegisterHandler(sPokemonMarkingsButtons, NELEMS(sPokemonMarkingsButtons), ov19_BoxTouchScreenMarkingsButtonHandler, param0, HEAP_ID_9); + param0->markingsButtonsAction = TouchScreenActions_RegisterHandler(sPokemonMarkingsButtons, NELEMS(sPokemonMarkingsButtons), ov19_BoxTouchScreenMarkingsButtonHandler, param0, HEAP_ID_BOX_DATA); param0->unk_00.pcBoxes = param0->pcBoxes; param0->unk_00.party = param0->party; param0->unk_00.unk_110 = 0; @@ -3164,7 +3413,7 @@ static void ov19_021D4D58(UnkStruct_ov19_021D5DF8 *param0) Heap_FreeToHeap(param0->mon); } - StringTemplate_Free(param0->unk_19C); + StringTemplate_Free(param0->MessageVariableBuffer); MessageLoader_Free(param0->boxMessagesLoader); MessageLoader_Free(param0->speciesNameLoader); MessageLoader_Free(param0->natureNameLoader); @@ -3213,7 +3462,7 @@ static void ov19_InitCursor(UnkStruct_ov19_021D5DF8 *param0) static void ov19_InitMonSelection(BoxMonSelection *selection) { - selection->boxMon = Heap_AllocFromHeap(HEAP_ID_9, MAX_MONS_PER_BOX * BoxPokemon_GetStructSize()); + selection->boxMon = Heap_AllocFromHeap(HEAP_ID_BOX_DATA, MAX_MONS_PER_BOX * BoxPokemon_GetStructSize()); selection->selectedMonCount = 0; selection->cursorMonIsPartyMon = FALSE; } @@ -3226,7 +3475,7 @@ static void ov19_MonSelectionFree(BoxMonSelection *selection) static void PCBoxes_InitCustomization(PCBoxes *pcBoxes, BoxCustomization *customization) { customization->boxID = PCBoxes_GetCurrentBoxID(pcBoxes); - customization->name = Strbuf_Init(PC_BOX_NAME_BUFFER_LEN, HEAP_ID_9); + customization->name = Strbuf_Init(PC_BOX_NAME_BUFFER_LEN, HEAP_ID_BOX_DATA); PCBoxes_LoadCustomization(pcBoxes, customization); } @@ -3237,11 +3486,11 @@ static void Customization_Free(BoxCustomization *customization) static void PCMonPreviewInit(PCMonPreview *param0) { - param0->nickname = Strbuf_Init(12, HEAP_ID_9); - param0->speciesName = Strbuf_Init(12, HEAP_ID_9); - param0->heldItemName = Strbuf_Init(18, HEAP_ID_9); - param0->nature = Strbuf_Init(12, HEAP_ID_9); - param0->ability = Strbuf_Init(16, HEAP_ID_9); + param0->nickname = Strbuf_Init(12, HEAP_ID_BOX_DATA); + param0->speciesName = Strbuf_Init(12, HEAP_ID_BOX_DATA); + param0->heldItemName = Strbuf_Init(18, HEAP_ID_BOX_DATA); + param0->nature = Strbuf_Init(12, HEAP_ID_BOX_DATA); + param0->ability = Strbuf_Init(16, HEAP_ID_BOX_DATA); } static void PCMonPreviewFree(PCMonPreview *param0) @@ -3255,14 +3504,14 @@ static void PCMonPreviewFree(PCMonPreview *param0) static void ov19_PCCompareMonsInit(UnkStruct_ov19_021D4EE4 *param0) { - param0->unk_00 = 0; + param0->compareMonSlot = 0; param0->unk_01 = 0; param0->compareButtonAnimationPressed = FALSE; for (int i = 0; i < 2; i++) { param0->unk_02[i] = 0; - param0->compareMons[i].monName = Strbuf_Init(12, HEAP_ID_9); - param0->compareMons[i].nature = Strbuf_Init(12, HEAP_ID_9); + param0->compareMons[i].monName = Strbuf_Init(12, HEAP_ID_BOX_DATA); + param0->compareMons[i].nature = Strbuf_Init(12, HEAP_ID_BOX_DATA); } } @@ -3797,7 +4046,7 @@ static void ov19_PutDownCursorMon(UnkStruct_ov19_021D5DF8 *param0, UnkStruct_ov1 if (isMonInPreview == FALSE && shayminIsForm1 == TRUE) { ov19_LoadBoxMonIntoPreview(param1, boxMon, param0); - ov19_021D6594(param0->unk_114, 6); + ov19_BoxTaskHandler(param0->unk_114, FUNC_BoxGraphics_PreviewMon); } param1->cursor.previewMonSource = PREVIEW_MON_UNDER_CURSOR; @@ -3885,7 +4134,7 @@ static BOOL ov19_TryStoreSelectedMonInBox(UnkStruct_ov19_021D5DF8 *param0, u32 b return FALSE; } -static void ov19_021D5834(UnkStruct_ov19_021D5DF8 *param0) +static void ov19_RemoveCursorMon(UnkStruct_ov19_021D5DF8 *param0) { UnkStruct_ov19_021D4DF0 *v0 = &(param0->unk_00); BoxCursor *cursor = &v0->cursor; @@ -3929,7 +4178,7 @@ static void ov19_LoadBoxMonIntoPreview(UnkStruct_ov19_021D4DF0 *param0, BoxPokem preview->heldItem = BoxPokemon_GetValue(boxMon, MON_DATA_HELD_ITEM, NULL); preview->dexNum = GetDexNumber(SaveData_GetDexMode(param2->saveData), preview->species); preview->isEgg = BoxPokemon_GetValue(boxMon, MON_DATA_EGG_EXISTS, NULL); - SpeciesData *speciesData = SpeciesData_FromMonSpecies(preview->species, HEAP_ID_9); + SpeciesData *speciesData = SpeciesData_FromMonSpecies(preview->species, HEAP_ID_BOX_DATA); preview->level = SpeciesData_GetLevelAt(speciesData, preview->species, BoxPokemon_GetValue(boxMon, MON_DATA_EXP, NULL)); preview->markings = BoxPokemon_GetValue(boxMon, MON_DATA_MARKS, NULL); preview->type1 = BoxPokemon_GetValue(boxMon, MON_DATA_TYPE_1, NULL); @@ -3951,7 +4200,7 @@ static void ov19_LoadBoxMonIntoPreview(UnkStruct_ov19_021D4DF0 *param0, BoxPokem } if (preview->heldItem != ITEM_NONE) { - Item_LoadName(preview->heldItemName, preview->heldItem, HEAP_ID_9); + Item_LoadName(preview->heldItemName, preview->heldItem, HEAP_ID_BOX_DATA); } else { MessageLoader_GetStrbuf(param2->boxMessagesLoader, BoxText_NoItem, preview->heldItemName); } @@ -3971,7 +4220,7 @@ static void ov19_LoadBoxMonIntoPreview(UnkStruct_ov19_021D4DF0 *param0, BoxPokem static void ov19_LoadBoxMonIntoComparison(UnkStruct_ov19_021D4DF0 *param0, BoxPokemon *boxMon, UnkStruct_ov19_021D5DF8 *param2) { PCMonPreview *preview = &(param0->pcMonPreview); - PCCompareMon *compareMon = &(param0->unk_A4.compareMons[param0->unk_A4.unk_00]); + PCCompareMon *compareMon = &(param0->unk_A4.compareMons[param0->unk_A4.compareMonSlot]); compareMon->mon = boxMon; compareMon->species = preview->species; @@ -4008,12 +4257,11 @@ static void ov19_LoadBoxMonIntoComparison(UnkStruct_ov19_021D4DF0 *param0, BoxPo Pokemon_ExitDecryptionContext(param2->mon, reencrypt); - param0->unk_A4.unk_02[param0->unk_A4.unk_00] = 1; + param0->unk_A4.unk_02[param0->unk_A4.compareMonSlot] = 1; } - -static void ov19_021D5B70(UnkStruct_ov19_021D4DF0 *param0) +static void ov19_ToggleCompareMonSlot(UnkStruct_ov19_021D4DF0 *param0) { - param0->unk_A4.unk_00 ^= 1; + param0->unk_A4.compareMonSlot ^= 1; } static void ov19_021D5B80(UnkStruct_ov19_021D4DF0 *param0) @@ -4033,15 +4281,15 @@ static void ov19_SetPreviewedBoxMon(UnkStruct_ov19_021D4DF0 *param0, BoxPokemon param0->pcMonPreview.mon = boxMon; } -static void ov19_021D5BAC(UnkStruct_ov19_021D4DF0 *param0) +static void ov19_UpdatePreviewMonMarkings(UnkStruct_ov19_021D4DF0 *param0) { PCMonPreview *preview = &(param0->pcMonPreview); - u8 v1 = param0->unk_74.unk_22; - preview->markings = v1; + u8 markings = param0->boxMenu.markings; + preview->markings = markings; - BoxPokemon_SetValue(preview->mon, MON_DATA_MARKS, &(v1)); + BoxPokemon_SetValue(preview->mon, MON_DATA_MARKS, &(markings)); - if ((ov19_GetCursorLocation(param0) == CURSOR_IN_BOX) && (ov19_GetPreviewMonSource(param0) == PREVIEW_MON_UNDER_CURSOR)) { + if (ov19_GetCursorLocation(param0) == CURSOR_IN_BOX && ov19_GetPreviewMonSource(param0) == PREVIEW_MON_UNDER_CURSOR) { SaveData_SetFullSaveRequired(); } } @@ -4052,7 +4300,7 @@ static void ov19_GiveItemToSelectedMon(UnkStruct_ov19_021D4DF0 *param0, u16 item preview->heldItem = item; if (preview->heldItem != 0) { - Item_LoadName(preview->heldItemName, preview->heldItem, HEAP_ID_9); + Item_LoadName(preview->heldItemName, preview->heldItem, HEAP_ID_BOX_DATA); } else { MessageLoader_GetStrbuf(param2->boxMessagesLoader, BoxText_NoItem, preview->heldItemName); } @@ -4109,10 +4357,9 @@ static void ov19_LoadCustomizationsFor(UnkStruct_ov19_021D4DF0 *param0, u32 boxI PCBoxes_LoadCustomization(param0->pcBoxes, customization); } -static void ov19_021D5D20(UnkStruct_ov19_021D4DF0 *param0, u32 param1) +static void ov19_SetBoxSelectionBoxID(UnkStruct_ov19_021D4DF0 *param0, u32 boxID) { - UnkStruct_ov19_021D5D20 *v0 = &(param0->unk_98); - v0->unk_00 = param1; + param0->boxSelectionBoxID = boxID; } static void ov19_PickUpHeldItem(UnkStruct_ov19_021D4DF0 *param0, UnkStruct_ov19_021D5DF8 *param1) @@ -4188,9 +4435,9 @@ MessageLoader *ov19_GetBoxMessagesLoader(const UnkStruct_ov19_021D5DF8 *param0) return param0->boxMessagesLoader; } -const StringTemplate *ov19_021D5DF0(const UnkStruct_ov19_021D5DF8 *param0) +const StringTemplate *ov19_GetMessageVariableBuffer(const UnkStruct_ov19_021D5DF8 *param0) { - return param0->unk_19C; + return param0->MessageVariableBuffer; } int ov19_GetOptionsFrame(const UnkStruct_ov19_021D5DF8 *param0) @@ -4307,9 +4554,9 @@ u32 ov19_GetPreviewedMonMarkings(const UnkStruct_ov19_021D4DF0 *param0) return param0->pcMonPreview.markings; } -u32 ov19_021D5EA8(const UnkStruct_ov19_021D4DF0 *param0) +u32 ov19_GetBoxSelectionBoxID(const UnkStruct_ov19_021D4DF0 *param0) { - return param0->unk_98.unk_00; + return param0->boxSelectionBoxID; } s32 ov19_021D5EB0(const UnkStruct_ov19_021D4DF0 *param0) @@ -4341,7 +4588,7 @@ BOOL ov19_IsCursorFastMode(const UnkStruct_ov19_021D4DF0 *param0) return param0->boxSettings.isCursorFastMode; } -void ov19_GetMultiSelectBoundingBox(const UnkStruct_ov19_021D4DF0 *param0, u32 *leftCol, u32 *rightCol, u32 *topCol, u32 *bottomCol) +void ov19_GetMultiSelectBoundingBox(const UnkStruct_ov19_021D4DF0 *param0, u32 *leftCol, u32 *rightCol, u32 *topRow, u32 *bottomRow) { const BoxMonSelection *selection = ¶m0->selection; @@ -4354,11 +4601,11 @@ void ov19_GetMultiSelectBoundingBox(const UnkStruct_ov19_021D4DF0 *param0, u32 * } if (selection->selectionStartRow <= selection->selectionEndRow) { - *topCol = selection->selectionStartRow; - *bottomCol = selection->selectionEndRow; + *topRow = selection->selectionStartRow; + *bottomRow = selection->selectionEndRow; } else { - *topCol = selection->selectionEndRow; - *bottomCol = selection->selectionStartRow; + *topRow = selection->selectionEndRow; + *bottomRow = selection->selectionStartRow; } } @@ -4412,9 +4659,9 @@ u32 ov19_GetCursorOrPreviewedItem(const UnkStruct_ov19_021D4DF0 *param0) return ov19_GetPreviewedMonHeldItem(param0); } -u32 ov19_021D5F9C(const UnkStruct_ov19_021D4DF0 *param0) +u32 ov19_GetCompareMonSlot(const UnkStruct_ov19_021D4DF0 *param0) { - return param0->unk_A4.unk_00; + return param0->unk_A4.compareMonSlot; } u32 ov19_021D5FA4(const UnkStruct_ov19_021D4DF0 *param0) @@ -4427,9 +4674,9 @@ const PCCompareMon *ov19_GetCompareMonFrom(const UnkStruct_ov19_021D4DF0 *param0 return ¶m0->unk_A4.compareMons[compareSlot]; } -BOOL ov19_021D5FB8(const UnkStruct_ov19_021D4DF0 *param0, int param1) +BOOL ov19_021D5FB8(const UnkStruct_ov19_021D4DF0 *param0, int compareMonSlot) { - return param0->unk_A4.unk_02[param1]; + return param0->unk_A4.unk_02[compareMonSlot]; } BOOL ov19_IsCompareButtonPressed(const UnkStruct_ov19_021D4DF0 *param0) diff --git a/src/overlay019/ov19_021D61B0.c b/src/overlay019/ov19_021D61B0.c index 3d52a57b42..17905fafcf 100644 --- a/src/overlay019/ov19_021D61B0.c +++ b/src/overlay019/ov19_021D61B0.c @@ -74,93 +74,151 @@ struct UnkStruct_ov19_021D61B0_t { const UnkStruct_ov19_021D5DF8 *unk_B414; }; -typedef struct { - u32 unk_00; +typedef struct BoxTaskParams { + enum BoxGraphicsFunctions function; u16 unk_04; - u16 unk_06; + u16 state; u16 unk_08; u16 unk_0A; UnkStruct_ov19_021D61B0 *unk_0C; void *unk_10; -} UnkStruct_ov19_021D6640; +} BoxTaskParams; static void ov19_021D6474(SysTask *param0, void *param1); -static void ov19_021D6640(UnkStruct_ov19_021D6640 *param0); +static void BoxTaskParams_Free(BoxTaskParams *params); static void ov19_021D6664(SysTask *param0, void *param1); static void ov19_021D6694(SysTask *param0, void *param1); -static void ov19_021D671C(SysTask *param0, void *param1); -static void ov19_021D6780(SysTask *param0, void *param1); -static void ov19_021D67DC(SysTask *param0, void *param1); -static void ov19_021D6824(SysTask *param0, void *param1); -static void ov19_021D68E4(SysTask *param0, void *param1); -static void ov19_021D6940(SysTask *param0, void *param1); +static void BoxGraphics_ScreenFadeBothToBlackLogIn(SysTask *task, void *param1); +static void BoxGraphics_ScreenFadeBothToBlack1(SysTask *task, void *param1); +static void BoxGraphics_ScreenFadeBothToBlack2(SysTask *task, void *param1); +static void BoxGraphics_ChangeToNewBox(SysTask *param0, void *param1); +static void BoxGraphics_MoveCursor(SysTask *param0, void *param1); +static void BoxGraphics_PreviewMon(SysTask *param0, void *param1); static void ov19_021D69BC(SysTask *param0, void *param1); static void ov19_021D6A1C(SysTask *param0, void *param1); -static void ov19_021D6A38(SysTask *param0, void *param1); -static void ov19_021D6A74(SysTask *param0, void *param1); +static void BoxGraphics_PickUpMonIntoCursor(SysTask *param0, void *param1); +static void BoxGraphics_PlaceMonDownFromCursor(SysTask *param0, void *param1); static void ov19_021D6AB0(SysTask *param0, void *param1); static void ov19_021D6AEC(SysTask *param0, void *param1); static void ov19_021D6B1C(SysTask *param0, void *param1); -static void ov19_021D6B6C(SysTask *param0, void *param1); -static void ov19_021D6BA8(SysTask *param0, void *param1); -static void ov19_021D6BF0(SysTask *param0, void *param1); -static void ov19_021D6C38(SysTask *param0, void *param1); -static void ov19_021D6C74(SysTask *param0, void *param1); +static void BoxGraphics_PlayReleaseCursorMonAnimation(SysTask *task, void *param1); +static void BoxGraphics_PlayReleaseBoxMonAnimation(SysTask *task, void *param1); +static void BoxGraphics_PlayReleasePartyMonAnimation(SysTask *task, void *param1); +static void BoxGraphics_DisplayItemInfo(SysTask *param0, void *param1); +static void BoxGraphics_CloseItemInfo(SysTask *param0, void *param1); static void ov19_021D6CB0(SysTask *param0, void *param1); static void ov19_021D6CF8(SysTask *param0, void *param1); static void ov19_021D6D40(SysTask *param0, void *param1); static void ov19_021D6D88(SysTask *param0, void *param1); -static void ov19_021D6DF8(SysTask *param0, void *param1); -static void ov19_021D6E48(SysTask *param0, void *param1); -static void ov19_021D6E70(SysTask *param0, void *param1); -static void ov19_021D6EA4(SysTask *param0, void *param1); +static void BoxGraphics_ItemShrinkToNothing(SysTask *param0, void *param1); +static void BoxGraphics_DisplayBoxMessage(SysTask *task, void *param1); +static void BoxGraphics_ShowMenu(SysTask *param0, void *param1); +static void BoxGraphics_CloseMessageBox(SysTask *task, void *param1); static void ov19_021D6EC0(SysTask *param0, void *param1); -static void ov19_021D6EDC(SysTask *param0, void *param1); +static void BoxGraphics_UpdateMenuCursor(SysTask *param0, void *param1); static void ov19_021D6F0C(SysTask *param0, void *param1); -static void ov19_021D6F3C(SysTask *param0, void *param1); -static void ov19_021D6F78(SysTask *param0, void *param1); +static void BoxGraphics_ShowBoxSelectionPopup(SysTask *param0, void *param1); +static void BoxGraphics_ScrollBoxSelectionPopup(SysTask *param0, void *param1); static void ov19_021D6FB0(SysTask *param0, void *param1); -static void ov19_021D6FEC(SysTask *param0, void *param1); -static void ov19_021D7028(SysTask *param0, void *param1); -static void ov19_021D70E8(SysTask *param0, void *param1); +static void BoxGraphics_TransitionWallpaper(SysTask *param0, void *param1); +static void BoxGraphics_PressBoxButton(SysTask *param0, void *param1); +static void BoxGraphics_OpenPartyPopup(SysTask *param0, void *param1); static void ov19_021D7138(SysTask *param0, void *param1); -static void ov19_021D71BC(SysTask *param0, void *param1); +static void BoxGraphics_PlayAdjustPartyAnimation(SysTask *task, void *param1); static void ov19_021D71F8(SysTask *param0, void *param1); static void ov19_021D7248(SysTask *param0, void *param1); static void ov19_021D7278(SysTask *param0, void *param1); static void ov19_021D72E8(SysTask *param0, void *param1); static void ov19_021D7324(SysTask *param0, void *param1); static void ov19_021D7340(SysTask *param0, void *param1); -static void ov19_021D735C(SysTask *param0, void *param1); +static void BoxGraphics_StartDrawMultiSelect(SysTask *param0, void *param1); static void ov19_021D7380(SysTask *param0, void *param1); -static void ov19_021D7398(SysTask *param0, void *param1); +static void BoxGraphics_ApplyMultiSelectMonShadingTask(SysTask *param0, void *param1); static void ov19_021D73B0(SysTask *param0, void *param1); static void ov19_021D73EC(SysTask *param0, void *param1); static void ov19_021D7408(SysTask *param0, void *param1); static void ov19_021D7424(SysTask *param0, void *param1); -static void ov19_021D7460(SysTask *param0, void *param1); +static void BoxGraphics_ScreenFadeBothToBlackLogOff(SysTask *task, void *param1); static void ov19_021D74B4(UnkStruct_ov19_021D61B0 *param0, const UnkStruct_ov19_021D4DF0 *param1); static void ov19_021D75CC(UnkStruct_ov19_021D61B0 *param0, const UnkStruct_ov19_021D4DF0 *param1, NARC *param2); static void ov19_021D76FC(void); static void ov19_021D7774(UnkStruct_ov19_021D61B0 *param0, const UnkStruct_ov19_021D4DF0 *param1, NARC *param2); -static int ov19_021D77A4(u32 param0, u32 param1); +static int BoxGraphics_GetBoxMoveDirection(u32 param0, u32 param1); static void ov19_021D7970(void); static void ov19_021D797C(void); -BOOL ov19_021D61B0(UnkStruct_ov19_021D61B0 **param0, const UnkStruct_ov19_021D4DF0 *param1, const UnkStruct_ov19_021D5DF8 *param2) +static const struct { + SysTaskFunc sysTaskFunc; + u32 unk_04; +} sBoxGraphicsTaskHandlers[] = { + [FUNC_ov19_021D6694] = { ov19_021D6694, 0 }, + [FUNC_BoxGraphics_ScreenFadeBothToBlack0] = { BoxGraphics_ScreenFadeBothToBlackLogIn, 0 }, + [FUNC_BoxGraphics_ScreenFadeBothToBlack1] = { BoxGraphics_ScreenFadeBothToBlack1, 0 }, + [FUNC_BoxGraphics_ScreenFadeBothToBlack2] = { BoxGraphics_ScreenFadeBothToBlack2, 0 }, + [FUNC_BoxGraphics_ChangeToNewBox] = { BoxGraphics_ChangeToNewBox, 0 }, + [FUNC_BoxGraphics_MoveCursor] = { BoxGraphics_MoveCursor, 0 }, + [FUNC_BoxGraphics_PreviewMon] = { BoxGraphics_PreviewMon, 0 }, + [FUNC_ov19_021D69BC] = { ov19_021D69BC, 0 }, + [FUNC_ov19_021D6A1C] = { ov19_021D6A1C, 0 }, + [FUNC_BoxGraphics_PickUpMonIntoCursor] = { BoxGraphics_PickUpMonIntoCursor, 0 }, + [FUNC_BoxGraphics_PlaceMonDownFromCursor] = { BoxGraphics_PlaceMonDownFromCursor, 0 }, + [FUNC_ov19_021D6AB0] = { ov19_021D6AB0, 0 }, + [FUNC_ov19_021D6AEC] = { ov19_021D6AEC, 0 }, + [FUNC_ov19_021D6B1C] = { ov19_021D6B1C, 0 }, + [FUNC_BoxGraphics_PlayReleaseCursorMonAnimation] = { BoxGraphics_PlayReleaseCursorMonAnimation, 0 }, + [FUNC_BoxGraphics_PlayReleaseBoxMonAnimation] = { BoxGraphics_PlayReleaseBoxMonAnimation, 0 }, + [FUNC_BoxGraphics_PlayReleasePartyMonAnimation] = { BoxGraphics_PlayReleasePartyMonAnimation, 0 }, + [FUNC_BoxGraphics_DisplayItemInfo] = { BoxGraphics_DisplayItemInfo, 0 }, + [FUNC_BoxGraphics_CloseItemInfo] = { BoxGraphics_CloseItemInfo, 0 }, + [FUNC_ov19_021D6CB0] = { ov19_021D6CB0, 0 }, + [FUNC_ov19_021D6CF8] = { ov19_021D6CF8, 0 }, + [FUNC_ov19_021D6D40] = { ov19_021D6D40, 0 }, + [FUNC_ov19_021D6D88] = { ov19_021D6D88, 0 }, + [FUNC_BoxGraphics_ItemShrinkToNothing] = { BoxGraphics_ItemShrinkToNothing, 0 }, + [FUNC_BoxGraphics_DisplayBoxMessage] = { BoxGraphics_DisplayBoxMessage, 0 }, + [FUNC_BoxGraphics_ShowMenu] = { BoxGraphics_ShowMenu, 0 }, + [FUNC_BoxGraphics_CloseMessageBox] = { BoxGraphics_CloseMessageBox, 0 }, + [FUNC_ov19_021D6EC0] = { ov19_021D6EC0, 0 }, + [FUNC_BoxGraphics_UpdateMenuCursor] = { BoxGraphics_UpdateMenuCursor, 0 }, + [FUNC_ov19_021D6F0C] = { ov19_021D6F0C, 0 }, + [FUNC_BoxGraphics_ShowBoxSelectionPopup] = { BoxGraphics_ShowBoxSelectionPopup, 0 }, + [FUNC_BoxGraphics_ScrollBoxSelectionPopup] = { BoxGraphics_ScrollBoxSelectionPopup, 0 }, + [FUNC_ov19_021D6FB0] = { ov19_021D6FB0, 0 }, + [FUNC_BoxGraphics_TransitionWallpaper] = { BoxGraphics_TransitionWallpaper, 0 }, + [FUNC_BoxGraphics_PressBoxButton] = { BoxGraphics_PressBoxButton, 0 }, + [FUNC_BoxGraphics_OpenPartyPopup] = { BoxGraphics_OpenPartyPopup, 0 }, + [FUNC_ov19_021D7138] = { ov19_021D7138, 0 }, + [FUNC_BoxGraphics_PlayAdjustPartyAnimation] = { BoxGraphics_PlayAdjustPartyAnimation, 0 }, + [FUNC_ov19_021D71F8] = { ov19_021D71F8, 0 }, + [FUNC_ov19_021D7248] = { ov19_021D7248, 0 }, + [FUNC_ov19_021D7278] = { ov19_021D7278, 0 }, + [FUNC_ov19_021D72E8] = { ov19_021D72E8, 0 }, + [FUNC_ov19_021D7324] = { ov19_021D7324, 0 }, + [FUNC_ov19_021D7340] = { ov19_021D7340, 0 }, + [FUNC_BoxGraphics_StartDrawMultiSelect] = { BoxGraphics_StartDrawMultiSelect, 0 }, + [FUNC_ov19_021D7380] = { ov19_021D7380, 0 }, + [FUNC_BoxGraphics_ApplyMultiSelectMonShadingTask] = { BoxGraphics_ApplyMultiSelectMonShadingTask, 0 }, + [FUNC_ov19_021D73B0] = { ov19_021D73B0, 0 }, + [FUNC_ov19_021D73EC] = { ov19_021D73EC, 0 }, + [FUNC_ov19_021D7408] = { ov19_021D7408, 0 }, + [FUNC_ov19_021D7424] = { ov19_021D7424, 0 }, + [FUNC_BoxGraphics_ScreenFadeBothToBlackLogOff] = { BoxGraphics_ScreenFadeBothToBlackLogOff, 0 }, +}; + +BOOL BoxGraphics_Load(UnkStruct_ov19_021D61B0 **param0, const UnkStruct_ov19_021D4DF0 *param1, const UnkStruct_ov19_021D5DF8 *param2) { - UnkStruct_ov19_021D61B0 *v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021D61B0)); + UnkStruct_ov19_021D61B0 *v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021D61B0)); if (v0 != NULL) { v0->unk_1C4 = param1; - v0->unk_1C0 = BgConfig_New(HEAP_ID_10); + v0->unk_1C0 = BgConfig_New(HEAP_ID_BOX_GRAPHICS); if (v0->unk_1C0 != NULL) { u32 v1; - BOOL v2 = 1; - NARC *v3; + BOOL v2 = TRUE; + NARC *boxGraphicsNarc; - v3 = NARC_ctor(NARC_INDEX_GRAPHIC__BOX, HEAP_ID_10); + boxGraphicsNarc = NARC_ctor(NARC_INDEX_GRAPHIC__BOX, HEAP_ID_BOX_GRAPHICS); SetVBlankCallback(NULL, NULL); DisableHBlank(); @@ -174,15 +232,15 @@ BOOL ov19_021D61B0(UnkStruct_ov19_021D61B0 **param0, const UnkStruct_ov19_021D4D NNS_G2dInitOamManagerModule(); RenderOam_Init(0, 128, 0, 32, 0, 128, 0, 32, 10); - v0->unk_18 = SpriteList_InitRendering(128, &v0->unk_1C, HEAP_ID_10); + v0->unk_18 = SpriteList_InitRendering(128, &v0->unk_1C, HEAP_ID_BOX_GRAPHICS); SetSubScreenViewRect(&(v0->unk_1C), 0, (384 << FX32_SHIFT)); NNS_G2dInitImagePaletteProxy(&(v0->unk_1A8)); - Graphics_LoadPartialPaletteFromOpenNARC(v3, 26, NNS_G2D_VRAM_TYPE_2DMAIN, 0, 10, &(v0->unk_1A8)); + Graphics_LoadPartialPaletteFromOpenNARC(boxGraphicsNarc, 26, NNS_G2D_VRAM_TYPE_2DMAIN, 0, 10, &(v0->unk_1A8)); Font_UseImmediateGlyphAccess(FONT_SYSTEM, 10); - v0->unk_1BC = PokemonSpriteManager_New(HEAP_ID_10); + v0->unk_1BC = PokemonSpriteManager_New(HEAP_ID_BOX_GRAPHICS); for (v1 = 0; v1 < 4; v1++) { v0->unk_08[v1] = NULL; @@ -191,29 +249,29 @@ BOOL ov19_021D61B0(UnkStruct_ov19_021D61B0 **param0, const UnkStruct_ov19_021D4D ov19_021D7970(); *param0 = v0; - v2 &= ov19_021DA270(&(v0->unk_1C8), v0, v0->unk_1C4, v0->unk_18, v3); + v2 &= ov19_021DA270(&(v0->unk_1C8), v0, v0->unk_1C4, v0->unk_18, boxGraphicsNarc); v2 &= ov19_021D79F8(&(v0->unk_494), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18); - v2 &= ov19_021D8B54(&(v0->unk_5E24), v0, v0->unk_1C4, v0->unk_18, v3); - v2 &= ov19_021DA814(&(v0->unk_65BC), v0, v0->unk_1C4, v0->unk_18, v3); - v2 &= ov19_021DA92C(&(v0->unk_6604), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, ov19_GetBoxMessagesLoader(param2), v3); - v2 &= ov19_021DB2FC(&(v0->unk_6658), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, ov19_GetBoxMessagesLoader(param2), ov19_021D5DF0(param2), ov19_GetOptionsFrame(param2), v3); - v2 &= ov19_021DB8E4(&(v0->unk_6690), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, v3); - v2 &= ov19_021DC5F0(&(v0->unk_B290), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, v3); + v2 &= ov19_021D8B54(&(v0->unk_5E24), v0, v0->unk_1C4, v0->unk_18, boxGraphicsNarc); + v2 &= ov19_021DA814(&(v0->unk_65BC), v0, v0->unk_1C4, v0->unk_18, boxGraphicsNarc); + v2 &= ov19_021DA92C(&(v0->unk_6604), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, ov19_GetBoxMessagesLoader(param2), boxGraphicsNarc); + v2 &= ov19_021DB2FC(&(v0->unk_6658), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, ov19_GetBoxMessagesLoader(param2), ov19_GetMessageVariableBuffer(param2), ov19_GetOptionsFrame(param2), boxGraphicsNarc); + v2 &= ov19_021DB8E4(&(v0->unk_6690), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, boxGraphicsNarc); + v2 &= ov19_021DC5F0(&(v0->unk_B290), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, boxGraphicsNarc); v2 &= ov19_021DCF88(&(v0->unk_B408), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18); v2 &= ov19_021DE3E8(&(v0->unk_B40C), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18); - v2 &= ov19_021DEC04(&(v0->unk_B410), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, ov19_GetBoxMessagesLoader(param2), v3); + v2 &= ov19_021DEC04(&(v0->unk_B410), v0, v0->unk_1C4, v0->unk_1C0, v0->unk_18, ov19_GetBoxMessagesLoader(param2), boxGraphicsNarc); v0->unk_B414 = param2; v0->unk_00 = SysTask_Start(ov19_021D6474, v0, 2); v0->unk_04 = ov19_021D77C8(ov19_021D6664, v0, 1); - NARC_dtor(v3); + NARC_dtor(boxGraphicsNarc); return v2; } } - return 0; + return FALSE; } static void ov19_021D6474(SysTask *param0, void *param1) @@ -231,7 +289,7 @@ static void ov19_021D6474(SysTask *param0, void *param1) G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_Z); } -void ov19_021D64A0(UnkStruct_ov19_021D61B0 *param0) +void BoxGraphics_Free(UnkStruct_ov19_021D61B0 *param0) { SetVBlankCallback(NULL, NULL); SysTask_Done(param0->unk_00); @@ -261,82 +319,23 @@ void ov19_021D64A0(UnkStruct_ov19_021D61B0 *param0) RenderOam_Free(); } -void ov19_021D6594(UnkStruct_ov19_021D61B0 *param0, u32 param1) +void ov19_BoxTaskHandler(UnkStruct_ov19_021D61B0 *param0, enum BoxGraphicsFunctions function) { - static const struct { - SysTaskFunc unk_00; - u32 unk_04; - } v0[] = { - { ov19_021D6694, 0 }, - { ov19_021D671C, 0 }, - { ov19_021D6780, 0 }, - { ov19_021D67DC, 0 }, - { ov19_021D6824, 0 }, - { ov19_021D68E4, 0 }, - { ov19_021D6940, 0 }, - { ov19_021D69BC, 0 }, - { ov19_021D6A1C, 0 }, - { ov19_021D6A38, 0 }, - { ov19_021D6A74, 0 }, - { ov19_021D6AB0, 0 }, - { ov19_021D6AEC, 0 }, - { ov19_021D6B1C, 0 }, - { ov19_021D6B6C, 0 }, - { ov19_021D6BA8, 0 }, - { ov19_021D6BF0, 0 }, - { ov19_021D6C38, 0 }, - { ov19_021D6C74, 0 }, - { ov19_021D6CB0, 0 }, - { ov19_021D6CF8, 0 }, - { ov19_021D6D40, 0 }, - { ov19_021D6D88, 0 }, - { ov19_021D6DF8, 0 }, - { ov19_021D6E48, 0 }, - { ov19_021D6E70, 0 }, - { ov19_021D6EA4, 0 }, - { ov19_021D6EC0, 0 }, - { ov19_021D6EDC, 0 }, - { ov19_021D6F0C, 0 }, - { ov19_021D6F3C, 0 }, - { ov19_021D6F78, 0 }, - { ov19_021D6FB0, 0 }, - { ov19_021D6FEC, 0 }, - { ov19_021D7028, 0 }, - { ov19_021D70E8, 0 }, - { ov19_021D7138, 0 }, - { ov19_021D71BC, 0 }, - { ov19_021D71F8, 0 }, - { ov19_021D7248, 0 }, - { ov19_021D7278, 0 }, - { ov19_021D72E8, 0 }, - { ov19_021D7324, 0 }, - { ov19_021D7340, 0 }, - { ov19_021D735C, 0 }, - { ov19_021D7380, 0 }, - { ov19_021D7398, 0 }, - { ov19_021D73B0, 0 }, - { ov19_021D73EC, 0 }, - { ov19_021D7408, 0 }, - { ov19_021D7424, 0 }, - { ov19_021D7460, 0 }, - }; + if (function < NELEMS(sBoxGraphicsTaskHandlers)) { + BoxTaskParams *taskParams; - if (param1 < NELEMS(v0)) { - UnkStruct_ov19_021D6640 *v1; - u32 v2; + for (u32 i = 0; i < 4; i++) { + if (param0->unk_08[i] == NULL) { + taskParams = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(BoxTaskParams) + sBoxGraphicsTaskHandlers[function].unk_04); - for (v2 = 0; v2 < 4; v2++) { - if (param0->unk_08[v2] == NULL) { - v1 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021D6640) + v0[param1].unk_04); + if (taskParams != NULL) { + taskParams->function = function; + taskParams->unk_04 = i; + taskParams->state = 0; + taskParams->unk_0C = param0; + taskParams->unk_10 = ((u8 *)(taskParams) + sBoxGraphicsTaskHandlers[function].unk_04); - if (v1 != NULL) { - v1->unk_00 = param1; - v1->unk_04 = v2; - v1->unk_06 = 0; - v1->unk_0C = param0; - v1->unk_10 = ((u8 *)(v1) + v0[param1].unk_04); - - param0->unk_08[v2] = SysTask_Start(v0[param1].unk_00, v1, 1); + param0->unk_08[i] = SysTask_Start(sBoxGraphicsTaskHandlers[function].sysTaskFunc, taskParams, 1); } else { GF_ASSERT(0); } @@ -349,44 +348,41 @@ void ov19_021D6594(UnkStruct_ov19_021D61B0 *param0, u32 param1) } } -BOOL ov19_021D6600(UnkStruct_ov19_021D61B0 *param0, u32 param1) +BOOL ov19_IsSysTaskDone(UnkStruct_ov19_021D61B0 *param0, enum BoxGraphicsFunctions function) { - UnkStruct_ov19_021D6640 *v0; - int v1; + BoxTaskParams *params; - for (v1 = 0; v1 < 4; v1++) { - if (param0->unk_08[v1] != NULL) { - v0 = SysTask_GetParam(param0->unk_08[v1]); + for (int i = 0; i < 4; i++) { + if (param0->unk_08[i] != NULL) { + params = SysTask_GetParam(param0->unk_08[i]); - if (v0->unk_00 == param1) { - return 0; + if (params->function == function) { + return FALSE; } } } - return 1; + return TRUE; } -BOOL ov19_021D6628(UnkStruct_ov19_021D61B0 *param0) +BOOL ov19_CheckAllTasksDone(UnkStruct_ov19_021D61B0 *param0) { - int v0; - - for (v0 = 0; v0 < 4; v0++) { - if (param0->unk_08[v0] != NULL) { - return 0; + for (int i = 0; i < 4; i++) { + if (param0->unk_08[i] != NULL) { + return FALSE; } } - return 1; + return TRUE; } -static void ov19_021D6640(UnkStruct_ov19_021D6640 *param0) +static void BoxTaskParams_Free(BoxTaskParams *params) { - UnkStruct_ov19_021D61B0 *v0 = param0->unk_0C; + UnkStruct_ov19_021D61B0 *v0 = params->unk_0C; - SysTask_Done(v0->unk_08[param0->unk_04]); - v0->unk_08[param0->unk_04] = NULL; - Heap_FreeToHeap(param0); + SysTask_Done(v0->unk_08[params->unk_04]); + v0->unk_08[params->unk_04] = NULL; + Heap_FreeToHeap(params); } static void ov19_021D6664(SysTask *param0, void *param1) @@ -405,127 +401,127 @@ static void ov19_021D6694(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; - v0 = v2->unk_0C; + BoxTaskParams *params = (BoxTaskParams *)param1; + v0 = params->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (params->state) { case 0: { - NARC *v3 = NARC_ctor(NARC_INDEX_GRAPHIC__BOX, HEAP_ID_10); + NARC *boxGraphicsNarc = NARC_ctor(NARC_INDEX_GRAPHIC__BOX, HEAP_ID_BOX_GRAPHICS); ov19_021D74B4(v0, v1); - ov19_021D75CC(v0, v1, v3); - ov19_021D7774(v0, v1, v3); - NARC_dtor(v3); + ov19_021D75CC(v0, v1, boxGraphicsNarc); + ov19_021D7774(v0, v1, boxGraphicsNarc); + NARC_dtor(boxGraphicsNarc); } if (ov19_GetBoxMode(v1) != PC_MODE_COMPARE) { ov19_021DAA90(&v0->unk_6604); - v2->unk_06++; + params->state++; } else { - ov19_021D6640(v2); + BoxTaskParams_Free(params); } break; case 1: if (ov19_021DAAC4(&v0->unk_6604)) { ov19_021DAF98(&(v0->unk_6604)); - ov19_021D6640(v2); + BoxTaskParams_Free(params); } break; } } -static void ov19_021D671C(SysTask *param0, void *param1) +static void BoxGraphics_ScreenFadeBothToBlackLogIn(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: Sound_PlayEffect(SEQ_SE_DP_PC_LOGIN); G2_SetBlendAlpha(GX_BLEND_PLANEMASK_NONE, GX_BLEND_ALL, 0x6, 0xa); - StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_UNK_1, FADE_TYPE_UNK_1, FADE_TO_BLACK, 8, 1, HEAP_ID_10); - v2->unk_06++; + StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_UNK_1, FADE_TYPE_UNK_1, FADE_TO_BLACK, 8, 1, HEAP_ID_BOX_GRAPHICS); + v2->state++; break; case 1: if (IsScreenFadeDone()) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D6780(SysTask *param0, void *param1) +static void BoxGraphics_ScreenFadeBothToBlack1(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: G2_SetBlendAlpha(GX_BLEND_PLANEMASK_NONE, GX_BLEND_ALL, 0x6, 0xa); - StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_UNK_1, FADE_TYPE_UNK_1, FADE_TO_BLACK, 6, 1, HEAP_ID_10); - v2->unk_06++; + StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_UNK_1, FADE_TYPE_UNK_1, FADE_TO_BLACK, 6, 1, HEAP_ID_BOX_GRAPHICS); + v2->state++; break; case 1: if (IsScreenFadeDone()) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D67DC(SysTask *param0, void *param1) +static void BoxGraphics_ScreenFadeBothToBlack2(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: - StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_UNK_0, FADE_TYPE_UNK_0, FADE_TO_BLACK, 6, 1, HEAP_ID_10); - v2->unk_06++; + StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_UNK_0, FADE_TYPE_UNK_0, FADE_TO_BLACK, 6, 1, HEAP_ID_BOX_GRAPHICS); + v2->state++; break; case 1: if (IsScreenFadeDone()) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D6824(SysTask *param0, void *param1) +static void BoxGraphics_ChangeToNewBox(SysTask *param0, void *taskParams) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; - v0 = v2->unk_0C; + BoxTaskParams *params = (BoxTaskParams *)taskParams; + v0 = params->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (params->state) { case 0: ov19_021DE9B8(v0->unk_B40C); - v2->unk_06++; + params->state++; case 1: - if (ov19_021DE9E4(v0->unk_B40C) == 0) { + if (ov19_021DE9E4(v0->unk_B40C) == FALSE) { break; } - v2->unk_06++; + params->state++; case 2: { - int v3 = ov19_021D77A4(v0->unk_494.boxID, v1->customization.boxID); + int boxChangeDirection = BoxGraphics_GetBoxMoveDirection(v0->unk_494.boxID, v1->customization.boxID); - ov19_021D7B4C(&v0->unk_494, &v1->customization, v3, TRUE); - ov19_021D7D70(&v0->unk_494, &v1->customization, v3); + ov19_021D7B4C(&v0->unk_494, &v1->customization, boxChangeDirection, TRUE); + ov19_021D7D70(&v0->unk_494, &v1->customization, boxChangeDirection); Sound_PlayEffect(SEQ_SE_CONFIRM); - v2->unk_06++; + params->state++; } case 3: if (ov19_021D7E1C(&v0->unk_494) == 0) { @@ -533,70 +529,70 @@ static void ov19_021D6824(SysTask *param0, void *param1) } ov19_021DE7A0(v0->unk_B40C); - v2->unk_06++; + params->state++; case 4: if (ov19_021DE800(v0->unk_B40C) == 0) { break; } - ov19_021D6640(v2); + BoxTaskParams_Free(params); break; } } -static void ov19_021D68E4(SysTask *param0, void *param1) +static void BoxGraphics_MoveCursor(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: Sound_PlayEffect(SEQ_SE_CONFIRM); ov19_021D8F60(&(v0->unk_5E24)); ov19_021DE7A0(v0->unk_B40C); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021D9074(&(v0->unk_5E24)) && ov19_021DE800(v0->unk_B40C)) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D6940(SysTask *param0, void *param1) +static void BoxGraphics_PreviewMon(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; if (ov19_GetBoxMode(v1) != PC_MODE_COMPARE) { - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021DAFF8(&(v0->unk_6604)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021DB220(&(v0->unk_6604))) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } else { - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021DEE34(v0->unk_B410); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021DEE84(v0->unk_B410)) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } @@ -607,7 +603,7 @@ static void ov19_021D69BC(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; @@ -625,58 +621,58 @@ static void ov19_021D69BC(SysTask *param0, void *param1) } ov19_021DB224(&v0->unk_6604); - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } static void ov19_021D6A1C(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; ov19_021DB078(&(v0->unk_6604)); - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } -static void ov19_021D6A38(SysTask *param0, void *param1) +static void BoxGraphics_PickUpMonIntoCursor(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; - v0 = v2->unk_0C; + BoxTaskParams *params = (BoxTaskParams *)param1; + v0 = params->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (params->state) { case 0: ov19_021D9230(&(v0->unk_5E24)); - v2->unk_06++; + params->state++; break; case 1: if (ov19_021D9278(&(v0->unk_5E24))) { - ov19_021D6640(v2); + BoxTaskParams_Free(params); } break; } } -static void ov19_021D6A74(SysTask *param0, void *param1) +static void BoxGraphics_PlaceMonDownFromCursor(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021D9368(&(v0->unk_5E24)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021D939C(&(v0->unk_5E24))) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } @@ -686,18 +682,18 @@ static void ov19_021D6AB0(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021D94B4(&(v0->unk_5E24)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021D9530(&(v0->unk_5E24))) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } @@ -707,17 +703,17 @@ static void ov19_021D6AEC(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021D9900(&(v0->unk_5E24)); - v2->unk_06++; + v2->state++; break; case 1: - ov19_021D6640(v2); + BoxTaskParams_Free(v2); break; } } @@ -726,127 +722,127 @@ static void ov19_021D6B1C(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021DCAC0(&(v0->unk_B290)); - v2->unk_06++; + v2->state++; break; case 1: ov19_021DC834(&(v0->unk_B290)); - v2->unk_06++; + v2->state++; break; case 2: if (ov19_021DC95C(&(v0->unk_B290))) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D6B6C(SysTask *param0, void *param1) +static void BoxGraphics_PlayReleaseCursorMonAnimation(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021D9938(&(v0->unk_5E24)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021D995C(&(v0->unk_5E24))) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D6BA8(SysTask *param0, void *param1) +static void BoxGraphics_PlayReleaseBoxMonAnimation(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021D8860(&(v0->unk_494), ov19_GetCursorBoxPosition(v1)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021D8898(&(v0->unk_494))) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D6BF0(SysTask *param0, void *param1) +static void BoxGraphics_PlayReleasePartyMonAnimation(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021DCAFC(&(v0->unk_B290), ov19_GetCursorPartyPosition(v1)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021DCB20(&(v0->unk_B290))) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D6C38(SysTask *param0, void *param1) +static void BoxGraphics_DisplayItemInfo(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021DC29C(&(v0->unk_6690)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021DC364(&(v0->unk_6690))) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D6C74(SysTask *param0, void *param1) +static void BoxGraphics_CloseItemInfo(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021DC3F4(&(v0->unk_6690)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021DC43C(&(v0->unk_6690))) { - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } @@ -856,19 +852,19 @@ static void ov19_021D6CB0(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021D9B34(&(v0->unk_5E24)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021D9B64(&(v0->unk_5E24))) { ov19_021DB2B0(&(v0->unk_6604)); - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } @@ -878,19 +874,19 @@ static void ov19_021D6CF8(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021D9BD4(&(v0->unk_5E24)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021D9C04(&(v0->unk_5E24))) { ov19_021DB2B0(&(v0->unk_6604)); - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } @@ -900,19 +896,19 @@ static void ov19_021D6D40(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021D9C74(&(v0->unk_5E24)); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021D9CA0(&(v0->unk_5E24))) { ov19_021DB2B0(&(v0->unk_6604)); - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } @@ -922,10 +918,10 @@ static void ov19_021D6D88(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2; + BoxTaskParams *v2; u32 item; - v2 = (UnkStruct_ov19_021D6640 *)param1; + v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; item = ov19_GetPreviewedMonHeldItem(v1); @@ -943,217 +939,217 @@ static void ov19_021D6D88(SysTask *param0, void *param1) } } - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } -static void ov19_021D6DF8(SysTask *param0, void *param1) +static void BoxGraphics_ItemShrinkToNothing(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2; + BoxTaskParams *v2; u32 v3; - v2 = (UnkStruct_ov19_021D6640 *)param1; + v2 = (BoxTaskParams *)param1; v0 = v2->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (v2->state) { case 0: ov19_021D9D10(&v0->unk_5E24); ov19_021DEB18(v0->unk_B40C); - v2->unk_06++; + v2->state++; break; case 1: if (ov19_021DEB60(v0->unk_B40C)) { ov19_021D9D28(&v0->unk_5E24); - ov19_021D6640(v2); + BoxTaskParams_Free(v2); } break; } } -static void ov19_021D6E48(SysTask *param0, void *param1) +static void BoxGraphics_DisplayBoxMessage(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *params; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + params = (BoxTaskParams *)param1; + v0 = params->unk_0C; + v2 = v0->unk_1C4; + + ov19_021DB448(&(v0->unk_6658), ov19_GetBoxMessageID(v2)); + BoxTaskParams_Free(params); +} + +static void BoxGraphics_ShowMenu(SysTask *param0, void *param1) +{ + UnkStruct_ov19_021D61B0 *v0; + BoxTaskParams *v1; + const UnkStruct_ov19_021D4DF0 *v2; + + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; ov19_021DB448(&(v0->unk_6658), ov19_GetBoxMessageID(v2)); - ov19_021D6640(v1); + ov19_021DB57C(&(v0->unk_6658), &(v2->boxMenu)); + BoxTaskParams_Free(v1); } -static void ov19_021D6E70(SysTask *param0, void *param1) +static void BoxGraphics_CloseMessageBox(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; - const UnkStruct_ov19_021D4DF0 *v2; - - v1 = (UnkStruct_ov19_021D6640 *)param1; - v0 = v1->unk_0C; - v2 = v0->unk_1C4; - - ov19_021DB448(&(v0->unk_6658), ov19_GetBoxMessageID(v2)); - ov19_021DB57C(&(v0->unk_6658), &(v2->unk_74)); - ov19_021D6640(v1); -} - -static void ov19_021D6EA4(SysTask *param0, void *param1) -{ - UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; ov19_021DB6F0(&(v0->unk_6658)); - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } static void ov19_021D6EC0(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1 = (UnkStruct_ov19_021D6640 *)param1; + BoxTaskParams *v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; ov19_021DB724(&(v0->unk_6658)); - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } -static void ov19_021D6EDC(SysTask *param0, void *param1) +static void BoxGraphics_UpdateMenuCursor(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; Sound_PlayEffect(SEQ_SE_CONFIRM); - ov19_021DB748(&(v0->unk_6658), &(v2->unk_74)); - ov19_021D6640(v1); + BoxGraphics_DrawMenuCursorBox(&(v0->unk_6658), &(v2->boxMenu)); + BoxTaskParams_Free(v1); } static void ov19_021D6F0C(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; Sound_PlayEffect(SEQ_SE_DP_DECIDE); - ov19_021DB790(&(v0->unk_6658), &(v2->unk_74)); - ov19_021D6640(v1); + ov19_021DB790(&(v0->unk_6658), &(v2->boxMenu)); + BoxTaskParams_Free(v1); } -static void ov19_021D6F3C(SysTask *param0, void *param1) +static void BoxGraphics_ShowBoxSelectionPopup(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *params; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; - v0 = v1->unk_0C; + params = (BoxTaskParams *)param1; + v0 = params->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (params->state) { case 0: ov19_021DBB48(&(v0->unk_6690)); - v1->unk_06++; + params->state++; break; case 1: if (ov19_021DBB68(&(v0->unk_6690))) { - ov19_021D6640(v1); + BoxTaskParams_Free(params); } } } -static void ov19_021D6F78(SysTask *param0, void *param1) +static void BoxGraphics_ScrollBoxSelectionPopup(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: Sound_PlayEffect(SEQ_SE_DP_DECIDE); ov19_021DBB70(&(v0->unk_6690)); - v1->unk_06++; + v1->state++; break; case 1: - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } } static void ov19_021D6FB0(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: ov19_021DBB94(&(v0->unk_6690)); - v1->unk_06++; + v1->state++; break; case 1: if (ov19_021DBBA0(&(v0->unk_6690))) { - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } } } -static void ov19_021D6FEC(SysTask *param0, void *param1) +static void BoxGraphics_TransitionWallpaper(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *params; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; - v0 = v1->unk_0C; + params = (BoxTaskParams *)param1; + v0 = params->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (params->state) { case 0: ov19_021D8350(&(v0->unk_494)); - v1->unk_06++; + params->state++; break; case 1: if (ov19_021D8370(&(v0->unk_494))) { - ov19_021D6640(v1); + BoxTaskParams_Free(params); } break; } } -static void ov19_021D7028(SysTask *param0, void *param1) +static void BoxGraphics_PressBoxButton(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: Sound_PlayEffect(SEQ_SE_DP_DECIDE); ov19_021D9690(&(v0->unk_5E24)); - v1->unk_06++; + v1->state++; break; case 1: if (ov19_021D9704(&(v0->unk_5E24))) { @@ -1167,44 +1163,44 @@ static void ov19_021D7028(SysTask *param0, void *param1) } v1->unk_08 = 0; - v1->unk_06++; + v1->state++; } break; case 2: if (++(v1->unk_08) >= 6) { ov19_021D97FC(&(v0->unk_5E24)); ov19_021DA8FC(&(v0->unk_65BC), 0); - v1->unk_06++; + v1->state++; } break; case 3: if (ov19_021D9858(&(v0->unk_5E24))) { - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } break; } } -static void ov19_021D70E8(SysTask *param0, void *param1) +static void BoxGraphics_OpenPartyPopup(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: Sound_PlayEffect(SEQ_SE_DP_OPEN7); ov19_021D99F4(&(v0->unk_5E24)); ov19_021DC6C8(&(v0->unk_B290)); - v1->unk_06++; + v1->state++; break; case 1: if (ov19_021DC6F8(&(v0->unk_B290))) { - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } break; } @@ -1213,55 +1209,55 @@ static void ov19_021D70E8(SysTask *param0, void *param1) static void ov19_021D7138(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: ov19_021DE9B8(v0->unk_B40C); - v1->unk_06++; + v1->state++; case 1: if (ov19_021DE9E4(v0->unk_B40C) == 0) { break; } - v1->unk_06++; + v1->state++; case 2: Sound_PlayEffect(SEQ_SE_DP_CLOSE7); ov19_021DC768(&(v0->unk_B290)); - v1->unk_06++; + v1->state++; break; case 3: if (ov19_021DC788(&(v0->unk_B290))) { ov19_021D9A2C(&(v0->unk_5E24)); - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } break; } } -static void ov19_021D71BC(SysTask *param0, void *param1) +static void BoxGraphics_PlayAdjustPartyAnimation(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *params; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; - v0 = v1->unk_0C; + params = (BoxTaskParams *)param1; + v0 = params->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (params->state) { case 0: ov19_021DC834(&(v0->unk_B290)); - v1->unk_06++; + params->state++; break; case 1: if (ov19_021DC95C(&(v0->unk_B290))) { - ov19_021D6640(v1); + BoxTaskParams_Free(params); } break; } @@ -1270,26 +1266,26 @@ static void ov19_021D71BC(SysTask *param0, void *param1) static void ov19_021D71F8(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: if (ov19_GetCursorLocation(v2) == CURSOR_IN_PARTY) { ov19_021DC96C(&v0->unk_B290); - v1->unk_06++; + v1->state++; break; } - ov19_021D6640(v1); + BoxTaskParams_Free(v1); break; case 1: if (ov19_021DCA08(&v0->unk_B290)) { - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } break; } @@ -1298,47 +1294,47 @@ static void ov19_021D71F8(SysTask *param0, void *param1) static void ov19_021D7248(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; ov19_021D8938(&v0->unk_494); ov19_021DCBA0(&v0->unk_B290); ov19_021D9A8C(&v0->unk_5E24); - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } static void ov19_021D7278(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: ov19_021DD378(v0->unk_B408); - v1->unk_06++; + v1->state++; break; case 1: if (ov19_021DD45C(v0->unk_B408)) { if (v2->unk_9C.unk_00 == 0) { - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } else { ov19_021DD714(v0->unk_B408); - v1->unk_06++; + v1->state++; } } break; case 2: if (ov19_021DD740(v0->unk_B408)) { - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } break; } @@ -1347,21 +1343,21 @@ static void ov19_021D7278(SysTask *param0, void *param1) static void ov19_021D72E8(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: ov19_021DD768(v0->unk_B408); - v1->unk_06++; + v1->state++; break; case 1: if (ov19_021DD820(v0->unk_B408)) { - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } break; } @@ -1370,92 +1366,92 @@ static void ov19_021D72E8(SysTask *param0, void *param1) static void ov19_021D7324(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; ov19_021DE2F4(v0->unk_B408); - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } static void ov19_021D7340(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; ov19_021D9AEC(&(v0->unk_5E24)); - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } -static void ov19_021D735C(SysTask *param0, void *param1) +static void BoxGraphics_StartDrawMultiSelect(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - ov19_021D9B10(&(v0->unk_5E24)); - ov19_021D8A6C(&(v0->unk_494)); - ov19_021D6640(v1); + BoxGraphics_OpenMultiSelectCursor(&(v0->unk_5E24)); + BoxGraphics_ApplyMultiSelectMonShading(&(v0->unk_494)); + BoxTaskParams_Free(v1); } static void ov19_021D7380(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; ov19_021D8B14(&(v0->unk_494)); - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } -static void ov19_021D7398(SysTask *param0, void *param1) +static void BoxGraphics_ApplyMultiSelectMonShadingTask(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - ov19_021D8A6C(&(v0->unk_494)); - ov19_021D6640(v1); + BoxGraphics_ApplyMultiSelectMonShading(&(v0->unk_494)); + BoxTaskParams_Free(v1); } static void ov19_021D73B0(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: ov19_021D9230(&(v0->unk_5E24)); - v1->unk_06++; + v1->state++; break; case 1: if (ov19_021D9278(&(v0->unk_5E24))) { - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } break; } @@ -1464,71 +1460,71 @@ static void ov19_021D73B0(SysTask *param0, void *param1) static void ov19_021D73EC(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; ov19_021DEDDC(v0->unk_B410, 0); - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } static void ov19_021D7408(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; ov19_021DEDDC(v0->unk_B410, 1); - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } static void ov19_021D7424(SysTask *param0, void *param1) { UnkStruct_ov19_021D61B0 *v0; - UnkStruct_ov19_021D6640 *v1; + BoxTaskParams *v1; const UnkStruct_ov19_021D4DF0 *v2; - v1 = (UnkStruct_ov19_021D6640 *)param1; + v1 = (BoxTaskParams *)param1; v0 = v1->unk_0C; v2 = v0->unk_1C4; - switch (v1->unk_06) { + switch (v1->state) { case 0: ov19_021DEE88(v0->unk_B410); - v1->unk_06++; + v1->state++; break; case 1: if (ov19_021DEEA8(v0->unk_B410)) { - ov19_021D6640(v1); + BoxTaskParams_Free(v1); } break; } } -static void ov19_021D7460(SysTask *param0, void *param1) +static void BoxGraphics_ScreenFadeBothToBlackLogOff(SysTask *task, void *param1) { UnkStruct_ov19_021D61B0 *v0; const UnkStruct_ov19_021D4DF0 *v1; - UnkStruct_ov19_021D6640 *v2 = (UnkStruct_ov19_021D6640 *)param1; - v0 = v2->unk_0C; + BoxTaskParams *params = (BoxTaskParams *)param1; + v0 = params->unk_0C; v1 = v0->unk_1C4; - switch (v2->unk_06) { + switch (params->state) { case 0: Sound_PlayEffect(SEQ_SE_DP_PC_LOGOFF); - StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_UNK_0, FADE_TYPE_UNK_0, FADE_TO_BLACK, 6, 1, HEAP_ID_10); - v2->unk_06++; + StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_UNK_0, FADE_TYPE_UNK_0, FADE_TO_BLACK, 6, 1, HEAP_ID_BOX_GRAPHICS); + params->state++; break; case 1: if (IsScreenFadeDone()) { - ov19_021D6640(v2); + BoxTaskParams_Free(params); } break; } @@ -1743,14 +1739,14 @@ static void ov19_021D74B4(UnkStruct_ov19_021D61B0 *param0, const UnkStruct_ov19_ static void ov19_021D75CC(UnkStruct_ov19_021D61B0 *param0, const UnkStruct_ov19_021D4DF0 *param1, NARC *param2) { - Graphics_LoadTilesToBgLayerFromOpenNARC(param2, 4, param0->unk_1C0, 1, 0, 0, 1, HEAP_ID_10); + Graphics_LoadTilesToBgLayerFromOpenNARC(param2, 4, param0->unk_1C0, 1, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); Bg_FillTilemapRect(param0->unk_1C0, 1, 0x0, 0, 0, 32, 32, 17); Bg_CopyTilemapBufferToVRAM(param0->unk_1C0, 1); - Graphics_LoadTilesToBgLayerFromOpenNARC(param2, 1, param0->unk_1C0, 2, 0, 0, 1, HEAP_ID_10); - Graphics_LoadPaletteFromOpenNARC(param2, 5, 0, 0, 0x20 * 7, HEAP_ID_10); + Graphics_LoadTilesToBgLayerFromOpenNARC(param2, 1, param0->unk_1C0, 2, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadPaletteFromOpenNARC(param2, 5, 0, 0, 0x20 * 7, HEAP_ID_BOX_GRAPHICS); if (ov19_GetBoxMode(param1) != PC_MODE_COMPARE) { - Graphics_LoadTilemapToBgLayerFromOpenNARC(param2, 0, param0->unk_1C0, 2, 0, 0, 1, HEAP_ID_10); + Graphics_LoadTilemapToBgLayerFromOpenNARC(param2, 0, param0->unk_1C0, 2, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); } ov19_021D7A9C(¶m0->unk_494); @@ -1794,19 +1790,19 @@ static void ov19_021D7774(UnkStruct_ov19_021D61B0 *param0, const UnkStruct_ov19_ ov19_021DE584(param0->unk_B40C); } -static int ov19_021D77A4(u32 param0, u32 param1) +static int BoxGraphics_GetBoxMoveDirection(u32 sourceBoxID, u32 destBoxID) { - int v0, v1; + int distanceRight, distanceLeft; - if (param1 > param0) { - v0 = param1 - param0; - v1 = param0 + (18 - param1); + if (destBoxID > sourceBoxID) { + distanceRight = destBoxID - sourceBoxID; + distanceLeft = sourceBoxID + (MAX_PC_BOXES - destBoxID); } else { - v0 = param1 + (18 - param0); - v1 = param0 - param1; + distanceRight = destBoxID + (MAX_PC_BOXES - sourceBoxID); + distanceLeft = sourceBoxID - destBoxID; } - return (v0 >= v1) ? -1 : 1; + return (distanceRight >= distanceLeft) ? -1 : 1; } SysTask *ov19_021D77C8(SysTaskFunc param0, void *param1, u32 param2) @@ -1888,7 +1884,7 @@ Sprite *ov19_021D785C(SpriteList *param0, SpriteResourcesHeader *param1, u32 par v0.position.z = 0; v0.priority = param4; v0.vramType = param5; - v0.heapID = HEAP_ID_10; + v0.heapID = HEAP_ID_BOX_GRAPHICS; { OSIntrMode v2 = OS_DisableInterrupts(); @@ -1905,12 +1901,12 @@ Sprite *ov19_021D785C(SpriteList *param0, SpriteResourcesHeader *param1, u32 par return v1; } -void ov19_021D78AC(Sprite *param0, u32 param1) +void BoxGraphics_SetSpritePriority(Sprite *sprite, u32 priority) { - OSIntrMode v0 = OS_DisableInterrupts(); + OSIntrMode mode = OS_DisableInterrupts(); - Sprite_SetPriority(param0, param1); - OS_RestoreInterrupts(v0); + Sprite_SetPriority(sprite, priority); + OS_RestoreInterrupts(mode); } void ov19_021D78C8(const u16 *param0, u16 *param1, u32 param2, u16 param3, u32 param4) diff --git a/src/overlay019/ov19_021D79F8.c b/src/overlay019/ov19_021D79F8.c index d7b46f9196..a581907ab5 100644 --- a/src/overlay019/ov19_021D79F8.c +++ b/src/overlay019/ov19_021D79F8.c @@ -153,18 +153,18 @@ static void ov19_021D7AF4(const UnkStruct_ov19_021D8318 *param0, int param1, u32 } } -void ov19_021D7B4C(UnkStruct_ov19_021D8318 *param0, const BoxCustomization *customization, int param2, BOOL param3) +void ov19_021D7B4C(UnkStruct_ov19_021D8318 *param0, const BoxCustomization *customization, int boxChangeDirection, BOOL param3) { u32 v0, v1, v2; - ov19_021D7AF4(param0, param2, &v0, &v1, &v2); + ov19_021D7AF4(param0, boxChangeDirection, &v0, &v1, &v2); ov19_021D7BC0(param0, customization, v2, param3); ov19_021D7C58(param0, customization, v0); ov19_021D7D00(param0, customization, v1, v0, v2); if (param3) { - if (param2 == 0) { - ov19_021D85C4(param0, param0->unk_58F0, customization->boxID, param0->unk_02, param2 * ((21 + 2) * 8), param0->unk_A8[param0->unk_02]); + if (boxChangeDirection == 0) { + ov19_021D85C4(param0, param0->unk_58F0, customization->boxID, param0->unk_02, boxChangeDirection * ((21 + 2) * 8), param0->unk_A8[param0->unk_02]); } } } @@ -172,7 +172,7 @@ void ov19_021D7B4C(UnkStruct_ov19_021D8318 *param0, const BoxCustomization *cust static void ov19_021D7BC0(UnkStruct_ov19_021D8318 *param0, const BoxCustomization *customization, int param2, BOOL param3) { NNSG2dPaletteData *v0; - void *v1 = Graphics_GetPlttData(NARC_INDEX_GRAPHIC__BOX, Unk_ov19_021E0178[customization->wallpaper].unk_02, &v0, HEAP_ID_10); + void *v1 = Graphics_GetPlttData(NARC_INDEX_GRAPHIC__BOX, Unk_ov19_021E0178[customization->wallpaper].unk_02, &v0, HEAP_ID_BOX_GRAPHICS); if (v1) { int v2; @@ -196,7 +196,7 @@ static void ov19_021D7BC0(UnkStruct_ov19_021D8318 *param0, const BoxCustomizatio static void ov19_021D7C58(UnkStruct_ov19_021D8318 *param0, const BoxCustomization *customization, int param2) { - void *v0 = LoadMemberFromNARC(NARC_INDEX_GRAPHIC__BOX, Unk_ov19_021E0178[customization->wallpaper].unk_01, TRUE, HEAP_ID_10, TRUE); + void *v0 = LoadMemberFromNARC(NARC_INDEX_GRAPHIC__BOX, Unk_ov19_021E0178[customization->wallpaper].unk_01, TRUE, HEAP_ID_BOX_GRAPHICS, TRUE); if (v0 != NULL) { NNSG2dCharacterData *v1; @@ -204,7 +204,7 @@ static void ov19_021D7C58(UnkStruct_ov19_021D8318 *param0, const BoxCustomizatio if (NNS_G2dGetUnpackedBGCharacterData(v0, &v1)) { Window *v2; - v2 = Window_New(HEAP_ID_10, 1); + v2 = Window_New(HEAP_ID_BOX_GRAPHICS, 1); if (v2) { u32 v3, v4; @@ -230,7 +230,7 @@ static void ov19_021D7C58(UnkStruct_ov19_021D8318 *param0, const BoxCustomizatio static void ov19_021D7D00(UnkStruct_ov19_021D8318 *param0, const BoxCustomization *customization, u32 param2, u32 param3, u32 param4) { - void *v0 = LoadMemberFromNARC(NARC_INDEX_GRAPHIC__BOX, Unk_ov19_021E0178[customization->wallpaper].unk_00, TRUE, HEAP_ID_10, TRUE); + void *v0 = LoadMemberFromNARC(NARC_INDEX_GRAPHIC__BOX, Unk_ov19_021E0178[customization->wallpaper].unk_00, TRUE, HEAP_ID_BOX_GRAPHICS, TRUE); if (v0) { u16 *v1; @@ -248,22 +248,22 @@ static void ov19_021D7D00(UnkStruct_ov19_021D8318 *param0, const BoxCustomizatio } } -void ov19_021D7D70(UnkStruct_ov19_021D8318 *param0, const BoxCustomization *customization, int param2) +void ov19_021D7D70(UnkStruct_ov19_021D8318 *param0, const BoxCustomization *customization, int boxChangeDirection) { param0->unk_08 = (Bg_GetXOffset(param0->unk_58F4, 3) & (REG_G2_BG3HOFS_OFFSET_MASK)) << FX32_SHIFT; - param0->unk_14 = param0->unk_08 + ((((21 + 2) * 8) * param2) << FX32_SHIFT); + param0->unk_14 = param0->unk_08 + ((((21 + 2) * 8) * boxChangeDirection) << FX32_SHIFT); param0->unk_10 = (param0->unk_14 - param0->unk_08) / (15 * 2); param0->unk_14 >>= FX32_SHIFT; param0->unk_14 &= (REG_G2_BG3HOFS_OFFSET_MASK); param0->unk_04 = (15 * 2); param0->unk_03 = param0->unk_02; - param0->unk_01 += ((21 + 2) * param2); + param0->unk_01 += ((21 + 2) * boxChangeDirection); param0->unk_01 &= 63; param0->unk_02 ^= 1; { ov19_021D813C(param0, customization->boxID); - ov19_021D7F14(param0, param0->unk_10, param2 * ((21 + 2) * 8)); + ov19_021D7F14(param0, param0->unk_10, boxChangeDirection * ((21 + 2) * 8)); param0->unk_30 = customization->boxID; param0->unk_34 = param0->unk_02; @@ -438,7 +438,7 @@ static void ov19_021D81B8(UnkStruct_ov19_021D8318 *param0, int param1, int param UnkStruct_ov19_021D81B8 *v0; param0->unk_A3 = 0; - v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021D81B8)); + v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021D81B8)); if (v0) { v0->unk_00 = param0; @@ -569,16 +569,16 @@ void ov19_021D845C(UnkStruct_ov19_021D8318 *param0, u32 param1, const UnkStruct_ v0 = 88 + (param0->unk_02 * 480) + ((4 * 4) * param1); v1 = ¶m0->unk_A8[param0->unk_02][param1]; ov19_021DA418(param2, v1, 1); - ov19_021DA7F4(param0->unk_58F0, v1, 0); + BoxGraphics_ApplyMonInMultiSelectShading(param0->unk_58F0, v1, FALSE); ov19_021DA754(param0->unk_58F0, v1, v0); - ov19_021D78AC(v1->unk_00, ov19_021D85B4(param1)); + BoxGraphics_SetSpritePriority(v1->unk_00, ov19_021D85B4(param1)); ov19_021D89F4(param0, param1); } -UnkStruct_ov19_021DCD18 *ov19_021D84C8(UnkStruct_ov19_021D8318 *param0, u32 param1) +UnkStruct_ov19_021DCD18 *ov19_021D84C8(UnkStruct_ov19_021D8318 *param0, u32 posInBox) { - return ¶m0->unk_A8[param0->unk_02][param1]; + return ¶m0->unk_A8[param0->unk_02][posInBox]; } void ov19_021D84E0(UnkStruct_ov19_021D8318 *param0) @@ -782,12 +782,12 @@ static void ov19_021D8764(u16 *param0, const u16 *param1, u32 param2, u32 param3 } } -void ov19_021D8860(UnkStruct_ov19_021D8318 *param0, u32 param1) +void ov19_021D8860(UnkStruct_ov19_021D8318 *param0, u32 boxCursorPosition) { - param0->unk_A0 = param1; + param0->unk_A0 = boxCursorPosition; param0->unk_A4 = 0; - ov19_021DA7B8(param0->unk_58F0, &(param0->unk_A8[param0->unk_02][param1]), 1); + ov19_021DA7B8(param0->unk_58F0, &(param0->unk_A8[param0->unk_02][boxCursorPosition]), 1); } BOOL ov19_021D8898(UnkStruct_ov19_021D8318 *param0) @@ -799,10 +799,10 @@ BOOL ov19_021D8898(UnkStruct_ov19_021D8318 *param0) if (ov19_021DA7E0(param0->unk_58F0, v0)) { const UnkStruct_ov19_021D5DF8 *v1 = ov19_021D7964(param0->unk_58FC); - if (ov19_021D3B18(v1)) { - if (ov19_021D3B20(v1)) { + if (ov19_HasCheckedCanReleaseMon(v1)) { + if (ov19_CanReleaseMon(v1)) { ov19_021DA3F0(param0->unk_58F0, v0, 1); - return 1; + return TRUE; } else { ov19_021DA7B8(param0->unk_58F0, v0, 2); param0->unk_A4++; @@ -814,12 +814,12 @@ BOOL ov19_021D8898(UnkStruct_ov19_021D8318 *param0) case 1: if (ov19_021DA7E0(param0->unk_58F0, v0)) { - return 1; + return TRUE; } break; } - return 0; + return FALSE; } void ov19_021D8938(UnkStruct_ov19_021D8318 *param0) @@ -862,36 +862,34 @@ void ov19_021D8A24(UnkStruct_ov19_021D8318 *param0) } } -void ov19_021D8A6C(UnkStruct_ov19_021D8318 *param0) +void BoxGraphics_ApplyMultiSelectMonShading(UnkStruct_ov19_021D8318 *param0) { - u32 v0, v1, v2, v3, v4, v5, v6; + u32 leftCol, rightCol, topRow, bottomRow, col, row, posInBox; - ov19_GetMultiSelectBoundingBox(param0->unk_58F8, &v0, &v1, &v2, &v3); + ov19_GetMultiSelectBoundingBox(param0->unk_58F8, &leftCol, &rightCol, &topRow, &bottomRow); - v6 = 0; + posInBox = 0; - for (v5 = 0; v5 < 5; v5++) { - for (v4 = 0; v4 < 6; v4++) { - if (param0->unk_A8[param0->unk_02][v6].unk_00 != NULL) { - if (((u32)(v4 - v0) <= (u32)(v1 - v0)) & ((u32)(v5 - v2) <= (u32)(v3 - v2))) { - ov19_021DA7F4(param0->unk_58F0, &(param0->unk_A8[param0->unk_02][v6]), 1); + for (row = 0; row < MAX_PC_ROWS; row++) { + for (col = 0; col < MAX_PC_COLS; col++) { + if (param0->unk_A8[param0->unk_02][posInBox].unk_00 != NULL) { + if (((u32)(col - leftCol) <= (u32)(rightCol - leftCol)) & ((u32)(row - topRow) <= (u32)(bottomRow - topRow))) { + BoxGraphics_ApplyMonInMultiSelectShading(param0->unk_58F0, &(param0->unk_A8[param0->unk_02][posInBox]), TRUE); } else { - ov19_021DA7F4(param0->unk_58F0, &(param0->unk_A8[param0->unk_02][v6]), 0); + BoxGraphics_ApplyMonInMultiSelectShading(param0->unk_58F0, &(param0->unk_A8[param0->unk_02][posInBox]), FALSE); } } - v6++; + posInBox++; } } } void ov19_021D8B14(UnkStruct_ov19_021D8318 *param0) { - int v0; - - for (v0 = 0; v0 < (5 * 6); v0++) { - if (param0->unk_A8[param0->unk_02][v0].unk_00 != NULL) { - ov19_021DA7F4(param0->unk_58F0, &(param0->unk_A8[param0->unk_02][v0]), 0); + for (int i = 0; i < MAX_MONS_PER_BOX; i++) { + if (param0->unk_A8[param0->unk_02][i].unk_00 != NULL) { + BoxGraphics_ApplyMonInMultiSelectShading(param0->unk_58F0, &(param0->unk_A8[param0->unk_02][i]), FALSE); } } } diff --git a/src/overlay019/ov19_021D8B54.c b/src/overlay019/ov19_021D8B54.c index 3139fdbdaa..1ce5d0a5d8 100644 --- a/src/overlay019/ov19_021D8B54.c +++ b/src/overlay019/ov19_021D8B54.c @@ -82,8 +82,8 @@ BOOL ov19_021D8B54(UnkStruct_ov19_021D8E00 *param0, UnkStruct_ov19_021D61B0 *par param0->unk_10 = NULL; param0->unk_754 = 0; param0->unk_78E = 1; - param0->unk_14 = Graphics_GetCellBankFromOpenNARC(param4, 13, 1, &(param0->unk_1C), HEAP_ID_10); - param0->unk_18 = Graphics_GetAnimBankFromOpenNARC(param4, 14, 1, &(param0->unk_20), HEAP_ID_10); + param0->unk_14 = Graphics_GetCellBankFromOpenNARC(param4, 13, 1, &(param0->unk_1C), HEAP_ID_BOX_GRAPHICS); + param0->unk_18 = Graphics_GetAnimBankFromOpenNARC(param4, 14, 1, &(param0->unk_20), HEAP_ID_BOX_GRAPHICS); if ((param0->unk_14 == NULL) || (param0->unk_18 == NULL)) { return 0; @@ -535,7 +535,7 @@ BOOL ov19_021D9530(UnkStruct_ov19_021D8E00 *param0) static void ov19_021D9554(UnkStruct_ov19_021D8E00 *param0, Sprite *param1, fx32 param2, s32 param3, u32 param4) { - UnkStruct_ov19_021D9554 *v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021D9554)); + UnkStruct_ov19_021D9554 *v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021D9554)); if (v0) { VecFx32 v1; @@ -588,7 +588,7 @@ static void ov19_021D9600(SysTask *param0, void *param1) v0->unk_04--; if (v0->unk_04 == v0->unk_06) { - ov19_021D78AC(v0->unk_00, v0->unk_08); + BoxGraphics_SetSpritePriority(v0->unk_00, v0->unk_08); } v0->unk_0C += v0->unk_1C; @@ -749,8 +749,8 @@ BOOL ov19_021D995C(UnkStruct_ov19_021D8E00 *param0) } break; case 1: - if (ov19_021D3B18(v0)) { - if (ov19_021D3B20(v0)) { + if (ov19_HasCheckedCanReleaseMon(v0)) { + if (ov19_CanReleaseMon(v0)) { Sprite_SetAnim(param0->unk_04, 0); ov19_021DA204(param0); return 1; @@ -833,7 +833,7 @@ void ov19_021D9AEC(UnkStruct_ov19_021D8E00 *param0) } } -void ov19_021D9B10(UnkStruct_ov19_021D8E00 *param0) +void BoxGraphics_OpenMultiSelectCursor(UnkStruct_ov19_021D8E00 *param0) { Sprite_SetAnim(param0->unk_04, 1); } @@ -1069,7 +1069,7 @@ static void ov19_021DA038(UnkStruct_ov19_021D8E00 *param0) int v0; for (v0 = 0; v0 < param0->unk_754; v0++) { - ov19_021D78AC(param0->unk_4C[v0].unk_00, 2); + BoxGraphics_SetSpritePriority(param0->unk_4C[v0].unk_00, 2); } param0->unk_78C = 1; diff --git a/src/overlay019/ov19_021DA270.c b/src/overlay019/ov19_021DA270.c index 1b86157498..88974002bf 100644 --- a/src/overlay019/ov19_021DA270.c +++ b/src/overlay019/ov19_021DA270.c @@ -23,12 +23,12 @@ BOOL ov19_021DA270(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021D61B0 *par NNSG2dPaletteData *v1; void *v2; - param0->unk_48 = NARC_ctor(NARC_INDEX_POKETOOL__ICONGRA__PL_POKE_ICON, HEAP_ID_10); + param0->unk_48 = NARC_ctor(NARC_INDEX_POKETOOL__ICONGRA__PL_POKE_ICON, HEAP_ID_BOX_GRAPHICS); NNS_G2dInitImagePaletteProxy(&v0); Graphics_LoadPartialPaletteFromOpenNARC(param0->unk_48, PokeIconPalettesFileIndex(), NNS_G2D_VRAM_TYPE_2DMAIN, 2 * 0x20, 10, &v0); - v2 = Graphics_GetPlttDataFromOpenNARC(param0->unk_48, PokeIconPalettesFileIndex(), &v1, HEAP_ID_10); + v2 = Graphics_GetPlttDataFromOpenNARC(param0->unk_48, PokeIconPalettesFileIndex(), &v1, HEAP_ID_BOX_GRAPHICS); if (v2) { BOOL v3; @@ -47,10 +47,10 @@ BOOL ov19_021DA270(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021D61B0 *par Heap_FreeToHeap(v2); } - param0->unk_08 = Graphics_GetCellBankFromOpenNARC(param4, 21, 1, &(param0->unk_10), HEAP_ID_10); - param0->unk_00 = Graphics_GetAnimBankFromOpenNARC(param4, 22, 1, &(param0->unk_04), HEAP_ID_10); - param0->unk_14 = Graphics_GetCellBankFromOpenNARC(param4, 23, 1, &(param0->unk_1C), HEAP_ID_10); - param0->unk_18 = Graphics_GetAnimBankFromOpenNARC(param4, 24, 1, &(param0->unk_20), HEAP_ID_10); + param0->unk_08 = Graphics_GetCellBankFromOpenNARC(param4, 21, 1, &(param0->unk_10), HEAP_ID_BOX_GRAPHICS); + param0->unk_00 = Graphics_GetAnimBankFromOpenNARC(param4, 22, 1, &(param0->unk_04), HEAP_ID_BOX_GRAPHICS); + param0->unk_14 = Graphics_GetCellBankFromOpenNARC(param4, 23, 1, &(param0->unk_1C), HEAP_ID_BOX_GRAPHICS); + param0->unk_18 = Graphics_GetAnimBankFromOpenNARC(param4, 24, 1, &(param0->unk_20), HEAP_ID_BOX_GRAPHICS); if ((param0->unk_08 == NULL) || (param0->unk_00 == NULL) || (param0->unk_48 == NULL)) { return 0; @@ -282,9 +282,9 @@ BOOL ov19_021DA7E0(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021DCD18 *par return Sprite_IsAnimated(param1->unk_00) == 0; } -void ov19_021DA7F4(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021DCD18 *param1, BOOL param2) +void BoxGraphics_ApplyMonInMultiSelectShading(UnkStruct_ov19_021DA384 *param0, UnkStruct_ov19_021DCD18 *param1, BOOL isSelected) { - u32 v0 = ((param2) ? 6 : 2) + param1->unk_2C; + u32 v0 = ((isSelected) ? 6 : 2) + param1->unk_2C; Sprite_SetExplicitPalette(param1->unk_00, v0); } diff --git a/src/overlay019/ov19_021DA814.c b/src/overlay019/ov19_021DA814.c index 097bb48c8b..27bb57c57a 100644 --- a/src/overlay019/ov19_021DA814.c +++ b/src/overlay019/ov19_021DA814.c @@ -20,8 +20,8 @@ BOOL ov19_021DA814(UnkStruct_ov19_021DA8D8 *param0, UnkStruct_ov19_021D61B0 *par param0->unk_40 = param2; param0->unk_00 = param3; param0->unk_04 = NULL; - param0->unk_08 = Graphics_GetCellBankFromOpenNARC(param4, 10, 1, &(param0->unk_10), HEAP_ID_10); - param0->unk_0C = Graphics_GetAnimBankFromOpenNARC(param4, 11, 1, &(param0->unk_14), HEAP_ID_10); + param0->unk_08 = Graphics_GetCellBankFromOpenNARC(param4, 10, 1, &(param0->unk_10), HEAP_ID_BOX_GRAPHICS); + param0->unk_0C = Graphics_GetAnimBankFromOpenNARC(param4, 11, 1, &(param0->unk_14), HEAP_ID_BOX_GRAPHICS); if ((param0->unk_08 == NULL) || (param0->unk_0C == NULL)) { return 0; diff --git a/src/overlay019/ov19_021DA92C.c b/src/overlay019/ov19_021DA92C.c index 9ff4ab5fc9..9ca68da254 100644 --- a/src/overlay019/ov19_021DA92C.c +++ b/src/overlay019/ov19_021DA92C.c @@ -64,13 +64,13 @@ BOOL ov19_021DA92C(UnkStruct_ov19_021DA9E0 *param0, UnkStruct_ov19_021D61B0 *par param0->unk_4C = NULL; param0->unk_24 = NULL; param0->unk_20 = ov19_021D7818(param1); - param0->unk_18 = sub_0200C440(9, 6, 15, HEAP_ID_10); - param0->unk_1C = sub_0200C440(1, 2, 15, HEAP_ID_10); - param0->unk_28 = Graphics_GetCellBankFromOpenNARC(param6, 16, 1, &(param0->unk_2C), HEAP_ID_10); + param0->unk_18 = sub_0200C440(9, 6, 15, HEAP_ID_BOX_GRAPHICS); + param0->unk_1C = sub_0200C440(1, 2, 15, HEAP_ID_BOX_GRAPHICS); + param0->unk_28 = Graphics_GetCellBankFromOpenNARC(param6, 16, 1, &(param0->unk_2C), HEAP_ID_BOX_GRAPHICS); param0->unk_30 = NULL; param0->unk_44 = MessageLoader_GetNewStrbuf(param5, 21); param0->unk_48 = MessageLoader_GetNewStrbuf(param5, 22); - param0->unk_34 = Graphics_GetCellBank(TypeIcon_GetNARC(), TypeIcon_GetCell(), 1, &(param0->unk_38), HEAP_ID_10); + param0->unk_34 = Graphics_GetCellBank(TypeIcon_GetNARC(), TypeIcon_GetCell(), 1, &(param0->unk_38), HEAP_ID_BOX_GRAPHICS); for (v0 = 0; v0 < 2; v0++) { param0->unk_3C[v0] = NULL; @@ -179,7 +179,7 @@ void ov19_021DAADC(UnkStruct_ov19_021DA9E0 *param0) return; } - param0->unk_04 = Window_New(HEAP_ID_10, 4); + param0->unk_04 = Window_New(HEAP_ID_BOX_GRAPHICS, 4); if (param0->unk_04) { int v1; @@ -211,7 +211,7 @@ static void ov19_021DAB44(UnkStruct_ov19_021DA9E0 *param0) narcID = TypeIcon_GetNARC(); v3 = TypeIcon_GetChar(2); - Graphics_LoadPalette(narcID, TypeIcon_GetPlttSrc(), 1, 10 * 0x20, 0x20 * 3, HEAP_ID_10); + Graphics_LoadPalette(narcID, TypeIcon_GetPlttSrc(), 1, 10 * 0x20, 0x20 * 3, HEAP_ID_BOX_GRAPHICS); for (i = 0; i < 2; i++) { NNS_G2dInitImageProxy(&v0); @@ -235,7 +235,7 @@ static void ov19_021DAB44(UnkStruct_ov19_021DA9E0 *param0) static void ov19_021DAC4C(UnkStruct_ov19_021DA9E0 *param0) { if (param0->unk_4C == NULL) { - UnkStruct_ov19_021DAE2C *v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DAE2C)); + UnkStruct_ov19_021DAE2C *v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DAE2C)); if (v0) { const PCMonPreview *preview = ov19_GetPCMonPreview(param0->unk_10); @@ -405,7 +405,7 @@ static void ov19_021DAE60(Window *param0, UnkStruct_ov19_021DA9E0 *param1, u32 p v3 = TypeIcon_GetNARC(); v4 = TypeIcon_GetChar(param1->unk_10->pcMonPreview.type1); - Graphics_LoadObjectTiles(TypeIcon_GetNARC(), TypeIcon_GetChar(param1->unk_10->pcMonPreview.type1), 0, 1504 * 0x20, 0, 1, HEAP_ID_10); + Graphics_LoadObjectTiles(TypeIcon_GetNARC(), TypeIcon_GetChar(param1->unk_10->pcMonPreview.type1), 0, 1504 * 0x20, 0, 1, HEAP_ID_BOX_GRAPHICS); v2 = *Sprite_GetPosition(param1->unk_3C[0]); v2.y = (176 + (16 * param3)) << FX32_SHIFT; @@ -415,7 +415,7 @@ static void ov19_021DAE60(Window *param0, UnkStruct_ov19_021DA9E0 *param1, u32 p Sprite_SetDrawFlag(param1->unk_3C[0], 1); if (param1->unk_10->pcMonPreview.type1 != param1->unk_10->pcMonPreview.type2) { - Graphics_LoadObjectTiles(TypeIcon_GetNARC(), TypeIcon_GetChar(param1->unk_10->pcMonPreview.type2), 0, (1504 + 8) * 0x20, 0, 1, HEAP_ID_10); + Graphics_LoadObjectTiles(TypeIcon_GetNARC(), TypeIcon_GetChar(param1->unk_10->pcMonPreview.type2), 0, (1504 + 8) * 0x20, 0, 1, HEAP_ID_BOX_GRAPHICS); v2.x += (36 << FX32_SHIFT); diff --git a/src/overlay019/ov19_021DB2FC.c b/src/overlay019/ov19_021DB2FC.c index 2cef0423b4..389e3ee27f 100644 --- a/src/overlay019/ov19_021DB2FC.c +++ b/src/overlay019/ov19_021DB2FC.c @@ -3,10 +3,10 @@ #include #include +#include "overlay019/struct_box_menu.h" #include "overlay019/struct_ov19_021D4DF0.h" #include "overlay019/struct_ov19_021D61B0_decl.h" #include "overlay019/struct_ov19_021DB6F0.h" -#include "overlay019/struct_ov19_021DF964.h" #include "bg_window.h" #include "enums.h" @@ -22,27 +22,27 @@ #include "text.h" static void ov19_021DB4B4(BgConfig *param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5); -static void ov19_021DB638(UnkStruct_ov19_021DB6F0 *param0, Window *param1, u8 param2, u32 param3); +static void ov19_021DB638(UnkStruct_ov19_021DB6F0 *param0, Window *param1, u8 markings, u32 param3); static void ov19_021DB684(UnkStruct_ov19_021DB6F0 *param0, u32 param1); static void ov19_021DB7BC(BgConfig *param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5); static void ov19_021DB84C(BgConfig *param0, Window *param1); static void ov19_021DB898(BgConfig *param0, Window *param1); -BOOL ov19_021DB2FC(UnkStruct_ov19_021DB6F0 *param0, UnkStruct_ov19_021D61B0 *param1, const UnkStruct_ov19_021D4DF0 *param2, BgConfig *param3, SpriteList *param4, MessageLoader *param5, const StringTemplate *param6, int param7, NARC *param8) +BOOL ov19_021DB2FC(UnkStruct_ov19_021DB6F0 *param0, UnkStruct_ov19_021D61B0 *param1, const UnkStruct_ov19_021D4DF0 *param2, BgConfig *param3, SpriteList *param4, MessageLoader *boxMessagesLoader, const StringTemplate *messageVariableBuffer, int optionsFrame, NARC *param8) { param0->unk_0C = param1; param0->unk_00 = param3; param0->unk_08 = param2; - param0->unk_2C = param6; - param0->unk_20 = param7; - param0->unk_10 = param5; - param0->unk_14 = MessageLoader_Init(MESSAGE_LOADER_BANK_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_POKEMON_STORAGE_SYSTEM, HEAP_ID_10); - param0->unk_30 = Strbuf_Init(64, HEAP_ID_10); - param0->unk_34 = Strbuf_Init(64, HEAP_ID_10); + param0->unk_2C = messageVariableBuffer; + param0->unk_20 = optionsFrame; + param0->unk_10 = boxMessagesLoader; + param0->unk_14 = MessageLoader_Init(MESSAGE_LOADER_BANK_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_POKEMON_STORAGE_SYSTEM, HEAP_ID_BOX_GRAPHICS); + param0->unk_30 = Strbuf_Init(64, HEAP_ID_BOX_GRAPHICS); + param0->unk_34 = Strbuf_Init(64, HEAP_ID_BOX_GRAPHICS); param0->unk_1C = 0; param0->unk_1E = 0; param0->unk_18 = NULL; - param0->unk_24 = Graphics_GetCharDataFromOpenNARC(param8, 25, 1, &(param0->unk_28), HEAP_ID_10); + param0->unk_24 = Graphics_GetCharDataFromOpenNARC(param8, 25, 1, &(param0->unk_28), HEAP_ID_BOX_GRAPHICS); if ((param0->unk_24 == NULL) || (param0->unk_30 == NULL) || (param0->unk_34 == NULL)) { return 0; @@ -88,7 +88,7 @@ void ov19_021DB3C4(UnkStruct_ov19_021DB6F0 *param0) { 1, 19, 3, 12, 16, 4, 593 } }; - param0->unk_18 = Window_New(HEAP_ID_10, 2); + param0->unk_18 = Window_New(HEAP_ID_BOX_GRAPHICS, 2); if (param0->unk_18) { int v1; @@ -98,9 +98,9 @@ void ov19_021DB3C4(UnkStruct_ov19_021DB6F0 *param0) } } - Graphics_LoadTilesToBgLayer(NARC_INDEX_GRAPHIC__PL_WINFRAME, 0, param0->unk_00, 1, 512, 0, 0, HEAP_ID_10); - Graphics_LoadPalette(NARC_INDEX_GRAPHIC__PL_WINFRAME, 24, 0, 7 * 0x20, 0x20, HEAP_ID_10); - LoadMessageBoxGraphics(param0->unk_00, 1, 521, 8, param0->unk_20, HEAP_ID_10); + Graphics_LoadTilesToBgLayer(NARC_INDEX_GRAPHIC__PL_WINFRAME, 0, param0->unk_00, 1, 512, 0, 0, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadPalette(NARC_INDEX_GRAPHIC__PL_WINFRAME, 24, 0, 7 * 0x20, 0x20, HEAP_ID_BOX_GRAPHICS); + LoadMessageBoxGraphics(param0->unk_00, 1, 521, 8, param0->unk_20, HEAP_ID_BOX_GRAPHICS); } void ov19_021DB448(UnkStruct_ov19_021DB6F0 *param0, u32 boxMessageID) @@ -159,10 +159,10 @@ static void ov19_021DB4B4(BgConfig *param0, u32 param1, u32 param2, u32 param3, v0[4 + param4] = (8 << 12) | (521 + 17); } -void ov19_021DB57C(UnkStruct_ov19_021DB6F0 *param0, const UnkStruct_ov19_021DF964 *param1) +void ov19_021DB57C(UnkStruct_ov19_021DB6F0 *param0, const BoxMenu *menu) { Window *v0; - u32 v1, v2; + u32 v1, i; if (param0->unk_1E) { ov19_021DB84C(param0->unk_00, ¶m0->unk_18[1]); @@ -170,21 +170,21 @@ void ov19_021DB57C(UnkStruct_ov19_021DB6F0 *param0, const UnkStruct_ov19_021DF96 v0 = &(param0->unk_18[1]); Window_FillTilemap(v0, 15); - v1 = (8 - param1->unk_21) * 16; + v1 = (8 - menu->totalMenuItems) * 16; - for (v2 = 0; v2 < param1->unk_21; v2++) { - if ((param1->unk_00[v2] >= UnkEnum_021DFB94_56) && (param1->unk_00[v2] <= UnkEnum_021DFB94_61)) { - ov19_021DB638(param0, v0, param1->unk_22, param1->unk_00[v2] - UnkEnum_021DFB94_56); + for (i = 0; i < menu->totalMenuItems; i++) { + if ((menu->menuItems[i] >= BOX_MENU_FIRST_MARKING) && (menu->menuItems[i] <= BOX_MENU_LAST_MARKING)) { + ov19_021DB638(param0, v0, menu->markings, menu->menuItems[i] - BOX_MENU_FIRST_MARKING); } else { - MessageLoader_GetStrbuf(param0->unk_14, 24 + param1->unk_00[v2], param0->unk_30); + MessageLoader_GetStrbuf(param0->unk_14, 24 + menu->menuItems[i], param0->unk_30); Text_AddPrinterWithParamsAndColor(v0, FONT_SYSTEM, param0->unk_30, 10, v1, TEXT_SPEED_NO_TRANSFER, TEXT_COLOR(11, 12, 15), NULL); } v1 += 16; } - ov19_021DB748(param0, param1); - ov19_021DB684(param0, param1->unk_21); + BoxGraphics_DrawMenuCursorBox(param0, menu); + ov19_021DB684(param0, menu->totalMenuItems); Window_LoadTiles(v0); Bg_CopyTilemapBufferToVRAM(param0->unk_00, 1); @@ -192,9 +192,9 @@ void ov19_021DB57C(UnkStruct_ov19_021DB6F0 *param0, const UnkStruct_ov19_021DF96 param0->unk_1E = 1; } -static void ov19_021DB638(UnkStruct_ov19_021DB6F0 *param0, Window *param1, u8 param2, u32 param3) +static void ov19_021DB638(UnkStruct_ov19_021DB6F0 *param0, Window *param1, u8 markings, u32 markingID) { - Window_BlitBitmapRectWithTransparency(param1, param0->unk_28->pRawData, param3 * 8, ((param2 & (1 << param3)) ? 0 : 8), 48, 16, 44, param3 * 16 + 4, 8, 8, 0xff); + Window_BlitBitmapRectWithTransparency(param1, param0->unk_28->pRawData, markingID * 8, ((markings & (1 << markingID)) ? 0 : 8), 48, 16, 44, markingID * 16 + 4, 8, 8, 0xff); } static void ov19_021DB684(UnkStruct_ov19_021DB6F0 *param0, u32 param1) @@ -246,20 +246,20 @@ void ov19_021DB724(UnkStruct_ov19_021DB6F0 *param0) Bg_CopyTilemapBufferToVRAM(param0->unk_00, 1); } -void ov19_021DB748(UnkStruct_ov19_021DB6F0 *param0, const UnkStruct_ov19_021DF964 *param1) +void BoxGraphics_DrawMenuCursorBox(UnkStruct_ov19_021DB6F0 *param0, const BoxMenu *menu) { - Window *v0; + Window *menuWindow; u32 v1; - v0 = &(param0->unk_18[1]); - v1 = (8 - param1->unk_21) * 16; + menuWindow = &(param0->unk_18[1]); + v1 = (8 - menu->totalMenuItems) * 16; - Window_FillRectWithColor(v0, 15, 0, v1, 10, param1->unk_21 * 16); - Window_DrawMenuCursor(v0, 0, v1 + (param1->unk_20 * 16)); - Window_LoadTiles(v0); + Window_FillRectWithColor(menuWindow, 15, 0, v1, 10, menu->totalMenuItems * 16); + Window_DrawMenuCursor(menuWindow, 0, v1 + (menu->selectedMenuItemIndex * 16)); + Window_LoadTiles(menuWindow); } -void ov19_021DB790(UnkStruct_ov19_021DB6F0 *param0, const UnkStruct_ov19_021DF964 *param1) +void ov19_021DB790(UnkStruct_ov19_021DB6F0 *param0, const BoxMenu *menu) { Window *v0; int v1; @@ -267,7 +267,7 @@ void ov19_021DB790(UnkStruct_ov19_021DB6F0 *param0, const UnkStruct_ov19_021DF96 v0 = &(param0->unk_18[1]); for (v1 = 0; v1 < 6; v1++) { - ov19_021DB638(param0, v0, param1->unk_22, v1); + ov19_021DB638(param0, v0, menu->markings, v1); } Window_LoadTiles(v0); diff --git a/src/overlay019/ov19_021DB8E4.c b/src/overlay019/ov19_021DB8E4.c index 0957552927..a2ebab0832 100644 --- a/src/overlay019/ov19_021DB8E4.c +++ b/src/overlay019/ov19_021DB8E4.c @@ -79,17 +79,17 @@ BOOL ov19_021DB8E4(UnkStruct_ov19_021DBA9C *param0, UnkStruct_ov19_021D61B0 *par param0->unk_0C = param2; param0->unk_08 = param4; - Graphics_LoadTilesToBgLayerFromOpenNARC(param5, 4, param3, 1, 0, 0, 1, HEAP_ID_10); + Graphics_LoadTilesToBgLayerFromOpenNARC(param5, 4, param3, 1, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); { NNSG2dPaletteData *v1; void *v2; - v2 = Graphics_GetPlttDataFromOpenNARC(param5, 27, &v1, HEAP_ID_10); + v2 = Graphics_GetPlttDataFromOpenNARC(param5, 27, &v1, HEAP_ID_BOX_GRAPHICS); MI_CpuCopy16(v1->pRawData, &(param0->unk_E4[0][0]), 0x40); Heap_FreeToHeap(v2); - v2 = Graphics_GetPlttDataFromOpenNARC(param5, 20, &v1, HEAP_ID_10); + v2 = Graphics_GetPlttDataFromOpenNARC(param5, 20, &v1, HEAP_ID_BOX_GRAPHICS); MI_CpuCopy16(v1->pRawData, &(param0->unk_E4[0][32]), 0x20); Heap_FreeToHeap(v2); @@ -112,17 +112,17 @@ BOOL ov19_021DB8E4(UnkStruct_ov19_021DBA9C *param0, UnkStruct_ov19_021D61B0 *par GXS_LoadOBJPltt(param0->unk_E4[0], 13 * 0x20, 96); } - param0->unk_14 = Graphics_GetCharDataFromOpenNARC(param5, 17, 1, &(param0->unk_18), HEAP_ID_10); - param0->unk_1C = Graphics_GetCellBankFromOpenNARC(param5, 18, 1, &(param0->unk_20), HEAP_ID_10); - param0->unk_34 = Graphics_GetScrnDataFromOpenNARC(param5, 2, 1, &(param0->unk_38), HEAP_ID_10); - param0->unk_2C = Graphics_GetScrnDataFromOpenNARC(param5, 3, 1, &(param0->unk_30), HEAP_ID_10); - param0->unk_44 = sub_0200C440(2, 13, 4, HEAP_ID_10); - param0->unk_4BFC = Strbuf_Init(500, HEAP_ID_10); + param0->unk_14 = Graphics_GetCharDataFromOpenNARC(param5, 17, 1, &(param0->unk_18), HEAP_ID_BOX_GRAPHICS); + param0->unk_1C = Graphics_GetCellBankFromOpenNARC(param5, 18, 1, &(param0->unk_20), HEAP_ID_BOX_GRAPHICS); + param0->unk_34 = Graphics_GetScrnDataFromOpenNARC(param5, 2, 1, &(param0->unk_38), HEAP_ID_BOX_GRAPHICS); + param0->unk_2C = Graphics_GetScrnDataFromOpenNARC(param5, 3, 1, &(param0->unk_30), HEAP_ID_BOX_GRAPHICS); + param0->unk_44 = sub_0200C440(2, 13, 4, HEAP_ID_BOX_GRAPHICS); + param0->unk_4BFC = Strbuf_Init(500, HEAP_ID_BOX_GRAPHICS); param0->unk_10 = NULL; param0->unk_3C.pixels = param0->unk_18->pRawData; param0->unk_3C.width = 32; param0->unk_3C.height = 32; - param0->unk_4BF8 = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNK_0391, HEAP_ID_10); + param0->unk_4BF8 = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNK_0391, HEAP_ID_BOX_GRAPHICS); for (v0 = 0; v0 < 18; v0++) { param0->unk_48[v0] = NULL; @@ -143,7 +143,7 @@ void ov19_021DBA9C(UnkStruct_ov19_021DBA9C *param0) { 1, 5, 25, 27, 6, 2, 178 } }; - param0->unk_10 = Window_New(HEAP_ID_10, NELEMS(v0)); + param0->unk_10 = Window_New(HEAP_ID_BOX_GRAPHICS, NELEMS(v0)); if (param0->unk_10) { int v1; @@ -197,7 +197,7 @@ void ov19_021DBAD0(UnkStruct_ov19_021DBA9C *param0) void ov19_021DBB48(UnkStruct_ov19_021DBA9C *param0) { - param0->unk_E0 = ov19_021D5EA8(param0->unk_0C); + param0->unk_E0 = ov19_GetBoxSelectionBoxID(param0->unk_0C); ov19_021DBDF4(param0); ov19_021DC034(param0, 0); } @@ -209,7 +209,7 @@ BOOL ov19_021DBB68(UnkStruct_ov19_021DBA9C *param0) void ov19_021DBB70(UnkStruct_ov19_021DBA9C *param0) { - param0->unk_E0 = ov19_021D5EA8(param0->unk_0C); + param0->unk_E0 = ov19_GetBoxSelectionBoxID(param0->unk_0C); ov19_021DBF18(param0); ov19_021DBF4C(param0); @@ -479,7 +479,7 @@ static void ov19_021DC034(UnkStruct_ov19_021DBA9C *param0, int param1) ov19_021DC0A0, ov19_021DC1CC, }; - UnkStruct_ov19_021DC034 *v1 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DC034)); + UnkStruct_ov19_021DC034 *v1 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DC034)); if (v1) { v1->unk_00 = param0; @@ -592,7 +592,7 @@ static void ov19_021DC1CC(SysTask *param0, void *param1) void ov19_021DC29C(UnkStruct_ov19_021DBA9C *param0) { - UnkStruct_ov19_021DC29C *v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DC29C)); + UnkStruct_ov19_021DC29C *v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DC29C)); if (v0) { u32 v1 = ov19_GetCursorOrPreviewedItem(param0->unk_0C); @@ -655,7 +655,7 @@ static void ov19_021DC37C(SysTask *param0, void *param1) void ov19_021DC3F4(UnkStruct_ov19_021DBA9C *param0) { - UnkStruct_ov19_021DC29C *v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DC29C)); + UnkStruct_ov19_021DC29C *v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DC29C)); if (v0) { v0->unk_16 = 0; @@ -718,11 +718,11 @@ static void ov19_021DC4F8(UnkStruct_ov19_021DBA9C *param0, u32 param1) ov19_021D783C(&v0, &v2, ov19_021D77D0(param0->unk_00), v1->unk_1C, v1->unk_20, 0); NNS_G2dInitImageProxy(&v2); - v4 = Graphics_GetCharData(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(param1, 1), 0, &v3, HEAP_ID_10); + v4 = Graphics_GetCharData(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(param1, 1), 0, &v3, HEAP_ID_BOX_GRAPHICS); v3->mapingType = GX_GetOBJVRamModeChar(); NNS_G2dLoadImage1DMapping(v3, 1520 * 0x20, NNS_G2D_VRAM_TYPE_2DMAIN, &v2); - Graphics_LoadPalette(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(param1, 2), 1, 6 * 0x20, 0x20, HEAP_ID_10); + Graphics_LoadPalette(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(param1, 2), 1, 6 * 0x20, 0x20, HEAP_ID_BOX_GRAPHICS); param0->unk_90 = ov19_021D785C(param0->unk_08, &v0, 18, 224, 0, NNS_G2D_VRAM_TYPE_2DMAIN); if (param0->unk_90) { diff --git a/src/overlay019/ov19_021DC5F0.c b/src/overlay019/ov19_021DC5F0.c index 275a8eeca3..3f7df76720 100644 --- a/src/overlay019/ov19_021DC5F0.c +++ b/src/overlay019/ov19_021DC5F0.c @@ -67,8 +67,8 @@ BOOL ov19_021DC5F0(UnkStruct_ov19_021DC680 *param0, UnkStruct_ov19_021D61B0 *par ov19_021DA3CC(param0->unk_38, param0->unk_3C, 6); - param0->unk_1C = Heap_AllocFromHeap(HEAP_ID_10, sizeof(VecFx32) * 6 * 8); - param0->unk_14 = Graphics_GetScrnDataFromOpenNARC(param5, 6, 1, &(param0->unk_18), HEAP_ID_10); + param0->unk_1C = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(VecFx32) * 6 * 8); + param0->unk_14 = Graphics_GetScrnDataFromOpenNARC(param5, 6, 1, &(param0->unk_18), HEAP_ID_BOX_GRAPHICS); if ((param0->unk_14 == NULL) || (param0->unk_1C == NULL)) { return 0; @@ -185,14 +185,12 @@ static void ov19_021DC79C(SysTask *param0, void *param1) void ov19_021DC834(UnkStruct_ov19_021DC680 *param0) { - int v0 = Party_GetCurrentCount(param0->unk_0C->party); + int partyCount = Party_GetCurrentCount(param0->unk_0C->party); - if (param0->unk_28 < v0) { - int v1, v2; + if (param0->unk_28 < partyCount) { + int v2 = partyCount - param0->unk_28; - v2 = v0 - param0->unk_28; - - for (v1 = param0->unk_28; v1 < (6 - 1); v1++) { + for (int v1 = param0->unk_28; v1 < MAX_PARTY_SIZE - 1; v1++) { ov19_021DA418(&(param0->unk_3C[v1 + 1]), &(param0->unk_3C[v1]), 1); ov19_021DA3CC(param0->unk_38, &(param0->unk_3C[v1 + 1]), 1); @@ -319,8 +317,8 @@ BOOL ov19_021DCB20(UnkStruct_ov19_021DC680 *param0) if (ov19_021DA7E0(param0->unk_38, v0)) { const UnkStruct_ov19_021D5DF8 *v1 = ov19_021D7964(param0->unk_00); - if (ov19_021D3B18(v1)) { - if (ov19_021D3B20(v1)) { + if (ov19_HasCheckedCanReleaseMon(v1)) { + if (ov19_CanReleaseMon(v1)) { ov19_021DA3F0(param0->unk_38, v0, 1); return 1; } else { @@ -397,7 +395,7 @@ void ov19_021DCC80(UnkStruct_ov19_021DC680 *param0, u32 param1, const UnkStruct_ ov19_021DA418(param2, v2, 1); ov19_021DA754(param0->unk_38, v2, v1); Sprite_SetExplicitPriority(v2->unk_00, 1); - ov19_021D78AC(v2->unk_00, 4 + v0); + BoxGraphics_SetSpritePriority(v2->unk_00, 4 + v0); param0->unk_28 = param1; } @@ -415,7 +413,7 @@ void ov19_021DCCD4(UnkStruct_ov19_021DC680 *param0, u32 param1, const UnkStruct_ ov19_021DA418(param2, v2, 1); ov19_021DA754(param0->unk_38, v2, v1); Sprite_SetExplicitPriority(v2->unk_00, 1); - ov19_021D78AC(v2->unk_00, 4 + v0); + BoxGraphics_SetSpritePriority(v2->unk_00, 4 + v0); param0->unk_28 = param1; } diff --git a/src/overlay019/ov19_021DCF88.c b/src/overlay019/ov19_021DCF88.c index 7606e70aff..bc138aafbd 100644 --- a/src/overlay019/ov19_021DCF88.c +++ b/src/overlay019/ov19_021DCF88.c @@ -305,7 +305,7 @@ BOOL ov19_021DCF88(UnkStruct_ov19_021DCF88 **param0, UnkStruct_ov19_021D61B0 *pa *param0 = NULL; return 1; } else { - UnkStruct_ov19_021DCF88 *v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DCF88)); + UnkStruct_ov19_021DCF88 *v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DCF88)); if (v0) { int v1; @@ -315,7 +315,7 @@ BOOL ov19_021DCF88(UnkStruct_ov19_021DCF88 **param0, UnkStruct_ov19_021D61B0 *pa v0->unk_04 = param2; v0->unk_0C = param4; v0->unk_14 = NULL; - v0->unk_84 = Strbuf_Init(32, HEAP_ID_10); + v0->unk_84 = Strbuf_Init(32, HEAP_ID_BOX_GRAPHICS); v0->unk_10 = param2->unk_9C.unk_00; v0->unk_98 = NULL; v0->unk_A0 = NULL; @@ -418,10 +418,10 @@ void ov19_021DD078(UnkStruct_ov19_021DCF88 *param0) void ov19_021DD114(UnkStruct_ov19_021DCF88 *param0, NARC *param1) { if (param0) { - Graphics_LoadTilesToBgLayerFromOpenNARC(param1, 127, param0->unk_08, 7, 0, 0, 1, HEAP_ID_10); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 124, param0->unk_08, 7, 0, 0, 1, HEAP_ID_10); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 125, param0->unk_08, 6, 0, 0, 1, HEAP_ID_10); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 126, param0->unk_08, 5, 0, 0, 1, HEAP_ID_10); + Graphics_LoadTilesToBgLayerFromOpenNARC(param1, 127, param0->unk_08, 7, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 124, param0->unk_08, 7, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 125, param0->unk_08, 6, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 126, param0->unk_08, 5, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); Bg_FillTilesRange(param0->unk_08, 4, 0x0, 1, 0); Bg_FillTilemapRect(param0->unk_08, 4, 0x0, 0, 0, 32, 32, 17); Bg_CopyTilemapBufferToVRAM(param0->unk_08, 4); @@ -430,7 +430,7 @@ void ov19_021DD114(UnkStruct_ov19_021DCF88 *param0, NARC *param1) Window_FillTilemap(&(param0->unk_88), 0x0); Window_CopyToVRAM(¶m0->unk_88); ov19_021DE324(param0); - Graphics_LoadPaletteFromOpenNARC(param1, 128, 4, 0, 0x20 * 3, HEAP_ID_10); + Graphics_LoadPaletteFromOpenNARC(param1, 128, 4, 0, 0x20 * 3, HEAP_ID_BOX_GRAPHICS); ov19_021DD224(param0, param1); } } @@ -459,10 +459,10 @@ static void ov19_021DD224(UnkStruct_ov19_021DCF88 *param0, NARC *param1) static void ov19_021DD2BC(UnkStruct_ov19_021DCF88 *param0, NARC *param1) { - param0->unk_98 = Graphics_GetCellBankFromOpenNARC(param1, 139, 1, &(param0->unk_9C), HEAP_ID_10); - param0->unk_A0 = Graphics_GetAnimBankFromOpenNARC(param1, 140, 1, &(param0->unk_A4), HEAP_ID_10); - param0->unk_A8 = Graphics_GetCellBankFromOpenNARC(param1, 142, 1, &(param0->unk_AC), HEAP_ID_10); - param0->unk_B0 = Graphics_GetAnimBankFromOpenNARC(param1, 143, 1, &(param0->unk_B4), HEAP_ID_10); + param0->unk_98 = Graphics_GetCellBankFromOpenNARC(param1, 139, 1, &(param0->unk_9C), HEAP_ID_BOX_GRAPHICS); + param0->unk_A0 = Graphics_GetAnimBankFromOpenNARC(param1, 140, 1, &(param0->unk_A4), HEAP_ID_BOX_GRAPHICS); + param0->unk_A8 = Graphics_GetCellBankFromOpenNARC(param1, 142, 1, &(param0->unk_AC), HEAP_ID_BOX_GRAPHICS); + param0->unk_B0 = Graphics_GetAnimBankFromOpenNARC(param1, 143, 1, &(param0->unk_B4), HEAP_ID_BOX_GRAPHICS); NNS_G2dInitImagePaletteProxy(&(param0->unk_18)); Graphics_LoadPartialPaletteFromOpenNARC(param1, 144, NNS_G2D_VRAM_TYPE_2DSUB, 0, 10, &(param0->unk_18)); @@ -1142,7 +1142,7 @@ static void ov19_021DDD80(UnkStruct_ov19_021DCF88 *param0) UnkStruct_ov19_021DDBF8 *v0; int v1; - v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DDBF8)); + v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DDBF8)); if (v0) { SysTask *v2; @@ -1257,7 +1257,7 @@ static void ov19_021DDFA8(UnkStruct_ov19_021DCF88 *param0) UnkStruct_ov19_021DDBF8 *v0; int v1; - v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DDBF8)); + v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DDBF8)); if (v0) { SysTask *v2; @@ -1316,7 +1316,7 @@ static void ov19_021DE0A0(UnkStruct_ov19_021DCF88 *param0) UnkStruct_ov19_021DDBF8 *v0; int v1; - v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DDBF8)); + v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DDBF8)); if (v0) { SysTask *v2; @@ -1440,7 +1440,7 @@ static void ov19_021DE2A4(UnkStruct_ov19_021DCF88 *param0) UnkStruct_ov19_021DDBF8 *v0; int v1; - v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DDBF8)); + v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DDBF8)); if (v0) { SysTask *v2; diff --git a/src/overlay019/ov19_021DE3E8.c b/src/overlay019/ov19_021DE3E8.c index 4bbd941403..3551a3379c 100644 --- a/src/overlay019/ov19_021DE3E8.c +++ b/src/overlay019/ov19_021DE3E8.c @@ -72,7 +72,7 @@ static void ov19_021DE8E0(SysTask *param0, void *param1); BOOL ov19_021DE3E8(UnkStruct_ov19_021DE3E8 **param0, UnkStruct_ov19_021D61B0 *param1, const UnkStruct_ov19_021D4DF0 *param2, BgConfig *param3, SpriteList *param4) { - UnkStruct_ov19_021DE3E8 *v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DE3E8)); + UnkStruct_ov19_021DE3E8 *v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DE3E8)); if (v0) { v0->unk_04 = param1; @@ -109,7 +109,7 @@ static void ov19_021DE450(UnkStruct_ov19_021DE3E8 *param0) int v4; ov19_021D783C(&v0, &v1, ov19_021D77D0(param0->unk_04), param0->unk_14->unk_1C, param0->unk_14->unk_20, 0); - v3 = Graphics_GetCharData(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(1, 1), 0, &v2, HEAP_ID_10); + v3 = Graphics_GetCharData(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(1, 1), 0, &v2, HEAP_ID_BOX_GRAPHICS); if (v3) { int v5; @@ -227,11 +227,11 @@ static void ov19_021DE5D4(UnkStruct_ov19_021DE3E8 *param0) v2 = 2; } - Graphics_LoadObjectTiles(16, Item_FileID(item, 1), 0, Unk_ov19_021E04CC[v3].unk_00, 0, 0, HEAP_ID_10); - Graphics_LoadPalette(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(item, 2), 1, Unk_ov19_021E04CC[v3].unk_04 * 0x20, 0x20, HEAP_ID_10); + Graphics_LoadObjectTiles(16, Item_FileID(item, 1), 0, Unk_ov19_021E04CC[v3].unk_00, 0, 0, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadPalette(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(item, 2), 1, Unk_ov19_021E04CC[v3].unk_04 * 0x20, 0x20, HEAP_ID_BOX_GRAPHICS); Sprite_SetExplicitPriority(param0->unk_1C[v3], v2); - ov19_021D78AC(param0->unk_1C[v3], 2); + BoxGraphics_SetSpritePriority(param0->unk_1C[v3], 2); Sprite_SetPosition(param0->unk_1C[v3], &v1); Sprite_SetAnim(param0->unk_1C[v3], 0); @@ -268,11 +268,11 @@ static void ov19_021DE718(UnkStruct_ov19_021DE3E8 *param0, int param1, int param ov19_021DE694(param0, &v0, &v1); - Graphics_LoadObjectTiles(16, Item_FileID(param2, 1), 0, Unk_ov19_021E04CC[param1].unk_00, 0, 0, HEAP_ID_10); - Graphics_LoadPalette(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(param2, 2), 1, Unk_ov19_021E04CC[param1].unk_04 * 0x20, 0x20, HEAP_ID_10); + Graphics_LoadObjectTiles(16, Item_FileID(param2, 1), 0, Unk_ov19_021E04CC[param1].unk_00, 0, 0, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadPalette(NARC_INDEX_ITEMTOOL__ITEMDATA__ITEM_ICON, Item_FileID(param2, 2), 1, Unk_ov19_021E04CC[param1].unk_04 * 0x20, 0x20, HEAP_ID_BOX_GRAPHICS); Sprite_SetExplicitPriority(param0->unk_1C[param1], v1); - ov19_021D78AC(param0->unk_1C[param1], 3); + BoxGraphics_SetSpritePriority(param0->unk_1C[param1], 3); Sprite_SetPosition(param0->unk_1C[param1], &v0); } } @@ -332,7 +332,7 @@ BOOL ov19_021DE800(UnkStruct_ov19_021DE3E8 *param0) static void ov19_021DE858(UnkStruct_ov19_021DE3E8 *param0, int param1, const VecFx32 *param2, int param3, int param4) { - UnkStruct_ov19_021DE858 *v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DE858)); + UnkStruct_ov19_021DE858 *v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DE858)); if (v0) { v0->unk_00 = param0; @@ -371,7 +371,7 @@ static void ov19_021DE8E0(SysTask *param0, void *param1) break; case 1: if (Sprite_IsAnimated(v0->unk_04) == 0) { - ov19_021D78AC(v0->unk_04, v0->unk_28); + BoxGraphics_SetSpritePriority(v0->unk_04, v0->unk_28); v0->unk_00->unk_34--; SysTask_Done(param0); ov19_021D79B8(v0, NULL, NULL); diff --git a/src/overlay019/ov19_021DEC04.c b/src/overlay019/ov19_021DEC04.c index 00fad3051f..9371322f88 100644 --- a/src/overlay019/ov19_021DEC04.c +++ b/src/overlay019/ov19_021DEC04.c @@ -91,7 +91,7 @@ BOOL ov19_021DEC04(UnkStruct_ov19_021DEC04 **param0, UnkStruct_ov19_021D61B0 *pa *param0 = NULL; return 1; } else { - UnkStruct_ov19_021DEC04 *v0 = Heap_AllocFromHeap(HEAP_ID_10, sizeof(UnkStruct_ov19_021DEC04)); + UnkStruct_ov19_021DEC04 *v0 = Heap_AllocFromHeap(HEAP_ID_BOX_GRAPHICS, sizeof(UnkStruct_ov19_021DEC04)); if (v0) { v0->unk_04 = param1; @@ -99,11 +99,11 @@ BOOL ov19_021DEC04(UnkStruct_ov19_021DEC04 **param0, UnkStruct_ov19_021D61B0 *pa v0->unk_0C = param3; v0->unk_10 = param4; v0->unk_14 = ov19_021D77D8(param1); - v0->unk_370 = Graphics_GetScrnDataFromOpenNARC(param6, 7, 1, &(v0->unk_368), HEAP_ID_10); - v0->unk_374 = Graphics_GetScrnDataFromOpenNARC(param6, 8, 1, &(v0->unk_36C), HEAP_ID_10); + v0->unk_370 = Graphics_GetScrnDataFromOpenNARC(param6, 7, 1, &(v0->unk_368), HEAP_ID_BOX_GRAPHICS); + v0->unk_374 = Graphics_GetScrnDataFromOpenNARC(param6, 8, 1, &(v0->unk_36C), HEAP_ID_BOX_GRAPHICS); v0->unk_6C = param5; - v0->unk_70 = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_MOVE_NAMES, HEAP_ID_10); - v0->boxDisplayText = Strbuf_Init(32, HEAP_ID_10); + v0->unk_70 = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_MOVE_NAMES, HEAP_ID_BOX_GRAPHICS); + v0->boxDisplayText = Strbuf_Init(32, HEAP_ID_BOX_GRAPHICS); v0->unk_380 = NULL; *param0 = v0; return 1; @@ -131,13 +131,13 @@ void ov19_021DECE8(UnkStruct_ov19_021DEC04 *param0, NARC *param1) if (param0) { ov19_021DEEFC(param0); - Graphics_LoadTilesToBgLayerFromOpenNARC(param1, 132, param0->unk_0C, 5, 0, 0, 1, HEAP_ID_10); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 129, param0->unk_0C, 5, 0, 0, 1, HEAP_ID_10); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 130, param0->unk_0C, 6, 0, 0, 1, HEAP_ID_10); - Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 131, param0->unk_0C, 7, 0, 0, 1, HEAP_ID_10); - Graphics_LoadPaletteFromOpenNARC(param1, 133, 4, 0, 0x20 * 4, HEAP_ID_10); - Graphics_LoadPalette(NARC_INDEX_POKETOOL__ICONGRA__PL_POKE_ICON, PokeIconPalettesFileIndex(), 5, 4 * 0x20, 4 * 0x20, HEAP_ID_10); - Bg_ClearTilesRange(4, 0x20, 0, HEAP_ID_10); + Graphics_LoadTilesToBgLayerFromOpenNARC(param1, 132, param0->unk_0C, 5, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 129, param0->unk_0C, 5, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 130, param0->unk_0C, 6, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadTilemapToBgLayerFromOpenNARC(param1, 131, param0->unk_0C, 7, 0, 0, 1, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadPaletteFromOpenNARC(param1, 133, 4, 0, 0x20 * 4, HEAP_ID_BOX_GRAPHICS); + Graphics_LoadPalette(NARC_INDEX_POKETOOL__ICONGRA__PL_POKE_ICON, PokeIconPalettesFileIndex(), 5, 4 * 0x20, 4 * 0x20, HEAP_ID_BOX_GRAPHICS); + Bg_ClearTilesRange(4, 0x20, 0, HEAP_ID_BOX_GRAPHICS); Bg_FillTilemapRect(param0->unk_0C, 4, 0x0, 0, 0, 32, 32, 17); ov19_021DEF64(param0); @@ -153,7 +153,7 @@ void ov19_021DECE8(UnkStruct_ov19_021DEC04 *param0, NARC *param1) void ov19_021DEDDC(UnkStruct_ov19_021DEC04 *param0, BOOL param1) { if (param0) { - int v0 = ov19_021D5F9C(param0->unk_08); + int v0 = ov19_GetCompareMonSlot(param0->unk_08); if (param1) { Sprite_SetAnim(param0->unk_28[v0 ^ 1], 2); @@ -172,19 +172,19 @@ void ov19_021DEE34(UnkStruct_ov19_021DEC04 *param0) ov19_021DF834(param0); if (param0) { - int v0 = ov19_021D5F9C(param0->unk_08); + int compareMonSlot = ov19_GetCompareMonSlot(param0->unk_08); - ov19_021DF8C8(param0, v0); + ov19_021DF8C8(param0, compareMonSlot); switch (ov19_021D5FA4(param0->unk_08)) { case 0: - ov19_021DF3AC(param0, v0); + ov19_021DF3AC(param0, compareMonSlot); break; case 1: - ov19_021DF178(param0, v0); + ov19_021DF178(param0, compareMonSlot); break; case 2: - ov19_021DF4D0(param0, v0); + ov19_021DF4D0(param0, compareMonSlot); break; } } @@ -229,7 +229,7 @@ BOOL ov19_021DEEA8(UnkStruct_ov19_021DEC04 *param0) static void ov19_021DEEFC(UnkStruct_ov19_021DEC04 *param0) { - NNSG2dScreenData *v0 = (ov19_021D5F9C(param0->unk_08) == 0) ? param0->unk_368 : param0->unk_36C; + NNSG2dScreenData *v0 = (ov19_GetCompareMonSlot(param0->unk_08) == 0) ? param0->unk_368 : param0->unk_36C; Bg_CopyToTilemapRect(param0->unk_0C, 2, 0, 0, 6, 32, v0->rawData, 0, 0, 32, 32); Bg_CopyToTilemapRect(param0->unk_0C, 2, 26, 0, 6, 32, v0->rawData, 26, 0, 32, 32); @@ -367,7 +367,7 @@ static void ov19_021DF140(UnkStruct_ov19_021DEC04 *param0) } } -static void ov19_021DF178(UnkStruct_ov19_021DEC04 *param0, int param1) +static void ov19_021DF178(UnkStruct_ov19_021DEC04 *param0, int compareMonSlot) { #define DEFINE_00(tx) ((128 << FX32_SHIFT) + (((((tx) - 128) << FX32_SHIFT) * 10) / 100)) #define DEFINE_01(ty) ((484 << FX32_SHIFT) + (((((ty) - 484) << FX32_SHIFT) * 10) / 100)) @@ -388,10 +388,10 @@ static void ov19_021DF178(UnkStruct_ov19_021DEC04 *param0, int param1) const PCCompareMon *compareMon; BOOL isMonUnderCursor, v3, v4; - compareMon = ov19_GetCompareMonFrom(param0->unk_08, param1); + compareMon = ov19_GetCompareMonFrom(param0->unk_08, compareMonSlot); isMonUnderCursor = ov19_IsMonUnderCursor(param0->unk_08); - v3 = (ov19_021D5F9C(param0->unk_08) == param1); - v4 = ov19_021D5FB8(param0->unk_08, param1); + v3 = ov19_GetCompareMonSlot(param0->unk_08) == compareMonSlot; + v4 = ov19_021D5FB8(param0->unk_08, compareMonSlot); if ((((isMonUnderCursor == TRUE) && (v3 == 1)) || ((v3 == 0) && (v4 == 1))) && (compareMon->isEgg == FALSE)) { int i; @@ -403,26 +403,26 @@ static void ov19_021DF178(UnkStruct_ov19_021DEC04 *param0, int param1) for (i = 0; i < CONTEST_TYPE_MAX; i++) { v6.x = v0[i].unk_00 + (((v0[i].unk_08 - v0[i].unk_00) / 256) * (int)(*contestStat)); v6.y = v0[i].unk_04 + (((v0[i].unk_0C - v0[i].unk_04) / 256) * (int)(*contestStat)); - Sprite_SetPosition(param0->unk_34[param1][i], &v6); - ov19_021D78AC(param0->unk_34[param1][i], 0); - ov19_021D78AC(param0->unk_34[param1 ^ 1][i], 1); - Sprite_SetDrawFlag(param0->unk_34[param1][i], 1); + Sprite_SetPosition(param0->unk_34[compareMonSlot][i], &v6); + BoxGraphics_SetSpritePriority(param0->unk_34[compareMonSlot][i], 0); + BoxGraphics_SetSpritePriority(param0->unk_34[compareMonSlot ^ 1][i], 1); + Sprite_SetDrawFlag(param0->unk_34[compareMonSlot][i], 1); contestStat++; } } else { - ov19_021DF250(param0, param1); + ov19_021DF250(param0, compareMonSlot); } #undef DEFINE_00 #undef DEFINE_01 } -static void ov19_021DF250(UnkStruct_ov19_021DEC04 *param0, int param1) +static void ov19_021DF250(UnkStruct_ov19_021DEC04 *param0, int compareMonSlot) { int v0; for (v0 = 0; v0 < 5; v0++) { - Sprite_SetDrawFlag(param0->unk_34[param1][v0], 0); + Sprite_SetDrawFlag(param0->unk_34[compareMonSlot][v0], 0); } } @@ -509,7 +509,7 @@ static void ov19_021DF3AC(UnkStruct_ov19_021DEC04 *param0, int compareMonSlot) window = &(param0->unk_78[3 + compareMonSlot]); compareMon = ov19_GetCompareMonFrom(param0->unk_08, compareMonSlot); isMonUnderCursor = ov19_IsMonUnderCursor(param0->unk_08); - compareSlot = ov19_021D5F9C(param0->unk_08) == compareMonSlot; + compareSlot = ov19_GetCompareMonSlot(param0->unk_08) == compareMonSlot; v4 = ov19_021D5FB8(param0->unk_08, compareMonSlot); Window_FillTilemap(window, 0); @@ -547,7 +547,7 @@ static void ov19_021DF4D0(UnkStruct_ov19_021DEC04 *param0, int compareMonSlot) v0 = &(param0->unk_78[5 + compareMonSlot]); compareMon = ov19_GetCompareMonFrom(param0->unk_08, compareMonSlot); isMonUnderCursor = ov19_IsMonUnderCursor(param0->unk_08); - v3 = (ov19_021D5F9C(param0->unk_08) == compareMonSlot); + v3 = (ov19_GetCompareMonSlot(param0->unk_08) == compareMonSlot); v4 = ov19_021D5FB8(param0->unk_08, compareMonSlot); Window_FillTilemap(v0, 0); @@ -587,10 +587,10 @@ static void ov19_021DF5D0(UnkStruct_ov19_021DEC04 *param0, NARC *param1) SpriteResourcesHeader v2; u32 v3, v4, v5; - param0->unk_5C = Graphics_GetCellBankFromOpenNARC(param1, 135, 1, &(param0->unk_60), HEAP_ID_10); - param0->unk_64 = Graphics_GetAnimBankFromOpenNARC(param1, 136, 1, &(param0->unk_68), HEAP_ID_10); + param0->unk_5C = Graphics_GetCellBankFromOpenNARC(param1, 135, 1, &(param0->unk_60), HEAP_ID_BOX_GRAPHICS); + param0->unk_64 = Graphics_GetAnimBankFromOpenNARC(param1, 136, 1, &(param0->unk_68), HEAP_ID_BOX_GRAPHICS); - Graphics_LoadPaletteFromOpenNARC(param1, 137, 5, 0, 0x20 * 3, HEAP_ID_10); + Graphics_LoadPaletteFromOpenNARC(param1, 137, 5, 0, 0x20 * 3, HEAP_ID_BOX_GRAPHICS); NNS_G2dInitImageProxy(&v1); v3 = Graphics_LoadImageMappingFromOpenNARC(param1, 134, 1, 0, 0, NNS_G2D_VRAM_TYPE_2DSUB, 0, 10, &v1); ov19_021D783C(&v2, &v1, ov19_021D77D0(param0->unk_04), param0->unk_60, param0->unk_68, 1); @@ -629,17 +629,16 @@ static void ov19_021DF730(UnkStruct_ov19_021DEC04 *param0, u32 param1) }; NNSG2dImageProxy v1; SpriteResourcesHeader v2; - int v3; ov19_021D783C(&v2, &v1, ov19_021D77D0(param0->unk_04), ov19_021DA80C(param0->unk_14), ov19_021DA810(param0->unk_14), 1); - for (v3 = 0; v3 < 2; v3++) { - param0->unk_18[v3] = param1 + (v3 * (4 * 4) * 0x20); + for (int i = 0; i < 2; i++) { + param0->unk_18[i] = param1 + (i * (4 * 4) * 0x20); NNS_G2dInitImageProxy(&v1); - NNS_G2dSetImageLocation(&v1, NNS_G2D_VRAM_TYPE_2DSUB, param0->unk_18[v3]); + NNS_G2dSetImageLocation(&v1, NNS_G2D_VRAM_TYPE_2DSUB, param0->unk_18[i]); v1.attr.mappingType = GXS_GetOBJVRamModeChar(); - param0->unk_20[v3] = ov19_021D785C(param0->unk_10, &v2, v0[v3].unk_00, v0[v3].unk_02, 1 - v3, NNS_G2D_VRAM_TYPE_2DSUB); - Sprite_SetDrawFlag(param0->unk_20[v3], 0); + param0->unk_20[i] = ov19_021D785C(param0->unk_10, &v2, v0[i].unk_00, v0[i].unk_02, 1 - i, NNS_G2D_VRAM_TYPE_2DSUB); + Sprite_SetDrawFlag(param0->unk_20[i], FALSE); } } @@ -667,7 +666,7 @@ static void ov19_021DF7D0(UnkStruct_ov19_021DEC04 *param0) static void ov19_021DF834(UnkStruct_ov19_021DEC04 *param0) { - int compareMonSlot = ov19_021D5F9C(param0->unk_08); + int compareMonSlot = ov19_GetCompareMonSlot(param0->unk_08); const PCCompareMon *compareMon = ov19_GetCompareMonFrom(param0->unk_08, compareMonSlot); Sprite *v2 = param0->unk_20[compareMonSlot]; BoxPokemon *boxMon = compareMon->mon; @@ -693,7 +692,7 @@ static void ov19_021DF8C8(UnkStruct_ov19_021DEC04 *param0, int compareMonSlot) { Window *window; - compareMonSlot = ov19_021D5F9C(param0->unk_08); + compareMonSlot = ov19_GetCompareMonSlot(param0->unk_08); window = &(param0->unk_78[0 + compareMonSlot]); Window_FillTilemap(window, 0); diff --git a/src/overlay019/ov19_021DF964.c b/src/overlay019/ov19_021DF964.c deleted file mode 100644 index ad70b158dd..0000000000 --- a/src/overlay019/ov19_021DF964.c +++ /dev/null @@ -1,300 +0,0 @@ -#include "overlay019/ov19_021DF964.h" - -#include -#include - -#include "struct_decls/pc_boxes_decl.h" - -#include "overlay019/ov19_021D0D80.h" -#include "overlay019/pc_mon_preview.h" -#include "overlay019/struct_ov19_021D4DF0.h" -#include "overlay019/struct_ov19_021DF964.h" - -#include "enums.h" -#include "pc_boxes.h" -#include "sound_playback.h" -#include "system.h" - -static void ov19_021DFCF8(UnkStruct_ov19_021DF964 *param0); -static void ov19_021DFD08(UnkStruct_ov19_021DF964 *param0, UnkEnum_021DFB94 param1); - -void ov19_021DF964(UnkStruct_ov19_021D4DF0 *param0, u32 param1) -{ - UnkStruct_ov19_021DF964 *v0 = &(param0->unk_74); - - ov19_021DFCF8(v0); - ov19_021DFD08(v0, UnkEnum_021DFB94_54); - ov19_021DFD08(v0, UnkEnum_021DFB94_55); - - v0->unk_20 = param1; - v0->unk_23 = 0; -} - -void ov19_021DF990(UnkStruct_ov19_021D4DF0 *param0) -{ - UnkStruct_ov19_021DF964 *v0 = &(param0->unk_74); - - ov19_021DFCF8(v0); - v0->unk_23 = 1; - - switch (ov19_GetBoxMode(param0)) { - case PC_MODE_MOVE_MONS: - default: - if (ov19_GetPreviewMonSource(param0) == PREVIEW_MON_IN_CURSOR) { - ov19_021DFD08(v0, ov19_IsMonUnderCursor(param0) ? UnkEnum_021DFB94_36 : UnkEnum_021DFB94_35); - } else { - ov19_021DFD08(v0, UnkEnum_021DFB94_34); - } - - ov19_021DFD08(v0, UnkEnum_021DFB94_37); - - { - const PCMonPreview *preview = ov19_GetPCMonPreview(param0); - - if (preview->isEgg == FALSE) { - ov19_021DFD08(v0, UnkEnum_021DFB94_40); - } - } - - ov19_021DFD08(v0, (ov19_GetCursorLocation(param0) == CURSOR_IN_BOX) ? UnkEnum_021DFB94_38 : UnkEnum_021DFB94_39); - ov19_021DFD08(v0, UnkEnum_021DFB94_41); - ov19_021DFD08(v0, UnkEnum_021DFB94_42); - ov19_021DFD08(v0, UnkEnum_021DFB94_43); - break; - case PC_MODE_DEPOSIT: - ov19_021DFD08(v0, UnkEnum_021DFB94_39); - ov19_021DFD08(v0, UnkEnum_021DFB94_37); - ov19_021DFD08(v0, UnkEnum_021DFB94_41); - ov19_021DFD08(v0, UnkEnum_021DFB94_42); - ov19_021DFD08(v0, UnkEnum_021DFB94_43); - break; - case PC_MODE_WITHDRAW: - ov19_021DFD08(v0, UnkEnum_021DFB94_38); - ov19_021DFD08(v0, UnkEnum_021DFB94_37); - ov19_021DFD08(v0, UnkEnum_021DFB94_41); - ov19_021DFD08(v0, UnkEnum_021DFB94_42); - ov19_021DFD08(v0, UnkEnum_021DFB94_43); - break; - case PC_MODE_COMPARE: - ov19_021DFD08(v0, (ov19_021D5F9C(param0) == 0) ? UnkEnum_021DFB94_52 : UnkEnum_021DFB94_53); - ov19_021DFD08(v0, (ov19_GetCursorLocation(param0) == CURSOR_IN_BOX) ? UnkEnum_021DFB94_38 : UnkEnum_021DFB94_39); - ov19_021DFD08(v0, UnkEnum_021DFB94_41); - ov19_021DFD08(v0, UnkEnum_021DFB94_43); - } -} - -void ov19_021DFAD0(UnkStruct_ov19_021D4DF0 *param0) -{ - UnkStruct_ov19_021DF964 *v0; - u32 v1, v2; - - v0 = &(param0->unk_74); - v1 = ov19_GetCursorItem(param0); - v2 = ov19_GetPreviewedMonHeldItem(param0); - - ov19_021DFCF8(v0); - v0->unk_23 = 1; - - if (v1 != 0) { - if (v2 != 0) { - ov19_021DFD08(v0, UnkEnum_021DFB94_49); - } else { - ov19_021DFD08(v0, UnkEnum_021DFB94_46); - } - - ov19_021DFD08(v0, UnkEnum_021DFB94_50); - ov19_021DFD08(v0, UnkEnum_021DFB94_48); - } else { - if (v2 != 0) { - ov19_021DFD08(v0, UnkEnum_021DFB94_47); - ov19_021DFD08(v0, UnkEnum_021DFB94_50); - ov19_021DFD08(v0, UnkEnum_021DFB94_48); - } else { - ov19_021DFD08(v0, UnkEnum_021DFB94_46); - } - } - - ov19_021DFD08(v0, UnkEnum_021DFB94_51); -} - -void ov19_021DFB50(UnkStruct_ov19_021D4DF0 *param0) -{ - UnkStruct_ov19_021DF964 *v0 = &(param0->unk_74); - const PCBoxes *unused = ov19_GetPCBoxes(param0); - - ov19_021DFCF8(v0); - ov19_021DFD08(v0, UnkEnum_021DFB94_00); - - if (ov19_GetBoxMode(param0) != PC_MODE_COMPARE) { - ov19_021DFD08(v0, UnkEnum_021DFB94_01); - ov19_021DFD08(v0, UnkEnum_021DFB94_02); - } - - ov19_021DFD08(v0, UnkEnum_021DFB94_03); - - v0->unk_23 = 2; -} - -void ov19_021DFB94(UnkStruct_ov19_021D4DF0 *param0, UnkEnum_021DFB94 param1) -{ - UnkStruct_ov19_021DF964 *v0 = &(param0->unk_74); - const PCBoxes *pcBoxes = ov19_GetPCBoxes(param0); - u32 numUnlockedWallpapers; - - ov19_021DFCF8(v0); - ov19_021DFD08(v0, UnkEnum_021DFB94_04); - ov19_021DFD08(v0, UnkEnum_021DFB94_05); - ov19_021DFD08(v0, UnkEnum_021DFB94_06); - ov19_021DFD08(v0, UnkEnum_021DFB94_07); - - numUnlockedWallpapers = PCBoxes_CountUnlockedWallpapers(pcBoxes); - - if (numUnlockedWallpapers > 0) { - ov19_021DFD08(v0, UnkEnum_021DFB94_08); - } - - if (numUnlockedWallpapers > 4) { - ov19_021DFD08(v0, UnkEnum_021DFB94_09); - } - - v0->unk_23 = 3; - - if ((param1 >= UnkEnum_021DFB94_04) && (param1 <= UnkEnum_021DFB94_09)) { - v0->unk_20 = param1 - UnkEnum_021DFB94_04; - } else { - GF_ASSERT(0); - } -} - -void ov19_021DFC04(UnkStruct_ov19_021D4DF0 *param0, UnkEnum_021DFB94 param1) -{ - static const u16 v0[][4] = { - { UnkEnum_021DFB94_10, UnkEnum_021DFB94_11, UnkEnum_021DFB94_12, UnkEnum_021DFB94_13 }, - { UnkEnum_021DFB94_14, UnkEnum_021DFB94_15, UnkEnum_021DFB94_16, UnkEnum_021DFB94_17 }, - { UnkEnum_021DFB94_18, UnkEnum_021DFB94_19, UnkEnum_021DFB94_20, UnkEnum_021DFB94_21 }, - { UnkEnum_021DFB94_22, UnkEnum_021DFB94_23, UnkEnum_021DFB94_24, UnkEnum_021DFB94_25 }, - }; - UnkStruct_ov19_021DF964 *v1 = &(param0->unk_74); - const PCBoxes *pcBoxes = ov19_GetPCBoxes(param0); - int v3; - - ov19_021DFCF8(v1); - - if ((param1 >= UnkEnum_021DFB94_04) && (param1 <= UnkEnum_021DFB94_07)) { - param1 -= UnkEnum_021DFB94_04; - - for (v3 = 0; v3 < 4; v3++) { - ov19_021DFD08(v1, v0[param1][v3]); - } - } else { - int v4 = 0; - int v5 = 0; - - if (param1 == UnkEnum_021DFB94_09) { - v4 = 4; - } - - for (v3 = 0; v3 < 8; v3++) { - if (PCBoxes_CheckHasUnlockedWallpaper(pcBoxes, v3)) { - if (v4) { - v4--; - } else { - ov19_021DFD08(v1, UnkEnum_021DFB94_26 + v3); - - if (++v5 >= 4) { - break; - } - } - } - } - } - - v1->unk_23 = 3; -} - -void ov19_021DFC80(UnkStruct_ov19_021D4DF0 *param0) -{ - UnkStruct_ov19_021DF964 *v0 = &(param0->unk_74); - - ov19_021DFCF8(v0); - - v0->unk_23 = 4; - v0->unk_22 = param0->pcMonPreview.markings; - - ov19_021DFD08(v0, UnkEnum_021DFB94_56); - ov19_021DFD08(v0, UnkEnum_021DFB94_57); - ov19_021DFD08(v0, UnkEnum_021DFB94_58); - ov19_021DFD08(v0, UnkEnum_021DFB94_59); - ov19_021DFD08(v0, UnkEnum_021DFB94_60); - ov19_021DFD08(v0, UnkEnum_021DFB94_61); - ov19_021DFD08(v0, UnkEnum_021DFB94_44); - ov19_021DFD08(v0, UnkEnum_021DFB94_45); -} - -void ov19_021DFCE4(UnkStruct_ov19_021D4DF0 *param0, u32 param1) -{ - UnkStruct_ov19_021DF964 *v0 = &(param0->unk_74); - v0->unk_22 ^= (1 << param1); -} - -static void ov19_021DFCF8(UnkStruct_ov19_021DF964 *param0) -{ - param0->unk_21 = 0; - param0->unk_20 = 0; -} - -static void ov19_021DFD08(UnkStruct_ov19_021DF964 *param0, UnkEnum_021DFB94 param1) -{ - if (param0->unk_21 < 8) { - param0->unk_00[param0->unk_21++] = param1; - } -} - -int ov19_021DFD2C(UnkStruct_ov19_021D4DF0 *param0) -{ - UnkStruct_ov19_021DF964 *v0 = &(param0->unk_74); - - if (gSystem.pressedKeys & PAD_KEY_UP) { - if (v0->unk_20) { - v0->unk_20--; - return -2; - } else if (v0->unk_21 >= 3) { - v0->unk_20 = v0->unk_21 - 1; - return -2; - } - } - - if (gSystem.pressedKeys & PAD_KEY_DOWN) { - if (v0->unk_20 < (v0->unk_21 - 1)) { - v0->unk_20++; - return -2; - } else if (v0->unk_21 >= 3) { - v0->unk_20 = 0; - return -2; - } - } - - if (gSystem.pressedKeys & PAD_BUTTON_B) { - Sound_PlayEffect(SEQ_SE_DP_DECIDE); - return -1; - } - - if (gSystem.pressedKeys & PAD_BUTTON_A) { - Sound_PlayEffect(SEQ_SE_DP_DECIDE); - return v0->unk_00[v0->unk_20]; - } - - return -3; -} - -UnkEnum_021DFB94 ov19_021DFDDC(UnkStruct_ov19_021D4DF0 *param0) -{ - UnkStruct_ov19_021DF964 *v0 = &(param0->unk_74); - return v0->unk_00[v0->unk_20]; -} - -UnkEnum_021DFB94 ov19_021DFDEC(UnkStruct_ov19_021D4DF0 *param0) -{ - UnkStruct_ov19_021DF964 *v0 = &(param0->unk_74); - return v0->unk_00[0]; -} diff --git a/src/overlay064/ov64_0222DCE0.c b/src/overlay064/ov64_0222DCE0.c index 806552c1c0..eba04ac40a 100644 --- a/src/overlay064/ov64_0222DCE0.c +++ b/src/overlay064/ov64_0222DCE0.c @@ -2794,7 +2794,7 @@ static int ov64_0223044C (UnkStruct_ov64_02230444 * param0, UnkStruct_ov64_0222D } ApplicationManager_Free(param0->appMan); - ov64_0222E07C(param2, param0->unk_04->unk_18, param0->unk_08->unk_1C); + ov64_0222E07C(param2, param0->unk_04->textInputStr, param0->unk_08->unk_1C); ov64_0222E074(param2, 0, 6); param2->unk_04 = 3; break; @@ -2818,7 +2818,7 @@ static int ov64_0223044C (UnkStruct_ov64_02230444 * param0, UnkStruct_ov64_0222D if (param0->unk_04->unk_14 == 0) { ov64_0222E074(param2, 1, 12); - ov64_0222E07C(param2, param0->unk_04->unk_18, NULL); + ov64_0222E07C(param2, param0->unk_04->textInputStr, NULL); param2->unk_04 = 6; } else { ov64_0222E074(param2, 1, 13); @@ -2858,9 +2858,9 @@ static UnkStruct_0208737C * ov64_022305DC (UnkStruct_ov64_02230444 * param0, Unk if (param1->unk_34.unk_04 == 1) { { if (IsFullWidthChar(*param1->unk_34.unk_00) == 0) { - Strbuf_CopyChars(v0->unk_18, param1->unk_34.unk_00); + Strbuf_CopyChars(v0->textInputStr, param1->unk_34.unk_00); } else { - Strbuf_Clear(v0->unk_18); + Strbuf_Clear(v0->textInputStr); } } diff --git a/src/overlay073/ov73_021D0D80.c b/src/overlay073/ov73_021D0D80.c index 76b2a26b09..220dc6c8b9 100644 --- a/src/overlay073/ov73_021D0D80.c +++ b/src/overlay073/ov73_021D0D80.c @@ -235,13 +235,13 @@ int ov73_021D0F7C(ApplicationManager *appMan, int *param1) Heap_FreeToHeap(v0->unk_B8); Heap_FreeToHeap(v0->unk_BC); - TrainerInfo_SetNameFromStrbuf(SaveData_GetTrainerInfo(v0->saveData), v0->unk_70->unk_18); + TrainerInfo_SetNameFromStrbuf(SaveData_GetTrainerInfo(v0->saveData), v0->unk_70->textInputStr); TrainerInfo_SetGender(SaveData_GetTrainerInfo(v0->saveData), v0->unk_70->unk_04); { MiscSaveBlock *v2 = SaveData_MiscSaveBlock(v0->saveData); - MiscSaveBlock_SetRivalName(v2, v0->unk_74->unk_18); + MiscSaveBlock_SetRivalName(v2, v0->unk_74->textInputStr); } sub_0208716C(v0->unk_70); @@ -706,8 +706,8 @@ static BOOL ov73_021D1510(UnkStruct_ov73_021D1058 *param0, u32 param1, int param param0->unk_5C = Strbuf_Init(0x400, param0->heapID); MessageLoader_GetStrbuf(param0->unk_4C, param1, v1); - StringTemplate_SetStrbuf(param0->unk_64, 0, param0->unk_70->unk_18, param0->unk_84, 1, GAME_LANGUAGE); - StringTemplate_SetStrbuf(param0->unk_64, 1, param0->unk_74->unk_18, 0, 1, GAME_LANGUAGE); + StringTemplate_SetStrbuf(param0->unk_64, 0, param0->unk_70->textInputStr, param0->unk_84, 1, GAME_LANGUAGE); + StringTemplate_SetStrbuf(param0->unk_64, 1, param0->unk_74->textInputStr, 0, 1, GAME_LANGUAGE); StringTemplate_Format(param0->unk_64, param0->unk_5C, v1); Strbuf_Free(v1); } @@ -2025,7 +2025,7 @@ static BOOL ov73_021D2318(UnkStruct_ov73_021D1058 *param0) break; case 2: case 0xfffffffe: - Strbuf_Clear(param0->unk_70->unk_18); + Strbuf_Clear(param0->unk_70->textInputStr); param0->unk_10 = 63; param0->unk_0C = 81; break; @@ -2110,7 +2110,7 @@ static BOOL ov73_021D2318(UnkStruct_ov73_021D1058 *param0) { Strbuf *v10 = MessageLoader_GetNewStrbuf(param0->unk_4C, v9); - Strbuf_Copy(param0->unk_74->unk_18, v10); + Strbuf_Copy(param0->unk_74->textInputStr, v10); Strbuf_Free(v10); } } @@ -2157,7 +2157,7 @@ static BOOL ov73_021D2318(UnkStruct_ov73_021D1058 *param0) break; case 2: case 0xfffffffe: - Strbuf_Clear(param0->unk_74->unk_18); + Strbuf_Clear(param0->unk_74->textInputStr); param0->unk_0C = 88; break; } diff --git a/src/scrcmd.c b/src/scrcmd.c index 6305c6e724..10111dba11 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -3735,7 +3735,7 @@ static BOOL sub_02041CF4(ScriptContext *ctx) return FALSE; } - if (v2->unk_08 == 1) { + if (v2->recordBoxUseInJournal == TRUE) { void *journalEntryLocationEvent; journalEntryLocationEvent = JournalEntry_CreateEventUsedPCBox(HEAP_ID_FIELDMAP); diff --git a/src/unk_0203D1B8.c b/src/unk_0203D1B8.c index 6d9f7b5be2..d5805d1424 100644 --- a/src/unk_0203D1B8.c +++ b/src/unk_0203D1B8.c @@ -1179,11 +1179,11 @@ static BOOL sub_0203DE98(FieldTask *param0) break; case 3: if (v2->unk_0C->unk_00 == 1) { - if (Strbuf_Compare(v2->unk_0C->unk_18, v2->unk_10) == 0) { + if (Strbuf_Compare(v2->unk_0C->textInputStr, v2->unk_10) == 0) { v2->unk_0C->unk_14 = 1; } } else if (v2->unk_0C->unk_00 == 5) { - const u16 *v3 = Strbuf_GetData(v2->unk_0C->unk_18); + const u16 *v3 = Strbuf_GetData(v2->unk_0C->textInputStr); RecordMixedRNG *v4 = SaveData_GetRecordMixedRNG(fieldSystem->saveData); if (RecordMixedRNG_DoesCollectionContainGroup(v4, v3)) { @@ -1228,11 +1228,11 @@ static void sub_0203DF68(FieldTask *param0) } break; case 5: { RecordMixedRNG *v5 = SaveData_GetRecordMixedRNG(fieldSystem->saveData); - RecordMixedRNG_GetEntryNameAsStrbuf(v5, 0, 0, v1->unk_0C->unk_18); + RecordMixedRNG_GetEntryNameAsStrbuf(v5, 0, 0, v1->unk_0C->textInputStr); } break; case 6: { MiscSaveBlock *v6 = SaveData_MiscSaveBlock(fieldSystem->saveData); - MiscSaveBlock_SetTabletName(v6, v1->unk_0C->unk_18); + MiscSaveBlock_SetTabletName(v6, v1->unk_0C->textInputStr); } break; } @@ -1266,7 +1266,7 @@ void sub_0203DFE8(FieldTask *param0, int param1, int param2, int param3, int par break; default: if (param5 != NULL) { - Strbuf_CopyChars(v2->unk_0C->unk_18, param5); + Strbuf_CopyChars(v2->unk_0C->textInputStr, param5); } break; } diff --git a/src/unk_0208694C.c b/src/unk_0208694C.c index 719de9d355..e1c746f6ed 100644 --- a/src/unk_0208694C.c +++ b/src/unk_0208694C.c @@ -1074,17 +1074,17 @@ static void sub_02086E6C(UnkStruct_02087A10 *param0, UnkStruct_0208737C *param1) v0 = MessageLoader_GetNewStrbuf(param0->unk_170, 18 + LCRNG_Next() % 18); } - Strbuf_Copy(param1->unk_18, v0); + Strbuf_Copy(param1->textInputStr, v0); Strbuf_Free(v0); - Strbuf_ToChars(param1->unk_18, param1->unk_1C, 10); + Strbuf_ToChars(param1->textInputStr, param1->unk_1C, 10); } else if (param0->unk_00 == 3) { Strbuf *v1; v1 = MessageLoader_GetNewStrbuf(param0->unk_170, 88 + (LCRNG_Next() % 2)); - Strbuf_Copy(param1->unk_18, v1); + Strbuf_Copy(param1->textInputStr, v1); Strbuf_Free(v1); - Strbuf_ToChars(param1->unk_18, param1->unk_1C, 10); + Strbuf_ToChars(param1->textInputStr, param1->unk_1C, 10); } else { param1->unk_14 = 1; } @@ -1130,7 +1130,7 @@ static int sub_02086F3C(ApplicationManager *appMan, int *param1) } else { CharCode_Copy(v0->unk_118, v0->unk_D8); CharCode_Copy(v1->unk_1C, v0->unk_D8); - Strbuf_CopyChars(v1->unk_18, v0->unk_D8); + Strbuf_CopyChars(v1->textInputStr, v0->unk_D8); } Strbuf_Free(v0->unk_184); @@ -1198,7 +1198,7 @@ UnkStruct_0208737C *sub_0208712C(int heapID, int param1, int param2, int param3, v0->unk_0C = param3; v0->unk_14 = 0; v0->unk_1C[0] = 0xffff; - v0->unk_18 = Strbuf_Init(32, heapID); + v0->textInputStr = Strbuf_Init(32, heapID); v0->unk_44 = 0; v0->unk_48 = NULL; v0->unk_10 = 0; @@ -1210,10 +1210,10 @@ UnkStruct_0208737C *sub_0208712C(int heapID, int param1, int param2, int param3, void sub_0208716C(UnkStruct_0208737C *param0) { - GF_ASSERT((param0->unk_18) != NULL); + GF_ASSERT((param0->textInputStr) != NULL); GF_ASSERT((param0) != NULL); - Strbuf_Free(param0->unk_18); + Strbuf_Free(param0->textInputStr); Heap_FreeToHeap(param0); } @@ -1387,8 +1387,8 @@ static void sub_0208737C(UnkStruct_02087A10 *param0, ApplicationManager *appMan) param0->unk_118[0] = 0xffff; - if (v0->unk_18) { - Strbuf_ToChars(v0->unk_18, param0->unk_118, 32); + if (v0->textInputStr) { + Strbuf_ToChars(v0->textInputStr, param0->unk_118, 32); } MI_CpuFill16(param0->unk_D8, 0x1, 32 * 2); diff --git a/src/unk_02098218.c b/src/unk_02098218.c index ed7310a913..23ede9b4d2 100644 --- a/src/unk_02098218.c +++ b/src/unk_02098218.c @@ -244,7 +244,7 @@ static BOOL sub_0209843C(FieldTask *param0) } break; case 4: if (v0->unk_08->unk_14 == 0) { - Pokemon_SetValue(v0->unk_0C.unk_00, MON_DATA_NICKNAME_STRBUF_AND_FLAG, v0->unk_08->unk_18); + Pokemon_SetValue(v0->unk_0C.unk_00, MON_DATA_NICKNAME_STRBUF_AND_FLAG, v0->unk_08->textInputStr); { FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);