2018-03-04 18:41:07 +01:00
|
|
|
#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"
|
2018-04-25 02:41:04 +02:00
|
|
|
#include "item.h"
|
|
|
|
#include "item_use.h"
|
|
|
|
#include "constants/hold_effects.h"
|
2018-03-04 18:41:07 +01:00
|
|
|
|
|
|
|
struct CompressedTilesPal
|
|
|
|
{
|
|
|
|
const u8 *tiles;
|
|
|
|
const u8 *pal;
|
|
|
|
};
|
|
|
|
|
2018-10-07 17:45:37 +02:00
|
|
|
extern void DoHorizontalLunge(struct Sprite *sprite);
|
|
|
|
extern void DoVerticalDip(struct Sprite *sprite);
|
|
|
|
extern void SlideMonToOriginalPos(struct Sprite *sprite);
|
|
|
|
extern void SlideMonToOffset(struct Sprite *sprite);
|
2018-03-04 20:03:11 +01:00
|
|
|
extern void sub_80D5B48(struct Sprite *sprite);
|
|
|
|
|
2018-03-04 18:41:07 +01:00
|
|
|
// this file's functions
|
2018-03-04 20:03:11 +01:00
|
|
|
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");
|
2018-03-04 18:41:07 +01:00
|
|
|
|
|
|
|
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
|
|
|
|
};
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static const struct SpriteTemplate gUnknown_0857FB4C =
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
.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,
|
|
|
|
};
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static const struct SpriteSheet gUnknown_0857FBA0 =
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
gUnknown_0857F584, 0x80, 101
|
|
|
|
};
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static const struct SpritePalette gUnknown_0857FBA8 =
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
gUnknown_0857F564, 101
|
|
|
|
};
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static const struct SpriteTemplate gUnknown_0857FBB0 =
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
.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},
|
|
|
|
};
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static const struct SpriteTemplate gUnknown_0857FBEC =
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
.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
|
|
|
|
};
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static const struct SpriteTemplate gUnknown_0857FC7C =
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
.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},
|
|
|
|
};
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
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,
|
|
|
|
};
|
|
|
|
|
2018-09-12 22:58:03 +02:00
|
|
|
const struct SpriteTemplate gHorizontalLungeSpriteTemplate =
|
2018-03-04 20:03:11 +01:00
|
|
|
{
|
|
|
|
.tileTag = 0,
|
|
|
|
.paletteTag = 0,
|
|
|
|
.oam = &gDummyOamData,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-10-07 17:45:37 +02:00
|
|
|
.callback = DoHorizontalLunge,
|
2018-03-04 20:03:11 +01:00
|
|
|
};
|
|
|
|
|
2018-09-12 22:58:03 +02:00
|
|
|
const struct SpriteTemplate gVerticalDipSpriteTemplate =
|
2018-03-04 20:03:11 +01:00
|
|
|
{
|
|
|
|
.tileTag = 0,
|
|
|
|
.paletteTag = 0,
|
|
|
|
.oam = &gDummyOamData,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-10-07 17:45:37 +02:00
|
|
|
.callback = DoVerticalDip,
|
2018-03-04 20:03:11 +01:00
|
|
|
};
|
|
|
|
|
2018-09-12 22:58:03 +02:00
|
|
|
const struct SpriteTemplate gSlideMonToOriginalPosSpriteTemplate =
|
2018-03-04 20:03:11 +01:00
|
|
|
{
|
|
|
|
.tileTag = 0,
|
|
|
|
.paletteTag = 0,
|
|
|
|
.oam = &gDummyOamData,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-10-07 17:45:37 +02:00
|
|
|
.callback = SlideMonToOriginalPos,
|
2018-03-04 20:03:11 +01:00
|
|
|
};
|
|
|
|
|
2018-09-12 22:58:03 +02:00
|
|
|
const struct SpriteTemplate gSlideMonToOffsetSpriteTemplate =
|
2018-03-04 20:03:11 +01:00
|
|
|
{
|
|
|
|
.tileTag = 0,
|
|
|
|
.paletteTag = 0,
|
|
|
|
.oam = &gDummyOamData,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-10-07 17:45:37 +02:00
|
|
|
.callback = SlideMonToOffset,
|
2018-03-04 20:03:11 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_0857FE88 =
|
|
|
|
{
|
|
|
|
.tileTag = 0,
|
|
|
|
.paletteTag = 0,
|
|
|
|
.oam = &gDummyOamData,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_80D5B48,
|
|
|
|
};
|
2018-03-04 18:41:07 +01:00
|
|
|
|
2018-04-25 02:41:04 +02:00
|
|
|
#include "data/text/item_descriptions.h"
|
2018-04-25 03:33:55 +02:00
|
|
|
#include "data/items.h"
|
2018-04-25 02:41:04 +02:00
|
|
|
|
2018-03-04 18:41:07 +01:00
|
|
|
// 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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static void SpriteCB_ShakeBagVisual(struct Sprite *sprite)
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
if (sprite->affineAnimEnded)
|
|
|
|
{
|
|
|
|
StartSpriteAffineAnim(sprite, 0);
|
|
|
|
sprite->callback = SpriteCallbackDummy;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
void AddSwitchPocketRotatingBallSprite(s16 rotationDirection)
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
u8 *spriteId = &gUnknown_0203CE54->unk804[1];
|
|
|
|
LoadSpriteSheet(&gUnknown_0857FBA0);
|
|
|
|
LoadSpritePalette(&gUnknown_0857FBA8);
|
|
|
|
*spriteId = CreateSprite(&gUnknown_0857FBB0, 16, 16, 0);
|
|
|
|
gSprites[*spriteId].data[0] = rotationDirection;
|
|
|
|
}
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static void update_switch_pocket_rotating_ball_coords(struct Sprite *sprite)
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
sprite->centerToCornerVecX = sprite->data[1] - ((sprite->data[3] + 1) & 1);
|
|
|
|
sprite->centerToCornerVecY = sprite->data[1] - ((sprite->data[3] + 1) & 1);
|
|
|
|
}
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite)
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite)
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static void sub_80D5018(void *mem0, void *mem1)
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-04 20:03:11 +01:00
|
|
|
static void sub_80D5070(u8 berryId)
|
2018-03-04 18:41:07 +01:00
|
|
|
{
|
|
|
|
struct CompressedSpritePalette pal;
|
|
|
|
|
2018-03-09 22:22:00 +01:00
|
|
|
if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1 && IsEnigmaBerryValid())
|
|
|
|
{
|
|
|
|
// unknown empty if statement
|
|
|
|
}
|
2018-03-04 18:41:07 +01:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|