Add Ion Deluge animation (#5467)
This commit is contained in:
parent
5b4acea651
commit
130d6042e0
2 changed files with 82 additions and 0 deletions
|
@ -7710,6 +7710,17 @@ gBattleAnimMove_NobleRoar::
|
||||||
end
|
end
|
||||||
|
|
||||||
gBattleAnimMove_IonDeluge::
|
gBattleAnimMove_IonDeluge::
|
||||||
|
loadspritegfx ANIM_TAG_IONS
|
||||||
|
loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER, 10, 12
|
||||||
|
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB_YELLOW
|
||||||
|
waitforvisualfinish
|
||||||
|
createvisualtask AnimTask_CreateIons, 2, 0, 3, 120
|
||||||
|
createvisualtask AnimTask_CreateIons, 2, 0, 3, 120
|
||||||
|
delay 120
|
||||||
|
delay 30
|
||||||
|
waitforvisualfinish
|
||||||
|
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 4, 0, RGB_YELLOW
|
||||||
|
waitforvisualfinish
|
||||||
end
|
end
|
||||||
|
|
||||||
gBattleAnimMove_ParabolicCharge::
|
gBattleAnimMove_ParabolicCharge::
|
||||||
|
|
|
@ -29,6 +29,8 @@ static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId);
|
||||||
static void AnimShockWaveProgressingBolt(struct Sprite *);
|
static void AnimShockWaveProgressingBolt(struct Sprite *);
|
||||||
static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId);
|
static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId);
|
||||||
static void AnimShockWaveLightning(struct Sprite *sprite);
|
static void AnimShockWaveLightning(struct Sprite *sprite);
|
||||||
|
static void AnimIon(struct Sprite *);
|
||||||
|
static void AnimIon_Step(struct Sprite *);
|
||||||
|
|
||||||
static const union AnimCmd sAnim_Lightning[] =
|
static const union AnimCmd sAnim_Lightning[] =
|
||||||
{
|
{
|
||||||
|
@ -559,6 +561,34 @@ const struct SpriteTemplate gSeedFlareGreenChargeTemplate =
|
||||||
.callback = AnimGrowingChargeOrb
|
.callback = AnimGrowingChargeOrb
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const union AnimCmd sAnim_Ion[] =
|
||||||
|
{
|
||||||
|
ANIMCMD_FRAME(0, 2),
|
||||||
|
ANIMCMD_FRAME(8, 2),
|
||||||
|
ANIMCMD_FRAME(16, 2),
|
||||||
|
ANIMCMD_FRAME(24, 6),
|
||||||
|
ANIMCMD_FRAME(32, 2),
|
||||||
|
ANIMCMD_FRAME(40, 2),
|
||||||
|
ANIMCMD_FRAME(48, 2),
|
||||||
|
ANIMCMD_END,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const union AnimCmd *const sAnims_Ion[] =
|
||||||
|
{
|
||||||
|
sAnim_Ion,
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct SpriteTemplate gIonSpriteTemplate =
|
||||||
|
{
|
||||||
|
.tileTag = ANIM_TAG_IONS,
|
||||||
|
.paletteTag = ANIM_TAG_IONS,
|
||||||
|
.oam = &gOamData_AffineOff_ObjNormal_16x32,
|
||||||
|
.anims = sAnims_Ion,
|
||||||
|
.images = NULL,
|
||||||
|
.affineAnims = gDummySpriteAffineAnimTable,
|
||||||
|
.callback = AnimIon,
|
||||||
|
};
|
||||||
|
|
||||||
// functions
|
// functions
|
||||||
static void AnimLightning(struct Sprite *sprite)
|
static void AnimLightning(struct Sprite *sprite)
|
||||||
{
|
{
|
||||||
|
@ -1452,3 +1482,44 @@ static void AnimShockWaveLightning(struct Sprite *sprite)
|
||||||
DestroySprite(sprite);
|
DestroySprite(sprite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy of Rain Dance's function but displays the ion sprite instead
|
||||||
|
// arg 0: initial step
|
||||||
|
// arg 1: amount (?)
|
||||||
|
// arg 2: duration
|
||||||
|
void AnimTask_CreateIons(u8 taskId)
|
||||||
|
{
|
||||||
|
u8 x, y;
|
||||||
|
|
||||||
|
if (gTasks[taskId].data[0] == 0)
|
||||||
|
{
|
||||||
|
gTasks[taskId].data[1] = gBattleAnimArgs[0];
|
||||||
|
gTasks[taskId].data[2] = gBattleAnimArgs[1];
|
||||||
|
gTasks[taskId].data[3] = gBattleAnimArgs[2];
|
||||||
|
}
|
||||||
|
gTasks[taskId].data[0]++;
|
||||||
|
if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1)
|
||||||
|
{
|
||||||
|
x = Random2() % DISPLAY_WIDTH;
|
||||||
|
y = Random2() % (DISPLAY_HEIGHT / 2);
|
||||||
|
CreateSprite(&gIonSpriteTemplate, x, y, 4);
|
||||||
|
}
|
||||||
|
if (gTasks[taskId].data[0] == gTasks[taskId].data[3])
|
||||||
|
DestroyAnimVisualTask(taskId);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void AnimIon(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sprite->callback = AnimIon_Step;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void AnimIon_Step(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
if (++sprite->data[0] <= 13)
|
||||||
|
{
|
||||||
|
sprite->x2++;
|
||||||
|
sprite->y2 += 4;
|
||||||
|
}
|
||||||
|
if (sprite->animEnded)
|
||||||
|
DestroySprite(sprite);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue