Mega evolution animation is a little smoother (#4816)
* Smoother primal/mega animation * Just to make the CI run. It needs to run * Update src/battle_anim_effects_3.c --------- Co-authored-by: kleeenexfeu <94004034+kleeenexfeu@users.noreply.github.com> Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
This commit is contained in:
parent
832a7b286d
commit
16e8be1233
@ -28060,7 +28060,7 @@ General_MegaEvolution:
|
||||
delay 20
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_TransformMon, 2, 1, 0
|
||||
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
|
||||
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
|
||||
waitforvisualfinish
|
||||
@ -28251,7 +28251,7 @@ General_PrimalReversion_Alpha:
|
||||
delay 20
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_TransformMon, 2, 1, 0
|
||||
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
|
||||
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
|
||||
waitforvisualfinish
|
||||
@ -28278,7 +28278,7 @@ General_PrimalReversion_Omega:
|
||||
delay 20
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_TransformMon, 2, 1, 0
|
||||
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
|
||||
createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
|
||||
waitforvisualfinish
|
||||
@ -28314,7 +28314,7 @@ General_UltraBurst::
|
||||
call LightThatBurnsTheSkyGreenSparks
|
||||
delay 20
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
|
||||
createvisualtask AnimTask_TransformMon, 2, 1, 0
|
||||
createvisualtask AnimTask_HideSwapSprite, 2, 1, 0
|
||||
createsprite gUltraBurstSymbolSpriteTemplate, ANIM_ATTACKER, 0x0, 0x0, 0x0, 0x0, 0x0
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
|
||||
|
||||
@ -2378,6 +2378,88 @@ void AnimTask_SwallowDeformMon(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void AnimTask_HideSwapSprite(u8 taskId)
|
||||
{
|
||||
int i, j;
|
||||
u8 position;
|
||||
struct BattleAnimBgData animBg;
|
||||
u8 *dest;
|
||||
u8 *src;
|
||||
u16 *bgTilemap;
|
||||
|
||||
u8 spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
{
|
||||
case 0:
|
||||
gTasks[taskId].data[11] = gSprites[spriteId].x; // Save battler position
|
||||
gSprites[spriteId].x = -64; // hide it from screen to avoid the blip/glitch effect when swapping the sprite.
|
||||
gTasks[taskId].data[10] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1]);
|
||||
GetBgDataForTransform(&animBg, gBattleAnimAttacker);
|
||||
|
||||
if (IsContest())
|
||||
position = 0;
|
||||
else
|
||||
position = GetBattlerPosition(gBattleAnimAttacker);
|
||||
|
||||
src = gMonSpritesGfxPtr->spritesGfx[position];
|
||||
dest = animBg.bgTiles;
|
||||
CpuCopy32(src, dest, MON_PIC_SIZE);
|
||||
LoadBgTiles(1, animBg.bgTiles, 0x800, animBg.tilesOffset);
|
||||
if (IsContest())
|
||||
{
|
||||
if (IsSpeciesNotUnown(gContestResources->moveAnim->species) != IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
|
||||
{
|
||||
bgTilemap = (u16 *)animBg.bgTilemap;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
u16 temp = bgTilemap[j + i * 0x20];
|
||||
bgTilemap[j + i * 0x20] = bgTilemap[(7 - j) + i * 0x20];
|
||||
bgTilemap[(7 - j) + i * 0x20] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
bgTilemap[j + i * 0x20] ^= 0x400;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteContest;
|
||||
else
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteOpponentSide;
|
||||
|
||||
StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], BATTLER_AFFINE_NORMAL);
|
||||
}
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
gSprites[spriteId].x = gTasks[taskId].data[11]; // restores battler position
|
||||
if (!IsContest())
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
|
||||
{
|
||||
if (gTasks[taskId].data[10] == 0)
|
||||
SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies);
|
||||
}
|
||||
}
|
||||
|
||||
DestroyAnimVisualTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void AnimTask_TransformMon(u8 taskId)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user