summaryrefslogtreecommitdiff
path: root/src/psychic.c
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2020-02-23 13:18:54 -0500
committerhuderlem <huderlem@gmail.com>2020-02-25 12:54:08 -0600
commit51cd0ac08116674a8ebd258af0620c2f7de9dc0e (patch)
tree27f125cc057a019049feccabc746ce09ac91a2f5 /src/psychic.c
parentdc3c2b72f26463e4368f51e0380b8605ec06c40a (diff)
Rename battle anim type files, remove unneeded ARG_RET_IDs
Diffstat (limited to 'src/psychic.c')
-rw-r--r--src/psychic.c1168
1 files changed, 0 insertions, 1168 deletions
diff --git a/src/psychic.c b/src/psychic.c
deleted file mode 100644
index 7918698fc..000000000
--- a/src/psychic.c
+++ /dev/null
@@ -1,1168 +0,0 @@
-#include "global.h"
-#include "battle_anim.h"
-#include "gpu_regs.h"
-#include "palette.h"
-#include "sound.h"
-#include "scanline_effect.h"
-#include "trig.h"
-#include "constants/rgb.h"
-#include "constants/songs.h"
-
-static void AnimDefensiveWall(struct Sprite *);
-static void AnimDefensiveWall_Step1(struct Sprite *);
-static void AnimDefensiveWall_Step2(struct Sprite *);
-static void AnimDefensiveWall_Step3(struct Sprite *);
-static void AnimDefensiveWall_Step4(struct Sprite *);
-static void AnimDefensiveWall_Step5(struct Sprite *);
-static void AnimWallSparkle(struct Sprite *);
-static void AnimBentSpoon(struct Sprite *);
-static void AnimQuestionMark(struct Sprite *);
-static void AnimQuestionMark_Step1(struct Sprite *);
-static void AnimQuestionMark_Step2(struct Sprite *);
-static void AnimRedX(struct Sprite *);
-static void AnimSkillSwapOrb(struct Sprite *);
-static void AnimPsychoBoost(struct Sprite *);
-static void AnimTask_MeditateStretchAttacker_Step(u8);
-static void AnimTask_Teleport_Step(u8);
-static void AnimTask_ImprisonOrbs_Step(u8);
-static void AnimTask_SkillSwap_Step(u8);
-static void AnimTask_ExtrasensoryDistortion_Step(u8);
-static void AnimTask_TransparentCloneGrowAndShrink_Step(u8);
-
-static const union AffineAnimCmd sAffineAnim_PsychUpSpiral[] =
-{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFFE, 0xFFFE, -10, 120),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd *const sAffineAnims_PsychUpSpiral[] =
-{
- sAffineAnim_PsychUpSpiral,
-};
-
-const struct SpriteTemplate gPsychUpSpiralSpriteTemplate =
-{
- .tileTag = ANIM_TAG_SPIRAL,
- .paletteTag = ANIM_TAG_SPIRAL,
- .oam = &gOamData_AffineNormal_ObjBlend_64x64,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = sAffineAnims_PsychUpSpiral,
- .callback = AnimSpriteOnMonPos,
-};
-
-const struct SpriteTemplate gLightScreenWallSpriteTemplate =
-{
- .tileTag = ANIM_TAG_GREEN_LIGHT_WALL,
- .paletteTag = ANIM_TAG_GREEN_LIGHT_WALL,
- .oam = &gOamData_AffineOff_ObjBlend_64x64,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimDefensiveWall,
-};
-
-const struct SpriteTemplate gReflectWallSpriteTemplate =
-{
- .tileTag = ANIM_TAG_BLUE_LIGHT_WALL,
- .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL,
- .oam = &gOamData_AffineOff_ObjBlend_64x64,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimDefensiveWall,
-};
-
-const struct SpriteTemplate gMirrorCoatWallSpriteTemplate =
-{
- .tileTag = ANIM_TAG_RED_LIGHT_WALL,
- .paletteTag = ANIM_TAG_RED_LIGHT_WALL,
- .oam = &gOamData_AffineOff_ObjBlend_64x64,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimDefensiveWall,
-};
-
-const struct SpriteTemplate gBarrierWallSpriteTemplate =
-{
- .tileTag = ANIM_TAG_GRAY_LIGHT_WALL,
- .paletteTag = ANIM_TAG_GRAY_LIGHT_WALL,
- .oam = &gOamData_AffineOff_ObjBlend_64x64,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimDefensiveWall,
-};
-
-const struct SpriteTemplate gMagicCoatWallSpriteTemplate =
-{
- .tileTag = ANIM_TAG_ORANGE_LIGHT_WALL,
- .paletteTag = ANIM_TAG_ORANGE_LIGHT_WALL,
- .oam = &gOamData_AffineOff_ObjBlend_64x64,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimDefensiveWall,
-};
-
-static const union AnimCmd sAnim_ReflectSparkle[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_FRAME(32, 3),
- ANIMCMD_FRAME(48, 3),
- ANIMCMD_FRAME(64, 3),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sAnims_ReflectSparkle[] =
-{
- sAnim_ReflectSparkle,
-};
-
-const struct SpriteTemplate gReflectSparkleSpriteTemplate =
-{
- .tileTag = ANIM_TAG_SPARKLE_4,
- .paletteTag = ANIM_TAG_SPARKLE_4,
- .oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_ReflectSparkle,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimWallSparkle,
-};
-
-static const union AnimCmd sAnim_SpecialScreenSparkle[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(4, 5),
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_FRAME(12, 5),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sAnims_SpecialScreenSparkle[] =
-{
- sAnim_SpecialScreenSparkle,
-};
-
-const struct SpriteTemplate gSpecialScreenSparkleSpriteTemplate =
-{
- .tileTag = ANIM_TAG_SPARKLE_3,
- .paletteTag = ANIM_TAG_SPARKLE_3,
- .oam = &gOamData_AffineOff_ObjNormal_16x16,
- .anims = sAnims_SpecialScreenSparkle,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimWallSparkle,
-};
-
-const struct SpriteTemplate gGoldRingSpriteTemplate =
-{
- .tileTag = ANIM_TAG_GOLD_RING,
- .paletteTag = ANIM_TAG_GOLD_RING,
- .oam = &gOamData_AffineOff_ObjNormal_16x32,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = TranslateAnimSpriteToTargetMonLocation,
-};
-
-static const union AnimCmd sAnim_BentSpoon_0[] =
-{
- ANIMCMD_FRAME(8, 60, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
- ANIMCMD_FRAME(8, 5, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
- ANIMCMD_FRAME(8, 22, .hFlip = TRUE),
- ANIMCMD_LOOP(0),
- ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
- ANIMCMD_FRAME(8, 5, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
- ANIMCMD_FRAME(8, 5, .hFlip = TRUE),
- ANIMCMD_LOOP(1),
- ANIMCMD_FRAME(8, 22, .hFlip = TRUE),
- ANIMCMD_FRAME(24, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(40, 22, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sAnim_BentSpoon_1[] =
-{
- ANIMCMD_FRAME(8, 60),
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(8, 22),
- ANIMCMD_LOOP(0),
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_LOOP(1),
- ANIMCMD_FRAME(8, 22),
- ANIMCMD_FRAME(24, 3),
- ANIMCMD_FRAME(32, 3),
- ANIMCMD_FRAME(40, 22),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sAnims_BentSpoon[] =
-{
- sAnim_BentSpoon_0,
- sAnim_BentSpoon_1,
-};
-
-const struct SpriteTemplate gBentSpoonSpriteTemplate =
-{
- .tileTag = ANIM_TAG_BENT_SPOON,
- .paletteTag = ANIM_TAG_BENT_SPOON,
- .oam = &gOamData_AffineOff_ObjNormal_16x32,
- .anims = sAnims_BentSpoon,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimBentSpoon,
-};
-
-static const union AnimCmd sAnim_QuestionMark[] =
-{
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(32, 6),
- ANIMCMD_FRAME(48, 6),
- ANIMCMD_FRAME(64, 6),
- ANIMCMD_FRAME(80, 6),
- ANIMCMD_FRAME(96, 18),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sAnims_QuestionMark[] =
-{
- sAnim_QuestionMark,
-};
-
-static const union AffineAnimCmd sAffineAnim_QuestionMark[] =
-{
- AFFINEANIMCMD_FRAME(0, 0, 4, 4),
- AFFINEANIMCMD_FRAME(0, 0, -4, 8),
- AFFINEANIMCMD_FRAME(0, 0, 4, 4),
- AFFINEANIMCMD_LOOP(2),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd *const sAffineAnims_QuestionMark[] =
-{
- sAffineAnim_QuestionMark,
-};
-
-const struct SpriteTemplate gQuestionMarkSpriteTemplate =
-{
- .tileTag = ANIM_TAG_AMNESIA,
- .paletteTag = ANIM_TAG_AMNESIA,
- .oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = sAnims_QuestionMark,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimQuestionMark,
-};
-
-static const union AffineAnimCmd sAffineAnim_MeditateStretchAttacker[] =
-{
- AFFINEANIMCMD_FRAME(-8, 10, 0, 16),
- AFFINEANIMCMD_FRAME(18, -18, 0, 16),
- AFFINEANIMCMD_FRAME(-20, 16, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd sAffineAnim_Teleport[] =
-{
- AFFINEANIMCMD_FRAME(64, -4, 0, 20),
- AFFINEANIMCMD_FRAME(0, 0, 0, -56),
- AFFINEANIMCMD_END,
-};
-
-const struct SpriteTemplate gImprisonOrbSpriteTemplate =
-{
- .tileTag = ANIM_TAG_HOLLOW_ORB,
- .paletteTag = ANIM_TAG_HOLLOW_ORB,
- .oam = &gOamData_AffineOff_ObjBlend_16x16,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-const struct SpriteTemplate gRedXSpriteTemplate =
-{
- .tileTag = ANIM_TAG_X_SIGN,
- .paletteTag = ANIM_TAG_X_SIGN,
- .oam = &gOamData_AffineOff_ObjNormal_64x64,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimRedX,
-};
-
-static const union AffineAnimCmd sAffineAnim_SkillSwapOrb_0[] =
-{
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
- AFFINEANIMCMD_JUMP(0),
-};
-
-static const union AffineAnimCmd sAffineAnim_SkillSwapOrb_1[] =
-{
- AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2),
- AFFINEANIMCMD_JUMP(1),
-};
-
-static const union AffineAnimCmd sAffineAnim_SkillSwapOrb_2[] =
-{
- AFFINEANIMCMD_FRAME(0xD0, 0xD0, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4),
- AFFINEANIMCMD_JUMP(1),
-};
-
-static const union AffineAnimCmd sAffineAnim_SkillSwapOrb_3[] =
-{
- AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6),
- AFFINEANIMCMD_JUMP(1),
-};
-
-static const union AffineAnimCmd *const sAffineAnims_SkillSwapOrb[] =
-{
- sAffineAnim_SkillSwapOrb_0,
- sAffineAnim_SkillSwapOrb_1,
- sAffineAnim_SkillSwapOrb_2,
- sAffineAnim_SkillSwapOrb_3,
-};
-
-const struct SpriteTemplate gSkillSwapOrbSpriteTemplate =
-{
- .tileTag = ANIM_TAG_BLUEGREEN_ORB,
- .paletteTag = ANIM_TAG_BLUEGREEN_ORB,
- .oam = &gOamData_AffineNormal_ObjNormal_16x16,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = sAffineAnims_SkillSwapOrb,
- .callback = AnimSkillSwapOrb,
-};
-
-static const union AffineAnimCmd sAffineAnim_LusterPurgeCircle[] =
-{
- AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
- AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 120),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-static const union AffineAnimCmd *const sAffineAnims_LusterPurgeCircle[] =
-{
- sAffineAnim_LusterPurgeCircle,
-};
-
-const struct SpriteTemplate gLusterPurgeCircleSpriteTemplate =
-{
- .tileTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT,
- .paletteTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT,
- .oam = &gOamData_AffineDouble_ObjBlend_64x64,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = sAffineAnims_LusterPurgeCircle,
- .callback = AnimSpriteOnMonPos,
-};
-
-static const union AffineAnimCmd sAffineAnim_PsychoBoostOrb_0[] =
-{
- AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 17),
- AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10),
- AFFINEANIMCMD_LOOP(4),
- AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 5),
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 5),
- AFFINEANIMCMD_LOOP(7),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd sAffineAnim_PsychoBoostOrb_1[] =
-{
- AFFINEANIMCMD_FRAME(0xFFEC, 0x18, 0, 15),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd *const sAffineAnims_PsychoBoostOrb[] =
-{
- sAffineAnim_PsychoBoostOrb_0,
- sAffineAnim_PsychoBoostOrb_1,
-};
-
-const struct SpriteTemplate gPsychoBoostOrbSpriteTemplate =
-{
- .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
- .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
- .oam = &gOamData_AffineDouble_ObjBlend_64x64,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = sAffineAnims_PsychoBoostOrb,
- .callback = AnimPsychoBoost,
-};
-
-// For the rectangular wall sprite used by Reflect, Mirror Coat, etc
-static void AnimDefensiveWall(struct Sprite *sprite)
-{
- u8 isContest = IsContest();
-
- if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || isContest)
- {
- sprite->oam.priority = 2;
- sprite->subpriority = 200;
- }
-
- if (!isContest)
- {
- u8 battlerCopy;
- u8 battler = battlerCopy = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- u8 rank = GetBattlerSpriteBGPriorityRank(battler);
- int var0 = 1;
- u8 toBG_2 = (rank ^ var0) != 0;
-
- if (IsBattlerSpriteVisible(battler))
- MoveBattlerSpriteToBG(battler, toBG_2, FALSE);
-
- battler = BATTLE_PARTNER(battlerCopy);
- if (IsBattlerSpriteVisible(battler))
- MoveBattlerSpriteToBG(battler, toBG_2 ^ var0, FALSE);
- }
-
- if (!isContest && IsDoubleBattle())
- {
- if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
- {
- sprite->pos1.x = 72;
- sprite->pos1.y = 80;
- }
- else
- {
- sprite->pos1.x = 176;
- sprite->pos1.y = 40;
- }
- }
- else
- {
- if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
- gBattleAnimArgs[0] = -gBattleAnimArgs[0];
-
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0];
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1];
- }
-
- sprite->data[0] = 256 + IndexOfSpritePaletteTag(gBattleAnimArgs[2]) * 16;
-
- if (isContest)
- {
- sprite->pos1.y += 9;
- sprite->callback = AnimDefensiveWall_Step2;
- sprite->callback(sprite);
- }
- else
- {
- sprite->callback = AnimDefensiveWall_Step1;
- }
-}
-
-static void AnimDefensiveWall_Step1(struct Sprite *sprite)
-{
- u8 battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- if (!sprite->data[7])
- {
- sprite->data[7] = 1;
- return;
- }
-
- if (IsBattlerSpriteVisible(battler))
- gSprites[gBattlerSpriteIds[battler]].invisible = TRUE;
-
- battler = BATTLE_PARTNER(battler);
- if (IsBattlerSpriteVisible(battler))
- gSprites[gBattlerSpriteIds[battler]].invisible = TRUE;
-
- sprite->callback = AnimDefensiveWall_Step2;
- sprite->callback(sprite);
-}
-
-static void AnimDefensiveWall_Step2(struct Sprite *sprite)
-{
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3]));
- if (sprite->data[3] == 13)
- sprite->callback = AnimDefensiveWall_Step3;
- else
- sprite->data[3]++;
-}
-
-static void AnimDefensiveWall_Step3(struct Sprite *sprite)
-{
- u16 color;
- u16 startOffset;
- int i;
-
- if (++sprite->data[1] == 2)
- {
- sprite->data[1] = 0;
- startOffset = sprite->data[0];
- color = gPlttBufferFaded[startOffset + 8];
-
- for (i = 8; i > 0; i--)
- gPlttBufferFaded[startOffset + i] = gPlttBufferFaded[startOffset + i - 1];
-
- gPlttBufferFaded[startOffset + 1] = color;
-
- if (++sprite->data[2] == 16)
- sprite->callback = AnimDefensiveWall_Step4;
- }
-}
-
-static void AnimDefensiveWall_Step4(struct Sprite *sprite)
-{
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3]));
-
- if (--sprite->data[3] == -1)
- {
- if (!IsContest())
- {
- u8 battlerCopy;
- u8 battler = battlerCopy = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
-
- if (IsBattlerSpriteVisible(battler))
- gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
-
- battler = BATTLE_PARTNER(battlerCopy);
- if (IsBattlerSpriteVisible(battler))
- gSprites[gBattlerSpriteIds[battler]].invisible = FALSE;
- }
-
- sprite->invisible = TRUE;
- sprite->callback = AnimDefensiveWall_Step5;
- }
-}
-
-static void AnimDefensiveWall_Step5(struct Sprite *sprite)
-{
- if (!IsContest())
- {
- u8 battlerCopy;
- u8 battler = battlerCopy = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- u8 rank = GetBattlerSpriteBGPriorityRank(battler);
- int var0 = 1;
- u8 toBG_2 = (rank ^ var0) != 0;
-
- if (IsBattlerSpriteVisible(battler))
- sub_80A477C(toBG_2);
-
- battler = battlerCopy ^ 2;
- if (IsBattlerSpriteVisible(battler))
- sub_80A477C(toBG_2 ^ var0);
- }
-
- sprite->callback = DestroyAnimSprite;
-}
-
-// Animates the sparkle that appears during Reflect or Light Screen/Mirror Coat
-static void AnimWallSparkle(struct Sprite *sprite)
-{
- if (sprite->data[0] == 0)
- {
- int arg3 = gBattleAnimArgs[3];
- bool8 respectMonPicOffsets = FALSE;
- if (arg3 == 0)
- respectMonPicOffsets = TRUE;
-
- if (!IsContest() && IsDoubleBattle())
- {
- if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
- {
- sprite->pos1.x = 72 - gBattleAnimArgs[0];
- sprite->pos1.y = gBattleAnimArgs[1] + 80;
- }
- else
- {
- sprite->pos1.x = gBattleAnimArgs[0] + 176;
- sprite->pos1.y = gBattleAnimArgs[1] + 40;
- }
- }
- else
- {
- if (gBattleAnimArgs[2] == ANIM_ATTACKER)
- InitSpritePosToAnimAttacker(sprite, respectMonPicOffsets);
- else
- InitSpritePosToAnimTarget(sprite, respectMonPicOffsets);
- }
-
- sprite->data[0]++;
- }
- else
- {
- if (sprite->animEnded || sprite->affineAnimEnded)
- DestroySpriteAndMatrix(sprite);
- }
-}
-
-static void AnimBentSpoon(struct Sprite *sprite)
-{
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
-
- if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
- {
- StartSpriteAnim(sprite, 1);
- sprite->pos1.x -= 40;
- sprite->pos1.y += 10;
- sprite->data[1] = -1;
- }
- else
- {
- sprite->pos1.x += 40;
- sprite->pos1.y -= 10;
- sprite->data[1] = 1;
- }
-
- StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = RunStoredCallbackWhenAnimEnds;
-}
-
-// Used by Amnesia
-static void AnimQuestionMark(struct Sprite *sprite)
-{
- s16 x = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2;
- s16 y = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / -2;
-
- if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
- x = -x;
-
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + x;
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + y;
-
- if (sprite->pos1.y < 16)
- sprite->pos1.y = 16;
-
- StoreSpriteCallbackInData6(sprite, AnimQuestionMark_Step1);
- sprite->callback = RunStoredCallbackWhenAnimEnds;
-}
-
-static void AnimQuestionMark_Step1(struct Sprite *sprite)
-{
- sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
- sprite->affineAnims = sAffineAnims_QuestionMark;
- sprite->data[0] = 0;
- InitSpriteAffineAnim(sprite);
- sprite->callback = AnimQuestionMark_Step2;
-}
-
-static void AnimQuestionMark_Step2(struct Sprite *sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- if (sprite->affineAnimEnded)
- {
- FreeOamMatrix(sprite->oam.matrixNum);
- sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
- sprite->data[1] = 18;
- sprite->data[0]++;
- }
- break;
- case 1:
- if (--sprite->data[1] == -1)
- DestroyAnimSprite(sprite);
- break;
- }
-}
-
-void AnimTask_MeditateStretchAttacker(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
- u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
- task->data[0] = spriteId;
- PrepareAffineAnimInTaskData(task, spriteId, sAffineAnim_MeditateStretchAttacker);
- task->func = AnimTask_MeditateStretchAttacker_Step;
-}
-
-static void AnimTask_MeditateStretchAttacker_Step(u8 taskId)
-{
- if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
- DestroyAnimVisualTask(taskId);
-}
-
-void AnimTask_Teleport(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
- u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
- task->data[0] = spriteId;
- task->data[1] = 0;
- task->data[2] = 0;
- task->data[3] = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 4 : 8;
-
- PrepareAffineAnimInTaskData(task, task->data[0], sAffineAnim_Teleport);
- task->func = AnimTask_Teleport_Step;
-}
-
-static void AnimTask_Teleport_Step(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
-
- switch (task->data[1])
- {
- case 0:
- RunAffineAnimFromTaskData(task);
- if (++task->data[2] > 19)
- task->data[1]++;
- break;
- case 1:
- if (task->data[3] != 0)
- {
- gSprites[task->data[0]].pos2.y -= 8;
- task->data[3]--;
- }
- else
- {
- gSprites[task->data[0]].invisible = TRUE;
- gSprites[task->data[0]].pos1.x = 272;
- ResetSpriteRotScale(task->data[0]);
- DestroyAnimVisualTask(taskId);
- }
- break;
- }
-}
-
-void AnimTask_ImprisonOrbs(u8 taskId)
-{
- u16 var0, var1;
-
- struct Task *task = &gTasks[taskId];
-
- task->data[3] = 16;
- task->data[4] = 0;
- task->data[13] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
- task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
-
- var0 = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 3;
- var1 = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 3;
- task->data[12] = var0 > var1 ? var0 : var1;
-
- SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
-
- task->func = AnimTask_ImprisonOrbs_Step;
-}
-
-static void AnimTask_ImprisonOrbs_Step(u8 taskId)
-{
- u16 i;
- u8 spriteId;
- struct Task *task = &gTasks[taskId];
-
- switch (task->data[0])
- {
- case 0:
- if (++task->data[1] > 8)
- {
- task->data[1] = 0;
- spriteId = CreateSprite(&gImprisonOrbSpriteTemplate, task->data[13], task->data[14], 0);
- task->data[task->data[2] + 8] = spriteId;
- if (spriteId != MAX_SPRITES)
- {
- switch (task->data[2])
- {
- case 0:
- gSprites[spriteId].pos2.x = task->data[12];
- gSprites[spriteId].pos2.y = -task->data[12];
- break;
- case 1:
- gSprites[spriteId].pos2.x = -task->data[12];
- gSprites[spriteId].pos2.y = task->data[12];
- break;
- case 2:
- gSprites[spriteId].pos2.x = task->data[12];
- gSprites[spriteId].pos2.y = task->data[12];
- break;
- case 3:
- gSprites[spriteId].pos2.x = -task->data[12];
- gSprites[spriteId].pos2.y = -task->data[12];
- break;
- }
- }
-
- if (++task->data[2] == 5)
- task->data[0]++;
- }
- break;
- case 1:
- if (task->data[1] & 1)
- task->data[3]--;
- else
- task->data[4]++;
-
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
- if (++task->data[1] == 32)
- {
- for (i = 8; i < 13; i++)
- {
- if (task->data[i] != 64)
- DestroySprite(&gSprites[task->data[i]]);
- }
-
- task->data[0]++;
- }
- break;
- case 2:
- task->data[0]++;
- break;
- case 3:
- SetGpuReg(REG_OFFSET_BLDALPHA, 0);
- SetGpuReg(REG_OFFSET_BLDCNT, 0);
- DestroyAnimVisualTask(taskId);
- break;
- }
-}
-
-static void sub_810FB60(struct Sprite *sprite)
-{
- if (sprite->data[1] > sprite->data[0] - 10)
- sprite->invisible = sprite->data[1] & 1;
-
- if (sprite->data[1] == sprite->data[0])
- DestroyAnimSprite(sprite);
-
- sprite->data[1]++;
-}
-
-static void AnimRedX(struct Sprite *sprite)
-{
- if (gBattleAnimArgs[0] == ANIM_ATTACKER)
- {
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
- }
-
- sprite->data[0] = gBattleAnimArgs[1];
- sprite->callback = sub_810FB60;
-}
-
-void AnimTask_SkillSwap(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
-
- if (IsContest())
- {
- if (gBattleAnimArgs[0] == ANIM_TARGET)
- {
- task->data[10] = -10;
- task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8;
- task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) + 8;
- task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_RIGHT) - 8;
- task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) + 8;
- }
- else
- {
- task->data[10] = 10;
- task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_LEFT) + 8;
- task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM) - 8;
- task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_LEFT) + 8;
- task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM) - 8;
- }
- }
- else
- {
- if (gBattleAnimArgs[0] == 1)
- {
- task->data[10] = -10;
- task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_LEFT) + 8;
- task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) + 8;
- task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_LEFT) + 8;
- task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) + 8;
- }
- else
- {
- task->data[10] = 10;
- task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_RIGHT) - 8;
- task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM) - 8;
- task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8;
- task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM) - 8;
- }
- }
-
- task->data[1] = 6;
- task->func = AnimTask_SkillSwap_Step;
-}
-
-static void AnimTask_SkillSwap_Step(u8 taskId)
-{
- u8 spriteId;
- struct Task *task = &gTasks[taskId];
-
- switch (task->data[0])
- {
- case 0:
- if (++task->data[1] > 6)
- {
- task->data[1] = 0;
- spriteId = CreateSprite(&gSkillSwapOrbSpriteTemplate, task->data[11], task->data[12], 0);
- if (spriteId != 64)
- {
- gSprites[spriteId].data[0] = 16;
- gSprites[spriteId].data[2] = task->data[13];
- gSprites[spriteId].data[4] = task->data[14];
- gSprites[spriteId].data[5] = task->data[10];
-
- InitAnimArcTranslation(&gSprites[spriteId]);
- StartSpriteAffineAnim(&gSprites[spriteId], task->data[2] & 3);
- }
-
- if (++task->data[2] == 12)
- task->data[0]++;
- }
- break;
- case 1:
- if (++task->data[1] > 17)
- DestroyAnimVisualTask(taskId);
- break;
- }
-}
-
-static void AnimSkillSwapOrb(struct Sprite *sprite)
-{
- if (TranslateAnimHorizontalArc(sprite))
- {
- FreeOamMatrix(sprite->oam.matrixNum);
- DestroySprite(sprite);
- }
-}
-
-// The scanline effect that distorts the target during Extrasensory by segmenting the mon vertically and shifting the slices
-// arg0: Stage. Stage 0 is a slight right distortion, 1 is a medium left distortion, and 2 is a severe right distortion
-void AnimTask_ExtrasensoryDistortion(u8 taskId)
-{
- s16 i;
- u8 yOffset;
- struct ScanlineEffectParams scanlineParams;
- struct Task *task = &gTasks[taskId];
-
- yOffset = GetBattlerYCoordWithElevation(gBattleAnimTarget);
- task->data[14] = yOffset - 32;
-
- switch (gBattleAnimArgs[0])
- {
- case 0:
- task->data[11] = 2;
- task->data[12] = 5;
- task->data[13] = 64;
- task->data[15] = yOffset + 32;
- break;
- case 1:
- task->data[11] = 2;
- task->data[12] = 5;
- task->data[13] = 192;
- task->data[15] = yOffset + 32;
- break;
- case 2:
- task->data[11] = 4;
- task->data[12] = 4;
- task->data[13] = 0;
- task->data[15] = yOffset + 32;
- break;
- }
-
- if (task->data[14] < 0)
- task->data[14] = 0;
-
- if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1)
- {
- task->data[10] = gBattle_BG1_X;
- scanlineParams.dmaDest = &REG_BG1HOFS;
- }
- else
- {
- task->data[10] = gBattle_BG2_X;
- scanlineParams.dmaDest = &REG_BG2HOFS;
- }
-
- i = task->data[14];
- while (i <= task->data[14] + 64)
- {
- gScanlineEffectRegBuffers[0][i] = task->data[10];
- gScanlineEffectRegBuffers[1][i] = task->data[10];
- i++;
- }
-
- scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
- scanlineParams.initState = 1;
- scanlineParams.unused9 = 0;
- ScanlineEffect_SetParams(scanlineParams);
- task->func = AnimTask_ExtrasensoryDistortion_Step;
-}
-
-static void AnimTask_ExtrasensoryDistortion_Step(u8 taskId)
-{
- s16 sineIndex, i;
- struct Task *task = &gTasks[taskId];
-
- switch (task->data[0])
- {
- case 0:
- sineIndex = task->data[13];
- i = task->data[14];
- while (i <= task->data[15])
- {
- s16 var2 = (gSineTable[sineIndex] >> task->data[12]);
- if (var2 > 0)
- var2 += (task->data[1] & 3);
- else if (var2 < 0)
- var2 -= (task->data[1] & 3);
-
- gScanlineEffectRegBuffers[0][i] = task->data[10] + var2;
- gScanlineEffectRegBuffers[1][i] = task->data[10] + var2;
- sineIndex += task->data[11];
- i++;
- }
-
- if (++task->data[1] > 23)
- task->data[0]++;
- break;
- case 1:
- gScanlineEffect.state = 3;
- task->data[0]++;
- break;
- case 2:
- DestroyAnimVisualTask(taskId);
- break;
- }
-}
-
-// Creates a cloned transparent sprite of the battler that grows and then shrinks back to original size. Used by Extrasensory
-// arg0: battler
-void AnimTask_TransparentCloneGrowAndShrink(u8 taskId)
-{
- s16 spriteId;
- s16 matrixNum;
- struct Task *task = &gTasks[taskId];
-
- matrixNum = AllocOamMatrix();
- if (matrixNum == 0xFF)
- {
- DestroyAnimVisualTask(taskId);
- return;
- }
-
- spriteId = CloneBattlerSpriteWithBlend(gBattleAnimArgs[0]);
- if (spriteId < 0)
- {
- FreeOamMatrix(matrixNum);
- DestroyAnimVisualTask(taskId);
- return;
- }
-
- gSprites[spriteId].callback = SpriteCallbackDummy;
- gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
- gSprites[spriteId].oam.matrixNum = matrixNum;
- gSprites[spriteId].affineAnimPaused = 1;
- gSprites[spriteId].subpriority++;
- SetSpriteRotScale(spriteId, 256, 256, 0);
- CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
- task->data[13] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
- task->data[14] = matrixNum;
- task->data[15] = spriteId;
- task->func = AnimTask_TransparentCloneGrowAndShrink_Step;
-}
-
-static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
-
- switch (task->data[0])
- {
- case 0:
- task->data[1] += 4;
- task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);
- SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0);
- SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]);
- if (task->data[1] == 48)
- task->data[0]++;
- break;
- case 1:
- task->data[1] -= 4;
- task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);;
- SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0);
- SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]);
- if (task->data[1] == 0)
- task->data[0]++;
- break;
- case 2:
- obj_delete_but_dont_free_vram(&gSprites[task->data[15]]);
- task->data[0]++;
- break;
- case 3:
- FreeOamMatrix(task->data[14]);
- DestroyAnimVisualTask(taskId);
- break;
- }
-}
-
-static void AnimPsychoBoost(struct Sprite *sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
-
- if (IsContest())
- sprite->pos1.y += 12;
-
- sprite->data[1] = 8;
- SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
- sprite->data[0]++;
- break;
- case 1:
- if (sprite->affineAnimEnded)
- {
- PlaySE12WithPanning(SE_W100, BattleAnimAdjustPanning(-64));
- ChangeSpriteAffineAnim(sprite, 1);
- sprite->data[0]++;
- }
- break;
- case 2:
- if (sprite->data[2]++ > 1)
- {
- sprite->data[2] = 0;
- sprite->data[1]--;
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
- if (sprite->data[1] == 0)
- {
- sprite->data[0]++;
- sprite->invisible = TRUE;
- }
- }
-
- sprite->data[3] += 0x380;
- sprite->pos2.y -= sprite->data[3] >> 8;
- sprite->data[3] &= 0xFF;
- break;
- case 3:
- SetGpuReg(REG_OFFSET_BLDCNT, 0);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0);
- DestroyAnimSprite(sprite);
- break;
- }
-}