mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-25 11:14:15 +01:00
Add many gen 8 move animations (#2861)
* port many gen8 and 9 move anims from cfru * fix thunder cage, shell smash, shelter anims. update anim credits --------- Co-authored-by: ghoulslash <pokevoyager0@gmail.com> Co-authored-by: Eduardo Quezada D'Ottone <eduardo602002@gmail.com>
This commit is contained in:
parent
6342da3b58
commit
7371a9e401
File diff suppressed because it is too large
Load Diff
19
graphics/battle_anims/backgrounds/chloroblast.pal
Normal file
19
graphics/battle_anims/backgrounds/chloroblast.pal
Normal file
@ -0,0 +1,19 @@
|
||||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
0 164 255
|
||||
16 123 41
|
||||
32 164 82
|
||||
57 205 131
|
||||
82 238 172
|
||||
139 246 205
|
||||
197 255 230
|
||||
238 255 238
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
@ -213,7 +213,7 @@ u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
|
||||
#define STAT_ANIM_MULTIPLE_MINUS1 57
|
||||
#define STAT_ANIM_MULTIPLE_MINUS2 58
|
||||
void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
|
||||
extern const union AnimCmd *const sAnims_SpinningSparkle[];
|
||||
extern const union AnimCmd *const gAnims_SpinningSparkle[];
|
||||
|
||||
// battle_anim_ground.c
|
||||
void AnimTask_HorizontalShake(u8 taskId);
|
||||
@ -235,6 +235,7 @@ void InitStatsChangeAnimation(u8);
|
||||
void StartMonScrollingBgMask(u8 taskId, int unused, u16 scrollSpeed, u8 battler, bool8 includePartner, u8 numFadeSteps, u8 fadeStepDelay, u8 duration, const u32 *gfx, const u32 *tilemap, const u32 *palette);
|
||||
|
||||
// battle_anim_effects_1.c
|
||||
void AnimFalseSwipeSlice_Step3(struct Sprite *);
|
||||
void SetSpriteNextToMonHead(u8 battler, struct Sprite *sprite);
|
||||
void AnimMoveTwisterParticle(struct Sprite *sprite);
|
||||
void AnimParticleBurst(struct Sprite *);
|
||||
@ -283,6 +284,7 @@ extern const union AnimCmd *const gIngrainRootAnimTable[];
|
||||
extern const union AffineAnimCmd *const gSwiftStarAffineAnimTable[];
|
||||
extern const union AnimCmd *const gMetronomeThroughtBubbleAnimTable[];
|
||||
extern const union AffineAnimCmd *const gStockpileAbsorptionOrbAffineAnimTable[];
|
||||
extern const union AnimCmd *const gSlashSliceAnimTable[];
|
||||
|
||||
// battle_anim_effects_2.c
|
||||
void AnimUproarRing(struct Sprite *sprite);
|
||||
@ -301,8 +303,10 @@ extern const union AffineAnimCmd *const gWaterPulseRingAffineAnimTable[];
|
||||
extern const union AffineAnimCmd *const gHyperVoiceRingAffineAnimTable[];
|
||||
extern const union AnimCmd *const gCoinAnimTable[];
|
||||
extern const union AffineAnimCmd *const gHiddenPowerOrbAffineAnimTable[];
|
||||
extern const union AffineAnimCmd *const gBulletSeedAffineAnimTable[];
|
||||
|
||||
// battle_anim_effects_3.c
|
||||
void AnimKnockOffStrike_Step(struct Sprite *sprite);
|
||||
void AnimBlackSmoke(struct Sprite *sprite);
|
||||
void AnimSweetScentPetal(struct Sprite *sprite);
|
||||
void AnimTealAlert(struct Sprite *sprite);
|
||||
@ -314,6 +318,10 @@ void AnimFlatterSpotlight_Step(struct Sprite *sprite);
|
||||
extern const union AnimCmd *const gOpeningEyeAnimTable[];
|
||||
extern const union AnimCmd *const gEclipsingOrbAnimTable[];
|
||||
extern const union AffineAnimCmd *const gSpotlightAffineAnimTable[];
|
||||
extern const union AffineAnimCmd *const gSmokeBallEscapeCloudAffineAnimTable[];
|
||||
extern void AnimSmokeBallEscapeCloud(struct Sprite *sprite);
|
||||
extern const union AffineAnimCmd *const gKnockOffStrikeAffineAnimTable[];
|
||||
extern const union AnimCmd *const gKnockOffStrikeAnimTable[];
|
||||
|
||||
// battle_anim_water.c
|
||||
void AnimWaterPulseRing(struct Sprite *sprite);
|
||||
@ -337,6 +345,7 @@ extern const union AnimCmd *const gAffineAnims_AirWaveCrescent[];
|
||||
extern const union AffineAnimCmd *const gAffineAnims_FlyBallUp[];
|
||||
extern const union AffineAnimCmd *const gAffineAnims_FlyBallAttack[];
|
||||
extern const union AffineAnimCmd *const gAffineAnims_BounceBallLand[];
|
||||
extern const union AnimCmd *const gAnims_FallingFeather[];
|
||||
|
||||
// battle_anim_poison.c
|
||||
void AnimSludgeBombHitParticle(struct Sprite *);
|
||||
@ -352,6 +361,7 @@ void AnimGhostStatusSprite(struct Sprite *sprite);
|
||||
void AnimShadowBall(struct Sprite *sprite);
|
||||
void AnimTask_GrudgeFlames_Step(u8 taskId);
|
||||
extern const union AffineAnimCmd *const gAffineAnims_ShadowBall[];
|
||||
extern const union AnimCmd *const gAnims_GrudgeFlame[];
|
||||
|
||||
// battle_anim_psychic.c
|
||||
extern const union AffineAnimCmd *const gAffineAnims_PsychoBoostOrb[];
|
||||
@ -474,6 +484,7 @@ void AnimRaiseSprite(struct Sprite *sprite);
|
||||
void AnimFallingRock_Step(struct Sprite *sprite);
|
||||
void AnimFlyingSandCrescent(struct Sprite *sprite);
|
||||
void AnimRockFragment(struct Sprite *);
|
||||
void AnimRockBlastRock(struct Sprite *sprite);
|
||||
|
||||
// battle_anim_dark.c
|
||||
void AnimClawSlash(struct Sprite *sprite);
|
||||
@ -496,6 +507,7 @@ void AnimSwirlingSnowball_Step1(struct Sprite *sprite);
|
||||
extern const union AnimCmd *const gAnims_Snowball[];
|
||||
extern const union AffineAnimCmd *const gAffineAnims_IceCrystalHit[];
|
||||
extern const union AnimCmd *const gAnims_IceCrystalLarge[];
|
||||
extern const union AnimCmd *const gAnims_IceCrystalSmall[];
|
||||
extern const union AnimCmd *const gAnims_IceBallChunk[];
|
||||
extern const union AnimCmd *const gAnims_BlizzardIceCrystal[];
|
||||
|
||||
@ -520,6 +532,7 @@ void AnimDragonRageFirePlume(struct Sprite *sprite);
|
||||
void AnimDragonFireToTarget(struct Sprite *sprite);
|
||||
void AnimDragonDanceOrb(struct Sprite *sprite);
|
||||
void AnimOverheatFlame(struct Sprite *sprite);
|
||||
void AnimOutrageFlame(struct Sprite *sprite);
|
||||
|
||||
// battle_anim_new.c
|
||||
void CoreEnforcerLoadBeamTarget(struct Sprite *sprite);
|
||||
|
@ -212,6 +212,8 @@ bool8 IsMoveAffectedByParentalBond(u16 move, u8 battlerId);
|
||||
void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon);
|
||||
void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon);
|
||||
void RecalcBattlerStats(u32 battler, struct Pokemon *mon);
|
||||
bool32 IsAlly(u32 battlerAtk, u32 battlerDef);
|
||||
|
||||
// Ability checks
|
||||
bool32 IsRolePlayBannedAbilityAtk(u16 ability);
|
||||
bool32 IsRolePlayBannedAbility(u16 ability);
|
||||
|
@ -1,6 +1,8 @@
|
||||
#ifndef GUARD_CONSTANTS_BATTLE_ANIM_H
|
||||
#define GUARD_CONSTANTS_BATTLE_ANIM_H
|
||||
|
||||
#include "battle_anim_scripts.h"
|
||||
|
||||
// Sprites start at 10000 and thus must be subtracted of 10000 to account for the true index.
|
||||
#define GET_TRUE_SPRITE_INDEX(i) ((i - ANIM_SPRITES_START))
|
||||
|
||||
@ -505,6 +507,7 @@
|
||||
#define BG_AURA_SPHERE 77
|
||||
#define BG_STEEL_BEAM_OPPONENT 78
|
||||
#define BG_STEEL_BEAM_PLAYER 79
|
||||
#define BG_CHLOROBLAST 80
|
||||
|
||||
// table ids for general animations (gBattleAnims_General)
|
||||
#define B_ANIM_CASTFORM_CHANGE 0
|
||||
|
28
include/constants/battle_anim_scripts.h
Normal file
28
include/constants/battle_anim_scripts.h
Normal file
@ -0,0 +1,28 @@
|
||||
#ifndef GUARD_CONSTANTS_BATTLE_ANIM_SCRIPTS_H
|
||||
#define GUARD_CONSTANTS_BATTLE_ANIM_SCRIPTS_H
|
||||
|
||||
// shell smash
|
||||
#define SHELL_SMASH_STARTING_X 40
|
||||
#define SHELL_SMASH_MOVEMENT_DISTANCE 34
|
||||
#define SHELL_SMASH_SHELL_MOVE_IN_DURATION 16
|
||||
#define SHELL_SMASH_PAUSE_DURATION 48
|
||||
|
||||
// thunder cage
|
||||
#define THUNDER_CAGE_BALL_TIME 0x64
|
||||
|
||||
// power shift
|
||||
#define POWER_SHIFT_LEFT_X -20
|
||||
#define POWER_SHIFT_RIGHT_X 20
|
||||
#define POWER_SHIFT_DELAY 0x30
|
||||
#define POWER_SHIFT_ARC -50
|
||||
|
||||
// mysitcal power
|
||||
#define MYSTICAL_POWER_RING_PAUSE 7
|
||||
|
||||
// esper wing
|
||||
#define ESPER_WING_SPEED 16
|
||||
|
||||
// triple arrows
|
||||
#define TRIPLE_ARROW_FLY_TIME 9
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_ANIM_SCRIPTS_H
|
@ -10111,6 +10111,7 @@ extern const u32 gBattleAnimBgPalette_GunkShot[];
|
||||
extern const u32 gBattleAnimBgImage_HydroCannon[];
|
||||
extern const u32 gBattleAnimBgPalette_HydroCannon[];
|
||||
extern const u32 gBattleAnimBgTilemap_HydroCannon[];
|
||||
extern const u32 gBattleAnimBgPalette_Chloroblast[];
|
||||
extern const u32 gBattleAnimBgImage_HydroPump[];
|
||||
extern const u32 gBattleAnimBgPalette_HydroPump[];
|
||||
extern const u32 gBattleAnimBgTilemap_HydroPump[];
|
||||
|
@ -5,7 +5,6 @@
|
||||
#include "trig.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
static void AnimOutrageFlame(struct Sprite *);
|
||||
static void AnimDragonDanceOrb_Step(struct Sprite *);
|
||||
static void AnimOverheatFlame_Step(struct Sprite *);
|
||||
static void AnimTask_DragonDanceWaver_Step(u8);
|
||||
@ -316,7 +315,7 @@ static void AnimSpinningDracoMeteor(struct Sprite *sprite)
|
||||
StoreSpriteCallbackInData6(sprite, AnimSpinningDracoMeteorFinish);
|
||||
}
|
||||
|
||||
static void AnimOutrageFlame(struct Sprite *sprite)
|
||||
void AnimOutrageFlame(struct Sprite *sprite)
|
||||
{
|
||||
sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
|
@ -97,7 +97,6 @@ static void AnimSlashSlice(struct Sprite *);
|
||||
static void AnimFalseSwipeSlice(struct Sprite *);
|
||||
static void AnimFalseSwipeSlice_Step1(struct Sprite *);
|
||||
static void AnimFalseSwipeSlice_Step2(struct Sprite *);
|
||||
static void AnimFalseSwipeSlice_Step3(struct Sprite *);
|
||||
static void AnimFalseSwipePositionedSlice(struct Sprite *);
|
||||
static void AnimEndureEnergy_Step(struct Sprite *);
|
||||
static void AnimSharpenSphere(struct Sprite *);
|
||||
@ -5914,7 +5913,7 @@ static void AnimFalseSwipeSlice_Step2(struct Sprite *sprite)
|
||||
sprite->callback = AnimFalseSwipeSlice_Step3;
|
||||
}
|
||||
|
||||
static void AnimFalseSwipeSlice_Step3(struct Sprite *sprite)
|
||||
void AnimFalseSwipeSlice_Step3(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->data[0] > 1)
|
||||
{
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "util.h"
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/moves.h"
|
||||
|
||||
static void AnimCirclingFinger(struct Sprite *);
|
||||
static void AnimBouncingMusicNote(struct Sprite *);
|
||||
@ -3358,6 +3359,12 @@ static void AnimTask_HeartsBackground_Step(u8 taskId)
|
||||
void AnimTask_ScaryFace(u8 taskId)
|
||||
{
|
||||
struct BattleAnimBgData animBg;
|
||||
bool32 onPlayer;
|
||||
|
||||
if (gAnimMoveIndex == MOVE_BITTER_MALICE)
|
||||
onPlayer = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER;
|
||||
else
|
||||
onPlayer = GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||||
@ -3373,7 +3380,7 @@ void AnimTask_ScaryFace(u8 taskId)
|
||||
GetBattleAnimBg1Data(&animBg);
|
||||
if (IsContest())
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceContest, FALSE);
|
||||
else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
|
||||
else if (onPlayer)
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFacePlayer, FALSE);
|
||||
else
|
||||
AnimLoadCompressedBgTilemapHandleContest(&animBg, &gBattleAnimBgTilemap_ScaryFaceOpponent, FALSE);
|
||||
|
@ -69,7 +69,6 @@ static void AnimFlatterSpotlight(struct Sprite *);
|
||||
static void AnimReversalOrb_Step(struct Sprite *);
|
||||
static void AnimYawnCloud(struct Sprite *);
|
||||
static void AnimYawnCloud_Step(struct Sprite *);
|
||||
static void AnimSmokeBallEscapeCloud(struct Sprite *);
|
||||
static void AnimFacadeSweatDrop(struct Sprite *);
|
||||
static void AnimRoarNoiseLine(struct Sprite *);
|
||||
static void AnimRoarNoiseLine_Step(struct Sprite *);
|
||||
@ -87,7 +86,6 @@ static void AnimMeteorMashStar_Step(struct Sprite *sprite);
|
||||
static void AnimBlockX_Step(struct Sprite *);
|
||||
static void AnimUnusedItemBagSteal(struct Sprite *);
|
||||
static void AnimKnockOffStrike(struct Sprite *);
|
||||
static void AnimKnockOffStrike_Step(struct Sprite *sprite);
|
||||
static void AnimRecycle(struct Sprite *);
|
||||
static void AnimRecycle_Step(struct Sprite *);
|
||||
static void SetPsychicBackground_Step(u8);
|
||||
@ -3652,7 +3650,7 @@ static void AnimYawnCloud_Step(struct Sprite *sprite)
|
||||
// arg 1: initial x pixel offset
|
||||
// arg 2: initial y pixel offset
|
||||
// arg 3: time until destroyed
|
||||
static void AnimSmokeBallEscapeCloud(struct Sprite *sprite)
|
||||
void AnimSmokeBallEscapeCloud(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = gBattleAnimArgs[3];
|
||||
StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
|
||||
@ -5469,7 +5467,7 @@ static void AnimTask_TeeterDanceMovement_Step(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void AnimKnockOffStrike_Step(struct Sprite *sprite)
|
||||
void AnimKnockOffStrike_Step(struct Sprite *sprite)
|
||||
{
|
||||
// These two cases are identical.
|
||||
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
|
||||
|
@ -874,7 +874,7 @@ void AnimThunderWave(struct Sprite *sprite)
|
||||
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
if (gAnimMoveIndex == MOVE_THUNDER_WAVE)
|
||||
if (gAnimMoveIndex != MOVE_ANCHOR_SHOT)
|
||||
spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority);
|
||||
else
|
||||
spriteId = CreateSprite(&gAnchorShotChainTemplate, sprite->x + 32, sprite->y, sprite->subpriority);
|
||||
|
@ -157,7 +157,7 @@ static const union AnimCmd sAnim_FallingFeather_1[] =
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_FallingFeather[] =
|
||||
const union AnimCmd *const gAnims_FallingFeather[] =
|
||||
{
|
||||
sAnim_FallingFeather_0,
|
||||
sAnim_FallingFeather_1,
|
||||
@ -168,7 +168,7 @@ const struct SpriteTemplate gFallingFeatherSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_WHITE_FEATHER,
|
||||
.paletteTag = ANIM_TAG_WHITE_FEATHER,
|
||||
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
|
||||
.anims = sAnims_FallingFeather,
|
||||
.anims = gAnims_FallingFeather,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimFallingFeather,
|
||||
|
@ -233,7 +233,7 @@ static const union AnimCmd sAnim_GrudgeFlame[] =
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_GrudgeFlame[] =
|
||||
const union AnimCmd *const gAnims_GrudgeFlame[] =
|
||||
{
|
||||
sAnim_GrudgeFlame,
|
||||
};
|
||||
@ -243,7 +243,7 @@ const struct SpriteTemplate gGrudgeFlameSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_PURPLE_FLAME,
|
||||
.paletteTag = ANIM_TAG_PURPLE_FLAME,
|
||||
.oam = &gOamData_AffineOff_ObjBlend_16x32,
|
||||
.anims = sAnims_GrudgeFlame,
|
||||
.anims = gAnims_GrudgeFlame,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimGrudgeFlame,
|
||||
|
@ -119,7 +119,7 @@ const union AnimCmd *const gAnims_IceCrystalLarge[] =
|
||||
sAnim_IceCrystalLarge,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sAnims_IceCrystalSmall[] =
|
||||
const union AnimCmd *const gAnims_IceCrystalSmall[] =
|
||||
{
|
||||
sAnim_IceCrystalSmall,
|
||||
};
|
||||
@ -166,7 +166,7 @@ const struct SpriteTemplate gIceCrystalSpiralInwardSmall =
|
||||
.tileTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
.oam = &gOamData_AffineOff_ObjBlend_8x8,
|
||||
.anims = sAnims_IceCrystalSmall,
|
||||
.anims = gAnims_IceCrystalSmall,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimIcePunchSwirlingParticle,
|
||||
@ -199,7 +199,7 @@ const struct SpriteTemplate gIceBeamOuterCrystalSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
.oam = &gOamData_AffineOff_ObjBlend_8x8,
|
||||
.anims = sAnims_IceCrystalSmall,
|
||||
.anims = gAnims_IceCrystalSmall,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimIceBeamParticle,
|
||||
@ -234,7 +234,7 @@ const struct SpriteTemplate gIceCrystalHitSmallSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
.oam = &gOamData_AffineNormal_ObjBlend_8x8,
|
||||
.anims = sAnims_IceCrystalSmall,
|
||||
.anims = gAnims_IceCrystalSmall,
|
||||
.images = NULL,
|
||||
.affineAnims = gAffineAnims_IceCrystalHit,
|
||||
.callback = AnimIceEffectParticle,
|
||||
@ -515,7 +515,7 @@ const struct SpriteTemplate gIceBallImpactShardSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_8x8,
|
||||
.anims = sAnims_IceCrystalSmall,
|
||||
.anims = gAnims_IceCrystalSmall,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = InitIceBallParticle,
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -13,7 +13,6 @@ static void AnimTask_Rollout_Step(u8 taskId);
|
||||
static void AnimRolloutParticle(struct Sprite *);
|
||||
static void AnimRockTomb(struct Sprite *);
|
||||
static void AnimRockTomb_Step(struct Sprite *sprite);
|
||||
static void AnimRockBlastRock(struct Sprite *);
|
||||
static void AnimRockScatter(struct Sprite *);
|
||||
static void AnimRockScatter_Step(struct Sprite *sprite);
|
||||
static void AnimParticleInVortex_Step(struct Sprite *sprite);
|
||||
@ -921,7 +920,7 @@ static void AnimRockTomb_Step(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
static void AnimRockBlastRock(struct Sprite *sprite)
|
||||
void AnimRockBlastRock(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
|
@ -106,7 +106,7 @@ static const union AnimCmd sAnim_SpinningSparkle[] =
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd *const sAnims_SpinningSparkle[] =
|
||||
const union AnimCmd *const gAnims_SpinningSparkle[] =
|
||||
{
|
||||
sAnim_SpinningSparkle
|
||||
};
|
||||
@ -116,7 +116,7 @@ const struct SpriteTemplate gSpinningSparkleSpriteTemplate =
|
||||
.tileTag = ANIM_TAG_SPARKLE_4,
|
||||
.paletteTag = ANIM_TAG_SPARKLE_4,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = sAnims_SpinningSparkle,
|
||||
.anims = gAnims_SpinningSparkle,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimSpinningSparkle,
|
||||
@ -396,6 +396,36 @@ void AnimTask_FrozenIceCubeAttacker(u8 taskId)
|
||||
gTasks[taskId].func = AnimTask_FrozenIceCube_Step1;
|
||||
}
|
||||
|
||||
void AnimTask_CentredFrozenIceCube(u8 taskId)
|
||||
{
|
||||
// same as AnimTask_FrozenIceCube but center position on target(s)
|
||||
s16 x, y;
|
||||
u8 spriteId;
|
||||
u8 battler1 = gBattleAnimTarget;
|
||||
u8 battler2 = BATTLE_PARTNER(battler1);
|
||||
|
||||
if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
x = GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2);
|
||||
y = GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
}
|
||||
else
|
||||
{
|
||||
x = (GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2) + GetBattlerSpriteCoord(battler2, BATTLER_COORD_X_2)) / 2;
|
||||
y = (GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET) + GetBattlerSpriteCoord(battler2, BATTLER_COORD_Y_PIC_OFFSET)) / 2;
|
||||
}
|
||||
|
||||
x -= 32;
|
||||
y -= 36;
|
||||
|
||||
spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4);
|
||||
if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF)
|
||||
gSprites[spriteId].invisible = TRUE;
|
||||
|
||||
SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable);
|
||||
gTasks[taskId].data[15] = spriteId;
|
||||
gTasks[taskId].func = AnimTask_FrozenIceCube_Step1;
|
||||
}
|
||||
|
||||
void AnimTask_FrozenIceCube(u8 taskId)
|
||||
{
|
||||
|
@ -10937,3 +10937,8 @@ u32 CalcSecondaryEffectChance(u8 battlerId, u8 secondaryEffectChance)
|
||||
|
||||
return secondaryEffectChance;
|
||||
}
|
||||
|
||||
bool32 IsAlly(u32 battlerAtk, u32 battlerDef)
|
||||
{
|
||||
return (GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef));
|
||||
}
|
||||
|
@ -1987,4 +1987,5 @@ const struct BattleAnimBackground gBattleAnimBackgroundTable[] =
|
||||
[BG_AURA_SPHERE] = {gBattleAnimBgImage_FocusBlast, gBattleAnimBgPalette_AuraSphere, gBattleAnimBgTilemap_FocusBlast},
|
||||
[BG_STEEL_BEAM_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedOpponent},
|
||||
[BG_STEEL_BEAM_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedPlayer},
|
||||
[BG_CHLOROBLAST] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_Chloroblast, gBattleAnimBgTilemap_HydroCannon},
|
||||
};
|
||||
|
@ -1438,6 +1438,7 @@ const u32 gBattleAnimBgPalette_GunkShot[] = INCBIN_U32("graphics/battle_anims/ba
|
||||
const u32 gBattleAnimBgImage_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_cannon.4bpp.lz");
|
||||
const u32 gBattleAnimBgPalette_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_cannon.gbapal.lz");
|
||||
const u32 gBattleAnimBgTilemap_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_cannon.bin.lz");
|
||||
const u32 gBattleAnimBgPalette_Chloroblast[] = INCBIN_U32("graphics/battle_anims/backgrounds/chloroblast.gbapal.lz");
|
||||
|
||||
const u32 gBattleAnimBgImage_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_pump.4bpp.lz");
|
||||
const u32 gBattleAnimBgPalette_HydroPump[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_pump.gbapal.lz");
|
||||
|
Loading…
Reference in New Issue
Block a user