2018-12-16 18:35:10 +01:00
|
|
|
#include "global.h"
|
2018-12-18 04:56:34 +01:00
|
|
|
#include "alloc.h"
|
2018-12-16 18:35:10 +01:00
|
|
|
#include "battle_anim.h"
|
|
|
|
#include "battle_interface.h"
|
2018-12-18 04:56:34 +01:00
|
|
|
#include "decompress.h"
|
2018-12-16 18:35:10 +01:00
|
|
|
#include "gpu_regs.h"
|
2018-12-18 04:56:34 +01:00
|
|
|
#include "graphics.h"
|
|
|
|
#include "main.h"
|
|
|
|
#include "math_util.h"
|
2018-12-16 18:35:10 +01:00
|
|
|
#include "palette.h"
|
|
|
|
#include "random.h"
|
2018-12-18 04:56:34 +01:00
|
|
|
#include "scanline_effect.h"
|
2018-12-16 18:35:10 +01:00
|
|
|
#include "sound.h"
|
|
|
|
#include "trig.h"
|
|
|
|
#include "util.h"
|
|
|
|
#include "constants/rgb.h"
|
|
|
|
#include "constants/songs.h"
|
|
|
|
|
|
|
|
EWRAM_DATA s16 gUnknown_0203A0F8[4] = {0};
|
|
|
|
|
|
|
|
void AnimMovePowderParticle(struct Sprite *);
|
2018-12-20 04:13:26 +01:00
|
|
|
void AnimPowerAbsorptionOrb(struct Sprite *);
|
|
|
|
void AnimSolarbeamBigOrb(struct Sprite *);
|
|
|
|
void AnimSolarbeamSmallOrb(struct Sprite *);
|
|
|
|
void AnimAbsorptionOrb(struct Sprite *);
|
|
|
|
void AnimHyperBeamOrb(struct Sprite *);
|
|
|
|
void AnimSporeParticle(struct Sprite *);
|
|
|
|
void AnimPetalDanceBigFlower(struct Sprite *);
|
|
|
|
void AnimPetalDanceSmallFlower(struct Sprite *);
|
|
|
|
void AnimRazorLeafParticle(struct Sprite *);
|
2018-12-16 18:35:10 +01:00
|
|
|
void AnimLeechSeed(struct Sprite *);
|
|
|
|
void AnimTranslateLinearSingleSineWave(struct Sprite *);
|
|
|
|
void AnimMoveTwisterParticle(struct Sprite *);
|
2018-12-20 04:13:26 +01:00
|
|
|
void AnimConstrictBinding(struct Sprite *);
|
|
|
|
void AnimMimicOrb(struct Sprite *);
|
|
|
|
void AnimIngrainRoot(struct Sprite *);
|
|
|
|
void AnimFrenzyPlantRoot(struct Sprite *);
|
|
|
|
void AnimIngrainOrb(struct Sprite *);
|
|
|
|
void AnimPresent(struct Sprite *);
|
|
|
|
void AnimKnockOffItem(struct Sprite *);
|
|
|
|
void AnimPresentHealParticle(struct Sprite *);
|
|
|
|
void AnimItemSteal(struct Sprite *);
|
|
|
|
void AnimTrickBag(struct Sprite *);
|
2018-12-16 18:35:10 +01:00
|
|
|
void sub_8100640(struct Sprite *);
|
|
|
|
void sub_8100898(struct Sprite *);
|
|
|
|
void sub_81009F8(struct Sprite *);
|
|
|
|
void sub_8100A50(struct Sprite *);
|
|
|
|
void sub_8100A94(struct Sprite *);
|
|
|
|
void AnimCuttingSlice(struct Sprite *);
|
|
|
|
void sub_8100B88(struct Sprite *);
|
|
|
|
void sub_8100E1C(struct Sprite *);
|
|
|
|
void sub_8100EF0(struct Sprite *);
|
|
|
|
void sub_81010CC(struct Sprite *);
|
|
|
|
void sub_810130C(struct Sprite *);
|
|
|
|
void sub_810135C(struct Sprite *);
|
|
|
|
void sub_8101440(struct Sprite *);
|
|
|
|
void sub_81014F4(struct Sprite *);
|
|
|
|
void sub_81015AC(struct Sprite *);
|
|
|
|
void sub_8101898(struct Sprite *);
|
|
|
|
void sub_8101940(struct Sprite *);
|
|
|
|
void sub_8101B90(struct Sprite *);
|
|
|
|
void sub_8101F40(struct Sprite *);
|
|
|
|
void sub_8101FA8(struct Sprite *);
|
|
|
|
void sub_8101FF0(struct Sprite *);
|
|
|
|
void sub_81020D8(struct Sprite *);
|
|
|
|
void sub_810217C(struct Sprite *);
|
|
|
|
void sub_8102268(struct Sprite *);
|
|
|
|
void sub_810234C(struct Sprite *);
|
|
|
|
void sub_81024E0(struct Sprite *);
|
|
|
|
void sub_8102540(struct Sprite *);
|
|
|
|
void sub_8102844(struct Sprite *);
|
|
|
|
void sub_8102BCC(struct Sprite *);
|
|
|
|
void sub_8102CD4(struct Sprite *);
|
|
|
|
void sub_8102EB0(struct Sprite *);
|
|
|
|
void sub_8102FB8(struct Sprite *);
|
|
|
|
void sub_8103028(struct Sprite *);
|
|
|
|
void sub_8103164(struct Sprite *);
|
|
|
|
void sub_8103208(struct Sprite *);
|
|
|
|
void sub_8103284(struct Sprite *);
|
|
|
|
void sub_8103390(struct Sprite *);
|
|
|
|
static void AnimMovePowderParticleStep(struct Sprite *);
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimSolarbeamSmallOrbStep(struct Sprite *);
|
|
|
|
static void AnimAbsorptionOrbStep(struct Sprite *);
|
|
|
|
static void AnimHyperBeamOrbStep(struct Sprite *);
|
2018-12-16 18:35:10 +01:00
|
|
|
static void AnimLeechSeedStep(struct Sprite *);
|
|
|
|
static void AnimLeechSeedSprouts(struct Sprite *);
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimSporeParticleStep(struct Sprite *);
|
|
|
|
static void AnimPetalDanceBigFlowerStep(struct Sprite *);
|
|
|
|
static void AnimPetalDanceSmallFlowerStep(struct Sprite *);
|
|
|
|
static void AnimRazorLeafParticleStep1(struct Sprite *);
|
|
|
|
static void AnimRazorLeafParticleStep2(struct Sprite *);
|
2018-12-16 18:35:10 +01:00
|
|
|
static void AnimTranslateLinearSingleSineWaveStep(struct Sprite *);
|
|
|
|
static void AnimMoveTwisterParticleStep(struct Sprite *);
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimConstrictBindingStep1(struct Sprite *);
|
|
|
|
static void AnimConstrictBindingStep2(struct Sprite *);
|
2018-12-16 18:35:10 +01:00
|
|
|
static void sub_80FF53C(u8);
|
|
|
|
static void sub_80FF5CC(u8);
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimItemStealStep(struct Sprite *);
|
|
|
|
static void AnimRootFlickerOut(struct Sprite *);
|
|
|
|
static void AnimTrickBagStep1(struct Sprite *);
|
|
|
|
static void AnimTrickBagStep2(struct Sprite *);
|
|
|
|
static void AnimTrickBagStep3(struct Sprite *);
|
2018-12-16 18:35:10 +01:00
|
|
|
static void sub_8100128(u8);
|
|
|
|
static s16 sub_8100504(struct Sprite *);
|
|
|
|
static void sub_8100524(struct Task *, u8);
|
|
|
|
static void sub_80CC408(struct Sprite *);
|
|
|
|
static void sub_810074C(struct Sprite *);
|
|
|
|
static void sub_81009A0(struct Sprite *);
|
|
|
|
static void AnimSliceStep(struct Sprite *);
|
|
|
|
static void sub_8100E80(struct Sprite *);
|
|
|
|
static void sub_8100FD4(struct Sprite *);
|
|
|
|
static void sub_8101138(struct Sprite *);
|
|
|
|
static void sub_8101298(struct Sprite *, int, int);
|
|
|
|
static void sub_81014A0(struct Sprite *);
|
|
|
|
static void sub_8101560(struct Sprite *);
|
|
|
|
static void sub_81015D4(struct Sprite *);
|
|
|
|
static void sub_8101684(struct Sprite *);
|
|
|
|
static void sub_81016B8(struct Sprite *);
|
|
|
|
static void sub_8101774(struct Sprite *);
|
|
|
|
static void sub_8101820(struct Sprite *);
|
|
|
|
static void sub_8101848(struct Sprite *);
|
|
|
|
static void sub_8101998(struct Sprite *);
|
|
|
|
static void sub_81019E8(struct Sprite *);
|
|
|
|
static void sub_8101A74(struct Sprite *);
|
|
|
|
static void sub_8101AC4(struct Sprite *);
|
|
|
|
static void sub_8101B84(struct Sprite *);
|
|
|
|
static void sub_8101AE8(struct Sprite *);
|
|
|
|
static void sub_8101BA0(struct Sprite *);
|
|
|
|
static void sub_8101D2C(u8);
|
|
|
|
static void sub_8101EEC(u8);
|
|
|
|
static void sub_8102044(struct Sprite *);
|
|
|
|
static void sub_810207C(struct Sprite *);
|
|
|
|
static void sub_810208C(struct Sprite *);
|
|
|
|
static void sub_810213C(struct Sprite *);
|
|
|
|
static void sub_81021CC(struct Sprite *);
|
|
|
|
static void sub_810237C(struct Sprite *);
|
|
|
|
static void sub_8102528(struct Sprite *);
|
|
|
|
static void sub_8102584(struct Sprite *);
|
|
|
|
static void sub_810296C(struct Sprite *);
|
|
|
|
static void sub_8102AE0(u8);
|
|
|
|
static void sub_8102B3C(struct Sprite *);
|
|
|
|
static void sub_8102D8C(s16, s16, s16 *, s16 *, s8);
|
|
|
|
static void sub_8102DE4(struct Sprite *);
|
|
|
|
static void sub_8102F40(struct Sprite *);
|
|
|
|
static void sub_81030B0(struct Sprite *);
|
|
|
|
static void sub_81031D0(struct Sprite *);
|
|
|
|
static void sub_8103250(struct Sprite *);
|
|
|
|
static void sub_8103300(struct Sprite *);
|
|
|
|
static void sub_8103320(struct Sprite *);
|
|
|
|
static void sub_81033F0(struct Sprite *);
|
|
|
|
static void sub_810342C(struct Sprite *);
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085920F0[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 5),
|
|
|
|
ANIMCMD_FRAME(2, 5),
|
|
|
|
ANIMCMD_FRAME(4, 5),
|
|
|
|
ANIMCMD_FRAME(6, 5),
|
|
|
|
ANIMCMD_FRAME(8, 5),
|
|
|
|
ANIMCMD_FRAME(10, 5),
|
|
|
|
ANIMCMD_FRAME(12, 5),
|
|
|
|
ANIMCMD_FRAME(14, 5),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592114[] =
|
|
|
|
{
|
|
|
|
gUnknown_085920F0,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SLEEP_POWDER,
|
|
|
|
.paletteTag = ANIM_TAG_SLEEP_POWDER,
|
|
|
|
.oam = &gUnknown_08524944,
|
|
|
|
.anims = gUnknown_08592114,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = AnimMovePowderParticle,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gStunSporeParticleSpriteTemplate =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_STUN_SPORE,
|
|
|
|
.paletteTag = ANIM_TAG_STUN_SPORE,
|
|
|
|
.oam = &gUnknown_08524944,
|
|
|
|
.anims = gUnknown_08592114,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = AnimMovePowderParticle,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_POISON_POWDER,
|
|
|
|
.paletteTag = ANIM_TAG_POISON_POWDER,
|
|
|
|
.oam = &gUnknown_08524944,
|
|
|
|
.anims = gUnknown_08592114,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = AnimMovePowderParticle,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592160[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592168[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(1, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592170[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(2, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592178[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(3, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592180[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(4, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592188[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(5, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592190[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(6, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592198[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(7, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085921A0[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(8, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_085921A8[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592160,
|
|
|
|
gUnknown_08592168,
|
|
|
|
gUnknown_08592170,
|
|
|
|
gUnknown_08592178,
|
|
|
|
gUnknown_08592180,
|
|
|
|
gUnknown_08592188,
|
|
|
|
gUnknown_08592190,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_085921C4[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592198,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_085921C8[] =
|
|
|
|
{
|
|
|
|
gUnknown_085921A0,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085921CC[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_085921DC[] = {
|
|
|
|
gUnknown_085921CC,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gPowerAbsorptionOrbSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ORBS,
|
|
|
|
.paletteTag = ANIM_TAG_ORBS,
|
|
|
|
.oam = &gUnknown_08524A8C,
|
|
|
|
.anims = gUnknown_085921C8,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_085921DC,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimPowerAbsorptionOrb,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gSolarbeamBigOrbSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ORBS,
|
|
|
|
.paletteTag = ANIM_TAG_ORBS,
|
|
|
|
.oam = &gUnknown_08524904,
|
|
|
|
.anims = gUnknown_085921A8,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimSolarbeamBigOrb,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gSolarbeamSmallOrbSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ORBS,
|
|
|
|
.paletteTag = ANIM_TAG_ORBS,
|
|
|
|
.oam = &gUnknown_08524904,
|
|
|
|
.anims = gUnknown_085921C4,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimSolarbeamSmallOrb,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592228[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(320, 320, 0, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(-14, -14, 0, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(1),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08592240[] = {
|
|
|
|
gUnknown_08592228,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gStockpileAbsorptionOrbSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_GRAY_ORB,
|
|
|
|
.paletteTag = ANIM_TAG_GRAY_ORB,
|
|
|
|
.oam = &gUnknown_085249C4,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592240,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimPowerAbsorptionOrb,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859225C[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_0859226C[] = {
|
|
|
|
gUnknown_0859225C,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gAbsorptionOrbSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ORBS,
|
|
|
|
.paletteTag = ANIM_TAG_ORBS,
|
|
|
|
.oam = &gUnknown_08524A8C,
|
|
|
|
.anims = gUnknown_085921C8,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_0859226C,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimAbsorptionOrb,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gHyperBeamOrbSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ORBS,
|
|
|
|
.paletteTag = ANIM_TAG_ORBS,
|
|
|
|
.oam = &gUnknown_08524904,
|
|
|
|
.anims = gUnknown_085921A8,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimHyperBeamOrb,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085922A0[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085922A8[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(4, 7),
|
|
|
|
ANIMCMD_FRAME(8, 7),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_085922B4[] =
|
|
|
|
{
|
|
|
|
gUnknown_085922A0,
|
|
|
|
gUnknown_085922A8,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gLeechSeedSpriteTemplate =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SEED,
|
|
|
|
.paletteTag = ANIM_TAG_SEED,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_085922B4,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = AnimLeechSeed,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085922D4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085922DC[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(4, 7),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_085922E4[] =
|
|
|
|
{
|
|
|
|
gUnknown_085922D4,
|
|
|
|
gUnknown_085922DC,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gSporeParticleSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SPORE,
|
|
|
|
.paletteTag = ANIM_TAG_SPORE,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_085922E4,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimSporeParticle,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592304[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859230C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(4, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592314[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592304,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592318[] =
|
|
|
|
{
|
|
|
|
gUnknown_0859230C,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gPetalDanceBigFlowerSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_FLOWER,
|
|
|
|
.paletteTag = ANIM_TAG_FLOWER,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_08592314,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimPetalDanceBigFlower,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gPetalDanceSmallFlowerSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_FLOWER,
|
|
|
|
.paletteTag = ANIM_TAG_FLOWER,
|
|
|
|
.oam = &gUnknown_08524904,
|
|
|
|
.anims = gUnknown_08592318,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimPetalDanceSmallFlower,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859234C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 5),
|
|
|
|
ANIMCMD_FRAME(4, 5),
|
|
|
|
ANIMCMD_FRAME(8, 5),
|
|
|
|
ANIMCMD_FRAME(12, 5),
|
|
|
|
ANIMCMD_FRAME(16, 5),
|
|
|
|
ANIMCMD_FRAME(20, 5),
|
|
|
|
ANIMCMD_FRAME(16, 5),
|
|
|
|
ANIMCMD_FRAME(12, 5),
|
|
|
|
ANIMCMD_FRAME(8, 5),
|
|
|
|
ANIMCMD_FRAME(4, 5),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592378[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(24, 5),
|
|
|
|
ANIMCMD_FRAME(28, 5),
|
|
|
|
ANIMCMD_FRAME(32, 5),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592388[] =
|
|
|
|
{
|
|
|
|
gUnknown_0859234C,
|
|
|
|
gUnknown_08592378,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gRazorLeafParticleSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_LEAF,
|
|
|
|
.paletteTag = ANIM_TAG_LEAF,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_08592388,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimRazorLeafParticle,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gTwisterLeafParticleSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_LEAF,
|
|
|
|
.paletteTag = ANIM_TAG_LEAF,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_08592388,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = AnimMoveTwisterParticle,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085923C0[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 3),
|
|
|
|
ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(0, 3, .vFlip = TRUE),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_085923D4[] =
|
|
|
|
{
|
|
|
|
gUnknown_085923C0,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gRazorLeafCutterSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_RAZOR_LEAF,
|
|
|
|
.paletteTag = ANIM_TAG_RAZOR_LEAF,
|
|
|
|
.oam = &gUnknown_08524934,
|
|
|
|
.anims = gUnknown_085923D4,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = AnimTranslateLinearSingleSineWave,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085923F0[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 0, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08592400[] = {
|
|
|
|
gUnknown_085923F0,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gSwiftStarSpriteTemplate =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_YELLOW_STAR,
|
|
|
|
.paletteTag = ANIM_TAG_YELLOW_STAR,
|
|
|
|
.oam = &gUnknown_08524974,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592400,
|
|
|
|
.callback = AnimTranslateLinearSingleSineWave,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859241C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_FRAME(32, 4),
|
|
|
|
ANIMCMD_FRAME(64, 4),
|
|
|
|
ANIMCMD_FRAME(96, 4),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592430[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(64, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(96, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592444[] =
|
|
|
|
{
|
|
|
|
gUnknown_0859241C,
|
|
|
|
gUnknown_08592430,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859244C[] = {
|
2018-12-20 04:13:26 +01:00
|
|
|
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
2018-12-16 18:35:10 +01:00
|
|
|
AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
|
|
|
|
AFFINEANIMCMD_FRAME(11, 0, 0, 6),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859246C[] = {
|
2018-12-20 04:13:26 +01:00
|
|
|
AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
|
2018-12-16 18:35:10 +01:00
|
|
|
AFFINEANIMCMD_FRAME(11, 0, 0, 6),
|
|
|
|
AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_0859248C[] = {
|
|
|
|
gUnknown_0859244C,
|
|
|
|
gUnknown_0859246C,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gConstrictBindingSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_TENDRILS,
|
|
|
|
.paletteTag = ANIM_TAG_TENDRILS,
|
|
|
|
.oam = &gUnknown_0852499C,
|
|
|
|
.anims = gUnknown_08592444,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_0859248C,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimConstrictBinding,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085924AC[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 0, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(48, 48, 0, 14),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085924C4[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_085924D4[] = {
|
|
|
|
gUnknown_085924AC,
|
|
|
|
gUnknown_085924C4,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gMimicOrbSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ORBS,
|
|
|
|
.paletteTag = ANIM_TAG_ORBS,
|
|
|
|
.oam = &gUnknown_085249CC,
|
|
|
|
.anims = gUnknown_085921C8,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_085924D4,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimMimicOrb,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085924F4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 7),
|
|
|
|
ANIMCMD_FRAME(16, 7),
|
|
|
|
ANIMCMD_FRAME(32, 7),
|
|
|
|
ANIMCMD_FRAME(48, 7),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592508[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(48, 7, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859251C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 7),
|
|
|
|
ANIMCMD_FRAME(16, 7),
|
|
|
|
ANIMCMD_FRAME(32, 7),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859252C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_0859253C[] =
|
|
|
|
{
|
|
|
|
gUnknown_085924F4,
|
|
|
|
gUnknown_08592508,
|
|
|
|
gUnknown_0859251C,
|
|
|
|
gUnknown_0859252C,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gIngrainRootSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ROOTS,
|
|
|
|
.paletteTag = ANIM_TAG_ROOTS,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_0859253C,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimIngrainRoot,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gFrenzyPlantRootSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ROOTS,
|
|
|
|
.paletteTag = ANIM_TAG_ROOTS,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_0859253C,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimFrenzyPlantRoot,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859257C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(3, 3),
|
|
|
|
ANIMCMD_FRAME(0, 5),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592588[] =
|
|
|
|
{
|
|
|
|
gUnknown_0859257C,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gIngrainOrbSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ORBS,
|
|
|
|
.paletteTag = ANIM_TAG_ORBS,
|
|
|
|
.oam = &gUnknown_08524904,
|
|
|
|
.anims = gUnknown_08592588,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimIngrainOrb,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085925A4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 30),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_085925AC[] =
|
|
|
|
{
|
|
|
|
gUnknown_085925A4,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085925B0[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, -4, 10),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 4, 20),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, -4, 10),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085925D0[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, -1, 2),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 1, 4),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, -1, 4),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 1, 4),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, -1, 4),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 1, 2),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08592608[] = {
|
|
|
|
gUnknown_085925B0,
|
|
|
|
gUnknown_085925D0,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gPresentSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ITEM_BAG,
|
|
|
|
.paletteTag = ANIM_TAG_ITEM_BAG,
|
|
|
|
.oam = &gUnknown_08524974,
|
|
|
|
.anims = gUnknown_085925AC,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592608,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimPresent,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gKnockOffItemSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ITEM_BAG,
|
|
|
|
.paletteTag = ANIM_TAG_ITEM_BAG,
|
|
|
|
.oam = &gUnknown_08524974,
|
|
|
|
.anims = gUnknown_085925AC,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592608,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimKnockOffItem,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592640[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_FRAME(4, 4),
|
|
|
|
ANIMCMD_FRAME(8, 4),
|
|
|
|
ANIMCMD_FRAME(12, 4),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592654[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592640,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gPresentHealParticleSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_GREEN_SPARKLE,
|
|
|
|
.paletteTag = ANIM_TAG_GREEN_SPARKLE,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_08592654,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimPresentHealParticle,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gItemStealSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ITEM_BAG,
|
|
|
|
.paletteTag = ANIM_TAG_ITEM_BAG,
|
|
|
|
.oam = &gUnknown_08524974,
|
|
|
|
.anims = gUnknown_085925AC,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592608,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimItemSteal,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592688[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 0, 3),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592698[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(0, -10, 0, 3),
|
|
|
|
AFFINEANIMCMD_FRAME(0, -6, 0, 3),
|
|
|
|
AFFINEANIMCMD_FRAME(0, -2, 0, 3),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 0, 3),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 2, 0, 3),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 6, 0, 3),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 10, 0, 3),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_085926D8[] = {
|
|
|
|
gUnknown_08592688,
|
|
|
|
gUnknown_08592698,
|
|
|
|
gUnknown_085925B0,
|
|
|
|
gUnknown_085925D0,
|
|
|
|
};
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
const struct SpriteTemplate gTrickBagSpriteTemplate =
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_ITEM_BAG,
|
|
|
|
.paletteTag = ANIM_TAG_ITEM_BAG,
|
|
|
|
.oam = &gUnknown_08524974,
|
|
|
|
.anims = gUnknown_085925AC,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_085926D8,
|
2018-12-20 04:13:26 +01:00
|
|
|
.callback = AnimTrickBag,
|
2018-12-16 18:35:10 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
const s8 gUnknown_08592700[][3] =
|
|
|
|
{
|
|
|
|
{5, 24, 1},
|
|
|
|
{0, 4, 0},
|
|
|
|
{8, 16, -1},
|
|
|
|
{0, 2, 0},
|
|
|
|
{8, 16, 1},
|
|
|
|
{0, 2, 0},
|
|
|
|
{8, 16, 1},
|
|
|
|
{0, 2, 0},
|
|
|
|
{8, 16, 1},
|
|
|
|
{0, 16, 0},
|
|
|
|
{0, 0, 127},
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592724[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(28, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859272C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(32, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592734[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(20, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859273C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(28, 1, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592744[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(16, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859274C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592754[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(28, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_0859275C[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592724,
|
|
|
|
gUnknown_0859272C,
|
|
|
|
gUnknown_08592734,
|
|
|
|
gUnknown_0859273C,
|
|
|
|
gUnknown_08592744,
|
|
|
|
gUnknown_0859274C,
|
|
|
|
gUnknown_08592754,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592778 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_LEAF,
|
|
|
|
.paletteTag = ANIM_TAG_LEAF,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_0859275C,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = SpriteCallbackDummy,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592790[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 4, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(1),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_085927A8[] = {
|
|
|
|
gUnknown_08592790,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_085927AC =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_FLOWER,
|
|
|
|
.paletteTag = ANIM_TAG_FLOWER,
|
|
|
|
.oam = &gUnknown_08524904,
|
|
|
|
.anims = gUnknown_08592318,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8100640,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_085927C4 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_FLOWER,
|
|
|
|
.paletteTag = ANIM_TAG_FLOWER,
|
|
|
|
.oam = &gUnknown_0852496C,
|
|
|
|
.anims = gUnknown_08592314,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_085927A8,
|
|
|
|
.callback = sub_8100640,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085927DC[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, -10, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(1),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085927F4[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(192, 192, 0, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, -12, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(1),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859280C[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(143, 143, 0, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, -15, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(1),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08592824[] = {
|
|
|
|
gUnknown_085927DC,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08592828[] = {
|
|
|
|
gUnknown_085927F4,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_0859282C[] = {
|
|
|
|
gUnknown_0859280C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592830 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SPARKLE_6,
|
|
|
|
.paletteTag = ANIM_TAG_SPARKLE_6,
|
|
|
|
.oam = &gUnknown_0852496C,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592824,
|
|
|
|
.callback = sub_8100640,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592848 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SPARKLE_6,
|
|
|
|
.paletteTag = ANIM_TAG_SPARKLE_6,
|
|
|
|
.oam = &gUnknown_0852496C,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592828,
|
|
|
|
.callback = sub_8100640,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592860 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SPARKLE_6,
|
|
|
|
.paletteTag = ANIM_TAG_SPARKLE_6,
|
|
|
|
.oam = &gUnknown_0852496C,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_0859282C,
|
|
|
|
.callback = sub_8100640,
|
|
|
|
};
|
|
|
|
|
|
|
|
const u16 gMagicalLeafBlendColors[] =
|
|
|
|
{
|
|
|
|
RGB(31, 0, 0),
|
|
|
|
RGB(31, 19, 0),
|
|
|
|
RGB(31, 31, 0),
|
|
|
|
RGB(0, 31, 0),
|
|
|
|
RGB(5, 14, 31),
|
|
|
|
RGB(22, 10, 31),
|
|
|
|
RGB(22, 21, 31),
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592888 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_GREEN_SPIKE,
|
|
|
|
.paletteTag = ANIM_TAG_GREEN_SPIKE,
|
|
|
|
.oam = &gUnknown_0852496C,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8100898,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085928A0[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(64, 3),
|
|
|
|
ANIMCMD_FRAME(80, 3),
|
|
|
|
ANIMCMD_FRAME(96, 3),
|
|
|
|
ANIMCMD_FRAME(112, 6),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085928B4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(64, 3, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(80, 3, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(96, 3, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(112, 6, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_085928C8[] =
|
|
|
|
{
|
|
|
|
gUnknown_085928A0,
|
|
|
|
gUnknown_085928B4,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_085928D0 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SLAM_HIT,
|
|
|
|
.paletteTag = ANIM_TAG_SLAM_HIT,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_085928C8,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8100A50,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_085928E8 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_WHIP_HIT,
|
|
|
|
.paletteTag = ANIM_TAG_WHIP_HIT,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_085928C8,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8100A50,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592900[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_FRAME(16, 4),
|
|
|
|
ANIMCMD_FRAME(32, 4),
|
|
|
|
ANIMCMD_FRAME(48, 4),
|
|
|
|
ANIMCMD_FRAME(64, 5),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592918[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592900,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_0859291C =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_UNUSED_HIT,
|
|
|
|
.paletteTag = ANIM_TAG_UNUSED_HIT,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592918,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_81009F8,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592934 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_UNUSED_HIT_2,
|
|
|
|
.paletteTag = ANIM_TAG_UNUSED_HIT_2,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592918,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_81009F8,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859294C[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859295C[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, 32, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859296C[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, 64, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859297C[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, 96, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859298C[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, -128, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859299C[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, -96, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085929AC[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, -64, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_085929BC[] = {
|
|
|
|
AFFINEANIMCMD_FRAME(256, 256, -32, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_085929CC[] = {
|
|
|
|
gUnknown_0859294C,
|
|
|
|
gUnknown_0859295C,
|
|
|
|
gUnknown_0859296C,
|
|
|
|
gUnknown_0859297C,
|
|
|
|
gUnknown_0859298C,
|
|
|
|
gUnknown_0859299C,
|
|
|
|
gUnknown_085929AC,
|
|
|
|
gUnknown_085929BC,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_085929EC =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_HANDS_AND_FEET,
|
|
|
|
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
|
|
|
|
.oam = &gUnknown_08524974,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_085929CC,
|
|
|
|
.callback = sub_8100A94,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A04[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 5),
|
|
|
|
ANIMCMD_FRAME(16, 5),
|
|
|
|
ANIMCMD_FRAME(32, 5),
|
|
|
|
ANIMCMD_FRAME(48, 5),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592A18[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592A04,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gCuttingSliceSpriteTemplate =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_CUT,
|
|
|
|
.paletteTag = ANIM_TAG_CUT,
|
|
|
|
.oam = &gUnknown_08524A34,
|
|
|
|
.anims = gUnknown_08592A18,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = AnimCuttingSlice,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592A34 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_CUT,
|
|
|
|
.paletteTag = ANIM_TAG_CUT,
|
|
|
|
.oam = &gUnknown_08524A34,
|
|
|
|
.anims = gUnknown_08592A18,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8100B88,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A4C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A54[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(4, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A5C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(8, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A64[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(12, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A6C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(16, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A74[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(20, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A7C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 1, .vFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A84[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(4, 1, .vFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A8C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(8, 1, .vFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592A94[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(12, 1, .vFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592A9C[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592A4C,
|
|
|
|
gUnknown_08592A54,
|
|
|
|
gUnknown_08592A5C,
|
|
|
|
gUnknown_08592A64,
|
|
|
|
gUnknown_08592A6C,
|
|
|
|
gUnknown_08592A74,
|
|
|
|
gUnknown_08592A7C,
|
|
|
|
gUnknown_08592A84,
|
|
|
|
gUnknown_08592A8C,
|
|
|
|
gUnknown_08592A94,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592AC4 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_MUSIC_NOTES,
|
|
|
|
.paletteTag = ANIM_TAG_MUSIC_NOTES,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_08592A9C,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8100E1C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592ADC =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_PROTECT,
|
|
|
|
.paletteTag = ANIM_TAG_PROTECT,
|
|
|
|
.oam = &gUnknown_08524A3C,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8100EF0,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592AF4[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592B04[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
|
|
|
|
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
|
|
|
|
AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 24),
|
|
|
|
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
|
|
|
|
AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
|
|
|
|
AFFINEANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08592B34[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592AF4,
|
|
|
|
gUnknown_08592B04,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592B3C =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_MILK_BOTTLE,
|
|
|
|
.paletteTag = ANIM_TAG_MILK_BOTTLE,
|
|
|
|
.oam = &gUnknown_08524A94,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592B34,
|
|
|
|
.callback = sub_81010CC,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592B54[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 7),
|
|
|
|
ANIMCMD_FRAME(16, 7),
|
|
|
|
ANIMCMD_FRAME(32, 7),
|
|
|
|
ANIMCMD_FRAME(48, 7),
|
|
|
|
ANIMCMD_FRAME(64, 7),
|
|
|
|
ANIMCMD_FRAME(80, 7),
|
|
|
|
ANIMCMD_FRAME(96, 7),
|
|
|
|
ANIMCMD_FRAME(112, 7),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592B78[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592B54,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592B7C =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SPARKLE_2,
|
|
|
|
.paletteTag = ANIM_TAG_SPARKLE_2,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592B78,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_810130C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592B94 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SPARKLE_2,
|
|
|
|
.paletteTag = ANIM_TAG_SPARKLE_2,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592B78,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_810135C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592BAC[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 10),
|
|
|
|
ANIMCMD_FRAME(4, 10),
|
|
|
|
ANIMCMD_FRAME(8, 10),
|
|
|
|
ANIMCMD_FRAME(12, 10),
|
|
|
|
ANIMCMD_FRAME(16, 26),
|
|
|
|
ANIMCMD_FRAME(16, 5),
|
|
|
|
ANIMCMD_FRAME(20, 5),
|
|
|
|
ANIMCMD_FRAME(24, 15),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592BD0[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 10, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(4, 10, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(8, 10, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(12, 10, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(16, 26, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(20, 5, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(24, 15, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592BF4[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592BAC,
|
|
|
|
gUnknown_08592BD0,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592BFC =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
|
|
|
|
.paletteTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_08592BF4,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8101440,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592C14[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 40),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592C1C[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592C14,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592C20[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592C20_2[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_LOOP(0),
|
|
|
|
AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
|
|
|
|
AFFINEANIMCMD_LOOP(10),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592C50[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592C50_2[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_LOOP(0),
|
|
|
|
AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24),
|
|
|
|
AFFINEANIMCMD_LOOP(10),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08592C80[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592C20,
|
|
|
|
gUnknown_08592C50,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592C88 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_LETTER_Z,
|
|
|
|
.paletteTag = ANIM_TAG_LETTER_Z,
|
|
|
|
.oam = &gUnknown_08524974,
|
|
|
|
.anims = gUnknown_08592C1C,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592C80,
|
|
|
|
.callback = sub_81014F4,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592CA0 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_LOCK_ON,
|
|
|
|
.paletteTag = ANIM_TAG_LOCK_ON,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_81015AC,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592CB8 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_LOCK_ON,
|
|
|
|
.paletteTag = ANIM_TAG_LOCK_ON,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8101898,
|
|
|
|
};
|
|
|
|
|
|
|
|
const s8 gUnknown_08592CD0[][2] =
|
|
|
|
{
|
|
|
|
{ 64, 64},
|
|
|
|
{ 0, -64},
|
|
|
|
{-64, 64},
|
|
|
|
{ 32, -32},
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592CD8 =
|
|
|
|
{
|
|
|
|
.tileTag = 0,
|
|
|
|
.paletteTag = 0,
|
|
|
|
.oam = &gDummyOamData,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8101940,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592CF0 =
|
|
|
|
{
|
|
|
|
.tileTag = 0,
|
|
|
|
.paletteTag = 0,
|
|
|
|
.oam = &gDummyOamData,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8101B90,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592D08[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_FRAME(16, 4),
|
|
|
|
ANIMCMD_FRAME(32, 4),
|
|
|
|
ANIMCMD_FRAME(48, 4),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592D1C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(48, 4),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592D24[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592D08,
|
|
|
|
gUnknown_08592D1C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592D2C =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SLASH,
|
|
|
|
.paletteTag = ANIM_TAG_SLASH,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592D24,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8101F40,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592D44 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SLASH_2,
|
|
|
|
.paletteTag = ANIM_TAG_SLASH_2,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592D24,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8101FA8,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592D5C =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SLASH_2,
|
|
|
|
.paletteTag = ANIM_TAG_SLASH_2,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592D24,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8101FF0,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592D74[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_FRAME(8, 12),
|
|
|
|
ANIMCMD_FRAME(16, 4),
|
|
|
|
ANIMCMD_FRAME(24, 4),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592D88[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592D74,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592D8C =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_FOCUS_ENERGY,
|
|
|
|
.paletteTag = ANIM_TAG_FOCUS_ENERGY,
|
|
|
|
.oam = &gUnknown_08524954,
|
|
|
|
.anims = gUnknown_08592D88,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_81020D8,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592DA4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 18),
|
|
|
|
ANIMCMD_FRAME(0, 6),
|
|
|
|
ANIMCMD_FRAME(16, 18),
|
|
|
|
ANIMCMD_FRAME(0, 6),
|
|
|
|
ANIMCMD_FRAME(16, 6),
|
|
|
|
ANIMCMD_FRAME(32, 18),
|
|
|
|
ANIMCMD_FRAME(16, 6),
|
|
|
|
ANIMCMD_FRAME(32, 6),
|
|
|
|
ANIMCMD_FRAME(48, 18),
|
|
|
|
ANIMCMD_FRAME(32, 6),
|
|
|
|
ANIMCMD_FRAME(48, 6),
|
|
|
|
ANIMCMD_FRAME(64, 18),
|
|
|
|
ANIMCMD_FRAME(48, 6),
|
|
|
|
ANIMCMD_FRAME(64, 54),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592DE0[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592DA4,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592DE4 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_SPHERE_TO_CUBE,
|
|
|
|
.paletteTag = ANIM_TAG_SPHERE_TO_CUBE,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592DE0,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_810217C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592DFC =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_BLACK_BALL,
|
|
|
|
.paletteTag = ANIM_TAG_BLACK_BALL,
|
|
|
|
.oam = &gUnknown_08524904,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = TranslateAnimSpriteToTargetMonLocation,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592E14[] =
|
|
|
|
{
|
|
|
|
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_08592E2C[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592E14,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592E30 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_GRAY_SMOKE,
|
|
|
|
.paletteTag = ANIM_TAG_GRAY_SMOKE,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592E2C,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_80A77C8,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592E48[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(3, 5),
|
|
|
|
ANIMCMD_FRAME(2, 5),
|
|
|
|
ANIMCMD_FRAME(1, 5),
|
|
|
|
ANIMCMD_FRAME(0, 5),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592E5C[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592E48,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592E60[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08592E70[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592E60,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592E74 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_CONVERSION,
|
|
|
|
.paletteTag = ANIM_TAG_CONVERSION,
|
|
|
|
.oam = &gUnknown_08524AE4,
|
|
|
|
.anims = gUnknown_08592E5C,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592E70,
|
|
|
|
.callback = sub_8102268,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592E8C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 5),
|
|
|
|
ANIMCMD_FRAME(1, 5),
|
|
|
|
ANIMCMD_FRAME(2, 5),
|
|
|
|
ANIMCMD_FRAME(3, 5),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592EA0[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592E8C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592EA4 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_CONVERSION,
|
|
|
|
.paletteTag = ANIM_TAG_CONVERSION,
|
|
|
|
.oam = &gUnknown_08524AE4,
|
|
|
|
.anims = gUnknown_08592EA0,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08592E70,
|
|
|
|
.callback = sub_810234C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592EBC =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_MOON,
|
|
|
|
.paletteTag = ANIM_TAG_MOON,
|
|
|
|
.oam = &gUnknown_08524A3C,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_81024E0,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592ED4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 8),
|
|
|
|
ANIMCMD_FRAME(4, 8),
|
|
|
|
ANIMCMD_FRAME(8, 8),
|
|
|
|
ANIMCMD_FRAME(12, 8),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592EE8[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592ED4,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gBattleAnimSpriteTemplate_8592EEC =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_GREEN_SPARKLE,
|
|
|
|
.paletteTag = ANIM_TAG_GREEN_SPARKLE,
|
|
|
|
.oam = &gUnknown_0852490C,
|
|
|
|
.anims = gUnknown_08592EE8,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8102540,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592F04[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 2),
|
|
|
|
ANIMCMD_FRAME(16, 2),
|
|
|
|
ANIMCMD_FRAME(32, 2),
|
|
|
|
ANIMCMD_FRAME(48, 3),
|
|
|
|
ANIMCMD_FRAME(64, 5),
|
|
|
|
ANIMCMD_FRAME(80, 3),
|
|
|
|
ANIMCMD_FRAME(96, 2),
|
|
|
|
ANIMCMD_FRAME(0, 2),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592F28[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592F04,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592F2C =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_BLUE_STAR,
|
|
|
|
.paletteTag = ANIM_TAG_BLUE_STAR,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592F28,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_80A77C8,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592F44 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_HORN_HIT,
|
|
|
|
.paletteTag = ANIM_TAG_HORN_HIT,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8102844,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592F5C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 2),
|
|
|
|
ANIMCMD_FRAME(16, 2),
|
|
|
|
ANIMCMD_FRAME(32, 2),
|
|
|
|
ANIMCMD_FRAME(48, 2),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592F70[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592F5C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08592F74 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_FANG_ATTACK,
|
|
|
|
.paletteTag = ANIM_TAG_FANG_ATTACK,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08592F70,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8102BCC,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592F8C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 10),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592F94[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(4, 10),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592F9C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(8, 41),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592FA4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(12, 10),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592FAC[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(16, 10),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592FB4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(20, 10),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592FBC[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 10, .vFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_08592FC4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(4, 10, .vFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08592FCC[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592F8C,
|
|
|
|
gUnknown_08592F94,
|
|
|
|
gUnknown_08592F9C,
|
|
|
|
gUnknown_08592FA4,
|
|
|
|
gUnknown_08592FAC,
|
|
|
|
gUnknown_08592FB4,
|
|
|
|
gUnknown_08592FBC,
|
|
|
|
gUnknown_08592FC4,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08592FEC[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16),
|
|
|
|
AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16),
|
|
|
|
AFFINEANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08593004[] =
|
|
|
|
{
|
|
|
|
gUnknown_08592FEC,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08593008 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_MUSIC_NOTES,
|
|
|
|
.paletteTag = ANIM_TAG_MUSIC_NOTES,
|
|
|
|
.oam = &gUnknown_085249CC,
|
|
|
|
.anims = gUnknown_08592FCC,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08593004,
|
|
|
|
.callback = sub_8102CD4,
|
|
|
|
};
|
|
|
|
|
|
|
|
const u16 gUnknown_08593020[][6] =
|
|
|
|
{
|
|
|
|
{ANIM_TAG_MUSIC_NOTES, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)},
|
|
|
|
{ANIM_TAG_BENT_SPOON, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)},
|
|
|
|
{ANIM_TAG_SPHERE_TO_CUBE, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)},
|
|
|
|
{ANIM_TAG_LARGE_FRESH_EGG, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)},
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08593050 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_MUSIC_NOTES,
|
|
|
|
.paletteTag = ANIM_TAG_MUSIC_NOTES,
|
|
|
|
.oam = &gUnknown_085249CC,
|
|
|
|
.anims = gUnknown_08592FCC,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08593004,
|
|
|
|
.callback = sub_8102EB0,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08593068 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
|
|
|
|
.paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8102FB8,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08593080[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1),
|
|
|
|
AFFINEANIMCMD_JUMP(1),
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_08593098[] =
|
|
|
|
{
|
|
|
|
gUnknown_08593080,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_0859309C =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_MUSIC_NOTES,
|
|
|
|
.paletteTag = ANIM_TAG_MUSIC_NOTES,
|
|
|
|
.oam = &gUnknown_085249CC,
|
|
|
|
.anims = gUnknown_08592FCC,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_08593098,
|
|
|
|
.callback = sub_8103028,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085930B4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085930C8[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085930DC[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 2),
|
|
|
|
ANIMCMD_FRAME(16, 2),
|
|
|
|
ANIMCMD_FRAME(32, 2),
|
|
|
|
ANIMCMD_FRAME(48, 2),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085930F0[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(48, 2),
|
|
|
|
ANIMCMD_FRAME(32, 2),
|
|
|
|
ANIMCMD_FRAME(16, 2),
|
|
|
|
ANIMCMD_FRAME(0, 2),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_08593104[] =
|
|
|
|
{
|
|
|
|
gUnknown_085930B4,
|
|
|
|
gUnknown_085930DC,
|
|
|
|
gUnknown_085930C8,
|
|
|
|
gUnknown_085930F0,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_08593114 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_THOUGHT_BUBBLE,
|
|
|
|
.paletteTag = ANIM_TAG_THOUGHT_BUBBLE,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_08593104,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8103164,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_0859312C[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08593144[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11),
|
|
|
|
AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11),
|
|
|
|
AFFINEANIMCMD_LOOP(2),
|
|
|
|
AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 0, 8),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd gUnknown_08593144_2[] =
|
|
|
|
{
|
|
|
|
AFFINEANIMCMD_FRAME(16, 16, 0, 0),
|
|
|
|
AFFINEANIMCMD_FRAME(30, 30, 0, 8),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 0, 16),
|
|
|
|
AFFINEANIMCMD_LOOP(0),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, 4, 11),
|
|
|
|
AFFINEANIMCMD_FRAME(0, 0, -4, 11),
|
|
|
|
AFFINEANIMCMD_LOOP(2),
|
|
|
|
AFFINEANIMCMD_FRAME(-30, -30, 0, 8),
|
|
|
|
AFFINEANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AffineAnimCmd *const gUnknown_085931B4[] =
|
|
|
|
{
|
|
|
|
gUnknown_0859312C,
|
|
|
|
gUnknown_08593144,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_085931BC =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_FINGER,
|
|
|
|
.paletteTag = ANIM_TAG_FINGER,
|
|
|
|
.oam = &gUnknown_085249D4,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_085931B4,
|
|
|
|
.callback = sub_8103208,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_085931D4 =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_FINGER,
|
|
|
|
.paletteTag = ANIM_TAG_FINGER,
|
|
|
|
.oam = &gUnknown_08524974,
|
|
|
|
.anims = gDummySpriteAnimTable,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gUnknown_085931B4,
|
|
|
|
.callback = sub_8103284,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085931EC[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 1),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085931F4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_085931FC[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_FRAME(16, 4),
|
|
|
|
ANIMCMD_FRAME(32, 4),
|
|
|
|
ANIMCMD_FRAME(16, 4),
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_FRAME(16, 4),
|
|
|
|
ANIMCMD_FRAME(32, 4),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd gUnknown_0859321C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
const union AnimCmd *const gUnknown_0859323C[] =
|
|
|
|
{
|
|
|
|
gUnknown_085931EC,
|
|
|
|
gUnknown_085931F4,
|
|
|
|
gUnknown_085931FC,
|
|
|
|
gUnknown_0859321C,
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct SpriteTemplate gUnknown_0859324C =
|
|
|
|
{
|
|
|
|
.tileTag = ANIM_TAG_FINGER_2,
|
|
|
|
.paletteTag = ANIM_TAG_FINGER_2,
|
|
|
|
.oam = &gUnknown_08524914,
|
|
|
|
.anims = gUnknown_0859323C,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_8103390,
|
|
|
|
};
|
|
|
|
|
|
|
|
// Animates the falling particles that horizontally wave back and forth.
|
|
|
|
// Used by Sleep Powder, Stun Spore, and Poison Powder.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: total duration in frames
|
|
|
|
// arg 3: vertical movement speed (sub-pixel value)
|
|
|
|
// arg 4: wave amplitude
|
|
|
|
// arg 5: wave speed
|
|
|
|
void AnimMovePowderParticle(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos1.x += gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
sprite->data[0] = gBattleAnimArgs[2];
|
|
|
|
sprite->data[1] = gBattleAnimArgs[3];
|
|
|
|
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker))
|
|
|
|
{
|
|
|
|
sprite->data[3] = -gBattleAnimArgs[4];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[3] = gBattleAnimArgs[4];
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[4] = gBattleAnimArgs[5];
|
|
|
|
sprite->callback = AnimMovePowderParticleStep;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void AnimMovePowderParticleStep(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[0] > 0)
|
|
|
|
{
|
|
|
|
sprite->data[0]--;
|
|
|
|
sprite->pos2.y = sprite->data[2] >> 8;
|
|
|
|
sprite->data[2] += sprite->data[1];
|
|
|
|
sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]);
|
|
|
|
sprite->data[5] = (sprite->data[5] + sprite->data[4]) & 0xFF;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Moves an energy orb towards the center of the mon.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: duration
|
|
|
|
void AnimPowerAbsorptionOrb(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimAttacker(sprite, TRUE);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[0] = gBattleAnimArgs[2];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback = StartAnimLinearTranslation;
|
2018-12-18 05:08:08 +01:00
|
|
|
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Moves an orb in a straight line towards the target mon.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: duration
|
|
|
|
// arg 3: sprite anim number
|
|
|
|
void AnimSolarbeamBigOrb(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimAttacker(sprite, TRUE);
|
2018-12-16 18:35:10 +01:00
|
|
|
StartSpriteAnim(sprite, gBattleAnimArgs[3]);
|
|
|
|
sprite->data[0] = gBattleAnimArgs[2];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback = StartAnimLinearTranslation;
|
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Moves a small orb in a wavy pattern towards the target mon.
|
|
|
|
// The small orb "circles" the big orbs in AnimSolarbeamBigOrb.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: duration
|
|
|
|
// arg 3: initial wave offset
|
|
|
|
void AnimSolarbeamSmallOrb(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimAttacker(sprite, TRUE);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[0] = gBattleAnimArgs[2];
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[3] = sprite->pos1.y;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
2018-12-16 18:35:10 +01:00
|
|
|
InitAnimLinearTranslation(sprite);
|
|
|
|
sprite->data[5] = gBattleAnimArgs[3];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimSolarbeamSmallOrbStep;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimSolarbeamSmallOrbStep(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
if (AnimTranslateLinear(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
DestroySprite(sprite);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (sprite->data[5] > 0x7F)
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
else
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 6;
|
2018-12-16 18:35:10 +01:00
|
|
|
|
|
|
|
sprite->pos2.x += Sin(sprite->data[5], 5);
|
|
|
|
sprite->pos2.y += Cos(sprite->data[5], 14);
|
|
|
|
sprite->data[5] = (sprite->data[5] + 15) & 0xFF;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Creates 15 small secondary orbs used in the solarbeam anim effect.
|
|
|
|
// There is a 7-frame delay between each of them.
|
|
|
|
// No args.
|
|
|
|
void AnimTask_CreateSmallSolarbeamOrbs(u8 taskId)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
if (--gTasks[taskId].data[0] == -1)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
gTasks[taskId].data[1]++;
|
|
|
|
gTasks[taskId].data[0] = 6;
|
|
|
|
gBattleAnimArgs[0] = 15;
|
|
|
|
gBattleAnimArgs[1] = 0;
|
|
|
|
gBattleAnimArgs[2] = 80;
|
|
|
|
gBattleAnimArgs[3] = 0;
|
2018-12-20 04:13:26 +01:00
|
|
|
CreateSpriteAndAnimate(&gSolarbeamSmallOrbSpriteTemplate, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1);
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (gTasks[taskId].data[1] == 15)
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Moves an orb from the target mon to the attacking mon in an arc-like fashion.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: wave amplitude
|
|
|
|
// arg 3: wave period (lower means faster wave)
|
|
|
|
void AnimAbsorptionOrb(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimTarget(sprite, TRUE);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[0] = gBattleAnimArgs[3];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[5] = gBattleAnimArgs[2];
|
|
|
|
InitAnimArcTranslation(sprite);
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimAbsorptionOrbStep;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimAbsorptionOrbStep(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2019-02-06 20:17:09 +01:00
|
|
|
if (TranslateAnimHorizontalArc(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Moves an orb in a wave-like fashion towards the target mon. The wave's
|
|
|
|
// properties and the sprite anim are randomly determined.
|
|
|
|
void AnimHyperBeamOrb(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
u16 speed;
|
|
|
|
u16 animNum = Random2();
|
2018-12-16 18:35:10 +01:00
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
StartSpriteAnim(sprite, animNum % 8);
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->pos1.x -= 20;
|
|
|
|
else
|
|
|
|
sprite->pos1.x += 20;
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
speed = Random2();
|
|
|
|
sprite->data[0] = (speed & 31) + 64;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[1] = sprite->pos1.x;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[3] = sprite->pos1.y;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
|
|
|
InitAnimFastLinearTranslationWithSpeed(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[5] = Random2() & 0xFF;
|
|
|
|
sprite->data[6] = sprite->subpriority;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimHyperBeamOrbStep;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimHyperBeamOrbStep(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
if (AnimFastTranslateLinear(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos2.y += Cos(sprite->data[5], 12);
|
|
|
|
if (sprite->data[5] < 0x7F)
|
|
|
|
sprite->subpriority = sprite->data[6];
|
|
|
|
else
|
|
|
|
sprite->subpriority = sprite->data[6] + 1;
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[5] += 24;
|
|
|
|
sprite->data[5] &= 0xFF;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// seed (sprouts a sapling from a seed.)
|
|
|
|
// Used by Leech Seed.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: target x pixel offset
|
|
|
|
// arg 3: target y pixel offset
|
|
|
|
// arg 4: duration
|
|
|
|
// arg 5: wave amplitude
|
|
|
|
void AnimLeechSeed(struct Sprite* sprite)
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimAttacker(sprite, TRUE);
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
2018-12-16 18:35:10 +01:00
|
|
|
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
|
|
|
|
|
|
|
sprite->data[0] = gBattleAnimArgs[4];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2];
|
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3];
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[5] = gBattleAnimArgs[5];
|
|
|
|
InitAnimArcTranslation(sprite);
|
|
|
|
sprite->callback = AnimLeechSeedStep;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void AnimLeechSeedStep(struct Sprite* sprite)
|
|
|
|
{
|
2019-02-06 20:17:09 +01:00
|
|
|
if (TranslateAnimHorizontalArc(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
sprite->invisible = 1;
|
|
|
|
sprite->data[0] = 10;
|
|
|
|
sprite->callback = WaitAnimForDuration;
|
|
|
|
StoreSpriteCallbackInData6(sprite, AnimLeechSeedSprouts);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void AnimLeechSeedSprouts(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->invisible = 0;
|
|
|
|
StartSpriteAnim(sprite, 1);
|
|
|
|
sprite->data[0] = 60;
|
|
|
|
sprite->callback = WaitAnimForDuration;
|
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Moves a spore particle in a halo around the target mon.
|
|
|
|
// The sprite's priority is updated to give the effect of going
|
|
|
|
// behind the mon's sprite.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: initial wave offset
|
|
|
|
// arg 3: duration
|
|
|
|
// arg 4: blend (0 = off, 1 = on)
|
|
|
|
void AnimSporeParticle(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimTarget(sprite, TRUE);
|
2018-12-16 18:35:10 +01:00
|
|
|
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
|
|
|
|
if (gBattleAnimArgs[4] == 1)
|
|
|
|
sprite->oam.objMode = ST_OAM_OBJ_BLEND;
|
|
|
|
|
|
|
|
sprite->data[0] = gBattleAnimArgs[3];
|
|
|
|
sprite->data[1] = gBattleAnimArgs[2];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimSporeParticleStep;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimSporeParticleStep(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
sprite->pos2.x = Sin(sprite->data[1], 32);
|
|
|
|
sprite->pos2.y = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8);
|
|
|
|
if ((u16)(sprite->data[1] - 0x40) < 0x80)
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
u8 priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
if (priority > 3)
|
|
|
|
priority = 3;
|
|
|
|
|
|
|
|
sprite->oam.priority = priority;
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[1] += 2;
|
|
|
|
sprite->data[1] &= 0xFF;
|
2018-12-16 18:35:10 +01:00
|
|
|
if (--sprite->data[0] == -1)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// In a double battle, Updates the mon sprite background priorities to allow
|
|
|
|
// the circling effect controlled by AnimSporeParticle.
|
|
|
|
// No args.
|
|
|
|
void AnimTask_SporeDoubleBattle(u8 taskId)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
if (IsContest() || !IsDoubleBattle())
|
|
|
|
{
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1)
|
2018-12-16 18:35:10 +01:00
|
|
|
SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 3);
|
|
|
|
else
|
|
|
|
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
|
|
|
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Rotates a big flower around the attacking mon, and slowly floats
|
|
|
|
// downward.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: target y pixel offset
|
|
|
|
// arg 3: duration
|
|
|
|
void AnimPetalDanceBigFlower(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimAttacker(sprite, FALSE);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[0] = gBattleAnimArgs[3];
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
|
|
|
sprite->data[2] = sprite->pos1.x;
|
|
|
|
sprite->data[3] = sprite->pos1.y;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
|
2018-12-16 18:35:10 +01:00
|
|
|
InitAnimLinearTranslation(sprite);
|
|
|
|
sprite->data[5] = 0x40;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimPetalDanceBigFlowerStep;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimPetalDanceBigFlowerStep(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
if (!AnimTranslateLinear(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
sprite->pos2.x += Sin(sprite->data[5], 32);
|
|
|
|
sprite->pos2.y += Cos(sprite->data[5], -5);
|
|
|
|
if ((u16)(sprite->data[5] - 0x40) < 0x80)
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
else
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
|
|
|
|
sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Slowly floats a small flower downard, while swaying from right to left.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: target y pixel offset
|
|
|
|
// arg 3: duration
|
|
|
|
void AnimPetalDanceSmallFlower(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimAttacker(sprite, TRUE);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[0] = gBattleAnimArgs[3];
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
|
|
|
sprite->data[2] = sprite->pos1.x;
|
|
|
|
sprite->data[3] = sprite->pos1.y;
|
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
|
|
|
|
InitAnimLinearTranslation(sprite);
|
|
|
|
sprite->data[5] = 0x40;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimPetalDanceSmallFlowerStep;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimPetalDanceSmallFlowerStep(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
if (!AnimTranslateLinear(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
sprite->pos2.x += Sin(sprite->data[5], 8);
|
|
|
|
if ((u16)(sprite->data[5] - 59) < 5 || (u16)(sprite->data[5] - 187) < 5)
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.matrixNum ^= 0x8; // horizontal flip
|
2018-12-16 18:35:10 +01:00
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[5] += 5;
|
|
|
|
sprite->data[5] &= 0xFF;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Shoots a leaf upward, then floats it downward while swaying back and forth.
|
|
|
|
// arg 0: upward x delta per frame
|
|
|
|
// arg 1: upward y delta per frame
|
|
|
|
// arg 2: upward duration
|
|
|
|
void AnimRazorLeafParticle(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[0] = gBattleAnimArgs[0];
|
|
|
|
sprite->data[1] = gBattleAnimArgs[1];
|
|
|
|
sprite->data[2] = gBattleAnimArgs[2];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimRazorLeafParticleStep1;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimRazorLeafParticleStep1(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
if (!sprite->data[2])
|
|
|
|
{
|
|
|
|
if (sprite->data[1] & 1)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0x80;
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[2] = 0;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimRazorLeafParticleStep2;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[2]--;
|
|
|
|
sprite->pos1.x += sprite->data[0];
|
|
|
|
sprite->pos1.y += sprite->data[1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimRazorLeafParticleStep2(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker))
|
|
|
|
sprite->pos2.x = -Sin(sprite->data[0], 25);
|
|
|
|
else
|
|
|
|
sprite->pos2.x = Sin(sprite->data[0], 25);
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[0] += 2;
|
|
|
|
sprite->data[0] &= 0xFF;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[1]++;
|
|
|
|
if (!(sprite->data[1] & 1))
|
|
|
|
sprite->pos2.y++;
|
|
|
|
|
|
|
|
if (sprite->data[1] > 80)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Animates a sprite that moves linearly from one location to another, with a
|
|
|
|
// single-cycle sine wave added to the y position along the way.
|
|
|
|
// Used by Razor Leaf and Magical Leaf.
|
|
|
|
// arg 0: initial x offset
|
|
|
|
// arg 1: initial y offset
|
|
|
|
// arg 2: target x offset
|
|
|
|
// arg 3: target y offset
|
|
|
|
// arg 4: translation duration
|
|
|
|
// arg 5: wave amplitude
|
|
|
|
// arg 6: target between double battle opponents (boolean)
|
|
|
|
void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimAttacker(sprite, TRUE);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
|
|
|
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
|
|
|
|
|
|
|
sprite->data[0] = gBattleAnimArgs[4];
|
|
|
|
if (!gBattleAnimArgs[6])
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[2] += gBattleAnimArgs[2];
|
|
|
|
sprite->data[4] += gBattleAnimArgs[3];
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[5] = gBattleAnimArgs[5];
|
|
|
|
InitAnimArcTranslation(sprite);
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
|
|
|
sprite->data[0] = 1;
|
|
|
|
else
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
|
|
|
|
sprite->callback = AnimTranslateLinearSingleSineWaveStep;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
bool8 destroy = FALSE;
|
|
|
|
s16 a = sprite->data[0];
|
|
|
|
s16 b = sprite->data[7];
|
|
|
|
s16 r0;
|
|
|
|
|
|
|
|
sprite->data[0] = 1;
|
2019-02-06 20:17:09 +01:00
|
|
|
TranslateAnimHorizontalArc(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
r0 = sprite->data[7];
|
|
|
|
sprite->data[0] = a;
|
|
|
|
if (b > 200 && r0 < 56 && sprite->oam.affineParam == 0)
|
|
|
|
sprite->oam.affineParam++;
|
|
|
|
|
|
|
|
if (sprite->oam.affineParam && sprite->data[0])
|
|
|
|
{
|
|
|
|
sprite->invisible ^= 1;
|
|
|
|
sprite->oam.affineParam++;
|
|
|
|
if (sprite->oam.affineParam == 30)
|
|
|
|
destroy = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->pos1.x + sprite->pos2.x > 256
|
|
|
|
|| sprite->pos1.x + sprite->pos2.x < -16
|
|
|
|
|| sprite->pos1.y + sprite->pos2.y > 160
|
|
|
|
|| sprite->pos1.y + sprite->pos2.y < -16)
|
|
|
|
destroy = TRUE;
|
|
|
|
|
|
|
|
if (destroy)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Animates particles in the Twister move animation.
|
|
|
|
// arg 0: duration
|
|
|
|
// arg 1: total y delta (the particles rise upward)
|
|
|
|
// arg 2: wave period (higher means faster wave)
|
|
|
|
// arg 3: wave amplitude
|
|
|
|
// arg 4: speedup frame (particles move faster at the end of the animation)
|
|
|
|
void AnimMoveTwisterParticle(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (IsDoubleBattle() == TRUE)
|
|
|
|
SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
|
|
|
|
|
|
|
|
sprite->pos1.y += 32;
|
|
|
|
sprite->data[0] = gBattleAnimArgs[0];
|
|
|
|
sprite->data[1] = gBattleAnimArgs[1];
|
|
|
|
sprite->data[2] = gBattleAnimArgs[2];
|
|
|
|
sprite->data[3] = gBattleAnimArgs[3];
|
|
|
|
sprite->data[4] = gBattleAnimArgs[4];
|
|
|
|
sprite->callback = AnimMoveTwisterParticleStep;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[1] == 0xFF)
|
|
|
|
{
|
|
|
|
sprite->pos1.y -= 2;
|
|
|
|
}
|
|
|
|
else if (sprite->data[1] > 0)
|
|
|
|
{
|
|
|
|
sprite->pos1.y -= 2;
|
|
|
|
sprite->data[1] -= 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[5] += sprite->data[2];
|
|
|
|
if (sprite->data[0] < sprite->data[4])
|
|
|
|
sprite->data[5] += sprite->data[2];
|
|
|
|
|
|
|
|
sprite->data[5] &= 0xFF;
|
|
|
|
sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]);
|
|
|
|
sprite->pos2.y = Sin(sprite->data[5], 5);
|
|
|
|
if (sprite->data[5] < 0x80)
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) - 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
else
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
|
|
|
|
if (--sprite->data[0] == 0)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Squeezes a constricting "rope" several times via affine animations.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: affine anim num
|
|
|
|
// arg 3: num squeezes
|
|
|
|
void AnimConstrictBinding(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimTarget(sprite, FALSE);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->affineAnimPaused = 1;
|
|
|
|
StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]);
|
|
|
|
sprite->data[6] = gBattleAnimArgs[2];
|
|
|
|
sprite->data[7] = gBattleAnimArgs[3];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimConstrictBindingStep1;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimConstrictBindingStep1(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
u8 spriteId;
|
|
|
|
|
2018-12-16 18:35:10 +01:00
|
|
|
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
|
|
|
|
{
|
|
|
|
sprite->affineAnimPaused = 0;
|
2018-12-20 04:13:26 +01:00
|
|
|
spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[0] = 0x100;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimConstrictBindingStep2;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimConstrictBindingStep2(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (!sprite->data[2])
|
|
|
|
sprite->data[0] += 11;
|
|
|
|
else
|
|
|
|
sprite->data[0] -= 11;
|
|
|
|
|
|
|
|
if (++sprite->data[1] == 6)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[2] ^= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->affineAnimEnded)
|
|
|
|
{
|
|
|
|
if (--sprite->data[7] > 0)
|
|
|
|
StartSpriteAffineAnim(sprite, sprite->data[6]);
|
|
|
|
else
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80FF458(u8 taskId)
|
|
|
|
{
|
|
|
|
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
|
|
|
|
if (gSprites[spriteId].invisible)
|
|
|
|
{
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-18 05:08:08 +01:00
|
|
|
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
|
2018-12-16 18:35:10 +01:00
|
|
|
gTasks[taskId].data[14] = gSprites[spriteId].oam.priority;
|
2018-12-20 04:13:26 +01:00
|
|
|
gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
|
2018-12-16 18:35:10 +01:00
|
|
|
spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
|
|
|
|
gTasks[taskId].data[15] = gSprites[spriteId].oam.priority;
|
2018-12-20 04:13:26 +01:00
|
|
|
gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(BATTLE_PARTNER(gBattleAnimTarget));
|
2018-12-16 18:35:10 +01:00
|
|
|
gTasks[taskId].data[0] = gBattleAnimArgs[0];
|
|
|
|
gTasks[taskId].data[1] = gBattleAnimArgs[1];
|
2018-12-20 04:13:26 +01:00
|
|
|
gTasks[taskId].data[11] = 0x100;
|
2018-12-16 18:35:10 +01:00
|
|
|
gTasks[taskId].func = sub_80FF53C;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_80FF53C(u8 taskId)
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
|
2018-12-16 18:35:10 +01:00
|
|
|
gTasks[taskId].data[10] += gTasks[taskId].data[0];
|
|
|
|
gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8;
|
2018-12-20 04:13:26 +01:00
|
|
|
if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
|
2018-12-16 18:35:10 +01:00
|
|
|
gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
|
|
|
|
|
|
|
|
gTasks[taskId].data[11] += 16;
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteRotScale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0);
|
|
|
|
SetBattlerSpriteYOffsetFromYScale(spriteId);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (--gTasks[taskId].data[1] == 0)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].func = sub_80FF5CC;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_80FF5CC(u8 taskId)
|
|
|
|
{
|
|
|
|
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
|
|
|
|
{
|
|
|
|
if (gTasks[taskId].data[0] == 0)
|
|
|
|
{
|
|
|
|
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
|
2018-12-18 05:08:08 +01:00
|
|
|
ResetSpriteRotScale(spriteId);
|
2018-12-16 18:35:10 +01:00
|
|
|
gSprites[spriteId].pos2.x = 0;
|
|
|
|
gSprites[spriteId].pos2.y = 0;
|
|
|
|
gSprites[spriteId].oam.priority = gTasks[taskId].data[14];
|
|
|
|
spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
|
|
|
|
gSprites[spriteId].oam.priority = gTasks[taskId].data[15];
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (gTasks[taskId].data[0] == 0)
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
if (gTasks[taskId].data[0] == 3)
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Moves an orb from the target mon to the attacking mon.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
void AnimMimicOrb(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
switch (sprite->data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
|
|
|
gBattleAnimArgs[0] *= -1;
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1];
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->invisible = 1;
|
|
|
|
sprite->data[0]++;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
sprite->invisible = 0;
|
|
|
|
if (sprite->affineAnimEnded)
|
|
|
|
{
|
|
|
|
ChangeSpriteAffineAnim(sprite, 1);
|
|
|
|
sprite->data[0] = 25;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
|
|
|
sprite->callback = InitAndRunAnimFastLinearTranslation;
|
2018-12-16 18:35:10 +01:00
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Animates a root that flickers away after some time.
|
|
|
|
// arg 0: x pixel offset
|
|
|
|
// arg 1: y pixel offset
|
|
|
|
// arg 2: sprite subpriority offset
|
|
|
|
// arg 3: sprite anim num
|
|
|
|
// arg 4: duration
|
|
|
|
void AnimIngrainRoot(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
if (!sprite->data[0])
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->pos2.x = gBattleAnimArgs[0];
|
|
|
|
sprite->pos2.y = gBattleAnimArgs[1];
|
|
|
|
sprite->subpriority = gBattleAnimArgs[2] + 30;
|
|
|
|
StartSpriteAnim(sprite, gBattleAnimArgs[3]);
|
|
|
|
sprite->data[2] = gBattleAnimArgs[4];
|
|
|
|
sprite->data[0]++;
|
|
|
|
if (sprite->pos1.y + sprite->pos2.y > 120)
|
|
|
|
sprite->pos1.y += sprite->pos2.y + sprite->pos1.y - 120;
|
|
|
|
}
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimRootFlickerOut;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Places a root on the path to the target mon that flickers away after some time.
|
|
|
|
// arg 0: percent along the path to the target mon
|
|
|
|
// arg 1: x pixel offset
|
|
|
|
// arg 2: y pixel offset
|
|
|
|
// arg 3: sprite subpriority offset
|
|
|
|
// arg 4: sprite anum num
|
|
|
|
// arg 5: duration
|
|
|
|
void AnimFrenzyPlantRoot(struct Sprite *sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
s16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
|
|
|
s16 attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
|
|
|
s16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
|
|
|
s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
2018-12-16 18:35:10 +01:00
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
targetX -= attackerX;
|
|
|
|
targetY -= attackerY;
|
|
|
|
sprite->pos1.x = attackerX + targetX * gBattleAnimArgs[0] / 100;
|
|
|
|
sprite->pos1.y = attackerY + targetY * gBattleAnimArgs[0] / 100;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->pos2.x = gBattleAnimArgs[1];
|
|
|
|
sprite->pos2.y = gBattleAnimArgs[2];
|
|
|
|
sprite->subpriority = gBattleAnimArgs[3] + 30;
|
|
|
|
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
|
|
|
|
sprite->data[2] = gBattleAnimArgs[5];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimRootFlickerOut;
|
2018-12-16 18:35:10 +01:00
|
|
|
gUnknown_0203A0F8[0] = sprite->pos1.x;
|
|
|
|
gUnknown_0203A0F8[1] = sprite->pos1.y;
|
2018-12-20 04:13:26 +01:00
|
|
|
gUnknown_0203A0F8[2] = targetX;
|
|
|
|
gUnknown_0203A0F8[3] = targetY;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimRootFlickerOut(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
if (++sprite->data[0] > (sprite->data[2] - 10))
|
|
|
|
sprite->invisible = sprite->data[0] % 2;
|
|
|
|
|
|
|
|
if (sprite->data[0] > sprite->data[2])
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Moves an orb in a fast wavy path.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: horizontal velocity
|
|
|
|
// arg 3: wave amplitude
|
|
|
|
// arg 4: duration
|
|
|
|
void AnimIngrainOrb(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
if (!sprite->data[0])
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
|
|
|
|
sprite->data[1] = gBattleAnimArgs[2];
|
|
|
|
sprite->data[2] = gBattleAnimArgs[3];
|
|
|
|
sprite->data[3] = gBattleAnimArgs[4];
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[0]++;
|
|
|
|
sprite->pos2.x = sprite->data[1] * sprite->data[0];
|
|
|
|
sprite->pos2.y = Sin((sprite->data[0] * 20) & 0xFF, sprite->data[2]);
|
|
|
|
if (sprite->data[0] > sprite->data[3])
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void sub_80FF9B8(struct Sprite* sprite, s16 c)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
int a = (sprite->pos1.x << 8) | sprite->pos1.y;
|
|
|
|
int b = (sprite->data[6] << 8) | sprite->data[7];
|
|
|
|
c <<= 8;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[5] = a;
|
|
|
|
sprite->data[6] = b;
|
|
|
|
sprite->data[7] = c;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 sub_80FF9E0(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u16 r10 = (u8)(sprite->data[5] >> 8);
|
|
|
|
u16 r9 = (u8)sprite->data[5];
|
|
|
|
s32 r2 = (u8)(sprite->data[6] >> 8);
|
|
|
|
s32 r4 = (u8)sprite->data[6];
|
|
|
|
s16 r6 = sprite->data[7] >> 8;
|
|
|
|
s16 r3 = sprite->data[7] & 0xFF;
|
|
|
|
s16 r4_2;
|
|
|
|
s16 r0;
|
|
|
|
s32 var1;
|
|
|
|
s32 var2;
|
|
|
|
|
|
|
|
if (r2 == 0)
|
|
|
|
r2 = -32;
|
|
|
|
else if (r2 == 255)
|
|
|
|
r2 = 272;
|
|
|
|
|
|
|
|
r4_2 = r4 - r9;
|
|
|
|
r0 = r2 - r10;
|
|
|
|
var1 = r0 * r3 / r6;
|
|
|
|
var2 = r4_2 * r3 / r6;
|
|
|
|
sprite->pos1.x = var1 + r10;
|
|
|
|
sprite->pos1.y = var2 + r9;
|
|
|
|
if (++r3 == r6)
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
sprite->data[7] = (r6 << 8) | r3;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80FFA84(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[0] == 10)
|
|
|
|
StartSpriteAffineAnim(sprite, 1);
|
|
|
|
|
|
|
|
sprite->data[0]++;
|
|
|
|
if (sprite->data[0] > 50)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_80FFAB4(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->data[0] += sprite->data[3] * 128 / sprite->data[4];
|
|
|
|
if (sprite->data[0] >= 128)
|
|
|
|
{
|
|
|
|
sprite->data[1]++;
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8);
|
|
|
|
if (sub_80FF9E0(sprite))
|
|
|
|
{
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->callback = sub_80FFA84;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
void AnimPresent(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
s16 targetX;
|
|
|
|
s16 targetY;
|
|
|
|
InitSpritePosToAnimAttacker(sprite, FALSE);
|
|
|
|
targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
|
|
|
|
targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[6] = targetX;
|
|
|
|
sprite->data[7] = targetY + 10;
|
2018-12-16 18:35:10 +01:00
|
|
|
sub_80FF9B8(sprite, 60);
|
|
|
|
sprite->data[3] = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[6] = targetX;
|
|
|
|
sprite->data[7] = targetY + 10;
|
2018-12-16 18:35:10 +01:00
|
|
|
sub_80FF9B8(sprite, 60);
|
|
|
|
sprite->data[3] = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[4] = 60;
|
|
|
|
sprite->callback = sub_80FFAB4;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_80FFB90(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
int zero;
|
|
|
|
sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
|
|
|
|
zero = 0;
|
|
|
|
if (sprite->data[0] > 0x7F)
|
|
|
|
{
|
|
|
|
sprite->data[1]++;
|
|
|
|
sprite->data[0] = zero;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8);
|
|
|
|
if (sub_80FF9E0(sprite))
|
|
|
|
{
|
|
|
|
sprite->pos2.y = zero;
|
|
|
|
sprite->data[0] = zero;
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
void AnimKnockOffItem(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
|
|
|
{
|
|
|
|
sprite->data[6] = 0;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[7] = targetY + 10;
|
2018-12-16 18:35:10 +01:00
|
|
|
sub_80FF9B8(sprite, 40);
|
|
|
|
sprite->data[3] = 3;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[4] = 60;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback = sub_80FFAB4;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[6] = 255;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[7] = targetY + 10;
|
2018-12-16 18:35:10 +01:00
|
|
|
if (IsContest())
|
|
|
|
sprite->data[6] = 0;
|
|
|
|
|
|
|
|
sub_80FF9B8(sprite, 40);
|
|
|
|
sprite->data[3] = 3;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[4] = 60;
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback = sub_80FFB90;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Animates a heal particle upward.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: vertical velocity
|
|
|
|
// arg 3: unused
|
|
|
|
void AnimPresentHealParticle(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
if (!sprite->data[0])
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimTarget(sprite, FALSE);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[1] = gBattleAnimArgs[2];
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[0]++;
|
|
|
|
sprite->pos2.y = sprite->data[1] * sprite->data[0];
|
|
|
|
if (sprite->animEnded)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
void AnimItemSteal(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
s16 attackerX;
|
|
|
|
s16 attackerY;
|
|
|
|
InitSpritePosToAnimTarget(sprite, FALSE);
|
|
|
|
attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
|
|
|
|
attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (BATTLE_PARTNER(gBattleAnimTarget) == gBattleAnimAttacker)
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[6] = attackerX;
|
|
|
|
sprite->data[7] = attackerY + 10;
|
2018-12-16 18:35:10 +01:00
|
|
|
sub_80FF9B8(sprite, 60);
|
|
|
|
sprite->data[3] = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->data[6] = attackerX;
|
|
|
|
sprite->data[7] = attackerY + 10;
|
2018-12-16 18:35:10 +01:00
|
|
|
sub_80FF9B8(sprite, 60);
|
|
|
|
sprite->data[3] = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[4] = 60;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimItemStealStep;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimItemStealStep(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
int zero;
|
|
|
|
sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
|
|
|
|
zero = 0;
|
|
|
|
if (sprite->data[0] > 127)
|
|
|
|
{
|
|
|
|
sprite->data[1]++;
|
|
|
|
sprite->data[0] = zero;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8);
|
|
|
|
if (sprite->pos2.y == 0)
|
|
|
|
PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(63));
|
|
|
|
|
|
|
|
if (sub_80FF9E0(sprite))
|
|
|
|
{
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->callback = sub_80FFA84;
|
|
|
|
PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
// Moves a bag in a circular motion.
|
|
|
|
// arg 0: y position
|
|
|
|
// arg 1: initial wave offset
|
|
|
|
void AnimTrickBag(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
int a;
|
|
|
|
int b;
|
|
|
|
|
|
|
|
if (!sprite->data[0])
|
|
|
|
{
|
|
|
|
if (!IsContest())
|
|
|
|
{
|
|
|
|
sprite->data[1] = gBattleAnimArgs[1];
|
|
|
|
sprite->pos1.x = 120;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
a = gBattleAnimArgs[1] - 32;
|
|
|
|
if (a < 0)
|
|
|
|
b = gBattleAnimArgs[1] + 0xDF;
|
|
|
|
else
|
|
|
|
b = a;
|
|
|
|
|
|
|
|
sprite->data[1] = a - ((b >> 8) << 8);
|
|
|
|
sprite->pos1.x = 70;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos1.y = gBattleAnimArgs[0];
|
|
|
|
sprite->data[2] = gBattleAnimArgs[0];
|
|
|
|
sprite->data[4] = 20;
|
|
|
|
sprite->pos2.x = Cos(sprite->data[1], 60);
|
|
|
|
sprite->pos2.y = Sin(sprite->data[1], 20);
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimTrickBagStep1;
|
2018-12-16 18:35:10 +01:00
|
|
|
if (sprite->data[1] > 0 && sprite->data[1] < 192)
|
|
|
|
sprite->subpriority = 31;
|
|
|
|
else
|
|
|
|
sprite->subpriority = 29;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimTrickBagStep1(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
switch (sprite->data[3])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
if (sprite->data[2] > 78)
|
|
|
|
{
|
|
|
|
sprite->data[3] = 1;
|
|
|
|
StartSpriteAffineAnim(sprite, 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[2] += sprite->data[4] / 10;
|
|
|
|
sprite->data[4] += 3;
|
|
|
|
sprite->pos1.y = sprite->data[2];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (sprite->data[3] && sprite->affineAnimEnded)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[2] = 0;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimTrickBagStep2;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimTrickBagStep2(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
if (sprite->data[2] == gUnknown_08592700[sprite->data[0]][1])
|
|
|
|
{
|
|
|
|
if (gUnknown_08592700[sprite->data[0]][2] == 127)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->callback = AnimTrickBagStep3;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[0]++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[2]++;
|
|
|
|
sprite->data[1] = (gUnknown_08592700[sprite->data[0]][0] * gUnknown_08592700[sprite->data[0]][2] + sprite->data[1]) & 0xFF;
|
|
|
|
if (!IsContest())
|
|
|
|
{
|
|
|
|
if ((u16)(sprite->data[1] - 1) < 191)
|
|
|
|
sprite->subpriority = 31;
|
|
|
|
else
|
|
|
|
sprite->subpriority = 29;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos2.x = Cos(sprite->data[1], 60);
|
|
|
|
sprite->pos2.y = Sin(sprite->data[1], 20);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
static void AnimTrickBagStep3(struct Sprite* sprite)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
if (sprite->data[0] > 20)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
|
|
|
|
sprite->invisible = sprite->data[0] % 2;
|
|
|
|
sprite->data[0]++;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80FFFC0(u8 taskId)
|
|
|
|
{
|
|
|
|
struct Task *task = &gTasks[taskId];
|
|
|
|
|
2018-12-18 05:08:08 +01:00
|
|
|
task->data[4] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
|
|
|
task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
2018-12-30 17:58:42 +01:00
|
|
|
task->data[10] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH);
|
|
|
|
task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT);
|
2018-12-16 18:35:10 +01:00
|
|
|
task->data[5] = (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) ? 1 : -1;
|
|
|
|
task->data[9] = 56 - (task->data[5] * 64);
|
|
|
|
task->data[8] = task->data[7] - task->data[9] + task->data[6];
|
|
|
|
task->data[2] = CreateSprite(&gUnknown_08592778, task->data[8], task->data[9], task->data[4]);
|
|
|
|
if (task->data[2] == MAX_SPRITES)
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
|
|
|
|
gSprites[task->data[2]].data[0] = 10;
|
|
|
|
gSprites[task->data[2]].data[1] = task->data[8];
|
|
|
|
gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5];
|
|
|
|
gSprites[task->data[2]].data[3] = task->data[9];
|
|
|
|
gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5];
|
|
|
|
gSprites[task->data[2]].data[5] = sub_8100504(&gSprites[task->data[2]]);
|
|
|
|
InitAnimArcTranslation(&gSprites[task->data[2]]);
|
|
|
|
task->func = sub_8100128;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8100128(u8 taskId)
|
|
|
|
{
|
|
|
|
struct Task* task = &gTasks[taskId];
|
|
|
|
struct Sprite* sprite = &gSprites[task->data[2]];
|
|
|
|
int a = task->data[0];
|
|
|
|
switch (a)
|
|
|
|
{
|
|
|
|
case 4:
|
|
|
|
sub_8100524(task, taskId);
|
2019-02-06 20:17:09 +01:00
|
|
|
if (TranslateAnimHorizontalArc(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
task->data[15] = 5;
|
|
|
|
task->data[0] = 0xFF;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
sub_8100524(task, taskId);
|
2019-02-06 20:17:09 +01:00
|
|
|
if (TranslateAnimHorizontalArc(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
task->data[15] = 9;
|
|
|
|
task->data[0] = 0xFF;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0:
|
|
|
|
sub_8100524(task, taskId);
|
2019-02-06 20:17:09 +01:00
|
|
|
if (TranslateAnimHorizontalArc(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
task->data[15] = 1;
|
|
|
|
task->data[0] = 0xFF;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
sprite->pos1.x += sprite->pos2.x;
|
|
|
|
sprite->pos1.y += sprite->pos2.y;
|
|
|
|
sprite->pos2.x = 0;
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->data[0] = 10;
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
|
|
|
sprite->data[2] = task->data[6];
|
|
|
|
sprite->data[3] = sprite->pos1.y;
|
|
|
|
sprite->data[4] = task->data[7];
|
|
|
|
sprite->data[5] = sub_8100504(sprite);
|
|
|
|
task->data[4] += 2;
|
|
|
|
task->data[3] = a;
|
|
|
|
sprite->subpriority = task->data[4];
|
|
|
|
StartSpriteAnim(sprite, task->data[3]);
|
|
|
|
InitAnimArcTranslation(sprite);
|
|
|
|
task->data[0]++;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
sub_8100524(task, taskId);
|
2019-02-06 20:17:09 +01:00
|
|
|
if (TranslateAnimHorizontalArc(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
task->data[15] = 3;
|
|
|
|
task->data[0] = 0xFF;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
sprite->pos1.x += sprite->pos2.x;
|
|
|
|
sprite->pos1.y += sprite->pos2.y;
|
|
|
|
sprite->pos2.x = 0;
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->data[0] = 10;
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
|
|
|
sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5];
|
|
|
|
sprite->data[3] = sprite->pos1.y;
|
|
|
|
sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5];
|
|
|
|
sprite->data[5] = sub_8100504(sprite);
|
|
|
|
task->data[3] = 2;
|
|
|
|
sprite->subpriority = task->data[4];
|
|
|
|
StartSpriteAnim(sprite, task->data[3]);
|
|
|
|
InitAnimArcTranslation(sprite);
|
|
|
|
task->data[0]++;
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
sprite->pos1.x += sprite->pos2.x;
|
|
|
|
sprite->pos1.y += sprite->pos2.y;
|
|
|
|
sprite->pos2.x = 0;
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->data[0] = 10;
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
|
|
|
sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5];
|
|
|
|
sprite->data[3] = sprite->pos1.y;
|
|
|
|
sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5];
|
|
|
|
sprite->data[5] = sub_8100504(sprite);
|
|
|
|
task->data[4] -= 2;
|
|
|
|
task->data[3] = 3;
|
|
|
|
sprite->subpriority = task->data[4];
|
|
|
|
StartSpriteAnim(sprite, task->data[3]);
|
|
|
|
InitAnimArcTranslation(sprite);
|
|
|
|
task->data[0]++;
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
sub_8100524(task, taskId);
|
2019-02-06 20:17:09 +01:00
|
|
|
if (TranslateAnimHorizontalArc(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
task->data[15] = 7;
|
|
|
|
task->data[0] = 0xFF;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
sprite->pos1.x += sprite->pos2.x;
|
|
|
|
sprite->pos1.y += sprite->pos2.y;
|
|
|
|
sprite->pos2.x = 0;
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->data[0] = 10;
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
|
|
|
sprite->data[2] = task->data[6];
|
|
|
|
sprite->data[3] = sprite->pos1.y;
|
|
|
|
sprite->data[4] = task->data[7];
|
|
|
|
sprite->data[5] = sub_8100504(sprite);
|
|
|
|
task->data[4] += 2;
|
|
|
|
task->data[3] = 4;
|
|
|
|
sprite->subpriority = task->data[4];
|
|
|
|
StartSpriteAnim(sprite, task->data[3]);
|
|
|
|
InitAnimArcTranslation(sprite);
|
|
|
|
task->data[0]++;
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
sprite->pos1.x += sprite->pos2.x;
|
|
|
|
sprite->pos1.y += sprite->pos2.y;
|
|
|
|
sprite->pos2.x = 0;
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->data[0] = 10;
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
|
|
|
sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5];
|
|
|
|
sprite->data[3] = sprite->pos1.y;
|
|
|
|
sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5];
|
|
|
|
sprite->data[5] = sub_8100504(sprite);
|
|
|
|
task->data[3] = 5;
|
|
|
|
sprite->subpriority = task->data[4];
|
|
|
|
StartSpriteAnim(sprite, task->data[3]);
|
|
|
|
InitAnimArcTranslation(sprite);
|
|
|
|
task->data[0]++;
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
sub_8100524(task, taskId);
|
2019-02-06 20:17:09 +01:00
|
|
|
if (TranslateAnimHorizontalArc(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
task->data[15] = 11;
|
|
|
|
task->data[0] = 0xFF;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 11:
|
|
|
|
{
|
|
|
|
sprite->pos1.x += sprite->pos2.x;
|
|
|
|
sprite->pos1.y += sprite->pos2.y;
|
|
|
|
sprite->pos2.x = 0;
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->data[0] = 10;
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
|
|
|
sprite->data[2] = task->data[8];
|
|
|
|
sprite->data[3] = sprite->pos1.y;
|
|
|
|
sprite->data[4] = task->data[9];
|
|
|
|
sprite->data[5] = sub_8100504(sprite);
|
|
|
|
task->data[4] -= 2;
|
|
|
|
task->data[3] = 6;
|
|
|
|
sprite->subpriority = task->data[4];
|
|
|
|
StartSpriteAnim(sprite, task->data[3]);
|
|
|
|
InitAnimArcTranslation(sprite);
|
|
|
|
task->data[0]++;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 12:
|
|
|
|
sub_8100524(task, taskId);
|
2019-02-06 20:17:09 +01:00
|
|
|
if (TranslateAnimHorizontalArc(sprite))
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
DestroySprite(sprite);
|
|
|
|
task->data[0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 13:
|
|
|
|
if (task->data[12] == 0)
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
break;
|
|
|
|
case 0xFF:
|
|
|
|
if (++task->data[1] > 5)
|
|
|
|
{
|
|
|
|
task->data[1] = 0;
|
|
|
|
task->data[0] = task->data[15];
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static s16 sub_8100504(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
s16 var = 8;
|
|
|
|
if (sprite->data[4] < sprite->pos1.y)
|
|
|
|
var = -var;
|
|
|
|
|
|
|
|
return var;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8100524(struct Task* task, u8 taskId)
|
|
|
|
{
|
|
|
|
task->data[14]++;
|
|
|
|
if (task->data[14] > 0)
|
|
|
|
{
|
|
|
|
u8 spriteId;
|
|
|
|
s16 spriteX;
|
|
|
|
s16 spriteY;
|
|
|
|
task->data[14] = 0;
|
|
|
|
spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x;
|
|
|
|
spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y;
|
|
|
|
spriteId = CreateSprite(&gUnknown_08592778, spriteX, spriteY, task->data[4]);
|
|
|
|
if (spriteId != MAX_SPRITES)
|
|
|
|
{
|
|
|
|
gSprites[spriteId].data[6] = taskId;
|
|
|
|
gSprites[spriteId].data[7] = 12;
|
|
|
|
gTasks[taskId].data[12]++;
|
|
|
|
gSprites[spriteId].data[0] = task->data[13] & 1;
|
|
|
|
gTasks[taskId].data[13]++;
|
|
|
|
StartSpriteAnim(&gSprites[spriteId], task->data[3]);
|
|
|
|
gSprites[spriteId].subpriority = task->data[4];
|
|
|
|
gSprites[spriteId].callback = sub_80CC408;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_80CC408(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->data[0]++;
|
|
|
|
if (sprite->data[0] > 1)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->invisible ^= 1;
|
|
|
|
sprite->data[1]++;
|
|
|
|
if (sprite->data[1] > 8)
|
|
|
|
{
|
|
|
|
gTasks[sprite->data[6]].data[sprite->data[7]]--;
|
|
|
|
DestroySprite(sprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8100640(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u8 battler;
|
|
|
|
if (!gBattleAnimArgs[6])
|
|
|
|
battler = gBattleAnimAttacker;
|
|
|
|
else
|
|
|
|
battler = gBattleAnimTarget;
|
|
|
|
|
|
|
|
if (GetBattlerSide(battler) != 0)
|
|
|
|
{
|
|
|
|
sprite->data[4] = 0;
|
|
|
|
sprite->data[2] = gBattleAnimArgs[3];
|
|
|
|
sprite->pos1.x = 0xFFF0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[4] = 1;
|
|
|
|
sprite->data[2] = -gBattleAnimArgs[3];
|
|
|
|
sprite->pos1.x = 0x100;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[1] = gBattleAnimArgs[1];
|
|
|
|
sprite->data[0] = gBattleAnimArgs[2];
|
|
|
|
sprite->data[3] = gBattleAnimArgs[4];
|
|
|
|
switch (gBattleAnimArgs[5])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
sprite->pos1.y = gBattleAnimArgs[0];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.priority = GetBattlerSpriteBGPriority(battler);
|
2018-12-16 18:35:10 +01:00
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
sprite->pos1.y = gBattleAnimArgs[0];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[0];
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.priority = GetBattlerSpriteBGPriority(battler);
|
2018-12-16 18:35:10 +01:00
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[0];
|
|
|
|
GetAnimBattlerSpriteId(ANIM_TARGET);
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->callback = sub_810074C;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_810074C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
int a = sprite->data[7];
|
|
|
|
sprite->data[7]++;
|
|
|
|
sprite->pos2.y = (sprite->data[1] * gSineTable[sprite->data[0]]) >> 8;
|
|
|
|
sprite->pos2.x = sprite->data[2] * a;
|
|
|
|
sprite->data[0] = (sprite->data[3] * a) & 0xFF;
|
|
|
|
if (!sprite->data[4])
|
|
|
|
{
|
|
|
|
if (sprite->pos2.x + sprite->pos1.x <= 0xF7)
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (sprite->pos2.x + sprite->pos1.x > -16)
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2018-12-18 05:08:08 +01:00
|
|
|
DestroySpriteAndMatrix(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81007C4(u8 taskId)
|
|
|
|
{
|
|
|
|
struct Task* task = &gTasks[taskId];
|
|
|
|
switch (task->data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
task->data[8] = IndexOfSpritePaletteTag(ANIM_TAG_LEAF) * 16 + 256;
|
|
|
|
task->data[12] = IndexOfSpritePaletteTag(ANIM_TAG_RAZOR_LEAF) * 16 + 256;
|
|
|
|
task->data[0]++;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (++task->data[9] >= 0)
|
|
|
|
{
|
|
|
|
task->data[9] = 0;
|
|
|
|
BlendPalette(task->data[8], 16, task->data[10], gMagicalLeafBlendColors[task->data[11]]);
|
|
|
|
BlendPalette(task->data[12], 16, task->data[10], gMagicalLeafBlendColors[task->data[11]]);
|
|
|
|
if (++task->data[10] == 17)
|
|
|
|
{
|
|
|
|
task->data[10] = 0;
|
|
|
|
if (++task->data[11] == 7)
|
|
|
|
task->data[11] = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gBattleAnimArgs[7] == -1)
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8100898(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u8 a;
|
|
|
|
u8 b;
|
|
|
|
u16 c;
|
|
|
|
u16 x;
|
|
|
|
u16 y;
|
|
|
|
|
|
|
|
if (gBattleAnimArgs[4] == 0)
|
|
|
|
{
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (gBattleAnimArgs[0] == 0)
|
|
|
|
{
|
|
|
|
a = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
|
|
|
b = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
a = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
|
|
|
b = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[0] = gBattleAnimArgs[4];
|
|
|
|
if (gBattleAnimArgs[1] == 0)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = gBattleAnimArgs[2] + a;
|
|
|
|
sprite->pos1.y = gBattleAnimArgs[3] + b;
|
|
|
|
sprite->data[5] = a;
|
|
|
|
sprite->data[6] = b;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x = a;
|
|
|
|
sprite->pos1.y = b;
|
|
|
|
sprite->data[5] = gBattleAnimArgs[2] + a;
|
|
|
|
sprite->data[6] = gBattleAnimArgs[3] + b;
|
|
|
|
}
|
|
|
|
|
|
|
|
x = sprite->pos1.x;
|
|
|
|
sprite->data[1] = x * 16;
|
|
|
|
y = sprite->pos1.y;
|
|
|
|
sprite->data[2] = y * 16;
|
|
|
|
sprite->data[3] = (sprite->data[5] - sprite->pos1.x) * 16 / gBattleAnimArgs[4];
|
|
|
|
sprite->data[4] = (sprite->data[6] - sprite->pos1.y) * 16 / gBattleAnimArgs[4];
|
|
|
|
c = ArcTan2Neg(sprite->data[5] - x, sprite->data[6] - y);
|
|
|
|
if (IsContest())
|
|
|
|
c -= 0x8000;
|
|
|
|
|
2018-12-18 05:08:08 +01:00
|
|
|
TrySetSpriteRotScale(sprite, 0, 0x100, 0x100, c);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback = sub_81009A0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81009A0(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[0])
|
|
|
|
{
|
|
|
|
sprite->data[1] += sprite->data[3];
|
|
|
|
sprite->data[2] += sprite->data[4];
|
|
|
|
sprite->pos1.x = sprite->data[1] >> 4 ;
|
|
|
|
sprite->pos1.y = sprite->data[2] >> 4 ;
|
|
|
|
sprite->data[0]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-18 05:08:08 +01:00
|
|
|
DestroySpriteAndMatrix(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81009DC(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->animEnded)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81009F8(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) != 0)
|
|
|
|
{
|
|
|
|
sprite->pos1.x -= gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x += gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
}
|
|
|
|
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8100A50(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) == 0)
|
|
|
|
StartSpriteAnim(sprite, 1);
|
|
|
|
|
|
|
|
sprite->callback = sub_81009DC;
|
2018-12-20 04:13:26 +01:00
|
|
|
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8100A94(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos1.x += gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
sprite->data[0] = gBattleAnimArgs[2];
|
|
|
|
sprite->data[1] = gBattleAnimArgs[3];
|
|
|
|
sprite->data[3] = gBattleAnimArgs[4];
|
|
|
|
sprite->data[5] = gBattleAnimArgs[5];
|
|
|
|
StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]);
|
2018-12-18 05:08:08 +01:00
|
|
|
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
2019-02-06 20:17:09 +01:00
|
|
|
sprite->callback = TranslateSpriteLinearAndFlicker;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Moves the sprite in a diagonally slashing motion across the target mon.
|
|
|
|
// Used by moves such as MOVE_CUT and MOVE_AERIAL_ACE.
|
|
|
|
// arg 0: initial x pixel offset
|
|
|
|
// arg 1: initial y pixel offset
|
|
|
|
// arg 2: slice direction; 0 = right-to-left, 1 = left-to-right
|
|
|
|
void AnimCuttingSlice(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
|
|
|
|
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
|
|
|
sprite->pos1.y += 8;
|
|
|
|
|
|
|
|
sprite->callback = AnimSliceStep;
|
|
|
|
if (gBattleAnimArgs[2] == 0)
|
|
|
|
{
|
|
|
|
sprite->pos1.x += gBattleAnimArgs[0];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x -= gBattleAnimArgs[0];
|
|
|
|
sprite->hFlip = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
sprite->data[1] -= 0x400;
|
|
|
|
sprite->data[2] += 0x400;
|
|
|
|
sprite->data[5] = gBattleAnimArgs[2];
|
|
|
|
if (sprite->data[5] == 1)
|
|
|
|
sprite->data[1] = -sprite->data[1];
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8100B88(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u8 a;
|
|
|
|
u8 b;
|
|
|
|
switch (gBattleAnimArgs[3])
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
a = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0);
|
|
|
|
b = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
a = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
|
|
|
b = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
|
|
|
|
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget)))
|
|
|
|
{
|
|
|
|
a = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0) + a) / 2;
|
|
|
|
b = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1) + b) / 2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0:
|
|
|
|
default:
|
|
|
|
a = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
|
|
|
|
b = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos1.x = a;
|
|
|
|
sprite->pos1.y = b;
|
|
|
|
if (GetBattlerSide(gBattleAnimTarget) == 0)
|
|
|
|
sprite->pos1.y += 8;
|
|
|
|
|
|
|
|
sprite->callback = AnimSliceStep;
|
|
|
|
if (gBattleAnimArgs[2] == 0)
|
|
|
|
{
|
|
|
|
sprite->pos1.x += gBattleAnimArgs[0];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x -= gBattleAnimArgs[0];
|
|
|
|
sprite->hFlip = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
sprite->data[1] -= 0x400;
|
|
|
|
sprite->data[2] += 0x400;
|
|
|
|
sprite->data[5] = gBattleAnimArgs[2];
|
|
|
|
if (sprite->data[5] == 1)
|
|
|
|
sprite->data[1] = -sprite->data[1];
|
|
|
|
}
|
|
|
|
|
|
|
|
static void AnimSliceStep(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->data[3] += sprite->data[1];
|
|
|
|
sprite->data[4] += sprite->data[2];
|
|
|
|
if (sprite->data[5] == 0)
|
|
|
|
sprite->data[1] += 0x18;
|
|
|
|
else
|
|
|
|
sprite->data[1] -= 0x18;
|
|
|
|
|
|
|
|
sprite->data[2] -= 0x18;
|
|
|
|
sprite->pos2.x = sprite->data[3] >> 8;
|
|
|
|
sprite->pos2.y = sprite->data[4] >> 8;
|
|
|
|
sprite->data[0]++;
|
|
|
|
if (sprite->data[0] == 20)
|
|
|
|
{
|
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
|
|
|
sprite->data[0] = 3;
|
|
|
|
sprite->callback = WaitAnimForDuration;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void unref_sub_8100D38(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[2] > 1)
|
|
|
|
{
|
|
|
|
if (sprite->data[3] & 1)
|
|
|
|
{
|
|
|
|
sprite->invisible = 0;
|
|
|
|
gSprites[sprite->data[0]].invisible = 0;
|
|
|
|
gSprites[sprite->data[1]].invisible = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->invisible = 1;
|
|
|
|
gSprites[sprite->data[0]].invisible = 1;
|
|
|
|
gSprites[sprite->data[1]].invisible = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[3]++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[2]++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->data[3] == 10)
|
|
|
|
{
|
|
|
|
DestroySprite(&gSprites[sprite->data[0]]);
|
|
|
|
DestroySprite(&gSprites[sprite->data[1]]);
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8100E1C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->data[0] = gBattleAnimArgs[2];
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
|
|
|
sprite->pos1.x -= gBattleAnimArgs[0];
|
|
|
|
else
|
|
|
|
sprite->pos1.x += gBattleAnimArgs[0];
|
|
|
|
|
|
|
|
StartSpriteAnim(sprite, gBattleAnimArgs[5]);
|
|
|
|
sprite->data[1] = -gBattleAnimArgs[3];
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
sprite->data[3] = gBattleAnimArgs[4];
|
|
|
|
sprite->callback = sub_8100E80;
|
|
|
|
sprite->callback(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8100E80(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos2.x = Cos(sprite->data[0], 100);
|
|
|
|
sprite->pos2.y = Sin(sprite->data[0], 20);
|
|
|
|
if (sprite->data[0] < 128)
|
|
|
|
sprite->subpriority = 0;
|
|
|
|
else
|
|
|
|
sprite->subpriority = 14;
|
|
|
|
|
|
|
|
sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF;
|
|
|
|
sprite->data[5] += 0x82;
|
|
|
|
sprite->pos2.y += sprite->data[5] >> 8;
|
|
|
|
sprite->data[2]++;
|
|
|
|
if (sprite->data[2] == sprite->data[3])
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8100EF0(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (IsContest())
|
|
|
|
gBattleAnimArgs[1] += 8;
|
|
|
|
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest())
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker) + 1;
|
2018-12-16 18:35:10 +01:00
|
|
|
else
|
2018-12-20 04:13:26 +01:00
|
|
|
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
|
2018-12-16 18:35:10 +01:00
|
|
|
|
|
|
|
sprite->data[0] = gBattleAnimArgs[2];
|
|
|
|
sprite->data[2] = (IndexOfSpritePaletteTag(ANIM_TAG_PROTECT) << 4) + 0x100;
|
|
|
|
sprite->data[7] = 16;
|
|
|
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7]));
|
|
|
|
sprite->callback = sub_8100FD4;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8100FD4(struct Sprite *sprite)
|
|
|
|
{
|
|
|
|
int a;
|
|
|
|
int i;
|
|
|
|
sprite->data[5] += 96;
|
|
|
|
sprite->pos2.x = -(sprite->data[5] >> 8);
|
|
|
|
if (++sprite->data[1] > 1)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
a = gPlttBufferFaded[sprite->data[2] + 1];
|
|
|
|
i = 0;
|
|
|
|
do
|
|
|
|
{
|
|
|
|
gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1];
|
|
|
|
} while (i < 6);
|
|
|
|
|
|
|
|
gPlttBufferFaded[sprite->data[2] + 7] = a;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1)
|
|
|
|
{
|
|
|
|
sprite->data[6] = 0;
|
|
|
|
sprite->data[7] -= 1;
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7]));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->data[0] > 0)
|
|
|
|
{
|
|
|
|
sprite->data[0] -= 1;
|
|
|
|
}
|
|
|
|
else if (++sprite->data[6] > 1)
|
|
|
|
{
|
|
|
|
sprite->data[6] = 0;
|
|
|
|
sprite->data[7]++;
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7]));
|
|
|
|
if (sprite->data[7] == 16)
|
|
|
|
{
|
|
|
|
sprite->invisible = 1;
|
2019-02-06 20:17:09 +01:00
|
|
|
sprite->callback = DestroyAnimSpriteAndDisableBlend;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81010CC(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 0xFFE8;
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[3] = 0;
|
|
|
|
sprite->data[4] = 0;
|
|
|
|
sprite->data[6] = 0;
|
|
|
|
sprite->data[7] = 16;
|
|
|
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
|
|
|
|
sprite->callback = sub_8101138;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101138(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
switch (sprite->data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
if (++sprite->data[2] > 0)
|
|
|
|
{
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
if (((++sprite->data[1]) & 1) != 0)
|
|
|
|
{
|
|
|
|
if (sprite->data[6] <= 15)
|
|
|
|
sprite->data[6]++;
|
|
|
|
}
|
|
|
|
else if (sprite->data[7] > 0)
|
|
|
|
sprite->data[7]--;
|
|
|
|
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
|
|
|
|
if (sprite->data[6] == 16 && sprite->data[7] == 0)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[0]++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (++sprite->data[1] > 8)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
StartSpriteAffineAnim(sprite, 1);
|
|
|
|
sprite->data[0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
sub_8101298(sprite, 16, 4);
|
|
|
|
if (++sprite->data[1] > 2)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->pos1.y++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (++sprite->data[2] <= 29)
|
|
|
|
break;
|
|
|
|
|
|
|
|
if (sprite->data[2] & 1)
|
|
|
|
{
|
|
|
|
if (sprite->data[6] > 0)
|
|
|
|
sprite->data[6]--;
|
|
|
|
}
|
|
|
|
else if (sprite->data[7] <= 15)
|
|
|
|
{
|
|
|
|
sprite->data[7]++;
|
|
|
|
}
|
|
|
|
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
|
|
|
|
if (sprite->data[6] == 0 && sprite->data[7] == 16)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
sprite->invisible = 1;
|
|
|
|
sprite->data[0]++;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101298(struct Sprite* sprite, int unk1, int unk2)
|
|
|
|
{
|
|
|
|
if (sprite->data[3] <= 11)
|
|
|
|
sprite->data[4] += 2;
|
|
|
|
|
|
|
|
if ((u16)(sprite->data[3] - 0x12) <= 0x17)
|
|
|
|
sprite->data[4] -= 2;
|
|
|
|
|
|
|
|
if ((sprite->data[3]) > 0x2F)
|
|
|
|
sprite->data[4] += 2;
|
|
|
|
|
|
|
|
sprite->pos2.x = sprite->data[4] / 9;
|
|
|
|
sprite->pos2.y = sprite->data[4] / 14;
|
|
|
|
if (sprite->pos2.y < 0)
|
|
|
|
sprite->pos2.y *= -1;
|
|
|
|
|
|
|
|
sprite->data[3]++;
|
|
|
|
if (sprite->data[3] > 0x3B)
|
|
|
|
sprite->data[3] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_810130C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (!gBattleAnimArgs[2])
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
sprite->data[0] = gBattleAnimArgs[5];
|
|
|
|
sprite->data[1] = gBattleAnimArgs[3];
|
|
|
|
sprite->data[2] = gBattleAnimArgs[4];
|
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
2019-02-06 20:17:09 +01:00
|
|
|
sprite->callback = TranslateSpriteLinearFixedPoint;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_810135C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u8 battler;
|
|
|
|
if (!gBattleAnimArgs[2])
|
|
|
|
battler = gBattleAnimAttacker;
|
|
|
|
else
|
|
|
|
battler = gBattleAnimTarget;
|
|
|
|
|
|
|
|
if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler)))
|
|
|
|
{
|
|
|
|
SetAverageBattlerPositions(battler, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y);
|
2018-12-20 04:13:26 +01:00
|
|
|
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!gBattleAnimArgs[6])
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(battler, 0);
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(battler, 1) + gBattleAnimArgs[1];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(battler, 2);
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[1];
|
|
|
|
}
|
|
|
|
|
2018-12-20 04:13:26 +01:00
|
|
|
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[0] = gBattleAnimArgs[5];
|
|
|
|
sprite->data[1] = gBattleAnimArgs[3];
|
|
|
|
sprite->data[2] = gBattleAnimArgs[4];
|
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
2019-02-06 20:17:09 +01:00
|
|
|
sprite->callback = TranslateSpriteLinearFixedPoint;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8101440(struct Sprite* sprite)
|
|
|
|
{
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
sprite->pos1.x += gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x -= gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
StartSpriteAnim(sprite, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->callback = sub_81014A0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81014A0(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[0] > 30)
|
|
|
|
{
|
|
|
|
sprite->pos2.y = (30 - sprite->data[0]) / 3;
|
|
|
|
sprite->pos2.x = Sin(sprite->data[1] * 4, 3);
|
|
|
|
sprite->data[1]++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->animEnded)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81014F4(struct Sprite* sprite)
|
|
|
|
{
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
|
|
|
{
|
|
|
|
sprite->pos1.x += gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
sprite->data[3] = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x -= gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y += gBattleAnimArgs[1];
|
|
|
|
sprite->data[3] = 0xFFFF;
|
|
|
|
StartSpriteAffineAnim(sprite, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->callback = sub_8101560;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101560(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos2.y = -(sprite->data[0] / 0x28);
|
|
|
|
sprite->pos2.x = sprite->data[4] / 10;
|
|
|
|
sprite->data[4] += sprite->data[3] * 2;
|
|
|
|
sprite->data[0] += sprite->data[1];
|
|
|
|
if (++sprite->data[1] > 60)
|
2018-12-18 05:08:08 +01:00
|
|
|
DestroySpriteAndMatrix(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81015AC(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos1.x -= 32;
|
|
|
|
sprite->pos1.y -= 32;
|
|
|
|
sprite->data[0] = 20;
|
|
|
|
sprite->callback = WaitAnimForDuration;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_81015D4);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81015D4(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
switch (sprite->data[5] & 1)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
sprite->data[0] = 1;
|
|
|
|
sprite->callback = WaitAnimForDuration;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_81015D4);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
sprite->pos1.x += sprite->pos2.x;
|
|
|
|
sprite->pos1.y += sprite->pos2.y;
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->pos2.x = 0;
|
|
|
|
sprite->data[0] = 8;
|
|
|
|
sprite->data[2] = sprite->pos1.x + gUnknown_08592CD0[sprite->data[5] >> 8][0];
|
|
|
|
sprite->data[4] = sprite->pos1.y + gUnknown_08592CD0[sprite->data[5] >> 8][1];
|
|
|
|
sprite->callback = StartAnimLinearTranslation;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_8101684);
|
|
|
|
sprite->data[5] += 0x100;
|
|
|
|
PlaySE12WithPanning(SE_W199, BattleAnimAdjustPanning(63));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[5] ^= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101684(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if ((sprite->data[5] >> 8) == 4)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 10;
|
|
|
|
sprite->callback = WaitAnimForDuration;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_81016B8);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->callback = sub_81015D4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81016B8(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
s16 a;
|
|
|
|
s16 b;
|
|
|
|
if (sprite->oam.affineParam == 0)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 3;
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->callback = WaitAnimForDuration;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_8101774);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
switch (sprite->oam.affineParam)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
a = -8;
|
|
|
|
b = -8;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
a = -8;
|
|
|
|
b = 8;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
a = 8;
|
|
|
|
b = -8;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
a = 8;
|
|
|
|
b = 8;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos1.x += sprite->pos2.x;
|
|
|
|
sprite->pos1.y += sprite->pos2.y;
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
sprite->pos2.x = 0;
|
|
|
|
sprite->data[0] = 6;
|
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + a;
|
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + b;
|
|
|
|
sprite->callback = StartAnimLinearTranslation;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_8101820);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101774(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[2] == 0)
|
|
|
|
{
|
|
|
|
if ((sprite->data[1] += 3) > 16)
|
|
|
|
sprite->data[1] = 16;
|
|
|
|
}
|
|
|
|
else if ((sprite->data[1] -= 3) < 0)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
BlendPalettes(sub_80A75AC(1, 1, 1, 1, 1, 0, 0), sprite->data[1], RGB(31, 31, 31));
|
|
|
|
if (sprite->data[1] == 16)
|
|
|
|
{
|
|
|
|
int pal;
|
|
|
|
sprite->data[2]++;
|
|
|
|
pal = sprite->oam.paletteNum;
|
|
|
|
LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4);
|
|
|
|
PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63));
|
|
|
|
}
|
|
|
|
else if (sprite->data[1] == 0)
|
|
|
|
{
|
|
|
|
sprite->callback = sub_8101820;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101820(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->callback = sub_8101848;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101848(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[0] % 3 == 0)
|
|
|
|
{
|
|
|
|
sprite->data[1]++;
|
|
|
|
sprite->invisible ^= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[0]++;
|
|
|
|
if (sprite->data[1] == 8)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8101898(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->oam.affineParam = gBattleAnimArgs[0];
|
|
|
|
if ((s16)sprite->oam.affineParam == 1)
|
|
|
|
{
|
|
|
|
sprite->pos1.x -= 0x18;
|
|
|
|
sprite->pos1.y -= 0x18;
|
|
|
|
}
|
|
|
|
else if ((s16)sprite->oam.affineParam == 2)
|
|
|
|
{
|
|
|
|
sprite->pos1.x -= 0x18;
|
|
|
|
sprite->pos1.y += 0x18;
|
|
|
|
sprite->oam.matrixNum = 16;
|
|
|
|
}
|
|
|
|
else if ((s16)sprite->oam.affineParam == 3)
|
|
|
|
{
|
|
|
|
sprite->pos1.x += 0x18;
|
|
|
|
sprite->pos1.y -= 0x18;
|
|
|
|
sprite->oam.matrixNum = 8;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x += 0x18;
|
|
|
|
sprite->pos1.y += 0x18;
|
|
|
|
sprite->oam.matrixNum = 24;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->oam.tileNum = (sprite->oam.tileNum + 16);
|
|
|
|
sprite->callback = sub_81015AC;
|
|
|
|
sprite->callback(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8101940(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->invisible = 1;
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
switch (gBattleAnimArgs[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
sprite->callback = sub_8101998;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
sprite->callback = sub_8101A74;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
sprite->callback = sub_8101AC4;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
sprite->callback = sub_8101B84;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101998(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 6;
|
|
|
|
sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? 2 : -2;
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_81019E8);
|
2019-02-06 20:17:09 +01:00
|
|
|
sprite->callback = TranslateMonSpriteLinear;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81019E8(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[0] == 0)
|
|
|
|
{
|
|
|
|
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
|
2018-12-18 05:08:08 +01:00
|
|
|
PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00;
|
|
|
|
sprite->data[5] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[5] += sprite->data[4];
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
|
|
|
|
SetBattlerSpriteYOffsetFromRotation(sprite->data[3]);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (++sprite->data[0] > 3)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->callback = sub_8101B84;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101A74(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 4;
|
|
|
|
sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? -3 : 3;
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_8101B84);
|
2019-02-06 20:17:09 +01:00
|
|
|
sprite->callback = TranslateMonSpriteLinear;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101AC4(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[0] > 8)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->callback = sub_8101AE8;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101AE8(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[0] == 0)
|
|
|
|
{
|
|
|
|
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
|
|
|
|
sprite->data[6] = GetBattlerSide(gBattleAnimAttacker);
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
|
|
|
{
|
|
|
|
sprite->data[4] = 0xFC00;
|
|
|
|
sprite->data[5] = 0xC00;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[4] = 0x400;
|
|
|
|
sprite->data[5] = 0xF400;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[5] += sprite->data[4];
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
|
|
|
|
SetBattlerSpriteYOffsetFromRotation(sprite->data[3]);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (++sprite->data[0] > 2)
|
|
|
|
{
|
2018-12-18 05:08:08 +01:00
|
|
|
ResetSpriteRotScale(sprite->data[3]);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->callback = sub_8101B84;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101B84(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8101B90(struct Sprite *sprite)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->callback = sub_8101BA0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101BA0(struct Sprite *sprite)
|
|
|
|
{
|
|
|
|
switch (sprite->data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[2] = gBattlerSpriteIds[gBattleAnimAttacker];
|
|
|
|
sprite->data[3] = GetBattlerSide(gBattleAnimAttacker);
|
|
|
|
sprite->data[4] = (sprite->data[3] != B_SIDE_PLAYER) ? 0x200 : -0x200;
|
|
|
|
sprite->data[5] = 0;
|
2018-12-18 05:08:08 +01:00
|
|
|
PrepareBattlerSpriteForRotScale(sprite->data[2], ST_OAM_OBJ_NORMAL);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->data[0]++;
|
|
|
|
// fall through
|
|
|
|
case 1:
|
|
|
|
sprite->data[5] += sprite->data[4];
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
|
|
|
|
SetBattlerSpriteYOffsetFromRotation(sprite->data[2]);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (++sprite->data[1] > 3)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[4] *= -1;
|
|
|
|
sprite->data[0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
sprite->data[5] += sprite->data[4];
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
|
|
|
|
SetBattlerSpriteYOffsetFromRotation(sprite->data[2]);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (++sprite->data[1] > 3)
|
|
|
|
{
|
2018-12-18 05:08:08 +01:00
|
|
|
ResetSpriteRotScale(sprite->data[2]);
|
2018-12-16 18:35:10 +01:00
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8101C94(u8 taskId)
|
|
|
|
{
|
|
|
|
u8 a;
|
|
|
|
|
|
|
|
gTasks[taskId].data[0] = gBattlerSpriteIds[gBattleAnimAttacker];
|
|
|
|
a = GetBattlerSide(gBattleAnimAttacker);
|
|
|
|
gTasks[taskId].data[1] = a;
|
|
|
|
gTasks[taskId].data[2] = 0;
|
|
|
|
switch (gBattleAnimArgs[0])
|
|
|
|
{
|
|
|
|
default:
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
break;
|
|
|
|
case 0:
|
|
|
|
gTasks[taskId].data[2] = 0;
|
|
|
|
gTasks[taskId].data[3] = 8;
|
|
|
|
gTasks[taskId].data[4] = 0;
|
|
|
|
gTasks[taskId].data[5] = 3;
|
|
|
|
if (a == 0)
|
|
|
|
gTasks[taskId].data[5] *= -1;
|
|
|
|
|
|
|
|
gTasks[taskId].func = sub_8101D2C;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
gTasks[taskId].data[3] = 8;
|
|
|
|
gTasks[taskId].data[4] = 0x600;
|
|
|
|
gTasks[taskId].data[5] = 0xC0;
|
|
|
|
if (a == 0)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[4] = -gTasks[taskId].data[4];
|
|
|
|
gTasks[taskId].data[5] = -gTasks[taskId].data[5];
|
|
|
|
}
|
|
|
|
|
|
|
|
gTasks[taskId].func = sub_8101EEC;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101D2C(u8 taskId)
|
|
|
|
{
|
|
|
|
struct Task *task = &gTasks[taskId];
|
|
|
|
switch (task->data[2])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
if (task->data[3])
|
|
|
|
{
|
|
|
|
task->data[4] += task->data[5];
|
|
|
|
gSprites[task->data[0]].pos2.x = task->data[4];
|
|
|
|
task->data[3]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
task->data[3] = 8;
|
|
|
|
task->data[4] = 0;
|
|
|
|
task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0;
|
2018-12-18 05:08:08 +01:00
|
|
|
PrepareBattlerSpriteForRotScale(task->data[0], ST_OAM_OBJ_NORMAL);
|
2018-12-16 18:35:10 +01:00
|
|
|
task->data[2]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (task->data[3])
|
|
|
|
{
|
|
|
|
task->data[4] += task->data[5];
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]);
|
|
|
|
SetBattlerSpriteYOffsetFromRotation(task->data[0]);
|
2018-12-16 18:35:10 +01:00
|
|
|
task->data[3]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
task->data[3] = 8;
|
|
|
|
task->data[4] = gSprites[task->data[0]].pos2.x;
|
|
|
|
task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2;
|
|
|
|
task->data[6] = 1;
|
|
|
|
task->data[2]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (task->data[3])
|
|
|
|
{
|
|
|
|
if (task->data[6])
|
|
|
|
{
|
|
|
|
task->data[6]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (task->data[3] & 1)
|
|
|
|
gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5];
|
|
|
|
else
|
|
|
|
gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5];
|
|
|
|
|
|
|
|
task->data[6] = 1;
|
|
|
|
task->data[3]--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gSprites[task->data[0]].pos2.x = task->data[4];
|
|
|
|
task->data[3] = 12;
|
|
|
|
task->data[2]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
if (task->data[3])
|
|
|
|
{
|
|
|
|
task->data[3]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
task->data[3] = 3;
|
|
|
|
task->data[4] = gSprites[task->data[0]].pos2.x;
|
|
|
|
task->data[5] = (task->data[1] == 0) ? 8 : -8;
|
|
|
|
task->data[2]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
if (task->data[3])
|
|
|
|
{
|
|
|
|
task->data[4] += task->data[5];
|
|
|
|
gSprites[task->data[0]].pos2.x = task->data[4];
|
|
|
|
task->data[3]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8101EEC(u8 taskId)
|
|
|
|
{
|
|
|
|
struct Task* task = &gTasks[taskId];
|
|
|
|
if (task->data[3])
|
|
|
|
{
|
|
|
|
task->data[4] -= task->data[5];
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]);
|
|
|
|
SetBattlerSpriteYOffsetFromRotation(task->data[0]);
|
2018-12-16 18:35:10 +01:00
|
|
|
task->data[3]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-18 05:08:08 +01:00
|
|
|
ResetSpriteRotScale(task->data[0]);
|
2018-12-16 18:35:10 +01:00
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8101F40(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (gBattleAnimArgs[0] == 0)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2];
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_810208C);
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8101FA8(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0;
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_8102044);
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8101FF0(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0 + gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
|
|
|
StartSpriteAnim(sprite, 1);
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->callback = sub_810208C;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8102044(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[0] > 8)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 12;
|
|
|
|
sprite->data[1] = 8;
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_810207C);
|
2019-02-06 20:17:09 +01:00
|
|
|
sprite->callback = TranslateSpriteLinear;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_810207C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->callback = sub_810208C;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_810208C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[0] > 1)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->invisible = !sprite->invisible;
|
|
|
|
if (++sprite->data[1] > 8)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81020D8(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (gBattleAnimArgs[0] == 0)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[2];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[2];
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[1] = gBattleAnimArgs[3];
|
|
|
|
sprite->callback = sub_810213C;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_810213C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[0] > sprite->data[1])
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->pos1.y--;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos1.y -= sprite->data[0];
|
|
|
|
if (sprite->animEnded)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_810217C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - 12;
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[1] = 2;
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[3] = 0;
|
|
|
|
sprite->data[4] = 0;
|
|
|
|
sprite->data[5] = BattleAnimAdjustPanning(-64);
|
|
|
|
sprite->callback = sub_81021CC;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81021CC(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[0] >= sprite->data[1])
|
|
|
|
{
|
|
|
|
sprite->invisible = !sprite->invisible;
|
|
|
|
if (!sprite->invisible)
|
|
|
|
{
|
|
|
|
sprite->data[4]++;
|
|
|
|
if (!(sprite->data[4] & 1))
|
|
|
|
PlaySE12WithPanning(SE_W207B, sprite->data[5]);
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
if (++sprite->data[2] > 1)
|
|
|
|
{
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[1]++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->animEnded && sprite->data[1] > 16 && sprite->invisible)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8102268(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[0] == 0)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
|
|
|
|
if (IsContest())
|
|
|
|
sprite->pos1.y += 10;
|
|
|
|
|
|
|
|
sprite->data[0]++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81022D4(u8 taskId)
|
|
|
|
{
|
|
|
|
if (gTasks[taskId].data[2] == 1)
|
|
|
|
{
|
|
|
|
gBattleAnimArgs[7] = 0xFFFF;
|
|
|
|
gTasks[taskId].data[2]++;
|
|
|
|
}
|
|
|
|
else if (gTasks[taskId].data[2] == 2)
|
|
|
|
{
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (++gTasks[taskId].data[0] == 4)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].data[1]++;
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - gTasks[taskId].data[1], gTasks[taskId].data[1]));
|
|
|
|
if (gTasks[taskId].data[1] == 16)
|
|
|
|
gTasks[taskId].data[2]++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_810234C(struct Sprite* sprite)
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
InitSpritePosToAnimTarget(sprite, FALSE);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->animPaused = 1;
|
|
|
|
sprite->data[0] = gBattleAnimArgs[2];
|
|
|
|
sprite->callback = sub_810237C;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_810237C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[0])
|
|
|
|
{
|
|
|
|
sprite->data[0]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->animPaused = 0;
|
|
|
|
sprite->data[0] = 30;
|
|
|
|
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
|
|
|
|
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
|
|
|
|
sprite->callback = StartAnimLinearTranslation;
|
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81023E0(u8 taskId)
|
|
|
|
{
|
|
|
|
if (++gTasks[taskId].data[0] == 4)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 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] == 16)
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void unref_sub_8102434(u8 taskId)
|
|
|
|
{
|
|
|
|
u8 i;
|
|
|
|
for (i = 0; i < gBattlersCount; i++)
|
|
|
|
{
|
|
|
|
if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == B_SIDE_PLAYER)
|
|
|
|
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[i]);
|
|
|
|
|
|
|
|
if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == B_SIDE_OPPONENT)
|
|
|
|
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
|
|
|
|
void unref_sub_81024A8(u8 taskId)
|
|
|
|
{
|
|
|
|
u8 i;
|
|
|
|
for (i = 0; i < gBattlersCount; i++)
|
|
|
|
SetHealthboxSpriteVisible(gHealthboxSpriteIds[i]);
|
|
|
|
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81024E0(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (IsContest())
|
|
|
|
{
|
|
|
|
sprite->pos1.x = 48;
|
|
|
|
sprite->pos1.y = 40;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x = gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y = gBattleAnimArgs[1];
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->oam.shape = 0;
|
|
|
|
sprite->oam.size = 3;
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->callback = sub_8102528;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8102528(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (sprite->data[0])
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8102540(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y = gBattleAnimArgs[1];
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[3] = 0;
|
|
|
|
sprite->data[4] = 1;
|
|
|
|
sprite->callback = sub_8102584;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8102584(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[1] > 1)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
if (sprite->data[2] < 120)
|
|
|
|
{
|
|
|
|
sprite->pos1.y++;
|
|
|
|
sprite->data[2]++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->data[0])
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81026A8(u8);
|
|
|
|
|
|
|
|
|
|
|
|
void sub_81025C0(u8 taskId)
|
|
|
|
{
|
|
|
|
int a = sub_80A75AC(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
|
|
|
|
int b;
|
|
|
|
int c;
|
|
|
|
int d;
|
|
|
|
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].data[2] = 0;
|
|
|
|
gTasks[taskId].data[3] = a;
|
|
|
|
gTasks[taskId].data[4] = 0;
|
|
|
|
gTasks[taskId].data[5] = 0;
|
|
|
|
gTasks[taskId].data[6] = 0;
|
|
|
|
gTasks[taskId].data[7] = 13;
|
|
|
|
gTasks[taskId].data[8] = 14;
|
|
|
|
gTasks[taskId].data[9] = 15;
|
|
|
|
b = sub_80A76C4(1, 1, 1, 1);
|
|
|
|
c = a | b;
|
2018-12-18 05:08:08 +01:00
|
|
|
StorePointerInVars(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c);
|
2018-12-16 18:35:10 +01:00
|
|
|
b = b | (0x10000 << IndexOfSpritePaletteTag(ANIM_TAG_MOON));
|
|
|
|
d = IndexOfSpritePaletteTag(ANIM_TAG_GREEN_SPARKLE);
|
|
|
|
BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 16, RGB(27, 29, 31));
|
|
|
|
gTasks[taskId].func = sub_81026A8;
|
|
|
|
gTasks[taskId].func(taskId);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81026A8(u8 taskId)
|
|
|
|
{
|
|
|
|
struct Task* task = &gTasks[taskId];
|
|
|
|
switch (task->data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
if (++task->data[1] > 0)
|
|
|
|
{
|
|
|
|
u16 color;
|
|
|
|
u16 bitmask;
|
|
|
|
u16 r3;
|
|
|
|
u16 i;
|
|
|
|
u16 j;
|
|
|
|
task->data[1] = 0;
|
|
|
|
if (++task->data[2] <= 15)
|
|
|
|
{
|
|
|
|
u16 red;
|
|
|
|
u16 green;
|
|
|
|
u16 blue;
|
|
|
|
task->data[4] += task->data[7];
|
|
|
|
task->data[5] += task->data[8];
|
|
|
|
task->data[6] += task->data[9];
|
|
|
|
red = task->data[4] >> 3;
|
|
|
|
green = task->data[5] >> 3;
|
|
|
|
blue = task->data[6] >> 3;
|
|
|
|
color = RGB(red, green, blue);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
color = RGB(27, 29, 31);
|
|
|
|
task->data[0]++;
|
|
|
|
}
|
|
|
|
|
|
|
|
bitmask = 1;
|
|
|
|
r3 = 0;
|
|
|
|
for (i = 0; i <= 15; i++)
|
|
|
|
{
|
|
|
|
if (task->data[3] & bitmask)
|
|
|
|
{
|
|
|
|
for (j = 1; j <= 15; j++)
|
|
|
|
{
|
|
|
|
gPlttBufferFaded[r3 + j] = color;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bitmask <<= 1;
|
|
|
|
r3 += 16;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
u8 spriteId;
|
|
|
|
for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++)
|
|
|
|
{
|
|
|
|
if (gSprites[spriteId].template == &gUnknown_08592EBC || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_8592EEC)
|
|
|
|
gSprites[spriteId].data[0] = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
task->data[1] = 0;
|
|
|
|
task->data[0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (++task->data[1] > 30)
|
|
|
|
{
|
2018-12-18 05:08:08 +01:00
|
|
|
BeginNormalPaletteFade((u32)LoadPointerFromVars(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31));
|
2018-12-16 18:35:10 +01:00
|
|
|
task->data[0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8102844(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (gBattleAnimArgs[2] < 2)
|
|
|
|
gBattleAnimArgs[2] = 2;
|
|
|
|
|
|
|
|
if (gBattleAnimArgs[2] > 0x7F)
|
|
|
|
gBattleAnimArgs[2] = 0x7F;
|
|
|
|
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->data[1] = gBattleAnimArgs[2];
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
|
|
|
|
sprite->data[6] = sprite->pos1.x;
|
|
|
|
sprite->data[7] = sprite->pos1.y;
|
|
|
|
if (IsContest())
|
|
|
|
{
|
|
|
|
sprite->oam.matrixNum = 8;
|
|
|
|
sprite->pos1.x += 40;
|
|
|
|
sprite->pos1.y += 20;
|
|
|
|
sprite->data[2] = sprite->pos1.x << 7;
|
|
|
|
sprite->data[3] = -0x1400 / sprite->data[1];
|
|
|
|
sprite->data[4] = sprite->pos1.y << 7;
|
|
|
|
sprite->data[5] = -0xA00 / sprite->data[1];
|
|
|
|
}
|
|
|
|
else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
|
|
|
|
{
|
|
|
|
sprite->pos1.x -= 40;
|
|
|
|
sprite->pos1.y += 20;
|
|
|
|
sprite->data[2] = sprite->pos1.x << 7;
|
|
|
|
sprite->data[3] = 0x1400 / sprite->data[1];
|
|
|
|
sprite->data[4] = sprite->pos1.y << 7;
|
|
|
|
sprite->data[5] = -0xA00 / sprite->data[1];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->pos1.x += 40;
|
|
|
|
sprite->pos1.y -= 20;
|
|
|
|
sprite->data[2] = sprite->pos1.x << 7;
|
|
|
|
sprite->data[3] = -0x1400 / sprite->data[1];
|
|
|
|
sprite->data[4] = sprite->pos1.y << 7;
|
|
|
|
sprite->data[5] = 0xA00 / sprite->data[1];
|
|
|
|
sprite->oam.matrixNum = 24;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->callback = sub_810296C;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_810296C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
sprite->data[2] += sprite->data[3];
|
|
|
|
sprite->data[4] += sprite->data[5];
|
|
|
|
sprite->pos1.x = sprite->data[2] >> 7;
|
|
|
|
sprite->pos1.y = sprite->data[4] >> 7;
|
|
|
|
if (--sprite->data[1] == 1)
|
|
|
|
{
|
|
|
|
sprite->pos1.x = sprite->data[6];
|
|
|
|
sprite->pos1.y = sprite->data[7];
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->data[1] == 0)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_81029B4(u8 taskId)
|
|
|
|
{
|
|
|
|
u16 i;
|
|
|
|
int obj;
|
|
|
|
u16 r3;
|
|
|
|
u16 r4;
|
|
|
|
struct Task* task = &gTasks[taskId];
|
|
|
|
task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
|
|
|
task->data[1] = AllocSpritePalette(ANIM_TAG_BENT_SPOON);
|
|
|
|
r3 = (task->data[1] * 16) + 0x100;
|
|
|
|
r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4;
|
|
|
|
for (i = 1; i < 16; i++)
|
|
|
|
gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i];
|
|
|
|
|
|
|
|
BlendPalette(r3, 16, 11, RGB(0, 0, 0));
|
|
|
|
task->data[3] = 0;
|
|
|
|
i = 0;
|
2018-12-18 05:08:08 +01:00
|
|
|
while (i < 2 && (obj = CloneBattlerSpriteWithBlend(0)) >= 0)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
gSprites[obj].oam.paletteNum = task->data[1];
|
|
|
|
gSprites[obj].data[0] = 0;
|
|
|
|
gSprites[obj].data[1] = i << 7;
|
|
|
|
gSprites[obj].data[2] = taskId;
|
|
|
|
gSprites[obj].callback = sub_8102B3C;
|
|
|
|
task->data[3]++;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
task->func = sub_8102AE0;
|
2018-12-20 04:13:26 +01:00
|
|
|
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
|
2018-12-16 18:35:10 +01:00
|
|
|
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
|
|
|
|
else
|
|
|
|
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8102AE0(u8 taskId)
|
|
|
|
{
|
|
|
|
struct Task* task = &gTasks[taskId];
|
|
|
|
if (!task->data[3])
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
|
2018-12-16 18:35:10 +01:00
|
|
|
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
|
|
|
|
else
|
|
|
|
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
|
|
|
|
|
|
|
|
FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON);
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8102B3C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[3] > 1)
|
|
|
|
{
|
|
|
|
sprite->data[3] = 0;
|
|
|
|
sprite->data[0]++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->data[0] > 64)
|
|
|
|
{
|
|
|
|
gTasks[sprite->data[2]].data[3]--;
|
|
|
|
obj_delete_but_dont_free_vram(sprite);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[4] = gSineTable[sprite->data[0]] / 6;
|
|
|
|
sprite->data[5] = gSineTable[sprite->data[0]] / 13;
|
|
|
|
sprite->data[1] = (sprite->data[1] + sprite->data[5]) & 0xFF;
|
|
|
|
sprite->pos2.x = Sin(sprite->data[1], sprite->data[4]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8102BCC(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8102BE8(u8 taskId)
|
|
|
|
{
|
|
|
|
u16 i;
|
|
|
|
u16 j;
|
|
|
|
u16 index;
|
|
|
|
|
|
|
|
index = IndexOfSpritePaletteTag(gUnknown_08593020[0][0]);
|
|
|
|
if (index != 0xFF)
|
|
|
|
{
|
|
|
|
index = (index << 4) + 0x100;
|
|
|
|
for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++)
|
|
|
|
gPlttBufferFaded[index + i] = gUnknown_08593020[0][i];
|
|
|
|
}
|
|
|
|
|
|
|
|
for (j = 1; j < ARRAY_COUNT(gUnknown_08593020); j++)
|
|
|
|
{
|
|
|
|
index = AllocSpritePalette(gUnknown_08593020[j][0]);
|
|
|
|
if (index != 0xFF)
|
|
|
|
{
|
|
|
|
index = (index << 4) + 0x100;
|
|
|
|
for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++)
|
|
|
|
gPlttBufferFaded[index + i] = gUnknown_08593020[j][i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
|
|
|
|
// clears the rainbow effect for musical notes.
|
|
|
|
void sub_8102CA0(u8 taskId)
|
|
|
|
{
|
|
|
|
u16 i;
|
|
|
|
for (i = 1; i < ARRAY_COUNT(gUnknown_08593020); i++)
|
|
|
|
FreeSpritePaletteByTag(gUnknown_08593020[i][0]);
|
|
|
|
|
|
|
|
DestroyAnimVisualTask(taskId);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8102CD4(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u8 index;
|
|
|
|
u8 a;
|
|
|
|
u8 b;
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
StartSpriteAnim(sprite, gBattleAnimArgs[0]);
|
|
|
|
if ((index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[1]][0])) != 0xFF)
|
|
|
|
sprite->oam.paletteNum = index;
|
|
|
|
|
|
|
|
sprite->data[1] = gBattleAnimArgs[1];
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[3] = gBattleAnimArgs[2];
|
|
|
|
if (IsContest())
|
|
|
|
{
|
|
|
|
a = 48;
|
|
|
|
b = 40;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
a = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
|
|
|
|
b = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[4] = sprite->pos1.x << 4;
|
|
|
|
sprite->data[5] = sprite->pos1.y << 4;
|
|
|
|
sub_8102D8C(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 40);
|
|
|
|
sprite->callback = sub_8102DE4;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8102D8C(s16 a, s16 b, s16* c, s16* d, s8 e)
|
|
|
|
{
|
|
|
|
int f;
|
|
|
|
int g;
|
|
|
|
if (a < 0)
|
|
|
|
e = -e;
|
|
|
|
|
|
|
|
f = a << 8;
|
|
|
|
g = f / e;
|
|
|
|
if (g == 0)
|
|
|
|
g = 1;
|
|
|
|
|
|
|
|
*c = f / g;
|
|
|
|
*d = (b << 8) / g;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8102DE4(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
int b;
|
|
|
|
s16 a;
|
|
|
|
int c;
|
|
|
|
u8 index;
|
|
|
|
sprite->data[0]++;
|
|
|
|
b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8);
|
|
|
|
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;
|
|
|
|
sprite->pos2.y = Sin(b, 15);
|
|
|
|
a = (u16)sprite->pos1.y;
|
|
|
|
c = (u16)sprite->pos1.x;
|
|
|
|
|
|
|
|
if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80)
|
|
|
|
{
|
2018-12-18 05:08:08 +01:00
|
|
|
DestroySpriteAndMatrix(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (sprite->data[3] && ++sprite->data[2] > sprite->data[3])
|
|
|
|
{
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
if (++sprite->data[1] > 3)
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
|
|
|
|
index = IndexOfSpritePaletteTag(gUnknown_08593020[sprite->data[1]][0]);
|
|
|
|
if (index != 0xFF)
|
|
|
|
sprite->oam.paletteNum = index;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8102EB0(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
int a;
|
|
|
|
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
|
|
|
|
{
|
|
|
|
a = gBattleAnimArgs[1];
|
|
|
|
(u16)gBattleAnimArgs[1] = -a;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
|
|
|
|
StartSpriteAnim(sprite, gBattleAnimArgs[0]);
|
|
|
|
sprite->data[2] = 0;
|
|
|
|
sprite->data[3] = 0;
|
|
|
|
sprite->data[4] = sprite->pos1.x << 4;
|
|
|
|
sprite->data[5] = sprite->pos1.y << 4;
|
|
|
|
sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5;
|
|
|
|
sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5;
|
|
|
|
sprite->callback = sub_8102F40;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8102F40(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;
|
|
|
|
if (sprite->data[0] > 5 && sprite->data[3] == 0)
|
|
|
|
{
|
|
|
|
sprite->data[2] = (sprite->data[2] + 16) & 0xFF;
|
|
|
|
sprite->pos2.x = Cos(sprite->data[2], 18);
|
|
|
|
sprite->pos2.y = Sin(sprite->data[2], 18);
|
|
|
|
if (sprite->data[2] == 0)
|
|
|
|
sprite->data[3] = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (++sprite->data[0] == 48)
|
2018-12-18 05:08:08 +01:00
|
|
|
DestroySpriteAndMatrix(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8102FB8(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
s16 a;
|
|
|
|
if (gBattleAnimArgs[0] == 1)
|
|
|
|
{
|
|
|
|
sprite->oam.matrixNum = 8;
|
|
|
|
a = 16;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
a = -16;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + a;
|
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 8;
|
|
|
|
sprite->data[0] = 8;
|
|
|
|
sprite->callback = WaitAnimForDuration;
|
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8103028(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
s16 xDiff;
|
|
|
|
u8 index;
|
2018-12-18 05:08:08 +01:00
|
|
|
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
2018-12-16 18:35:10 +01:00
|
|
|
sprite->pos1.y += 8;
|
|
|
|
StartSpriteAnim(sprite, gBattleAnimArgs[1]);
|
|
|
|
index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[2]][0]);
|
|
|
|
if (index != 0xFF)
|
|
|
|
sprite->oam.paletteNum = index;
|
|
|
|
|
|
|
|
xDiff = (gBattleAnimArgs[0] == 0) ? -32 : 32;
|
|
|
|
sprite->data[0] = 40;
|
|
|
|
sprite->data[1] = sprite->pos1.x;
|
|
|
|
sprite->data[2] = xDiff + sprite->data[1];
|
|
|
|
sprite->data[3] = sprite->pos1.y;
|
|
|
|
sprite->data[4] = sprite->data[3] - 40;
|
|
|
|
InitAnimLinearTranslation(sprite);
|
|
|
|
sprite->data[5] = gBattleAnimArgs[3];
|
|
|
|
sprite->callback = sub_81030B0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81030B0(struct Sprite* sprite)
|
|
|
|
{
|
2018-12-20 04:13:26 +01:00
|
|
|
if (AnimTranslateLinear(sprite) == 0)
|
2018-12-16 18:35:10 +01:00
|
|
|
{
|
|
|
|
s16 xDiff;
|
|
|
|
xDiff = Sin(sprite->data[5], 8);
|
|
|
|
if (sprite->pos2.x < 0)
|
|
|
|
xDiff = -xDiff;
|
|
|
|
|
|
|
|
sprite->pos2.x += xDiff;
|
|
|
|
sprite->pos2.y += Sin(sprite->data[5], 4);
|
|
|
|
sprite->data[5] = (sprite->data[5] + 8) & 0xFF;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_810310C(u8 battler, struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
|
2018-12-30 17:58:42 +01:00
|
|
|
sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) + 8;
|
2018-12-16 18:35:10 +01:00
|
|
|
else
|
2018-12-30 17:58:42 +01:00
|
|
|
sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) - 8;
|
2018-12-16 18:35:10 +01:00
|
|
|
|
2018-12-30 17:58:42 +01:00
|
|
|
sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8103164(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u8 a;
|
|
|
|
u8 battler;
|
|
|
|
if (gBattleAnimArgs[0] == 0)
|
|
|
|
battler = gBattleAnimAttacker;
|
|
|
|
else
|
|
|
|
battler = gBattleAnimTarget;
|
|
|
|
|
|
|
|
sub_810310C(battler, sprite);
|
|
|
|
a = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1;
|
|
|
|
sprite->data[0] = gBattleAnimArgs[1];
|
|
|
|
sprite->data[1] = a + 2;
|
|
|
|
StartSpriteAnim(sprite, a);
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_81031D0);
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81031D0(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (--sprite->data[0] == 0)
|
|
|
|
{
|
|
|
|
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
|
|
|
StartSpriteAnim(sprite, sprite->data[1]);
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8103208(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u8 battler;
|
|
|
|
if (gBattleAnimArgs[0] == 0)
|
|
|
|
battler = gBattleAnimAttacker;
|
|
|
|
else
|
|
|
|
battler = gBattleAnimTarget;
|
|
|
|
|
|
|
|
sub_810310C(battler, sprite);
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_8103250);
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8103250(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[0] > 16)
|
|
|
|
{
|
|
|
|
StartSpriteAffineAnim(sprite, 1);
|
2018-12-18 05:08:08 +01:00
|
|
|
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
|
|
|
|
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8103284(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u8 battler;
|
|
|
|
if (gBattleAnimArgs[0] == 0)
|
|
|
|
battler = gBattleAnimAttacker;
|
|
|
|
else
|
|
|
|
battler = gBattleAnimTarget;
|
|
|
|
|
|
|
|
sprite->pos1.x = GetBattlerSpriteCoord(battler, 0);
|
2018-12-30 17:58:42 +01:00
|
|
|
sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP);
|
2018-12-16 18:35:10 +01:00
|
|
|
if (sprite->pos1.y <= 9)
|
|
|
|
sprite->pos1.y = 10;
|
|
|
|
|
|
|
|
sprite->data[0] = 1;
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
sprite->data[2] = sprite->subpriority;
|
|
|
|
sprite->data[3] = sprite->subpriority + 4;
|
|
|
|
sprite->data[4] = 0;
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_8103300);
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8103300(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[4] > 12)
|
|
|
|
sprite->callback = sub_8103320;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8103320(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
s16 temp;
|
|
|
|
s16 temp2;
|
|
|
|
sprite->data[1] += 4;
|
|
|
|
if (sprite->data[1] > 254)
|
|
|
|
{
|
|
|
|
if (--sprite->data[0] == 0)
|
|
|
|
{
|
|
|
|
sprite->pos2.x = 0;
|
|
|
|
sprite->callback = sub_8103250;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[1] &= 0xFF;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sprite->data[1] > 0x4F)
|
|
|
|
sprite->subpriority = sprite->data[3];
|
|
|
|
|
|
|
|
if (sprite->data[1] > 0x9F)
|
|
|
|
sprite->subpriority = sprite->data[2];
|
|
|
|
|
|
|
|
temp = gSineTable[sprite->data[1]];
|
|
|
|
sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_8103390(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
u8 bank;
|
|
|
|
if (gBattleAnimArgs[0] == 0)
|
|
|
|
bank = gBattleAnimAttacker;
|
|
|
|
else
|
|
|
|
bank = gBattleAnimTarget;
|
|
|
|
|
|
|
|
sub_810310C(bank, sprite);
|
|
|
|
if (GetBattlerSide(bank) == B_SIDE_PLAYER)
|
|
|
|
{
|
|
|
|
StartSpriteAnim(sprite, 0);
|
|
|
|
sprite->data[0] = 2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
StartSpriteAnim(sprite, 1);
|
|
|
|
sprite->data[0] = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->callback = sub_81033F0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81033F0(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[1] > 10)
|
|
|
|
{
|
|
|
|
sprite->data[1] = 0;
|
|
|
|
StartSpriteAnim(sprite, sprite->data[0]);
|
|
|
|
StoreSpriteCallbackInData6(sprite, sub_810342C);
|
2018-12-18 05:08:08 +01:00
|
|
|
sprite->callback = RunStoredCallbackWhenAnimEnds;
|
2018-12-16 18:35:10 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_810342C(struct Sprite* sprite)
|
|
|
|
{
|
|
|
|
if (++sprite->data[1] > 5)
|
|
|
|
DestroyAnimSprite(sprite);
|
|
|
|
}
|