diff options
author | Diegoisawesome <Diegoisawesome@users.noreply.github.com> | 2018-03-09 16:12:09 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-09 16:12:09 -0600 |
commit | d2d587406ab096fde731c98b83599eca7f8c0f90 (patch) | |
tree | e8fa8e32ed217ccd7f8d46e333bedfdd9977a3d7 /src | |
parent | ae214eca8b9086db64af3741aecaf05acf007b96 (diff) | |
parent | 711a345fd43da3edf0d1eed99e9df646c436ba16 (diff) |
Merge pull request #228 from DizzyEggg/decompile_item_menu_icons
Decompile item menu icons
Diffstat (limited to 'src')
-rw-r--r-- | src/berry_tag_screen.c | 6 | ||||
-rwxr-xr-x | src/item_menu.c | 224 | ||||
-rw-r--r-- | src/item_menu_icons.c | 678 |
3 files changed, 693 insertions, 215 deletions
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index f86f350bf..1a0d1bce0 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -515,7 +515,7 @@ static void Task_HandleInput(u8 taskId) static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) { s16 *data = gTasks[taskId].data; - s16 currPocketPosition = gUnknown_0203CE58.unk12[3] + gUnknown_0203CE58.unk8[3]; + s16 currPocketPosition = gUnknown_0203CE58.scrollPosition[3] + gUnknown_0203CE58.cursorPosition[3]; u32 newPocketPosition = currPocketPosition + toMove; if (newPocketPosition < 46 && BagGetItemIdByPocketPosition(BAG_BERRIES, newPocketPosition) != 0) { @@ -533,8 +533,8 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) static void HandleBagCursorPositionChange(s8 toMove) { - u16 *scrollPos = &gUnknown_0203CE58.unk12[3]; - u16 *cursorPos = &gUnknown_0203CE58.unk8[3]; + u16 *scrollPos = &gUnknown_0203CE58.scrollPosition[3]; + u16 *cursorPos = &gUnknown_0203CE58.cursorPosition[3]; if (toMove > 0) { if (*cursorPos < 4 || BagGetItemIdByPocketPosition(BAG_BERRIES, *scrollPos + 8) == 0) diff --git a/src/item_menu.c b/src/item_menu.c index 24dce79f6..8c05f0828 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "item_menu.h" #include "battle.h" #include "battle_controllers.h" #include "battle_frontier_2.h" @@ -58,7 +59,6 @@ void load_bag_item_list_buffers(u8); void bag_menu_print_pocket_names(u8*, u8*); void bag_menu_copy_pocket_name_to_window(u32); void bag_menu_draw_pocket_indicator_square(u8, u8); -void AddBagVisualObject(u8); void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void); void bag_menu_add_list_scroll_arrow_indicators_maybe(void); void bag_menu_prepare_tmhm_move_window(void); @@ -67,9 +67,8 @@ void Task_WallyTutorialBagMenu(u8); void Task_BagMenu(u8); void get_name(s8*, u16); u16 ItemIdToBattleMoveId(u16); -void ShakeBagVisual(void); u16 BagGetItemIdByPocketPosition(u8, u16); -void AddBagItemIconObject(u16, u8); +void AddBagItemIconSprite(u16, u8); void bag_menu_print_description_box_text(int); void bag_menu_print_cursor(u8, u8); void bag_menu_print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8); @@ -86,9 +85,6 @@ u8 GetSwitchBagPocketDirection(void); void SwitchBagPocket(u8, s16, u16); bool8 sub_81AC2C0(void); void bag_menu_swap_items(u8); -void SetBagVisualPocketId(u8, u8); -void RemoveBagObject(u8); -void AddSwitchPocketRotatingBallObject(s16); void sub_81AC10C(u8); void sub_81AC3C0(u8); void sub_81AC498(u8); @@ -251,46 +247,6 @@ const struct WindowTemplate gUnknown_086141AC[] = { // .text -struct BagStruct { - void (*bagCallback)(void); - u8 location; - u8 pocket; - u8 unk6[2]; - u16 cursorPosition[5]; - u16 scrollPosition[5]; -}; - -struct UnkBagStruct { - MainCallback unk0; - u8 unk4[0x800]; - u8 unk804; - u8 unk805; - u8 unk806[10]; - u8 unk810[7]; - u8 unk817; - u8 unk818; - u8 unk819; - u8 unk81A; - u8 unk81B:4; - u8 unk81B_1:2; - u8 unk81B_3:1; - u8 unk81B_2:1; - u8 filler3[2]; - u8 unk81E; - u8 unk81F; - const u8* unk820; - u8 unk824; - u8 unk825; - u8 filler[2]; - u8 unk828; - u8 unk829[5]; - u8 unk82E[6]; - s16 unk834; - u8 filler4[0xE]; - u8 unk844[32][32]; - u8 filler2[4]; -}; - struct ListBuffer1 { struct ListMenuItem subBuffers[65]; }; @@ -319,14 +275,11 @@ void (*gFieldCallback)(void); extern u8 *gPocketNamesStringsTable[]; extern u8 gUnknown_08D9A88C[]; -extern struct CompressedSpriteSheet gUnknown_0857FB34; -extern struct CompressedSpriteSheet gUnknown_0857FB3C; -extern struct CompressedSpritePalette gUnknown_0857FB44; extern struct ListMenuTemplate gUnknown_08613F9C; -extern u8 gMoveNames[][0xD]; +extern const u8 gMoveNames[][0xD]; extern u8* gReturnToXStringsTable[]; extern u32 gUnknown_0203CE5E[]; -extern u8 EventScript_2736B3[]; +extern const u8 EventScript_2736B3[]; extern const u16 gUnknown_0860F074[]; void ResetBagScrollPositions(void) @@ -411,7 +364,7 @@ void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2) gUnknown_0203CE54->unk81A = 0xFF; gUnknown_0203CE54->unk81E = -1; gUnknown_0203CE54->unk81F = -1; - memset(&gUnknown_0203CE54->unk804, 0xFF, 12); + memset(gUnknown_0203CE54->unk804, 0xFF, sizeof(gUnknown_0203CE54->unk804)); memset(gUnknown_0203CE54->unk810, 0xFF, 10); SetMainCallback2(CB2_Bag); } @@ -517,7 +470,7 @@ bool8 setup_bag_menu(void) gMain.state++; break; case 15: - AddBagVisualObject(gUnknown_0203CE58.pocket); + AddBagVisualSprite(gUnknown_0203CE58.pocket); gMain.state++; break; case 16: @@ -697,11 +650,11 @@ void bag_menu_change_item_callback(s32 a, bool8 b, struct ListMenu *unused) } if (gUnknown_0203CE54->unk81A == 0xFF) { - RemoveBagItemIconObject(1 ^ gUnknown_0203CE54->unk81B_1); + RemoveBagItemIconSprite(1 ^ gUnknown_0203CE54->unk81B_1); if (a != -2) - AddBagItemIconObject(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1); + AddBagItemIconSprite(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1); else - AddBagItemIconObject(-1, gUnknown_0203CE54->unk81B_1); + AddBagItemIconSprite(-1, gUnknown_0203CE54->unk81B_1); gUnknown_0203CE54->unk81B_1 ^= 1; if (!gUnknown_0203CE54->unk81B_3) bag_menu_print_description_box_text(a); @@ -1038,7 +991,6 @@ u8 GetSwitchBagPocketDirection(void) return 0; } - void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId) { if (deltaBagPocketId == 1 && *bagPocketId == 4) @@ -1049,13 +1001,11 @@ void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId) *bagPocketId += deltaBagPocketId; } -#ifdef NONMATCHING void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) { s16* data = gTasks[taskId].data; u8 pocketId; - data[13] = 0; data[12] = 0; data[11] = deltaBagPocketId; @@ -1065,7 +1015,7 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) ClearWindowTilemap(1); DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); schedule_bg_copy_tilemap_to_vram(0); - gSprites[gUnknown_0203CE54->unk806[gUnknown_0203CE54->unk81B_1 ^ 1]].invisible = 1; + gSprites[gUnknown_0203CE54->unk804[2 + (gUnknown_0203CE54->unk81B_1 ^ 1)]].invisible = 1; sub_81AB824(); } pocketId = gUnknown_0203CE58.pocket; @@ -1085,160 +1035,10 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16); schedule_bg_copy_tilemap_to_vram(2); SetBagVisualPocketId(pocketId, 1); - RemoveBagObject(1); - AddSwitchPocketRotatingBallObject(deltaBagPocketId); + RemoveBagSprite(1); + AddSwitchPocketRotatingBallSprite(deltaBagPocketId); SetTaskFuncWithFollowupFunc(taskId, sub_81AC10C, gTasks[taskId].func); } -#else -__attribute__((naked)) -void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0xC\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - lsls r1, 16\n\ - lsrs r5, r1, 16\n\ - lsls r2, 16\n\ - lsls r0, r6, 2\n\ - adds r0, r6\n\ - lsls r0, 3\n\ - ldr r1, =gTasks + 0x8\n\ - adds r4, r0, r1\n\ - movs r0, 0\n\ - strh r0, [r4, 0x1A]\n\ - strh r0, [r4, 0x18]\n\ - strh r5, [r4, 0x16]\n\ - cmp r2, 0\n\ - bne _081AC026\n\ - movs r0, 0\n\ - bl ClearWindowTilemap\n\ - movs r0, 0x1\n\ - bl ClearWindowTilemap\n\ - ldrb r0, [r4]\n\ - ldr r3, =gUnknown_0203CE58\n\ - ldrb r2, [r3, 0x5]\n\ - lsls r2, 1\n\ - adds r1, r3, 0\n\ - adds r1, 0x12\n\ - adds r1, r2, r1\n\ - adds r3, 0x8\n\ - adds r2, r3\n\ - bl DestroyListMenuTask\n\ - movs r0, 0\n\ - bl schedule_bg_copy_tilemap_to_vram\n\ - ldr r3, =gSprites\n\ - ldr r0, =gUnknown_0203CE54\n\ - ldr r2, [r0]\n\ - ldr r1, =0x0000081b\n\ - adds r0, r2, r1\n\ - ldrb r1, [r0]\n\ - lsls r1, 26\n\ - lsrs r1, 30\n\ - movs r0, 0x1\n\ - eors r0, r1\n\ - adds r2, r0\n\ - ldr r0, =0x00000806\n\ - adds r2, r0\n\ - ldrb r1, [r2]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - adds r0, 0x3E\n\ - ldrb r1, [r0]\n\ - movs r2, 0x4\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - bl sub_81AB824\n\ -_081AC026:\n\ - ldr r4, =gUnknown_0203CE58\n\ - ldrb r1, [r4, 0x5]\n\ - add r0, sp, 0x8\n\ - strb r1, [r0]\n\ - lsls r1, r5, 24\n\ - asrs r1, 24\n\ - bl ChangeBagPocketId\n\ - lsls r0, r5, 16\n\ - asrs r1, r0, 16\n\ - adds r5, r0, 0\n\ - cmp r1, 0x1\n\ - bne _081AC07C\n\ - ldr r2, =gPocketNamesStringsTable\n\ - ldrb r0, [r4, 0x5]\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - add r1, sp, 0x8\n\ - ldrb r1, [r1]\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - ldr r1, [r1]\n\ - bl bag_menu_print_pocket_names\n\ - movs r0, 0\n\ - bl bag_menu_copy_pocket_name_to_window\n\ - b _081AC09A\n\ - .pool\n\ -_081AC07C:\n\ - ldr r2, =gPocketNamesStringsTable\n\ - add r0, sp, 0x8\n\ - ldrb r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ldrb r1, [r4, 0x5]\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - ldr r1, [r1]\n\ - bl bag_menu_print_pocket_names\n\ - movs r0, 0x8\n\ - bl bag_menu_copy_pocket_name_to_window\n\ -_081AC09A:\n\ - ldr r0, =gUnknown_0203CE58\n\ - ldrb r0, [r0, 0x5]\n\ - movs r1, 0\n\ - bl bag_menu_draw_pocket_indicator_square\n\ - add r0, sp, 0x8\n\ - ldrb r0, [r0]\n\ - movs r1, 0x1\n\ - bl bag_menu_draw_pocket_indicator_square\n\ - movs r0, 0xF\n\ - str r0, [sp]\n\ - movs r0, 0x10\n\ - str r0, [sp, 0x4]\n\ - movs r0, 0x2\n\ - movs r1, 0xB\n\ - movs r2, 0xE\n\ - movs r3, 0x2\n\ - bl FillBgTilemapBufferRect_Palette0\n\ - movs r0, 0x2\n\ - bl schedule_bg_copy_tilemap_to_vram\n\ - add r0, sp, 0x8\n\ - ldrb r0, [r0]\n\ - movs r1, 0x1\n\ - bl SetBagVisualPocketId\n\ - movs r0, 0x1\n\ - bl RemoveBagObject\n\ - asrs r0, r5, 16\n\ - bl AddSwitchPocketRotatingBallObject\n\ - ldr r1, =sub_81AC10C\n\ - ldr r2, =gTasks\n\ - lsls r0, r6, 2\n\ - adds r0, r6\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - ldr r2, [r0]\n\ - adds r0, r6, 0\n\ - bl SetTaskFuncWithFollowupFunc\n\ - add sp, 0xC\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided\n"); -} -#endif void sub_81AC10C(u8 taskId) { diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c new file mode 100644 index 000000000..1d9dbb106 --- /dev/null +++ b/src/item_menu_icons.c @@ -0,0 +1,678 @@ +#include "global.h" +#include "sprite.h" +#include "decompress.h" +#include "item_menu.h" +#include "item_icon.h" +#include "item_menu_icons.h" +#include "window.h" +#include "menu_helpers.h" +#include "berry.h" +#include "graphics.h" +#include "constants/items.h" + +struct CompressedTilesPal +{ + const u8 *tiles; + const u8 *pal; +}; + +extern void sub_80D5860(struct Sprite *sprite); +extern void sub_80D58F8(struct Sprite *sprite); +extern void sub_80D5968(struct Sprite *sprite); +extern void sub_80D5A94(struct Sprite *sprite); +extern void sub_80D5B48(struct Sprite *sprite); + +// this file's functions +static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite); +static void SpriteCB_ShakeBagVisual(struct Sprite *sprite); +static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite); +static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite); + +// static const rom data +static const u16 gUnknown_0857F564[] = INCBIN_U16("graphics/interface/bag_spinner.gbapal"); +static const u8 gUnknown_0857F584[] = INCBIN_U8("graphics/interface/bag_spinner.4bpp"); +static const u8 gUnknown_0857F604[] = INCBIN_U8("graphics/unused/cherry.4bpp"); +static const u16 gUnknown_0857FA84[] = INCBIN_U16("graphics/unused/cherry.gbapal"); + +static const struct OamData sOamData_857FAA4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_857FAAC[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FAB4[] = +{ + ANIMCMD_FRAME(64, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FABC[] = +{ + ANIMCMD_FRAME(128, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FAC4[] = +{ + ANIMCMD_FRAME(192, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FACC[] = +{ + ANIMCMD_FRAME(256, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FAD4[] = +{ + ANIMCMD_FRAME(320, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_857FADC[] = +{ + sSpriteAnim_857FAAC, + sSpriteAnim_857FAB4, + sSpriteAnim_857FAC4, + sSpriteAnim_857FACC, + sSpriteAnim_857FAD4, + sSpriteAnim_857FABC +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FAF4[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FB04[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 254, 2), + AFFINEANIMCMD_FRAME(0, 0, 2, 4), + AFFINEANIMCMD_FRAME(0, 0, 254, 4), + AFFINEANIMCMD_FRAME(0, 0, 2, 2), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB2C[] = +{ + sSpriteAffineAnim_857FAF4, + sSpriteAffineAnim_857FB04 +}; + +const struct CompressedSpriteSheet gUnknown_0857FB34 = +{ + gBagMaleTiles, 0x3000, 100 +}; + +const struct CompressedSpriteSheet gUnknown_0857FB3C = +{ + gBagFemaleTiles, 0x3000, 100 +}; + +const struct CompressedSpritePalette gUnknown_0857FB44 = +{ + gBagPalette, 100 +}; + +static const struct SpriteTemplate gUnknown_0857FB4C = +{ + .tileTag = 100, + .paletteTag = 100, + .oam = &sOamData_857FAA4, + .anims = sSpriteAnimTable_857FADC, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_857FB2C, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData sOamData_857FB64 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 4, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_857FB6C[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_857FB74[] = +{ + sSpriteAnim_857FB6C +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FB78[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 8, 16), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FB88[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 248, 16), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB98[] = +{ + sSpriteAffineAnim_857FB78, +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB9C[] = +{ + sSpriteAffineAnim_857FB88, +}; + +static const struct SpriteSheet gUnknown_0857FBA0 = +{ + gUnknown_0857F584, 0x80, 101 +}; + +static const struct SpritePalette gUnknown_0857FBA8 = +{ + gUnknown_0857F564, 101 +}; + +static const struct SpriteTemplate gUnknown_0857FBB0 = +{ + .tileTag = 101, + .paletteTag = 101, + .oam = &sOamData_857FB64, + .anims = sSpriteAnimTable_857FB74, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_857FB98, + .callback = SpriteCB_SwitchPocketRotatingBallInit, +}; + +static const struct OamData sOamData_857FBC8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 7, + .affineParam = 0 +}; + +static const struct OamData sOamData_857FBD0 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_857FBD8[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_857FBE0[] = +{ + sSpriteAnim_857FBD8 +}; + +static const struct SpriteFrameImage sSpriteImageTable_857FBE4[] = +{ + {&gDecompressionBuffer[0], 0x800}, +}; + +static const struct SpriteTemplate gUnknown_0857FBEC = +{ + .tileTag = 65535, + .paletteTag = 30020, + .oam = &sOamData_857FBC8, + .anims = sSpriteAnimTable_857FBE0, + .images = sSpriteImageTable_857FBE4, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FC04[] = +{ + AFFINEANIMCMD_FRAME(-1, -1, 253, 96), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(-2, -2, 255, 64), + AFFINEANIMCMD_FRAME(-8, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -8, 0, 16), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FC3C[] = +{ + AFFINEANIMCMD_FRAME(-1, -1, 3, 96), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(-2, -2, 1, 64), + AFFINEANIMCMD_FRAME(-8, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -8, 0, 16), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FC74[] = +{ + sSpriteAffineAnim_857FC04, + sSpriteAffineAnim_857FC3C +}; + +static const struct SpriteTemplate gUnknown_0857FC7C = +{ + .tileTag = 0xFFFF, + .paletteTag = 0x7544, + .oam = &sOamData_857FBD0, + .anims = sSpriteAnimTable_857FBE0, + .images = sSpriteImageTable_857FBE4, + .affineAnims = sSpriteAffineAnimTable_857FC74, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedTilesPal gBerryPicTable[] = +{ + {gBerryPic_Cheri, gBerryPalette_Cheri}, + {gBerryPic_Chesto, gBerryPalette_Chesto}, + {gBerryPic_Pecha, gBerryPalette_Pecha}, + {gBerryPic_Rawst, gBerryPalette_Rawst}, + {gBerryPic_Aspear, gBerryPalette_Aspear}, + {gBerryPic_Leppa, gBerryPalette_Leppa}, + {gBerryPic_Oran, gBerryPalette_Oran}, + {gBerryPic_Persim, gBerryPalette_Persim}, + {gBerryPic_Lum, gBerryPalette_Lum}, + {gBerryPic_Sitrus, gBerryPalette_Sitrus}, + {gBerryPic_Figy, gBerryPalette_Figy}, + {gBerryPic_Wiki, gBerryPalette_Wiki}, + {gBerryPic_Mago, gBerryPalette_Mago}, + {gBerryPic_Aguav, gBerryPalette_Aguav}, + {gBerryPic_Iapapa, gBerryPalette_Iapapa}, + {gBerryPic_Razz, gBerryPalette_Razz}, + {gBerryPic_Bluk, gBerryPalette_Bluk}, + {gBerryPic_Nanab, gBerryPalette_Nanab}, + {gBerryPic_Wepear, gBerryPalette_Wepear}, + {gBerryPic_Pinap, gBerryPalette_Pinap}, + {gBerryPic_Pomeg, gBerryPalette_Pomeg}, + {gBerryPic_Kelpsy, gBerryPalette_Kelpsy}, + {gBerryPic_Qualot, gBerryPalette_Qualot}, + {gBerryPic_Hondew, gBerryPalette_Hondew}, + {gBerryPic_Grepa, gBerryPalette_Grepa}, + {gBerryPic_Tamato, gBerryPalette_Tamato}, + {gBerryPic_Cornn, gBerryPalette_Cornn}, + {gBerryPic_Magost, gBerryPalette_Magost}, + {gBerryPic_Rabuta, gBerryPalette_Rabuta}, + {gBerryPic_Nomel, gBerryPalette_Nomel}, + {gBerryPic_Spelon, gBerryPalette_Spelon}, + {gBerryPic_Pamtre, gBerryPalette_Pamtre}, + {gBerryPic_Watmel, gBerryPalette_Watmel}, + {gBerryPic_Durin, gBerryPalette_Durin}, + {gBerryPic_Belue, gBerryPalette_Belue}, + {gBerryPic_Liechi, gBerryPalette_Liechi}, + {gBerryPic_Ganlon, gBerryPalette_Ganlon}, + {gBerryPic_Salac, gBerryPalette_Salac}, + {gBerryPic_Petaya, gBerryPalette_Petaya}, + {gBerryPic_Apicot, gBerryPalette_Apicot}, + {gBerryPic_Lansat, gBerryPalette_Lansat}, + {gBerryPic_Starf, gBerryPalette_Starf}, + {gBerryPic_Enigma, gBerryPalette_Enigma}, +}; + +const struct CompressedSpriteSheet gUnknown_0857FDEC = +{ + gBerryCheckCircle_Gfx, 0x800, 10000 +}; + +const struct CompressedSpritePalette gUnknown_0857FDF4 = +{ + gUnknown_08D9BEF0, 10000 +}; + +static const struct OamData sOamData_857FDFC = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_857FE04[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_857FE0C[] = +{ + sSpriteAnim_857FE04 +}; + +static const struct SpriteTemplate gUnknown_0857FE10 = +{ + .tileTag = 10000, + .paletteTag = 10000, + .oam = &sOamData_857FDFC, + .anims = sSpriteAnimTable_857FE0C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct SpriteTemplate gUnknown_0857FE28 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5860, +}; + +const struct SpriteTemplate gUnknown_0857FE40 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D58F8, +}; + +const struct SpriteTemplate gUnknown_0857FE58 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5968, +}; + +const struct SpriteTemplate gUnknown_0857FE70 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5A94, +}; + +const struct SpriteTemplate gUnknown_0857FE88 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5B48, +}; + +// code +void RemoveBagSprite(u8 id) +{ + u8 *spriteId = &gUnknown_0203CE54->unk804[id]; + if (*spriteId != 0xFF) + { + FreeSpriteTilesByTag(id + 100); + FreeSpritePaletteByTag(id + 100); + FreeSpriteOamMatrix(&gSprites[*spriteId]); + DestroySprite(&gSprites[*spriteId]); + *spriteId = 0xFF; + } +} + +void AddBagVisualSprite(u8 bagPocketId) +{ + u8 *spriteId = &gUnknown_0203CE54->unk804[0]; + *spriteId = CreateSprite(&gUnknown_0857FB4C, 68, 66, 0); + SetBagVisualPocketId(bagPocketId, FALSE); +} + +void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets) +{ + struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]]; + if (isSwitchingPockets) + { + sprite->pos2.y = -5; + sprite->callback = SpriteCB_BagVisualSwitchingPockets; + sprite->data[0] = bagPocketId + 1; + StartSpriteAnim(sprite, 0); + } + else + { + StartSpriteAnim(sprite, bagPocketId + 1); + } +} + +static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite) +{ + if (sprite->pos2.y != 0) + { + sprite->pos2.y++; + } + else + { + StartSpriteAnim(sprite, sprite->data[0]); + sprite->callback = SpriteCallbackDummy; + } +} + +void ShakeBagVisual(void) +{ + struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]]; + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->callback = SpriteCB_ShakeBagVisual; + } +} + +static void SpriteCB_ShakeBagVisual(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 0); + sprite->callback = SpriteCallbackDummy; + } +} + +void AddSwitchPocketRotatingBallSprite(s16 rotationDirection) +{ + u8 *spriteId = &gUnknown_0203CE54->unk804[1]; + LoadSpriteSheet(&gUnknown_0857FBA0); + LoadSpritePalette(&gUnknown_0857FBA8); + *spriteId = CreateSprite(&gUnknown_0857FBB0, 16, 16, 0); + gSprites[*spriteId].data[0] = rotationDirection; +} + +static void update_switch_pocket_rotating_ball_coords(struct Sprite *sprite) +{ + sprite->centerToCornerVecX = sprite->data[1] - ((sprite->data[3] + 1) & 1); + sprite->centerToCornerVecY = sprite->data[1] - ((sprite->data[3] + 1) & 1); +} + +static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite) +{ + sprite->oam.affineMode = 1; + if (sprite->data[0] == -1) + sprite->affineAnims = sSpriteAffineAnimTable_857FB98; + else + sprite->affineAnims = sSpriteAffineAnimTable_857FB9C; + + InitSpriteAffineAnim(sprite); + sprite->data[1] = sprite->centerToCornerVecX; + sprite->data[1] = sprite->centerToCornerVecY; + update_switch_pocket_rotating_ball_coords(sprite); + sprite->callback = SpriteCB_SwitchPocketRotatingBallContinue; +} + +static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite) +{ + sprite->data[3]++; + update_switch_pocket_rotating_ball_coords(sprite); + if (sprite->data[3] == 16) + RemoveBagSprite(1); +} + +void AddBagItemIconSprite(u16 itemId, u8 id) +{ + u8 *spriteId = &gUnknown_0203CE54->unk804[id + 2]; + if (*spriteId == 0xFF) + { + u8 iconSpriteId; + + FreeSpriteTilesByTag(id + 102); + FreeSpritePaletteByTag(id + 102); + iconSpriteId = AddItemIconSprite(id + 102, id + 102, itemId); + if (iconSpriteId != MAX_SPRITES) + { + *spriteId = iconSpriteId; + gSprites[iconSpriteId].pos2.x = 24; + gSprites[iconSpriteId].pos2.y = 88; + } + } +} + +void RemoveBagItemIconSprite(u8 id) +{ + RemoveBagSprite(id + 2); +} + +void sub_80D4FAC(void) +{ + sub_8122344(&gUnknown_0203CE54->unk804[4], 8); +} + +void sub_80D4FC8(u8 arg0) +{ + sub_81223FC(&gUnknown_0203CE54->unk804[4], 8, arg0); +} + +void sub_80D4FEC(u8 arg0) +{ + sub_8122448(&gUnknown_0203CE54->unk804[4], 136, 120, (arg0 + 1) * 16); +} + +static void sub_80D5018(void *mem0, void *mem1) +{ + u8 i, j; + + memset(mem1, 0, 0x800); + mem1 += 0x100; + for (i = 0; i < 6; i++) + { + mem1 += 0x20; + for (j = 0; j < 6; j++) + { + memcpy(mem1, mem0, 0x20); + mem1 += 0x20; + mem0 += 0x20; + } + if (i != 5) + mem1 += 0x20; + } +} + +static void sub_80D5070(u8 berryId) +{ + struct CompressedSpritePalette pal; + + if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1 && IsEnigmaBerryValid()) + { + // unknown empty if statement + } + + pal.data = gBerryPicTable[berryId].pal; + pal.tag = 0x7544; + LoadCompressedObjectPalette(&pal); + LZDecompressWram(gBerryPicTable[berryId].tiles, &gDecompressionBuffer[0x1000]); + sub_80D5018(&gDecompressionBuffer[0x1000], &gDecompressionBuffer[0]); +} + +u8 CreateBerryTagSprite(u8 id, s16 x, s16 y) +{ + sub_80D5070(id); + return CreateSprite(&gUnknown_0857FBEC, x, y, 0); +} + +void FreeBerryTagSpritePalette(void) +{ + FreeSpritePaletteByTag(0x7544); +} + +u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine) +{ + u8 spriteId; + + FreeSpritePaletteByTag(0x7544); + sub_80D5070(berryId); + spriteId = CreateSprite(&gUnknown_0857FC7C, x, y, 0); + if (startAffine == TRUE) + StartSpriteAffineAnim(&gSprites[spriteId], 1); + + return spriteId; +} + +u8 CreateBerryFlavorCircleSprite(s16 x) +{ + return CreateSprite(&gUnknown_0857FE10, x, 116, 0); +} |