mirror of
https://github.com/pret/pokefirered.git
synced 2026-09-29 20:38:15 -05:00
item_menu_icons as seperate file from item_icon
This commit is contained in:
@@ -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
21
include/item_menu_icons.h
Normal 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
|
||||
@@ -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"
|
||||
|
||||
332
src/item_icon.c
332
src/item_icon.c
@@ -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)
|
||||
|
||||
@@ -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
343
src/item_menu_icons.c
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user