diff --git a/include/battle.h b/include/battle.h index 1fd7c5db00ad..e3ebcdc40dbe 100644 --- a/include/battle.h +++ b/include/battle.h @@ -1107,6 +1107,7 @@ extern u16 gLastThrownBall; extern u16 gBallToDisplay; extern bool8 gLastUsedBallMenuPresent; extern u8 gPartyCriticalHits[PARTY_SIZE]; +extern u8 gCategoryIconSpriteId; static inline u32 GetBattlerPosition(u32 battler) { diff --git a/include/battle_interface.h b/include/battle_interface.h index b26205d8102d..97efc7a09982 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -120,5 +120,6 @@ void TryAddLastUsedBallItemSprites(void); void SwapBallToDisplay(bool32 sameBall); void ArrowsChangeColorLastBallCycle(bool32 showArrows); void UpdateAbilityPopup(u8 battlerId); +void CategoryIcons_LoadSpritesGfx(void); #endif // GUARD_BATTLE_INTERFACE_H diff --git a/include/graphics.h b/include/graphics.h index e1f674c7dbc6..242ebd3a4e7a 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -1974,6 +1974,8 @@ extern const u32 gSummaryMoveSelect_Gfx[]; extern const u32 gSummaryMoveSelect_Pal[]; extern const u32 gStatusGfx_Icons[]; extern const u32 gStatusPal_Icons[]; +extern const u16 gCategoryIcons_Pal[]; +extern const u32 gCategoryIcons_Gfx[]; extern const u32 gShopMenu_Gfx[]; extern const u32 gShopMenu_Tilemap[]; diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 2eaf039a51a8..5e5821448fda 100755 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -9,6 +9,9 @@ extern const u8 gNotDoneYetDescription[]; extern const u8 *const gNatureNamePointers[]; extern const struct SpriteTemplate gSpriteTemplate_MoveTypes; extern const struct CompressedSpriteSheet gSpriteSheet_MoveTypes; +extern const struct CompressedSpriteSheet gSpriteSheet_CategoryIcons; +extern const struct SpritePalette gSpritePal_CategoryIcons; +extern const struct SpriteTemplate gSpriteTemplate_CategoryIcons; void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index adc6f07133a5..1e906ad061dc 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -906,6 +906,12 @@ static void HandleInputChooseMove(u32 battler) if (JOY_NEW(L_BUTTON) || JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { sDescriptionSubmenu = FALSE; + if (gCategoryIconSpriteId != 0xFF) + { + DestroySprite(&gSprites[gCategoryIconSpriteId]); + gCategoryIconSpriteId = 0xFF; + } + FillWindowPixelBuffer(B_WIN_MOVE_DESCRIPTION, PIXEL_FILL(0)); ClearStdWindowAndFrame(B_WIN_MOVE_DESCRIPTION, FALSE); CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_GFX); @@ -1798,6 +1804,8 @@ static void MoveSelectionDisplayMoveDescription(u32 battler) u16 move = moveInfo->moves[gMoveSelectionCursor[battler]]; u16 pwr = gMovesInfo[move].power; u16 acc = gMovesInfo[move].accuracy; + u8 cat = gMovesInfo[move].category; + u8 pwr_num[3], acc_num[3]; u8 cat_desc[7] = _("CAT: "); u8 pwr_desc[7] = _("PWR: "); @@ -1829,6 +1837,12 @@ static void MoveSelectionDisplayMoveDescription(u32 battler) else StringAppend(gDisplayedStringBattle, gMovesInfo[move - 1].description); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_DESCRIPTION); + + if (gCategoryIconSpriteId == 0xFF) + gCategoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 38, 64, 1); + + StartSpriteAnim(&gSprites[gCategoryIconSpriteId], cat); + CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_FULL); } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 4aaf1b6e8356..bbff38e57caa 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -709,6 +709,7 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]); MegaIndicator_LoadSpritesGfx(); + CategoryIcons_LoadSpritesGfx(); } else if (!IsDoubleBattle()) { diff --git a/src/battle_interface.c b/src/battle_interface.c index ecd502c08848..dc1ee44f9744 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -3718,3 +3718,9 @@ void ArrowsChangeColorLastBallCycle(bool32 showArrows) } #endif } + +void CategoryIcons_LoadSpritesGfx(void) +{ + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); +} diff --git a/src/battle_main.c b/src/battle_main.c index 1764f3d6a5cc..c22d0b7ec7c0 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -234,6 +234,7 @@ EWRAM_DATA u16 gBallToDisplay = 0; EWRAM_DATA bool8 gLastUsedBallMenuPresent = FALSE; EWRAM_DATA u8 gPartyCriticalHits[PARTY_SIZE] = {0}; EWRAM_DATA static u8 sTriedEvolving = 0; +EWRAM_DATA u8 gCategoryIconSpriteId = 0; void (*gPreBattleCallback1)(void); void (*gBattleMainFunc)(void); @@ -3079,6 +3080,7 @@ static void BattleStartClearSetData(void) gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky gSelectedMonPartyId = PARTY_SIZE; // Revival Blessing + gCategoryIconSpriteId = 0xFF; } void SwitchInClearSetData(u32 battler) diff --git a/src/graphics.c b/src/graphics.c index c00bb2c767f4..a64efa98f63c 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1621,6 +1621,9 @@ const u32 gPartyMenuPokeball_Pal[] = INCBIN_U32("graphics/party_menu/pokeball.gb const u32 gStatusGfx_Icons[] = INCBIN_U32("graphics/interface/status_icons.4bpp.lz"); const u32 gStatusPal_Icons[] = INCBIN_U32("graphics/interface/status_icons.gbapal.lz"); +const u16 gCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal"); +const u32 gCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz"); + const u32 gMoveTypes_Gfx[] = INCBIN_U32("graphics/types/move_types.4bpp.lz"); const u32 gMoveTypes_Pal[] = INCBIN_U32("graphics/types/move_types.gbapal.lz"); diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 0e3817d4ac1d..5addfa65c31d 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -621,60 +621,6 @@ static void DestroyCategoryIcon(void); static u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum); -#define TAG_CATEGORY_ICONS 30004 - -static const u16 sCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal"); -static const u32 sCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz"); - -static const struct OamData sOamData_CategoryIcons = -{ - .size = SPRITE_SIZE(16x16), - .shape = SPRITE_SHAPE(16x16), - .priority = 0, -}; -static const struct CompressedSpriteSheet sSpriteSheet_CategoryIcons = -{ - .data = sCategoryIcons_Gfx, - .size = 16*16*3/2, - .tag = TAG_CATEGORY_ICONS, -}; -static const struct SpritePalette sSpritePal_CategoryIcons = -{ - .data = sCategoryIcons_Pal, - .tag = TAG_CATEGORY_ICONS -}; -static const union AnimCmd sSpriteAnim_CategoryIcon0[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; -static const union AnimCmd sSpriteAnim_CategoryIcon1[] = -{ - ANIMCMD_FRAME(4, 0), - ANIMCMD_END -}; -static const union AnimCmd sSpriteAnim_CategoryIcon2[] = -{ - ANIMCMD_FRAME(8, 0), - ANIMCMD_END -}; -static const union AnimCmd *const sSpriteAnimTable_CategoryIcons[] = -{ - sSpriteAnim_CategoryIcon0, - sSpriteAnim_CategoryIcon1, - sSpriteAnim_CategoryIcon2, -}; -static const struct SpriteTemplate sSpriteTemplate_CategoryIcons = -{ - .tileTag = TAG_CATEGORY_ICONS, - .paletteTag = TAG_CATEGORY_ICONS, - .oam = &sOamData_CategoryIcons, - .anims = sSpriteAnimTable_CategoryIcons, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - //Stat bars by DizzyEgg #define TAG_STAT_BAR 4097 #define TAG_STAT_BAR_BG 4098 @@ -4888,7 +4834,7 @@ static void LoadTilesetTilemapHGSS(u8 page) static u8 ShowCategoryIcon(u32 category) { if (sPokedexView->categoryIconSpriteId == 0xFF) - sPokedexView->categoryIconSpriteId = CreateSprite(&sSpriteTemplate_CategoryIcons, 139, 90, 0); + sPokedexView->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 139, 90, 0); gSprites[sPokedexView->categoryIconSpriteId].invisible = FALSE; StartSpriteAnim(&gSprites[sPokedexView->categoryIconSpriteId], category); @@ -5031,8 +4977,8 @@ static void Task_LoadStatsScreen(u8 taskId) CreateTypeIconSprites(); sPokedexView->categoryIconSpriteId = 0xFF; LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60); - LoadCompressedSpriteSheet(&sSpriteSheet_CategoryIcons); - LoadSpritePalette(&sSpritePal_CategoryIcons); + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); gMain.state++; break; case 4: diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index ca84d5b390c7..c0057119b63d 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -740,9 +740,6 @@ static const u8 sMovesPPLayout[] = _("{PP}{DYNAMIC 0}/{DYNAMIC 1}"); #define TAG_MON_MARKINGS 30003 #define TAG_CATEGORY_ICONS 30004 -static const u16 sCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal"); -static const u32 sCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz"); - static const struct OamData sOamData_CategoryIcons = { .size = SPRITE_SIZE(16x16), @@ -750,16 +747,16 @@ static const struct OamData sOamData_CategoryIcons = .priority = 0, }; -static const struct CompressedSpriteSheet sSpriteSheet_CategoryIcons = +const struct CompressedSpriteSheet gSpriteSheet_CategoryIcons = { - .data = sCategoryIcons_Gfx, + .data = gCategoryIcons_Gfx, .size = 16*16*3/2, .tag = TAG_CATEGORY_ICONS, }; -static const struct SpritePalette sSpritePal_CategoryIcons = +const struct SpritePalette gSpritePal_CategoryIcons = { - .data = sCategoryIcons_Pal, + .data = gCategoryIcons_Pal, .tag = TAG_CATEGORY_ICONS }; @@ -788,7 +785,7 @@ static const union AnimCmd *const sSpriteAnimTable_CategoryIcons[] = sSpriteAnim_CategoryIcon2, }; -static const struct SpriteTemplate sSpriteTemplate_CategoryIcons = +const struct SpriteTemplate gSpriteTemplate_CategoryIcons = { .tileTag = TAG_CATEGORY_ICONS, .paletteTag = TAG_CATEGORY_ICONS, @@ -1156,7 +1153,7 @@ static const u16 sMarkings_Pal[] = INCBIN_U16("graphics/summary_screen/markings. static u8 ShowCategoryIcon(u32 category) { if (sMonSummaryScreen->categoryIconSpriteId == 0xFF) - sMonSummaryScreen->categoryIconSpriteId = CreateSprite(&sSpriteTemplate_CategoryIcons, 48, 129, 0); + sMonSummaryScreen->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 48, 129, 0); gSprites[sMonSummaryScreen->categoryIconSpriteId].invisible = FALSE; StartSpriteAnim(&gSprites[sMonSummaryScreen->categoryIconSpriteId], category); @@ -1451,8 +1448,8 @@ static bool8 DecompressGraphics(void) break; case 12: LoadCompressedPalette(gMoveTypes_Pal, OBJ_PLTT_ID(13), 3 * PLTT_SIZE_4BPP); - LoadCompressedSpriteSheet(&sSpriteSheet_CategoryIcons); - LoadSpritePalette(&sSpritePal_CategoryIcons); + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); sMonSummaryScreen->switchCounter = 0; return TRUE; }