#ifndef GUARD_BATTLE_ANIM_H #define GUARD_BATTLE_ANIM_H #include "battle.h" #include "data.h" #include "task.h" #include "constants/battle_anim.h" enum { BG_ANIM_SCREEN_SIZE, BG_ANIM_AREA_OVERFLOW_MODE, BG_ANIM_MOSAIC, BG_ANIM_CHAR_BASE_BLOCK, BG_ANIM_PRIORITY, BG_ANIM_PALETTES_MODE, BG_ANIM_SCREEN_BASE_BLOCK }; enum { BATTLER_COORD_X, BATTLER_COORD_Y, BATTLER_COORD_X_2, BATTLER_COORD_Y_PIC_OFFSET, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT, }; enum { BATTLER_COORD_ATTR_HEIGHT, BATTLER_COORD_ATTR_WIDTH, BATTLER_COORD_ATTR_TOP, BATTLER_COORD_ATTR_BOTTOM, BATTLER_COORD_ATTR_LEFT, BATTLER_COORD_ATTR_RIGHT, BATTLER_COORD_ATTR_RAW_BOTTOM, }; // battle_anim_status_effects.s #define STAT_ANIM_PLUS1 15 #define STAT_ANIM_PLUS2 39 #define STAT_ANIM_MINUS1 22 #define STAT_ANIM_MINUS2 46 #define STAT_ANIM_MULTIPLE_PLUS1 55 #define STAT_ANIM_MULTIPLE_PLUS2 56 #define STAT_ANIM_MULTIPLE_MINUS1 57 #define STAT_ANIM_MULTIPLE_MINUS2 58 struct BattleAnimBgData { u8 *bgTiles; u16 *bgTilemap; u8 paletteId; u8 bgId; u16 tilesOffset; u16 unused; }; struct BattleAnimBackground { const u32 *image; const u32 *palette; const u32 *tilemap; }; #define ANIM_ARGS_COUNT 8 // Linear Translation #define sTransl_Speed data[0] #define sTransl_Duration data[0] // for Fast #define sTransl_InitX data[1] #define sTransl_DestX data[2] #define sTransl_InitY data[3] #define sTransl_DestY data[4] #define sTransl_ArcAmpl data[5] extern void (*gAnimScriptCallback)(void); extern bool8 gAnimScriptActive; extern u8 gAnimVisualTaskCount; extern u8 gAnimSoundTaskCount; extern struct DisableStruct *gAnimDisableStructPtr; extern u16 gAnimMovePower; extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT]; extern u8 gAnimMoveTurn; extern u8 gBattleAnimAttacker; extern u8 gBattleAnimTarget; extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT]; extern s32 gAnimMoveDmg; extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT]; extern u8 gAnimCustomPanning; extern const struct OamData gOamData_AffineOff_ObjNormal_8x8; extern const struct OamData gOamData_AffineOff_ObjNormal_16x16; extern const struct OamData gOamData_AffineOff_ObjNormal_32x32; extern const struct OamData gOamData_AffineOff_ObjNormal_64x64; extern const struct OamData gOamData_AffineOff_ObjNormal_16x8; extern const struct OamData gOamData_AffineOff_ObjNormal_32x8; extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; extern const struct OamData gOamData_AffineOff_ObjNormal_64x32; extern const struct OamData gOamData_AffineOff_ObjNormal_8x16; extern const struct OamData gOamData_AffineOff_ObjNormal_8x32; extern const struct OamData gOamData_AffineOff_ObjNormal_16x32; extern const struct OamData gOamData_AffineOff_ObjNormal_32x64; extern const struct OamData gOamData_AffineNormal_ObjNormal_8x8; extern const struct OamData gOamData_AffineNormal_ObjNormal_16x16; extern const struct OamData gOamData_AffineNormal_ObjNormal_32x32; extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64; extern const struct OamData gOamData_AffineNormal_ObjNormal_16x8; extern const struct OamData gOamData_AffineNormal_ObjNormal_32x8; extern const struct OamData gOamData_AffineNormal_ObjNormal_32x16; extern const struct OamData gOamData_AffineNormal_ObjNormal_64x32; extern const struct OamData gOamData_AffineNormal_ObjNormal_8x16; extern const struct OamData gOamData_AffineNormal_ObjNormal_8x32; extern const struct OamData gOamData_AffineNormal_ObjNormal_16x32; extern const struct OamData gOamData_AffineNormal_ObjNormal_32x64; extern const struct OamData gOamData_AffineDouble_ObjNormal_8x8; extern const struct OamData gOamData_AffineDouble_ObjNormal_16x16; extern const struct OamData gOamData_AffineDouble_ObjNormal_32x32; extern const struct OamData gOamData_AffineDouble_ObjNormal_64x64; extern const struct OamData gOamData_AffineDouble_ObjNormal_16x8; extern const struct OamData gOamData_AffineDouble_ObjNormal_32x8; extern const struct OamData gOamData_AffineDouble_ObjNormal_32x16; extern const struct OamData gOamData_AffineDouble_ObjNormal_64x32; extern const struct OamData gOamData_AffineDouble_ObjNormal_8x16; extern const struct OamData gOamData_AffineDouble_ObjNormal_8x32; extern const struct OamData gOamData_AffineDouble_ObjNormal_16x32; extern const struct OamData gOamData_AffineDouble_ObjNormal_32x64; extern const struct OamData gOamData_AffineOff_ObjBlend_8x8; extern const struct OamData gOamData_AffineOff_ObjBlend_16x16; extern const struct OamData gOamData_AffineOff_ObjBlend_32x32; extern const struct OamData gOamData_AffineOff_ObjBlend_64x64; extern const struct OamData gOamData_AffineOff_ObjBlend_16x8; extern const struct OamData gOamData_AffineOff_ObjBlend_32x8; extern const struct OamData gOamData_AffineOff_ObjBlend_32x16; extern const struct OamData gOamData_AffineOff_ObjBlend_64x32; extern const struct OamData gOamData_AffineOff_ObjBlend_8x16; extern const struct OamData gOamData_AffineOff_ObjBlend_8x32; extern const struct OamData gOamData_AffineOff_ObjBlend_16x32; extern const struct OamData gOamData_AffineOff_ObjBlend_32x64; extern const struct OamData gOamData_AffineNormal_ObjBlend_8x8; extern const struct OamData gOamData_AffineNormal_ObjBlend_16x16; extern const struct OamData gOamData_AffineNormal_ObjBlend_32x32; extern const struct OamData gOamData_AffineNormal_ObjBlend_64x64; extern const struct OamData gOamData_AffineNormal_ObjBlend_16x8; extern const struct OamData gOamData_AffineNormal_ObjBlend_32x8; extern const struct OamData gOamData_AffineNormal_ObjBlend_32x16; extern const struct OamData gOamData_AffineNormal_ObjBlend_64x32; extern const struct OamData gOamData_AffineNormal_ObjBlend_8x16; extern const struct OamData gOamData_AffineNormal_ObjBlend_8x32; extern const struct OamData gOamData_AffineNormal_ObjBlend_16x32; extern const struct OamData gOamData_AffineNormal_ObjBlend_32x64; extern const struct OamData gOamData_AffineDouble_ObjBlend_8x8; extern const struct OamData gOamData_AffineDouble_ObjBlend_16x16; extern const struct OamData gOamData_AffineDouble_ObjBlend_32x32; extern const struct OamData gOamData_AffineDouble_ObjBlend_64x64; extern const struct OamData gOamData_AffineDouble_ObjBlend_16x8; extern const struct OamData gOamData_AffineDouble_ObjBlend_32x8; extern const struct OamData gOamData_AffineDouble_ObjBlend_32x16; extern const struct OamData gOamData_AffineDouble_ObjBlend_64x32; extern const struct OamData gOamData_AffineDouble_ObjBlend_8x16; extern const struct OamData gOamData_AffineDouble_ObjBlend_8x32; extern const struct OamData gOamData_AffineDouble_ObjBlend_16x32; extern const struct OamData gOamData_AffineDouble_ObjBlend_32x64; extern const struct MonCoords gCastformFrontSpriteCoords[]; extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate; extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate; extern const struct SpriteTemplate gWaterHitSplatSpriteTemplate; extern const struct SpriteTemplate gWishStarSpriteTemplate; extern const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate; extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate; extern const union AffineAnimCmd *const gAffineAnims_Bite[]; extern const union AffineAnimCmd *const gAffineAnims_Droplet[]; extern const union AffineAnimCmd *const gGrowingRingAffineAnimTable[]; extern const union AnimCmd *const gAnims_SmallBubblePair[]; extern const union AnimCmd *const gAnims_BasicFire[]; extern const union AnimCmd *const gAnims_WaterMudOrb[]; extern const union AnimCmd *const gAnims_WaterBubble[]; extern const union AnimCmd *const gMusicNotesAnimTable[]; extern const u8 *const gBattleAnims_StatusConditions[]; extern const u8 *const gBattleAnims_Moves[]; extern const u16 gMovesWithQuietBGM[]; void MoveBattlerSpriteToBG(u8 battlerId, u8); void ResetBattleAnimBg(u8); void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim); void DestroyAnimSprite(struct Sprite *sprite); void DestroyAnimVisualTask(u8 taskId); void DestroyAnimSoundTask(u8 taskId); bool8 IsContest(void); s8 BattleAnimAdjustPanning(s8 pan); s8 BattleAnimAdjustPanning2(s8 pan); s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan); bool8 IsBattlerSpriteVisible(u8 battlerId); s16 KeepPanInRange(s16 a, s32 oldPan); void RelocateBattleBgPal(u16 paletteNum, u16 *dest, s32 offset, u8 largeScreen); void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value); s32 GetAnimBgAttribute(u8 bgId, u8 attributeId); void HandleIntroSlide(u8 terrain); void BattleIntroSlideEnd(u8 taskId); void CopyBattlerSpriteToBg(s32 bgId, u8 x, u8 y, u8 battlerPosition, u8 palno, u8 *tilesDest, u16 *tilemapDest, u16 tilesOffset); void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite); void TryShinyAnimation(u8 battler, struct Pokemon *mon); u8 ItemIdToBallId(u16 itemId); u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId); u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId); void DoLoadHealthboxPalsForLevelUp(u8 *, u8 *, u8 battlerId); void DoFreeHealthboxPalsForLevelUp(u8 batterId); void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId); u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType); u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType); u8 GetBattlerSpriteDefault_Y(u8 battlerId); u8 GetSubstituteSpriteDefault_Y(u8 battlerId); u8 GetGhostSpriteDefault_Y(u8 battlerId); u8 GetBattlerYCoordWithElevation(u8 battlerId); u8 GetAnimBattlerSpriteId(u8 animBattler); void StoreSpriteCallbackInData6(struct Sprite *sprite, SpriteCallback callback); void TranslateSpriteInCircle(struct Sprite *sprite); void TranslateSpriteInGrowingCircle(struct Sprite *sprite); void TranslateSpriteInEllipse(struct Sprite *sprite); void WaitAnimForDuration(struct Sprite *sprite); void ConvertPosDataToTranslateLinearData(struct Sprite *sprite); void TranslateSpriteLinear(struct Sprite *sprite); void TranslateSpriteLinearFixedPoint(struct Sprite *sprite); void TranslateSpriteLinearById(struct Sprite *sprite); void TranslateSpriteLinearByIdFixedPoint(struct Sprite *sprite); void TranslateSpriteLinearAndFlicker(struct Sprite *sprite); void DestroySpriteAndMatrix(struct Sprite *sprite); void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite); void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite); void DestroyAnimSpriteAndDisableBlend(struct Sprite *sprite); void DestroyAnimVisualTaskAndDisableBlend(u8 taskId); void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite); void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset); void InitAnimArcTranslation(struct Sprite *sprite); bool8 TranslateAnimHorizontalArc(struct Sprite *sprite); bool8 TranslateAnimVerticalArc(struct Sprite *sprite); void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite); void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets); void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets); u8 GetBattlerSide(u8 battlerId); u8 GetBattlerPosition(u8 battlerId); u8 GetBattlerAtPosition(u8 position); bool8 IsBattlerSpritePresent(u8 battlerId); bool8 IsDoubleBattle(void); void GetBattleAnimBg1Data(struct BattleAnimBgData *animBgData); void GetBattleAnimBgData(struct BattleAnimBgData *animBgData, u32 bgId); void GetBattleAnimBgDataByPriorityRank(struct BattleAnimBgData *animBgData, u8 unused); void InitBattleAnimBg(u32 bgId); void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset); void InitAnimBgTilemapBuffer(u32 bgId, const void *src); void AnimLoadCompressedBgTilemap(u32 bgId, const u32 *src); u8 GetBattleBgPaletteNum(void); void ToggleBg3Mode(bool8 arg0); void TradeMenuBouncePartySprites(struct Sprite *sprite); void InitSpriteDataForLinearTranslation(struct Sprite *sprite); void InitAnimLinearTranslation(struct Sprite *sprite); void StartAnimLinearTranslation(struct Sprite *sprite); void PlayerThrowBall_StartAnimLinearTranslation(struct Sprite *sprite); bool8 AnimTranslateLinear(struct Sprite *sprite); void AnimTranslateLinear_WithFollowup(struct Sprite *sprite); void InitAnimLinearTranslationWithSpeed(struct Sprite *sprite); void InitAnimLinearTranslationWithSpeedAndPos(struct Sprite *sprite); void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite); bool8 AnimFastTranslateLinear(struct Sprite *sprite); void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite); void InitAnimFastLinearTranslationWithSpeedAndPos(struct Sprite *sprite); void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation); void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode); void ResetSpriteRotScale(u8 spriteId); void SetBattlerSpriteYOffsetFromRotation(u8 spriteId); void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation); void TryResetSpriteAffineState(struct Sprite *sprite); u16 ArcTan2Neg(s16 a, s16 b); void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor); u32 GetBattlePalettesMask(bool8 battleBackground, bool8 attacker, bool8 target, bool8 attackerPartner, bool8 targetPartner, bool8 a6, bool8 a7); u32 GetBattleMonSpritePalettesMask(bool8 playerLeft, bool8 playerRight, bool8 foeLeft, bool8 foeRight); u8 GetSpritePalIdxByBattler(u8 a1); void AnimSpriteOnMonPos(struct Sprite *sprite); void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite); void AnimThrowProjectile(struct Sprite *sprite); void AnimTravelDiagonally(struct Sprite *sprite); s16 CloneBattlerSpriteWithBlend(u8 animBattler); void DestroySpriteWithActiveSheet(struct Sprite *sprite); void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds); bool8 RunAffineAnimFromTaskData(struct Task *task); void SetBattlerSpriteYOffsetFromYScale(u8 spriteId); void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId); void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr); void *LoadPointerFromVars(s16 lo, s16 hi); void BattleAnimHelper_SetSpriteSquashParams(struct Task *task, u8 spriteId, s16 xScale0, s16 yScale0, s16 xScale1, s16 yScale1, u16 duration); u8 BattleAnimHelper_RunSpriteSquash(struct Task *task); void InitPrioritiesForVisibleBattlers(void); u8 GetBattlerSpriteSubpriority(u8 battlerId); u8 GetBattlerSpriteBGPriority(u8 battlerId); u8 GetBattlerSpriteBGPriorityRank(u8 battlerId); u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 templateId, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 ignoreDeoxys); void DestroySpriteAndFreeResources_(struct Sprite *sprite); s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr); void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y); u8 CreateInvisibleSpriteCopy(s32 battlerId, u8 spriteId, s32 species); void AnimTranslateLinearAndFlicker_Flipped(struct Sprite *sprite); void AnimTranslateLinearAndFlicker(struct Sprite *sprite); void AnimSpinningSparkle(struct Sprite *sprite); void AnimWeatherBallUp(struct Sprite *sprite); void AnimWeatherBallDown(struct Sprite *sprite); void AnimParticleBurst(struct Sprite *); void AnimMoveTwisterParticle(struct Sprite *); u32 UnpackSelectedBattlePalettes(s16 selector); void AnimTask_HorizontalShake(u8 taskId); void DestroyAnimSpriteAfterTimer(struct Sprite *sprite); void AnimWaterPulseRing(struct Sprite *sprite); u8 SmokescreenImpact(s16 x, s16 y, u8 a3); void InitStatsChangeAnimation(u8 taskId); void StartMonScrollingBgMask(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette); #endif // GUARD_BATTLE_ANIM_H