z move anim/effect, black hole eclipse anim

This commit is contained in:
Evan 2020-11-28 13:09:43 -05:00
parent 2b1dfe73cf
commit f114534ae3
17 changed files with 928 additions and 53 deletions

View File

@ -24503,7 +24503,151 @@ Move_GIGAVOLT_HAVOC::
Move_SHATTERED_PSYCHE::
Move_SUBZERO_SLAMMER::
Move_DEVASTATING_DRAKE::
goto Move_TACKLE
Move_BLACK_HOLE_ECLIPSE::
loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave
loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball
loadspritegfx ANIM_TAG_THIN_RING @ring
loadspritegfx ANIM_TAG_ICE_CHUNK @blue
loadspritegfx ANIM_TAG_BLACK_BALL_2 @black
invisible ANIM_TARGET
launchtask AnimTask_AllBanksInvisibleExceptAttackerAndTarget 0xA 0x0
waitforvisualfinish
playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
call EndureEffect
delay 0x8
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x2 0x2 0x2 0x0 0xb 0x0000
launchtask AnimTask_ShakeMon2 0x2 0x5 0x0 0x1 0x0 0x20 0x1
call EndureEffect
delay 0x8
call EndureEffect
waitforvisualfinish
unloadspritegfx ANIM_TAG_FOCUS_ENERGY
playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
launchtemplate gBlackHoleEclipseShockwaveSpriteTemplate 0x2 0x0
waitforvisualfinish
unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_HANDS_AND_FEET @black
playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER
launchtemplate gBlackHoleEclipseHoleUserSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_ATTACKER 0x0
launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
delay 0x8
launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
delay 0x8
launchtemplate gBlackHoleEclipseBlueRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
delay 0x8
launchtemplate gBlackHoleEclipseBlackRingSpriteTemplate 0x3 0x4 0x0 0x0 0x0 0x0
delay 0x8
waitforvisualfinish
stopsound
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x1 0x0 0x07 0x0000
loadspritegfx ANIM_TAG_WISP_ORB @will o wisp
invisible ANIM_ATTACKER
loopsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x10, 0x5
launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x2 0x3 0x0 0x10 0x0
delay 0x3
launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x3 0x3 0x0 0x10 0x1
delay 0x3
launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x2
delay 0x3
launchtemplate gBlackHoleEclipseWispSpriteTemplate 0x4 0x3 0x0 0x10 0x3
waitforvisualfinish
fadetobg BG_BLACKHOLE_ECLIPSE
playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
loadspritegfx ANIM_TAG_VERTICAL_HEX @red
launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0
delay 0x4
launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0
delay 0x4
launchtemplate gBlackHoleEclipseRedRingSpriteTemplate 0x3 0x4 0x0 0x0 0x100 0x0
waitbgfadeout
unloadspritegfx ANIM_TAG_WISP_ORB
launchtemplate gBlackHoleEclipseHoleSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0 @ eclipse at target origin
delay 0x10
launchtemplate gSlideMonToOffsetSpriteTemplate 0x2 0x5 ANIM_TARGET 0x35 0xffed 0x1 0x2 @ target down and left (instantaneously (last arg))
delay 0x2
visible ANIM_TARGET
loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x5
launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x50 0xfc00 ANIM_TARGET 0x0 @ spin target around (0x50 (time), -0x400 (rot speed))
launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
delay 0x8
launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
delay 0x8
launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
delay 0x8
launchtemplate gSlideMonToOriginalPosSpriteTemplate 0x2 0x3 ANIM_TARGET 0x0 0x30 @ target back to origin (slowly)
launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
delay 0x8
launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
delay 0x8
launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
delay 0x15
invisible ANIM_TARGET
delay 0x8
launchtemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
delay 0x8
launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
delay 0x8
launchtemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate 0x28 0x4 0x0 0x0 ANIM_TARGET 0x0
delay 0x8
launchtemplate gBlackHoleEclipseHoleShrinkSpriteTemplate 0x2 0x4 0x0 0x0 ANIM_TARGET 0x0
waitforvisualfinish
loadspritegfx ANIM_TAG_SPARKLE_4 @detect
launchtemplate gTargetTwinkleSpriteTemplate 0xd 0x3 0x0 0x0 ANIM_TARGET @detect star
delay 0x2
unloadspritegfx ANIM_TAG_SHADOW_BALL
unloadspritegfx ANIM_TAG_THIN_RING
unloadspritegfx ANIM_TAG_ICE_CHUNK
unloadspritegfx ANIM_TAG_BLACK_BALL_2
loadspritegfx ANIM_TAG_EXPLOSION_2
call BlackHoleEclipseExplosion
launchtask AnimTask_BlendBattleAnimPal, 0xa, 0x5, ANIM_PAL_ALL_BATTLERS | ANIM_PAL_BG, 0x1, 0x0, 0x10, 0x7fff @ bg to white pal
call BlackHoleEclipseExplosion
waitforvisualfinish
delay 0x18
invisible ANIM_TARGET
launchtask AnimTask_RotateMonSpriteToSide 0x2 0x4 0x1 0x0 ANIM_TARGET 0x1 @ fix rotation
invisible ANIM_TARGET
delay 0x1
waitforvisualfinish
call ResetFromWhiteScreen
end
BlackHoleEclipseExplosion:
playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x0 0x0 ANIM_TARGET 0x1
delay 0x6
playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x18 0xffe8 ANIM_TARGET 0x1
delay 0x6
playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xfff0 0x10 ANIM_TARGET 0x1
delay 0x6
playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0xffe8 0xfff4 ANIM_TARGET 0x1
delay 0x6
playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER
launchtemplate gBlackHoleEclipseRedExplosionSpriteTemplate 0x3 0x4 0x10 0x10 ANIM_TARGET 0x1
delay 0x6
return
ResetFromWhiteScreen:
launchtask AnimTask_AllBanksInvisible 0xA 0x0
waitforvisualfinish
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_ALL_BATTLERS 0x2 0x0 0x0 0x7FFF @everything from white
restorebg
waitbgfadeout
setarg 0x7 0xffff
launchtask AnimTask_AllBanksVisible 0xA 0x0
waitbgfadein
waitforvisualfinish
delay 0x5
launchtask AnimTask_BlendBattleAnimPal 0xa 0x5 ANIM_PAL_BG 0x0 0x0 0x0 0x7fff
waitforvisualfinish
return
Move_TWINKLE_TACKLE::
Move_CATASTROPIKA::
Move_10000000_VOLT_THUNDERBOLT::

View File

@ -7687,15 +7687,7 @@ BattleScript_PrintPlayerForfeitedLinkBattle::
waitmessage 0x40
end2
BattleScript_ZMoveActivateStatus::
printstring STRINGID_ZPOWERSURROUNDS
playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL
setzeffect
printstring STRINGID_ZMOVEUNLEASHED
waitmessage 0x40
return
BattleScript_ZMoveActivateDamaging::
BattleScript_ZMoveActivate::
printstring STRINGID_ZPOWERSURROUNDS
playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL
printstring STRINGID_ZMOVEUNLEASHED

View File

@ -206,6 +206,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 gSpriteAnimTable_853EE80[];
// battle_anim_ground.c
void AnimTask_HorizontalShake(u8 taskId);
@ -476,7 +477,9 @@ extern const union AnimCmd *const gAnims_BlizzardIceCrystal[];
// battle_anim_fire.c
void AnimFireSpread(struct Sprite *sprite);
void AnimFireSpiralOutward(struct Sprite *sprite);
void AnimWillOWispOrb(struct Sprite *);
extern const union AnimCmd *const gAnims_FireBlastCross[];
extern const union AnimCmd *const gAnims_WillOWispOrb[];
// battle_anim_dragon.c
extern const union AnimCmd *const gAnims_DragonBreathFire[];

View File

@ -1,7 +1,7 @@
#ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H
#define TEXT_BUFF_ARRAY_COUNT 16
#define TEXT_BUFF_ARRAY_COUNT 20 //expanded for z move names
// for 0xFD
#define B_TXT_BUFF1 0x0

View File

@ -349,7 +349,6 @@ extern const u8 BattleScript_EmergencyExitNoPopUp[];
extern const u8 BattleScript_EmergencyExitWild[];
extern const u8 BattleScript_EmergencyExitWildNoPopUp[];
extern const u8 BattleScript_CheekPouchActivates[];
extern const u8 BattleScript_ZMoveActivateStatus[];
extern const u8 BattleScript_ZMoveActivateDamaging[];
extern const u8 BattleScript_ZMoveActivate[];
#endif // GUARD_BATTLE_SCRIPTS_H

View File

@ -18,5 +18,6 @@ void HideZMoveTriggerSprite(void);
bool32 IsZMoveTriggerSpriteActive(void);
void DestroyZMoveTriggerSprite(void);
bool32 MoveSelectionDisplayZMove(u16 zmove);
const u8* GetZMoveName(u16 move);
#endif // GUARD_BATTLE_Z_MOVE_H

View File

@ -809,7 +809,7 @@
#define MOVE_CLANGOROUS_SOULBLAZE 776
#define MOVE_GUARDIAN_OF_ALOLA 777
#define MOVE_SEARING_SUNRAZE_SMASH 778
#define MOVE_MENACING_MOONRAZE_MAELSTROM 7979
#define MOVE_MENACING_MOONRAZE_MAELSTROM 779
#define MOVE_LIGHT_THAT_BURNS_THE_SKY 780
#define MOVE_SOUL_STEALING_7_STAR_STRIKE 781

View File

@ -32,7 +32,6 @@ static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 x, s16 y)
static void UpdateEruptionLaunchRockPos(struct Sprite *);
static void AnimEruptionFallingRock(struct Sprite *);
static void AnimEruptionFallingRock_Step(struct Sprite *);
static void AnimWillOWispOrb(struct Sprite *);
static void AnimWillOWispOrb_Step(struct Sprite *);
static void AnimWillOWispFire(struct Sprite *);
static void AnimTask_MoveHeatWaveTargets_Step(u8 taskId);
@ -428,7 +427,7 @@ static const union AnimCmd sAnim_WillOWispOrb_3[] =
ANIMCMD_END,
};
static const union AnimCmd *const sAnims_WillOWispOrb[] =
const union AnimCmd *const gAnims_WillOWispOrb[] =
{
sAnim_WillOWispOrb_0,
sAnim_WillOWispOrb_1,
@ -441,7 +440,7 @@ const struct SpriteTemplate gWillOWispOrbSpriteTemplate =
.tileTag = ANIM_TAG_WISP_ORB,
.paletteTag = ANIM_TAG_WISP_ORB,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = sAnims_WillOWispOrb,
.anims = gAnims_WillOWispOrb,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimWillOWispOrb,
@ -1143,7 +1142,7 @@ static void AnimEruptionFallingRock_Step(struct Sprite *sprite)
}
}
static void AnimWillOWispOrb(struct Sprite *sprite)
void AnimWillOWispOrb(struct Sprite *sprite)
{
switch (sprite->data[0])
{

View File

@ -54,6 +54,7 @@ static void AnimSkyDropBallUp(struct Sprite *sprite);
static void SpriteCB_SearingShotRock(struct Sprite* sprite);
static void AnimHappyHourCoinShower(struct Sprite *sprite);
static void SpriteCB_Geyser(struct Sprite* sprite);
static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite);
//////// const data
//// general
@ -4097,7 +4098,7 @@ const struct SpriteTemplate gBreakneckBlitzDanceSpriteTemplate =
{
.tileTag = ANIM_TAG_HOLLOW_ORB,
.paletteTag = ANIM_TAG_FLAT_ROCK,
.oam = OAM_OFF_16x16,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@ -4128,9 +4129,9 @@ const struct SpriteTemplate gAllOutPummelingOnslaughtSpriteTemplate =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_IMPACT,
.oam = OAM_OFF_32x32,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = 0x83E66CC,
.images = 0x0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = 0x80B0929
};
@ -4151,7 +4152,7 @@ const struct SpriteTemplate gSupersonicSkystrikeFlySpriteTemplate =
.paletteTag = ANIM_TAG_BIRD,
.oam = OAM_NORMAL_64x64,
.anims = gDummySpriteAnimTable,
.images = 0x0,
.images = NULL,
.affineAnims = sSupersonicSkystrikeAffineAnimTable,
.callback = 0x80B1C3D
};
@ -4162,7 +4163,7 @@ const struct SpriteTemplate gAcidDownpourReversalSpriteTemplate =
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = OAM_NORMAL_16x16,
.anims = gDummySpriteAnimTable,
.images = 0x0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = 0x80E0E95
};
@ -4172,24 +4173,207 @@ const struct SpriteTemplate gAcidDownpourAuraSpriteTemplate =
.paletteTag = ANIM_TAG_POISON_BUBBLE,
.oam = OAM_NORMAL_16x16,
.anims = gDummySpriteAnimTable,
.images = 0x0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = 0x80B477D
};
//tectonic rage
const struct SpriteTemplate gTectonicRageBlastBurnSpriteTemplate =
{
TEC_RAGE_BLAST_BURN: objtemplate ANIM_TAG_FIRE_PLUME ANIM_TAG_FIRE_PLUME OAM_OFF_32x32 0x83E5C50 0x0 gDummySpriteAffineAnimTable BLASTBURN_TARGET_ASM+1
TEC_RAGE_BLAST_BURN: objtemplate ANIM_TAG_FIRE_PLUME ANIM_TAG_FIRE_PLUME &gOamData_AffineOff_ObjNormal_32x32 0x83E5C50 0x0 gDummySpriteAffineAnimTable BLASTBURN_TARGET_ASM+1
};
const struct SpriteTemplate gTectonicRageExplosionSpriteTemplate =
{
TECTONIC_EXPLODE: objtemplate ANIM_TAG_UNUSED_EXPLOSION_2 ANIM_TAG_UNUSED_EXPLOSION_2 OAM_OFF_32x32 0x83E3F90 0x0 gDummySpriteAffineAnimTable SpriteCB_AnimSpriteOnMonPos
TECTONIC_EXPLODE: objtemplate ANIM_TAG_EXPLOSION_2 ANIM_TAG_EXPLOSION_2 &gOamData_AffineOff_ObjNormal_32x32 0x83E3F90 0x0 gDummySpriteAffineAnimTable AnimSpriteOnMonPos
};*/
// black hole eclipse
const struct SpriteTemplate gBlackHoleEclipseShockwaveSpriteTemplate =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_BLACK_BALL_2,
.oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gAffineAnims_GrowingElectricOrb,
.callback = AnimGrowingShockWaveOrb
};
const struct SpriteTemplate gBlackHoleEclipseBlueRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseBlackRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseRedExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION_2,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseWispSpriteTemplate =
{
.tileTag = ANIM_TAG_WISP_ORB,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gAnims_WillOWispOrb,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimWillOWispOrb
};
const struct SpriteTemplate gBlackHoleEclipseRedRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingExpandingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseBlueRingInwardsSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_ICE_CHUNK,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gBlackHoleEclipseRedRingInwardsSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gThinRingShrinkingAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
static const union AffineAnimCmd gGrowingBackHoleTargetAffineCmds[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, -10, 0x88),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gGrowingBlackHoleTargetAffineAnimTable[] = {
gGrowingBackHoleTargetAffineCmds,
};
const struct SpriteTemplate gBlackHoleEclipseHoleSpriteTemplate =
{
.tileTag = ANIM_TAG_SHADOW_BALL,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGrowingBlackHoleTargetAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
static const union AffineAnimCmd gShrinkingBlackHoleAffineCmds[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(-0x10, -0x10, 0xf6, 8),
AFFINEANIMCMD_END_ALT(1),
};
static const union AffineAnimCmd *const gShrinkingBlackHoleAffineAnimTable[] = {
gShrinkingBlackHoleAffineCmds,
};
const struct SpriteTemplate gBlackHoleEclipseHoleShrinkSpriteTemplate =
{
.tileTag = ANIM_TAG_SHADOW_BALL,
.paletteTag = ANIM_TAG_VERTICAL_HEX,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gShrinkingBlackHoleAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
static const union AffineAnimCmd gGrowingBackHoleAffineCmds[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, -10, 0x48),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gGrowingBlackHoleAffineAnimTable[] = {
gGrowingBackHoleAffineCmds,
};
const struct SpriteTemplate gBlackHoleEclipseHoleUserSpriteTemplate =
{
.tileTag = ANIM_TAG_SHADOW_BALL,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gGrowingBlackHoleAffineAnimTable,
.callback = AnimSpriteOnMonPos
};
const struct SpriteTemplate gTargetTwinkleSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gSpriteAnimTable_853EE80,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCB_TwinkleOnBattler
};
//// functions
//general
void AnimTask_AllBanksInvisible(u8 taskId)
{
u32 i;
for (i = 0; i < gBattlersCount; i++)
{
u8 spriteId = gBattlerSpriteIds[i];
if (spriteId != 0xFF)
gSprites[spriteId].invisible = TRUE;
}
DestroyAnimVisualTask(taskId);
}
void AnimTask_AllBanksVisible(u8 taskId)
{
u32 i;
for (i = 0; i < gBattlersCount; i++)
{
u8 spriteId = gBattlerSpriteIds[i];
if (spriteId != 0xFF)
gSprites[spriteId].invisible = FALSE;
}
DestroyAnimVisualTask(taskId);
}
void AnimTask_AllBanksInvisibleExceptAttackerAndTarget(u8 taskId)
{
u32 i;
for (i = 0; i < gBattlersCount; ++i)
{
u8 spriteId = gBattlerSpriteIds[i];
if (spriteId == GetAnimBattlerSpriteId(ANIM_ATTACKER) || spriteId == GetAnimBattlerSpriteId(ANIM_TARGET))
continue;
if (spriteId != 0xFF || !IsBattlerSpriteVisible(i)) //Pokemon that are already hidden
gSprites[spriteId].invisible = TRUE;
}
DestroyAnimVisualTask(taskId);
}
static u8 LoadBattleAnimTarget(u8 arg)
{
u8 battler;
@ -5145,3 +5329,20 @@ void AnimTask_TechnoBlast(u8 taskId)
DestroyAnimVisualTask(taskId);
}
// Z MOVES
//Creates a twinkle at the location the target was knocked too in Twinkle Tackle
static void SpriteCB_TwinkleOnBattler(struct Sprite *sprite)
{
struct Sprite* monSprite;
if (gBattleAnimArgs[2] == ANIM_TARGET)
monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)];
else
monSprite = &gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)];
sprite->pos1 = monSprite->pos1;
sprite->pos2 = monSprite->pos2;
sprite->callback = RunStoredCallbackWhenAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}

View File

@ -109,7 +109,7 @@ static const union AnimCmd sSpriteAnim_853EE68[] =
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_853EE80[] =
const union AnimCmd *const gSpriteAnimTable_853EE80[] =
{
sSpriteAnim_853EE68
};
@ -119,7 +119,7 @@ const struct SpriteTemplate gSpinningSparkleSpriteTemplate =
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAnimTable_853EE80,
.anims = gSpriteAnimTable_853EE80,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSpinningSparkle,

View File

@ -653,7 +653,7 @@ static void HandleInputChooseMove(void)
}
else if (JOY_NEW(DPAD_LEFT))
{
if (gMoveSelectionCursor[gActiveBattler] & 1)
if (!gBattleStruct->zmove.viewing && gMoveSelectionCursor[gActiveBattler] & 1)
{
MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
gMoveSelectionCursor[gActiveBattler] ^= 1;
@ -666,7 +666,7 @@ static void HandleInputChooseMove(void)
}
else if (JOY_NEW(DPAD_RIGHT))
{
if (!(gMoveSelectionCursor[gActiveBattler] & 1)
if (!gBattleStruct->zmove.viewing && !(gMoveSelectionCursor[gActiveBattler] & 1)
&& (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose)
{
MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
@ -680,7 +680,7 @@ static void HandleInputChooseMove(void)
}
else if (JOY_NEW(DPAD_UP))
{
if (gMoveSelectionCursor[gActiveBattler] & 2)
if (!gBattleStruct->zmove.viewing && gMoveSelectionCursor[gActiveBattler] & 2)
{
MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);
gMoveSelectionCursor[gActiveBattler] ^= 2;
@ -693,7 +693,7 @@ static void HandleInputChooseMove(void)
}
else if (JOY_NEW(DPAD_DOWN))
{
if (!(gMoveSelectionCursor[gActiveBattler] & 2)
if (!gBattleStruct->zmove.viewing && !(gMoveSelectionCursor[gActiveBattler] & 2)
&& (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose)
{
MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]);

View File

@ -525,7 +525,7 @@ static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
// Great function to include newly added moves that don't have animation yet.
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
{
if (moveId >= (MOVES_COUNT - 1))
if (moveId >= (MOVES_COUNT_Z - 1))
return TRUE;
else
return FALSE;

View File

@ -5,6 +5,7 @@
#include "battle_message.h"
#include "battle_setup.h"
#include "battle_tower.h"
#include "battle_z_move.h"
#include "data.h"
#include "event_data.h"
#include "frontier_util.h"
@ -2553,7 +2554,9 @@ void BufferStringBattle(u16 stringID)
}
break;
case STRINGID_USEDMOVE: // pokemon used a move msg
if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
if (gBattleStruct->zmove.active)
StringCopy(gBattleTextBuff3, GetZMoveName(gBattleMsgDataPtr->currentMove));
else if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
StringCopy(gBattleTextBuff3, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]);
else
StringCopy(gBattleTextBuff3, gMoveNames[gBattleMsgDataPtr->currentMove]);
@ -2982,13 +2985,17 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler)
break;
case B_TXT_CURRENT_MOVE: // current move name
if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
if (gBattleStruct->zmove.active)
toCpy = GetZMoveName(gBattleMsgDataPtr->currentMove);
else if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gBattleMsgDataPtr->currentMove];
break;
case B_TXT_LAST_MOVE: // originally used move name
if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT)
if (gBattleStruct->zmove.active)
toCpy = GetZMoveName(gBattleMsgDataPtr->originallyUsedMove);
else if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT)
toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gBattleMsgDataPtr->originallyUsedMove];

View File

@ -1627,7 +1627,14 @@ static void Cmd_ppreduce(void)
if (gBattleControllerExecFlags)
return;
if (gBattleStruct->zmove.active)
{
gHitMarker &= ~(HITMARKER_NO_PPDEDUCT);
gBattlescriptCurrInstr++;
return;
}
if (!gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure)
{
switch (gBattleMoves[gCurrentMove].target)

View File

@ -95,7 +95,7 @@ void HandleAction_UseMove(void)
gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker];
}
// encore forces you to use the same move
else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
&& gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
{
gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove;
@ -103,7 +103,7 @@ void HandleAction_UseMove(void)
*(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0);
}
// check if the encored move wasn't overwritten
else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
&& gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
{
gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos;
@ -122,6 +122,12 @@ void HandleAction_UseMove(void)
{
gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos];
}
// check z move used
if (gBattleStruct->zmove.active)
{
gCurrentMove = gBattleStruct->zmove.currZMove;
}
if (gBattleMons[gBattlerAttacker].hp != 0)
{
@ -3187,18 +3193,8 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattleStruct->zmove.used[gBattlerAttacker] = TRUE;
//TODO - partner battles.
gBattleScripting.battler = gBattlerAttacker;
if (gBattleMoves[gCurrentMove].split == SPLIT_STATUS)
{
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_ZMoveActivateStatus;
//gBattleStruct->zmove.effect = gBattleMoves[gCurrentMove].z_move_effect;
//gBattleStruct->zmove.effectApplied = TRUE;
}
else
{
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_ZMoveActivateDamaging;
}
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_ZMoveActivate;
effect = 1;
}
gBattleStruct->atkCancellerTracker++;

View File

@ -42,7 +42,6 @@ static u16 GetSignatureZMove(u16 move, u16 species, u16 item);
static u16 GetTypeBasedZMove(u16 move, u8 battler);
static void ZMoveSelectionDisplayPpNumber(void);
static void ZMoveSelectionDisplayPower(u16 move, u16 zMove);
static const u8* GetZMoveName(u16 move);
static void ShowZMoveTriggerSprite(void);
// Const Data
@ -517,7 +516,7 @@ static void ZMoveSelectionDisplayPpNumber(void)
BattlePutTextOnWindow(gDisplayedStringBattle, 9);
}
static const u8* GetZMoveName(u16 move)
const u8* GetZMoveName(u16 move)
{
if (IsZMove(move))
return gZMoveNames[move - MOVE_BREAKNECK_BLITZ];

View File

@ -1,4 +1,4 @@
const struct BattleMove gBattleMoves[MOVES_COUNT] =
const struct BattleMove gBattleMoves[MOVES_COUNT_Z] =
{
[MOVE_NONE] =
{
@ -10843,4 +10843,531 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.zMovePower = 120,
.zMoveEffect = Z_EFFECT_NONE,
},
// Z MOVES
[MOVE_BREAKNECK_BLITZ] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_NORMAL,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL, //determined from move type
.zMoveEffect = 0
},
[MOVE_ALL_OUT_PUMMELING] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_FIGHTING,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_SUPERSONIC_SKYSTRIKE] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_FLYING,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_ACID_DOWNPOUR] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_POISON,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_TECTONIC_RAGE] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_GROUND,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_CONTINENTAL_CRUSH] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_ROCK,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_SAVAGE_SPIN_OUT] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_BUG,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_NEVER_ENDING_NIGHTMARE] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_GHOST,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_CORKSCREW_CRASH] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_STEEL,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_INFERNO_OVERDRIVE] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_FIRE,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_HYDRO_VORTEX] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_WATER,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_BLOOM_DOOM] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_GRASS,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_GIGAVOLT_HAVOC] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_ELECTRIC,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_SHATTERED_PSYCHE] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_PSYCHIC,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_SUBZERO_SLAMMER] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_ICE,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_DEVASTATING_DRAKE] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_DRAGON,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_BLACK_HOLE_ECLIPSE] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_DARK,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_TWINKLE_TACKLE] =
{
.effect = EFFECT_HIT,
.power = 1,
.type = TYPE_FAIRY,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_CATASTROPIKA] =
{
.effect = EFFECT_HIT,
.power = 210,
.type = TYPE_ELECTRIC,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_10000000_VOLT_THUNDERBOLT] =
{
.effect = EFFECT_HIT,//TODO: EFFECT_HIGH_CRITICAL,
.power = 195,
.type = TYPE_ELECTRIC,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_SPECIAL,
.zMoveEffect = 0
},
[MOVE_STOKED_SPARKSURFER] =
{
.effect = EFFECT_HIT, //EFFECT_PARALYZE_HIT,
.power = 175,
.type = TYPE_ELECTRIC,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_SPECIAL,
.zMoveEffect = 0
},
[MOVE_EXTREME_EVOBOOST] =
{
.effect = EFFECT_HIT,//TODO: EFFECT_EXTREME_EVOBOOST,
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_STATUS,
.zMoveEffect = 0
},
[MOVE_PULVERIZING_PANCAKE] =
{
.effect = EFFECT_HIT,
.power = 210,
.type = TYPE_NORMAL,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_GENESIS_SUPERNOVA] =
{
.effect = EFFECT_HIT,//TODO: EFFECT_DAMAGE_SET_TERRAIN,
.power = 185,
.type = TYPE_PSYCHIC,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_SPECIAL,
.zMoveEffect = 0
},
[MOVE_SINISTER_ARROW_RAID] =
{
.effect = EFFECT_HIT,
.power = 180,
.type = TYPE_GHOST,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_MALICIOUS_MOONSAULT] =
{
.effect = EFFECT_HIT,
.power = 180,
.type = TYPE_DARK,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_OCEANIC_OPERETTA] =
{
.effect = EFFECT_HIT,
.power = 195,
.type = TYPE_WATER,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_SPECIAL,
.zMoveEffect = 0
},
[MOVE_SPLINTERED_STORMSHARDS] =
{
.effect = EFFECT_HIT, //TODO removes terrain
.power = 190,
.type = TYPE_ROCK,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_LETS_SNUGGLE_FOREVER] =
{
.effect = EFFECT_HIT,
.power = 190,
.type = TYPE_FAIRY,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_CLANGOROUS_SOULBLAZE] =
{
.effect = EFFECT_HIT,//TODO: EFFECT_ALL_STATS_UP_HIT,
.power = 185,
.type = TYPE_DRAGON,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 100,
.target = MOVE_TARGET_BOTH,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_SPECIAL,
.zMoveEffect = 0
},
[MOVE_GUARDIAN_OF_ALOLA] =
{
.effect = EFFECT_HIT,//TODO: EFFECT_SUPER_FANG,
.power = 1,
.type = TYPE_FAIRY,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_SPECIAL,
.zMoveEffect = 0
},
[MOVE_SEARING_SUNRAZE_SMASH] =
{
.effect = EFFECT_HIT,
.power = 200,
.type = TYPE_STEEL,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
[MOVE_MENACING_MOONRAZE_MAELSTROM] =
{
.effect = EFFECT_HIT,
.power = 200,
.type = TYPE_GHOST,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_SPECIAL,
.zMoveEffect = 0
},
[MOVE_LIGHT_THAT_BURNS_THE_SKY] =
{
.effect = EFFECT_HIT,
.power = 200,
.type = TYPE_PSYCHIC,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_SPECIAL,
.zMoveEffect = 0
},
[MOVE_SOUL_STEALING_7_STAR_STRIKE] =
{
.effect = EFFECT_HIT,
.power = 195,
.type = TYPE_GHOST,
.accuracy = 0,
.pp = 1,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.flags = 0,
.zMovePower = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = 0
},
};