mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-11-18 20:47:40 +01:00
4890 lines
126 KiB
C
4890 lines
126 KiB
C
|
#include "global.h"
|
||
|
#include "alloc.h"
|
||
|
#include "battle.h"
|
||
|
#include "battle_anim.h"
|
||
|
#include "bg.h"
|
||
|
#include "contest.h"
|
||
|
#include "data2.h"
|
||
|
#include "decompress.h"
|
||
|
#include "dma3.h"
|
||
|
#include "gpu_regs.h"
|
||
|
#include "graphics.h"
|
||
|
#include "palette.h"
|
||
|
#include "pokemon_icon.h"
|
||
|
#include "random.h"
|
||
|
#include "scanline_effect.h"
|
||
|
#include "sound.h"
|
||
|
#include "sprite.h"
|
||
|
#include "task.h"
|
||
|
#include "trig.h"
|
||
|
#include "util.h"
|
||
|
#include "constants/battle_anim.h"
|
||
|
#include "constants/rgb.h"
|
||
|
#include "constants/songs.h"
|
||
|
#include "constants/species.h"
|
||
|
|
||
|
extern u8 sub_807521C(s16 x, s16 y, u8 a3);
|
||
|
extern void sub_810E2C8(struct Sprite *);
|
||
|
|
||
|
extern const struct SpriteTemplate gUnknown_08593114;
|
||
|
extern const union AffineAnimCmd *const gUnknown_082FF6C0[];
|
||
|
extern const union AffineAnimCmd *const gUnknown_082FF694[];
|
||
|
|
||
|
void sub_815A0D4(struct Sprite *);
|
||
|
void sub_815A1B0(struct Sprite *);
|
||
|
void sub_815A254(struct Sprite *);
|
||
|
void sub_815A2F0(struct Sprite *);
|
||
|
void sub_815A6C4(struct Sprite *);
|
||
|
void sub_815A7B0(struct Sprite *);
|
||
|
void sub_815A7EC(struct Sprite *);
|
||
|
void sub_815A8AC(struct Sprite *);
|
||
|
void sub_815A934(struct Sprite *);
|
||
|
void sub_815AAA4(struct Sprite *);
|
||
|
void sub_815ABD0(struct Sprite *);
|
||
|
void sub_815ACD0(struct Sprite *);
|
||
|
void sub_815B27C(struct Sprite *);
|
||
|
void sub_815B394(struct Sprite *);
|
||
|
void sub_815B49C(struct Sprite *);
|
||
|
void sub_815B570(struct Sprite *);
|
||
|
void sub_815B70C(struct Sprite *);
|
||
|
void sub_815BE04(struct Sprite *);
|
||
|
void sub_815C400(struct Sprite *);
|
||
|
void sub_815C6B0(struct Sprite *);
|
||
|
void sub_815C95C(struct Sprite *);
|
||
|
void sub_815CB88(struct Sprite *);
|
||
|
void sub_815CC94(struct Sprite *);
|
||
|
void sub_815CDB4(struct Sprite *);
|
||
|
void sub_815D7B4(struct Sprite *);
|
||
|
void sub_815D870(struct Sprite *);
|
||
|
void sub_815DEBC(struct Sprite *);
|
||
|
void sub_815E01C(struct Sprite *);
|
||
|
void sub_815E404(struct Sprite *);
|
||
|
void sub_815E444(struct Sprite *);
|
||
|
void sub_815E6D8(struct Sprite *);
|
||
|
void sub_815E954(struct Sprite *);
|
||
|
void sub_815EA14(struct Sprite *);
|
||
|
void sub_815EE84(struct Sprite *);
|
||
|
void sub_815F18C(struct Sprite *);
|
||
|
void sub_815F48C(struct Sprite *);
|
||
|
void sub_815FE80(struct Sprite *);
|
||
|
void sub_81061C4(struct Sprite *);
|
||
|
void sub_8160338(struct Sprite *);
|
||
|
void sub_81603A8(struct Sprite *);
|
||
|
static void sub_815A114(struct Sprite *);
|
||
|
static void sub_815A1F4(struct Sprite *);
|
||
|
static void sub_815A234(struct Sprite *);
|
||
|
static void sub_815A31C(struct Sprite *);
|
||
|
static void sub_815A3AC(struct Sprite *);
|
||
|
static void sub_815A3F0(struct Sprite *);
|
||
|
static void sub_815A49C(struct Sprite *);
|
||
|
static void sub_815A52C(u8);
|
||
|
static void sub_815A5F0(u8);
|
||
|
static void sub_815A73C(struct Sprite *);
|
||
|
static void sub_815A76C(struct Sprite *);
|
||
|
static void sub_815A9A0(struct Sprite *);
|
||
|
static void sub_815AA6C(struct Sprite *);
|
||
|
static void sub_815AB5C(struct Sprite *);
|
||
|
static void sub_815AD4C(struct Sprite *);
|
||
|
static void sub_815AED8(u8);
|
||
|
static void sub_815B054(u8);
|
||
|
static void sub_815B23C(struct Sprite *);
|
||
|
static void sub_815B4D4(struct Sprite *);
|
||
|
static void sub_815B5D0(struct Sprite *);
|
||
|
static void sub_815BF44(struct Sprite *);
|
||
|
static void sub_815BFF4(struct Sprite *);
|
||
|
static void sub_815C050(struct Sprite *);
|
||
|
static void sub_815C548(u8);
|
||
|
static void sub_815C700(struct Sprite *);
|
||
|
static void sub_815C7C4(u8);
|
||
|
static void sub_815CC34(struct Sprite *);
|
||
|
static void sub_815CD0C(struct Sprite *);
|
||
|
static void sub_815CDFC(struct Sprite *);
|
||
|
static void sub_815D1BC(u8);
|
||
|
static void sub_815D398(u8);
|
||
|
static void sub_815D694(u8);
|
||
|
static void sub_815D804(struct Sprite *);
|
||
|
static void sub_815DD48(u8);
|
||
|
static void sub_815DDE0(u8, bool8);
|
||
|
static void sub_815DF64(u8);
|
||
|
static void sub_815E0DC(struct Sprite *);
|
||
|
static void sub_815E20C(u8);
|
||
|
static void sub_815E34C(s16, s16, s16, s16, u8, u8, s16 *, s16 *);
|
||
|
static void sub_815E5CC(u8);
|
||
|
static void sub_815E784(struct Sprite *);
|
||
|
static void sub_815E898(u8);
|
||
|
static void sub_815E9BC(struct Sprite *);
|
||
|
static void sub_815EA60(struct Sprite *);
|
||
|
static void sub_815ECE4(u8);
|
||
|
static void sub_815EF08(struct Sprite *);
|
||
|
static void sub_815F330(u8);
|
||
|
static void sub_815F4F0(struct Sprite *);
|
||
|
static void sub_815F79C(u8);
|
||
|
static void sub_815F7C4(struct Sprite *);
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE004[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 4),
|
||
|
ANIMCMD_FRAME(16, 4),
|
||
|
ANIMCMD_FRAME(32, 4),
|
||
|
ANIMCMD_FRAME(48, 4),
|
||
|
ANIMCMD_FRAME(64, 4),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE01C[] =
|
||
|
{
|
||
|
gUnknown_085CE004,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE020 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_SCRATCH,
|
||
|
.paletteTag = ANIM_TAG_SCRATCH,
|
||
|
.oam = &gUnknown_08524A34,
|
||
|
.anims = gUnknown_085CE01C,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_80A77C8,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE038 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_BLACK_SMOKE,
|
||
|
.paletteTag = ANIM_TAG_BLACK_SMOKE,
|
||
|
.oam = &gUnknown_08524934,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815A0D4,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE050 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_BLACK_BALL,
|
||
|
.paletteTag = ANIM_TAG_BLACK_BALL,
|
||
|
.oam = &gUnknown_08524904,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_80A78AC,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE068[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 40),
|
||
|
ANIMCMD_FRAME(16, 8),
|
||
|
ANIMCMD_FRAME(32, 40),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE078[] =
|
||
|
{
|
||
|
gUnknown_085CE068,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE07C =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_OPENING_EYE,
|
||
|
.paletteTag = ANIM_TAG_OPENING_EYE,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gUnknown_085CE078,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_80A77C8,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE094 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_ROUND_WHITE_HALO,
|
||
|
.paletteTag = ANIM_TAG_ROUND_WHITE_HALO,
|
||
|
.oam = &gUnknown_08524A3C,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815A1B0,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE0AC =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_TEAL_ALERT,
|
||
|
.paletteTag = ANIM_TAG_TEAL_ALERT,
|
||
|
.oam = &gUnknown_08524974,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815A254,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE0C4[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(-0x20, 0x18, 0, 5),
|
||
|
AFFINEANIMCMD_FRAME(0x18, -0x20, 0, 5),
|
||
|
AFFINEANIMCMD_JUMP(1),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE0E4[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x30, 0x30, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 6),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE0FC[] =
|
||
|
{
|
||
|
gUnknown_085CE0C4,
|
||
|
gUnknown_085CE0E4,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE104 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_EYE,
|
||
|
.paletteTag = ANIM_TAG_EYE,
|
||
|
.oam = &gUnknown_08524AFC,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE0FC,
|
||
|
.callback = sub_815A2F0,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE11C =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_SPIKES,
|
||
|
.paletteTag = ANIM_TAG_SPIKES,
|
||
|
.oam = &gUnknown_0852490C,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815A6C4,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE134[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 3),
|
||
|
ANIMCMD_FRAME(16, 3),
|
||
|
ANIMCMD_FRAME(32, 3),
|
||
|
ANIMCMD_FRAME(48, 3),
|
||
|
ANIMCMD_FRAME(64, 3),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE14C[] =
|
||
|
{
|
||
|
gUnknown_085CE134,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE150 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_LEER,
|
||
|
.paletteTag = ANIM_TAG_LEER,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gUnknown_085CE14C,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815A7B0,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE168[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 3),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE170[] =
|
||
|
{
|
||
|
gUnknown_085CE168,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE174[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(-7, -7, -3, 16),
|
||
|
AFFINEANIMCMD_FRAME(7, 7, 3, 16),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE18C[] =
|
||
|
{
|
||
|
gUnknown_085CE174,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE190 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_LETTER_Z,
|
||
|
.paletteTag = ANIM_TAG_LETTER_Z,
|
||
|
.oam = &gUnknown_08524974,
|
||
|
.anims = gUnknown_085CE170,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE18C,
|
||
|
.callback = sub_815A7EC,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE1A8[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 8),
|
||
|
ANIMCMD_FRAME(16, 16),
|
||
|
ANIMCMD_FRAME(32, 4),
|
||
|
ANIMCMD_FRAME(48, 4),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE1BC[] =
|
||
|
{
|
||
|
gUnknown_085CE1A8,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE1C0[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(-0x20, -0x20, 0, 8),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE1D8[] =
|
||
|
{
|
||
|
gUnknown_085CE1C0,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE1DC =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_FANG_ATTACK,
|
||
|
.paletteTag = ANIM_TAG_FANG_ATTACK,
|
||
|
.oam = &gUnknown_085249D4,
|
||
|
.anims = gUnknown_085CE1BC,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE1D8,
|
||
|
.callback = sub_815A8AC,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE1F4[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x0, 0x180, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(0x10, 0x0, 0, 20),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE20C[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x140, 0x180, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(-0x10, 0x0, 0, 19),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE224[] =
|
||
|
{
|
||
|
gUnknown_085CE1F4,
|
||
|
gUnknown_085CE20C,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE22C =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_SPOTLIGHT,
|
||
|
.paletteTag = ANIM_TAG_SPOTLIGHT,
|
||
|
.oam = &gUnknown_085249DC,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE224,
|
||
|
.callback = sub_815A934,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE244 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_TAG_HAND,
|
||
|
.paletteTag = ANIM_TAG_TAG_HAND,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815AAA4,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE25C =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_TAG_HAND,
|
||
|
.paletteTag = ANIM_TAG_TAG_HAND,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815ABD0,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE274[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 2),
|
||
|
ANIMCMD_FRAME(8, 2),
|
||
|
ANIMCMD_FRAME(16, 2),
|
||
|
ANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE284[] =
|
||
|
{
|
||
|
gUnknown_085CE274,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE288 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_RAPID_SPIN,
|
||
|
.paletteTag = ANIM_TAG_RAPID_SPIN,
|
||
|
.oam = &gUnknown_08524934,
|
||
|
.anims = gUnknown_085CE284,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815ACD0,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE2A0[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
|
||
|
AFFINEANIMCMD_FRAME(20, -20, 0, 4),
|
||
|
AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE2C0[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 8),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE2C8[] =
|
||
|
{
|
||
|
gUnknown_085CE2C0,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE2CC[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 5, 40),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 10, 10),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 15, 10),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 20, 40),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE2F4[] =
|
||
|
{
|
||
|
gUnknown_085CE2CC,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE2F8 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
|
||
|
.paletteTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
|
||
|
.oam = &gUnknown_085249DC,
|
||
|
.anims = gUnknown_085CE2C8,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE2F4,
|
||
|
.callback = sub_815B27C,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE310[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 3),
|
||
|
ANIMCMD_FRAME(16, 3),
|
||
|
ANIMCMD_FRAME(32, 3),
|
||
|
ANIMCMD_FRAME(48, 3),
|
||
|
ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
|
||
|
ANIMCMD_FRAME(16, 3, .hFlip = TRUE),
|
||
|
ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
|
||
|
ANIMCMD_LOOP(1),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE334[] =
|
||
|
{
|
||
|
gUnknown_085CE310,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE338 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_ECLIPSING_ORB,
|
||
|
.paletteTag = ANIM_TAG_ECLIPSING_ORB,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gUnknown_085CE334,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_80A77C8,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE350[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(-12, 20, 0, 8),
|
||
|
AFFINEANIMCMD_FRAME(12, -20, 0, 8),
|
||
|
AFFINEANIMCMD_LOOP(2),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE370 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_POKEBALL,
|
||
|
.paletteTag = ANIM_TAG_POKEBALL,
|
||
|
.oam = &gUnknown_0852490C,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815B394,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE388 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_GOLD_STARS,
|
||
|
.paletteTag = ANIM_TAG_GOLD_STARS,
|
||
|
.oam = &gUnknown_0852490C,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815B49C,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE3A0 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_GOLD_STARS,
|
||
|
.paletteTag = ANIM_TAG_GOLD_STARS,
|
||
|
.oam = &gUnknown_08524904,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815B570,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE3B8[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(8, -8, 0, 12),
|
||
|
AFFINEANIMCMD_FRAME(-16, 16, 0, 12),
|
||
|
AFFINEANIMCMD_FRAME(8, -8, 0, 12),
|
||
|
AFFINEANIMCMD_LOOP(1),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE3E0[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0, 6, 0, 20),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 0, 20),
|
||
|
AFFINEANIMCMD_FRAME(0, -18, 0, 6),
|
||
|
AFFINEANIMCMD_FRAME(-18, -18, 0, 3),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 0, 15),
|
||
|
AFFINEANIMCMD_FRAME(4, 4, 0, 13),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE418 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_BLUE_ORB,
|
||
|
.paletteTag = ANIM_TAG_BLUE_ORB,
|
||
|
.oam = &gUnknown_08524904,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815B70C,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE430[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0, 6, 0, 20),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 0, 20),
|
||
|
AFFINEANIMCMD_FRAME(7, -30, 0, 6),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 0, 20),
|
||
|
AFFINEANIMCMD_FRAME(-2, 3, 0, 20),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const s8 gUnknown_085CE460[] =
|
||
|
{
|
||
|
0xE8,
|
||
|
0x18,
|
||
|
0xFC,
|
||
|
0x00,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE464[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 6),
|
||
|
ANIMCMD_FRAME(4, 6),
|
||
|
ANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE470[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(8, 6),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE478[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(12, 6),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE480[] =
|
||
|
{
|
||
|
gUnknown_085CE464,
|
||
|
gUnknown_085CE470,
|
||
|
gUnknown_085CE478,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE48C =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_GREEN_STAR,
|
||
|
.paletteTag = ANIM_TAG_GREEN_STAR,
|
||
|
.oam = &gUnknown_0852490C,
|
||
|
.anims = gUnknown_085CE480,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815BE04,
|
||
|
};
|
||
|
|
||
|
const s8 gUnknown_085CE4A4[] =
|
||
|
{
|
||
|
0x78,
|
||
|
0x50,
|
||
|
0x28,
|
||
|
0x00,
|
||
|
};
|
||
|
|
||
|
const u8 gUnknown_085CE4A8[] =
|
||
|
{
|
||
|
0,
|
||
|
0,
|
||
|
0,
|
||
|
0,
|
||
|
50,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE4B0[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0, -15, 0, 7),
|
||
|
AFFINEANIMCMD_FRAME(0, 15, 0, 7),
|
||
|
AFFINEANIMCMD_LOOP(2),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE4D0 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_ANGER,
|
||
|
.paletteTag = ANIM_TAG_ANGER,
|
||
|
.oam = &gUnknown_0852490C,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815C400,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE4E8[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 8),
|
||
|
ANIMCMD_FRAME(1, 8),
|
||
|
ANIMCMD_FRAME(2, 8),
|
||
|
ANIMCMD_FRAME(3, 8),
|
||
|
ANIMCMD_FRAME(3, 8, .vFlip = TRUE),
|
||
|
ANIMCMD_FRAME(2, 8, .vFlip = TRUE),
|
||
|
ANIMCMD_FRAME(0, 8, .vFlip = TRUE),
|
||
|
ANIMCMD_FRAME(1, 8, .vFlip = TRUE),
|
||
|
ANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE50C[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
|
||
|
ANIMCMD_FRAME(1, 8, .hFlip = TRUE),
|
||
|
ANIMCMD_FRAME(2, 8, .hFlip = TRUE),
|
||
|
ANIMCMD_FRAME(3, 8, .hFlip = TRUE),
|
||
|
ANIMCMD_FRAME(3, 8, .vFlip = TRUE, .hFlip = TRUE),
|
||
|
ANIMCMD_FRAME(2, 8, .vFlip = TRUE, .hFlip = TRUE),
|
||
|
ANIMCMD_FRAME(0, 8, .vFlip = TRUE, .hFlip = TRUE),
|
||
|
ANIMCMD_FRAME(1, 8, .vFlip = TRUE, .hFlip = TRUE),
|
||
|
ANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE530[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 8),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE538[] =
|
||
|
{
|
||
|
gUnknown_085CE4E8,
|
||
|
gUnknown_085CE50C,
|
||
|
gUnknown_085CE530,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE544 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_PINK_PETAL,
|
||
|
.paletteTag = ANIM_TAG_PINK_PETAL,
|
||
|
.oam = &gUnknown_08524904,
|
||
|
.anims = gUnknown_085CE538,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815C6B0,
|
||
|
};
|
||
|
|
||
|
const u16 gUnknown_085CE55C[] = INCBIN_U16("graphics/unknown/unknown_85CE55C.gbapal");
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE57C[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 5),
|
||
|
ANIMCMD_FRAME(4, 9),
|
||
|
ANIMCMD_FRAME(8, 5),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE58C[] =
|
||
|
{
|
||
|
gUnknown_085CE57C,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE590 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_PAIN_SPLIT,
|
||
|
.paletteTag = ANIM_TAG_PAIN_SPLIT,
|
||
|
.oam = &gUnknown_0852490C,
|
||
|
.anims = gUnknown_085CE58C,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815C95C,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE5A8 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_CONFETTI,
|
||
|
.paletteTag = ANIM_TAG_CONFETTI,
|
||
|
.oam = &gUnknown_08524904,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815CB88,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE5C0 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_SPOTLIGHT,
|
||
|
.paletteTag = ANIM_TAG_SPOTLIGHT,
|
||
|
.oam = &gUnknown_085249DC,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE224,
|
||
|
.callback = sub_815CC94,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gBattleAnimSpriteTemplate_85CE5D8 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_BLUE_ORB,
|
||
|
.paletteTag = ANIM_TAG_BLUE_ORB,
|
||
|
.oam = &gUnknown_08524904,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815CDB4,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE5F0[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(16, 0, 0, 4),
|
||
|
AFFINEANIMCMD_FRAME(0, -3, 0, 16),
|
||
|
AFFINEANIMCMD_FRAME(4, 0, 0, 4),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 0, 24),
|
||
|
AFFINEANIMCMD_FRAME(-5, 3, 0, 16),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE620[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
|
||
|
AFFINEANIMCMD_FRAME(8, 8, 0, 8),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE640[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(8, 8, 0, 8),
|
||
|
AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE660[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(8, 8, 0, 8),
|
||
|
AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE680[] =
|
||
|
{
|
||
|
gUnknown_085CE620,
|
||
|
gUnknown_085CE640,
|
||
|
gUnknown_085CE660,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE68C =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_PINK_CLOUD,
|
||
|
.paletteTag = ANIM_TAG_PINK_CLOUD,
|
||
|
.oam = &gUnknown_08524974,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE680,
|
||
|
.callback = sub_815D7B4,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE6A4[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
|
||
|
AFFINEANIMCMD_FRAME(4, 6, 0, 16),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE6C4[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(4, 6, 0, 16),
|
||
|
AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE6E4[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(4, 6, 0, 16),
|
||
|
AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE704[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(8, 10, 0, 30),
|
||
|
AFFINEANIMCMD_FRAME(-8, -10, 0, 16),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE724[] =
|
||
|
{
|
||
|
gUnknown_085CE6A4,
|
||
|
gUnknown_085CE6C4,
|
||
|
gUnknown_085CE6E4,
|
||
|
gUnknown_085CE704,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE734 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_PINK_CLOUD,
|
||
|
.paletteTag = ANIM_TAG_PINK_CLOUD,
|
||
|
.oam = &gUnknown_085249D4,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE724,
|
||
|
.callback = sub_815D870,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE74C[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(-16, 16, 0, 6),
|
||
|
AFFINEANIMCMD_FRAME(16, -16, 0, 12),
|
||
|
AFFINEANIMCMD_FRAME(-16, 16, 0, 6),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE76C =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_SWEAT_DROP,
|
||
|
.paletteTag = ANIM_TAG_SWEAT_DROP,
|
||
|
.oam = &gUnknown_08524904,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815DEBC,
|
||
|
};
|
||
|
|
||
|
const u16 gUnknown_085CE784[] = INCBIN_U16("graphics/battle_anims/sprites/effect.gbapal");
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE7B4[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 3),
|
||
|
ANIMCMD_FRAME(16, 3),
|
||
|
ANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE7C0[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(32, 3),
|
||
|
ANIMCMD_FRAME(48, 3),
|
||
|
ANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE7CC[] =
|
||
|
{
|
||
|
gUnknown_085CE7B4,
|
||
|
gUnknown_085CE7C0,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE7D4 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_NOISE_LINE,
|
||
|
.paletteTag = ANIM_TAG_NOISE_LINE,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gUnknown_085CE7CC,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815E01C,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE7EC =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_SMALL_RED_EYE,
|
||
|
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
|
||
|
.oam = &gUnknown_08524904,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815E404,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE804 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_PAW_PRINT,
|
||
|
.paletteTag = ANIM_TAG_PAW_PRINT,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815E444,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE81C[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0, 0, -4, 24),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE82C[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 4, 24),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE844[] =
|
||
|
{
|
||
|
gUnknown_085CE81C,
|
||
|
gUnknown_085CE82C,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE84C =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_RED_BALL,
|
||
|
.paletteTag = ANIM_TAG_RED_BALL,
|
||
|
.oam = &gUnknown_08524974,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE844,
|
||
|
.callback = SpriteCallbackDummy,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE864 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_TAG_HAND,
|
||
|
.paletteTag = ANIM_TAG_TAG_HAND,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815E6D8,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE87C[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0, -16, 0, 6),
|
||
|
AFFINEANIMCMD_FRAME(0, 16, 0, 6),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE894 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_SMELLINGSALT_EFFECT,
|
||
|
.paletteTag = ANIM_TAG_SMELLINGSALT_EFFECT,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815E954,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE8AC =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_TAG_HAND,
|
||
|
.paletteTag = ANIM_TAG_TAG_HAND,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815EA14,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE8C4 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_MAGNIFYING_GLASS,
|
||
|
.paletteTag = ANIM_TAG_MAGNIFYING_GLASS,
|
||
|
.oam = &gUnknown_08524A34,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815EE84,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE8DC =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_GOLD_STARS,
|
||
|
.paletteTag = ANIM_TAG_GOLD_STARS,
|
||
|
.oam = &gUnknown_0852490C,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815F18C,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE8F4 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_GOLD_STARS,
|
||
|
.paletteTag = ANIM_TAG_GOLD_STARS,
|
||
|
.oam = &gUnknown_0852490C,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_81061C4,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE90C =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_X_SIGN,
|
||
|
.paletteTag = ANIM_TAG_X_SIGN,
|
||
|
.oam = &gUnknown_0852491C,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815F48C,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE924 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_ITEM_BAG,
|
||
|
.paletteTag = ANIM_TAG_ITEM_BAG,
|
||
|
.oam = &gUnknown_08524914,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||
|
.callback = sub_815FE80,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd gUnknown_085CE93C[] =
|
||
|
{
|
||
|
ANIMCMD_FRAME(0, 4),
|
||
|
ANIMCMD_FRAME(64, 4),
|
||
|
ANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AnimCmd *const gUnknown_085CE948[] =
|
||
|
{
|
||
|
gUnknown_085CE93C,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE94C[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, -4, 8),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE964[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 4, 8),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE97C[] =
|
||
|
{
|
||
|
gUnknown_085CE94C,
|
||
|
gUnknown_085CE964,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE984 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_SLAM_HIT_2,
|
||
|
.paletteTag = ANIM_TAG_SLAM_HIT_2,
|
||
|
.oam = &gUnknown_0852497C,
|
||
|
.anims = gUnknown_085CE948,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE97C,
|
||
|
.callback = sub_8160338,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE99C[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0, 0, -4, 64),
|
||
|
AFFINEANIMCMD_JUMP(0),
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd *const gUnknown_085CE9AC[] =
|
||
|
{
|
||
|
gUnknown_085CE99C,
|
||
|
};
|
||
|
|
||
|
const struct SpriteTemplate gUnknown_085CE9B0 =
|
||
|
{
|
||
|
.tileTag = ANIM_TAG_RECYCLE,
|
||
|
.paletteTag = ANIM_TAG_RECYCLE,
|
||
|
.oam = &gUnknown_08524A9C,
|
||
|
.anims = gDummySpriteAnimTable,
|
||
|
.images = NULL,
|
||
|
.affineAnims = gUnknown_085CE9AC,
|
||
|
.callback = sub_81603A8,
|
||
|
};
|
||
|
|
||
|
const union AffineAnimCmd gUnknown_085CE9C8[] =
|
||
|
{
|
||
|
AFFINEANIMCMD_FRAME(0, 16, 0, 4),
|
||
|
AFFINEANIMCMD_FRAME(-2, 0, 0, 8),
|
||
|
AFFINEANIMCMD_FRAME(0, 4, 0, 4),
|
||
|
AFFINEANIMCMD_FRAME(0, 0, 0, 24),
|
||
|
AFFINEANIMCMD_FRAME(1, -5, 0, 16),
|
||
|
AFFINEANIMCMD_END,
|
||
|
};
|
||
|
|
||
|
void sub_815A0D4(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->pos1.x += gBattleAnimArgs[0];
|
||
|
sprite->pos1.y += gBattleAnimArgs[1];
|
||
|
|
||
|
if (!gBattleAnimArgs[3])
|
||
|
sprite->data[0] = gBattleAnimArgs[2];
|
||
|
else
|
||
|
sprite->data[0] = -gBattleAnimArgs[2];
|
||
|
|
||
|
sprite->data[1] = gBattleAnimArgs[4];
|
||
|
sprite->callback = sub_815A114;
|
||
|
}
|
||
|
|
||
|
static void sub_815A114(struct Sprite *sprite)
|
||
|
{
|
||
|
if (sprite->data[1] > 0)
|
||
|
{
|
||
|
sprite->pos2.x = sprite->data[2] >> 8;
|
||
|
sprite->data[2] += sprite->data[0];
|
||
|
sprite->invisible ^= 1;
|
||
|
sprite->data[1]--;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815A160(u8 taskId)
|
||
|
{
|
||
|
sub_807521C(
|
||
|
GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 8,
|
||
|
GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 8,
|
||
|
0);
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
|
||
|
void sub_815A1B0(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->data[0] = 90;
|
||
|
sprite->callback = WaitAnimForDuration;
|
||
|
sprite->data[1] = 7;
|
||
|
StoreSpriteCallbackInData6(sprite, sub_815A1F4);
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
|
||
|
}
|
||
|
|
||
|
static void sub_815A1F4(struct Sprite *sprite)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
|
||
|
if (--sprite->data[1] < 0)
|
||
|
{
|
||
|
sprite->invisible = 1;
|
||
|
sprite->callback = sub_815A234;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815A234(struct Sprite *sprite)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815A254(struct Sprite *sprite)
|
||
|
{
|
||
|
u16 rotation;
|
||
|
u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||
|
u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||
|
|
||
|
sub_80A6980(sprite, TRUE);
|
||
|
|
||
|
rotation = ArcTan2Neg(sprite->pos1.x - x, sprite->pos1.y - y);
|
||
|
rotation += 0x6000;
|
||
|
if (IsContest())
|
||
|
rotation += 0x4000;
|
||
|
|
||
|
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
|
||
|
|
||
|
sprite->data[0] = gBattleAnimArgs[2];
|
||
|
sprite->data[2] = x;
|
||
|
sprite->data[4] = y;
|
||
|
sprite->callback = StartAnimLinearTranslation;
|
||
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||
|
}
|
||
|
|
||
|
void sub_815A2F0(struct Sprite *sprite)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||
|
sprite->data[0] = 4;
|
||
|
sprite->callback = sub_815A31C;
|
||
|
}
|
||
|
|
||
|
static void sub_815A31C(struct Sprite *sprite)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
|
||
|
|
||
|
if (sprite->data[1])
|
||
|
sprite->data[0]--;
|
||
|
else
|
||
|
sprite->data[0]++;
|
||
|
|
||
|
if (sprite->data[0] == 15 || sprite->data[0] == 4)
|
||
|
sprite->data[1] ^= 1;
|
||
|
|
||
|
if (sprite->data[2]++ > 70)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||
|
StartSpriteAffineAnim(sprite, 1);
|
||
|
sprite->data[2] = 0;
|
||
|
sprite->invisible = 1;
|
||
|
sprite->affineAnimPaused = 1;
|
||
|
sprite->callback = sub_815A3AC;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815A3AC(struct Sprite *sprite)
|
||
|
{
|
||
|
if (sprite->data[2]++ > 9)
|
||
|
{
|
||
|
sprite->invisible = 0;
|
||
|
sprite->affineAnimPaused = 0;
|
||
|
if (sprite->affineAnimEnded)
|
||
|
sprite->callback = sub_815A3F0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815A3F0(struct Sprite *sprite)
|
||
|
{
|
||
|
switch (sprite->data[3])
|
||
|
{
|
||
|
case 0:
|
||
|
case 1:
|
||
|
sprite->pos2.x = 1;
|
||
|
sprite->pos2.y = 0;
|
||
|
break;
|
||
|
case 2:
|
||
|
case 3:
|
||
|
sprite->pos2.x = -1;
|
||
|
sprite->pos2.y = 0;
|
||
|
break;
|
||
|
case 4:
|
||
|
case 5:
|
||
|
sprite->pos2.x = 0;
|
||
|
sprite->pos2.y = 1;
|
||
|
break;
|
||
|
case 6:
|
||
|
default:
|
||
|
sprite->pos2.x = 0;
|
||
|
sprite->pos2.y = -1;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (++sprite->data[3] > 7)
|
||
|
sprite->data[3] = 0;
|
||
|
|
||
|
if (sprite->data[4]++ > 15)
|
||
|
{
|
||
|
sprite->data[0] = 16;
|
||
|
sprite->data[1] = 0;
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 0));
|
||
|
sprite->callback = sub_815A49C;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815A49C(struct Sprite *sprite)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
|
||
|
|
||
|
if (sprite->data[1]++ > 1)
|
||
|
{
|
||
|
sprite->data[0]--;
|
||
|
sprite->data[1] = 0;
|
||
|
}
|
||
|
|
||
|
if (sprite->data[0] == 0)
|
||
|
sprite->invisible = 1;
|
||
|
|
||
|
if (sprite->data[0] < 0)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815A504(u8 taskId)
|
||
|
{
|
||
|
gTasks[taskId].func = sub_815A52C;
|
||
|
gAnimVisualTaskCount--;
|
||
|
}
|
||
|
|
||
|
static void sub_815A52C(u8 taskId)
|
||
|
{
|
||
|
int i;
|
||
|
u16 lastColor;
|
||
|
u8 paletteIndex = sub_80A6D94();
|
||
|
|
||
|
if (++gTasks[taskId].data[5] == 4)
|
||
|
{
|
||
|
lastColor = gPlttBufferFaded[paletteIndex * 16 + 11];
|
||
|
for (i = 10; i > 0; i--)
|
||
|
gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i];
|
||
|
|
||
|
gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor;
|
||
|
gTasks[taskId].data[5] = 0;
|
||
|
}
|
||
|
|
||
|
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
|
||
|
DestroyTask(taskId);
|
||
|
}
|
||
|
|
||
|
void sub_815A5C8(u8 taskId)
|
||
|
{
|
||
|
gTasks[taskId].func = sub_815A5F0;
|
||
|
gAnimVisualTaskCount--;
|
||
|
}
|
||
|
|
||
|
static void sub_815A5F0(u8 taskId)
|
||
|
{
|
||
|
int i;
|
||
|
u16 lastColor;
|
||
|
u8 paletteIndex = sub_80A6D94();
|
||
|
|
||
|
if (++gTasks[taskId].data[5] == 4)
|
||
|
{
|
||
|
lastColor = gPlttBufferFaded[paletteIndex * 16 + 11];
|
||
|
for (i = 10; i > 0; i--)
|
||
|
gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i];
|
||
|
gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor;
|
||
|
|
||
|
lastColor = gPlttBufferUnfaded[paletteIndex * 16 + 11];
|
||
|
for (i = 10; i > 0; i--)
|
||
|
gPlttBufferUnfaded[paletteIndex * 16 + i + 1] = gPlttBufferUnfaded[paletteIndex * 16 + i];
|
||
|
gPlttBufferUnfaded[paletteIndex * 16 + 1] = lastColor;
|
||
|
|
||
|
gTasks[taskId].data[5] = 0;
|
||
|
}
|
||
|
|
||
|
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
|
||
|
DestroyTask(taskId);
|
||
|
}
|
||
|
|
||
|
void sub_815A6C4(struct Sprite *sprite)
|
||
|
{
|
||
|
u16 x;
|
||
|
u16 y;
|
||
|
|
||
|
InitAnimSpritePos(sprite, TRUE);
|
||
|
SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &x, &y);
|
||
|
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||
|
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||
|
|
||
|
sprite->data[0] = gBattleAnimArgs[4];
|
||
|
sprite->data[2] = x + gBattleAnimArgs[2];
|
||
|
sprite->data[4] = y + gBattleAnimArgs[3];
|
||
|
sprite->data[5] = -50;
|
||
|
|
||
|
InitAnimArcTranslation(sprite);
|
||
|
sprite->callback = sub_815A73C;
|
||
|
}
|
||
|
|
||
|
static void sub_815A73C(struct Sprite *sprite)
|
||
|
{
|
||
|
if (TranslateAnimArc(sprite))
|
||
|
{
|
||
|
sprite->data[0] = 30;
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->callback = WaitAnimForDuration;
|
||
|
StoreSpriteCallbackInData6(sprite, sub_815A76C);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815A76C(struct Sprite *sprite)
|
||
|
{
|
||
|
if (sprite->data[1] & 1)
|
||
|
sprite->invisible ^= 1;
|
||
|
|
||
|
if (++sprite->data[1] == 16)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815A7B0(struct Sprite *sprite)
|
||
|
{
|
||
|
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
||
|
sub_80A6864(sprite, gBattleAnimArgs[0]);
|
||
|
sprite->pos1.y += gBattleAnimArgs[1];
|
||
|
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
||
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||
|
}
|
||
|
|
||
|
// This is likely fakematching due to some strange type casting behavior.
|
||
|
void sub_815A7EC(struct Sprite *sprite)
|
||
|
{
|
||
|
int var0;
|
||
|
int var1;
|
||
|
if (sprite->data[0] == 0)
|
||
|
{
|
||
|
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
||
|
sub_80A6864(sprite, gBattleAnimArgs[0]);
|
||
|
if (!IsContest())
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||
|
{
|
||
|
sprite->data[1] = gBattleAnimArgs[2];
|
||
|
sprite->data[2] = gBattleAnimArgs[3];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var1 = -gBattleAnimArgs[2];
|
||
|
sprite->data[1] = var1;
|
||
|
var1 = -gBattleAnimArgs[3];
|
||
|
sprite->data[2] = var1;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var1 = -gBattleAnimArgs[2];
|
||
|
sprite->data[1] = var1;
|
||
|
sprite->data[2] = gBattleAnimArgs[3];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sprite->data[0]++;
|
||
|
var0 = (sprite->data[0] * 20) & 0xFF;
|
||
|
sprite->data[3] += sprite->data[1];
|
||
|
sprite->data[4] += sprite->data[2];
|
||
|
sprite->pos2.x = (sprite->data[3] + (s32)((u32)sprite->data[3] >> 31)) >> 1;
|
||
|
sprite->pos2.y = Sin(var0 & 0xFF, 5) + ((s32)(sprite->data[4] + ((u32)sprite->data[4] >> 31)) >> 1);
|
||
|
|
||
|
if ((u16)(sprite->pos1.x + sprite->pos2.x) > 240)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815A8AC(struct Sprite *sprite)
|
||
|
{
|
||
|
if (sprite->animEnded)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
|
||
|
void AnimTask_IsTargetPlayerSide(u8 taskId)
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
|
||
|
gBattleAnimArgs[7] = 0;
|
||
|
else
|
||
|
gBattleAnimArgs[7] = 1;
|
||
|
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
|
||
|
void AnimTask_IsHealingMove(u8 taskId)
|
||
|
{
|
||
|
if (gAnimMoveDmg > 0)
|
||
|
gBattleAnimArgs[7] = 0;
|
||
|
else
|
||
|
gBattleAnimArgs[7] = 1;
|
||
|
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
|
||
|
void sub_815A934(struct Sprite *sprite)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
|
||
|
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
|
||
|
gBattle_WIN0H = 0;
|
||
|
gBattle_WIN0V = 0;
|
||
|
SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
|
||
|
SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
|
||
|
|
||
|
sub_80A6980(sprite, FALSE);
|
||
|
|
||
|
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
|
||
|
sprite->invisible = 1;
|
||
|
sprite->callback = sub_815A9A0;
|
||
|
}
|
||
|
|
||
|
static void sub_815A9A0(struct Sprite *sprite)
|
||
|
{
|
||
|
switch (sprite->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
sprite->invisible = 0;
|
||
|
if (sprite->affineAnimEnded)
|
||
|
sprite->data[0]++;
|
||
|
break;
|
||
|
case 1:
|
||
|
case 3:
|
||
|
sprite->data[1] += 117;
|
||
|
sprite->pos2.x = sprite->data[1] >> 8;
|
||
|
if (++sprite->data[2] == 21)
|
||
|
{
|
||
|
sprite->data[2] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
sprite->data[1] -= 117;
|
||
|
sprite->pos2.x = sprite->data[1] >> 8;
|
||
|
if (++sprite->data[2] == 41)
|
||
|
{
|
||
|
sprite->data[2] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
ChangeSpriteAffineAnim(sprite, 1);
|
||
|
sprite->data[0]++;
|
||
|
break;
|
||
|
case 5:
|
||
|
if (sprite->affineAnimEnded)
|
||
|
{
|
||
|
sprite->invisible = 1;
|
||
|
sprite->callback = sub_815AA6C;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815AA6C(struct Sprite *sprite)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
|
||
|
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815AAA4(struct Sprite *sprite)
|
||
|
{
|
||
|
if (gBattleAnimArgs[3] == 0)
|
||
|
{
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
|
||
|
}
|
||
|
|
||
|
sprite->pos1.x += gBattleAnimArgs[0];
|
||
|
sprite->pos1.y += gBattleAnimArgs[1];
|
||
|
sprite->oam.tileNum += 16;
|
||
|
|
||
|
if (gBattleAnimArgs[2] == 0)
|
||
|
{
|
||
|
sprite->oam.matrixNum = 8;
|
||
|
sprite->pos2.x = -12;
|
||
|
sprite->data[1] = 2;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos2.x = 12;
|
||
|
sprite->data[1] = -2;
|
||
|
}
|
||
|
|
||
|
sprite->data[0] = gBattleAnimArgs[4];
|
||
|
|
||
|
if (sprite->data[3] != 255)
|
||
|
sprite->data[3] = gBattleAnimArgs[2];
|
||
|
|
||
|
sprite->callback = sub_815AB5C;
|
||
|
}
|
||
|
|
||
|
static void sub_815AB5C(struct Sprite *sprite)
|
||
|
{
|
||
|
if (sprite->data[2] == 0)
|
||
|
{
|
||
|
sprite->pos2.x += sprite->data[1];
|
||
|
if (sprite->pos2.x == 0)
|
||
|
{
|
||
|
sprite->data[2]++;
|
||
|
if (sprite->data[3] == 0)
|
||
|
{
|
||
|
PlaySE1WithPanning(SE_W227, BattleAnimAdjustPanning(-64));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos2.x -= sprite->data[1];
|
||
|
if (abs(sprite->pos2.x) == 12)
|
||
|
{
|
||
|
sprite->data[0]--;
|
||
|
sprite->data[2]--;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
if (sprite->data[0] == 0)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815ABD0(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
|
||
|
sprite->data[3] = 255;
|
||
|
sub_815AAA4(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815ABEC(u8 taskId)
|
||
|
{
|
||
|
if (IsContest())
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_WININ, 0x1F3F);
|
||
|
gBattle_WIN1H = 0x98F0;
|
||
|
gBattle_WIN1V = 0x00A0;
|
||
|
SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN0H);
|
||
|
SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN0V);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
|
||
|
gBattle_WIN1H = 0x00F0;
|
||
|
gBattle_WIN1V = 0x78A0;
|
||
|
SetGpuReg(REG_OFFSET_WIN1H, 0x00F0);
|
||
|
SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V);
|
||
|
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
|
||
|
}
|
||
|
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
|
||
|
void sub_815AC8C(u8 taskId)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
|
||
|
gBattle_WIN1H = 0;
|
||
|
gBattle_WIN1V = 0;
|
||
|
if (!IsContest())
|
||
|
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
|
||
|
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
|
||
|
void sub_815ACD0(struct Sprite *sprite)
|
||
|
{
|
||
|
int var0;
|
||
|
if (gBattleAnimArgs[0] == 0)
|
||
|
{
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1];
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1];
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
|
||
|
}
|
||
|
|
||
|
sprite->pos2.y = gBattleAnimArgs[2];
|
||
|
var0 = 0;
|
||
|
if (sprite->pos2.y > gBattleAnimArgs[3])
|
||
|
var0 = 1;
|
||
|
|
||
|
sprite->data[0] = var0;
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[2] = gBattleAnimArgs[4];
|
||
|
sprite->data[3] = gBattleAnimArgs[5];
|
||
|
sprite->data[4] = gBattleAnimArgs[3];
|
||
|
sprite->callback = sub_815AD4C;
|
||
|
}
|
||
|
|
||
|
static void sub_815AD4C(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->data[1] = (sprite->data[1] + sprite->data[2]) & 0xFF;
|
||
|
sprite->pos2.x = gSineTable[sprite->data[1]] >> 4;
|
||
|
sprite->pos2.y += sprite->data[3];
|
||
|
|
||
|
if (sprite->data[0])
|
||
|
{
|
||
|
if (sprite->pos2.y < sprite->data[4])
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (sprite->pos2.y > sprite->data[4])
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815ADB0(u8 taskId)
|
||
|
{
|
||
|
s16 var0;
|
||
|
u8 toBG2;
|
||
|
s16 var2;
|
||
|
int var3;
|
||
|
int var4;
|
||
|
s16 i;
|
||
|
struct ScanlineEffectParams scanlineParams;
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
if (!gBattleAnimArgs[0])
|
||
|
{
|
||
|
var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
|
||
|
toBG2 = sub_80A8364(gBattleAnimAttacker);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var0 = GetBattlerYCoordWithElevation(gBattleAnimTarget);
|
||
|
toBG2 = sub_80A8364(gBattleAnimTarget);
|
||
|
}
|
||
|
|
||
|
task->data[0] = var0 + 36;
|
||
|
task->data[1] = task->data[0];
|
||
|
task->data[2] = var0 - 33;
|
||
|
if (task->data[2] < 0)
|
||
|
task->data[2] = 0;
|
||
|
|
||
|
task->data[3] = task->data[0];
|
||
|
task->data[4] = 8;
|
||
|
task->data[5] = gBattleAnimArgs[1];
|
||
|
task->data[6] = 0;
|
||
|
task->data[7] = 0;
|
||
|
|
||
|
if (toBG2 == 1)
|
||
|
{
|
||
|
var3 = gBattle_BG1_X;
|
||
|
task->data[8] = var3;
|
||
|
var4 = var3 + 240;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var3 = gBattle_BG2_X;
|
||
|
task->data[8] = var3;
|
||
|
var4 = var3 + 240;
|
||
|
}
|
||
|
|
||
|
task->data[9] = var4;
|
||
|
task->data[10] = gBattleAnimArgs[2];
|
||
|
|
||
|
if (!gBattleAnimArgs[2])
|
||
|
{
|
||
|
task->data[11] = var4;
|
||
|
var2 = task->data[8];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[11] = var3;
|
||
|
var2 = task->data[9];
|
||
|
}
|
||
|
|
||
|
task->data[15] = 0;
|
||
|
|
||
|
i = task->data[2];
|
||
|
while (i <= task->data[3])
|
||
|
{
|
||
|
gScanlineEffectRegBuffers[0][i] = var2;
|
||
|
gScanlineEffectRegBuffers[1][i] = var2;
|
||
|
i++;
|
||
|
}
|
||
|
|
||
|
if (toBG2 == 1)
|
||
|
scanlineParams.dmaDest = ®_BG1HOFS;
|
||
|
else
|
||
|
scanlineParams.dmaDest = ®_BG2HOFS;
|
||
|
|
||
|
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
|
||
|
scanlineParams.initState = 1;
|
||
|
scanlineParams.unused9 = 0;
|
||
|
ScanlineEffect_SetParams(scanlineParams);
|
||
|
|
||
|
task->func = sub_815AED8;
|
||
|
}
|
||
|
|
||
|
static void sub_815AED8(u8 taskId)
|
||
|
{
|
||
|
s16 i;
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
task->data[0] -= task->data[5];
|
||
|
if (task->data[0] < task->data[2])
|
||
|
task->data[0] = task->data[2];
|
||
|
|
||
|
if (task->data[4] == 0)
|
||
|
{
|
||
|
task->data[1] -= task->data[5];
|
||
|
if (task->data[1] < task->data[2])
|
||
|
{
|
||
|
task->data[1] = task->data[2];
|
||
|
task->data[15] = 1;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[4]--;
|
||
|
}
|
||
|
|
||
|
if (++task->data[6] > 1)
|
||
|
{
|
||
|
task->data[6] = 0;
|
||
|
task->data[7] = task->data[7] == 0 ? 1 : 0;
|
||
|
|
||
|
if (task->data[7])
|
||
|
task->data[12] = task->data[8];
|
||
|
else
|
||
|
task->data[12] = task->data[9];
|
||
|
}
|
||
|
|
||
|
i = task->data[0];
|
||
|
while (i < task->data[1])
|
||
|
{
|
||
|
gScanlineEffectRegBuffers[0][i] = task->data[12];
|
||
|
gScanlineEffectRegBuffers[1][i] = task->data[12];
|
||
|
i++;
|
||
|
}
|
||
|
|
||
|
i = task->data[1];
|
||
|
while (i <= task->data[3])
|
||
|
{
|
||
|
gScanlineEffectRegBuffers[0][i] = task->data[11];
|
||
|
gScanlineEffectRegBuffers[1][i] = task->data[11];
|
||
|
i++;
|
||
|
}
|
||
|
|
||
|
if (task->data[15])
|
||
|
{
|
||
|
if (task->data[10])
|
||
|
gScanlineEffect.state = 3;
|
||
|
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815AFF0(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
task->data[0] = 0;
|
||
|
task->data[1] = 0;
|
||
|
task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||
|
task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||
|
task->data[4] = 32;
|
||
|
task->data[5] = -20;
|
||
|
task->data[6] = 0;
|
||
|
task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||
|
task->func = sub_815B054;
|
||
|
}
|
||
|
|
||
|
static void sub_815B054(u8 taskId)
|
||
|
{
|
||
|
int var0, var1;
|
||
|
s16 x, y;
|
||
|
u16 i, j;
|
||
|
u8 spriteId;
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
switch (task->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
var0 = task->data[2];
|
||
|
if (task->data[1] & 1)
|
||
|
{
|
||
|
var1 = task->data[4];
|
||
|
x = var0 - var1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var1 = task->data[4];
|
||
|
x = var0 + var1;
|
||
|
}
|
||
|
|
||
|
y = task->data[3] + task->data[5];
|
||
|
spriteId = CreateSprite(&gUnknown_08593114, x, y, 6 - task->data[1]);
|
||
|
PlaySE12WithPanning(SE_W118, BattleAnimAdjustPanning(-64));
|
||
|
|
||
|
if (spriteId != MAX_SPRITES)
|
||
|
{
|
||
|
gSprites[spriteId].hFlip = task->data[1] & 1;
|
||
|
gSprites[spriteId].callback = SpriteCallbackDummy;
|
||
|
}
|
||
|
|
||
|
if (task->data[1] & 1)
|
||
|
{
|
||
|
task->data[4] -= 6;
|
||
|
task->data[5] -= 6;
|
||
|
}
|
||
|
|
||
|
PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE2A0);
|
||
|
task->data[1]++;
|
||
|
task->data[0] = 1;
|
||
|
break;
|
||
|
case 1:
|
||
|
if (!RunAffineAnimFromTaskData(task))
|
||
|
{
|
||
|
if (task->data[1] == 6)
|
||
|
{
|
||
|
task->data[6] = 8;
|
||
|
task->data[0] = 3;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (task->data[1] <= 2)
|
||
|
task->data[6] = 10;
|
||
|
else
|
||
|
task->data[6] = 0;
|
||
|
|
||
|
task->data[0] = 2;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
if (task->data[6] != 0)
|
||
|
task->data[6]--;
|
||
|
else
|
||
|
task->data[0] = 0;
|
||
|
break;
|
||
|
case 3:
|
||
|
if (task->data[6] != 0)
|
||
|
task->data[6]--;
|
||
|
else
|
||
|
task->data[0] = 4;
|
||
|
break;
|
||
|
case 4:
|
||
|
for (i = 0, j = 0; i < MAX_SPRITES; i++)
|
||
|
{
|
||
|
if (gSprites[i].template == &gUnknown_08593114)
|
||
|
{
|
||
|
gSprites[i].data[0] = taskId;
|
||
|
gSprites[i].data[1] = 6;
|
||
|
StartSpriteAnim(&gSprites[i], 2);
|
||
|
gSprites[i].callback = sub_815B23C;
|
||
|
|
||
|
if (++j == 6)
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
task->data[6] = j;
|
||
|
task->data[0] = 5;
|
||
|
break;
|
||
|
case 5:
|
||
|
if (task->data[6] == 0)
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815B23C(struct Sprite *sprite)
|
||
|
{
|
||
|
if (sprite->animEnded)
|
||
|
{
|
||
|
gTasks[sprite->data[0]].data[sprite->data[1]]--;
|
||
|
DestroySprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815B27C(struct Sprite *sprite)
|
||
|
{
|
||
|
if (sprite->data[0] == 0)
|
||
|
InitAnimSpritePos(sprite, FALSE);
|
||
|
|
||
|
if (++sprite->data[0] < 40)
|
||
|
{
|
||
|
u16 var = sprite->data[0];
|
||
|
if ((var & 1) == 0)
|
||
|
sprite->invisible = 1;
|
||
|
else
|
||
|
sprite->invisible = 0;
|
||
|
}
|
||
|
|
||
|
if (sprite->data[0] > 30)
|
||
|
sprite->invisible = 0;
|
||
|
|
||
|
if (sprite->data[0] == 61)
|
||
|
{
|
||
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||
|
sprite->pos1.x += sprite->pos2.x;
|
||
|
sprite->pos1.y += sprite->pos2.y;
|
||
|
sprite->pos2.x = 0;
|
||
|
sprite->pos2.y = 0;
|
||
|
sprite->data[0] = 20;
|
||
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||
|
sprite->callback = StartAnimLinearTranslation;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815B338(u8 taskId)
|
||
|
{
|
||
|
switch (gTasks[taskId].data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE350);
|
||
|
gTasks[taskId].data[0]++;
|
||
|
break;
|
||
|
case 1:
|
||
|
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815B394(struct Sprite *sprite)
|
||
|
{
|
||
|
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||
|
|
||
|
switch (sprite->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||
|
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
|
||
|
sprite->data[1] = 256;
|
||
|
sprite->data[2] = 256;
|
||
|
sprite->data[0]++;
|
||
|
break;
|
||
|
case 1:
|
||
|
sprite->data[1] += 96;
|
||
|
sprite->data[2] -= 26;
|
||
|
SetSpriteRotScale(spriteId, sprite->data[1], sprite->data[2], 0);
|
||
|
|
||
|
if (++sprite->data[3] == 5)
|
||
|
sprite->data[0]++;
|
||
|
// fall through
|
||
|
case 2:
|
||
|
sprite->data[1] += 96;
|
||
|
sprite->data[2] += 48;
|
||
|
SetSpriteRotScale(spriteId, sprite->data[1], sprite->data[2], 0);
|
||
|
|
||
|
if (++sprite->data[3] == 9)
|
||
|
{
|
||
|
sprite->data[3] = 0;
|
||
|
gSprites[spriteId].invisible = 1;
|
||
|
ResetSpriteRotScale(spriteId);
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
sprite->pos2.y -= 6;
|
||
|
if (sprite->pos1.y + sprite->pos2.y < -32)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815B49C(struct Sprite *sprite)
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||
|
sprite->pos1.x = -16;
|
||
|
else
|
||
|
sprite->pos1.x = 256;
|
||
|
|
||
|
sprite->pos1.y = 0;
|
||
|
sprite->callback = sub_815B4D4;
|
||
|
}
|
||
|
|
||
|
static void sub_815B4D4(struct Sprite *sprite)
|
||
|
{
|
||
|
u32 newX;
|
||
|
|
||
|
sprite->data[0] += 72;
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||
|
sprite->pos2.x = sprite->data[0] >> 4;
|
||
|
else
|
||
|
sprite->pos2.x = -(sprite->data[0] >> 4);
|
||
|
|
||
|
sprite->data[1] += 16;
|
||
|
sprite->pos2.y += sprite->data[1] >> 8;
|
||
|
|
||
|
if (++sprite->data[2] % 3 == 0)
|
||
|
{
|
||
|
CreateSpriteAndAnimate(
|
||
|
&gUnknown_085CE3A0,
|
||
|
sprite->pos1.x + sprite->pos2.x,
|
||
|
sprite->pos1.y + sprite->pos2.y,
|
||
|
sprite->subpriority + 1);
|
||
|
}
|
||
|
|
||
|
newX = sprite->pos1.x + sprite->pos2.x + 32;
|
||
|
if (newX > 304)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815B570(struct Sprite *sprite)
|
||
|
{
|
||
|
u8 rand;
|
||
|
s8 y;
|
||
|
|
||
|
rand = Random2() & 3;
|
||
|
if (rand == 0)
|
||
|
sprite->oam.tileNum += 4;
|
||
|
else
|
||
|
sprite->oam.tileNum += 5;
|
||
|
|
||
|
y = Random2() & 7;
|
||
|
if (y > 3)
|
||
|
y = -y;
|
||
|
|
||
|
sprite->pos2.y = y;
|
||
|
sprite->callback = sub_815B5D0;
|
||
|
}
|
||
|
|
||
|
static void sub_815B5D0(struct Sprite *sprite)
|
||
|
{
|
||
|
if (++sprite->data[0] < 30)
|
||
|
{
|
||
|
if (++sprite->data[1] == 2)
|
||
|
{
|
||
|
sprite->invisible ^= 1;
|
||
|
sprite->data[1] = 0;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (sprite->data[1] == 2)
|
||
|
sprite->invisible = 0;
|
||
|
|
||
|
if (sprite->data[1] == 3)
|
||
|
{
|
||
|
sprite->invisible = 1;
|
||
|
sprite->data[1] = -1;
|
||
|
}
|
||
|
|
||
|
sprite->data[1]++;
|
||
|
}
|
||
|
|
||
|
if (sprite->data[0] > 60)
|
||
|
DestroySprite(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815B65C(u8 taskId)
|
||
|
{
|
||
|
if (!gTasks[taskId].data[0])
|
||
|
{
|
||
|
PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3B8);
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815B6B4(u8 taskId)
|
||
|
{
|
||
|
if (!gTasks[taskId].data[0])
|
||
|
{
|
||
|
PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3E0);
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815B70C(struct Sprite *sprite)
|
||
|
{
|
||
|
switch (sprite->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
InitAnimSpritePos(sprite, FALSE);
|
||
|
sprite->data[1] = 0x900;
|
||
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||
|
sprite->data[0]++;
|
||
|
break;
|
||
|
case 1:
|
||
|
sprite->pos2.y -= sprite->data[1] >> 8;
|
||
|
sprite->data[1] -= 96;
|
||
|
if (sprite->pos1.y + sprite->pos2.y > sprite->data[2])
|
||
|
DestroyAnimSprite(sprite);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815B778(u8 taskId)
|
||
|
{
|
||
|
if (!gTasks[taskId].data[0])
|
||
|
{
|
||
|
PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE430);
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815B7D0(u8 taskId)
|
||
|
{
|
||
|
int i, j;
|
||
|
u8 position;
|
||
|
struct UnknownAnimStruct2 unknownStruct;
|
||
|
u8 *dest;
|
||
|
u8 *src;
|
||
|
u16 *unk4;
|
||
|
u16 stretch;
|
||
|
|
||
|
switch (gTasks[taskId].data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
SetGpuReg(REG_OFFSET_MOSAIC, 0);
|
||
|
if (sub_80A8364(gBattleAnimAttacker) == 1)
|
||
|
SetAnimBgAttribute(1, BG_ANIM_MOSAIC, 1);
|
||
|
else
|
||
|
SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 1);
|
||
|
|
||
|
gTasks[taskId].data[10] = gBattleAnimArgs[0];
|
||
|
gTasks[taskId].data[0]++;
|
||
|
break;
|
||
|
case 1:
|
||
|
if (gTasks[taskId].data[2]++ > 1)
|
||
|
{
|
||
|
gTasks[taskId].data[2] = 0;
|
||
|
gTasks[taskId].data[1]++;
|
||
|
stretch = gTasks[taskId].data[1];
|
||
|
SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 4) | stretch);
|
||
|
if (stretch == 15)
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]);
|
||
|
sub_80A6BFC(&unknownStruct, gBattleAnimAttacker);
|
||
|
|
||
|
if (IsContest())
|
||
|
position = 0;
|
||
|
else
|
||
|
position = GetBattlerPosition(gBattleAnimAttacker);
|
||
|
|
||
|
src = gMonSpritesGfxPtr->sprites[position] + (gBattleMonForms[gBattleAnimAttacker] << 11);
|
||
|
dest = unknownStruct.bgTiles;
|
||
|
CpuCopy32(src, dest, 0x800);
|
||
|
LoadBgTiles(1, unknownStruct.bgTiles, 0x800, unknownStruct.tilesOffset);
|
||
|
if (IsContest())
|
||
|
{
|
||
|
if (IsSpeciesNotUnown(gContestResources->field_18->species) != IsSpeciesNotUnown(gContestResources->field_18->unk2))
|
||
|
{
|
||
|
unk4 = (u16 *)unknownStruct.unk4;
|
||
|
for (i = 0; i < 8; i++)
|
||
|
{
|
||
|
for (j = 0; j < 4; j++)
|
||
|
{
|
||
|
u16 temp = unk4[j + i * 0x20];
|
||
|
unk4[j + i * 0x20] = unk4[(7 - j) + i * 0x20];
|
||
|
unk4[(7 - j) + i * 0x20] = temp;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < 8; i++)
|
||
|
{
|
||
|
for (j = 0; j < 8; j++)
|
||
|
{
|
||
|
unk4[j + i * 0x20] ^= 0x400;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (IsSpeciesNotUnown(gContestResources->field_18->unk2))
|
||
|
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
|
||
|
else
|
||
|
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694;
|
||
|
|
||
|
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
|
||
|
}
|
||
|
|
||
|
gTasks[taskId].data[0]++;
|
||
|
break;
|
||
|
case 3:
|
||
|
if (gTasks[taskId].data[2]++ > 1)
|
||
|
{
|
||
|
gTasks[taskId].data[2] = 0;
|
||
|
gTasks[taskId].data[1]--;
|
||
|
stretch = gTasks[taskId].data[1];
|
||
|
SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 4) | stretch);
|
||
|
|
||
|
if (stretch == 0)
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
SetGpuReg(REG_OFFSET_MOSAIC, 0);
|
||
|
if (sub_80A8364(gBattleAnimAttacker) == 1)
|
||
|
SetAnimBgAttribute(1, BG_ANIM_MOSAIC, 0);
|
||
|
else
|
||
|
SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 0);
|
||
|
|
||
|
if (!IsContest())
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
|
||
|
{
|
||
|
if (gTasks[taskId].data[10] == 0)
|
||
|
SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815BB18(u8 taskId)
|
||
|
{
|
||
|
gBattleAnimArgs[7] = gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible;
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
|
||
|
void sub_815BB58(u8 taskId)
|
||
|
{
|
||
|
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE);
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
|
||
|
void sub_815BB84(u8 taskId)
|
||
|
{
|
||
|
struct UnknownAnimStruct2 unknownStruct;
|
||
|
|
||
|
switch (gTasks[taskId].data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||
|
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
|
||
|
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
||
|
if (!IsContest())
|
||
|
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
|
||
|
|
||
|
sub_80A6B30(&unknownStruct);
|
||
|
sub_80A6D60(&unknownStruct, &gUnknown_08C2A6EC, 0);
|
||
|
if (IsContest())
|
||
|
{
|
||
|
gBattle_BG1_X = -56;
|
||
|
gBattle_BG1_Y = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||
|
gBattle_BG1_X = -135;
|
||
|
else
|
||
|
gBattle_BG1_X = -10;
|
||
|
|
||
|
gBattle_BG1_Y = 0;
|
||
|
}
|
||
|
|
||
|
sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset);
|
||
|
LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
|
||
|
|
||
|
gTasks[taskId].data[10] = gBattle_BG1_X;
|
||
|
gTasks[taskId].data[11] = gBattle_BG1_Y;
|
||
|
|
||
|
gTasks[taskId].data[0]++;
|
||
|
PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64));
|
||
|
break;
|
||
|
case 1:
|
||
|
if (gTasks[taskId].data[4]++ > 0)
|
||
|
{
|
||
|
gTasks[taskId].data[4] = 0;
|
||
|
if (++gTasks[taskId].data[1] > 12)
|
||
|
gTasks[taskId].data[1] = 12;
|
||
|
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
|
||
|
|
||
|
if (gTasks[taskId].data[1] == 12)
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
if (--gTasks[taskId].data[1] < 0)
|
||
|
gTasks[taskId].data[1] = 0;
|
||
|
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
|
||
|
|
||
|
if (!gTasks[taskId].data[1])
|
||
|
{
|
||
|
gBattle_BG1_X = gUnknown_085CE460[gTasks[taskId].data[2]] + gTasks[taskId].data[10];
|
||
|
if (++gTasks[taskId].data[2] == 4)
|
||
|
gTasks[taskId].data[0] = 4;
|
||
|
else
|
||
|
gTasks[taskId].data[0] = 3;
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
if (++gTasks[taskId].data[3] == 4)
|
||
|
{
|
||
|
gTasks[taskId].data[3] = 0;
|
||
|
gTasks[taskId].data[0] = 1;
|
||
|
PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64));
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
sub_80A6B30(&unknownStruct);
|
||
|
sub_80A6C68(unknownStruct.bgId);
|
||
|
if (!IsContest())
|
||
|
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
|
||
|
|
||
|
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
||
|
gBattle_BG1_X = 0;
|
||
|
gBattle_BG1_Y = 0;
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815BE04(struct Sprite *sprite)
|
||
|
{
|
||
|
s16 xOffset;
|
||
|
u8 spriteId1;
|
||
|
u8 spriteId2;
|
||
|
|
||
|
xOffset = Random2();
|
||
|
xOffset &= 0x3F;
|
||
|
if (xOffset > 31)
|
||
|
xOffset = 32 - xOffset;
|
||
|
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + xOffset;
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32;
|
||
|
sprite->data[1] = gBattleAnimArgs[0];
|
||
|
sprite->data[2] = gBattleAnimArgs[1];
|
||
|
|
||
|
spriteId1 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
|
||
|
spriteId2 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
|
||
|
StartSpriteAnim(&gSprites[spriteId1], 1);
|
||
|
StartSpriteAnim(&gSprites[spriteId2], 2);
|
||
|
|
||
|
gSprites[spriteId1].data[1] = gBattleAnimArgs[0];
|
||
|
gSprites[spriteId1].data[2] = gBattleAnimArgs[1];
|
||
|
gSprites[spriteId2].data[1] = gBattleAnimArgs[0];
|
||
|
gSprites[spriteId2].data[2] = gBattleAnimArgs[1];
|
||
|
gSprites[spriteId1].data[7] = -1;
|
||
|
gSprites[spriteId2].data[7] = -1;
|
||
|
gSprites[spriteId1].invisible = 1;
|
||
|
gSprites[spriteId2].invisible = 1;
|
||
|
gSprites[spriteId1].callback = sub_815C050;
|
||
|
gSprites[spriteId2].callback = sub_815C050;
|
||
|
|
||
|
sprite->data[6] = spriteId1;
|
||
|
sprite->data[7] = spriteId2;
|
||
|
sprite->callback = sub_815BF44;
|
||
|
}
|
||
|
|
||
|
static void sub_815BF44(struct Sprite *sprite)
|
||
|
{
|
||
|
int var0;
|
||
|
s8 var1;
|
||
|
|
||
|
var0 = (u16)sprite->data[2] + (u16)sprite->data[3];
|
||
|
var1 = var0 >> 8;
|
||
|
sprite->pos2.y -= var1;
|
||
|
sprite->data[3] = var0 & 0xFF;
|
||
|
if (sprite->data[4] == 0 && sprite->pos2.y < -8)
|
||
|
{
|
||
|
gSprites[sprite->data[6]].invisible = 0;
|
||
|
sprite->data[4]++;
|
||
|
}
|
||
|
|
||
|
if (sprite->data[4] == 1 && sprite->pos2.y < -16)
|
||
|
{
|
||
|
gSprites[sprite->data[7]].invisible = 0;
|
||
|
sprite->data[4]++;
|
||
|
}
|
||
|
|
||
|
if (--sprite->data[1] == -1)
|
||
|
{
|
||
|
sprite->invisible = 1;
|
||
|
sprite->callback = sub_815BFF4;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815BFF4(struct Sprite *sprite)
|
||
|
{
|
||
|
if (gSprites[sprite->data[6]].callback == SpriteCallbackDummy
|
||
|
&& gSprites[sprite->data[7]].callback == SpriteCallbackDummy)
|
||
|
{
|
||
|
DestroySprite(&gSprites[sprite->data[6]]);
|
||
|
DestroySprite(&gSprites[sprite->data[7]]);
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815C050(struct Sprite *sprite)
|
||
|
{
|
||
|
u16 d2;
|
||
|
register u16 d3 asm("r1");
|
||
|
int var0;
|
||
|
s8 var1;
|
||
|
|
||
|
if (!sprite->invisible)
|
||
|
{
|
||
|
d2 = sprite->data[2];
|
||
|
d3 = sprite->data[3];
|
||
|
var0 = d2 + d3;
|
||
|
var1 = var0 >> 8;
|
||
|
sprite->pos2.y -= var1;
|
||
|
sprite->data[3] = var0 & 0xFF;
|
||
|
if (--sprite->data[1] == -1)
|
||
|
{
|
||
|
sprite->invisible = 1;
|
||
|
sprite->callback = SpriteCallbackDummy;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815C0A4(u8 taskId)
|
||
|
{
|
||
|
struct UnknownAnimStruct2 unknownStruct;
|
||
|
|
||
|
switch (gTasks[taskId].data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, 13));
|
||
|
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
|
||
|
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
||
|
if (!IsContest())
|
||
|
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
|
||
|
|
||
|
sub_80A6B30(&unknownStruct);
|
||
|
sub_80A6D60(&unknownStruct, &gUnknown_08C2A6EC, 0);
|
||
|
if (IsContest())
|
||
|
{
|
||
|
gBattle_BG1_X = -56;
|
||
|
gBattle_BG1_Y = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
u8 position = GetBattlerPosition(gBattleAnimTarget);
|
||
|
if (IsDoubleBattle() == TRUE)
|
||
|
{
|
||
|
if (position == B_POSITION_OPPONENT_LEFT)
|
||
|
gBattle_BG1_X = -155;
|
||
|
if (position == B_POSITION_OPPONENT_RIGHT)
|
||
|
gBattle_BG1_X = -115;
|
||
|
if (position == B_POSITION_PLAYER_LEFT)
|
||
|
gBattle_BG1_X = 14;
|
||
|
if (position == B_POSITION_PLAYER_RIGHT)
|
||
|
gBattle_BG1_X = -20;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (position == B_POSITION_OPPONENT_LEFT)
|
||
|
gBattle_BG1_X = -135;
|
||
|
if (position == B_POSITION_PLAYER_LEFT)
|
||
|
gBattle_BG1_X = -10;
|
||
|
}
|
||
|
|
||
|
gBattle_BG1_Y = 0;
|
||
|
}
|
||
|
|
||
|
sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset);
|
||
|
LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
|
||
|
gTasks[taskId].data[10] = gBattle_BG1_X;
|
||
|
gTasks[taskId].data[11] = gBattle_BG1_Y;
|
||
|
gTasks[taskId].data[0]++;
|
||
|
break;
|
||
|
case 1:
|
||
|
gTasks[taskId].data[3] = 0;
|
||
|
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
|
||
|
gBattle_BG1_X = gTasks[taskId].data[10] + gUnknown_085CE4A4[gTasks[taskId].data[2]];
|
||
|
else
|
||
|
gBattle_BG1_X = gTasks[taskId].data[10] - gUnknown_085CE4A4[gTasks[taskId].data[2]];
|
||
|
|
||
|
if (++gTasks[taskId].data[2] == 5)
|
||
|
gTasks[taskId].data[0] = 5;
|
||
|
else
|
||
|
gTasks[taskId].data[0]++;
|
||
|
break;
|
||
|
case 2:
|
||
|
if (--gTasks[taskId].data[1] <= 4)
|
||
|
gTasks[taskId].data[1] = 5;
|
||
|
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, gTasks[taskId].data[1]));
|
||
|
if (gTasks[taskId].data[1] == 5)
|
||
|
gTasks[taskId].data[0]++;
|
||
|
break;
|
||
|
case 3:
|
||
|
if (++gTasks[taskId].data[3] > gUnknown_085CE4A8[gTasks[taskId].data[2]])
|
||
|
gTasks[taskId].data[0]++;
|
||
|
break;
|
||
|
case 4:
|
||
|
if (++gTasks[taskId].data[1] > 13)
|
||
|
gTasks[taskId].data[1] = 13;
|
||
|
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, gTasks[taskId].data[1]));
|
||
|
if (gTasks[taskId].data[1] == 13)
|
||
|
gTasks[taskId].data[0] = 1;
|
||
|
break;
|
||
|
case 5:
|
||
|
sub_80A6B30(&unknownStruct);
|
||
|
sub_80A6C68(unknownStruct.bgId);
|
||
|
if (!IsContest())
|
||
|
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
|
||
|
|
||
|
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
||
|
gBattle_BG1_X = 0;
|
||
|
gBattle_BG1_Y = 0;
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815C3A8(u8 taskId)
|
||
|
{
|
||
|
if (gTasks[taskId].data[0] == 0)
|
||
|
{
|
||
|
PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(0), gUnknown_085CE4B0);
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815C400(struct Sprite *sprite)
|
||
|
{
|
||
|
if (sprite->data[0] == 0)
|
||
|
{
|
||
|
InitAnimSpritePos(sprite, 0);
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
else if (sprite->data[0]++ > 20)
|
||
|
{
|
||
|
sprite->data[1] += 160;
|
||
|
sprite->data[2] += 128;
|
||
|
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||
|
sprite->pos2.x = -(sprite->data[1] >> 8);
|
||
|
else
|
||
|
sprite->pos2.x = sprite->data[1] >> 8;
|
||
|
|
||
|
sprite->pos2.y += sprite->data[2] >> 8;
|
||
|
if (sprite->pos2.y > 64)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815C478(u8 taskId)
|
||
|
{
|
||
|
u8 side;
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
if (!gBattleAnimArgs[1])
|
||
|
{
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (gBattleAnimArgs[2] < 0)
|
||
|
gBattleAnimArgs[2] = 0;
|
||
|
if (gBattleAnimArgs[2] > 2)
|
||
|
gBattleAnimArgs[2] = 2;
|
||
|
|
||
|
task->data[0] = 0;
|
||
|
task->data[1] = 0;
|
||
|
task->data[2] = 0;
|
||
|
task->data[3] = 8 - (2 * gBattleAnimArgs[2]);
|
||
|
task->data[4] = 0x100 + (gBattleAnimArgs[2] * 128);
|
||
|
task->data[5] = gBattleAnimArgs[2] + 2;
|
||
|
task->data[6] = gBattleAnimArgs[1] - 1;
|
||
|
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||
|
|
||
|
if (!gBattleAnimArgs[0])
|
||
|
side = GetBattlerSide(gBattleAnimAttacker);
|
||
|
else
|
||
|
side = GetBattlerSide(gBattleAnimTarget);
|
||
|
|
||
|
if (side == B_SIDE_OPPONENT)
|
||
|
{
|
||
|
task->data[4] *= -1;
|
||
|
task->data[5] *= -1;
|
||
|
}
|
||
|
|
||
|
PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
|
||
|
task->func = sub_815C548;
|
||
|
}
|
||
|
|
||
|
static void sub_815C548(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
switch (task->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
gSprites[task->data[15]].pos2.x += task->data[5];
|
||
|
task->data[2] -= task->data[4];
|
||
|
SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
|
||
|
SetBattlerSpriteYOffsetFromRotation(task->data[15]);
|
||
|
if (++task->data[1] >= task->data[3])
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
gSprites[task->data[15]].pos2.x -= task->data[5];
|
||
|
task->data[2] += task->data[4];
|
||
|
SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
|
||
|
SetBattlerSpriteYOffsetFromRotation(task->data[15]);
|
||
|
if (++task->data[1] >= task->data[3] * 2)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
gSprites[task->data[15]].pos2.x += task->data[5];
|
||
|
task->data[2] -= task->data[4];
|
||
|
SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
|
||
|
SetBattlerSpriteYOffsetFromRotation(task->data[15]);
|
||
|
if (++task->data[1] >= task->data[3])
|
||
|
{
|
||
|
if (task->data[6])
|
||
|
{
|
||
|
task->data[6]--;
|
||
|
task->data[1] = 0;
|
||
|
task->data[0] = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
ResetSpriteRotScale(task->data[15]);
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815C6B0(struct Sprite *sprite)
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||
|
{
|
||
|
sprite->pos1.x = 0;
|
||
|
sprite->pos1.y = gBattleAnimArgs[0];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos1.x = 240;
|
||
|
sprite->pos1.y = gBattleAnimArgs[0] - 30;
|
||
|
}
|
||
|
|
||
|
sprite->data[2] = gBattleAnimArgs[2];
|
||
|
StartSpriteAnim(sprite, gBattleAnimArgs[1]);
|
||
|
sprite->callback = sub_815C700;
|
||
|
}
|
||
|
|
||
|
static void sub_815C700(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->data[0] += 3;
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||
|
{
|
||
|
sprite->pos1.x += 5;
|
||
|
sprite->pos1.y -= 1;
|
||
|
|
||
|
if (sprite->pos1.x > 240)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
|
||
|
sprite->pos2.y = Sin(sprite->data[0] & 0xFF, 16);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos1.x -= 5;
|
||
|
sprite->pos1.y += 1;
|
||
|
|
||
|
if (sprite->pos1.x < 0)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
|
||
|
sprite->pos2.y = Cos(sprite->data[0] & 0xFF, 16);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815C770(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
task->data[0] = 0;
|
||
|
task->data[1] = 0;
|
||
|
task->data[2] = 0;
|
||
|
task->data[3] = 0;
|
||
|
task->data[12] = 0x20;
|
||
|
task->data[13] = 0x40;
|
||
|
task->data[14] = 0x800;
|
||
|
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||
|
|
||
|
PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
|
||
|
task->func = sub_815C7C4;
|
||
|
}
|
||
|
|
||
|
static void sub_815C7C4(u8 taskId)
|
||
|
{
|
||
|
int temp;
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
switch (task->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
task->data[2] += 0x200;
|
||
|
if (task->data[2] >= task->data[14])
|
||
|
{
|
||
|
s16 diff = task->data[14] - task->data[2];
|
||
|
s16 div = diff / (task->data[14] * 2);
|
||
|
s16 mod = diff % (task->data[14] * 2);
|
||
|
|
||
|
if ((div & 1) == 0)
|
||
|
{
|
||
|
task->data[2] = task->data[14] - mod;
|
||
|
task->data[0] = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[2] = mod - task->data[14];
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
task->data[2] -= 0x200;
|
||
|
if (task->data[2] <= -task->data[14])
|
||
|
{
|
||
|
s16 diff = task->data[14] - task->data[2];
|
||
|
s16 div = diff / (task->data[14] * 2);
|
||
|
s16 mod = diff % (task->data[14] * 2);
|
||
|
|
||
|
if ((1 & div) == 0)
|
||
|
{
|
||
|
task->data[2] = mod - task->data[14];
|
||
|
task->data[0] = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[2] = task->data[14] - mod;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
ResetSpriteRotScale(task->data[15]);
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
|
||
|
SetBattlerSpriteYOffsetFromRotation(task->data[15]);
|
||
|
gSprites[task->data[15]].pos2.x = -(((temp = task->data[2]) >= 0 ? task->data[2] : temp + 63) >> 6);
|
||
|
|
||
|
if (++task->data[1] > 8)
|
||
|
{
|
||
|
if (task->data[12])
|
||
|
{
|
||
|
task->data[12]--;
|
||
|
task->data[14] -= task->data[13];
|
||
|
if (task->data[14] < 16)
|
||
|
task->data[14] = 16;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[0] = 2;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815C95C(struct Sprite *sprite)
|
||
|
{
|
||
|
if (!sprite->data[0])
|
||
|
{
|
||
|
if (!gBattleAnimArgs[2])
|
||
|
{
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||
|
}
|
||
|
|
||
|
sprite->pos1.x += gBattleAnimArgs[0];
|
||
|
sprite->pos1.y += gBattleAnimArgs[1];
|
||
|
sprite->data[1] = 0x80;
|
||
|
sprite->data[2] = 0x300;
|
||
|
sprite->data[3] = gBattleAnimArgs[1];
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos2.x = sprite->data[1] >> 8;
|
||
|
sprite->pos2.y += sprite->data[2] >> 8;
|
||
|
if (sprite->data[4] == 0 && sprite->pos2.y > -sprite->data[3])
|
||
|
{
|
||
|
sprite->data[4] = 1;
|
||
|
sprite->data[2] = (-sprite->data[2] / 3) * 2;
|
||
|
}
|
||
|
|
||
|
sprite->data[1] += 192;
|
||
|
sprite->data[2] += 128;
|
||
|
if (sprite->animEnded)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815CA20(u8 taskId)
|
||
|
{
|
||
|
u8 spriteId;
|
||
|
|
||
|
if (gTasks[taskId].data[0] == 0)
|
||
|
{
|
||
|
if (gBattleAnimArgs[0] == 0)
|
||
|
gTasks[taskId].data[11] = gBattleAnimAttacker;
|
||
|
else
|
||
|
gTasks[taskId].data[11] = gBattleAnimTarget;
|
||
|
|
||
|
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||
|
gTasks[taskId].data[10] = spriteId;
|
||
|
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
|
||
|
|
||
|
switch (gBattleAnimArgs[1])
|
||
|
{
|
||
|
case 0:
|
||
|
SetSpriteRotScale(spriteId, 0xE0, 0x140, 0);
|
||
|
SetBattlerSpriteYOffsetFromYScale(spriteId);
|
||
|
break;
|
||
|
case 1:
|
||
|
SetSpriteRotScale(spriteId, 0xD0, 0x130, 0xF00);
|
||
|
SetBattlerSpriteYOffsetFromYScale(spriteId);
|
||
|
if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER)
|
||
|
gSprites[spriteId].pos2.y += 16;
|
||
|
break;
|
||
|
case 2:
|
||
|
SetSpriteRotScale(spriteId, 0xD0, 0x130, 0xF100);
|
||
|
SetBattlerSpriteYOffsetFromYScale(spriteId);
|
||
|
if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER)
|
||
|
gSprites[spriteId].pos2.y += 16;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
gSprites[spriteId].pos2.x = 2;
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
spriteId = gTasks[taskId].data[10];
|
||
|
if (++gTasks[taskId].data[2] == 3)
|
||
|
{
|
||
|
gTasks[taskId].data[2] = 0;
|
||
|
gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
|
||
|
}
|
||
|
|
||
|
if (++gTasks[taskId].data[1] == 13)
|
||
|
{
|
||
|
ResetSpriteRotScale(spriteId);
|
||
|
gSprites[spriteId].pos2.x = 0;
|
||
|
gSprites[spriteId].pos2.y = 0;
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815CB88(struct Sprite *sprite)
|
||
|
{
|
||
|
u8 tileOffset;
|
||
|
int rand1;
|
||
|
int rand2;
|
||
|
|
||
|
tileOffset = Random2() % 12;
|
||
|
sprite->oam.tileNum += tileOffset;
|
||
|
rand1 = Random2() & 0x1FF;
|
||
|
rand2 = Random2() & 0xFF;
|
||
|
|
||
|
if (rand1 & 1)
|
||
|
sprite->data[0] = 0x5E0 + rand1;
|
||
|
else
|
||
|
sprite->data[0] = 0x5E0 - rand1;
|
||
|
|
||
|
if (rand2 & 1)
|
||
|
sprite->data[1] = 0x480 + rand2;
|
||
|
else
|
||
|
sprite->data[1] = 0x480 - rand2;
|
||
|
|
||
|
sprite->data[2] = gBattleAnimArgs[0];
|
||
|
if (sprite->data[2] == 0)
|
||
|
sprite->pos1.x = -8;
|
||
|
else
|
||
|
sprite->pos1.x = 248;
|
||
|
|
||
|
sprite->pos1.y = 104;
|
||
|
sprite->callback = sub_815CC34;
|
||
|
}
|
||
|
|
||
|
static void sub_815CC34(struct Sprite *sprite)
|
||
|
{
|
||
|
if (sprite->data[2] == 0)
|
||
|
{
|
||
|
sprite->pos2.x += sprite->data[0] >> 8;
|
||
|
sprite->pos2.y -= sprite->data[1] >> 8;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos2.x -= sprite->data[0] >> 8;
|
||
|
sprite->pos2.y -= sprite->data[1] >> 8;
|
||
|
}
|
||
|
|
||
|
sprite->data[0] -= 22;
|
||
|
sprite->data[1] -= 48;
|
||
|
if (sprite->data[0] < 0)
|
||
|
sprite->data[0] = 0;
|
||
|
|
||
|
if (++sprite->data[3] == 31)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815CC94(struct Sprite *sprite)
|
||
|
{
|
||
|
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
|
||
|
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
|
||
|
gBattle_WIN0H = 0;
|
||
|
gBattle_WIN0V = 0;
|
||
|
SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
|
||
|
SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
|
||
|
|
||
|
sprite->data[0] = gBattleAnimArgs[2];
|
||
|
sub_80A6980(sprite, FALSE);
|
||
|
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
|
||
|
sprite->invisible = 1;
|
||
|
sprite->callback = sub_815CD0C;
|
||
|
}
|
||
|
|
||
|
static void sub_815CD0C(struct Sprite *sprite)
|
||
|
{
|
||
|
switch (sprite->data[1])
|
||
|
{
|
||
|
case 0:
|
||
|
sprite->invisible = 0;
|
||
|
if (sprite->affineAnimEnded)
|
||
|
sprite->data[1]++;
|
||
|
break;
|
||
|
case 1:
|
||
|
if (--sprite->data[0] == 0)
|
||
|
{
|
||
|
ChangeSpriteAffineAnim(sprite, 1);
|
||
|
sprite->data[1]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
if (sprite->affineAnimEnded)
|
||
|
{
|
||
|
sprite->invisible = 1;
|
||
|
sprite->data[1]++;
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
|
||
|
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
|
||
|
DestroyAnimSprite(sprite);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815CDB4(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||
|
sprite->data[0] = gBattleAnimArgs[0];
|
||
|
sprite->data[1] = gBattleAnimArgs[1];
|
||
|
sprite->callback = sub_815CDFC;
|
||
|
sprite->callback(sprite);
|
||
|
}
|
||
|
|
||
|
static void sub_815CDFC(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
|
||
|
sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
|
||
|
sprite->data[1] = (sprite->data[1] + 9) & 0xFF;
|
||
|
|
||
|
if ((u16)sprite->data[1] < 64 || sprite->data[1] > 195)
|
||
|
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
|
||
|
else
|
||
|
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + 1;
|
||
|
|
||
|
if (!sprite->data[5])
|
||
|
{
|
||
|
sprite->data[2] += 0x400;
|
||
|
sprite->data[3] += 0x100;
|
||
|
sprite->data[4]++;
|
||
|
if (sprite->data[4] == sprite->data[0])
|
||
|
{
|
||
|
sprite->data[4] = 0;
|
||
|
sprite->data[5] = 1;
|
||
|
}
|
||
|
}
|
||
|
else if (sprite->data[5] == 1)
|
||
|
{
|
||
|
sprite->data[2] -= 0x400;
|
||
|
sprite->data[3] -= 0x100;
|
||
|
sprite->data[4]++;
|
||
|
if (sprite->data[4] == sprite->data[0])
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
extern void sub_815D160(u8);
|
||
|
|
||
|
void sub_815CED8(u8 taskId)
|
||
|
{
|
||
|
u8 isBackPic;
|
||
|
u32 personality;
|
||
|
u32 otId;
|
||
|
u16 species;
|
||
|
s16 xOffset;
|
||
|
u32 priority;
|
||
|
u8 spriteId;
|
||
|
s16 coord1, coord2;
|
||
|
|
||
|
GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||
|
if (IsContest())
|
||
|
{
|
||
|
isBackPic = 1;
|
||
|
personality = gContestResources->field_18->unk10;
|
||
|
otId = gContestResources->field_18->unkC;
|
||
|
species = gContestResources->field_18->unk2;
|
||
|
xOffset = 20;
|
||
|
priority = sub_80A8328(gBattleAnimAttacker);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||
|
{
|
||
|
isBackPic = 0;
|
||
|
personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY);
|
||
|
otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID);
|
||
|
if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE)
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
||
|
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
|
||
|
else
|
||
|
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies;
|
||
|
}
|
||
|
|
||
|
xOffset = 20;
|
||
|
priority = sub_80A8328(gBattleAnimAttacker);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
isBackPic = 1;
|
||
|
personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY);
|
||
|
otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID);
|
||
|
if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE)
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
||
|
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
|
||
|
else
|
||
|
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies;
|
||
|
}
|
||
|
|
||
|
xOffset = -20;
|
||
|
priority = sub_80A8328(gBattleAnimAttacker);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||
|
coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
|
||
|
spriteId = sub_80A8394(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, 1);
|
||
|
|
||
|
gSprites[spriteId].oam.priority = priority;
|
||
|
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
|
||
|
FillPalette(RGB(31, 31, 31), (gSprites[spriteId].oam.paletteNum << 4) + 0x100, 32);
|
||
|
gSprites[spriteId].oam.priority = priority;
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, 0x3F40);
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
|
||
|
|
||
|
gTasks[taskId].data[0] = spriteId;
|
||
|
gTasks[taskId].func = sub_815D160;
|
||
|
}
|
||
|
|
||
|
void sub_815D160(u8 taskId)
|
||
|
{
|
||
|
if (gTasks[taskId].data[10]++ > 1)
|
||
|
{
|
||
|
gTasks[taskId].data[10] = 0;
|
||
|
gTasks[taskId].data[1]++;
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
|
||
|
if (gTasks[taskId].data[1] == 10)
|
||
|
{
|
||
|
gTasks[taskId].data[10] = 256;
|
||
|
gTasks[taskId].data[11] = 256;
|
||
|
gTasks[taskId].func = sub_815D1BC;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815D1BC(u8 taskId)
|
||
|
{
|
||
|
u8 spriteId = gTasks[taskId].data[0];
|
||
|
gTasks[taskId].data[10] -= 16;
|
||
|
gTasks[taskId].data[11] += 128;
|
||
|
gSprites[spriteId].oam.affineMode |= ST_OAM_AFFINE_DOUBLE_MASK;
|
||
|
TrySetSpriteRotScale(&gSprites[spriteId], TRUE, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
|
||
|
if (++gTasks[taskId].data[12] == 9)
|
||
|
{
|
||
|
sub_80A749C(&gSprites[spriteId]);
|
||
|
sub_80A8610(&gSprites[spriteId]);
|
||
|
gTasks[taskId].func = sub_80A6814;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815D240(u8 taskId)
|
||
|
{
|
||
|
u8 battler;
|
||
|
u16 bgX, bgY;
|
||
|
s16 y, i;
|
||
|
struct ScanlineEffectParams scanlineParams;
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
if (gBattleAnimArgs[0] == 0)
|
||
|
battler = gBattleAnimAttacker;
|
||
|
else
|
||
|
battler = gBattleAnimTarget;
|
||
|
|
||
|
task->data[0] = 0;
|
||
|
task->data[1] = 0;
|
||
|
task->data[2] = 0;
|
||
|
task->data[3] = 16;
|
||
|
task->data[4] = 0;
|
||
|
task->data[5] = battler;
|
||
|
task->data[6] = 32;
|
||
|
task->data[7] = 0;
|
||
|
task->data[8] = 24;
|
||
|
|
||
|
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
|
||
|
task->data[8] *= -1;
|
||
|
|
||
|
task->data[13] = GetBattlerYCoordWithElevation(battler) - 34;
|
||
|
if (task->data[13] < 0)
|
||
|
task->data[13] = 0;
|
||
|
|
||
|
task->data[14] = task->data[13] + 66;
|
||
|
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||
|
if (sub_80A8364(battler) == 1)
|
||
|
{
|
||
|
scanlineParams.dmaDest = ®_BG1HOFS;
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
|
||
|
bgX = gBattle_BG1_X;
|
||
|
bgY = gBattle_BG1_Y;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
scanlineParams.dmaDest = ®_BG2HOFS;
|
||
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
|
||
|
bgX = gBattle_BG2_X;
|
||
|
bgY = gBattle_BG2_Y;
|
||
|
}
|
||
|
|
||
|
for (y = 0, i = 0; y < 160; y++, i += 2)
|
||
|
{
|
||
|
gScanlineEffectRegBuffers[0][i] = bgX;
|
||
|
gScanlineEffectRegBuffers[1][i] = bgX;
|
||
|
gScanlineEffectRegBuffers[0][i + 1] = bgY;
|
||
|
gScanlineEffectRegBuffers[1][i + 1] = bgY;
|
||
|
}
|
||
|
|
||
|
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_32BIT;
|
||
|
scanlineParams.initState = 1;
|
||
|
scanlineParams.unused9 = 0;
|
||
|
ScanlineEffect_SetParams(scanlineParams);
|
||
|
task->func = sub_815D398;
|
||
|
}
|
||
|
|
||
|
static void sub_815D398(u8 taskId)
|
||
|
{
|
||
|
struct Task *task;
|
||
|
s16 var1;
|
||
|
s16 var2;
|
||
|
s16 bgX, bgY;
|
||
|
s16 offset;
|
||
|
s16 var0;
|
||
|
s16 i;
|
||
|
s16 sineIndex;
|
||
|
s16 var3;
|
||
|
|
||
|
task = &gTasks[taskId];
|
||
|
if (sub_80A8364(task->data[5]) == 1)
|
||
|
{
|
||
|
bgX = gBattle_BG1_X;
|
||
|
bgY = gBattle_BG1_Y;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
bgX = gBattle_BG2_X;
|
||
|
bgY = gBattle_BG2_Y;
|
||
|
}
|
||
|
|
||
|
switch (task->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
offset = task->data[14] * 2;
|
||
|
var1 = 0;
|
||
|
var2 = 0;
|
||
|
i = 0;
|
||
|
task->data[1] = (task->data[1] + 2) & 0xFF;
|
||
|
sineIndex = task->data[1];
|
||
|
task->data[9] = 0x7E0 / task->data[6];
|
||
|
task->data[10] = -((task->data[7] * 2) / task->data[9]);
|
||
|
task->data[11] = task->data[7];
|
||
|
var3 = task->data[11] >> 5;
|
||
|
task->data[12] = var3;
|
||
|
var0 = task->data[14];
|
||
|
while (var0 > task->data[13])
|
||
|
{
|
||
|
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset + 1] = (i - var2) + bgY;
|
||
|
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset] = bgX + var3 + (gSineTable[sineIndex] >> 5);
|
||
|
sineIndex = (sineIndex + 10) & 0xFF;
|
||
|
task->data[11] += task->data[10];
|
||
|
var3 = task->data[11] >> 5;
|
||
|
task->data[12] = var3;
|
||
|
|
||
|
i++;
|
||
|
offset -= 2;
|
||
|
var1 += task->data[6];
|
||
|
var2 = var1 >> 5;
|
||
|
var0--;
|
||
|
}
|
||
|
|
||
|
var0 *= 2;
|
||
|
while (var0 >= 0)
|
||
|
{
|
||
|
gScanlineEffectRegBuffers[0][var0] = bgX + 240;
|
||
|
gScanlineEffectRegBuffers[1][var0] = bgX + 240;
|
||
|
var0 -= 2;
|
||
|
}
|
||
|
|
||
|
if (++task->data[6] > 63)
|
||
|
{
|
||
|
task->data[6] = 64;
|
||
|
task->data[2]++;
|
||
|
if (task->data[2] & 1)
|
||
|
task->data[3]--;
|
||
|
else
|
||
|
task->data[4]++;
|
||
|
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
|
||
|
if (task->data[3] == 0 && task->data[4] == 16)
|
||
|
{
|
||
|
task->data[2] = 0;
|
||
|
task->data[3] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[7] += task->data[8];
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
if (++task->data[2] > 12)
|
||
|
{
|
||
|
gScanlineEffect.state = 3;
|
||
|
task->data[2] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
task->data[2]++;
|
||
|
if (task->data[2] & 1)
|
||
|
task->data[3]++;
|
||
|
else
|
||
|
task->data[4]--;
|
||
|
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
|
||
|
if (task->data[3] == 16 && task->data[4] == 0)
|
||
|
{
|
||
|
task->data[2] = 0;
|
||
|
task->data[3] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815D64C(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
task->data[0] = 0;
|
||
|
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||
|
PrepareAffineAnimInTaskData(&gTasks[taskId], task->data[15], gUnknown_085CE5F0);
|
||
|
task->func = sub_815D694;
|
||
|
}
|
||
|
|
||
|
static void sub_815D694(u8 taskId)
|
||
|
{
|
||
|
u16 var0;
|
||
|
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
var0 = task->data[0];
|
||
|
task->data[0]++;
|
||
|
var0 -= 20;
|
||
|
if (var0 < 23)
|
||
|
{
|
||
|
if (++task->data[1] > 1)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[2]++;
|
||
|
if (task->data[2] & 1)
|
||
|
gSprites[task->data[15]].pos2.x = 1;
|
||
|
else
|
||
|
gSprites[task->data[15]].pos2.x = -1;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gSprites[task->data[15]].pos2.x = 0;
|
||
|
}
|
||
|
|
||
|
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
|
||
|
void sub_815D72C(struct Sprite *sprite, s16 b, s16 c, s16 d, s16 e, u16 f)
|
||
|
{
|
||
|
sprite->pos1.x = b;
|
||
|
sprite->pos1.y = c;
|
||
|
sprite->data[4] = b << 4;
|
||
|
sprite->data[5] = c << 4;
|
||
|
sprite->data[6] = ((d - b) << 4) / f;
|
||
|
sprite->data[7] = ((e - c) << 4) / f;
|
||
|
}
|
||
|
|
||
|
void sub_815D794(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->data[4] += sprite->data[6];
|
||
|
sprite->data[5] += sprite->data[7];
|
||
|
sprite->pos1.x = sprite->data[4] >> 4;
|
||
|
sprite->pos1.y = sprite->data[5] >> 4;
|
||
|
}
|
||
|
|
||
|
void sub_815D7B4(struct Sprite *sprite)
|
||
|
{
|
||
|
s16 x = sprite->pos1.x;
|
||
|
s16 y = sprite->pos1.y;
|
||
|
|
||
|
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
||
|
StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
|
||
|
sub_815D72C(sprite, sprite->pos1.x, sprite->pos1.y, x, y, 64);
|
||
|
sprite->data[0] = 0;
|
||
|
sprite->callback = sub_815D804;
|
||
|
}
|
||
|
|
||
|
static void sub_815D804(struct Sprite *sprite)
|
||
|
{
|
||
|
int index;
|
||
|
|
||
|
sprite->data[0]++;
|
||
|
index = (sprite->data[0] * 8) & 0xFF;
|
||
|
sub_815D794(sprite);
|
||
|
sprite->pos2.y = Sin(index, 8);
|
||
|
if (sprite->data[0] > 58)
|
||
|
{
|
||
|
if (++sprite->data[1] > 1)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[2]++;
|
||
|
sprite->invisible = sprite->data[2] & 1;
|
||
|
if (sprite->data[2] > 3)
|
||
|
DestroySpriteAndMatrix(sprite);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815D870(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->data[0] = gBattleAnimArgs[3];
|
||
|
StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
|
||
|
if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
|
||
|
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||
|
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
|
||
|
sprite->callback = sub_810E2C8;
|
||
|
}
|
||
|
|
||
|
static void sub_815D8D8(u8 taskId)
|
||
|
{
|
||
|
u16 var0 = 0;
|
||
|
u16 var1 = 0;
|
||
|
|
||
|
gTasks[taskId].data[0]--;
|
||
|
if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1))
|
||
|
{
|
||
|
if (gTasks[taskId].data[9] == 0)
|
||
|
{
|
||
|
gTasks[taskId].data[9] = gTasks[taskId].data[4];
|
||
|
gTasks[taskId].data[4] = -gTasks[taskId].data[4];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gTasks[taskId].data[9] = 0;
|
||
|
}
|
||
|
|
||
|
if (gTasks[taskId].data[10] == 0)
|
||
|
{
|
||
|
gTasks[taskId].data[10] = gTasks[taskId].data[5];
|
||
|
gTasks[taskId].data[5] = -gTasks[taskId].data[5];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gTasks[taskId].data[10] = 0;
|
||
|
}
|
||
|
|
||
|
gTasks[taskId].data[1] = gTasks[taskId].data[13];
|
||
|
}
|
||
|
|
||
|
var0 = gTasks[taskId].data[7];
|
||
|
var1 = gTasks[taskId].data[8];
|
||
|
if (gTasks[taskId].data[2] & 0x8000)
|
||
|
gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8);
|
||
|
else
|
||
|
gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8);
|
||
|
|
||
|
if (gTasks[taskId].data[3] & 0x8000)
|
||
|
gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8);
|
||
|
else
|
||
|
gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8);
|
||
|
|
||
|
if (gTasks[taskId].data[0] < 1)
|
||
|
{
|
||
|
DestroyTask(taskId);
|
||
|
gAnimVisualTaskCount--;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815DA20(u8 taskId)
|
||
|
{
|
||
|
u16 var0 = 0;
|
||
|
u16 var1 = 0;
|
||
|
|
||
|
gTasks[taskId].data[0]--;
|
||
|
if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1))
|
||
|
{
|
||
|
if (gTasks[taskId].data[9] == 0)
|
||
|
{
|
||
|
gTasks[taskId].data[9] = gTasks[taskId].data[4];
|
||
|
gTasks[taskId].data[4] = -gTasks[taskId].data[4];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gTasks[taskId].data[9] = var0;
|
||
|
}
|
||
|
|
||
|
if (gTasks[taskId].data[10] == 0)
|
||
|
{
|
||
|
gTasks[taskId].data[10] = gTasks[taskId].data[5];
|
||
|
gTasks[taskId].data[5] = -gTasks[taskId].data[5];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gTasks[taskId].data[10] = 0;
|
||
|
}
|
||
|
|
||
|
gTasks[taskId].data[1] = gTasks[taskId].data[13];
|
||
|
}
|
||
|
|
||
|
var0 = (gTasks[taskId].data[2] & 0x7FFF) + gTasks[taskId].data[7];
|
||
|
var1 = (gTasks[taskId].data[3] & 0x7FFF) + gTasks[taskId].data[8];
|
||
|
if (gTasks[taskId].data[2] & 0x8000)
|
||
|
gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8);
|
||
|
else
|
||
|
gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8);
|
||
|
|
||
|
if (gTasks[taskId].data[3] & 0x8000)
|
||
|
gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8);
|
||
|
else
|
||
|
gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8);
|
||
|
|
||
|
gTasks[taskId].data[7] = var0;
|
||
|
gTasks[taskId].data[8] = var1;
|
||
|
if (gTasks[taskId].data[0] < 1)
|
||
|
{
|
||
|
gTasks[taskId].data[0] = 30;
|
||
|
gTasks[taskId].data[13] = 0;
|
||
|
gTasks[taskId].func = sub_815D8D8;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815DB90(u8 taskId)
|
||
|
{
|
||
|
gTasks[taskId].data[15] = gBattlerSpriteIds[gBattleAnimAttacker];
|
||
|
gTasks[taskId].data[14] = gBattleAnimArgs[0];
|
||
|
gTasks[taskId].data[0] = gBattleAnimArgs[0];
|
||
|
gTasks[taskId].data[13] = gBattleAnimArgs[6];
|
||
|
if (gBattleAnimArgs[3])
|
||
|
gTasks[taskId].data[6] = gTasks[taskId].data[6] | -0x8000;
|
||
|
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||
|
{
|
||
|
gTasks[taskId].data[2] = gBattleAnimArgs[1];
|
||
|
gTasks[taskId].data[3] = gBattleAnimArgs[2];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (gBattleAnimArgs[1] & 0x8000)
|
||
|
gTasks[taskId].data[2] = gBattleAnimArgs[1] & 0x7FFF;
|
||
|
else
|
||
|
gTasks[taskId].data[2] = gBattleAnimArgs[1] | -0x8000;
|
||
|
|
||
|
if (gBattleAnimArgs[2] & 0x8000)
|
||
|
gTasks[taskId].data[3] = gBattleAnimArgs[2] & 0x7FFF;
|
||
|
else
|
||
|
gTasks[taskId].data[3] = gBattleAnimArgs[2] | -0x8000;
|
||
|
}
|
||
|
|
||
|
gTasks[taskId].data[8] = 0;
|
||
|
gTasks[taskId].data[7] = 0;
|
||
|
gTasks[taskId].data[4] = gBattleAnimArgs[4];
|
||
|
gTasks[taskId].data[5] = gBattleAnimArgs[5];
|
||
|
gTasks[taskId].func = sub_815DA20;
|
||
|
}
|
||
|
|
||
|
void sub_815DCA4(u8 taskId)
|
||
|
{
|
||
|
u8 battler;
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
if (!gBattleAnimArgs[1])
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
|
||
|
task->data[0] = 0;
|
||
|
task->data[1] = 0;
|
||
|
task->data[2] = 0;
|
||
|
task->data[3] = gBattleAnimArgs[1];
|
||
|
if (gBattleAnimArgs[0] == 0)
|
||
|
battler = gBattleAnimAttacker;
|
||
|
else
|
||
|
battler = gBattleAnimTarget;
|
||
|
|
||
|
task->data[4] = GetBattlerSpriteCoord(battler, 0);
|
||
|
task->data[5] = GetBattlerSpriteCoord(battler, 1);
|
||
|
task->data[6] = GetBattlerSpriteSubpriority(battler);
|
||
|
task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||
|
PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C);
|
||
|
task->func = sub_815DD48;
|
||
|
}
|
||
|
|
||
|
static void sub_815DD48(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
switch (task->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
if (++task->data[1] == 6)
|
||
|
sub_815DDE0(taskId, TRUE);
|
||
|
|
||
|
if (task->data[1] == 18)
|
||
|
sub_815DDE0(taskId, FALSE);
|
||
|
|
||
|
if (!RunAffineAnimFromTaskData(task))
|
||
|
{
|
||
|
if (--task->data[3] == 0)
|
||
|
{
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
if (task->data[2] == 0)
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815DDE0(u8 taskId, bool8 arg1)
|
||
|
{
|
||
|
u8 i;
|
||
|
s8 xOffset, yOffset;
|
||
|
struct Task *task;
|
||
|
s16 xCoords[4];
|
||
|
s16 yCoords[2];
|
||
|
|
||
|
task = &gTasks[taskId];
|
||
|
if (!arg1)
|
||
|
{
|
||
|
xOffset = 18;
|
||
|
yOffset = -20;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
xOffset = 30;
|
||
|
yOffset = 20;
|
||
|
}
|
||
|
|
||
|
xCoords[0] = task->data[4] - xOffset;
|
||
|
xCoords[1] = task->data[4] - xOffset - 4;
|
||
|
xCoords[2] = task->data[4] + xOffset;
|
||
|
xCoords[3] = task->data[4] + xOffset + 4;
|
||
|
yCoords[0] = task->data[5] + yOffset;
|
||
|
yCoords[1] = task->data[5] + yOffset + 6;
|
||
|
|
||
|
for (i = 0; i < 4; i++)
|
||
|
{
|
||
|
u8 spriteId = CreateSprite(&gUnknown_085CE76C, xCoords[i], yCoords[i & 1], task->data[6] - 5);
|
||
|
if (spriteId != MAX_SPRITES)
|
||
|
{
|
||
|
gSprites[spriteId].data[0] = 0;
|
||
|
gSprites[spriteId].data[1] = i < 2 ? -2 : 2;
|
||
|
gSprites[spriteId].data[2] = -1;
|
||
|
gSprites[spriteId].data[3] = taskId;
|
||
|
gSprites[spriteId].data[4] = 2;
|
||
|
task->data[2]++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815DEBC(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->pos1.x += sprite->data[1];
|
||
|
sprite->pos1.y += sprite->data[2];
|
||
|
if (++sprite->data[0] > 6)
|
||
|
{
|
||
|
gTasks[sprite->data[3]].data[sprite->data[4]]--;
|
||
|
DestroySprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815DF0C(u8 taskId)
|
||
|
{
|
||
|
u8 spriteId;
|
||
|
|
||
|
gTasks[taskId].data[0] = 0;
|
||
|
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
||
|
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||
|
gTasks[taskId].data[2] = 0x100 + gSprites[spriteId].oam.paletteNum * 16;
|
||
|
gTasks[taskId].func = sub_815DF64;
|
||
|
}
|
||
|
|
||
|
static void sub_815DF64(u8 taskId)
|
||
|
{
|
||
|
if (gTasks[taskId].data[1])
|
||
|
{
|
||
|
BlendPalette(gTasks[taskId].data[2], 16, 8, gUnknown_085CE784[gTasks[taskId].data[0]]);
|
||
|
if (++gTasks[taskId].data[0] > 23)
|
||
|
gTasks[taskId].data[0] = 0;
|
||
|
|
||
|
gTasks[taskId].data[1]--;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
BlendPalette(gTasks[taskId].data[2], 16, 0, RGB(0, 0, 0));
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815DFCC(u8 taskId)
|
||
|
{
|
||
|
sub_8117854(
|
||
|
taskId,
|
||
|
0,
|
||
|
0x1A0,
|
||
|
gBattleAnimAttacker,
|
||
|
gBattleAnimArgs[0],
|
||
|
10,
|
||
|
2,
|
||
|
30,
|
||
|
gUnknown_08C2DC68,
|
||
|
gUnknown_08C2DDC4,
|
||
|
gUnknown_08C2DDA4);
|
||
|
}
|
||
|
|
||
|
void sub_815E01C(struct Sprite *sprite)
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
|
||
|
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||
|
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
|
||
|
if (gBattleAnimArgs[2] == 0)
|
||
|
{
|
||
|
sprite->data[0] = 640;
|
||
|
sprite->data[1] = -640;
|
||
|
}
|
||
|
else if (gBattleAnimArgs[2] == 1)
|
||
|
{
|
||
|
sprite->vFlip = 1;
|
||
|
sprite->data[0] = 640;
|
||
|
sprite->data[1] = 640;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
StartSpriteAnim(sprite, 1);
|
||
|
sprite->data[0] = 640;
|
||
|
}
|
||
|
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||
|
{
|
||
|
sprite->data[0] = -sprite->data[0];
|
||
|
sprite->hFlip = 1;
|
||
|
}
|
||
|
|
||
|
sprite->callback = sub_815E0DC;
|
||
|
}
|
||
|
|
||
|
static void sub_815E0DC(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->data[6] += sprite->data[0];
|
||
|
sprite->data[7] += sprite->data[1];
|
||
|
sprite->pos2.x = sprite->data[6] >> 8;
|
||
|
sprite->pos2.y = sprite->data[7] >> 8;
|
||
|
if (++sprite->data[5] == 14)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
|
||
|
void sub_815E114(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
if (IsContest())
|
||
|
{
|
||
|
task->data[5] = 8;
|
||
|
task->data[6] = 3;
|
||
|
task->data[7] = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[5] = 12;
|
||
|
task->data[6] = 3;
|
||
|
task->data[7] = 0;
|
||
|
}
|
||
|
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||
|
task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + sub_80A861C(gBattleAnimAttacker, 0) / 4;
|
||
|
else
|
||
|
task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - sub_80A861C(gBattleAnimAttacker, 0) / 4;
|
||
|
|
||
|
task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - sub_80A861C(gBattleAnimAttacker, 0) / 4;
|
||
|
task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||
|
task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||
|
task->func = sub_815E20C;
|
||
|
}
|
||
|
|
||
|
static void sub_815E20C(u8 taskId)
|
||
|
{
|
||
|
u8 i;
|
||
|
s16 x, y;
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
switch (task->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
if (++task->data[1] > 3)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
sub_815E34C(
|
||
|
task->data[11],
|
||
|
task->data[12],
|
||
|
task->data[13],
|
||
|
task->data[14],
|
||
|
task->data[5],
|
||
|
task->data[2],
|
||
|
&x,
|
||
|
&y);
|
||
|
|
||
|
for (i = 0; i < 2; i++)
|
||
|
{
|
||
|
u8 spriteId = CreateSprite(&gUnknown_085CE7EC, x, y, 35);
|
||
|
if (spriteId != MAX_SPRITES)
|
||
|
{
|
||
|
if (task->data[7] == 0)
|
||
|
{
|
||
|
if (i == 0)
|
||
|
gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = -task->data[6];
|
||
|
else
|
||
|
gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = task->data[6];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (i == 0)
|
||
|
{
|
||
|
gSprites[spriteId].pos2.x = -task->data[6];
|
||
|
gSprites[spriteId].pos2.y = task->data[6];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gSprites[spriteId].pos2.x = task->data[6];
|
||
|
gSprites[spriteId].pos2.y = -task->data[6];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
gSprites[spriteId].data[0] = 0;
|
||
|
gSprites[spriteId].data[1] = taskId;
|
||
|
gSprites[spriteId].data[2] = 10;
|
||
|
task->data[10]++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (task->data[2] == task->data[5])
|
||
|
task->data[0]++;
|
||
|
|
||
|
task->data[2]++;
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
if (task->data[10] == 0)
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815E34C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y)
|
||
|
{
|
||
|
int x2;
|
||
|
int y2;
|
||
|
|
||
|
if (arg5 == 0)
|
||
|
{
|
||
|
*x = arg0;
|
||
|
*y = arg1;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (arg5 >= arg4)
|
||
|
{
|
||
|
*x = arg2;
|
||
|
*y = arg3;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
arg4--;
|
||
|
x2 = (arg0 << 8) + arg5 * (((arg2 - arg0) << 8) / arg4);
|
||
|
y2 = (arg1 << 8) + arg5 * (((arg3 - arg1) << 8) / arg4);
|
||
|
*x = x2 >> 8;
|
||
|
*y = y2 >> 8;
|
||
|
}
|
||
|
|
||
|
void sub_815E404(struct Sprite *sprite)
|
||
|
{
|
||
|
if (++sprite->data[0] > 36)
|
||
|
{
|
||
|
gTasks[sprite->data[1]].data[sprite->data[2]]--;
|
||
|
DestroySprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815E444(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->pos1.x = gBattleAnimArgs[0];
|
||
|
sprite->pos1.y = gBattleAnimArgs[1];
|
||
|
sprite->data[2] = gBattleAnimArgs[2];
|
||
|
sprite->data[4] = gBattleAnimArgs[3];
|
||
|
sprite->data[0] = gBattleAnimArgs[4];
|
||
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||
|
sprite->callback = sub_80A70C0;
|
||
|
}
|
||
|
|
||
|
void sub_815E47C(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||
|
task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
||
|
task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||
|
task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + sub_80A861C(gBattleAnimTarget, 0) / 4;
|
||
|
task->data[15] = CreateSprite(&gUnknown_085CE84C, task->data[11], task->data[12], GetBattlerSpriteSubpriority(gBattleAnimTarget) - 5);
|
||
|
if (task->data[15] != MAX_SPRITES)
|
||
|
{
|
||
|
gSprites[task->data[15]].data[0] = 16;
|
||
|
gSprites[task->data[15]].data[2] = task->data[13];
|
||
|
gSprites[task->data[15]].data[4] = task->data[14];
|
||
|
gSprites[task->data[15]].data[5] = -32;
|
||
|
InitAnimArcTranslation(&gSprites[task->data[15]]);
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
|
||
|
StartSpriteAffineAnim(&gSprites[task->data[15]], 1);
|
||
|
|
||
|
task->func = sub_815E5CC;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815E5CC(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
switch (task->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
if (++task->data[1] > 1)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
TranslateAnimArc(&gSprites[task->data[15]]);
|
||
|
if (++task->data[2] > 7)
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
if (TranslateAnimArc(&gSprites[task->data[15]]))
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[2] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
if (++task->data[1] > 1)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[2]++;
|
||
|
gSprites[task->data[15]].invisible = task->data[2] & 1;
|
||
|
if (task->data[2] == 16)
|
||
|
{
|
||
|
FreeOamMatrix(gSprites[task->data[15]].oam.matrixNum);
|
||
|
DestroySprite(&gSprites[task->data[15]]);
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815E6D8(struct Sprite *sprite)
|
||
|
{
|
||
|
u8 battler;
|
||
|
|
||
|
if (gBattleAnimArgs[0] == 0)
|
||
|
battler = gBattleAnimAttacker;
|
||
|
else
|
||
|
battler = gBattleAnimTarget;
|
||
|
|
||
|
sprite->oam.tileNum += 16;
|
||
|
sprite->data[6] = gBattleAnimArgs[2];
|
||
|
sprite->data[7] = gBattleAnimArgs[1] == 0 ? -1 : 1;
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(battler, 3);
|
||
|
if (gBattleAnimArgs[1] == 0)
|
||
|
{
|
||
|
sprite->oam.matrixNum |= 0x8;
|
||
|
sprite->pos1.x = sub_80A861C(battler, 4) - 8;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos1.x = sub_80A861C(battler, 5) + 8;
|
||
|
}
|
||
|
|
||
|
sprite->callback = sub_815E784;
|
||
|
}
|
||
|
|
||
|
static void sub_815E784(struct Sprite *sprite)
|
||
|
{
|
||
|
switch (sprite->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
if (++sprite->data[1] > 1)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->pos2.x += sprite->data[7];
|
||
|
if (++sprite->data[2] == 12)
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
if (++sprite->data[1] == 8)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
sprite->pos2.x -= sprite->data[7] * 4;
|
||
|
if (++sprite->data[1] == 6)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
sprite->pos2.x += sprite->data[7] * 3;
|
||
|
if (++sprite->data[1] == 8)
|
||
|
{
|
||
|
if (--sprite->data[6])
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]--;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815E840(u8 taskId)
|
||
|
{
|
||
|
if (gBattleAnimArgs[0] == 0)
|
||
|
{
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gTasks[taskId].data[0] = gBattleAnimArgs[1];
|
||
|
gTasks[taskId].data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||
|
PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C);
|
||
|
gTasks[taskId].func = sub_815E898;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815E898(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
if (++task->data[1] > 1)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
if (!(task->data[2] & 1))
|
||
|
gSprites[task->data[15]].pos2.x = 2;
|
||
|
else
|
||
|
gSprites[task->data[15]].pos2.x = -2;
|
||
|
}
|
||
|
|
||
|
if (!RunAffineAnimFromTaskData(task))
|
||
|
{
|
||
|
gSprites[task->data[15]].pos2.x = 0;
|
||
|
if (--task->data[0])
|
||
|
{
|
||
|
PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C);
|
||
|
task->data[1] = 0;
|
||
|
task->data[2] = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815E954(struct Sprite *sprite)
|
||
|
{
|
||
|
if (gBattleAnimArgs[0] == 0)
|
||
|
{
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
||
|
sprite->pos1.y = sub_80A861C(gBattleAnimAttacker, 2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
||
|
sprite->pos1.y = sub_80A861C(gBattleAnimTarget, 2);
|
||
|
}
|
||
|
|
||
|
if (sprite->pos1.y < 8)
|
||
|
sprite->pos1.y = 8;
|
||
|
|
||
|
sprite->data[0] = 0;
|
||
|
sprite->data[1] = gBattleAnimArgs[1];
|
||
|
sprite->data[2] = 0;
|
||
|
sprite->data[3] = gBattleAnimArgs[2];
|
||
|
sprite->callback = sub_815E9BC;
|
||
|
}
|
||
|
|
||
|
static void sub_815E9BC(struct Sprite *sprite)
|
||
|
{
|
||
|
if (++sprite->data[0] >= sprite->data[1])
|
||
|
{
|
||
|
sprite->data[0] = 0;
|
||
|
sprite->data[2] = (sprite->data[2] + 1) & 1;
|
||
|
sprite->invisible = sprite->data[2];
|
||
|
if (sprite->data[2] && --sprite->data[3] == 0)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815EA14(struct Sprite *sprite)
|
||
|
{
|
||
|
if (gBattleAnimArgs[0] == 0)
|
||
|
{
|
||
|
sprite->oam.matrixNum |= 0x8;
|
||
|
sprite->pos1.x = 100;
|
||
|
sprite->data[7] = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->pos1.x = 140;
|
||
|
sprite->data[7] = -1;
|
||
|
}
|
||
|
|
||
|
sprite->pos1.y = 56;
|
||
|
sprite->callback = sub_815EA60;
|
||
|
}
|
||
|
|
||
|
static void sub_815EA60(struct Sprite *sprite)
|
||
|
{
|
||
|
switch (sprite->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
sprite->pos1.y -= sprite->data[7] * 2;
|
||
|
if (sprite->data[1] & 1)
|
||
|
sprite->pos1.x -= sprite->data[7] * 2;
|
||
|
|
||
|
if (++sprite->data[1] == 9)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
if (++sprite->data[1] == 4)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
sprite->data[1]++;
|
||
|
sprite->pos1.y += sprite->data[7] * 3;
|
||
|
sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
|
||
|
if (sprite->data[1] == 12)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
if (++sprite->data[1] == 2)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
sprite->data[1]++;
|
||
|
sprite->pos1.y -= sprite->data[7] * 3;
|
||
|
sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
|
||
|
if (sprite->data[1] == 12)
|
||
|
sprite->data[0]++;
|
||
|
break;
|
||
|
case 5:
|
||
|
sprite->data[1]++;
|
||
|
sprite->pos1.y += sprite->data[7] * 3;
|
||
|
sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
|
||
|
if (sprite->data[1] == 15)
|
||
|
sprite->oam.tileNum += 16;
|
||
|
|
||
|
if (sprite->data[1] == 18)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 6:
|
||
|
sprite->pos1.x += sprite->data[7] * 6;
|
||
|
if (++sprite->data[1] == 9)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 7:
|
||
|
sprite->pos1.x += sprite->data[7] * 2;
|
||
|
if (++sprite->data[1] == 1)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 8:
|
||
|
sprite->pos1.x -= sprite->data[7] * 3;
|
||
|
if (++sprite->data[1] == 5)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815EC48(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||
|
if (!IsContest())
|
||
|
{
|
||
|
if (IsDoubleBattle() == TRUE)
|
||
|
{
|
||
|
int x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
|
||
|
int y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), 0);
|
||
|
if (x > y)
|
||
|
task->data[14] = 1;
|
||
|
else
|
||
|
task->data[14] = -1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
||
|
task->data[14] = -1;
|
||
|
else
|
||
|
task->data[14] = 1;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[14] = 1;
|
||
|
}
|
||
|
|
||
|
task->func = sub_815ECE4;
|
||
|
}
|
||
|
|
||
|
static void sub_815ECE4(u8 taskId)
|
||
|
{
|
||
|
struct Task *task = &gTasks[taskId];
|
||
|
|
||
|
switch (task->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
if (++task->data[1] == 13)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
gSprites[task->data[15]].pos2.x -= task->data[14] * 3;
|
||
|
if (++task->data[1] == 6)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
gSprites[task->data[15]].pos2.x += task->data[14] * 3;
|
||
|
if (++task->data[1] == 6)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
if (++task->data[1] == 2)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
if (task->data[2] == 0)
|
||
|
{
|
||
|
task->data[2]++;
|
||
|
task->data[0] = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
gSprites[task->data[15]].pos2.x += task->data[14];
|
||
|
if (++task->data[1] == 3)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 5:
|
||
|
if (++task->data[1] == 6)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 6:
|
||
|
gSprites[task->data[15]].pos2.x -= task->data[14] * 4;
|
||
|
if (++task->data[1] == 5)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 7:
|
||
|
gSprites[task->data[15]].pos2.x += task->data[14] * 4;
|
||
|
if (++task->data[1] == 5)
|
||
|
{
|
||
|
task->data[1] = 0;
|
||
|
task->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 8:
|
||
|
gSprites[task->data[15]].pos2.x = 0;
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815EE84(struct Sprite *sprite)
|
||
|
{
|
||
|
if (gBattleAnimArgs[0] == 0)
|
||
|
{
|
||
|
InitAnimSpritePos(sprite, TRUE);
|
||
|
sprite->data[7] = gBattleAnimAttacker;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->data[7] = gBattleAnimTarget;
|
||
|
}
|
||
|
|
||
|
if (GetBattlerSide(sprite->data[7]) == B_SIDE_OPPONENT)
|
||
|
sprite->oam.matrixNum = 8;
|
||
|
|
||
|
sprite->oam.priority = sub_80A8328(sprite->data[7]);
|
||
|
sprite->oam.objMode = ST_OAM_OBJ_BLEND;
|
||
|
sprite->callback = sub_815EF08;
|
||
|
}
|
||
|
|
||
|
static void sub_815EF08(struct Sprite *sprite)
|
||
|
{
|
||
|
u16 x, y;
|
||
|
|
||
|
switch (sprite->data[5])
|
||
|
{
|
||
|
case 0:
|
||
|
switch (sprite->data[6])
|
||
|
{
|
||
|
default:
|
||
|
sprite->data[6] = 0;
|
||
|
case 0:
|
||
|
case 4:
|
||
|
x = sub_80A861C(sprite->data[7], 5) - 4;
|
||
|
y = sub_80A861C(sprite->data[7], 3) - 4;
|
||
|
break;
|
||
|
case 1:
|
||
|
x = sub_80A861C(sprite->data[7], 5) - 4;
|
||
|
y = sub_80A861C(sprite->data[7], 2) + 4;
|
||
|
break;
|
||
|
case 2:
|
||
|
x = sub_80A861C(sprite->data[7], 4) + 4;
|
||
|
y = sub_80A861C(sprite->data[7], 3) - 4;
|
||
|
break;
|
||
|
case 3:
|
||
|
x = sub_80A861C(sprite->data[7], 4) + 4;
|
||
|
y = sub_80A861C(sprite->data[7], 2) - 4;
|
||
|
break;
|
||
|
case 5:
|
||
|
x = GetBattlerSpriteCoord(sprite->data[7], 2);
|
||
|
y = GetBattlerSpriteCoord(sprite->data[7], 3);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (sprite->data[6] == 4)
|
||
|
sprite->data[0] = 24;
|
||
|
else if (sprite->data[6] == 5)
|
||
|
sprite->data[0] = 6;
|
||
|
else
|
||
|
sprite->data[0] = 12;
|
||
|
|
||
|
sprite->data[1] = sprite->pos1.x;
|
||
|
sprite->data[2] = x;
|
||
|
sprite->data[3] = sprite->pos1.y;
|
||
|
sprite->data[4] = y;
|
||
|
InitAnimLinearTranslation(sprite);
|
||
|
sprite->data[5]++;
|
||
|
break;
|
||
|
case 1:
|
||
|
if (TranslateAnimLinear(sprite))
|
||
|
{
|
||
|
switch (sprite->data[6])
|
||
|
{
|
||
|
default:
|
||
|
sprite->pos1.x += sprite->pos2.x;
|
||
|
sprite->pos1.y += sprite->pos2.y;
|
||
|
sprite->pos2.y = 0;
|
||
|
sprite->pos2.x = 0;
|
||
|
sprite->data[0] = 0;
|
||
|
sprite->data[5]++;
|
||
|
sprite->data[6]++;
|
||
|
break;
|
||
|
case 4:
|
||
|
sprite->pos1.x += sprite->pos2.x;
|
||
|
sprite->pos1.y += sprite->pos2.y;
|
||
|
sprite->pos2.y = 0;
|
||
|
sprite->pos2.x = 0;
|
||
|
sprite->data[5] = 0;
|
||
|
sprite->data[6]++;
|
||
|
break;
|
||
|
case 5:
|
||
|
sprite->data[0] = 0;
|
||
|
sprite->data[1] = 16;
|
||
|
sprite->data[2] = 0;
|
||
|
sprite->data[5] = 3;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
if (++sprite->data[0] == 4)
|
||
|
sprite->data[5] = 0;
|
||
|
break;
|
||
|
case 3:
|
||
|
if (!(sprite->data[0] & 1))
|
||
|
sprite->data[1]--;
|
||
|
else
|
||
|
sprite->data[2]++;
|
||
|
|
||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], sprite->data[2]));
|
||
|
if (++sprite->data[0] == 32)
|
||
|
{
|
||
|
sprite->invisible = 1;
|
||
|
sprite->data[5]++;
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
DestroyAnimSprite(sprite);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815F10C(struct Sprite *sprite)
|
||
|
{
|
||
|
sprite->pos2.x = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4];
|
||
|
sprite->pos2.y = ((sprite->data[3] - sprite->data[1]) * sprite->data[5]) / sprite->data[4];
|
||
|
if (!(sprite->data[5] & 1))
|
||
|
{
|
||
|
CreateSprite(
|
||
|
&gUnknown_085CE3A0,
|
||
|
sprite->pos1.x + sprite->pos2.x,
|
||
|
sprite->pos1.y + sprite->pos2.y, 5);
|
||
|
}
|
||
|
|
||
|
if (sprite->data[5] == sprite->data[4])
|
||
|
DestroyAnimSprite(sprite);
|
||
|
|
||
|
sprite->data[5]++;
|
||
|
}
|
||
|
|
||
|
void sub_815F18C(struct Sprite *sprite)
|
||
|
{
|
||
|
GetBattlerSpriteCoord(gBattleAnimTarget, 2); // unused local variable
|
||
|
GetBattlerSpriteCoord(gBattleAnimTarget, 3); // unused local variable
|
||
|
|
||
|
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER || IsContest())
|
||
|
{
|
||
|
sprite->data[0] = sprite->pos1.x - gBattleAnimArgs[0];
|
||
|
sprite->data[2] = sprite->pos1.x - gBattleAnimArgs[2];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->data[0] = sprite->pos1.x + gBattleAnimArgs[0];
|
||
|
sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
|
||
|
}
|
||
|
|
||
|
sprite->data[1] = sprite->pos1.y + gBattleAnimArgs[1];
|
||
|
sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[3];
|
||
|
sprite->data[4] = gBattleAnimArgs[4];
|
||
|
sprite->pos1.x = sprite->data[0];
|
||
|
sprite->pos1.y = sprite->data[1];
|
||
|
sprite->callback = sub_815F10C;
|
||
|
}
|
||
|
|
||
|
void AnimTask_MonToSubstitute(u8 taskId)
|
||
|
{
|
||
|
int i;
|
||
|
u8 spriteId = GetAnimBattlerSpriteId(0);
|
||
|
|
||
|
if (gTasks[taskId].data[0] == 0)
|
||
|
{
|
||
|
PrepareBattlerSpriteForRotScale(spriteId, FALSE);
|
||
|
gTasks[taskId].data[1] = 0x100;
|
||
|
gTasks[taskId].data[2] = 0x100;
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
else if (gTasks[taskId].data[0] == 1)
|
||
|
{
|
||
|
gTasks[taskId].data[1] += 0x60;
|
||
|
gTasks[taskId].data[2] -= 0xD;
|
||
|
SetSpriteRotScale(spriteId, gTasks[taskId].data[1], gTasks[taskId].data[2], 0);
|
||
|
if (++gTasks[taskId].data[3] == 9)
|
||
|
{
|
||
|
gTasks[taskId].data[3] = 0;
|
||
|
ResetSpriteRotScale(spriteId);
|
||
|
gSprites[spriteId].invisible = 1;
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, 0, spriteId);
|
||
|
if (IsContest())
|
||
|
{
|
||
|
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
|
||
|
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < 16; i++)
|
||
|
gTasks[taskId].data[i] = 0;
|
||
|
|
||
|
gTasks[taskId].func = sub_815F330;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void sub_815F330(u8 taskId)
|
||
|
{
|
||
|
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||
|
|
||
|
switch (gTasks[taskId].data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
gSprites[spriteId].pos2.y = -200;
|
||
|
gSprites[spriteId].pos2.x = 200;
|
||
|
gSprites[spriteId].invisible = 0;
|
||
|
gTasks[taskId].data[10] = 0;
|
||
|
gTasks[taskId].data[0]++;
|
||
|
break;
|
||
|
case 1:
|
||
|
gTasks[taskId].data[10] += 112;
|
||
|
gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8;
|
||
|
if (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y >= -32)
|
||
|
gSprites[spriteId].pos2.x = 0;
|
||
|
|
||
|
if (gSprites[spriteId].pos2.y > 0)
|
||
|
gSprites[spriteId].pos2.y = 0;
|
||
|
|
||
|
if (gSprites[spriteId].pos2.y == 0)
|
||
|
{
|
||
|
PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
|
||
|
gTasks[taskId].data[10] -= 0x800;
|
||
|
gTasks[taskId].data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
gTasks[taskId].data[10] -= 112;
|
||
|
if (gTasks[taskId].data[10] < 0)
|
||
|
gTasks[taskId].data[10] = 0;
|
||
|
|
||
|
gSprites[spriteId].pos2.y -= gTasks[taskId].data[10] >> 8;
|
||
|
if (gTasks[taskId].data[10] == 0)
|
||
|
gTasks[taskId].data[0]++;
|
||
|
break;
|
||
|
case 3:
|
||
|
gTasks[taskId].data[10] += 112;
|
||
|
gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8;
|
||
|
if (gSprites[spriteId].pos2.y > 0)
|
||
|
gSprites[spriteId].pos2.y = 0;
|
||
|
|
||
|
if (gSprites[spriteId].pos2.y == 0)
|
||
|
{
|
||
|
PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815F48C(struct Sprite *sprite)
|
||
|
{
|
||
|
s16 y2;
|
||
|
|
||
|
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
||
|
{
|
||
|
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
|
||
|
y2 = -144;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 2;
|
||
|
y2 = -96;
|
||
|
}
|
||
|
|
||
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
||
|
sprite->pos2.y = y2;
|
||
|
sprite->callback = sub_815F4F0;
|
||
|
}
|
||
|
|
||
|
static void sub_815F4F0(struct Sprite *sprite)
|
||
|
{
|
||
|
switch (sprite->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
sprite->pos2.y += 10;
|
||
|
if (sprite->pos2.y >= 0)
|
||
|
{
|
||
|
PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
|
||
|
sprite->pos2.y = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
sprite->data[1] += 4;
|
||
|
sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 3);
|
||
|
if (sprite->data[1] > 127)
|
||
|
{
|
||
|
PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->pos2.y = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
sprite->data[1] += 6;
|
||
|
sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 4);
|
||
|
if (sprite->data[1] > 127)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->pos2.y = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
if (++sprite->data[1] > 8)
|
||
|
{
|
||
|
PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63));
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
if (++sprite->data[1] > 8)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
sprite->data[2]++;
|
||
|
sprite->invisible = sprite->data[2] & 1;
|
||
|
if (sprite->data[2] == 7)
|
||
|
DestroyAnimSprite(sprite);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sub_815F620(u8 taskId)
|
||
|
{
|
||
|
s16 spriteId1, spriteId2;
|
||
|
|
||
|
if (IsContest())
|
||
|
{
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
spriteId1 = CloneBattlerSpriteWithBlend(ANIM_TARGET);
|
||
|
if (spriteId1 < 0)
|
||
|
{
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
spriteId2 = CloneBattlerSpriteWithBlend(ANIM_TARGET);
|
||
|
if (spriteId2 < 0)
|
||
|
{
|
||
|
obj_delete_but_dont_free_vram(&gSprites[spriteId1]);
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
gSprites[spriteId2].pos2.x += 24;
|
||
|
gSprites[spriteId1].pos2.x -= 24;
|
||
|
gSprites[spriteId2].data[0] = 0;
|
||
|
gSprites[spriteId1].data[0] = 0;
|
||
|
gSprites[spriteId2].data[1] = 0;
|
||
|
gSprites[spriteId1].data[1] = 0;
|
||
|
gSprites[spriteId2].data[2] = 0;
|
||
|
gSprites[spriteId1].data[2] = 0;
|
||
|
gSprites[spriteId2].data[3] = 16;
|
||
|
gSprites[spriteId1].data[3] = -16;
|
||
|
gSprites[spriteId2].data[4] = 0;
|
||
|
gSprites[spriteId1].data[4] = 128;
|
||
|
gSprites[spriteId2].data[5] = 24;
|
||
|
gSprites[spriteId1].data[5] = 24;
|
||
|
gSprites[spriteId2].data[6] = taskId;
|
||
|
gSprites[spriteId1].data[6] = taskId;
|
||
|
gSprites[spriteId2].data[7] = 0;
|
||
|
gSprites[spriteId1].data[7] = 0;
|
||
|
gTasks[taskId].data[0] = 2;
|
||
|
|
||
|
if (!gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible)
|
||
|
{
|
||
|
gSprites[spriteId2].invisible = 0;
|
||
|
gSprites[spriteId1].invisible = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gSprites[spriteId2].invisible = 1;
|
||
|
gSprites[spriteId1].invisible = 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
gSprites[spriteId2].oam.objMode = ST_OAM_OBJ_NORMAL;
|
||
|
gSprites[spriteId1].oam.objMode = ST_OAM_OBJ_NORMAL;
|
||
|
gSprites[spriteId2].callback = sub_815F7C4;
|
||
|
gSprites[spriteId1].callback = sub_815F7C4;
|
||
|
gTasks[taskId].func = sub_815F79C;
|
||
|
}
|
||
|
|
||
|
static void sub_815F79C(u8 taskId)
|
||
|
{
|
||
|
if (gTasks[taskId].data[0] == 0)
|
||
|
DestroyAnimVisualTask(taskId);
|
||
|
}
|
||
|
|
||
|
static void sub_815F7C4(struct Sprite *sprite)
|
||
|
{
|
||
|
int zero = 0;
|
||
|
if (++sprite->data[1] > 1)
|
||
|
{
|
||
|
sprite->data[1] = 0;
|
||
|
if (!gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible)
|
||
|
sprite->invisible ^= 1;
|
||
|
}
|
||
|
|
||
|
sprite->data[4] = sprite->data[4] + sprite->data[3];
|
||
|
sprite->data[4] &= 0xFF;
|
||
|
sprite->pos2.x = Cos(sprite->data[4], sprite->data[5]);
|
||
|
switch (sprite->data[0])
|
||
|
{
|
||
|
case 0:
|
||
|
if (++sprite->data[2] == 60)
|
||
|
{
|
||
|
sprite->data[2] = 0;
|
||
|
sprite->data[0]++;
|
||
|
}
|
||
|
break;
|
||
|
case 1:
|
||
|
if (++sprite->data[2] > 0)
|
||
|
{
|
||
|
sprite->data[2] = 0;
|
||
|
sprite->data[5] -= 2;
|
||
|
if (sprite->data[5] < 0)
|
||
|
{
|
||
|
gTasks[sprite->data[6]].data[sprite->data[7]]--;
|
||
|
obj_delete_but_dont_free_vram(sprite);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|