pokeemerald/src/battle_anim_new.c
2022-11-08 09:38:27 -03:00

7906 lines
241 KiB
C

#include "global.h"
#include "battle_anim.h"
#include "item_menu_icons.h"
#include "sprite.h"
#include "random.h"
#include "gpu_regs.h"
#include "item.h"
#include "rtc.h"
#include "item_icon.h"
#include "sound.h"
#include "menu.h"
#include "malloc.h"
#include "util.h"
#include "trig.h"
#include "graphics.h"
#include "battle_scripts.h"
#include "battle_controllers.h"
#include "constants/moves.h"
#include "constants/hold_effects.h"
#include "constants/items.h"
#include "constants/pokemon.h"
#include "battle_util.h"
// function declarations
static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite);
static void SpriteCB_SpriteOnMonForDuration(struct Sprite *sprite);
static void SpriteCB_ToxicThreadWrap(struct Sprite *sprite);
static void SpriteCB_GrowingSuperpower(struct Sprite *sprite);
static void SpriteCB_CentredSpiderWeb(struct Sprite *sprite);
static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite);
static void SpriteCB_CoreEnforcerBeam(struct Sprite *sprite);
static void SpriteCB_TranslateAnimSpriteToTargetMonLocationDoubles(struct Sprite *sprite);
static void SpriteCB_FallingObject(struct Sprite *sprite);
static void SpriteCB_FallingObjectStep(struct Sprite *sprite);
static void SpriteCB_SunsteelStrikeRings(struct Sprite *sprite);
static void SpriteCB_MoongeistCharge(struct Sprite *sprite);
static void SpriteCB_MindBlownBall(struct Sprite *sprite);
static void AnimMindBlownBallStep(struct Sprite *sprite);
static void SpriteCB_MindBlownExplosion(struct Sprite *sprite);
static void SpriteCB_LockingJaw(struct Sprite *sprite);
static void SpriteCB_LockingJawStep(struct Sprite *sprite);
static void SpriteCB_LockingJawFinish(struct Sprite *sprite);
static void SpriteCB_LeftRightSlice(struct Sprite *sprite);
static void SpriteCB_LeftRightSliceStep1(struct Sprite *sprite);
static void SpriteCB_LeftRightSliceStep0(struct Sprite *sprite);
static void SpriteCB_PyroBallRockBounce(struct Sprite *sprite);
static void SpriteCB_PyroBallLaunch(struct Sprite *sprite);
static void SpriteCB_AcidLaunchSingleTarget(struct Sprite *sprite);
static void SpriteCB_AcidDripSingleTarget(struct Sprite *sprite);
static void SpriteCB_WaterDroplet(struct Sprite *sprite);
static void SpriteCB_WaterDropletDrip(struct Sprite *sprite);
static void SpriteCB_WaterDropletDrop(struct Sprite *sprite);
static void SpriteCB_AnimSpriteOnSelectedMonPos(struct Sprite *sprite);
static void SpriteCB_SurroundingRing(struct Sprite *sprite);
static void SpriteCB_PhotonGeyserBeam(struct Sprite *sprite);
static void SpriteCB_BeamUpStep(struct Sprite *sprite);
static void SpriteCB_CentredElectricity(struct Sprite *sprite);
static void AnimSkyDropBallUp(struct Sprite *sprite);
static void SpriteCB_SearingShotRock(struct Sprite *sprite);
static void AnimHappyHourCoinShower(struct Sprite *sprite);
static void SpriteCB_Geyser(struct Sprite *sprite);
static void SpriteCB_GeyserTarget(struct Sprite *sprite);
static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite);
static void AnimBlastBurnTargetPlume_Step1(struct Sprite *sprite);
static void AnimBlastBurnTargetPlume(struct Sprite *sprite);
static void AnimEllipticalGustAttacker(struct Sprite *sprite);
static void AnimEllipticalGustAttacker_Step(struct Sprite *sprite);
static void AnimGrowingShockWaveOrbOnTarget(struct Sprite *sprite);
static void AnimTask_GrowStep(u8 taskId);
static void AnimExtremeEvoboostCircle(struct Sprite *sprite);
static void AnimExtremeEvoboostCircle_Step(struct Sprite *sprite);
static void AnimOceanicOperettaSpotlight(struct Sprite *sprite);
static void AnimSoulStealingStar(struct Sprite *sprite);
static void AnimSoulStealingStar_Step1(struct Sprite *sprite);
static void AnimSoulStealingStar_Step2(struct Sprite *sprite);
// const data
// general
static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0, 64, 0, 16), //Flatten
AFFINEANIMCMD_FRAME(0, 0, 0, 64),
AFFINEANIMCMD_FRAME(0, -64, 0, 16),
AFFINEANIMCMD_END,
};
// GEN 4
// shadow sneak
const struct SpriteTemplate gShadowSneakImpactSpriteTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_IceCrystalHit,
.callback = AnimIceEffectParticle
};
// power trick
const struct SpriteTemplate gPowerTrickSpriteTemplate =
{
.tileTag = ANIM_TAG_POWER_TRICK,
.paletteTag = ANIM_TAG_POWER_TRICK,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_SpinningBone,
.callback = SpriteCB_SpriteOnMonForDuration
};
//// GEN 5
//shell smash
const struct SpriteTemplate gShellSmashLeftShellSpriteTemplate =
{
.tileTag = ANIM_TAG_SHELL_RIGHT,
.paletteTag = ANIM_TAG_SHELL_RIGHT,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_Bite,
.callback = AnimBite
};
const struct SpriteTemplate gShellSmashRightShellSpriteTemplate =
{
.tileTag = ANIM_TAG_SHELL_LEFT,
.paletteTag = ANIM_TAG_SHELL_LEFT,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_Bite,
.callback = AnimBite
};
const struct SpriteTemplate gShellSmashPurpleRocksSpriteTemplate =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_SHELL_RIGHT,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FlyingRock,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimRockFragment
};
//wide guard
const struct SpriteTemplate gWideGuardBlueConversionTemplate =
{
.tileTag = ANIM_TAG_CONVERSION,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjBlend_8x8,
.anims = gConversionAnimTable,
.images = NULL,
.affineAnims = gConversionAffineAnimTable,
.callback = AnimConversion
};
//guard split
const struct SpriteTemplate gGuardSwapOrbs1Template =
{
.tileTag = ANIM_TAG_BLUEGREEN_ORB,
.paletteTag = ANIM_TAG_BLUEGREEN_ORB,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimMimicOrb
};
const struct SpriteTemplate gGuardSwapOrbs2Template =
{
.tileTag = ANIM_TAG_BLUEGREEN_ORB,
.paletteTag = ANIM_TAG_BLUEGREEN_ORB,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimMissileArc
};
// power split
const struct SpriteTemplate gPowerSplitOrbs1Template =
{
.tileTag = ANIM_TAG_BLUEGREEN_ORB,
.paletteTag = ANIM_TAG_RED_HEART,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimMimicOrb
};
const struct SpriteTemplate gPowerSplitOrbs2Template =
{
.tileTag = ANIM_TAG_BLUEGREEN_ORB,
.paletteTag = ANIM_TAG_RED_HEART,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimMissileArc
};
// automotize
const struct SpriteTemplate gAutotomizeMetalShardsTemplate =
{
.tileTag = ANIM_TAG_METAL_BITS,
.paletteTag = ANIM_TAG_METAL_BITS,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_TearDrop,
.callback = AnimTearDrop
};
//rage powder
const struct SpriteTemplate gRagePowderRedPowderTemplate =
{
.tileTag = ANIM_TAG_SPORE,
.paletteTag = ANIM_TAG_HEART_STAMP,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gSporeParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSporeParticle
};
//flame charge
const struct SpriteTemplate gFlameChargeEmberTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FlamethrowerFlame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimPetalDanceBigFlower
};
//final gambit
const struct SpriteTemplate gFinalGambitBlueYawnTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_WATER_IMPACT,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimShadowBall
};
const struct SpriteTemplate gFinalGambitExplosionTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_WATER_IMPACT,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//synchronoise
const struct SpriteTemplate gSynchronoiseVioletRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gHyperVoiceRingAffineAnimTable,
.callback = AnimHyperVoiceRing
};
const struct SpriteTemplate gSynchronoiseYellowRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gHyperVoiceRingAffineAnimTable,
.callback = AnimHyperVoiceRing
};
const struct SpriteTemplate gSynchronoiseBlueRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gHyperVoiceRingAffineAnimTable,
.callback = AnimHyperVoiceRing
};
const struct SpriteTemplate gSynchronoiseAeroWheelTemplate =
{
.tileTag = ANIM_TAG_AIR_WAVE_2,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gAffineAnims_AirWaveCrescent,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireSpread
};
//electro ball
const struct SpriteTemplate gElectroBallCannonBallTemplate =
{
.tileTag = ANIM_TAG_FLASH_CANNON_BALL,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimShadowBall
};
//foul play
const struct SpriteTemplate gFoulPlayImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
const struct SpriteTemplate gFoulPlayRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//simple beam
const struct SpriteTemplate gSimpleBeamBrownTemplate =
{
.tileTag = ANIM_TAG_GOLD_RING,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
const struct SpriteTemplate gSimpleBeamPinkTemplate =
{
.tileTag = ANIM_TAG_GOLD_RING,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
const struct SpriteTemplate gSimpleBeamBrownRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
const struct SpriteTemplate gSimpleBeamPinkRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
// after you
const struct SpriteTemplate gAfterYouGreenRageTemplate =
{
.tileTag = ANIM_TAG_ANGER,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAngerMarkAffineAnimTable,
.callback = AnimAngerMark
};
//quick guard
const struct SpriteTemplate gQuickGuardArmImpactTemplate =
{
.tileTag = ANIM_TAG_QUICK_GUARD_HAND,
.paletteTag = ANIM_TAG_QUICK_GUARD_HAND,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBasicFistOrFoot
};
//sky drop
static const union AffineAnimCmd sSkyDropFlyBallAffineAnimCmd_0[] =
{
AFFINEANIMCMD_FRAME(0xa0, 0x100, 0x50, 0x0),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sSkyDropFlyBallAffineAnimCmds[] =
{
sSkyDropFlyBallAffineAnimCmd_0
};
const struct SpriteTemplate gSkyDropFlyBallTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_ROUND_SHADOW,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSkyDropFlyBallAffineAnimCmds,
.callback = AnimThrowMistBall
};
const struct SpriteTemplate gSkyDropTargetFlyingTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_ROUND_SHADOW,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimSkyDropBallUp
};
//shift gear
const struct SpriteTemplate gShiftGearGearsTemplate =
{
.tileTag = ANIM_TAG_GEAR,
.paletteTag = ANIM_TAG_GEAR,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_SpinningBone,
.callback = SpriteCB_SpriteOnMonForDuration
};
//circle throw
const struct SpriteTemplate gCircleThrowRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//quash
const struct SpriteTemplate gQuashArmHitTemplate =
{
.tileTag = ANIM_TAG_ASSURANCE_HAND,
.paletteTag = ANIM_TAG_ASSURANCE_HAND,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimStompFoot
};
//reflect type
const struct SpriteTemplate gReflectTypeBlueStringTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineOff_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_ToxicThreadWrap
};
const struct SpriteTemplate gReflectTypeVioletStringTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_PURPLE_FLAME,
.oam = &gOamData_AffineOff_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_ToxicThreadWrap
};
const struct SpriteTemplate gReflectTypeWhiteStringTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_GUARD_RING,
.oam = &gOamData_AffineOff_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_ToxicThreadWrap
};
const struct SpriteTemplate gReflectTypeWhiteRingTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_GUARD_RING,
.oam = &gOamData_AffineDouble_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGuardRingAffineAnimTable,
.callback = SpriteCB_SurroundingRing
};
const struct SpriteTemplate gReflectTypePinkRingTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineDouble_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGuardRingAffineAnimTable,
.callback = SpriteCB_SurroundingRing
};
const struct SpriteTemplate gReflectTypeVioletRingTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_PURPLE_FLAME,
.oam = &gOamData_AffineDouble_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGuardRingAffineAnimTable,
.callback = SpriteCB_SurroundingRing
};
const struct SpriteTemplate gReflectTypeBlueRingTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGuardRingAffineAnimTable,
.callback = SpriteCB_SurroundingRing
};
//frost breath
const struct SpriteTemplate gFrostBreathBlueRageTemplate =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_DragonRageFirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDragonRageFirePlume
};
const struct SpriteTemplate gFrostBreathBlueBreathTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gAnims_DragonRageFire,
.images = NULL,
.affineAnims = gAffineAnims_DragonRageFire,
.callback = AnimDragonFireToTarget
};
//heart stamp
const struct SpriteTemplate gHeartStampSpinningHeartTemplate =
{
.tileTag = ANIM_TAG_HEART_STAMP,
.paletteTag = ANIM_TAG_HEART_STAMP,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gAffineAnims_SpinningHandOrFoot,
.callback = AnimSpinningKickOrPunch
};
//horn leech
const struct SpriteTemplate gHornLeechHornTemplate =
{
.tileTag = ANIM_TAG_HORN_LEECH,
.paletteTag = ANIM_TAG_HORN_LEECH,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimShadowBall
};
//dual chop
const struct SpriteTemplate gDualChopImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//sacred sword
const struct SpriteTemplate gSacredSwordBladesTemplate =
{
.tileTag = ANIM_TAG_PUNISHMENT_BLADES,
.paletteTag = ANIM_TAG_HYDRO_PUMP,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gAnims_DragonBreathFire,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireSpread
};
const struct SpriteTemplate gSacredSwordCutTemplate =
{
.tileTag = ANIM_TAG_CUT,
.paletteTag = ANIM_TAG_HYDRO_PUMP,
.oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gCuttingSliceAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCuttingSlice
};
//razor shell
const struct SpriteTemplate gRazorShellTemplate =
{
.tileTag = ANIM_TAG_RAZOR_SHELL,
.paletteTag = ANIM_TAG_RAZOR_SHELL,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = SpriteCB_SpriteOnMonForDuration
};
//heat crash
const struct SpriteTemplate gHeatCrashEruptionRockTemplate =
{
.tileTag = ANIM_TAG_WARM_ROCK,
.paletteTag = ANIM_TAG_WARM_ROCK,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimStompFoot
};
//leaf tornado
const struct SpriteTemplate gLeafTornadoVortexTemplate =
{
.tileTag = ANIM_TAG_LEAF,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
//cotton guard
const struct SpriteTemplate gCottonGuardSporeTemplate =
{
.tileTag = ANIM_TAG_SPORE,
.paletteTag = ANIM_TAG_SPORE,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gSporeParticleAnimTable,
.images = NULL,
.affineAnims = gPowerAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
//night daze
const struct SpriteTemplate gNightDazeVioletRingsTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_PURPLE_FLAME,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
const struct SpriteTemplate gNightDazeVioletCirclesTemplate =
{
.tileTag = ANIM_TAG_RED_ORB,
.paletteTag = ANIM_TAG_PURPLE_FLAME,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gHiddenPowerOrbAffineAnimTable,
.callback = AnimOrbitScatter
};
//tail slap
const struct SpriteTemplate gTailSlapTemplate =
{
.tileTag = ANIM_TAG_PUNISHMENT_BLADES,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gScratchAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//gear grind
const struct SpriteTemplate gGearGrindTemplate =
{
.tileTag = ANIM_TAG_GEAR,
.paletteTag = ANIM_TAG_GEAR,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimBite
};
//searing shot
const struct SpriteTemplate gSearingShotRedChargeTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gSearingShotEruptionRockTemplate =
{
.tileTag = ANIM_TAG_WARM_ROCK,
.paletteTag = ANIM_TAG_WARM_ROCK,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimOverheatFlame
};
static const union AffineAnimCmd sSpriteAffineAnim_SearingShotRock[] =
{
AFFINEANIMCMD_FRAME(8, 8, 9, 15),
AFFINEANIMCMD_FRAME(-8, -8, 9, 15),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_SearingShotRock[] =
{
sSpriteAffineAnim_SearingShotRock,
};
const struct SpriteTemplate gSearingShotEruptionImpactTemplate =
{
.tileTag = ANIM_TAG_WARM_ROCK,
.paletteTag = ANIM_TAG_WARM_ROCK,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_SearingShotRock,
.callback = SpriteCB_SearingShotRock
};
//techno blast
const struct SpriteTemplate gTechnoBlastWhiteChargeTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gTechnoBlastWhiteCircleTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gPowerAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
const struct SpriteTemplate gTechnoBlastWhiteBlastTemplate =
{
.tileTag = ANIM_TAG_BLACK_BALL_2,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
const struct SpriteTemplate gTechnoBlastWhiteSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimZapCannonSpark
};
const struct SpriteTemplate gTechnoBlastWhiteSmokeTemplate =
{
.tileTag = ANIM_TAG_GRAY_SMOKE,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gOctazookaAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gTechnoBlastYellowBlastTemplate =
{
.tileTag = ANIM_TAG_BLACK_BALL_2,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
const struct SpriteTemplate gTechnoBlastYellowSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimZapCannonSpark
};
const struct SpriteTemplate gTechnoBlastYellowSmokeTemplate =
{
.tileTag = ANIM_TAG_GRAY_SMOKE,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gOctazookaAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gTechnoBlastBlueChargeTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gTechnoBlastBlueBubbleTemplate =
{
.tileTag = ANIM_TAG_BUBBLE,
.paletteTag = ANIM_TAG_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gAnims_WaterBubbleProjectile,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSmallBubblePair
};
const struct SpriteTemplate gTechnoBlastBlueBlastTemplate =
{
.tileTag = ANIM_TAG_BLACK_BALL_2,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
const struct SpriteTemplate gTechnoBlastBlueSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimZapCannonSpark
};
const struct SpriteTemplate gTechnoBlastBlueSmokeTemplate =
{
.tileTag = ANIM_TAG_GRAY_SMOKE,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gOctazookaAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gTechnoBlastRedChargeTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gTechnoBlastRedBlastTemplate =
{
.tileTag = ANIM_TAG_BLACK_BALL_2,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
const struct SpriteTemplate gTechnoBlastRedSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimZapCannonSpark
};
const struct SpriteTemplate gTechnoBlastRedSmokeTemplate =
{
.tileTag = ANIM_TAG_GRAY_SMOKE,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gOctazookaAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gTechnoBlastIceChargeTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gTechnoBlastIceBlastTemplate =
{
.tileTag = ANIM_TAG_BLACK_BALL_2,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
const struct SpriteTemplate gTechnoBlastIceSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimZapCannonSpark
};
const struct SpriteTemplate gTechnoBlastIceSmokeTemplate =
{
.tileTag = ANIM_TAG_GRAY_SMOKE,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gOctazookaAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gTechnoBlastIceCrystalsTemplate =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineNormal_ObjBlend_8x16,
.anims = gAnims_IceCrystalLarge,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//secret sword
const struct SpriteTemplate gSecretSwordBladesTemplate =
{
.tileTag = ANIM_TAG_PUNISHMENT_BLADES,
.paletteTag = ANIM_TAG_HYDRO_PUMP,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gAnims_DragonBreathFire,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireSpread
};
//glaciate
const struct SpriteTemplate gGlaciateSmokeTemplate =
{
.tileTag = ANIM_TAG_BLACK_SMOKE,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBlackSmoke
};
//blue flare
const struct SpriteTemplate gBlueFlareFlameJabTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_METAL_BITS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FlamethrowerFlame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gBlueFlareFlameSwirlTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_METAL_BITS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FlamethrowerFlame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gBlueFlareBurnTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_METAL_BITS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FlamethrowerFlame,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireSpread
};
//freeze shock
const struct SpriteTemplate gFreezeShockCircleTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingShockWaveOrb
};
const struct SpriteTemplate gFreezeShockIceBallTemplate =
{
.tileTag = ANIM_TAG_ICE_CHUNK,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gAnims_IceBallChunk,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
//ice burn
const struct SpriteTemplate gIceBurnSmokeTemplate =
{
.tileTag = ANIM_TAG_BLACK_SMOKE,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBlackSmoke
};
//icicle crash
static const union AffineAnimCmd sSpriteAffineAnim_IcicleCrash[] =
{
AFFINEANIMCMD_FRAME(0, 0, 128, 1), //180 degree turn
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_IcicleCrash[] =
{
sSpriteAffineAnim_IcicleCrash,
};
const struct SpriteTemplate gIcicleCrashSpearTemplate =
{
.tileTag = ANIM_TAG_ICICLE_SPEAR,
.paletteTag = ANIM_TAG_ICICLE_SPEAR,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_IcicleCrash,
.callback = AnimFallingRock
};
//v create
const struct SpriteTemplate gVCreateFlameTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FireBlastCross,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gVCreateRedRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gVCreateRedOrbTemplate =
{
.tileTag = ANIM_TAG_ECLIPSING_ORB,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gEclipsingOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//fusion flare
const struct SpriteTemplate gFusionFlareRedBallUpTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimWeatherBallUp
};
const struct SpriteTemplate gFusionFlareRedBallTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimStompFoot
};
const struct SpriteTemplate gFusionFlareRedBubblesTemplate =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_WaterPulseBubble,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimWaterPulseBubble
};
const struct SpriteTemplate gFusionFlareRedRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
//fusion bolt
static const union AffineAnimCmd sSpriteAffineAnim_DrakeStrikePlayer[] =
{
AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd sSpriteAffineAnim_DrakeStrikeOpponent[] =
{
AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd* const sAffineAnimCmdTable_DrakeStriking[] = //devestating drake, fusion bolt
{
sSpriteAffineAnim_DrakeStrikePlayer,
sSpriteAffineAnim_DrakeStrikeOpponent,
};
const struct SpriteTemplate gFusionBoltBallTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sAffineAnimCmdTable_DrakeStriking,
.callback = AnimFlyBallAttack
};
// GEN 6
//mat block
const struct SpriteTemplate gMatBlockGreenConversionTemplate =
{
.tileTag = ANIM_TAG_CONVERSION,
.paletteTag = ANIM_TAG_GREEN_LIGHT_WALL,
.oam = &gOamData_AffineDouble_ObjBlend_8x8,
.anims = gConversionAnimTable,
.images = NULL,
.affineAnims = gConversionAffineAnimTable,
.callback = AnimConversion
};
//belch
static const union AnimCmd sAnimCmdBerryEaten[] =
{
ANIMCMD_FRAME(16, 3),
ANIMCMD_END,
};
static const union AnimCmd *const sAnimCmdFramesBerryEaten[] =
{
sAnimCmdBerryEaten,
};
const struct SpriteTemplate gBelchBerryTemplate =
{
.tileTag = ANIM_TAG_BERRY_NORMAL,
.paletteTag = ANIM_TAG_BERRY_NORMAL,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = sAnimCmdFramesBerryEaten,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMissileArc
};
//forest's curse
const struct SpriteTemplate gForestsCurseIngrainTemplate =
{
.tileTag = ANIM_TAG_ROOTS,
.paletteTag = ANIM_TAG_ROOTS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gIngrainRootAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimWaterPulseBubble
};
//petal blizzard
static const union AnimCmd sAnimCmd_PetalBlizzard1_0[] =
{
ANIMCMD_FRAME(0, 10),
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const sAnimCmdTable_PetalBlizzard1[] =
{
sAnimCmd_PetalBlizzard1_0,
};
const struct SpriteTemplate gPetalBlizzardTwister1Template =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = sAnimCmdTable_PetalBlizzard1,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMoveTwisterParticle
};
static const u16 sPetalBlizzardFlowerOam[] = {0x0, 0x2000,0x0800,0x0}; //todo: convert to oam data
static const union AnimCmd sAnimCmd_PetalBlizzard2_0[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(4, 0),
ANIMCMD_END,
};
static const union AnimCmd *const sAnimCmdTable_PetalBlizzard2[] =
{
sAnimCmd_PetalBlizzard2_0,
};
const struct SpriteTemplate gPetalBlizzardTwister2Template =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
.oam = (const struct OamData *) &sPetalBlizzardFlowerOam,
.anims = sAnimCmdTable_PetalBlizzard2,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMoveTwisterParticle
};
//crafty shield
const struct SpriteTemplate gCraftyShieldPinkConversionTemplate =
{
.tileTag = ANIM_TAG_CRAFTY_SHIELD,
.paletteTag = ANIM_TAG_CRAFTY_SHIELD,
.oam = &gOamData_AffineDouble_ObjBlend_8x8,
.anims = gConversionAnimTable,
.images = NULL,
.affineAnims = gConversionAffineAnimTable,
.callback = AnimConversion
};
//grassy terrain
const struct SpriteTemplate gGrassyTerrainOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gPowerAbsorptionOrbAffineAnimTable,
.callback = AnimOrbitFast
};
const struct SpriteTemplate gGrassyTerrainStarTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPARKLE,
.paletteTag = ANIM_TAG_GREEN_SPARKLE,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gMoonlightSparkleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimOrbitScatter
};
//misty terrain
const struct SpriteTemplate gMistyTerrainOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_WATER_GUN,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gPowerAbsorptionOrbAffineAnimTable,
.callback = AnimOrbitFast
};
const struct SpriteTemplate gMistyTerrainStarTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPARKLE,
.paletteTag = ANIM_TAG_WATER_GUN,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gMoonlightSparkleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimOrbitScatter
};
//electrify
const struct SpriteTemplate gElectrifyRingTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineDouble_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGuardRingAffineAnimTable,
.callback = SpriteCB_SurroundingRing
};
const struct SpriteTemplate gElectrifyYellowRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
//fairy wind
const struct SpriteTemplate gFairyWindCloudTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_PINK_CLOUD,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gSwiftStarAffineAnimTable,
.callback = AnimTranslateLinearSingleSineWave
};
//confide
const struct SpriteTemplate gConfideBubbleTemplate =
{
.tileTag = ANIM_TAG_CONFIDE,
.paletteTag = ANIM_TAG_CONFIDE,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gMetronomeThroughtBubbleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimThoughtBubble
};
//diamond storm
const struct SpriteTemplate gDiamondStormSwirlingIceTemplate =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_Snowball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSwirlingSnowball_Step1
};
const struct SpriteTemplate gDiamondStormBlizzardTemplate =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gAnims_BlizzardIceCrystal,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMoveParticleBeyondTarget
};
const struct SpriteTemplate gDiamondStormDiamondsTemplate =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineNormal_ObjBlend_8x16,
.anims = gAnims_IceCrystalLarge,
.images = NULL,
.affineAnims = gAffineAnims_BasicRock,
.callback = AnimMoveTwisterParticle
};
//steam eruption
const struct SpriteTemplate gSteamEruptionBreathTemplate =
{
.tileTag = ANIM_TAG_STEAM_ERUPTION,
.paletteTag = ANIM_TAG_STEAM_ERUPTION,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gAnims_DragonBreathFire,
.images = NULL,
.affineAnims = gAffineAnims_DragonBreathFire,
.callback = AnimDragonFireToTarget
};
//hyperspace hole
const struct SpriteTemplate gHyperspaceHoleImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_IceCrystalHit,
.callback = AnimIceEffectParticle
};
//water shuriken
const struct SpriteTemplate gWaterShurikenStarTemplate =
{
.tileTag = ANIM_TAG_YELLOW_STAR,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimShadowBall
};
const struct SpriteTemplate gWaterShurikenRingTemplate =
{
.tileTag = ANIM_TAG_BLUE_RING_2,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gWaterPulseRingAffineAnimTable,
.callback = AnimWaterPulseRing
};
const struct SpriteTemplate gWaterShurikenImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//eerie impulse
const struct SpriteTemplate gEerieImpulseRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gHyperVoiceRingAffineAnimTable,
.callback = AnimHyperVoiceRing
};
const struct SpriteTemplate gEerieImpulseImpactTemplate =
{
.tileTag = ANIM_TAG_GOLD_RING,
.paletteTag = ANIM_TAG_SPARK_H,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimGrantingStars
};
//venom drench
const struct SpriteTemplate gVenomDrenchAcidTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gAnims_PoisonProjectile,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFallingRock
};
//powder
const struct SpriteTemplate gPowderBlackSporeTemplate =
{
.tileTag = ANIM_TAG_SPORE,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gSporeParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSporeParticle
};
//geomancy
const struct SpriteTemplate gGeomancyRingTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_GUARD_RING,
.oam = &gOamData_AffineDouble_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGuardRingAffineAnimTable,
.callback = SpriteCB_SurroundingRing
};
const struct SpriteTemplate gGeomancyYellowRageTemplate =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_PAW_PRINT,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_DragonRageFirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDragonRageFirePlume
};
const struct SpriteTemplate gGeomancyRedCellVortexTemplate =
{
.tileTag = ANIM_TAG_ZYGARDE_HEXES,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gGeomancyGreenCellVortexTemplate =
{
.tileTag = ANIM_TAG_ZYGARDE_HEXES,
.paletteTag = ANIM_TAG_WHIP_HIT,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gGeomancyBlueCellVortexTemplate =
{
.tileTag = ANIM_TAG_ZYGARDE_HEXES,
.paletteTag = ANIM_TAG_SWEAT_BEAD,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gGeomancyRedCellRaiseTemplate =
{
.tileTag = ANIM_TAG_ZYGARDE_HEXES,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimRaiseSprite
};
const struct SpriteTemplate gGeomancyGreenCellRaiseTemplate =
{
.tileTag = ANIM_TAG_ZYGARDE_HEXES,
.paletteTag = ANIM_TAG_WHIP_HIT,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimRaiseSprite
};
const struct SpriteTemplate gGeomancyBlueCellRaiseTemplate =
{
.tileTag = ANIM_TAG_ZYGARDE_HEXES,
.paletteTag = ANIM_TAG_SWEAT_BEAD,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimRaiseSprite
};
//magnetic flux
const struct SpriteTemplate gMagneticFluxUproarTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
//happy hour
const struct SpriteTemplate gHappyHourCoinShowerTemplate =
{
.tileTag = ANIM_TAG_COIN,
.paletteTag = ANIM_TAG_COIN,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gCoinAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHappyHourCoinShower
};
//electric terrain
const struct SpriteTemplate gElectricTerrainOrbsTemplate =
{
.tileTag = ANIM_TAG_ELECTRIC_ORBS,
.paletteTag = ANIM_TAG_ELECTRIC_ORBS,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_ElectricChargingParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimOrbitFast
};
const struct SpriteTemplate gElectricTerrainFlyingBallTemplate =
{
.tileTag = ANIM_TAG_ELECTRIC_ORBS,
.paletteTag = ANIM_TAG_ELECTRIC_ORBS,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_ElectricChargingParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimOrbitScatter
};
//celebrate
const struct SpriteTemplate gCelebrateBagTemplate =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gMetronomeFingerAffineAnimTable,
.callback = AnimFollowMeFinger
};
//hold hands
const struct SpriteTemplate gHoldHandsHeartTemplate =
{
.tileTag = ANIM_TAG_MAGENTA_HEART,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimPetalDanceBigFlower
};
//hold back
const struct SpriteTemplate gHoldBackSwipeTemplate =
{
.tileTag = ANIM_TAG_PURPLE_SWIPE,
.paletteTag = ANIM_TAG_PAW_PRINT,
.oam = &gOamData_AffineOff_ObjNormal_64x64,
.anims = gAnims_RevengeBigScratch,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimRevengeScratch
};
const struct SpriteTemplate gHoldBackRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_PAW_PRINT,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gHoldBackStarsTemplate =
{
.tileTag = ANIM_TAG_PAIN_SPLIT,
.paletteTag = ANIM_TAG_DUCK,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDizzyPunchDuck
};
//infestation
const struct SpriteTemplate gInfestationBubbleTemplate =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_WaterPulseBubble,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
//oblivion wing
static const union AffineAnimCmd sSpriteAffineAnim_GrowingRing[] =
{
AFFINEANIMCMD_FRAME(8, 8, 0, 16), //Double in size
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_GrowingRing[] =
{
sSpriteAffineAnim_GrowingRing,
};
const struct SpriteTemplate gOblivionWingBeamTemplate =
{
.tileTag = ANIM_TAG_HYDRO_PUMP,
.paletteTag = ANIM_TAG_HYDRO_PUMP,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_GrowingRing,
.callback = TranslateAnimSpriteToTargetMonLocation
};
//thousand arrows
const struct SpriteTemplate gThousandArrowsGreenChargeTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gThousandArrowsGreenHexTemplate =
{
.tileTag = ANIM_TAG_VERTICAL_HEX,
.paletteTag = ANIM_TAG_ZYGARDE_HEXES,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_Geyser
};
const struct SpriteTemplate gThousandArrowsGreenArrowTemplate =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMudSportDirt
};
const struct SpriteTemplate gThousandArrowsGreenDischargeTemplate =
{
.tileTag = ANIM_TAG_ELECTRICITY,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_ElectricPuff,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimElectricPuff
};
//thousand waves
const struct SpriteTemplate gThousandWavesGreenWaveTemplate =
{
.tileTag = ANIM_TAG_FLYING_DIRT,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFlyingSandCrescent
};
const struct SpriteTemplate gThousandWavesGreenRecoverTemplate =
{
.tileTag = ANIM_TAG_ZYGARDE_HEXES,
.paletteTag = ANIM_TAG_ZYGARDE_HEXES,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gPowerAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
const struct SpriteTemplate gThousandWavesGreenWheelTemplate =
{
.tileTag = ANIM_TAG_ZYGARDE_HEXES,
.paletteTag = ANIM_TAG_ZYGARDE_HEXES,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDragonDanceOrb
};
const struct SpriteTemplate gThousandWavesRotatingImpactTemplate =
{
.tileTag = ANIM_TAG_ZYGARDE_HEXES,
.paletteTag = ANIM_TAG_ZYGARDE_HEXES,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_Whirlpool,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gThousandWavesPoundImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatOnMonEdge
};
//lands wrath
const struct SpriteTemplate gLandsWrathVortexTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gAnims_WaterMudOrb,
.images = NULL,
.affineAnims = gAffineAnims_Whirlpool,
.callback = AnimParticleInVortex
};
//light of ruin
const struct SpriteTemplate gLightOfRuinPinkOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate gLightOfRuinPinkDischargeTemplate =
{
.tileTag = ANIM_TAG_ELECTRICITY,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_ElectricPuff,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimElectricPuff
};
const struct SpriteTemplate gLightOfRuinPinkExplosionTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//origin pulse
const struct SpriteTemplate gOriginPulseRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
const struct SpriteTemplate gOriginPulseOrbTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDragonDanceOrb
};
const struct SpriteTemplate gOriginPulseOrbInwardTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gOriginPulseBlueImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatRandom
};
const struct SpriteTemplate gOriginPulseBasicSplatTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//precipice blades
static const union AnimCmd sAnimCmdLargeSpike[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(32, 3),
ANIMCMD_FRAME(64, 3),
ANIMCMD_FRAME(96, 3),
ANIMCMD_END,
};
static const union AnimCmd *const sAnimCmdTable_LargeSpike[] =
{
sAnimCmdLargeSpike,
};
const struct SpriteTemplate gPrecipiceBladesSpikeTemplate =
{
.tileTag = ANIM_TAG_LARGE_SPIKE,
.paletteTag = ANIM_TAG_LARGE_SPIKE,
.oam = &gOamData_AffineOff_ObjNormal_32x64,
.anims = sAnimCmdTable_LargeSpike,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_SpriteOnMonForDuration
};
static const union AffineAnimCmd sSpriteAffineAnim_LargeHailRock[] =
{
AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_LargeHailRock[] =
{
sSpriteAffineAnim_LargeHailRock,
};
const struct SpriteTemplate gPrecipiceBladesLargeSpikeTemplate =
{
.tileTag = ANIM_TAG_LARGE_SPIKE,
.paletteTag = ANIM_TAG_LARGE_SPIKE,
.oam = &gOamData_AffineDouble_ObjNormal_32x64,
.anims = sAnimCmdTable_LargeSpike,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_LargeHailRock,
.callback = SpriteCB_SpriteOnMonForDuration
};
const struct SpriteTemplate gPrecipiceBladesPlumeTemplate =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_FIRE_PLUME,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_DragonRageFirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_AnimSpriteOnSelectedMonPos
};
//dragon ascent
static const union AffineAnimCmd sAffineAnimCmd_Drake[] =
{
AFFINEANIMCMD_FRAME(0, 0, 0, 1), //drake faces up
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd* const sAffineAnimCmdTable_DrakeFaceNorth[] =
{
sAffineAnimCmd_Drake,
sAffineAnimCmd_Drake,
};
const struct SpriteTemplate gDragonAscentFlyUpTemplate =
{
.tileTag = ANIM_TAG_DRAGON_ASCENT,
.paletteTag = ANIM_TAG_DRAGON_ASCENT,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sAffineAnimCmdTable_DrakeFaceNorth,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gDragonAscentDrakeTemplate =
{
.tileTag = ANIM_TAG_DRAGON_ASCENT,
.paletteTag = ANIM_TAG_DRAGON_ASCENT,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sAffineAnimCmdTable_DrakeStriking,
.callback = AnimFlyBallAttack
};
//hyperspace fury
const struct SpriteTemplate gHyperspaceFuryRingTemplate =
{
.tileTag = ANIM_TAG_HOOPA_RING,
.paletteTag = ANIM_TAG_HOOPA_RING,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimFireSpiralOutward
};
const struct SpriteTemplate gHyperspaceFuryHandTemplate =
{
.tileTag = ANIM_TAG_HOOPA_HAND,
.paletteTag = ANIM_TAG_HOOPA_HAND,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gHyperspaceFuryImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatRandom
};
// GEN 7
//first impression
const struct SpriteTemplate gFirstImpressionPoundTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//baneful bunker
const struct SpriteTemplate gBanefulBunkerPoisonBubbleTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gAnims_PoisonProjectile,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSmallBubblePair
};
//spirit shackle
const struct SpriteTemplate gSpiritShackleArrowTemplate =
{
.tileTag = ANIM_TAG_SPIRIT_ARROW,
.paletteTag = ANIM_TAG_SPIRIT_ARROW,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSonicBoomProjectile
};
const struct SpriteTemplate gSpiritShackleChainTemplate =
{
.tileTag = ANIM_TAG_CHAIN_LINK,
.paletteTag = ANIM_TAG_CHAIN_LINK,
.oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimThunderWave
};
//darkest lariat
const struct SpriteTemplate gDarkestLariatImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//sparklig aria
const struct SpriteTemplate gSparklingAriaBlueChargeTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjBlend_16x16,
.anims = gAnims_WaterMudOrb,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gSparklingAriaRainTemplate =
{
.tileTag = ANIM_TAG_HYDRO_PUMP,
.paletteTag = ANIM_TAG_HYDRO_PUMP,
.oam = &gOamData_AffineOff_ObjBlend_16x16,
.anims = gAnims_WaterBubbleProjectile,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMudSportDirt
};
const struct SpriteTemplate gSparklingAriaBubbleRainTemplate =
{
.tileTag = ANIM_TAG_BUBBLE,
.paletteTag = ANIM_TAG_BUBBLE,
.oam = &gOamData_AffineOff_ObjBlend_16x16,
.anims = gAnims_WaterBubbleProjectile,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMudSportDirt
};
const struct SpriteTemplate gSparklingAriaBubblesTemplate =
{
.tileTag = ANIM_TAG_BUBBLE,
.paletteTag = ANIM_TAG_BUBBLE,
.oam = &gOamData_AffineOff_ObjBlend_16x16,
.anims = gAnims_WaterBubbleProjectile,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSmallBubblePair
};
//ice hammer
const struct SpriteTemplate gIceHammerPunchStompTemplate =
{
.tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
.paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimStompFoot
};
const struct SpriteTemplate gIceHammerSmokesTemplate =
{
.tileTag = ANIM_TAG_BLACK_SMOKE,
.paletteTag = ANIM_TAG_ECLIPSING_ORB,
.oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBlackSmoke
};
//floral healing
const struct SpriteTemplate gFloralHealingFlowerTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gPetalDanceBigFlowerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSporeParticle
};
const struct SpriteTemplate gFloralHealingOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_Whirlpool,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gFloralHealingLeavesTemplate =
{
.tileTag = ANIM_TAG_LEAF,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_Whirlpool,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gFloralHealingWindLeavesTemplate =
{
.tileTag = ANIM_TAG_LEAF,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSweetScentPetal
};
//high horsepower
const struct SpriteTemplate gHighHorsepowerHorseshoeTemplate =
{
.tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
.paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gAffineAnims_MegaPunchKick,
.callback = AnimSpinningKickOrPunch
};
//strength sap
const struct SpriteTemplate gStrengthSapRedSmokeTemplate =
{
.tileTag = ANIM_TAG_GRAY_SMOKE,
.paletteTag = ANIM_TAG_RED_HEART,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gOctazookaAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gStrengthSapRedInwardTemplate =
{
.tileTag = ANIM_TAG_TEAL_ALERT,
.paletteTag = ANIM_TAG_RED_HEART,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimTealAlert
};
const struct SpriteTemplate gStrengthSapAbsorbTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gAbsorptionOrbAffineAnimTable,
.callback = AnimAbsorptionOrb
};
//solar blade
const struct SpriteTemplate gSolarBladeImpactTemplate =
{
.tileTag = ANIM_TAG_CLAW_SLASH,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_ClawSlash,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimClawSlash
};
//leafage
const struct SpriteTemplate gLeafageImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//toxic thread
const struct SpriteTemplate gToxicThreadString =
{
.tileTag = ANIM_TAG_STRING,
.paletteTag = ANIM_TAG_STRING,
.oam = &gOamData_AffineOff_ObjNormal_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_ToxicThreadWrap
};
//laser focus
const struct SpriteTemplate gLaserFocusRedEyesTemplate =
{
.tileTag = ANIM_TAG_OPENING_EYE,
.paletteTag = ANIM_TAG_EYE_SPARKLE,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gOpeningEyeAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//gear up
const struct SpriteTemplate gGearUpGearsTemplate =
{
.tileTag = ANIM_TAG_GEAR,
.paletteTag = ANIM_TAG_GEAR,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimPetalDanceBigFlower
};
//throat chop
const struct SpriteTemplate gThroatChopRedImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//pollen puff
const struct SpriteTemplate gPollenPuffPinkStarTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_2,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gGrantingStarsAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSmallBubblePair
};
const struct SpriteTemplate gPollenPuffPinkSparkleTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_2,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gGrantingStarsAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimZapCannonSpark
};
const struct SpriteTemplate gPollenPuffYellowSparkleTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_2,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gGrantingStarsAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimZapCannonSpark
};
const struct SpriteTemplate gPollenPuffSporeTemplate =
{
.tileTag = ANIM_TAG_SPORE,
.paletteTag = ANIM_TAG_SPORE,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gSporeParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimThrowProjectile
};
const struct SpriteTemplate gPollenPuffImpactTemplates =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_FLAT_ROCK,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gPollenPuffHealTemplate =
{
.tileTag = ANIM_TAG_BLUE_STAR,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gHealingBlueStarAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//anchor shot
const struct SpriteTemplate gAnchorShotAnchorTemplate =
{
.tileTag = ANIM_TAG_ANCHOR,
.paletteTag = ANIM_TAG_CHAIN_LINK,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBlockX
};
const struct SpriteTemplate gAnchorShotAngledAnchorTemplate =
{
.tileTag = ANIM_TAG_ANCHOR,
.paletteTag = ANIM_TAG_CHAIN_LINK,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimShadowBall
};
//psychic terrain
const struct SpriteTemplate gPsychicTerrainOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gPowerAbsorptionOrbAffineAnimTable,
.callback = AnimOrbitFast
};
const struct SpriteTemplate gPsychicTerrainStarTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPARKLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gMoonlightSparkleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimOrbitScatter
};
//lunge
const struct SpriteTemplate gLungeGreenChargeTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_PsychoBoostOrb,
.callback = AnimPsychoBoost
};
const struct SpriteTemplate gLungeGreenBubbleTemplate =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimThrowProjectile
};
const struct SpriteTemplate gLungeGreenImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//power trip
const struct SpriteTemplate gPowerTripFocusEnergyTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gPowerTripImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_PURPLE_FLAME,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//burn up
const struct SpriteTemplate gBurnUpRedYawnTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimThrowMistBall
};
//speed swap
const struct SpriteTemplate gSpeedSwapRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gSpeedSwapCircleTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gMimicOrbAffineAnimTable,
.callback = AnimMimicOrb
};
const struct SpriteTemplate gSpeedSwapOrbMissileTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gMimicOrbAffineAnimTable,
.callback = AnimMissileArc
};
const struct SpriteTemplate gSpeedSwapOrbTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineOff_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
//smart strike
const struct SpriteTemplate gSmartStrikeGemTemplate =
{
.tileTag = ANIM_TAG_POWER_GEM,
.paletteTag = ANIM_TAG_POWER_GEM,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gSmartStrikeImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_FLASH_CANNON_BALL,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//purify
const struct SpriteTemplate gPurifyWhiteBallTemplate =
{
.tileTag = ANIM_TAG_FLASH_CANNON_BALL,
.paletteTag = ANIM_TAG_FLASH_CANNON_BALL,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMissileArc
};
const struct SpriteTemplate gPurifySmokeTemplate =
{
.tileTag = ANIM_TAG_BLACK_SMOKE,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBlackSmoke
};
//revelation dance
const struct SpriteTemplate gRevelationDanceYellowOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimPetalDanceBigFlower
};
const struct SpriteTemplate gRevelationDanceYellowFlowerTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gPetalDanceSmallFlowerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimPetalDanceSmallFlower
};
const struct SpriteTemplate gRevelationDanceYellowAirWaveTemplate =
{
.tileTag = ANIM_TAG_AIR_WAVE,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineDouble_ObjBlend_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSonicBoomProjectile
};
const struct SpriteTemplate gRevelationDanceYellowImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
const struct SpriteTemplate gRevelationDanceYellowRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
const struct SpriteTemplate gRevelationDanceYellowDispersalTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireSpread
};
//core enforcer
const struct SpriteTemplate gCoreEnforcerBlueRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gCoreEnforcerYellowRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gCoreEnforcerGreenRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gCoreEnforcerCircleChargeTemplate =
{
.tileTag = ANIM_TAG_SHOCK_3,
.paletteTag = ANIM_TAG_SHOCK_3,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gAnims_ThunderboltOrb,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimFlashingHitSplat
};
const struct SpriteTemplate gCoreEnforcerBlueSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSparkElectricity
};
const struct SpriteTemplate gCoreEnforcerGreenChargeTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSparkElectricity
};
const struct SpriteTemplate gCoreEnforcerSnoreTemplate =
{
.tileTag = ANIM_TAG_SNORE_Z,
.paletteTag = ANIM_TAG_SNORE_Z,
.oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_CentredSpiderWeb
};
const struct SpriteTemplate gCoreEnforcerImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = SpriteCB_CoreEnforcerHits
};
const struct SpriteTemplate gCoreEnforcerBeamTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_CoreEnforcerBeam
};
const struct SpriteTemplate gCoreEnforcerExplosionTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_EXPLOSION,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_SpriteToCentreOfSide
};
//trop kick
const struct SpriteTemplate gTropKickGreenFootTemplate =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimJumpKick
};
const struct SpriteTemplate gTropKickFlowerTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gPetalDanceBigFlowerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireSpread
};
const struct SpriteTemplate gTropKickLeavesTemplate =
{
.tileTag = ANIM_TAG_LEAF,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireSpread
};
//clanging scales
const struct SpriteTemplate gClangingScalesPurpleMetalSoundTemplate =
{
.tileTag = ANIM_TAG_METAL_SOUND_WAVES,
.paletteTag = ANIM_TAG_METAL_SOUND_WAVES,
.oam = &gOamData_AffineDouble_ObjNormal_32x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGrowingRingAffineAnimTable,
.callback = SpriteCB_TranslateAnimSpriteToTargetMonLocationDoubles
};
//brutal swing
const struct SpriteTemplate gBrutalSwingRandomImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatRandom
};
const struct SpriteTemplate gBrutalSwingBasicImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
//aurora veil
const struct SpriteTemplate gAuroraVeilRingTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_GUARD_RING,
.oam = &gOamData_AffineDouble_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGuardRingAffineAnimTable,
.callback = SpriteCB_SurroundingRing
};
//shell trap
const struct SpriteTemplate gShellTrapYellowImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
const struct SpriteTemplate gShellTrapRedImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
const struct SpriteTemplate gShellTrapFireHitsTemplate =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_Snowball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMoveParticleBeyondTarget
};
//fleur cannon
const struct SpriteTemplate gFleurCannonOrbTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate gFleurCannonDischargeTemplate =
{
.tileTag = ANIM_TAG_ELECTRICITY,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_ElectricPuff,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimElectricPuff
};
//stomping tantrum
const struct SpriteTemplate gStompingTantrumRockTemplate =
{
.tileTag = ANIM_TAG_SMALL_ROCK,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_TearDrop,
.callback = AnimTearDrop
};
//prismatic laser
const struct SpriteTemplate gPrismaticLaserChargeTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gPrismaticLaserYellowOutwardTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPIKE,
.paletteTag = ANIM_TAG_SPARK_H,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gPrismaticLaserGreenOutwardTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPIKE,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gPrismaticLaserRedOutwardTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPIKE,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gPrismaticLaserVioletOutwardTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPIKE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gPrismaticLaserYellowInwardTemplate =
{
.tileTag = ANIM_TAG_TEAL_ALERT,
.paletteTag = ANIM_TAG_SPARK_H,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gPrismaticLaserGreenInwardTemplate =
{
.tileTag = ANIM_TAG_TEAL_ALERT,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gPrismaticLaserRedInwardTemplate =
{
.tileTag = ANIM_TAG_TEAL_ALERT,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gPrismaticLaserVioletInwardTemplate =
{
.tileTag = ANIM_TAG_TEAL_ALERT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gPrismaticLaserYellowRainTemplate =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_SPARK_H,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_FallingObject
};
const struct SpriteTemplate gPrismaticLaserGreenRainTemplate =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_FallingObject
};
const struct SpriteTemplate gPrismaticLaserRedRainTemplate =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_FallingObject
};
const struct SpriteTemplate gPrismaticLaserVioletRainTemplate =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_FallingObject
};
//spectral thief
const struct SpriteTemplate gSpectralThiefBlackSmokeTemplate =
{
.tileTag = ANIM_TAG_GRAY_SMOKE,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gOctazookaAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gSpectralThiefThiefImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_IceCrystalHit,
.callback = AnimIceEffectParticle
};
const struct SpriteTemplate gSpectralThiefBlackOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gMimicOrbAffineAnimTable,
.callback = AnimMimicOrb
};
const struct SpriteTemplate gSpectralThiefBlackBuffTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
//sunsteeel strike
const struct SpriteTemplate gSunsteelStrikeBlackFlyBallTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp
};
static const struct OamData sSunsteelStrikeBlastOAM =
{
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
.shape = SPRITE_SHAPE(64x64),
.size = SPRITE_SIZE(64x64),
.priority = 1, //Above sprites
};
static const union AffineAnimCmd sSpriteAffineAnim_SunsteelStrikeBlastEnemySide[] =
{
AFFINEANIMCMD_FRAME(0, 0, -64, 1), //90 degree turn
AFFINEANIMCMD_FRAME(0, 0, 0, 7), //Pause
AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size
AFFINEANIMCMD_END
};
static const union AffineAnimCmd sSpriteAffineAnim_SunsteelStrikeBlastPlayerSide[] =
{
AFFINEANIMCMD_FRAME(0, 0, 128, 1), //180 degree turn
AFFINEANIMCMD_FRAME(0, 0, 0, 7), //Pause
AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_SunsteelStrikeBlast[] =
{
sSpriteAffineAnim_SunsteelStrikeBlastEnemySide,
sSpriteAffineAnim_SunsteelStrikeBlastPlayerSide,
};
const struct SpriteTemplate gSunsteelStrikeSuperpowerTemplate =
{
.tileTag = ANIM_TAG_METEOR,
.paletteTag = ANIM_TAG_METEOR,
.oam = &sSunsteelStrikeBlastOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_SunsteelStrikeBlast,
.callback = AnimFlyBallAttack
};
const struct SpriteTemplate gSunsteelStrikeRedBeamTemplate =
{
.tileTag = ANIM_TAG_GOLD_RING,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallAttack,
.callback = SpriteCB_SunsteelStrikeRings
};
const struct SpriteTemplate gSunsteelStrikeYellowBeamTemplate =
{
.tileTag = ANIM_TAG_GOLD_RING,
.paletteTag = ANIM_TAG_GOLD_RING,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallAttack,
.callback = SpriteCB_SunsteelStrikeRings
};
const struct SpriteTemplate gSunsteelStrikeRedImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
const struct SpriteTemplate gSunsteelStrikeRocksTemplate =
{
.tileTag = ANIM_TAG_SMALL_ROCK,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_TearDrop,
.callback = AnimTearDrop
};
//moongeist beam
const struct SpriteTemplate gMoongeistBeamBlueOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_WATER_GUN,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate gMoongeistBeamPurpleOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ASSURANCE_HAND,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate gMoongeistBeamChargeTemplate =
{
.tileTag = ANIM_TAG_ELECTRIC_ORBS,
.paletteTag = ANIM_TAG_ELECTRIC_ORBS,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_ElectricChargingParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_MoongeistCharge
};
//zing zap
const struct SpriteTemplate gZingZapYellowBallTemplate =
{
.tileTag = ANIM_TAG_YELLOW_BALL,
.paletteTag = ANIM_TAG_SPARK_H,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimShadowBall
};
const struct SpriteTemplate gZingZapRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
//nature's madness
const struct SpriteTemplate gNaturesMadnessPinkStarsTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_2,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gGrantingStarsAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSmallBubblePair
};
const struct SpriteTemplate gNaturesMadnessCrystalsTemplate =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_SmallBubblePair,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSmallBubblePair
};
const struct SpriteTemplate gNaturesMadnessPinkRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
const struct SpriteTemplate gNaturesMadnessGrayRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_ECLIPSING_ORB,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//mind blown
const struct SpriteTemplate gMindBlownHeadTemplate =
{
.tileTag = ANIM_TAG_BLACEPHALON_HEAD,
.paletteTag = ANIM_TAG_BLACEPHALON_HEAD,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = SpriteCB_MindBlownBall
};
const struct SpriteTemplate gMindBlownBlueOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_MindBlownExplosion
};
const struct SpriteTemplate gMindBlownPinkOrbsTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_PINK_HEART,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_MindBlownExplosion
};
const struct SpriteTemplate gMindBlownBlueImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = SpriteCB_RandomCentredHits
};
const struct SpriteTemplate gMindBlownPinkImpactTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_PINK_HEART,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = SpriteCB_RandomCentredHits
};
//plasma fists
const struct SpriteTemplate gPlasmaFistsChargeTemplate =
{
.tileTag = ANIM_TAG_SHOCK_3,
.paletteTag = ANIM_TAG_SHOCK_3,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gAnims_ThunderboltOrb,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
//photon geyser
static const union AnimCmd sAnimCmdPhotonGeyserBeam1[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END
};
static const union AnimCmd sAnimCmdSmiteBeam[] =
{
ANIMCMD_FRAME(4, 1),
ANIMCMD_END
};
static const union AnimCmd sAnimCmdPhotonGeyserBeam2[] =
{
ANIMCMD_FRAME(8, 1),
ANIMCMD_END
};
static const union AnimCmd *const sAnimCmdTable_PhotonGeyserBeam[] =
{
sAnimCmdPhotonGeyserBeam1,
sAnimCmdSmiteBeam,
sAnimCmdPhotonGeyserBeam2,
};
static const union AffineAnimCmd sSpriteAffineAnim_DoNothing[] =
{
AFFINEANIMCMD_FRAME(0, 0, 0, 1), //Do nothing
AFFINEANIMCMD_END
};
static const union AffineAnimCmd sSpriteAffineAnim_PhotonGeyserBeam[] =
{
AFFINEANIMCMD_FRAME(0, 0, 0, 16), //Delay
AFFINEANIMCMD_FRAME(64, 64, 0, 4), //Double in size
//Pulsate
AFFINEANIMCMD_FRAME(-128, -128, 0, 1),
AFFINEANIMCMD_FRAME(128, 128, 0, 1),
AFFINEANIMCMD_JUMP(2),
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_PhotonGeyserBeam[] =
{
sSpriteAffineAnim_DoNothing,
sSpriteAffineAnim_PhotonGeyserBeam,
};
const struct SpriteTemplate gPhotonGeyserBeam =
{
.tileTag = ANIM_TAG_STRAIGHT_BEAM,
.paletteTag = ANIM_TAG_STRAIGHT_BEAM,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = sAnimCmdTable_PhotonGeyserBeam,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_PhotonGeyserBeam,
.callback = SpriteCB_PhotonGeyserBeam
};
const struct SpriteTemplate gPhotonGeyserChargeTemplate =
{
.tileTag = ANIM_TAG_SHOCK_3,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gAnims_ThunderboltOrb,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gPhotonGeyserSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSparkElectricity
};
const struct SpriteTemplate gPhotonGeyserZapCannonSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimZapCannonSpark
};
const struct SpriteTemplate gPhotonGeyserWhiteRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
const struct SpriteTemplate gPhotonGeyserYellowRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimUproarRing
};
const struct SpriteTemplate gPhotonGeyserZapBallTemplate =
{
.tileTag = ANIM_TAG_YELLOW_BALL,
.paletteTag = ANIM_TAG_YELLOW_BALL,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
// GEN 8
//snipe shot
static const union AffineAnimCmd sSpriteAffineAnim_LargeSpikePointedLeft[] =
{
AFFINEANIMCMD_FRAME(0, 0, 32, 1), //45 degree turn
AFFINEANIMCMD_END
};
static const union AffineAnimCmd sSpriteAffineAnim_LargeSpikePointedRight[] =
{
AFFINEANIMCMD_FRAME(0, 0, -32, 1), //45 degree turn
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_LargeSpike[] =
{
sSpriteAffineAnim_LargeSpikePointedLeft,
sSpriteAffineAnim_LargeSpikePointedRight,
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_SnipeShot[] =
{
sSpriteAffineAnim_LargeSpikePointedRight,
};
static const union AnimCmd sAnimCmdSnipeShot[] =
{
ANIMCMD_FRAME(64, 4),
ANIMCMD_FRAME(48, 4),
ANIMCMD_FRAME(32, 4),
ANIMCMD_FRAME(16, 4),
ANIMCMD_FRAME(0, 4),
ANIMCMD_END,
};
static const union AnimCmd *const sAnimCmdTable_SnipeShot[] =
{
sAnimCmdSnipeShot,
};
const struct SpriteTemplate gSnipeShotBallTemplate = //used in aura sphere
{
.tileTag = ANIM_TAG_IMPACT_2,
.paletteTag = ANIM_TAG_IMPACT_2,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = sAnimCmdTable_SnipeShot,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_SnipeShot,
.callback = AnimShadowBall
};
//jaw lock
const struct SpriteTemplate gJawLockTeethTemplate =
{
.tileTag = ANIM_TAG_SHARP_TEETH,
.paletteTag = ANIM_TAG_SHARP_TEETH,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_Bite,
.callback = SpriteCB_LockingJaw
};
//stuff cheeks
static const union AnimCmd sAnimCmdBerryChomp[] =
{
ANIMCMD_FRAME(0, 0x30),
ANIMCMD_FRAME(0, 0x25),
ANIMCMD_FRAME(16, 3),
ANIMCMD_END,
};
static const union AnimCmd *const sAnimCmdTable_BerryChomp[] =
{
sAnimCmdBerryChomp,
};
const struct SpriteTemplate gFloatingBerryTemplate =
{
.tileTag = ANIM_TAG_BERRY_NORMAL,
.paletteTag = ANIM_TAG_BERRY_NORMAL,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = sAnimCmdTable_BerryChomp,
.images = NULL,
.affineAnims = gMetronomeFingerAffineAnimTable,
.callback = AnimMetronomeFinger
};
//no retreat
static const struct OamData sPyroBallFlamesOAM =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.shape = SPRITE_SHAPE(32x32),
.size = SPRITE_SIZE(32x32),
.priority = 1, //Above sprites
};
const struct SpriteTemplate gNoRetreatFlameTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &sPyroBallFlamesOAM,
.anims = gAnims_DragonBreathFire,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_SpriteOnMonForDuration
};
//magic powder
const struct SpriteTemplate gMagicPowderBluePowderTemplate =
{
.tileTag = ANIM_TAG_POISON_POWDER,
.paletteTag = ANIM_TAG_WATER_GUN,
.oam = &gOamData_AffineOff_ObjNormal_8x16,
.anims = gPowderParticlesAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMovePowderParticle
};
//dreepy missile
const struct SpriteTemplate gDreepyMissileTemplate =
{
.tileTag = ANIM_TAG_DREEPY,
.paletteTag = ANIM_TAG_DREEPY,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimShadowBall
};
//bolt beak
const struct SpriteTemplate gBoltBeakBlueSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_ELECTRICITY,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSparkElectricity
};
const struct SpriteTemplate gBoltBeakBlueFlashingSparkTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_ELECTRICITY,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimSparkElectricityFlashing
};
//fishious rend
static const struct OamData sFishiousRendTeethOam =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.shape = SPRITE_SHAPE(64x64),
.size = SPRITE_SIZE(64x64),
.priority = 1, //Above sprites
};
const struct SpriteTemplate gFishiousRendTeethTemplate =
{
.tileTag = ANIM_TAG_SHARP_TEETH,
.paletteTag = ANIM_TAG_SHARP_TEETH,
.oam = &sFishiousRendTeethOam,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_LeftRightSlice
};
//clangorous soul
const struct SpriteTemplate gClangorousSoulBlueBuffTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gClangorousSoulPurpleBuffTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gClangorousSoulWhiteBuffTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gClangorousSoulRedFistTemplate =
{
.tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimJumpKick
};
const struct SpriteTemplate gClangorousSoulRedRingTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
//pyro ball
static const struct OamData sPyroBallRockOAM =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.shape = SPRITE_SHAPE(16x16),
.size = SPRITE_SIZE(16x16),
.priority = 1, //Above sprites
};
const struct SpriteTemplate gPyroBallRockTemplate =
{
.tileTag = ANIM_TAG_FLAT_ROCK,
.paletteTag = ANIM_TAG_FLAT_ROCK,
.oam = &sPyroBallRockOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_PyroBallRockBounce
};
const struct SpriteTemplate gPyroBallBurningRockTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &sPyroBallFlamesOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_PyroBallRockBounce
};
const struct SpriteTemplate gPyroBallFlamesUpTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &sPyroBallFlamesOAM,
.anims = gAnims_DragonBreathFire,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_PyroBallRockBounce
};
const struct SpriteTemplate gPyroBallEmberBallTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &sPyroBallFlamesOAM,
.anims = gAnims_DragonBreathFire,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_PyroBallLaunch
};
//aura wheel
const struct SpriteTemplate gAuraWheelBlueElectricityTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimFireSpiralOutward
};
const struct SpriteTemplate gAuraWheelRedElectricityTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_SPARK,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimFireSpiralOutward
};
//breaking swipe
const struct SpriteTemplate gBreakingSwipeCenteredElectricity =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_CentredElectricity
};
//branch poke
const struct SpriteTemplate gBranchPokeBranchTemplate =
{
.tileTag = ANIM_TAG_BRANCH,
.paletteTag = ANIM_TAG_BRANCH,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimShadowBall
};
//apple acid
const struct SpriteTemplate gAppleAcidFloatingAppleTemplate =
{
.tileTag = ANIM_TAG_APPLE,
.paletteTag = ANIM_TAG_APPLE,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gMetronomeFingerAffineAnimTable,
.callback = AnimMetronomeFinger
};
const struct SpriteTemplate gAppleAcidLaunchTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gAnims_PoisonProjectile,
.images = NULL,
.affineAnims = gAffineAnims_PoisonProjectile,
.callback = SpriteCB_AcidLaunchSingleTarget
};
const struct SpriteTemplate gAppleAcidDripTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gAnims_AcidPoisonDroplet,
.images = NULL,
.affineAnims = gAffineAnims_Droplet,
.callback = SpriteCB_AcidDripSingleTarget
};
//grav apple
static const struct OamData sAppleOAM =
{
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
.shape = SPRITE_SHAPE(32x32),
.size = SPRITE_SIZE(32x32),
.priority = 1, //Above sprites
};
const struct SpriteTemplate gGravAppleSmallApple =
{
.tileTag = ANIM_TAG_APPLE,
.paletteTag = ANIM_TAG_APPLE,
.oam = &sAppleOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_FallingObject
};
static const union AffineAnimCmd sSpriteAffineAnim_ScaledApple[] =
{
AFFINEANIMCMD_FRAME(64, 64, 0, 10), //Quadruple in size
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_ScaledApple[] =
{
sSpriteAffineAnim_ScaledApple,
};
const struct SpriteTemplate gGravAppleLargeApple =
{
.tileTag = ANIM_TAG_APPLE,
.paletteTag = ANIM_TAG_APPLE,
.oam = &sAppleOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_ScaledApple,
.callback = SpriteCB_FallingObject
};
//strange steam
const struct SpriteTemplate gStrangeSteamPinkCloudTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_PINK_CLOUD,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimDirtScatter
};
const struct SpriteTemplate gStrangeSteamGreenCloudTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_FINGER,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimDirtScatter
};
const struct SpriteTemplate gStrangeSteamBlueCloudTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_WATER_GUN,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimDirtScatter
};
//life dew
static const union AnimCmd sAnimCmdWaterDropletDrip[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
ANIMCMD_FRAME(32, 3),
ANIMCMD_FRAME(48, 3),
ANIMCMD_END,
};
static const union AnimCmd sAnimCmdWaterDropletSplash[] =
{
ANIMCMD_FRAME(64, 3),
ANIMCMD_FRAME(80, 3),
ANIMCMD_FRAME(96, 3),
ANIMCMD_FRAME(112, 10),
ANIMCMD_END,
};
static const union AnimCmd *const sAnimCmdWaterDroplet[] =
{
sAnimCmdWaterDropletDrip,
sAnimCmdWaterDropletSplash,
};
const struct SpriteTemplate gLifeDewDropletTemplate =
{
.tileTag = ANIM_TAG_WATER_DROPLET,
.paletteTag = ANIM_TAG_WATER_DROPLET,
.oam = &sAppleOAM,
.anims = sAnimCmdWaterDroplet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_WaterDroplet
};
const struct SpriteTemplate gLifeDewSpecialOrbsTemplate =
{
.tileTag = ANIM_TAG_BLUE_STAR,
.paletteTag = ANIM_TAG_BLUE_STAR,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gHealingBlueStarAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_AnimSpriteOnSelectedMonPos
};
//obstruct
const struct SpriteTemplate gObstructCrossTemplate =
{
.tileTag = ANIM_TAG_OBSTRUCT_CROSS,
.paletteTag = ANIM_TAG_OBSTRUCT_CROSS,
.oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCrossImpact
};
//meteor assault
static const struct OamData sGrowingSuperpowerOAM =
{
.affineMode = ST_OAM_AFFINE_DOUBLE,
.objMode = ST_OAM_OBJ_NORMAL,
.shape = SPRITE_SHAPE(64x64),
.size = SPRITE_SIZE(64x64),
.priority = 2,
};
static const union AffineAnimCmd sSpriteAffineAnim_GrowingSuperpowerEnemyAttack[] =
{
AFFINEANIMCMD_FRAME(0, 0, 128, 1), //180 degree turn
AFFINEANIMCMD_FRAME(0, 0, 0, 2), //Pause
AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size
AFFINEANIMCMD_END
};
static const union AffineAnimCmd sSpriteAffineAnim_GrowingSuperpowerPlayerAttack[] =
{
AFFINEANIMCMD_FRAME(0, 0, 0, 2), //Pause
AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Double in size
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sSpriteAffineAnimTable_GrowingSuperpower[] =
{
sSpriteAffineAnim_GrowingSuperpowerPlayerAttack,
sSpriteAffineAnim_GrowingSuperpowerEnemyAttack,
};
const struct SpriteTemplate gGrowingSuperpowerTemplate = //used in breakneck blitz
{
.tileTag = ANIM_TAG_METEOR,
.paletteTag = ANIM_TAG_METEOR,
.oam = &sGrowingSuperpowerOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
.callback = SpriteCB_GrowingSuperpower
};
//steel beam
const struct SpriteTemplate gSteelBeamSpikeShardTemplate =
{
.tileTag = ANIM_TAG_SPIKES,
.paletteTag = ANIM_TAG_SPIKES,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_ShadowBall,
.callback = AnimDirtScatter
};
// Z MOVES
//activate
const struct SpriteTemplate gZMoveSymbolSpriteTemplate =
{
.tileTag = ANIM_TAG_Z_MOVE_SYMBOL,
.paletteTag = ANIM_TAG_Z_MOVE_SYMBOL,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_LusterPurgeCircle,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlueZMoveEnergySpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_SWEAT_BEAD,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy,
};
const struct SpriteTemplate gGreenZMoveEnergySpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_WHIP_HIT,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy,
};
const struct SpriteTemplate gYellowZMoveEnergySpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_PAW_PRINT,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy,
};
// breakneck blitz
const struct SpriteTemplate gBreakneckBlitzDanceSpriteTemplate =
{
.tileTag = ANIM_TAG_HOLLOW_ORB,
.paletteTag = ANIM_TAG_FLAT_ROCK,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDragonDanceOrb
};
const struct SpriteTemplate gBreakneckBlitzHitSpriteTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_FLAT_ROCK,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
// all out pummelling
const struct SpriteTemplate gAllOutPummelingOnslaughtSpriteTemplate =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimJumpKick
};
// supersonic skystrike
static const union AffineAnimCmd sSupersonicSkystrikeAffinePlayerSide[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd sSupersonicSkystrikeAffineOpponentSide[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd* const sSupersonicSkystrikeAffineAnimTable[] = {
sSupersonicSkystrikeAffinePlayerSide,
sSupersonicSkystrikeAffineOpponentSide,
};
const struct SpriteTemplate gSupersonicSkystrikeFlySpriteTemplate =
{
.tileTag = ANIM_TAG_BIRD,
.paletteTag = ANIM_TAG_BIRD,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSupersonicSkystrikeAffineAnimTable,
.callback = AnimFlyBallAttack
};
//acid downpour
const struct SpriteTemplate gAcidDownpourReversalSpriteTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimReversalOrb
};
const struct SpriteTemplate gAcidDownpourAuraSpriteTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
//tectonic rage
const struct SpriteTemplate gTectonicRageBlastBurnSpriteTemplate =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_FIRE_PLUME,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBlastBurnTargetPlume
};
const struct SpriteTemplate gTectonicRageExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_EXPLOSION_2,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// continental crush
const struct SpriteTemplate gContinentalCrushNeedleArmSpriteTemplate =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FlyingRock,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gContinentalCrushBigRockStompSpriteTemplate =
{
.tileTag = ANIM_TAG_REALLY_BIG_ROCK,
.paletteTag = ANIM_TAG_REALLY_BIG_ROCK,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_LargeHailRock,
.callback = SpriteCB_FallingObject
};
const struct SpriteTemplate gContinentalCrushFocusEnergySpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gContinentalCrushGrowingRockSpriteTemplate =
{
.tileTag = ANIM_TAG_REALLY_BIG_ROCK,
.paletteTag = ANIM_TAG_REALLY_BIG_ROCK,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gContinentalCrushEruptionSpriteTemplate =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEruptionFallingRock
};
// savage spin out
const struct SpriteTemplate gSavageSpinOutStringBlastSpriteTemplate =
{
.tileTag = ANIM_TAG_STRING,
.paletteTag = ANIM_TAG_STRING,
.oam = &gOamData_AffineOff_ObjNormal_64x32,
.anims = gAffineAnims_AirWaveCrescent,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimAirWaveCrescent
};
const struct SpriteTemplate gSavageSpinOutCacoonSpriteTemplate =
{
.tileTag = ANIM_TAG_COCOON,
.paletteTag = ANIM_TAG_COCOON,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_Bite,
.callback = AnimBite
};
const struct SpriteTemplate gSavageSpinOutGreenChargeSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gSavageSpinOutGreenCutSpriteTemplate =
{
.tileTag = ANIM_TAG_CUT,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gCuttingSliceAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCuttingSlice
};
const struct SpriteTemplate gSavageSpinOutWhiteExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// never ending nightmare
const struct SpriteTemplate gNeverEndingNightmareRingAttackerSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gNeverEndingNightmareRingTargetSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gNeverEndingNightmareFocusEnergySpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gNeverEndingNightmareHandSpriteTemplate =
{
.tileTag = ANIM_TAG_ASSURANCE_HAND,
.paletteTag = ANIM_TAG_ASSURANCE_HAND,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gNeverEndingNightmareBlastBurnSpriteTemplate =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBlastBurnTargetPlume
};
const struct SpriteTemplate gNeverEndingNightmareGeyserHexSpriteTemplate =
{
.tileTag = ANIM_TAG_VERTICAL_HEX,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_GeyserTarget
};
const struct SpriteTemplate gNeverEndingNightmareExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// corkscrew crash
const struct SpriteTemplate gCorkscrewCrashMetalBitSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIKES,
.paletteTag = ANIM_TAG_SPIKES,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_TearDrop,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gCorkscrewCrashChargeSpriteTemplate =
{
.tileTag = ANIM_TAG_CORKSCREW,
.paletteTag = ANIM_TAG_CORKSCREW,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gCorkscrewCrashCorkscrewFlyUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CORKSCREW,
.paletteTag = ANIM_TAG_CORKSCREW,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimParticleInVortex
};
static const union AffineAnimCmd sCorkscrewCrashFlyDownAffineOpponentSide[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x80, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd* const sCorkscrewCrashFlyDownAffineAnimTable[] = {
sCorkscrewCrashFlyDownAffineOpponentSide,
};
const struct SpriteTemplate gCorkscrewCrashCorkscrewFlyDownSpriteTemplate =
{
.tileTag = ANIM_TAG_CORKSCREW,
.paletteTag = ANIM_TAG_CORKSCREW,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sCorkscrewCrashFlyDownAffineAnimTable,
.callback = AnimStompFoot
};
static const union AffineAnimCmd sCorkscrewCrashStrikePlayerAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd sCorkscrewCrashStrikeTargetAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sCorkscrewCrashStrikeAffineAnimTable[] = {
sCorkscrewCrashStrikePlayerAffineAnims,
sCorkscrewCrashStrikeTargetAffineAnims,
};
const struct SpriteTemplate gCorkscrewCrashStrikeSpriteTemplate =
{
.tileTag = ANIM_TAG_CORKSCREW,
.paletteTag = ANIM_TAG_CORKSCREW,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sCorkscrewCrashStrikeAffineAnimTable,
.callback = AnimFlyBallAttack
};
static const union AffineAnimCmd sCorkscrewCrashLeftAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x40, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sCorkscrewCrashLeftAffineAnimTable[] = {
sCorkscrewCrashLeftAffineAnims,
};
const struct SpriteTemplate gCorkscrewCrashLeftUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CORKSCREW,
.paletteTag = ANIM_TAG_CORKSCREW,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sCorkscrewCrashLeftAffineAnimTable,
.callback = AnimAssistPawprint
};
const struct SpriteTemplate gCorkscrewCrashLeftDownSpriteTemplate =
{
.tileTag = ANIM_TAG_CORKSCREW,
.paletteTag = ANIM_TAG_CORKSCREW,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sCorkscrewCrashLeftAffineAnimTable,
.callback = AnimAssistPawprint
};
static const union AffineAnimCmd sCorkscrewCrashRightUpAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sCorkscrewCrashRightUpAffineAnimTable[] = {
sCorkscrewCrashRightUpAffineAnims,
};
const struct SpriteTemplate gCorkscrewCrashRightUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CORKSCREW,
.paletteTag = ANIM_TAG_CORKSCREW,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sCorkscrewCrashRightUpAffineAnimTable,
.callback = AnimAssistPawprint
};
static const union AffineAnimCmd sCorkscrewCrashRightDownAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xba, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sCorkscrewCrashRightDownAffineAnimTable[] = {
sCorkscrewCrashRightDownAffineAnims,
};
const struct SpriteTemplate gCorkscrewCrashRightDownSpriteTemplate =
{
.tileTag = ANIM_TAG_CORKSCREW,
.paletteTag = ANIM_TAG_CORKSCREW,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sCorkscrewCrashRightDownAffineAnimTable,
.callback = AnimAssistPawprint
};
// inferno overdrive
const struct SpriteTemplate gInfernoOverdriveSuperpowerSpriteTemplate =
{
.tileTag = ANIM_TAG_METEOR,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &sGrowingSuperpowerOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
.callback = SpriteCB_GrowingSuperpower
};
const struct SpriteTemplate gInfernoOverdriveChargeSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gInfernoOverdriveExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_EXPLOSION_2,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// hydro vortex
const struct SpriteTemplate gHydroVortexSuperpowerSpriteTemplate =
{
.tileTag = ANIM_TAG_METEOR,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &sGrowingSuperpowerOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
.callback = SpriteCB_GrowingSuperpower
};
const struct SpriteTemplate gHydroVortexHurricaneSpriteTemplate =
{
.tileTag = ANIM_TAG_GUST,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineOff_ObjNormal_32x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEllipticalGust
};
const struct SpriteTemplate gHydroVortexImpactSpriteTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
// bloom doom
const struct SpriteTemplate gBloomDoomPetalSpinSpriteTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gPetalDanceBigFlowerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireSpiralOutward
};
const struct SpriteTemplate gBloomDoomGreenChargeSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gBloomDoomHurricaneSpriteTemplate =
{
.tileTag = ANIM_TAG_GUST,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_32x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEllipticalGustAttacker,
};
const struct SpriteTemplate gBloomDoomFlowerGeyserSpriteTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gPetalDanceBigFlowerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_Geyser
};
const struct SpriteTemplate gBloomDoomGreenBeamSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate gBloomDoomPetalStarSpriteTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gPetalDanceBigFlowerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimNeedleArmSpike
};
const struct SpriteTemplate gBloomDoomExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// gigavolt havoc
const struct SpriteTemplate gGigavoltHavocChargingSpearSpriteTemplate =
{
.tileTag = ANIM_TAG_HAVOC_SPEAR,
.paletteTag = ANIM_TAG_HAVOC_SPEAR,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gGigavoltHavocLaunchSpearSpriteTemplate =
{
.tileTag = ANIM_TAG_HAVOC_SPEAR,
.paletteTag = ANIM_TAG_HAVOC_SPEAR,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSuperpowerFireball
};
const struct SpriteTemplate gGigavoltHavocRingsSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gGigavoltHavocGeyserSpriteTemplate =
{
.tileTag = ANIM_TAG_VERTICAL_HEX,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_GeyserTarget
};
// shattered psyche
const struct SpriteTemplate gShatteredPsycheReflectHitSpriteTemplate =
{
.tileTag = ANIM_TAG_BLUE_LIGHT_WALL,
.paletteTag = ANIM_TAG_BLUE_LIGHT_WALL,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
const struct SpriteTemplate gShatteredPsychePinkChargeSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gShatteredPsycheRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// subzero slammer
const struct SpriteTemplate gSubzeroSlammerIceSpinSpriteTemplate =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineNormal_ObjBlend_8x16,
.anims = gAnims_IceCrystalLarge,
.images = NULL,
.affineAnims = gAffineAnims_IceCrystalHit,
.callback = AnimFireSpiralOutward
};
const struct SpriteTemplate gSubzeroSlammerExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_EXPLOSION_2,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gSubzeroSlammerIceSwirlSpriteTemplate =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineNormal_ObjBlend_8x16,
.anims = gAnims_IceCrystalLarge,
.images = NULL,
.affineAnims = gAffineAnims_IceCrystalHit,
.callback = AnimParticleInVortex
};
// devastating drake
static const union AffineAnimCmd sDevastatingDrakeStrikePlayer[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd sDevastatingDrakeStrikeOpponent[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sDevastatingDrakeStrikeAffineAnimTable[] = {
sDevastatingDrakeStrikePlayer,
sDevastatingDrakeStrikeOpponent,
};
static const union AffineAnimCmd sDevastatingDrakeFlyUpAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sDevastatingDrakeFlyUpAffineAnimTable[] = {
sDevastatingDrakeFlyUpAffineAnims,
sDevastatingDrakeFlyUpAffineAnims
};
static const union AffineAnimCmd sDevastatingDrakeRightAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sDevastatingDrakeRightAffineAnimTable[] = {
sDevastatingDrakeRightAffineAnims,
sDevastatingDrakeRightAffineAnims
};
static const union AffineAnimCmd sDevastatingDrakeLeftAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x40, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd* const sDevastatingDrakeLeftAffineAnimTable[] = {
sDevastatingDrakeLeftAffineAnims,
sDevastatingDrakeLeftAffineAnims,
};
const struct SpriteTemplate gDevastatingDrakePurpleEnergySpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gDevastatingDrakeShockwaveSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingShockWaveOrb
};
const struct SpriteTemplate gDevastatingDrakeDrakeUpSpriteTemplate =
{
.tileTag = ANIM_TAG_PURPLE_DRAKE,
.paletteTag = ANIM_TAG_PURPLE_DRAKE,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sDevastatingDrakeFlyUpAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gDevastatingDrakeRightSpriteTemplate =
{
.tileTag = ANIM_TAG_PURPLE_DRAKE,
.paletteTag = ANIM_TAG_PURPLE_DRAKE,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sDevastatingDrakeRightAffineAnimTable,
.callback = AnimAssistPawprint
};
const struct SpriteTemplate gDevastatingDrakeLeftSpriteTemplate =
{
.tileTag = ANIM_TAG_PURPLE_DRAKE,
.paletteTag = ANIM_TAG_PURPLE_DRAKE,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sDevastatingDrakeLeftAffineAnimTable,
.callback = AnimAssistPawprint
};
const struct SpriteTemplate gDevastatingDrakeStrikeSpriteTemplate =
{
.tileTag = ANIM_TAG_PURPLE_DRAKE,
.paletteTag = ANIM_TAG_PURPLE_DRAKE,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sDevastatingDrakeStrikeAffineAnimTable,
.callback = AnimFlyBallAttack
};
const struct SpriteTemplate gDevastatingDrakePurpleBlastSpriteTemplate =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_FIRE_PLUME,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBlastBurnTargetPlume
};
const struct SpriteTemplate gDevastatingDrakeHexSpriteTemplate =
{
.tileTag = ANIM_TAG_VERTICAL_HEX,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_Geyser
};
const struct SpriteTemplate gDevastatingDrakeExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_EXPLOSION,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gDevastatingDrakeExplosion2SpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_EXPLOSION_2,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// black hole eclipse
const struct SpriteTemplate gBlackHoleEclipseShockwaveSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_BLACK_BALL_2,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingShockWaveOrb
};
const struct SpriteTemplate gBlackHoleEclipseBlueRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseBlackRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseRedExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseWispSpriteTemplate =
{
.tileTag = ANIM_TAG_WISP_ORB,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gAnims_WillOWispOrb,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimWillOWispOrb
};
const struct SpriteTemplate gBlackHoleEclipseRedRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
static const union AffineAnimCmd gGrowingBackHoleTargetAffineCmds[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, -10, 0x88),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gGrowingBlackHoleTargetAffineAnimTable[] = {
gGrowingBackHoleTargetAffineCmds,
};
const struct SpriteTemplate gBlackHoleEclipseHoleSpriteTemplate =
{
.tileTag = ANIM_TAG_SHADOW_BALL,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGrowingBlackHoleTargetAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
static const union AffineAnimCmd gShrinkingBlackHoleAffineCmds[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(-0x10, -0x10, 0xf6, 8),
AFFINEANIMCMD_END_ALT(1),
};
static const union AffineAnimCmd *const gShrinkingBlackHoleAffineAnimTable[] = {
gShrinkingBlackHoleAffineCmds,
};
const struct SpriteTemplate gBlackHoleEclipseHoleShrinkSpriteTemplate =
{
.tileTag = ANIM_TAG_SHADOW_BALL,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gShrinkingBlackHoleAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
static const union AffineAnimCmd gGrowingBackHoleAffineCmds[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, -10, 0x48),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gGrowingBlackHoleAffineAnimTable[] = {
gGrowingBackHoleAffineCmds,
};
const struct SpriteTemplate gBlackHoleEclipseHoleUserSpriteTemplate =
{
.tileTag = ANIM_TAG_SHADOW_BALL,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGrowingBlackHoleAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gTargetTwinkleSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_SpinningSparkle,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_TwinkleOnBattler
};
// twinkle tackle
static const union AffineAnimCmd sTwinkleTackleStarPlayerAffineAnims[] = {
AFFINEANIMCMD_FRAME(8, 8, 0, 0),
AFFINEANIMCMD_FRAME(0x10, 0x10, 0x0, 0x1e),
AFFINEANIMCMD_END_ALT(1),
};
static const union AffineAnimCmd sTwinkleTackleStarOpponentAffineAnims[] = {
AFFINEANIMCMD_FRAME(8, 8, 0, 0),
AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0xf),
AFFINEANIMCMD_END_ALT(1),
};
static const union AffineAnimCmd *const sTwinkleTackleStarAffineAnimTable[] = {
sTwinkleTackleStarPlayerAffineAnims,
sTwinkleTackleStarOpponentAffineAnims
};
const struct SpriteTemplate gTwinkleTacklePinkStarSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_2,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gGrantingStarsAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimGrantingStars
};
const struct SpriteTemplate gTwinkleTacklePinkRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_PINK_PETAL,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gTwinkleTackleStarGrowSpriteTemplate =
{
.tileTag = ANIM_TAG_YELLOW_STAR,
.paletteTag = ANIM_TAG_YELLOW_STAR,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sTwinkleTackleStarAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gTwinkleTackleTwinkleSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_SpinningSparkle,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_TwinkleOnBattler
};
const struct SpriteTemplate gTwinkleTackleDigStarSpriteTemplate =
{
.tileTag = ANIM_TAG_YELLOW_STAR,
.paletteTag = ANIM_TAG_YELLOW_STAR,
.oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDirtPlumeParticle
};
const struct SpriteTemplate gTwinkleTackleYellowImpactSpriteTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_YELLOW_STAR,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
const struct SpriteTemplate gTwinkleTackleImpactStarsSpriteTemplate =
{
.tileTag = ANIM_TAG_PAIN_SPLIT,
.paletteTag = ANIM_TAG_YELLOW_STAR,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDizzyPunchDuck
};
// catastrokpika
const struct SpriteTemplate gCatastrokpikaSuperpowerSpriteTemplate =
{
.tileTag = ANIM_TAG_METEOR,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &sGrowingSuperpowerOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
.callback = SpriteCB_GrowingSuperpower
};
// 10e6 volt thunderbolt
const struct SpriteTemplate g10MillionVoltBoltYellowFlySpriteTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp
};
const struct SpriteTemplate g10MillionVoltBoltShockwaveSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingShockWaveOrbOnTarget,
};
const struct SpriteTemplate g10MillionVoltBoltRedBeamSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate g10MillionVoltBoltBlueBeamSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate g10MillionVoltBoltPinkBeamSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_BERRY_EATEN,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate g10MillionVoltBoltYellowBeamSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ELECTRIC_ORBS,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate g10MillionVoltBoltGreenBeamSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate g10MillionVoltBoltPurpleBeamSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
// stoked sparksurfer
const struct SpriteTemplate gStokedSparksurferFlySpriteTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_SPARK_2,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp
};
// extreme evoboost
const struct SpriteTemplate gExtremeEvoboostRedChargeUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gExtremeEvoboostPinkChargeUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_BERRY_EATEN,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gExtremeEvoboostIceChargeUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gExtremeEvoboostBlackChargeUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_WISP_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gExtremeEvoboostBlueChargeUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gExtremeEvoboostPurpleChargeUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gExtremeEvoboostYellowChargeUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gExtremeEvoboostGreenChargeUpSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gExtremeEvoboostRedChargeCircleSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimExtremeEvoboostCircle
};
const struct SpriteTemplate gExtremeEvoboostPinkChargeCircleSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_BERRY_EATEN,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimExtremeEvoboostCircle
};
const struct SpriteTemplate gExtremeEvoboostIceChargeCircleSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimExtremeEvoboostCircle
};
const struct SpriteTemplate gExtremeEvoboostBlackChargeCircleSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_WISP_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimExtremeEvoboostCircle
};
const struct SpriteTemplate gExtremeEvoboostBlueChargeCircleSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimExtremeEvoboostCircle
};
const struct SpriteTemplate gExtremeEvoboostPurpleChargeCircleSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimExtremeEvoboostCircle
};
const struct SpriteTemplate gExtremeEvoboostYellowChargeCircleSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimExtremeEvoboostCircle
};
const struct SpriteTemplate gExtremeEvoboostGreenChargeCircleSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimExtremeEvoboostCircle
};
const struct SpriteTemplate gExtremeEvoboostRedStockpileSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
const struct SpriteTemplate gExtremeEvoboostPinkStockpileSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_BERRY_EATEN,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
const struct SpriteTemplate gExtremeEvoboostIceStockpileSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
const struct SpriteTemplate gExtremeEvoboostBlackStockpileSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_WISP_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
const struct SpriteTemplate gExtremeEvoboostBlueStockpileSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
const struct SpriteTemplate gExtremeEvoboostPurpleStockpileSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
const struct SpriteTemplate gExtremeEvoboostYellowStockpileSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
const struct SpriteTemplate gExtremeEvoboostGreenStockpileSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb
};
// pulverizing pancake
const struct SpriteTemplate gPulverizingPancakeRedDetectSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_SpinningSparkle,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpinningSparkle
};
const struct SpriteTemplate gPulverizingPancakeExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_ELECTRIC_ORBS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gPulverizingPancakeYellowRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_ELECTRIC_ORBS,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// genesis supernova
const struct SpriteTemplate gGenesisSupernovaOrbRiseSpriteTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_JAB,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gAnims_PoisonProjectile,
.images = NULL,
.affineAnims = gAffineAnims_Bubble,
.callback = AnimAssistPawprint
};
const struct SpriteTemplate gGenesisSupernovaReversalSpriteTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_JAB,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimReversalOrb
};
const struct SpriteTemplate gGenesisSupernovaSpinUpSpriteTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_JAB,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gGenesisSupernovaChargeSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_POISON_JAB,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gGenesisSupernovaSuperpowerSpriteTemplate =
{
.tileTag = ANIM_TAG_METEOR,
.paletteTag = ANIM_TAG_WISP_ORB,
.oam = &sGrowingSuperpowerOAM,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_GrowingSuperpower,
.callback = SpriteCB_GrowingSuperpower
};
const struct SpriteTemplate gGenesisSupernovaBubbleSpriteTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_JAB,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gAnims_PoisonProjectile,
.images = NULL,
.affineAnims = gAffineAnims_Bubble,
.callback = AnimBubbleEffect
};
const struct SpriteTemplate gGenesisSupernovaExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_WISP_ORB,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// sinister arrow raid
static const union AffineAnimCmd sArrowRaidFlyStrikePlayerAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd sArrowRaidFlyStrikeOpponentAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidFlyStrikeAffineAnimTable[] = {
sArrowRaidFlyStrikePlayerAffineAnims,
sArrowRaidFlyStrikeOpponentAffineAnims
};
static const union AffineAnimCmd sArrowRaidFlyRightAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xc2, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidFlyRightAffineAnimTable[] = {
sArrowRaidFlyRightAffineAnims,
sArrowRaidFlyRightAffineAnims
};
static const union AffineAnimCmd sArrowRaidFlyLeftAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x40, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidFlyLeftAffineAnimTable[] = {
sArrowRaidFlyLeftAffineAnims,
sArrowRaidFlyLeftAffineAnims
};
const struct SpriteTemplate gArrowRaidExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gArrowRaidFlyUpSpriteTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp
};
const struct SpriteTemplate gArrowRaidFlyRightSpriteTemplate =
{
.tileTag = ANIM_TAG_BIRD,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidFlyRightAffineAnimTable,
.callback = AnimAssistPawprint
};
const struct SpriteTemplate gArrowRaidFlyLeftSpriteTemplate =
{
.tileTag = ANIM_TAG_BIRD,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidFlyLeftAffineAnimTable,
.callback = AnimAssistPawprint
};
const struct SpriteTemplate gArrowRaidFlyStrikeSpriteTemplate =
{
.tileTag = ANIM_TAG_BIRD,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidFlyStrikeAffineAnimTable,
.callback = AnimFlyBallAttack
};
static const union AffineAnimCmd sArrowRaidArrowUpAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xa0, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidArrowUpAffineAnimTable[] = {
sArrowRaidArrowUpAffineAnims,
};
const struct SpriteTemplate gArrowRaidArrowUpSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIRIT_ARROW,
.paletteTag = ANIM_TAG_SPIRIT_ARROW,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidArrowUpAffineAnimTable,
.callback = AnimParticleInVortex
};
static const union AffineAnimCmd sArrowRaidArrowRightUpAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x75, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidArrowRightUpAffineAnimTable[] = {
sArrowRaidArrowRightUpAffineAnims,
};
const struct SpriteTemplate gArrowRaidRightUpSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIRIT_ARROW,
.paletteTag = ANIM_TAG_SPIRIT_ARROW,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidArrowRightUpAffineAnimTable,
.callback = AnimAssistPawprint
};
static const union AffineAnimCmd sArrowRaidRightDownAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x60, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidRightDownAffineAnimTable[] = {
sArrowRaidRightDownAffineAnims,
};
const struct SpriteTemplate gArrowRaidRightDownSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIRIT_ARROW,
.paletteTag = ANIM_TAG_SPIRIT_ARROW,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidRightDownAffineAnimTable,
.callback = AnimAssistPawprint
};
static const union AffineAnimCmd sArrowRaidArrowLeftUpAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xe0, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidLeftUpAffineAnimTable[] = {
sArrowRaidArrowLeftUpAffineAnims,
};
const struct SpriteTemplate gArrowRaidLeftUpSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIRIT_ARROW,
.paletteTag = ANIM_TAG_SPIRIT_ARROW,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidLeftUpAffineAnimTable,
.callback = AnimAssistPawprint
};
static const union AffineAnimCmd sArrowRaidFaceUpLeftAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xe0, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidFaceUpLeftAffineAnimTable[] = {
sArrowRaidFaceUpLeftAffineAnims,
};
const struct SpriteTemplate gArrowRaidFaceUpLeftSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIRIT_ARROW,
.paletteTag = ANIM_TAG_SPIRIT_ARROW,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidFaceUpLeftAffineAnimTable,
.callback = AnimAssistPawprint
};
static const union AffineAnimCmd sArrowRaidArrowFaceRightAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x60, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidArrowFaceRightAffineAnimTable[] = {
sArrowRaidArrowFaceRightAffineAnims
};
const struct SpriteTemplate gArrowRaidRightSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIRIT_ARROW,
.paletteTag = ANIM_TAG_SPIRIT_ARROW,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidArrowFaceRightAffineAnimTable,
.callback = AnimAssistPawprint
};
static const union AffineAnimCmd sArrowRaidLeftDownAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xd0, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidLeftDownAffineAnimTable[] = {
sArrowRaidLeftDownAffineAnims
};
const struct SpriteTemplate gArrowRaidLeftDownSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIRIT_ARROW,
.paletteTag = ANIM_TAG_SPIRIT_ARROW,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidLeftDownAffineAnimTable,
.callback = AnimAssistPawprint
};
static const union AffineAnimCmd sArrowRaidOnslaughtAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x30, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sArrowRaidOnslaughtAffineAnimTable[] = {
sArrowRaidOnslaughtAffineAnims
};
const struct SpriteTemplate gArrowRaidArrowOnslaughtSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIRIT_ARROW,
.paletteTag = ANIM_TAG_SPIRIT_ARROW,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sArrowRaidOnslaughtAffineAnimTable,
.callback = AnimAssistPawprint
};
// malicious moonsault
const struct SpriteTemplate gMaliciousMoonsaultRedFlySpriteTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp
};
const struct SpriteTemplate gMaliciousMoonsaultRedBounceSpriteTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_BounceBallLand,
.callback = AnimBounceBallLand
};
const struct SpriteTemplate gMaliciousMoonsaultRedImpactSpriteTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_HitSplat,
.callback = AnimHitSplatBasic
};
const struct SpriteTemplate gMaliciousMoonsaultFireblastSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FireBlastCross,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFireCross
};
const struct SpriteTemplate gMaliciousMoonsaultExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_EXPLOSION_2,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// oceanic operetta
const struct SpriteTemplate gOceanOperaSpotlightSpriteTemplate =
{
.tileTag = ANIM_TAG_SPOTLIGHT,
.paletteTag = ANIM_TAG_SPOTLIGHT,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gSpotlightAffineAnimTable,
.callback = AnimOceanicOperettaSpotlight,
};
const struct SpriteTemplate gOceanOperaBlueFlareSpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gOceanOperaBlueChargeSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gOceanOperaBlueRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gOceanOperaMovingOrbsSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimThrowMistBall
};
const struct SpriteTemplate gOceanOperaBlueOrbsSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBite
};
const struct SpriteTemplate gOceanOperaExpandingRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gOceanOperaExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gOceanOperaSparkleSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_2,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gGrantingStarsAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimGrantingStars
};
// splintered stormshards
const struct SpriteTemplate gSplinteredShardsFlySpriteTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp
};
const struct SpriteTemplate gSplinteredShardsExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gSplinteredShardsRisingSpearSpriteTemplate =
{
.tileTag = ANIM_TAG_ICICLE_SPEAR,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimAssistPawprint
};
static const union AffineAnimCmd sSplinteredShardsOpponentSteepAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xca, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sSplinteredShardsOpponentSteepAffineAnimTable[] = {
sSplinteredShardsOpponentSteepAffineAnims,
};
const struct SpriteTemplate gSplinteredShardsSplinterOpponentSteepSpriteTemplate =
{
.tileTag = ANIM_TAG_ICICLE_SPEAR,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSplinteredShardsOpponentSteepAffineAnimTable,
.callback = AnimJumpKick
};
static const union AffineAnimCmd sSplinteredShardsOpponentShallowAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0xb9, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sSplinteredShardsOpponentShallowAffineAnimTable[] = {
sSplinteredShardsOpponentShallowAffineAnims
};
const struct SpriteTemplate gSplinteredShardsSplinterOpponentShallowSpriteTemplate =
{
.tileTag = ANIM_TAG_ICICLE_SPEAR,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSplinteredShardsOpponentShallowAffineAnimTable,
.callback = AnimJumpKick
};
static const union AffineAnimCmd sSplinteredShardsPlayerSteepAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x60, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sSplinteredShardsPlayerSteepAffineAnimTable[] = {
sSplinteredShardsPlayerSteepAffineAnims
};
const struct SpriteTemplate gSplinteredShardsSplinterPlayerSteepSpriteTemplate =
{
.tileTag = ANIM_TAG_ICICLE_SPEAR,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSplinteredShardsPlayerSteepAffineAnimTable,
.callback = AnimJumpKick
};
static const union AffineAnimCmd sSplinteredShardsPlayerShallowAffineAnims[] = {
AFFINEANIMCMD_FRAME(0, 0, 0x50, 1),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sSplinteredShardsPlayerShallowAffineAnimTable[] = {
sSplinteredShardsPlayerShallowAffineAnims
};
const struct SpriteTemplate gSplinteredShardsSplinterPlayerShallowSpriteTemplate =
{
.tileTag = ANIM_TAG_ICICLE_SPEAR,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSplinteredShardsPlayerShallowAffineAnimTable,
.callback = AnimJumpKick
};
// lets snuggle forever
const struct SpriteTemplate gSnuggleForeverEyesSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sAnims_SpinningSparkle,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpinningSparkle
};
const struct SpriteTemplate gSnuggleForeverStarSpriteTemplate =
{
.tileTag = ANIM_TAG_PAIN_SPLIT,
.paletteTag = ANIM_TAG_DUCK,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDizzyPunchDuck
};
const struct SpriteTemplate gSnuggleForeverHeartSpriteTemplate =
{
.tileTag = ANIM_TAG_MAGENTA_HEART,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMagentaHeart
};
// clangorous soulblaze
const struct SpriteTemplate gClangoorousSoulblazeWhiteFlySpriteTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp
};
const struct SpriteTemplate gClangoorousSoulblazePurpleSwirlSpriteTemplate =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gAnims_WaterMudOrb,
.images = NULL,
.affineAnims = gAffineAnims_Whirlpool,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gClangoorousSoulblazePurpleChargeSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gClangoorousSoulblazePulseSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation
};
// guardian of alola
const struct SpriteTemplate gGuardianOfAlolaFistSpriteTemplate =
{
.tileTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
.paletteTag = ANIM_TAG_HORSESHOE_SIDE_FIST,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimStompFoot
};
const struct SpriteTemplate gGuardianOfAlolaDirtGeyserSpriteTemplate =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMudSportDirt
};
// seering sunraze smash
static const union AffineAnimCmd sSearingSunrazeSmashWormholeGrowingAffineAnims[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, 0xf8, 0x88),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sSearingSunrazeSmashWormholeGrowingAffineAnimTable[] = {
sSearingSunrazeSmashWormholeGrowingAffineAnims
};
const struct SpriteTemplate gSearingSunrazeSmashGrowWormholeSpriteTemplate =
{
.tileTag = ANIM_TAG_SHADOW_BALL,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSearingSunrazeSmashWormholeGrowingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gSearingSunrazeSmashBlueRingInwardsSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gSearingSunrazeSmashCrossImpactSpriteTemplate =
{
.tileTag = ANIM_TAG_CROSS_IMPACT,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCrossImpact
};
const struct SpriteTemplate gSearingSunrazeSmashWhiteCutSpriteTemplate =
{
.tileTag = ANIM_TAG_CUT,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gCuttingSliceAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCuttingSlice
};
const struct SpriteTemplate gSearingSunrazeSmashInfernoOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingChargeOrb
};
const struct SpriteTemplate gSearingSunrazeSmashShockwaveSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingShockWaveOrbOnTarget
};
const struct SpriteTemplate gSearingSunrazeSmashRedFlySpriteTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp
};
// menacing moonraze maelstrom
const struct SpriteTemplate gMoonrazeMaelstromBlueBuffSpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gMoonrazeMaelstromBlackBuffSpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gMoonrazeMaelstromPurpleBuffSpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gMoonrazeMaelstromBlackSparklesSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_2,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gGrantingStarsAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimGrantingStars
};
const struct SpriteTemplate gMoonrazeMaelstromBlueRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gMoonrazeMaelstromWhiteRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gMoonrazeMaelstromSuperpowerSpriteTemplate =
{
.tileTag = ANIM_TAG_METEOR,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSuperpowerFireball
};
const struct SpriteTemplate gMoonrazeMaelstromBlackOrbsSpriteTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimParticleInVortex
};
const struct SpriteTemplate gMoonrazeMaelstromBeamSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSolarBeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb
};
const struct SpriteTemplate gMoonrazeMaelstromExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gMoonrazeMaelstromShockwaveSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingShockWaveOrbOnTarget
};
static const union AffineAnimCmd sMoonrazeMaelstromWormholeAffineAnims[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, 0xf6, 0x88),
AFFINEANIMCMD_END
};
static const union AffineAnimCmd *const sMoonrazeMaelstromWormholeAffineAnimTable[] = {
sMoonrazeMaelstromWormholeAffineAnims
};
const struct SpriteTemplate gMoonrazeMaelstromWormholeSpriteTemplate =
{
.tileTag = ANIM_TAG_SHADOW_BALL,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sMoonrazeMaelstromWormholeAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// light that burns the sky
const struct SpriteTemplate gLightThatBurnsTheSkyGreenSparkSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_LEAF,
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlashingSpark,
.callback = AnimSparkElectricityFlashing
};
const struct SpriteTemplate gLightThatBurnsTheSkyBlastBurnSpriteTemplate =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimBlastBurnTargetPlume
};
static const struct OamData sGeyserOam =
{
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.shape = SPRITE_SHAPE(32x32),
.size = SPRITE_SIZE(32x32),
.priority = 1, //Above sprites
};
const struct SpriteTemplate gLightThatBurnsTheSkyExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_EXPLOSION_2,
.oam = &sGeyserOam,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
// soul stealing 7star strike
const struct SpriteTemplate gSoulStealBlackFlySpriteTemplate =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_FlyBallUp,
.callback = AnimFlyBallUp
};
const struct SpriteTemplate gSoulStealIceBuffSpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimEndureEnergy
};
const struct SpriteTemplate gSoulStealBlueFistSpriteTemplate =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_HandsAndFeet,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimJumpKick
};
const struct SpriteTemplate gSoulStealBlueStarSpriteTemplate =
{
.tileTag = ANIM_TAG_PAIN_SPLIT,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_Bite,
.callback = AnimSoulStealingStar
};
const struct SpriteTemplate gSoulStealBlueParalyzeSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimElectricity
};
const struct SpriteTemplate gSoulStealBlastburnSpriteTemplate =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_WISP_FIRE,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FirePlume,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFirePlume
};
const struct SpriteTemplate gSoulStealExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_WISP_FIRE,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gSoulStealZStarSpriteTemplate =
{
.tileTag = ANIM_TAG_SNORE_Z,
.paletteTag = ANIM_TAG_SNORE_Z,
.oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCrossImpact
};
// functions
//general
void AnimTask_IsTargetPartner(u8 taskId)
{
if (gBattleAnimTarget == BATTLE_PARTNER(gBattleAnimAttacker))
gBattleAnimArgs[0] = 1;
else
gBattleAnimArgs[0] = 0;
DestroyAnimVisualTask(taskId);
}
void AnimTask_AllBanksInvisible(u8 taskId)
{
u32 i;
for (i = 0; i < gBattlersCount; i++)
{
u8 spriteId = gBattlerSpriteIds[i];
if (spriteId != 0xFF)
gSprites[spriteId].invisible = TRUE;
}
DestroyAnimVisualTask(taskId);
}
void AnimTask_AllBanksVisible(u8 taskId)
{
u32 i;
for (i = 0; i < gBattlersCount; i++)
{
u8 spriteId = gBattlerSpriteIds[i];
if (spriteId != 0xFF)
gSprites[spriteId].invisible = FALSE;
}
DestroyAnimVisualTask(taskId);
}
void AnimTask_AllBanksInvisibleExceptAttackerAndTarget(u8 taskId)
{
u32 i;
for (i = 0; i < gBattlersCount; ++i)
{
u8 spriteId = gBattlerSpriteIds[i];
if (spriteId == GetAnimBattlerSpriteId(ANIM_ATTACKER) || spriteId == GetAnimBattlerSpriteId(ANIM_TARGET))
continue;
if (spriteId != 0xFF || !IsBattlerSpriteVisible(i)) //Pokemon that are already hidden
gSprites[spriteId].invisible = TRUE;
}
DestroyAnimVisualTask(taskId);
}
static u8 LoadBattleAnimTarget(u8 arg)
{
u8 battler;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
switch (gBattleAnimArgs[arg])
{
case 0:
battler = gBattleAnimAttacker;
break;
default:
battler = gBattleAnimTarget;
break;
case 2:
battler = BATTLE_PARTNER(gBattleAnimAttacker);
break;
case 3:
battler = BATTLE_PARTNER(gBattleAnimTarget);
break;
}
}
else
{
if (gBattleAnimArgs[arg] == 0)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
}
return battler;
}
static u8 GetProperCentredCoord(u8 battler, u8 coordType)
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
return (GetBattlerSpriteCoord2(battler, coordType) + GetBattlerSpriteCoord2(BATTLE_PARTNER(battler), coordType)) / 2;
return GetBattlerSpriteCoord(battler, coordType);
}
static void InitSpritePosToGivenTarget(struct Sprite *sprite, u8 target)
{
sprite->x = GetBattlerSpriteCoord2(target, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord2(target, BATTLER_COORD_Y);
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->y2 = gBattleAnimArgs[1];
}
static void InitSpritePosToAnimTargetsCentre(struct Sprite *sprite, bool8 respectMonPicOffsets)
{
if (!respectMonPicOffsets)
{
sprite->x = (GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X)
+ GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X)) / 2;
sprite->y = (GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y)
+ GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y)) / 2;
}
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->y += gBattleAnimArgs[1];
}
static void InitSpritePosToAnimAttackersCentre(struct Sprite *sprite, bool8 respectMonPicOffsets)
{
if (!respectMonPicOffsets)
{
sprite->x = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X)
+ GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X)) / 2;
sprite->y = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y)
+ GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y)) / 2;
}
else
{
sprite->x = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2)
+ GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_X_2)) / 2;
sprite->y = (GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET)
+ GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimAttacker), BATTLER_COORD_Y_PIC_OFFSET)) / 2;
}
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->y += gBattleAnimArgs[1];
}
//sprite callbacks
static void AnimSoulStealingStar(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[4];
sprite->data[2] = gBattleAnimArgs[5];
sprite->callback = AnimSoulStealingStar_Step1;
}
static void AnimSoulStealingStar_Step1(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[0];
sprite->data[5] += sprite->data[1];
sprite->x2 = sprite->data[4] >> 8;
sprite->y2 = sprite->data[5] >> 8;
if (++sprite->data[3] == sprite->data[2])
sprite->callback = AnimSoulStealingStar_Step2;
}
static void AnimSoulStealingStar_Step2(struct Sprite *sprite)
{
sprite->data[4] -= sprite->data[0];
sprite->data[5] -= sprite->data[1];
sprite->x2 = sprite->data[4] >> 8;
sprite->y2 = sprite->data[5] >> 8;
if (--sprite->data[3] == 0)
DestroySpriteAndMatrix(sprite);
}
//Creates The Extreme Evoboost Circles
static void AnimExtremeEvoboostCircle(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->y += 20;
sprite->data[1] = 191;
sprite->callback = AnimExtremeEvoboostCircle_Step;
sprite->callback(sprite);
}
static void AnimExtremeEvoboostCircle_Step(struct Sprite *sprite)
{
sprite->x2 = Sin(sprite->data[1], 32);
sprite->y2 = Cos(sprite->data[1], 8);
sprite->data[1] += 5;
sprite->data[1] &= 0xFF;
if (++sprite->data[0] == 71)
DestroyAnimSprite(sprite);
}
static void AnimGrowingShockWaveOrbOnTarget(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
StartSpriteAffineAnim(sprite, 2);
sprite->data[0]++;
break;
case 1:
if (sprite->affineAnimEnded)
DestroySpriteAndMatrix(sprite);
break;
}
}
static void AnimEllipticalGustAttacker(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->y += 20;
sprite->data[1] = 191;
sprite->callback = AnimEllipticalGustAttacker_Step;
sprite->callback(sprite);
}
static void AnimEllipticalGustAttacker_Step(struct Sprite *sprite)
{
sprite->x2 = Sin(sprite->data[1], 32);
sprite->y2 = Cos(sprite->data[1], 8);
sprite->data[1] += 5;
sprite->data[1] &= 0xFF;
if (++sprite->data[0] == 71)
DestroyAnimSprite(sprite);
}
static void SetSpriteCoordsToAnimTargetCoords(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
static void AnimBlastBurnTargetPlume(struct Sprite *sprite)
{
SetSpriteCoordsToAnimTargetCoords(sprite);
if (GetBattlerSide(gBattleAnimTarget))
{
sprite->x -= gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
sprite->data[2] = -gBattleAnimArgs[4];
}
else
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
sprite->data[2] = gBattleAnimArgs[4];
}
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[4] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[5];
sprite->callback = AnimBlastBurnTargetPlume_Step1;
}
static void AnimBlastBurnTargetPlume_Step1(struct Sprite *sprite)
{
if (++sprite->data[0] < sprite->data[4])
{
sprite->x2 += sprite->data[2];
sprite->y2 += sprite->data[3];
}
if (sprite->data[0] == sprite->data[1])
DestroySpriteAndMatrix(sprite);
}
static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite)
{
bool8 var;
if (!sprite->data[0])
{
if (!gBattleAnimArgs[3])
var = TRUE;
else
var = FALSE;
if (gBattleAnimArgs[2] == 0) //Attacker
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
InitSpritePosToAnimAttackersCentre(sprite, var);
else
InitSpritePosToAnimAttacker(sprite, var);
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
InitSpritePosToAnimTargetsCentre(sprite, var);
else
InitSpritePosToAnimTarget(sprite, var);
}
sprite->data[0]++;
}
else if (sprite->animEnded || sprite->affineAnimEnded)
{
DestroySpriteAndMatrix(sprite);
}
}
static void SpriteCB_SpriteOnMonForDuration(struct Sprite *sprite)
{
u8 target = LoadBattleAnimTarget(0);
if (!IsBattlerSpriteVisible(target))
{
DestroyAnimSprite(sprite);
}
else
{
sprite->x = GetBattlerSpriteCoord(target, 0);
sprite->y = GetBattlerSpriteCoord(target, 1);
sprite->x += gBattleAnimArgs[1];
sprite->y += gBattleAnimArgs[2];
sprite->data[0] = 0;
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[2] = gBattleAnimArgs[4];
sprite->data[3] = 0;
sprite->callback = AnimBrickBreakWall_Step;
}
}
static void SpriteCB_ToxicThreadWrap(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->x -= gBattleAnimArgs[0];
else
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
sprite->y += 8;
sprite->callback = AnimStringWrap_Step;
}
static void SpriteCB_GrowingSuperpower(struct Sprite *sprite)
{
u8 battler;
if (gBattleAnimArgs[0] == 0)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
battler = gBattleAnimTarget;
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
}
else
{
battler = gBattleAnimAttacker;
sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
}
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
StartSpriteAffineAnim(sprite, 1);
sprite->data[0] = 16;
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(battler, 2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(battler, 3);
InitAnimLinearTranslation(sprite);
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = AnimTranslateLinear_WithFollowup;
}
static void SpriteCB_CentredSpiderWeb(struct Sprite *sprite)
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
InitSpritePosToAnimTargetsCentre(sprite, FALSE);
else
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->callback = AnimSpiderWeb;
}
static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
InitSpritePosToAnimAttackersCentre(sprite, FALSE);
else
InitSpritePosToAnimAttacker(sprite, FALSE);
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
InitSpritePosToAnimTargetsCentre(sprite, FALSE);
else
InitSpritePosToAnimTarget(sprite, FALSE);
}
sprite->y += 20;
sprite->callback = AnimFlashingHitSplat_Step;
}
static void SpriteCB_CoreEnforcerBeam(struct Sprite *sprite)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
AnimSolarBeamBigOrb(sprite);
}
else
{
InitSpritePosToAnimAttacker(sprite, TRUE);
StartSpriteAnim(sprite, gBattleAnimArgs[3]);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2)
+ GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X_2)) / 2;
sprite->data[4] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET)
+ GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y_PIC_OFFSET)) / 2;
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
}
static void SpriteCB_TranslateAnimSpriteToTargetMonLocationDoubles(struct Sprite *sprite)
{
bool8 v1;
u8 target;
u8 coordType;
if (!(gBattleAnimArgs[5] & 0xff00))
v1 = TRUE;
else
v1 = FALSE;
if (!(gBattleAnimArgs[5] & 0xff))
coordType = BATTLER_COORD_Y_PIC_OFFSET;
else
coordType = BATTLER_COORD_Y;
InitSpritePosToAnimAttacker(sprite, v1);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
target = LoadBattleAnimTarget(6);
if (!IsBattlerSpriteVisible(target))
DestroyAnimSprite(sprite);
else
{
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(target, coordType) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
}
//Causes an object to fall from the sky.
//arg 0: initial x pixel offset
//arg 1: initial y pixel offset
//arg 2: speed
//arg 3: anim battler
static void SpriteCB_FallingObject(struct Sprite *sprite)
{
u8 target = LoadBattleAnimTarget(3);
if (!IsBattlerSpriteVisible(target))
DestroyAnimSprite(sprite);
else
{
sprite->x = GetBattlerSpriteCoord2(target, BATTLER_COORD_X);
sprite->y = GetBattlerSpriteCoord2(target, BATTLER_COORD_Y);
sprite->x2 = gBattleAnimArgs[0];
sprite->y = gBattleAnimArgs[1];
sprite->y2 = -gBattleAnimArgs[1];
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
{
sprite->y += 45;
sprite->y2 -= 45;
}
sprite->data[3] = gBattleAnimArgs[2]; //Speed
sprite->callback = SpriteCB_FallingObjectStep;
}
}
static void SpriteCB_FallingObjectStep(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
sprite->y2 += sprite->data[3];
if (sprite->y2 >= 0)
{
sprite->y2 = 0;
sprite->data[0]++;
}
break;
case 1:
if (++sprite->data[1] > 0)
{
sprite->data[1] = 0;
sprite->invisible ^= 1;
if (++sprite->data[2] == 10)
DestroySpriteAndMatrix(sprite);
}
break;
}
}
static void SpriteCB_SunsteelStrikeRings(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->x = 272;
sprite->y = -32;
}
else
{
sprite->x = -32;
sprite->y = -32;
}
sprite->data[0] = gBattleAnimArgs[0];
sprite->data[1] = sprite->x;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[3] = sprite->y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
InitAnimLinearTranslation(sprite);
sprite->callback = AnimFlyBallAttack_Step;
}
//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
static void SpriteCB_MoongeistCharge(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y
sprite->data[5] = gBattleAnimArgs[5];
InitAnimArcTranslation(sprite);
sprite->callback = AnimMissileArc_Step;
}
//Spins a sprite towards the target, pausing in the middle.
//Used in Mind Blown.
//arg 0: duration step 1 (attacker -> center)
//arg 1: duration step 2 (spin center)
//arg 2: duration step 3 (center -> target)
static void SpriteCB_MindBlownBall(struct Sprite *sprite)
{
s16 oldPosX = sprite->x;
s16 oldPosY = sprite->y;
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->data[0] = 0;
sprite->data[1] = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[1];
sprite->data[3] = gBattleAnimArgs[2];
sprite->data[4] = sprite->x << 4;
sprite->data[5] = sprite->y << 4;
sprite->data[6] = ((oldPosX - sprite->x) << 4) / (gBattleAnimArgs[0] << 1);
sprite->data[7] = ((oldPosY - sprite->y) << 4) / (gBattleAnimArgs[0] << 1);
sprite->callback = AnimMindBlownBallStep;
}
static void AnimMindBlownBallStep(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
sprite->data[4] += sprite->data[6];
sprite->data[5] += sprite->data[7];
sprite->x = sprite->data[4] >> 4;
sprite->y = sprite->data[5] >> 4;
sprite->data[1] -= 1;
if (sprite->data[1] > 0)
break;
sprite->data[0] += 1;
break;
case 1:
sprite->data[2] -= 1;
if (sprite->data[2] > 0)
break;
sprite->data[1] = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[2] = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[4] = sprite->x << 4;
sprite->data[5] = sprite->y << 4;
sprite->data[6] = ((sprite->data[1] - sprite->x) << 4) / sprite->data[3];
sprite->data[7] = ((sprite->data[2] - sprite->y) << 4) / sprite->data[3];
sprite->data[0] += 1;
break;
case 2:
sprite->data[4] += sprite->data[6];
sprite->data[5] += sprite->data[7];
sprite->x = sprite->data[4] >> 4;
sprite->y = sprite->data[5] >> 4;
sprite->data[3] -= 1;
if (sprite->data[3] > 0)
break;
sprite->x = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->y = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] += 1;
break;
case 3:
DestroySpriteAndMatrix(sprite);
break;
}
}
static void SpriteCB_MindBlownExplosion(struct Sprite *sprite)
{
u8 a;
u8 b;
u16 x;
u16 y;
if (gBattleAnimArgs[4] == 0)
{
DestroyAnimSprite(sprite);
}
else
{
a = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
b = GetProperCentredCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = gBattleAnimArgs[4];
if (gBattleAnimArgs[1] == 0)
{
sprite->x = gBattleAnimArgs[2] + a;
sprite->y = gBattleAnimArgs[3] + b;
sprite->data[5] = a;
sprite->data[6] = b;
}
else
{
sprite->x = a;
sprite->y = b;
sprite->data[5] = gBattleAnimArgs[2] + a;
sprite->data[6] = gBattleAnimArgs[3] + b;
}
x = sprite->x;
sprite->data[1] = x * 16;
y = sprite->y;
sprite->data[2] = y * 16;
sprite->data[3] = (sprite->data[5] - sprite->x) * 16 / gBattleAnimArgs[4];
sprite->data[4] = (sprite->data[6] - sprite->y) * 16 / gBattleAnimArgs[4];
sprite->callback = AnimNeedleArmSpike_Step;
}
}
void SpriteCB_RandomCentredHits(struct Sprite *sprite)
{
if (gBattleAnimArgs[1] == -1)
gBattleAnimArgs[1] = Random() & 3;
StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]);
if (gBattleAnimArgs[0] == 0)
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
InitSpritePosToAnimAttackersCentre(sprite, FALSE);
else
InitSpritePosToAnimAttacker(sprite, FALSE);
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
InitSpritePosToAnimTargetsCentre(sprite, FALSE);
else
InitSpritePosToAnimTarget(sprite, FALSE);
}
sprite->x2 += (Random() % 48) - 24;
sprite->y2 += (Random() % 24) - 12;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
//Creates a jaw that bites down and locks on the target.
//args: Idk same as bite and crunch
//arg 6: Time to hold bite for.
static void SpriteCB_LockingJaw(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[4];
sprite->data[2] = gBattleAnimArgs[5];
sprite->data[6] = -gBattleAnimArgs[6];
sprite->callback = SpriteCB_LockingJawStep;
}
static void SpriteCB_LockingJawStep(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[0];
sprite->data[5] += sprite->data[1];
sprite->x2 = sprite->data[4] >> 8;
sprite->y2 = sprite->data[5] >> 8;
if (++sprite->data[3] == sprite->data[2])
sprite->callback = SpriteCB_LockingJawFinish;
}
static void SpriteCB_LockingJawFinish(struct Sprite *sprite)
{
if (--sprite->data[3] <= sprite->data[6])
DestroySpriteAndMatrix(sprite);
}
//Creates a sprite that moves left then right along the target.
//arg 0: Slice distance
//arg 1: Speed
static void SpriteCB_LeftRightSlice(struct Sprite *sprite)
{
sprite->x2 = gBattleAnimArgs[0];
sprite->data[0] = -gBattleAnimArgs[0]; //Slice distance
sprite->data[1] = gBattleAnimArgs[1]; //Slice speed
sprite->callback = SpriteCB_LeftRightSliceStep0;
}
static void SpriteCB_LeftRightSliceStep1(struct Sprite *sprite)
{
sprite->x2 += sprite->data[1];
if (sprite->x2 >= sprite->data[0])
DestroyAnimSprite(sprite);
}
static void SpriteCB_LeftRightSliceStep0(struct Sprite *sprite)
{
sprite->x2 -= sprite->data[1];
if (sprite->x2 <= sprite->data[0])
{
sprite->data[0] = -sprite->data[0];
sprite->callback = SpriteCB_LeftRightSliceStep1;
}
}
//Creates a rock that bounces between the attacker's feet.
//arg 0: initial x pixel offset
//arg 1: initial y pixel offset
//arg 2: Ignore horizontal motion if TRUE. Only bounce once.
#define sVerticalTime sprite->data[0]
#define sHorizontalTime sprite->data[1]
#define sMovingBackHorizontally sprite->data[2]
static void SpriteCB_PyroBallRockBounceStep(struct Sprite *sprite)
{
s8 initialVerticalVelocity;
s8 initialHorizontalVelocity;
if (sprite->y2 > 0) //Rock returned back down
{
if (gBattleAnimArgs[2] || sMovingBackHorizontally) //Finished moving from left to right
DestroyAnimSprite(sprite);
else
{
sVerticalTime = 0;
sMovingBackHorizontally = TRUE;
}
}
initialVerticalVelocity = -6;
initialHorizontalVelocity = -1; //Starts by moving right to left
//vi = -6
//g = 0.25 (gravity not negative b/c go up to go closer to 0)
//h = vi*t + 0.5g*t^2
//t = sVerticalTime
sprite->y2 = (initialVerticalVelocity * sVerticalTime + (1 * sVerticalTime * sVerticalTime) / 4);
//x = vi*t
//vi = sprite->data[2]
//t = sHorizontalTime
if (!gBattleAnimArgs[2])
sprite->x2 = (initialHorizontalVelocity * sHorizontalTime);
sVerticalTime++;
if (sMovingBackHorizontally)
sHorizontalTime--; //Move left to right
else
sHorizontalTime++; //Move right to left
}
static void InitSpritePositionForPyroBall(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, 0);
sprite->y += 20; //Move closer to attacker's feet
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
sprite->y += 20; //Move below the text box
}
static void SpriteCB_PyroBallRockBounce(struct Sprite *sprite)
{
InitSpritePositionForPyroBall(sprite);
sprite->callback = SpriteCB_PyroBallRockBounceStep;
}
#undef sVerticalTime
#undef sHorizontalTime
#undef sMovingBackHorizontally
//Launches a projectile from the attacker's feet at the target.
//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
static void SpriteCB_PyroBallLaunch(struct Sprite *sprite)
{
InitSpritePositionForPyroBall(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y
sprite->data[5] = gBattleAnimArgs[5];
InitAnimArcTranslation(sprite);
sprite->callback = AnimMissileArc_Step;
}
//Throws acid at a single target.
static void SpriteCB_AcidLaunchSingleTarget(struct Sprite *sprite)
{
s16 l1, l2;
if (!gBattleAnimArgs[3])
StartSpriteAnim(sprite, 2);
InitSpritePosToAnimTarget(sprite, TRUE);
l1 = sprite->x; l2 = sprite->y;
InitSpritePosToAnimAttacker(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[4] = -gBattleAnimArgs[4];
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = l1 + gBattleAnimArgs[4];
sprite->data[4] = l2 + gBattleAnimArgs[5];
sprite->data[5] = -30;
InitAnimArcTranslation(sprite);
sprite->callback = AnimAcidPoisonBubble_Step;
}
//Causes acid to drip down a single target.
static void SpriteCB_AcidDripSingleTarget(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
sprite->x += gBattleAnimArgs[0];
sprite->y += gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = sprite->x + gBattleAnimArgs[2];
sprite->data[4] = sprite->y + sprite->data[0];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
//Causes an object to fall from the sky.
//arg 0: initial x pixel offset
//arg 1: initial y pixel offset
//arg 2: anim battler
static void SpriteCB_WaterDroplet(struct Sprite *sprite)
{
u8 target = LoadBattleAnimTarget(2);
if (!IsBattlerSpriteVisible(target))
DestroyAnimSprite(sprite);
else
{
InitSpritePosToGivenTarget(sprite, target);
sprite->data[1] = sprite->y; //Target's y coord
sprite->x2 = gBattleAnimArgs[0];
sprite->y2 = 0;
//Put droplet at the top of the screen
sprite->y = 15;
sprite->callback = SpriteCB_WaterDropletDrip;
}
}
static void SpriteCB_WaterDropletDrip(struct Sprite *sprite)
{
sprite->data[0] = 12;
StartSpriteAnim(sprite, 0);
sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData6(sprite, SpriteCB_WaterDropletDrop);
}
static void SpriteCB_WaterDropletDrop(struct Sprite *sprite)
{
sprite->y2 += 4;
if (sprite->y2 >= sprite->data[1])
{
sprite->data[0] = 19;
StartSpriteAnim(sprite, 1);
sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
}
static void SpriteCB_AnimSpriteOnSelectedMonPos(struct Sprite *sprite)
{
if (!sprite->data[0])
{
u8 target = LoadBattleAnimTarget(2);
if (!IsBattlerSpriteVisible(target))
DestroyAnimSprite(sprite);
else
{
InitSpritePosToGivenTarget(sprite, target);
sprite->data[0]++;
}
}
else if (sprite->animEnded || sprite->affineAnimEnded)
{
DestroySpriteAndMatrix(sprite);
}
}
static void SpriteCB_SurroundingRing(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 40;
sprite->data[0] = 13;
sprite->data[2] = sprite->x;
sprite->data[4] = sprite->y - 72;
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
//Imitates launching a beam of light towards the sky
//arg 0: initial x pixel offset
//arg 1: initial y pixel offset
//arg 2: battler
//arg 3: duration
//arg 4: Anim num
//arg 5: affine anim start delay
static void SpriteCB_PhotonGeyserBeam(struct Sprite *sprite)
{
u8 target = LoadBattleAnimTarget(2);
if (!IsBattlerSpriteVisible(target))
DestroyAnimSprite(sprite);
else
{
InitSpritePosToGivenTarget(sprite, target);
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[5];
sprite->callback = SpriteCB_BeamUpStep;
}
}
//Animates the beam of light
static void SpriteCB_BeamUpStep(struct Sprite *sprite)
{
if (sprite->data[1]-- == 0)
StartSpriteAffineAnim(sprite, 1);
if (sprite->data[0]-- <= 0)
DestroySpriteAndMatrix(sprite);
}
static void SpriteCB_CentredElectricity(struct Sprite *sprite)
{
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
InitSpritePosToAnimTargetsCentre(sprite, FALSE);
else
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->oam.tileNum += gBattleAnimArgs[3] * 4;
if (gBattleAnimArgs[3] == 1)
sprite->oam.matrixNum = 8;
else if (gBattleAnimArgs[3] == 2)
sprite->oam.matrixNum = 16;
sprite->data[0] = gBattleAnimArgs[2];
sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
static void AnimSkyDropBallUp(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->callback = AnimFlyBallUp_Step;
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE;
}
static void SpriteCB_SearingShotRock(struct Sprite *sprite)
{
u8 target = LoadBattleAnimTarget(4);
if (!IsBattlerSpriteVisible(target))
{
DestroyAnimSprite(sprite);
}
else
{
InitSpritePosToGivenTarget(sprite, target);
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->data[0] = gBattleAnimArgs[3];
sprite->callback = WaitAnimForDuration;
StoreSpriteCallbackInData6(sprite, AnimSpinningKickOrPunchFinish);
}
}
static void AnimHappyHourCoinShower(struct Sprite *sprite)
{
if (gBattleAnimArgs[3] != 0)
SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->x, &sprite->y); //coin shower on attacker
sprite->x += gBattleAnimArgs[0];
sprite->y += 14;
StartSpriteAnim(sprite, gBattleAnimArgs[1]);
AnimateSprite(sprite);
sprite->data[0] = 0;
sprite->data[1] = 0;
sprite->data[2] = 4;
sprite->data[3] = 16;
sprite->data[4] = -70;
sprite->data[5] = gBattleAnimArgs[2];
StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step);
sprite->callback = TranslateSpriteInEllipse;
sprite->callback(sprite);
}
//Launches an object upwards like they were being shot from a geyser
//arg 0: null
//arg 1: initial x pixel offset
//arg 2: initial y pixel offset
static void SpriteCB_Geyser(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1;
sprite->callback = AnimMudSportDirtRising;
}
//Launches an object upwards like they were being shot from a geyser
//arg 0: null
//arg 1: initial x pixel offset
//arg 2: initial y pixel offset
static void SpriteCB_GeyserTarget(struct Sprite *sprite)
{
sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1];
sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1;
sprite->callback = AnimMudSportDirtRising;
}
// Anim Tasks Functions
#define tSpriteId data[0]
#define tTimer data[1]
#define tInitialXPos data[2]
#define tInitialYPos data[3]
#define tSide data[4]
#define tAnimLengthTime data[5]
static const s8 sHomerunEnemyHorizontalMovement[] =
{
3, 3, 3, 3,
3, 3, 2, 2,
1, 1, 1, 1,
1, 1, 1, 1,
0, 1, 0, 1,
0, 1, 0, 0,
1, 0, 0, 1,
0, 0, 0, 1,
0, 0, 0, 1,
};
static const s8 sHomerunEnemyVerticalMovement[] =
{
-4, -4, -4, -4,
-4, -3, -3, -2,
-2, -1, -1, -1,
-1, -1, -1, -1,
0, -1, 0, -1,
0, -1, 0, 0,
0, 0, -1, 0,
0, -1, 0, 0,
-1, 0, 0, 0,
};
void AnimTask_TwinkleTackleLaunchStep(u8 taskId)
{
u16 rotation;
s16 xScale, yScale;
struct Task* task = &gTasks[taskId];
struct Sprite *sprite = &gSprites[task->tSpriteId];
if (task->tTimer > task->tAnimLengthTime)
{
if (task->tTimer > task->tAnimLengthTime + 5) //Wait an extra few frames so the glint can be placed on the target
{
sprite->x = task->tInitialXPos;
sprite->y = task->tInitialYPos;
ResetSpriteRotScale(task->tSpriteId);
DestroyAnimVisualTask(taskId);
}
else
++task->tTimer;
return;
}
else if ((u16) task->tTimer < NELEMS(sHomerunEnemyHorizontalMovement))
{
s8 movement = sHomerunEnemyHorizontalMovement[task->tTimer];
if (task->tSide == B_SIDE_PLAYER)
movement *= -1;
sprite->x += movement;
movement = sHomerunEnemyVerticalMovement[task->tTimer];
if (task->tSide == B_SIDE_PLAYER)
movement *= -1;
sprite->y += movement;
}
xScale = 0x180;
yScale = 0x180;
rotation = (task->tTimer << 4) + (task->tTimer << 3);
xScale += rotation;
yScale += rotation;
rotation <<= 7;
if (task->tSide == B_SIDE_OPPONENT)
rotation *= -1;
SetSpriteRotScale(task->tSpriteId, xScale, yScale, rotation);
if (++task->tTimer > task->tAnimLengthTime)
sprite->invisible = TRUE;
}
//Launches the target in Twinkle Tackle
//arg 0: Anim time
void AnimTask_TwinkleTackleLaunch(u8 taskId)
{
struct Task* task = &gTasks[taskId];
task->tSpriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
task->tSide = GetBattlerSide(gBattleAnimTarget);
task->tAnimLengthTime = gBattleAnimArgs[0];
task->tInitialXPos = gSprites[task->tSpriteId].x;
task->tInitialYPos = gSprites[task->tSpriteId].y;
task->tTimer = 0;
task->func = AnimTask_TwinkleTackleLaunchStep;
PrepareBattlerSpriteForRotScale(task->tSpriteId, ST_OAM_OBJ_NORMAL);
}
#undef tSpriteId
#undef tTimer
#undef tInitialXPos
#undef tInitialYPos
#undef tSide
#undef tAnimLengthTime
void AnimTask_GetTimeOfDay(u8 taskId)
{
gBattleAnimArgs[0] = 0; //Daytime is default
RtcCalcLocalTime();
if (gLocalTime.hours >= 20 || gLocalTime.hours < 4)
gBattleAnimArgs[0] = 1;
else if (gLocalTime.hours >= 17 && gLocalTime.hours < 20)
gBattleAnimArgs[0] = 2;
DestroyAnimVisualTask(taskId);
}
void AnimTask_GetLycanrocForm(u8 taskId)
{
if (GetMonData(GetIllusionMonPtr(gBattleAnimAttacker), MON_DATA_SPECIES) == SPECIES_LYCANROC_MIDNIGHT)
gBattleAnimArgs[0] = 1;
else
gBattleAnimArgs[0] = 0;
gBattleAnimArgs[0] = 0;
DestroyAnimVisualTask(taskId);
}
// Scales up the target mon sprite
// Used in Let's Snuggle Forever
// No args.
void AnimTask_GrowTarget(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
SetSpriteRotScale(spriteId, 208, 208, 0);
gTasks[taskId].data[0] = 120;
gTasks[taskId].func = AnimTask_GrowStep;
}
static void AnimTask_GrowStep(u8 taskId)
{
if (--gTasks[taskId].data[0] == -1)
{
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
ResetSpriteRotScale(spriteId);
DestroyAnimVisualTask(taskId);
}
}
// Uses a spotlight sprite as a light mask to illuminate the attacker. The spotlight grows and shrinks.
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: duration of fully-opened spotlight
static void AnimOceanicOperettaSpotlight(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
sprite->data[0] = gBattleAnimArgs[2];
InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
sprite->invisible = TRUE;
sprite->callback = AnimFlatterSpotlight_Step;
}
static void AnimTask_WaitAffineAnim(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (!RunAffineAnimFromTaskData(task))
DestroyAnimVisualTask(taskId);
}
void AnimTask_SquishTarget(u8 taskId)
{
struct Task* task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
PrepareAffineAnimInTaskData(task, spriteId, sSquishTargetAffineAnimCmds);
task->func = AnimTask_WaitAffineAnim;
}
void CoreEnforcerLoadBeamTarget(struct Sprite *sprite)
{
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->x;
sprite->data[2] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2)
+ GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X_2)) / 2;
sprite->data[3] = sprite->y;
sprite->data[4] = (GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET)
+ GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y_PIC_OFFSET)) / 2;
}
void AnimTask_CreateBestowItem(u8 taskId)
{
u8 iconSpriteId = AddItemIconSprite(ANIM_TAG_ITEM_BAG, ANIM_TAG_ITEM_BAG, gLastUsedItem);
if (iconSpriteId != MAX_SPRITES)
{
gSprites[iconSpriteId].oam.priority = 2;
gSprites[iconSpriteId].callback = AnimThrowProjectile;
++gAnimVisualTaskCount;
}
DestroyAnimVisualTask(taskId);
}
//Creates purple flames that surround the target.
//No args.
void AnimTask_PurpleFlamesOnTarget(u8 taskId)
{
struct Task *task = &gTasks[taskId];
task->data[0] = 0;
task->data[1] = 16;
task->data[9] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimTarget);
task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH) / 2) + 8;
task->data[7] = 0;
task->data[5] = GetBattlerSpriteBGPriority(gBattleAnimTarget);
task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
task->data[3] = 0;
task->data[4] = 16;
SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
task->data[8] = 0;
task->func = AnimTask_GrudgeFlames_Step;
}
void AnimTask_TechnoBlast(u8 taskId)
{
if (ItemId_GetHoldEffect(gBattleMons[gBattleAnimAttacker].item) == HOLD_EFFECT_DRIVE)
gBattleAnimArgs[0] = ItemId_GetSecondaryId(gBattleMons[gBattleAnimAttacker].item);
else
gBattleAnimArgs[0] = 0;
DestroyAnimVisualTask(taskId);
}
// Z MOVES
//Creates a twinkle at the location the target was knocked too in Twinkle Tackle
static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite)
{
struct Sprite* monSprite;
if (gBattleAnimArgs[2] == ANIM_TARGET)
monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)];
else
monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)];
sprite->x = monSprite->x;
sprite->y = monSprite->y;
sprite->x2 = monSprite->x2;
sprite->y2 = monSprite->y2;
sprite->callback = RunStoredCallbackWhenAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
void AnimTask_PrimalReversion(u8 taskId)
{
if (gBattleMons[gBattleAnimAttacker].item == ITEM_RED_ORB || gBattleMons[gBattleAnimAttacker].item == ITEM_BLUE_ORB)
gBattleAnimArgs[0] = gBattleMons[gBattleAnimAttacker].item;
else
gBattleAnimArgs[0] = 0;
DestroyAnimVisualTask(taskId);
}
void AnimTask_ShellSideArm(u8 taskId)
{
if (gBattleStruct->swapDamageCategory)
gBattleAnimArgs[0] = TRUE;
else
gBattleAnimArgs[0] = FALSE;
DestroyAnimVisualTask(taskId);
}
void AnimTask_TerrainPulse(u8 taskId)
{
if (IsBattlerTerrainAffected(gBattleAnimAttacker, STATUS_FIELD_TERRAIN_ANY))
{
if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
gBattleAnimArgs[0] = TYPE_ELECTRIC;
else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
gBattleAnimArgs[0] = TYPE_GRASS;
else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
gBattleAnimArgs[0] = TYPE_FAIRY;
else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
gBattleAnimArgs[0] = TYPE_PSYCHIC;
else //failsafe
gBattleAnimArgs[0] = 0;
}
else
{
gBattleAnimArgs[0] = 0;
}
DestroyAnimVisualTask(taskId);
}
void AnimTask_AffectionHangedOn(u8 taskId)
{
int side = GetBattlerSide(gBattleAnimTarget);
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
gBattleAnimArgs[0] = GetBattlerFriendshipScore(gBattleAnimTarget);
DestroyAnimVisualTask(taskId);
}