item_menu_icons as seperate file from item_icon

This commit is contained in:
cawtds
2024-08-28 18:28:27 +02:00
parent 79039b36ca
commit cbc887c4d9
8 changed files with 369 additions and 351 deletions

View File

@@ -6,27 +6,9 @@ extern u8 *gItemIcon4x4Buffer;
extern const struct SpriteTemplate gItemIconSpriteTemplate;
extern const struct CompressedSpriteSheet gSpriteSheet_BagMale;
extern const struct CompressedSpriteSheet gSpriteSheet_BagFemale;
extern const struct CompressedSpritePalette gSpritePalette_Bag;
extern const struct CompressedSpriteSheet gBagSwapSpriteSheet;
extern const struct CompressedSpritePalette gBagSwapSpritePalette;
void ResetItemMenuIconState(void);
void CreateSwapLine(void);
void DestroyItemMenuIcon(bool8 a0);
void CreateItemMenuIcon(u16 itemId, bool8 a0);
void CopyItemIconPicTo4x4Buffer(const void *src, void *dest);
u8 AddItemIconObject(u16 tilesTag, u16 paletteTag, u16 itemId);
u8 AddItemIconObjectWithCustomObjectTemplate(const struct SpriteTemplate * origTemplate, u16 tilesTag, u16 paletteTag, u16 itemId);
void CreateBerryPouchItemIcon(u16 itemId, u8 idx);
void UpdateSwapLinePos(s16 x, u16 y);
void SetSwapLineInvisibility(bool8 invisible);
void SetBagVisualPocketId(u8);
void ShakeBagSprite(void);
void CreateBagSprite(u8 animNum);
const void *GetItemIconPic(u16 itemId);
const void *GetItemIconPalette(u16 itemId);

21
include/item_menu_icons.h Normal file
View File

@@ -0,0 +1,21 @@
#ifndef GUARD_ITEM_MENU_ICONS_H
#define GUARD_ITEM_MENU_ICONS_H
extern const struct CompressedSpriteSheet gSpriteSheet_BagMale;
extern const struct CompressedSpriteSheet gSpriteSheet_BagFemale;
extern const struct CompressedSpritePalette gSpritePalette_Bag;
extern const struct CompressedSpriteSheet gBagSwapSpriteSheet;
extern const struct CompressedSpritePalette gBagSwapSpritePalette;
void ResetItemMenuIconState(void);
void CreateSwapLine(void);
void DestroyItemMenuIcon(bool8 a0);
void CreateItemMenuIcon(u16 itemId, bool8 a0);
void CreateBerryPouchItemIcon(u16 itemId, u8 idx);
void UpdateSwapLinePos(s16 x, u16 y);
void SetSwapLineInvisibility(bool8 invisible);
void SetBagVisualPocketId(u8);
void ShakeBagSprite(void);
void CreateBagSprite(u8 animNum);
#endif // GUARD_ITEM_MENU_ICONS_H

View File

@@ -11,6 +11,7 @@
#include "new_menu_helpers.h"
#include "scanline_effect.h"
#include "item_icon.h"
#include "item_menu_icons.h"
#include "list_menu.h"
#include "graphics.h"
#include "berry.h"

View File

@@ -8,290 +8,9 @@
#include "constants/items.h"
#include "battle_main.h"
enum {
TAG_BAG = 100,
TAG_SWAP_LINE,
TAG_ITEM_ICON,
TAG_ITEM_ICON_ALT,
};
#define NUM_SWAP_LINE_SPRITES 9
// Indexes for sItemMenuIconSpriteIds
enum {
SPR_BAG,
SPR_SWAP_LINE_START,
SPR_ITEM_ICON = SPR_SWAP_LINE_START + NUM_SWAP_LINE_SPRITES,
SPR_ITEM_ICON_ALT,
SPR_COUNT
};
enum {
ANIM_SWAP_LINE_START,
ANIM_SWAP_LINE_MID,
ANIM_SWAP_LINE_END,
};
enum {
AFFINEANIM_BAG_IDLE,
AFFINEANIM_BAG_SHAKE,
};
static EWRAM_DATA u8 sItemMenuIconSpriteIds[SPR_COUNT] = {0};
EWRAM_DATA u8 *gItemIconDecompressionBuffer = NULL;
EWRAM_DATA u8 *gItemIcon4x4Buffer = NULL;
static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite);
static void SpriteCB_ShakeBagSprite(struct Sprite *sprite);
static const struct OamData sOamData_Bag = {
.affineMode = ST_OAM_AFFINE_NORMAL,
.shape = SPRITE_SHAPE(64x64),
.size = SPRITE_SIZE(64x64),
.priority = 1,
.paletteNum = 0
};
static const union AnimCmd sAnim_Bag_OpenPokeBallsPocket[] = {
ANIMCMD_FRAME( 0, 5),
ANIMCMD_FRAME(0x40, 0),
ANIMCMD_END
};
static const union AnimCmd sAnim_Bag_OpenItemsPocket[] = {
ANIMCMD_FRAME( 0, 5),
ANIMCMD_FRAME(0x80, 0),
ANIMCMD_END
};
static const union AnimCmd sAnim_Bag_OpenKeyItemsPocket[] = {
ANIMCMD_FRAME( 0, 5),
ANIMCMD_FRAME(0xc0, 0),
ANIMCMD_END
};
static const union AnimCmd *const sAnims_Bag[] = {
[POCKET_ITEMS - 1] = sAnim_Bag_OpenItemsPocket,
[POCKET_KEY_ITEMS - 1] = sAnim_Bag_OpenKeyItemsPocket,
[POCKET_POKE_BALLS - 1] = sAnim_Bag_OpenPokeBallsPocket,
};
static const union AffineAnimCmd sAffineAnim_BagIdle[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd sAffineAnim_BagShake[] = {
AFFINEANIMCMD_FRAME(0, 0, -2, 2),
AFFINEANIMCMD_FRAME(0, 0, 2, 4),
AFFINEANIMCMD_FRAME(0, 0, -2, 4),
AFFINEANIMCMD_FRAME(0, 0, 2, 2),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sAffineAnimTable_Bag[] = {
[AFFINEANIM_BAG_IDLE] = sAffineAnim_BagIdle,
[AFFINEANIM_BAG_SHAKE] = sAffineAnim_BagShake
};
const struct CompressedSpriteSheet gSpriteSheet_BagMale = {
.data = gBagMale_Gfx,
.size = 0x2000,
.tag = TAG_BAG
};
const struct CompressedSpriteSheet gSpriteSheet_BagFemale = {
.data = gBagFemale_Gfx,
.size = 0x2000,
.tag = TAG_BAG
};
const struct CompressedSpritePalette gSpritePalette_Bag = {
.data = gBag_Pal,
.tag = TAG_BAG
};
static const struct SpriteTemplate sSpriteTemplate_Bag = {
.tileTag = TAG_BAG,
.paletteTag = TAG_BAG,
.oam = &sOamData_Bag,
.anims = sAnims_Bag,
.images = NULL,
.affineAnims = sAffineAnimTable_Bag,
.callback = SpriteCallbackDummy
};
static const struct OamData sOamData_SwapLine = {
.affineMode = ST_OAM_AFFINE_OFF,
.shape = SPRITE_SHAPE(16x16),
.size = SPRITE_SIZE(16x16),
.priority = 1,
.paletteNum = 1
};
static const union AnimCmd sAnim_SwapLine_Start[] = {
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
};
static const union AnimCmd sAnim_SwapLine_Mid[] = {
ANIMCMD_FRAME(4, 0),
ANIMCMD_END
};
static const union AnimCmd sAnim_SwapLine_End[] = {
ANIMCMD_FRAME(0, 0, .hFlip = TRUE),
ANIMCMD_END
};
static const union AnimCmd *const sAnims_SwapLine[] = {
[ANIM_SWAP_LINE_START] = sAnim_SwapLine_Start,
[ANIM_SWAP_LINE_MID] = sAnim_SwapLine_Mid,
[ANIM_SWAP_LINE_END] = sAnim_SwapLine_End
};
const struct CompressedSpriteSheet gBagSwapSpriteSheet = {
.data = gSwapLine_Gfx,
.size = 0x100,
.tag = TAG_SWAP_LINE
};
const struct CompressedSpritePalette gBagSwapSpritePalette = {
.data = gSwapLine_Pal,
.tag = TAG_SWAP_LINE
};
static const struct SpriteTemplate sSpriteTemplate_SwapLine = {
.tileTag = TAG_SWAP_LINE,
.paletteTag = TAG_SWAP_LINE,
.oam = &sOamData_SwapLine,
.anims = sAnims_SwapLine,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
static const struct OamData sOamData_ItemIcon = {
.affineMode = ST_OAM_AFFINE_OFF,
.shape = SPRITE_SHAPE(32x32),
.size = SPRITE_SIZE(32x32),
.priority = 1,
.paletteNum = 2
};
static const union AnimCmd sAnim_ItemIcon[] = {
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
};
static const union AnimCmd *const sAnims_ItemIcon[] = {
sAnim_ItemIcon
};
const struct SpriteTemplate gItemIconSpriteTemplate = {
.tileTag = TAG_ITEM_ICON,
.paletteTag = TAG_ITEM_ICON,
.oam = &sOamData_ItemIcon,
.anims = sAnims_ItemIcon,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
void ResetItemMenuIconState(void)
{
u16 i;
for (i = 0; i < SPR_COUNT; i++)
sItemMenuIconSpriteIds[i] = SPRITE_NONE;
}
void CreateBagSprite(u8 animNum)
{
sItemMenuIconSpriteIds[SPR_BAG] = CreateSprite(&sSpriteTemplate_Bag, 40, 68, 0);
SetBagVisualPocketId(animNum);
}
void SetBagVisualPocketId(u8 animNum)
{
struct Sprite *sprite = &gSprites[sItemMenuIconSpriteIds[SPR_BAG]];
sprite->y2 = -5;
sprite->callback = SpriteCB_BagVisualSwitchingPockets;
StartSpriteAnim(sprite, animNum);
}
static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
{
if (sprite->y2 != 0)
sprite->y2++;
else
sprite->callback = SpriteCallbackDummy;
}
void ShakeBagSprite(void)
{
struct Sprite *sprite = &gSprites[sItemMenuIconSpriteIds[SPR_BAG]];
if (sprite->affineAnimEnded)
{
StartSpriteAffineAnim(sprite, AFFINEANIM_BAG_SHAKE);
sprite->callback = SpriteCB_ShakeBagSprite;
}
}
static void SpriteCB_ShakeBagSprite(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
StartSpriteAffineAnim(sprite, AFFINEANIM_BAG_IDLE);
sprite->callback = SpriteCallbackDummy;
}
}
void CreateSwapLine(void)
{
u8 i;
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_SWAP_LINE_START];
for (i = 0; i < NUM_SWAP_LINE_SPRITES; i++)
{
spriteIds[i] = CreateSprite(&sSpriteTemplate_SwapLine, i * 16 + 96, 7, 0);
switch (i)
{
case 0:
// ANIM_SWAP_LINE_START, by default
break;
case NUM_SWAP_LINE_SPRITES - 1:
StartSpriteAnim(&gSprites[spriteIds[i]], ANIM_SWAP_LINE_END);
break;
default:
StartSpriteAnim(&gSprites[spriteIds[i]], ANIM_SWAP_LINE_MID);
break;
}
gSprites[spriteIds[i]].invisible = TRUE;
}
}
void SetSwapLineInvisibility(bool8 invisible)
{
u8 i;
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_SWAP_LINE_START];
for (i = 0; i < NUM_SWAP_LINE_SPRITES; i++)
gSprites[spriteIds[i]].invisible = invisible;
}
void UpdateSwapLinePos(s16 x, u16 y)
{
u8 i;
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_SWAP_LINE_START];
for (i = 0; i < NUM_SWAP_LINE_SPRITES; i++)
{
gSprites[spriteIds[i]].x2 = x;
gSprites[spriteIds[i]].y = y + 7;
}
}
static bool8 TryAllocItemIconTilesBuffers(void)
{
gItemIconDecompressionBuffer = Alloc(0x120);
@@ -377,57 +96,6 @@ u8 AddItemIconObjectWithCustomObjectTemplate(const struct SpriteTemplate * origT
return spriteId;
}
void CreateItemMenuIcon(u16 itemId, u8 idx)
{
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_ITEM_ICON];
u8 spriteId;
if (spriteIds[idx] == SPRITE_NONE)
{
// Either TAG_ITEM_ICON or TAG_ITEM_ICON_ALT
FreeSpriteTilesByTag(TAG_ITEM_ICON + idx);
FreeSpritePaletteByTag(TAG_ITEM_ICON + idx);
spriteId = AddItemIconObject(TAG_ITEM_ICON + idx, TAG_ITEM_ICON + idx, itemId);
if (spriteId != MAX_SPRITES)
{
spriteIds[idx] = spriteId;
gSprites[spriteId].x2 = 24;
gSprites[spriteId].y2 = 140;
}
}
}
void DestroyItemMenuIcon(u8 idx)
{
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_ITEM_ICON];
if (spriteIds[idx] != SPRITE_NONE)
{
DestroySpriteAndFreeResources(&gSprites[spriteIds[idx]]);
spriteIds[idx] = SPRITE_NONE;
}
}
void CreateBerryPouchItemIcon(u16 itemId, u8 idx)
{
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_ITEM_ICON];
u8 spriteId;
if (spriteIds[idx] == SPRITE_NONE)
{
// Either TAG_ITEM_ICON or TAG_ITEM_ICON_ALT
FreeSpriteTilesByTag(TAG_ITEM_ICON + idx);
FreeSpritePaletteByTag(TAG_ITEM_ICON + idx);
spriteId = AddItemIconObject(TAG_ITEM_ICON + idx, TAG_ITEM_ICON + idx, itemId);
if (spriteId != MAX_SPRITES)
{
spriteIds[idx] = spriteId;
gSprites[spriteId].x2 = 24;
gSprites[spriteId].y2 = 147; // This value is the only difference from CreateItemMenuIcon
}
}
}
const void *GetItemIconPic(u16 itemId)
{
if (itemId == ITEM_FIELD_ARROW)

View File

@@ -10,8 +10,9 @@
#include "graphics.h"
#include "help_system.h"
#include "item.h"
#include "item_menu.h"
#include "item_icon.h"
#include "item_menu.h"
#include "item_menu_icons.h"
#include "item_use.h"
#include "link.h"
#include "list_menu.h"

343
src/item_menu_icons.c Normal file
View File

@@ -0,0 +1,343 @@
#include "global.h"
#include "sprite.h"
#include "graphics.h"
#include "item_icon.h"
#include "item_menu_icons.h"
#include "constants/item.h"
enum {
TAG_BAG = 100,
TAG_SWAP_LINE,
TAG_ITEM_ICON,
TAG_ITEM_ICON_ALT,
};
#define NUM_SWAP_LINE_SPRITES 9
// Indexes for sItemMenuIconSpriteIds
enum {
SPR_BAG,
SPR_SWAP_LINE_START,
SPR_ITEM_ICON = SPR_SWAP_LINE_START + NUM_SWAP_LINE_SPRITES,
SPR_ITEM_ICON_ALT,
SPR_COUNT
};
enum {
ANIM_SWAP_LINE_START,
ANIM_SWAP_LINE_MID,
ANIM_SWAP_LINE_END,
};
enum {
AFFINEANIM_BAG_IDLE,
AFFINEANIM_BAG_SHAKE,
};
static EWRAM_DATA u8 sItemMenuIconSpriteIds[SPR_COUNT] = {0};
static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite);
static void SpriteCB_ShakeBagSprite(struct Sprite *sprite);
static const struct OamData sOamData_Bag = {
.affineMode = ST_OAM_AFFINE_NORMAL,
.shape = SPRITE_SHAPE(64x64),
.size = SPRITE_SIZE(64x64),
.priority = 1,
.paletteNum = 0
};
static const union AnimCmd sAnim_Bag_OpenPokeBallsPocket[] = {
ANIMCMD_FRAME( 0, 5),
ANIMCMD_FRAME(0x40, 0),
ANIMCMD_END
};
static const union AnimCmd sAnim_Bag_OpenItemsPocket[] = {
ANIMCMD_FRAME( 0, 5),
ANIMCMD_FRAME(0x80, 0),
ANIMCMD_END
};
static const union AnimCmd sAnim_Bag_OpenKeyItemsPocket[] = {
ANIMCMD_FRAME( 0, 5),
ANIMCMD_FRAME(0xc0, 0),
ANIMCMD_END
};
static const union AnimCmd *const sAnims_Bag[] = {
[POCKET_ITEMS - 1] = sAnim_Bag_OpenItemsPocket,
[POCKET_KEY_ITEMS - 1] = sAnim_Bag_OpenKeyItemsPocket,
[POCKET_POKE_BALLS - 1] = sAnim_Bag_OpenPokeBallsPocket,
};
static const union AffineAnimCmd sAffineAnim_BagIdle[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd sAffineAnim_BagShake[] = {
AFFINEANIMCMD_FRAME(0, 0, -2, 2),
AFFINEANIMCMD_FRAME(0, 0, 2, 4),
AFFINEANIMCMD_FRAME(0, 0, -2, 4),
AFFINEANIMCMD_FRAME(0, 0, 2, 2),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sAffineAnimTable_Bag[] = {
[AFFINEANIM_BAG_IDLE] = sAffineAnim_BagIdle,
[AFFINEANIM_BAG_SHAKE] = sAffineAnim_BagShake
};
const struct CompressedSpriteSheet gSpriteSheet_BagMale = {
.data = gBagMale_Gfx,
.size = 0x2000,
.tag = TAG_BAG
};
const struct CompressedSpriteSheet gSpriteSheet_BagFemale = {
.data = gBagFemale_Gfx,
.size = 0x2000,
.tag = TAG_BAG
};
const struct CompressedSpritePalette gSpritePalette_Bag = {
.data = gBag_Pal,
.tag = TAG_BAG
};
static const struct SpriteTemplate sSpriteTemplate_Bag = {
.tileTag = TAG_BAG,
.paletteTag = TAG_BAG,
.oam = &sOamData_Bag,
.anims = sAnims_Bag,
.images = NULL,
.affineAnims = sAffineAnimTable_Bag,
.callback = SpriteCallbackDummy
};
static const struct OamData sOamData_SwapLine = {
.affineMode = ST_OAM_AFFINE_OFF,
.shape = SPRITE_SHAPE(16x16),
.size = SPRITE_SIZE(16x16),
.priority = 1,
.paletteNum = 1
};
static const union AnimCmd sAnim_SwapLine_Start[] = {
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
};
static const union AnimCmd sAnim_SwapLine_Mid[] = {
ANIMCMD_FRAME(4, 0),
ANIMCMD_END
};
static const union AnimCmd sAnim_SwapLine_End[] = {
ANIMCMD_FRAME(0, 0, .hFlip = TRUE),
ANIMCMD_END
};
static const union AnimCmd *const sAnims_SwapLine[] = {
[ANIM_SWAP_LINE_START] = sAnim_SwapLine_Start,
[ANIM_SWAP_LINE_MID] = sAnim_SwapLine_Mid,
[ANIM_SWAP_LINE_END] = sAnim_SwapLine_End
};
const struct CompressedSpriteSheet gBagSwapSpriteSheet = {
.data = gSwapLine_Gfx,
.size = 0x100,
.tag = TAG_SWAP_LINE
};
const struct CompressedSpritePalette gBagSwapSpritePalette = {
.data = gSwapLine_Pal,
.tag = TAG_SWAP_LINE
};
static const struct SpriteTemplate sSpriteTemplate_SwapLine = {
.tileTag = TAG_SWAP_LINE,
.paletteTag = TAG_SWAP_LINE,
.oam = &sOamData_SwapLine,
.anims = sAnims_SwapLine,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
static const struct OamData sOamData_ItemIcon = {
.affineMode = ST_OAM_AFFINE_OFF,
.shape = SPRITE_SHAPE(32x32),
.size = SPRITE_SIZE(32x32),
.priority = 1,
.paletteNum = 2
};
static const union AnimCmd sAnim_ItemIcon[] = {
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
};
static const union AnimCmd *const sAnims_ItemIcon[] = {
sAnim_ItemIcon
};
const struct SpriteTemplate gItemIconSpriteTemplate = {
.tileTag = TAG_ITEM_ICON,
.paletteTag = TAG_ITEM_ICON,
.oam = &sOamData_ItemIcon,
.anims = sAnims_ItemIcon,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
void ResetItemMenuIconState(void)
{
u16 i;
for (i = 0; i < SPR_COUNT; i++)
sItemMenuIconSpriteIds[i] = SPRITE_NONE;
}
void CreateBagSprite(u8 animNum)
{
sItemMenuIconSpriteIds[SPR_BAG] = CreateSprite(&sSpriteTemplate_Bag, 40, 68, 0);
SetBagVisualPocketId(animNum);
}
void SetBagVisualPocketId(u8 animNum)
{
struct Sprite *sprite = &gSprites[sItemMenuIconSpriteIds[SPR_BAG]];
sprite->y2 = -5;
sprite->callback = SpriteCB_BagVisualSwitchingPockets;
StartSpriteAnim(sprite, animNum);
}
static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
{
if (sprite->y2 != 0)
sprite->y2++;
else
sprite->callback = SpriteCallbackDummy;
}
void ShakeBagSprite(void)
{
struct Sprite *sprite = &gSprites[sItemMenuIconSpriteIds[SPR_BAG]];
if (sprite->affineAnimEnded)
{
StartSpriteAffineAnim(sprite, AFFINEANIM_BAG_SHAKE);
sprite->callback = SpriteCB_ShakeBagSprite;
}
}
static void SpriteCB_ShakeBagSprite(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
StartSpriteAffineAnim(sprite, AFFINEANIM_BAG_IDLE);
sprite->callback = SpriteCallbackDummy;
}
}
void CreateSwapLine(void)
{
u8 i;
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_SWAP_LINE_START];
for (i = 0; i < NUM_SWAP_LINE_SPRITES; i++)
{
spriteIds[i] = CreateSprite(&sSpriteTemplate_SwapLine, i * 16 + 96, 7, 0);
switch (i)
{
case 0:
// ANIM_SWAP_LINE_START, by default
break;
case NUM_SWAP_LINE_SPRITES - 1:
StartSpriteAnim(&gSprites[spriteIds[i]], ANIM_SWAP_LINE_END);
break;
default:
StartSpriteAnim(&gSprites[spriteIds[i]], ANIM_SWAP_LINE_MID);
break;
}
gSprites[spriteIds[i]].invisible = TRUE;
}
}
void SetSwapLineInvisibility(bool8 invisible)
{
u8 i;
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_SWAP_LINE_START];
for (i = 0; i < NUM_SWAP_LINE_SPRITES; i++)
gSprites[spriteIds[i]].invisible = invisible;
}
void UpdateSwapLinePos(s16 x, u16 y)
{
u8 i;
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_SWAP_LINE_START];
for (i = 0; i < NUM_SWAP_LINE_SPRITES; i++)
{
gSprites[spriteIds[i]].x2 = x;
gSprites[spriteIds[i]].y = y + 7;
}
}
void CreateItemMenuIcon(u16 itemId, u8 idx)
{
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_ITEM_ICON];
u8 spriteId;
if (spriteIds[idx] == SPRITE_NONE)
{
// Either TAG_ITEM_ICON or TAG_ITEM_ICON_ALT
FreeSpriteTilesByTag(TAG_ITEM_ICON + idx);
FreeSpritePaletteByTag(TAG_ITEM_ICON + idx);
spriteId = AddItemIconObject(TAG_ITEM_ICON + idx, TAG_ITEM_ICON + idx, itemId);
if (spriteId != MAX_SPRITES)
{
spriteIds[idx] = spriteId;
gSprites[spriteId].x2 = 24;
gSprites[spriteId].y2 = 140;
}
}
}
void DestroyItemMenuIcon(u8 idx)
{
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_ITEM_ICON];
if (spriteIds[idx] != SPRITE_NONE)
{
DestroySpriteAndFreeResources(&gSprites[spriteIds[idx]]);
spriteIds[idx] = SPRITE_NONE;
}
}
void CreateBerryPouchItemIcon(u16 itemId, u8 idx)
{
u8 * spriteIds = &sItemMenuIconSpriteIds[SPR_ITEM_ICON];
u8 spriteId;
if (spriteIds[idx] == SPRITE_NONE)
{
// Either TAG_ITEM_ICON or TAG_ITEM_ICON_ALT
FreeSpriteTilesByTag(TAG_ITEM_ICON + idx);
FreeSpritePaletteByTag(TAG_ITEM_ICON + idx);
spriteId = AddItemIconObject(TAG_ITEM_ICON + idx, TAG_ITEM_ICON + idx, itemId);
if (spriteId != MAX_SPRITES)
{
spriteIds[idx] = spriteId;
gSprites[spriteId].x2 = 24;
gSprites[spriteId].y2 = 147; // This value is the only difference from CreateItemMenuIcon
}
}
}

View File

@@ -7,6 +7,7 @@
#include "item.h"
#include "item_menu.h"
#include "item_icon.h"
#include "item_menu_icons.h"
#include "list_menu.h"
#include "item_pc.h"
#include "item_use.h"

View File

@@ -13,6 +13,7 @@
#include "task.h"
#include "item.h"
#include "item_menu.h"
#include "item_menu_icons.h"
#include "overworld.h"
#include "field_fadetransition.h"
#include "scanline_effect.h"