New Attack Animations: 25w20a (#6886)

This commit is contained in:
ShinyVolcarona 2025-05-31 05:34:24 -04:00 committed by GitHub
parent 096493aa35
commit 7f4f391e9b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 1116 additions and 28 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2581,7 +2581,7 @@ static void AnimPencil_Step(struct Sprite *sprite)
sprite->y -= 1;
sprite->data[2]++;
if (sprite->data[2] % 10 == 0)
PlaySE12WithPanning(SE_M_SKETCH, sprite->data[6]);
PlaySE12WithPanning((gAnimMoveIndex == MOVE_DOODLE) ? SE_M_REVERSAL : SE_M_SKETCH, sprite->data[6]);
}
sprite->data[4] += sprite->data[3];
if (sprite->data[4] > 31)

View File

@ -343,6 +343,19 @@ static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_2[] =
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_3[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 60),
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_LOOP(0),
AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5),
AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5),
AFFINEANIMCMD_LOOP(10),
AFFINEANIMCMD_FRAME(-4, -4, 0, 60),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_4[] =
{
AFFINEANIMCMD_FRAME(5, 5, 0, 0),
@ -368,6 +381,11 @@ const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb2[] =
sAffineAnim_GrowingElectricOrb_4,
};
const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb3[] =
{
sAffineAnim_GrowingElectricOrb_3,
};
const struct SpriteTemplate gGrowingChargeOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
@ -391,6 +409,18 @@ const struct SpriteTemplate gGrowingChargeOrb2SpriteTemplate =
.callback = AnimGrowingChargeOrb,
};
// For Dynamax Cannon - orb gets smaller at the end
const struct SpriteTemplate gGrowingChargeOrb3SpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb3,
.callback = AnimGrowingChargeOrb,
};
static const union AnimCmd sAnim_ElectricPuff[] =
{
ANIMCMD_FRAME(0, 3),
@ -492,6 +522,17 @@ const struct SpriteTemplate gFairyLockChainsSpriteTemplate =
.callback = AnimVoltTackleBolt,
};
const struct SpriteTemplate gCollisionCourseSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_AffineOff_ObjNormal_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimVoltTackleBolt,
};
const struct SpriteTemplate gGrowingShockWaveOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
@ -1256,19 +1297,25 @@ void AnimTask_VoltTackleBolt(u8 taskId)
static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId)
{
u32 spriteId;
bool32 isFairyLock = (gAnimMoveIndex == MOVE_FAIRY_LOCK);
if (isFairyLock)
spriteId = CreateSprite(&gFairyLockChainsSpriteTemplate, task->data[3], task->data[5] + 10, 35);
else
spriteId = CreateSprite(&gVoltTackleBoltSpriteTemplate, task->data[3], task->data[5], 35);
switch(gAnimMoveIndex)
{
case MOVE_FAIRY_LOCK:
spriteId = CreateSprite(&gFairyLockChainsSpriteTemplate, task->data[3], task->data[5] + 10, 35);
break;
case MOVE_COLLISION_COURSE:
spriteId = CreateSprite(&gCollisionCourseSpriteTemplate, task->data[3], task->data[5], 35);
break;
default:
spriteId = CreateSprite(&gVoltTackleBoltSpriteTemplate, task->data[3], task->data[5], 35);
}
bool32 doDestroyOamMatrix = (gAnimMoveIndex == MOVE_FAIRY_LOCK) || (gAnimMoveIndex == MOVE_COLLISION_COURSE);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[6] = taskId;
gSprites[spriteId].data[7] = 7;
gSprites[spriteId].data[1] = isFairyLock ? 25 : 12; // How long the chains / bolts stay on screen.
gSprites[spriteId].data[2] = isFairyLock; // Whether to destroy the Oam Matrix.
gSprites[spriteId].data[1] = (gAnimMoveIndex == MOVE_FAIRY_LOCK) ? 25 : 12; // How long the chains / bolts stay on screen.
gSprites[spriteId].data[2] = doDestroyOamMatrix; // Whether to destroy the Oam Matrix.
task->data[7]++;
}

View File

@ -356,6 +356,17 @@ const struct SpriteTemplate gSkyAttackBirdSpriteTemplate =
.callback = AnimSkyAttackBird,
};
const struct SpriteTemplate gGlaiveRushSpriteTemplate =
{
.tileTag = ANIM_TAG_DRAGON_ASCENT,
.paletteTag = ANIM_TAG_DRAGON_ASCENT,
.oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSkyAttackBird,
};
// same as AnimEllipticalGust but centered on targets in a double battle
static void AnimEllipticalGustCentered(struct Sprite *sprite)
{

View File

@ -4403,6 +4403,17 @@ const struct SpriteTemplate gUTurnBallBackSpriteTemplate =
.callback = AnimAbsorptionOrb,
};
// dynamax cannon
const struct SpriteTemplate gSpriteTemplate_DynamaxCannonOrb = {
.tileTag = ANIM_TAG_HYDRO_PUMP,
.paletteTag = ANIM_TAG_HYDRO_PUMP,
.oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_HydroCannonBall,
.callback = AnimShadowBall
};
// wicked blow
static const union AffineAnimCmd sSpriteAffineAnim_DrainPunchFist[] = {
AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size

View File

@ -1078,3 +1078,14 @@ const struct SpriteTemplate gSaltCureSwirlSpriteTemplate =
.affineAnims = gAffineAnims_Whirlpool,
.callback = AnimParticleInVortex,
};
const struct SpriteTemplate gRockPlumeSpriteTemplate =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gAnims_FlyingRock,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDirtPlumeParticle,
};