Skip to content

Commit

Permalink
Add Ion Deluge animation
Browse files Browse the repository at this point in the history
  • Loading branch information
kittenchilly committed Oct 3, 2024
1 parent 80af2af commit 661d197
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 0 deletions.
11 changes: 11 additions & 0 deletions data/battle_anim_scripts.s
Original file line number Diff line number Diff line change
Expand Up @@ -7672,6 +7672,17 @@ gBattleAnimMove_NobleRoar::
end

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

gBattleAnimMove_ParabolicCharge::
Expand Down
67 changes: 67 additions & 0 deletions src/battle_anim_electric.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId);
static void AnimShockWaveProgressingBolt(struct Sprite *);
static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId);
static void AnimShockWaveLightning(struct Sprite *sprite);
static void AnimIon(struct Sprite *);
static void AnimIon_Step(struct Sprite *);

static const union AnimCmd sAnim_Lightning[] =
{
Expand Down Expand Up @@ -559,6 +561,34 @@ const struct SpriteTemplate gSeedFlareGreenChargeTemplate =
.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
static void AnimLightning(struct Sprite *sprite)
{
Expand Down Expand Up @@ -1452,3 +1482,40 @@ static void AnimShockWaveLightning(struct Sprite *sprite)
DestroySprite(sprite);
}
}

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);
}

0 comments on commit 661d197

Please sign in to comment.