diff --git a/include/pokemon_storage_system_internal.h b/include/pokemon_storage_system_internal.h index e8b8aa7b8..c53b5ff86 100644 --- a/include/pokemon_storage_system_internal.h +++ b/include/pokemon_storage_system_internal.h @@ -373,9 +373,9 @@ struct PokemonStorageSystemData /* 21db */ u8 itemName[20]; /* 21ef */ u8 inBoxMovingMode; /* 21f0 */ u16 field_2200; - /* 21f4 */ struct PSS_ItemIconSprite itemIconSprites[MAX_ITEM_ICONS]; - /* 2224 */ u16 movingItem; - /* 2226 */ u16 field_2236; + /* 21f4 */ struct PSS_ItemIconSprite itemIcons[MAX_ITEM_ICONS]; + /* 2224 */ u16 movingItemId; + /* 2226 */ u16 itemInfoWindowOffset; /* 2228 */ struct PssQuestLogBuffer qlogBuffer; /* 2230 */ u16 field_2238; /* 2232 */ u16 field_223A; @@ -384,7 +384,7 @@ struct PokemonStorageSystemData /* 223c */ u16 field_2244[0x40]; /* 22bc */ u8 field_22C4[0x800]; /* 2abc */ u8 field_2AC4[0x1800]; - /* 42bc */ u8 field_42C4[0x800]; + /* 42bc */ u8 itemIconBuffer[0x800]; /* 4abc */ u8 field_4AC4[0x1000]; /* 5abc */ u8 field_5AC4[0x800]; }; // size=62bc @@ -442,9 +442,9 @@ void sub_8096088(void); void sub_80960C0(void); bool8 sub_809610C(void); const u8 *GetMovingItemName(void); -void sub_80966F4(void); -bool8 sub_8096728(void); -bool8 sub_80967C0(void); +void InitItemInfoWindow(void); +bool8 UpdateItemInfoWindowSlideIn(void); +bool8 UpdateItemInfoWindowSlideOut(void); void sub_8096BE4(struct UnkUtil *arg0, struct UnkUtilData *arg1, u32 arg2); void sub_8096BF8(void); void AddMenu(void); diff --git a/src/pokemon_storage_system_3.c b/src/pokemon_storage_system_3.c index a08b2a920..d68aaafdc 100644 --- a/src/pokemon_storage_system_3.c +++ b/src/pokemon_storage_system_3.c @@ -1568,12 +1568,12 @@ static void Cb_ShowItemInfo(u8 taskId) { PlaySE(SE_WIN_OPEN); PrintItemDescription(); - sub_80966F4(); + InitItemInfoWindow(); gPSSData->state++; } break; case 2: - if (!sub_8096728()) + if (!UpdateItemInfoWindowSlideIn()) gPSSData->state++; break; case 3: @@ -1588,7 +1588,7 @@ static void Cb_ShowItemInfo(u8 taskId) } break; case 5: - if (!sub_80967C0()) + if (!UpdateItemInfoWindowSlideOut()) gPSSData->state++; break; case 6: @@ -1617,7 +1617,7 @@ static void Cb_CloseBoxWhileHoldingItem(u8 taskId) SetPSSCallback(Cb_MainPSS); break; case 0: - if (AddBagItem(gPSSData->movingItem, 1) == TRUE) + if (AddBagItem(gPSSData->movingItemId, 1) == TRUE) { ClearBottomWindow(); gPSSData->state = 3; diff --git a/src/pokemon_storage_system_4.c b/src/pokemon_storage_system_4.c index 1c1567106..349a9b7b1 100644 --- a/src/pokemon_storage_system_4.c +++ b/src/pokemon_storage_system_4.c @@ -27,7 +27,7 @@ static void sub_8091E84(struct Sprite *sprite); static void sub_8091EB8(struct Sprite *sprite); static s16 GetBoxTitleBaseX(const u8 *boxName); static void sub_8091E34(void); -static void sub_8091EF0(void); +static void CycleBoxTitleColor(void); static void CreateBoxScrollArrows(void); static void StartBoxScrollArrowsSlide(s8 direction); static void StopBoxScrollArrowsSlide(void); @@ -128,7 +128,7 @@ static const u32 gUnknown_83D2654[] = INCBIN_U32("graphics/interface/pss_unk_83D static const u32 gUnknown_83D277C[] = INCBIN_U32("graphics/interface/pss_unk_83D277C.bin.lz"); static const u16 gUnknown_83D2820[] = INCBIN_U16("graphics/interface/pss_unk_83D2820.bin"); -static const u16 gUnknown_83D29D0[][2] = { +static const u16 sBoxTitleColors[][2] = { {RGB( 7, 7, 7), RGB(31, 31, 31)}, {RGB( 7, 7, 7), RGB(31, 31, 31)}, {RGB( 7, 7, 7), RGB(31, 31, 31)}, @@ -1119,7 +1119,7 @@ bool8 DoWallpaperGfxChange(void) case 2: if (WaitForWallpaperGfxLoad() == TRUE) { - sub_8091EF0(); + CycleBoxTitleColor(); BeginNormalPaletteFade(gPSSData->wallpaperPalBits, 1, 16, 0, RGB_WHITEALPHA); gPSSData->wallpaperChangeState++; } @@ -1227,8 +1227,8 @@ static void sub_8091A94(u8 boxId) u16 wallpaperId = GetBoxWallpaper(boxId); - gPSSData->boxTitlePal[14] = gUnknown_83D29D0[wallpaperId][0]; - gPSSData->boxTitlePal[15] = gUnknown_83D29D0[wallpaperId][1]; + gPSSData->boxTitlePal[14] = sBoxTitleColors[wallpaperId][0]; + gPSSData->boxTitlePal[15] = sBoxTitleColors[wallpaperId][1]; LoadSpritePalettes(palettes); gPSSData->wallpaperPalBits = 0x3f0; @@ -1279,7 +1279,7 @@ static void sub_8091C48(u8 boxId, s8 direction) StringCopyPadded(gPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8); DrawTextWindowAndBufferTiles(gPSSData->field_21B8, gPSSData->field_2F8, 0, 0, gPSSData->field_4F8, 2); LoadSpriteSheet(&spriteSheet); - LoadPalette(gUnknown_83D29D0[GetBoxWallpaper(boxId)], r8, 4); + LoadPalette(sBoxTitleColors[GetBoxWallpaper(boxId)], r8, 4); x = GetBoxTitleBaseX(GetBoxNamePtr(boxId)); x2 = x; x2 += direction * 192; @@ -1335,14 +1335,14 @@ static void sub_8091EB8(struct Sprite *sprite) } } -static void sub_8091EF0(void) +static void CycleBoxTitleColor(void) { u8 boxId = StorageGetCurrentBox(); u8 wallpaperId = GetBoxWallpaper(boxId); if (gPSSData->boxTitleCycleId == 0) - CpuCopy16(gUnknown_83D29D0[wallpaperId], gPlttBufferUnfaded + gPSSData->boxTitlePalOffset, 4); + CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + gPSSData->boxTitlePalOffset, 4); else - CpuCopy16(gUnknown_83D29D0[wallpaperId], gPlttBufferUnfaded + gPSSData->boxTitleAltPalOffset, 4); + CpuCopy16(sBoxTitleColors[wallpaperId], gPlttBufferUnfaded + gPSSData->boxTitleAltPalOffset, 4); } static s16 GetBoxTitleBaseX(const u8 *string) diff --git a/src/pokemon_storage_system_8.c b/src/pokemon_storage_system_8.c index 8a2cf84c8..7b8670e36 100644 --- a/src/pokemon_storage_system_8.c +++ b/src/pokemon_storage_system_8.c @@ -9,26 +9,38 @@ #include "trig.h" #include "constants/items.h" -static u8 sub_80961D8(void); -static bool32 sub_8096210(u8 cursorArea, u8 cursorPos); -static u8 sub_8096258(u8 cursorArea, u8 cursorPos); -static void sub_80962F0(u8 id, u8 cursorArea, u8 cursorPos); -static void sub_8096408(u8 id, const u32 * tiles, const u32 * pal); -static void sub_80964B8(u8 id, u8 affineAnimNo); -static void sub_80964E8(u8 id, u8 command, u8 cursorArea, u8 cursorPos); -static void sub_8096624(u8 id, bool8 show); +// IDs for the item icon sprite callbacks +enum { + ITEM_CB_WAIT_ANIM, + ITEM_CB_TO_HAND, + ITEM_CB_TO_MON, + ITEM_CB_SWAP_TO_HAND, + ITEM_CB_SWAP_TO_MON, + ITEM_CB_UNUSED_1, + ITEM_CB_UNUSED_2, + ITEM_CB_HIDE_PARTY, +}; + +static u8 GetNewItemIconIdx(void); +static bool32 IsItemIconAtPosition(u8 cursorArea, u8 cursorPos); +static u8 GetItemIconIdxByPosition(u8 cursorArea, u8 cursorPos); +static void SetItemIconPosition(u8 id, u8 cursorArea, u8 cursorPos); +static void LoadItemIconGfx(u8 id, const u32 * tiles, const u32 * pal); +static void SetItemIconAffineAnim(u8 id, u8 affineAnimNo); +static void SetItemIconCallback(u8 id, u8 command, u8 cursorArea, u8 cursorPos); +static void SetItemIconActive(u8 id, bool8 show); static const u32 *GetItemIconPic(u16 itemId); static const u32 *GetItemIconPalette(u16 itemId); -static void sub_8096898(u32 x); -static void sub_809692C(struct Sprite *sprite); -static void sub_8096958(struct Sprite *sprite); -static void sub_80969BC(struct Sprite *sprite); -static void sub_80969F4(struct Sprite *sprite); -static void sub_8096A74(struct Sprite *sprite); -static void sub_8096B10(struct Sprite *sprite); -static void sub_8096BAC(struct Sprite *sprite); +static void DrawItemInfoWindow(u32 x); +static void SpriteCB_ItemIcon_WaitAnim(struct Sprite *sprite); +static void SpriteCB_ItemIcon_ToHand(struct Sprite *sprite); +static void SpriteCB_ItemIcon_SetPosToCursor(struct Sprite *sprite); +static void SpriteCB_ItemIcon_ToMon(struct Sprite *sprite); +static void SpriteCB_ItemIcon_SwapToHand(struct Sprite *sprite); +static void SpriteCB_ItemIcon_SwapToMon(struct Sprite *sprite); +static void SpriteCB_ItemIcon_HideParty(struct Sprite *sprite); -static const u32 gUnknown_83D35DC[] = INCBIN_U32("graphics/interface/pss_unk_83D35DC.4bpp"); +static const u32 sItemInfoFrame_Gfx[] = INCBIN_U32("graphics/interface/pss_unk_83D35DC.4bpp"); static const struct OamData gUnknown_83D365C = { .y = 0, @@ -126,19 +138,19 @@ void sub_8095B5C(void) { spriteSheet.tag = TAG_TILE_7 + i; LoadCompressedSpriteSheet(&spriteSheet); - gPSSData->itemIconSprites[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * 32 + (void *)(OBJ_VRAM0); - gPSSData->itemIconSprites[i].palIndex = AllocSpritePalette(TAG_PAL_DACB + i); - gPSSData->itemIconSprites[i].palIndex *= 16; - gPSSData->itemIconSprites[i].palIndex += 0x100; + gPSSData->itemIcons[i].tiles = GetSpriteTileStartByTag(spriteSheet.tag) * 32 + (void *)(OBJ_VRAM0); + gPSSData->itemIcons[i].palIndex = AllocSpritePalette(TAG_PAL_DACB + i); + gPSSData->itemIcons[i].palIndex *= 16; + gPSSData->itemIcons[i].palIndex += 0x100; spriteTemplate.tileTag = TAG_TILE_7 + i; spriteTemplate.paletteTag = TAG_PAL_DACB + i; spriteId = CreateSprite(&spriteTemplate, 0, 0, 11); - gPSSData->itemIconSprites[i].sprite = &gSprites[spriteId]; - gPSSData->itemIconSprites[i].sprite->invisible = TRUE; - gPSSData->itemIconSprites[i].active = 0; + gPSSData->itemIcons[i].sprite = &gSprites[spriteId]; + gPSSData->itemIcons[i].sprite->invisible = TRUE; + gPSSData->itemIcons[i].active = 0; } } - gPSSData->movingItem = ITEM_NONE; + gPSSData->movingItemId = ITEM_NONE; } void sub_8095C84(u8 cursorArea, u8 cursorPos) @@ -147,7 +159,7 @@ void sub_8095C84(u8 cursorArea, u8 cursorPos) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) return; - if (sub_8096210(cursorArea, cursorPos)) + if (IsItemIconAtPosition(cursorArea, cursorPos)) return; switch (cursorArea) @@ -170,12 +182,12 @@ void sub_8095C84(u8 cursorArea, u8 cursorPos) { const u32 *tiles = GetItemIconPic(heldItem); const u32 *pal = GetItemIconPalette(heldItem); - u8 id = sub_80961D8(); + u8 id = GetNewItemIconIdx(); - sub_80962F0(id, cursorArea, cursorPos); - sub_8096408(id, tiles, pal); - sub_80964B8(id, 1); - sub_8096624(id, TRUE); + SetItemIconPosition(id, cursorArea, cursorPos); + LoadItemIconGfx(id, tiles, pal); + SetItemIconAffineAnim(id, 1); + SetItemIconActive(id, TRUE); } } @@ -186,9 +198,9 @@ void sub_8095D44(u8 cursorArea, u8 cursorPos) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) return; - id = sub_8096258(cursorArea, cursorPos); - sub_80964B8(id, 2); - sub_80964E8(id, 0, cursorArea, cursorPos); + id = GetItemIconIdxByPosition(cursorArea, cursorPos); + SetItemIconAffineAnim(id, 2); + SetItemIconCallback(id, 0, cursorArea, cursorPos); } void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos) @@ -199,11 +211,11 @@ void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) return; - id = sub_8096258(cursorArea, cursorPos); + id = GetItemIconIdxByPosition(cursorArea, cursorPos); item = 0; - sub_80964B8(id, 3); - sub_80964E8(id, 1, cursorArea, cursorPos); - sub_80962F0(id, 2, 0); + SetItemIconAffineAnim(id, 3); + SetItemIconCallback(id, 1, cursorArea, cursorPos); + SetItemIconPosition(id, 2, 0); if (cursorArea == CURSOR_AREA_IN_BOX) { SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &item); @@ -215,21 +227,21 @@ void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos) SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_BLEND); } - gPSSData->movingItem = gPSSData->displayMonItemId; + gPSSData->movingItemId = gPSSData->displayMonItemId; } void sub_8095E2C(u16 item) { const u32 *tiles = GetItemIconPic(item); const u32 *pal = GetItemIconPalette(item); - u8 id = sub_80961D8(); + u8 id = GetNewItemIconIdx(); - sub_8096408(id, tiles, pal); - sub_80964B8(id, 6); - sub_80964E8(id, 1, CURSOR_AREA_IN_BOX, 0); - sub_80962F0(id, CURSOR_AREA_BOX, 0); - sub_8096624(id, TRUE); - gPSSData->movingItem = item; + LoadItemIconGfx(id, tiles, pal); + SetItemIconAffineAnim(id, 6); + SetItemIconCallback(id, 1, CURSOR_AREA_IN_BOX, 0); + SetItemIconPosition(id, CURSOR_AREA_BOX, 0); + SetItemIconActive(id, TRUE); + gPSSData->movingItemId = item; } void Item_SwitchMonsWithMoving(u8 cursorArea, u8 cursorPos) @@ -240,25 +252,25 @@ void Item_SwitchMonsWithMoving(u8 cursorArea, u8 cursorPos) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) return; - id = sub_8096258(cursorArea, cursorPos); - sub_80964B8(id, 3); - sub_80964E8(id, 3, CURSOR_AREA_BOX, 0); + id = GetItemIconIdxByPosition(cursorArea, cursorPos); + SetItemIconAffineAnim(id, 3); + SetItemIconCallback(id, 3, CURSOR_AREA_BOX, 0); if (cursorArea == CURSOR_AREA_IN_BOX) { item = GetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM); - SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &gPSSData->movingItem); - gPSSData->movingItem = item; + SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &gPSSData->movingItemId); + gPSSData->movingItemId = item; } else { item = GetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM); - SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &gPSSData->movingItem); - gPSSData->movingItem = item; + SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &gPSSData->movingItemId); + gPSSData->movingItemId = item; } - id = sub_8096258(2, 0); - sub_80964B8(id, 4); - sub_80964E8(id, 4, cursorArea, cursorPos); + id = GetItemIconIdxByPosition(2, 0); + SetItemIconAffineAnim(id, 4); + SetItemIconCallback(id, 4, cursorArea, cursorPos); } void Item_GiveMovingToMon(u8 cursorArea, u8 cursorPos) @@ -268,17 +280,17 @@ void Item_GiveMovingToMon(u8 cursorArea, u8 cursorPos) if (gPSSData->boxOption != BOX_OPTION_MOVE_ITEMS) return; - id = sub_8096258(2, 0); - sub_80964B8(id, 4); - sub_80964E8(id, 2, cursorArea, cursorPos); + id = GetItemIconIdxByPosition(2, 0); + SetItemIconAffineAnim(id, 4); + SetItemIconCallback(id, 2, cursorArea, cursorPos); if (cursorArea == CURSOR_AREA_IN_BOX) { - SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &gPSSData->movingItem); + SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &gPSSData->movingItemId); SetBoxMonIconObjMode(cursorPos, ST_OAM_OBJ_NORMAL); } else { - SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &gPSSData->movingItem); + SetMonData(&gPlayerParty[cursorPos], MON_DATA_HELD_ITEM, &gPSSData->movingItemId); SetPartyMonIconObjMode(cursorPos, ST_OAM_OBJ_NORMAL); } } @@ -292,9 +304,9 @@ void Item_TakeMons(u8 cursorArea, u8 cursorPos) return; item = 0; - id = sub_8096258(cursorArea, cursorPos); - sub_80964B8(id, 2); - sub_80964E8(id, 0, cursorArea, cursorPos); + id = GetItemIconIdxByPosition(cursorArea, cursorPos); + SetItemIconAffineAnim(id, 2); + SetItemIconCallback(id, 0, cursorArea, cursorPos); if (cursorArea == CURSOR_AREA_IN_BOX) { SetCurrentBoxMonData(cursorPos, MON_DATA_HELD_ITEM, &item); @@ -311,9 +323,9 @@ void sub_8096088(void) { if (gPSSData->boxOption == BOX_OPTION_MOVE_ITEMS) { - u8 id = sub_8096258(2, 0); - sub_80964B8(id, 5); - sub_80964E8(id, 0, CURSOR_AREA_BOX, 0); + u8 id = GetItemIconIdxByPosition(2, 0); + SetItemIconAffineAnim(id, 5); + SetItemIconCallback(id, 0, CURSOR_AREA_BOX, 0); } } @@ -326,8 +338,8 @@ void sub_80960C0(void) for (i = 0; i < MAX_ITEM_ICONS; i++) { - if (gPSSData->itemIconSprites[i].active && gPSSData->itemIconSprites[i].cursorArea == CURSOR_AREA_IN_PARTY) - sub_80964E8(i, 7, CURSOR_AREA_BOX, 0); + if (gPSSData->itemIcons[i].active && gPSSData->itemIcons[i].cursorArea == CURSOR_AREA_IN_PARTY) + SetItemIconCallback(i, 7, CURSOR_AREA_BOX, 0); } } @@ -337,11 +349,11 @@ bool8 sub_809610C(void) for (i = 0; i < MAX_ITEM_ICONS; i++) { - if (gPSSData->itemIconSprites[i].active) + if (gPSSData->itemIcons[i].active) { - if (!gPSSData->itemIconSprites[i].sprite->affineAnimEnded && gPSSData->itemIconSprites[i].sprite->affineAnimBeginning) + if (!gPSSData->itemIcons[i].sprite->affineAnimEnded && gPSSData->itemIcons[i].sprite->affineAnimBeginning) return TRUE; - if (gPSSData->itemIconSprites[i].sprite->callback != SpriteCallbackDummy && gPSSData->itemIconSprites[i].sprite->callback != sub_80969BC) + if (gPSSData->itemIcons[i].sprite->callback != SpriteCallbackDummy && gPSSData->itemIcons[i].sprite->callback != SpriteCB_ItemIcon_SetPosToCursor) return TRUE; } } @@ -357,7 +369,7 @@ bool8 IsActiveItemMoving(void) { for (i = 0; i < MAX_ITEM_ICONS; i++) { - if (gPSSData->itemIconSprites[i].active && gPSSData->itemIconSprites[i].cursorArea == CURSOR_AREA_BOX) + if (gPSSData->itemIcons[i].active && gPSSData->itemIcons[i].cursorArea == CURSOR_AREA_BOX) return TRUE; } } @@ -367,23 +379,23 @@ bool8 IsActiveItemMoving(void) const u8 *GetMovingItemName(void) { - return ItemId_GetName(gPSSData->movingItem); + return ItemId_GetName(gPSSData->movingItemId); } u16 GetMovingItem(void) { - return gPSSData->movingItem; + return gPSSData->movingItemId; } -static u8 sub_80961D8(void) +static u8 GetNewItemIconIdx(void) { u8 i; for (i = 0; i < MAX_ITEM_ICONS; i++) { - if (!gPSSData->itemIconSprites[i].active) + if (!gPSSData->itemIcons[i].active) { - gPSSData->itemIconSprites[i].active = TRUE; + gPSSData->itemIcons[i].active = TRUE; return i; } } @@ -391,51 +403,51 @@ static u8 sub_80961D8(void) return MAX_ITEM_ICONS; } -static bool32 sub_8096210(u8 cursorArea, u8 cursorPos) +static bool32 IsItemIconAtPosition(u8 cursorArea, u8 cursorPos) { s32 i; for (i = 0; i < MAX_ITEM_ICONS; i++) { - if (gPSSData->itemIconSprites[i].active - && gPSSData->itemIconSprites[i].cursorArea == cursorArea - && gPSSData->itemIconSprites[i].cursorPos == cursorPos) + if (gPSSData->itemIcons[i].active + && gPSSData->itemIcons[i].cursorArea == cursorArea + && gPSSData->itemIcons[i].cursorPos == cursorPos) return TRUE; } return FALSE; } -static u8 sub_8096258(u8 cursorArea, u8 cursorPos) +static u8 GetItemIconIdxByPosition(u8 cursorArea, u8 cursorPos) { u8 i; for (i = 0; i < MAX_ITEM_ICONS; i++) { - if (gPSSData->itemIconSprites[i].active - && gPSSData->itemIconSprites[i].cursorArea == cursorArea - && gPSSData->itemIconSprites[i].cursorPos == cursorPos) + if (gPSSData->itemIcons[i].active + && gPSSData->itemIcons[i].cursorArea == cursorArea + && gPSSData->itemIcons[i].cursorPos == cursorPos) return i; } return MAX_ITEM_ICONS; } -static u8 sub_80962A8(struct Sprite *sprite) +static u8 GetItemIconIdxBySprite(struct Sprite *sprite) { u8 i; for (i = 0; i < MAX_ITEM_ICONS; i++) { - if (gPSSData->itemIconSprites[i].active - && gPSSData->itemIconSprites[i].sprite == sprite) + if (gPSSData->itemIcons[i].active + && gPSSData->itemIcons[i].sprite == sprite) return i; } return MAX_ITEM_ICONS; } -static void sub_80962F0(u8 id, u8 cursorArea, u8 cursorPos) +static void SetItemIconPosition(u8 id, u8 cursorArea, u8 cursorPos) { u8 row, column; @@ -447,100 +459,108 @@ static void sub_80962F0(u8 id, u8 cursorArea, u8 cursorPos) case CURSOR_AREA_IN_BOX: row = cursorPos % IN_BOX_ROWS; column = cursorPos / IN_BOX_ROWS; - gPSSData->itemIconSprites[id].sprite->x = (24 * row) + 112; - gPSSData->itemIconSprites[id].sprite->y = (24 * column) + 56; - gPSSData->itemIconSprites[id].sprite->oam.priority = 2; + gPSSData->itemIcons[id].sprite->x = (24 * row) + 112; + gPSSData->itemIcons[id].sprite->y = (24 * column) + 56; + gPSSData->itemIcons[id].sprite->oam.priority = 2; break; case CURSOR_AREA_IN_PARTY: if (cursorPos == 0) { - gPSSData->itemIconSprites[id].sprite->x = 116; - gPSSData->itemIconSprites[id].sprite->y = 76; + gPSSData->itemIcons[id].sprite->x = 116; + gPSSData->itemIcons[id].sprite->y = 76; } else { - gPSSData->itemIconSprites[id].sprite->x = 164; - gPSSData->itemIconSprites[id].sprite->y = 24 * (cursorPos - 1) + 28; + gPSSData->itemIcons[id].sprite->x = 164; + gPSSData->itemIcons[id].sprite->y = 24 * (cursorPos - 1) + 28; } - gPSSData->itemIconSprites[id].sprite->oam.priority = 1; + gPSSData->itemIcons[id].sprite->oam.priority = 1; break; } - gPSSData->itemIconSprites[id].cursorArea = cursorArea; - gPSSData->itemIconSprites[id].cursorPos = cursorPos; + gPSSData->itemIcons[id].cursorArea = cursorArea; + gPSSData->itemIcons[id].cursorPos = cursorPos; } -static void sub_8096408(u8 id, const u32 *itemTiles, const u32 *itemPal) +static void LoadItemIconGfx(u8 id, const u32 *itemTiles, const u32 *itemPal) { s32 i; if (id >= MAX_ITEM_ICONS) return; - CpuFastFill(0, gPSSData->field_42C4, 0x200); + CpuFastFill(0, gPSSData->itemIconBuffer, 0x200); LZ77UnCompWram(itemTiles, gPSSData->field_22C4); for (i = 0; i < 3; i++) - CpuFastCopy(gPSSData->field_22C4 + (i * 0x60), gPSSData->field_42C4 + (i * 0x80), 0x60); + CpuFastCopy(gPSSData->field_22C4 + (i * 0x60), gPSSData->itemIconBuffer + (i * 0x80), 0x60); - CpuFastCopy(gPSSData->field_42C4, gPSSData->itemIconSprites[id].tiles, 0x200); - LZ77UnCompWram(itemPal, gPSSData->field_42C4); - LoadPalette(gPSSData->field_42C4, gPSSData->itemIconSprites[id].palIndex, 0x20); + CpuFastCopy(gPSSData->itemIconBuffer, gPSSData->itemIcons[id].tiles, 0x200); + LZ77UnCompWram(itemPal, gPSSData->itemIconBuffer); + LoadPalette(gPSSData->itemIconBuffer, gPSSData->itemIcons[id].palIndex, 0x20); } -static void sub_80964B8(u8 id, u8 animNum) +static void SetItemIconAffineAnim(u8 id, u8 animNum) { if (id >= MAX_ITEM_ICONS) return; - StartSpriteAffineAnim(gPSSData->itemIconSprites[id].sprite, animNum); + StartSpriteAffineAnim(gPSSData->itemIcons[id].sprite, animNum); } -static void sub_80964E8(u8 id, u8 command, u8 cursorArea, u8 cursorPos) +#define sItemIconId data[0] +#define sState data[0] +#define sCursorArea data[6] +#define sCursorPos data[7] + +static void SetItemIconCallback(u8 id, u8 callbackId, u8 cursorArea, u8 cursorPos) { if (id >= MAX_ITEM_ICONS) return; - switch (command) + switch (callbackId) { - case 0: - gPSSData->itemIconSprites[id].sprite->data[0] = id; - gPSSData->itemIconSprites[id].sprite->callback = sub_809692C; + case ITEM_CB_WAIT_ANIM: + gPSSData->itemIcons[id].sprite->sItemIconId = id; + gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_WaitAnim; break; - case 1: - gPSSData->itemIconSprites[id].sprite->data[0] = 0; - gPSSData->itemIconSprites[id].sprite->callback = sub_8096958; + case ITEM_CB_TO_HAND: + gPSSData->itemIcons[id].sprite->sState = 0; + gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_ToHand; break; - case 2: - gPSSData->itemIconSprites[id].sprite->data[0] = 0; - gPSSData->itemIconSprites[id].sprite->data[6] = cursorArea; - gPSSData->itemIconSprites[id].sprite->data[7] = cursorPos; - gPSSData->itemIconSprites[id].sprite->callback = sub_80969F4; + case ITEM_CB_TO_MON: + gPSSData->itemIcons[id].sprite->sState = 0; + gPSSData->itemIcons[id].sprite->sCursorArea = cursorArea; + gPSSData->itemIcons[id].sprite->sCursorPos = cursorPos; + gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_ToMon; break; - case 3: - gPSSData->itemIconSprites[id].sprite->data[0] = 0; - gPSSData->itemIconSprites[id].sprite->callback = sub_8096A74; - gPSSData->itemIconSprites[id].sprite->data[6] = cursorArea; - gPSSData->itemIconSprites[id].sprite->data[7] = cursorPos; + case ITEM_CB_SWAP_TO_HAND: + gPSSData->itemIcons[id].sprite->sState = 0; + gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_SwapToHand; + gPSSData->itemIcons[id].sprite->sCursorArea = cursorArea; + gPSSData->itemIcons[id].sprite->sCursorPos = cursorPos; break; - case 4: - gPSSData->itemIconSprites[id].sprite->data[0] = 0; - gPSSData->itemIconSprites[id].sprite->data[6] = cursorArea; - gPSSData->itemIconSprites[id].sprite->data[7] = cursorPos; - gPSSData->itemIconSprites[id].sprite->callback = sub_8096B10; + case ITEM_CB_SWAP_TO_MON: + gPSSData->itemIcons[id].sprite->sState = 0; + gPSSData->itemIcons[id].sprite->sCursorArea = cursorArea; + gPSSData->itemIcons[id].sprite->sCursorPos = cursorPos; + gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_SwapToMon; break; - case 7: - gPSSData->itemIconSprites[id].sprite->callback = sub_8096BAC; + case ITEM_CB_HIDE_PARTY: + // If cursor is on a Pokémon with a held item and + // the player closes the party menu, have the held + // item follow the Pokémon as the menu slides out + gPSSData->itemIcons[id].sprite->callback = SpriteCB_ItemIcon_HideParty; break; } } -static void sub_8096624(u8 id, bool8 show) +static void SetItemIconActive(u8 id, bool8 show) { if (id >= MAX_ITEM_ICONS) return; - gPSSData->itemIconSprites[id].active = show; - gPSSData->itemIconSprites[id].sprite->invisible = (show == FALSE); + gPSSData->itemIcons[id].active = show; + gPSSData->itemIcons[id].sprite->invisible = (show == FALSE); } static const u32 *GetItemIconPic(u16 itemId) @@ -558,7 +578,7 @@ void PrintItemDescription(void) const u8 *description; if (IsActiveItemMoving()) - description = ItemId_GetDescription(gPSSData->movingItem); + description = ItemId_GetDescription(gPSSData->movingItemId); else description = ItemId_GetDescription(gPSSData->displayMonItemId); @@ -566,77 +586,77 @@ void PrintItemDescription(void) AddTextPrinterParameterized5(2, FONT_2, description, 2, 0, 0, NULL, 0, 0); } -void sub_80966F4(void) +void InitItemInfoWindow(void) { - gPSSData->field_2236 = 25; - LoadBgTiles(0, gUnknown_83D35DC, 0x80, 0x1A4); - sub_8096898(0); + gPSSData->itemInfoWindowOffset = 25; + LoadBgTiles(0, sItemInfoFrame_Gfx, 0x80, 0x1A4); + DrawItemInfoWindow(0); } -bool8 sub_8096728(void) +bool8 UpdateItemInfoWindowSlideIn(void) { s32 i, var; - if (gPSSData->field_2236 == 0) + if (gPSSData->itemInfoWindowOffset == 0) return FALSE; - gPSSData->field_2236--; - var = 25 - gPSSData->field_2236; + gPSSData->itemInfoWindowOffset--; + var = 25 - gPSSData->itemInfoWindowOffset; for (i = 0; i < var; i++) { - WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + gPSSData->field_2236 + i, i, 12, 1, 8, 15, 25); + WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + gPSSData->itemInfoWindowOffset + i, i, 12, 1, 8, 15, 25); } - sub_8096898(var); - return (gPSSData->field_2236 != 0); + DrawItemInfoWindow(var); + return (gPSSData->itemInfoWindowOffset != 0); } -bool8 sub_80967C0(void) +bool8 UpdateItemInfoWindowSlideOut(void) { s32 i, var; - if (gPSSData->field_2236 == 25) + if (gPSSData->itemInfoWindowOffset == 25) return FALSE; - if (gPSSData->field_2236 == 0) + if (gPSSData->itemInfoWindowOffset == 0) FillBgTilemapBufferRect(0, 0, 25, 11, 1, 10, 17); - gPSSData->field_2236++; - var = 25 - gPSSData->field_2236; + gPSSData->itemInfoWindowOffset++; + var = 25 - gPSSData->itemInfoWindowOffset; for (i = 0; i < var; i++) { - WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + gPSSData->field_2236 + i, i, 12, 1, 8, 15, 25); + WriteSequenceToBgTilemapBuffer(0, GetBgAttribute(0, BG_ATTR_BASETILE) + 0x14 + gPSSData->itemInfoWindowOffset + i, i, 12, 1, 8, 15, 25); } - sub_8096898(var); + DrawItemInfoWindow(var); FillBgTilemapBufferRect(0, 0, var, 11, 1, 10, 0x11); - return (gPSSData->field_2236 != 25); + return (gPSSData->itemInfoWindowOffset != 25); } -static void sub_8096898(u32 x) +static void DrawItemInfoWindow(u32 pos) { - if (x != 0) + if (pos != 0) { - FillBgTilemapBufferRect(0, 0x1A4, 0, 0xB, x, 1, 0xFu); - FillBgTilemapBufferRect(0, 0x9A4, 0, 0x14, x, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x1A4, 0, 0xB, pos, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x9A4, 0, 0x14, pos, 1, 0xFu); } - FillBgTilemapBufferRect(0, 0x1A5, x, 0xC, 1, 8, 0xFu); - FillBgTilemapBufferRect(0, 0x1A6, x, 0xB, 1, 1, 0xFu); - FillBgTilemapBufferRect(0, 0x1A7, x, 0x14, 1, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x1A5, pos, 0xC, 1, 8, 0xFu); + FillBgTilemapBufferRect(0, 0x1A6, pos, 0xB, 1, 1, 0xFu); + FillBgTilemapBufferRect(0, 0x1A7, pos, 0x14, 1, 1, 0xFu); ScheduleBgCopyTilemapToVram(0); } -static void sub_809692C(struct Sprite *sprite) +static void SpriteCB_ItemIcon_WaitAnim(struct Sprite *sprite) { if (sprite->affineAnimEnded) { - sub_8096624(sprite->data[0], FALSE); + SetItemIconActive(sprite->data[0], FALSE); sprite->callback = SpriteCallbackDummy; } } -static void sub_8096958(struct Sprite *sprite) +static void SpriteCB_ItemIcon_ToHand(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -653,19 +673,19 @@ static void sub_8096958(struct Sprite *sprite) sprite->x = sprite->data[1] >> 4; sprite->y = sprite->data[2] >> 4; if (++sprite->data[5] > 11) - sprite->callback = sub_80969BC; + sprite->callback = SpriteCB_ItemIcon_SetPosToCursor; break; } } -static void sub_80969BC(struct Sprite *sprite) +static void SpriteCB_ItemIcon_SetPosToCursor(struct Sprite *sprite) { sprite->x = gPSSData->cursorSprite->x + 4; sprite->y = gPSSData->cursorSprite->y + gPSSData->cursorSprite->y2 + 8; sprite->oam.priority = gPSSData->cursorSprite->oam.priority; } -static void sub_80969F4(struct Sprite *sprite) +static void SpriteCB_ItemIcon_ToMon(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -683,14 +703,14 @@ static void sub_80969F4(struct Sprite *sprite) sprite->y = sprite->data[2] >> 4; if (++sprite->data[5] > 11) { - sub_80962F0(sub_80962A8(sprite), sprite->data[6], sprite->data[7]); + SetItemIconPosition(GetItemIconIdxBySprite(sprite), sprite->data[6], sprite->data[7]); sprite->callback = SpriteCallbackDummy; } break; } } -static void sub_8096A74(struct Sprite *sprite) +static void SpriteCB_ItemIcon_SwapToHand(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -709,15 +729,15 @@ static void sub_8096A74(struct Sprite *sprite) sprite->x2 = gSineTable[sprite->data[5] * 8] >> 4; if (++sprite->data[5] > 11) { - sub_80962F0(sub_80962A8(sprite), sprite->data[6], sprite->data[7]); + SetItemIconPosition(GetItemIconIdxBySprite(sprite), sprite->data[6], sprite->data[7]); sprite->x2 = 0; - sprite->callback = sub_80969BC; + sprite->callback = SpriteCB_ItemIcon_SetPosToCursor; } break; } } -static void sub_8096B10(struct Sprite *sprite) +static void SpriteCB_ItemIcon_SwapToMon(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -736,7 +756,7 @@ static void sub_8096B10(struct Sprite *sprite) sprite->x2 = -(gSineTable[sprite->data[5] * 8] >> 4); if (++sprite->data[5] > 11) { - sub_80962F0(sub_80962A8(sprite), sprite->data[6], sprite->data[7]); + SetItemIconPosition(GetItemIconIdxBySprite(sprite), sprite->data[6], sprite->data[7]); sprite->callback = SpriteCallbackDummy; sprite->x2 = 0; } @@ -744,12 +764,17 @@ static void sub_8096B10(struct Sprite *sprite) } } -static void sub_8096BAC(struct Sprite *sprite) +static void SpriteCB_ItemIcon_HideParty(struct Sprite *sprite) { sprite->y -= 8; if (sprite->y + sprite->y2 < -16) { sprite->callback = SpriteCallbackDummy; - sub_8096624(sub_80962A8(sprite), FALSE); + SetItemIconActive(GetItemIconIdxBySprite(sprite), FALSE); } } + +#undef sState +#undef sItemIconId +#undef sCursorArea +#undef sCursorPos