Flower Shield and protect moves

This commit is contained in:
DizzyEggg 2018-10-06 15:50:35 +02:00
parent de9e9072fc
commit 6b5c52e926
10 changed files with 188 additions and 79 deletions

View File

@ -327,6 +327,45 @@ gBattleScriptsForMoveEffects:: @ 82D86A8
.4byte BattleScript_EffectAfterYou
.4byte BattleScript_EffectBestow
.4byte BattleScript_EffectRototiller
.4byte BattleScript_EffectFlowerShield
.4byte BattleScript_EffectHitPreventEscape
.4byte BattleScript_EffectSpeedSwap
BattleScript_EffectFlowerShield:
attackcanceler
attackstring
ppreduce
selectfirstvalidtarget
BattleScript_FlowerShieldIsAnyGrass:
jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoopStart
jumpifnexttargetvalid BattleScript_FlowerShieldIsAnyGrass
goto BattleScript_ButItFailed
BattleScript_FlowerShieldLoopStart:
selectfirstvalidtarget
BattleScript_FlowerShieldLoop:
movevaluescleanup
jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoop2
goto BattleScript_FlowerShieldMoveTargetEnd
BattleScript_FlowerShieldLoop2:
setstatchanger STAT_DEF, 1, FALSE
statbuffchange 0x1, BattleScript_FlowerShieldMoveTargetEnd
jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, 0x2, BattleScript_FlowerShieldDoAnim
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x3, BattleScript_FlowerShieldMoveTargetEnd
pause 0x15
goto BattleScript_FlowerShieldString
BattleScript_FlowerShieldDoAnim:
attackanimation
waitanimation
setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
BattleScript_FlowerShieldString:
printfromtable gStatUpStringIds
waitmessage 0x40
BattleScript_FlowerShieldMoveTargetEnd:
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
jumpifnexttargetvalid BattleScript_FlowerShieldLoop
end
BattleScript_EffectRototiller:
attackcanceler
@ -1268,6 +1307,18 @@ BattleScript_EffectGuardSwap:
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_EffectSpeedSwap:
attackcanceler
attackstring
ppreduce
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
swapstatstages STAT_SPEED
attackanimation
waitanimation
printstring STRINGID_PKMNSWITCHEDSTATCHANGES
waitmessage 0x40
goto BattleScript_MoveEnd
BattleScript_EffectTelekinesis:
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON
@ -2816,6 +2867,10 @@ BattleScript_TripleKickEnd::
BattleScript_EffectThief::
setmoveeffect MOVE_EFFECT_STEAL_ITEM
goto BattleScript_EffectHit
BattleScript_EffectHitPreventEscape:
setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE
goto BattleScript_EffectHit
BattleScript_EffectMeanLook::
attackcanceler

View File

@ -185,41 +185,38 @@ struct DisableStruct
struct ProtectStruct
{
/* field_0 */
u32 protected:1;
u32 endured:1;
u32 noValidMoves:1;
u32 helpingHand:1;
u32 bounceMove:1;
u32 stealMove:1;
u32 flag0Unknown:1;
u32 prlzImmobility:1;
/* field_1 */
u32 confusionSelfDmg:1;
u32 targetNotAffected:1;
u32 chargingTurn:1;
u32 fleeFlag:2; // for RunAway and Smoke Ball
u32 usedImprisionedMove:1;
u32 loveImmobility:1;
u32 usedDisabledMove:1;
/* field_2 */
u32 usedTauntedMove:1; // 0x1
u32 flag2Unknown:1; // 0x2
u32 flinchImmobility:1; // 0x4
u32 notFirstStrike:1; // 0x8
u32 flag_x10:1; // 0x10
u32 flag_x20:1; // 0x20
u32 flag_x40:1; // 0x40
u32 flag_x80:1; // 0x80
u32 usesBouncedMove:1;
u32 usedHealBlockedMove:1;
u32 usedGravityPreventedMove:1;
/* field_4 */ u32 physicalDmg;
/* field_8 */ u32 specialDmg;
/* field_C */ u8 physicalBattlerId;
/* field_D */ u8 specialBattlerId;
/* field_E */ u16 fieldE;
u8 protected:1;
u8 wideGuarded:1;
u8 quickGuarded:1;
u8 spikyShielded:1;
u8 kingsShielded:1;
u8 banefulBunkered:1;
u8 endured:1;
u8 noValidMoves:1;
u8 helpingHand:1;
u8 bounceMove:1;
u8 stealMove:1;
u8 flag0Unknown:1;
u8 prlzImmobility:1;
u8 confusionSelfDmg:1;
u8 targetNotAffected:1;
u8 chargingTurn:1;
u8 fleeFlag:2; // for RunAway and Smoke Ball
u8 usedImprisionedMove:1;
u8 loveImmobility:1;
u8 usedDisabledMove:1;
u8 usedTauntedMove:1;
u8 flag2Unknown:1;
u8 flinchImmobility:1;
u8 notFirstStrike:1;
u8 flag_x10:1;
u8 usesBouncedMove:1;
u8 usedHealBlockedMove:1;
u8 usedGravityPreventedMove:1;
u32 physicalDmg;
u32 specialDmg;
u8 physicalBattlerId;
u8 specialBattlerId;
};
struct SpecialStatus

View File

@ -316,5 +316,8 @@
#define EFFECT_AFTER_YOU 310
#define EFFECT_BESTOW 311
#define EFFECT_ROTOTILLER 312
#define EFFECT_FLOWER_SHIELD 313
#define EFFECT_HIT_PREVENT_ESCAPE 314
#define EFFECT_SPEED_SWAP 315
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H

View File

@ -424,7 +424,7 @@
#define STRINGID_EMPTYSTRING5 421
#define STRINGID_KINDOFFER 422
#define STRINGID_RESETSTARGETSSTATLEVELS 423
#define STRINGID_PROTECTSTEAMFROMPRIORITY 424
#define STRINGID_EMPTYSTRING6 424
#define STRINGID_ALLYSWITCHPOSITION 425
#define STRINGID_RESTORETARGETSHEALTH 426
#define STRINGID_TOOKPJMNINTOTHESKY 427

View File

@ -97,6 +97,7 @@
#define FLAG_DMG_UNDERWATER 0x8000
#define FLAG_SOUND 0x10000
#define FLAG_BALLISTIC 0x20000
#define FLAG_PROTECTION_MOVE 0x40000
// Split defines.
#define SPLIT_PHYSICAL 0x0

View File

@ -276,8 +276,6 @@ static const u16 sDiscouragedPowerfulMoveEffects[] =
{
EFFECT_EXPLOSION,
EFFECT_DREAM_EATER,
EFFECT_RAZOR_WIND,
EFFECT_SKY_ATTACK,
EFFECT_RECHARGE,
EFFECT_SKULL_BASH,
EFFECT_SOLARBEAM,

View File

@ -3250,6 +3250,11 @@ void FaintClearSetData(void)
ptr[i] = 0;
gProtectStructs[gActiveBattler].protected = 0;
gProtectStructs[gActiveBattler].wideGuarded = 0;
gProtectStructs[gActiveBattler].quickGuarded = 0;
gProtectStructs[gActiveBattler].spikyShielded = 0;
gProtectStructs[gActiveBattler].kingsShielded = 0;
gProtectStructs[gActiveBattler].banefulBunkered = 0;
gProtectStructs[gActiveBattler].endured = 0;
gProtectStructs[gActiveBattler].noValidMoves = 0;
gProtectStructs[gActiveBattler].helpingHand = 0;
@ -4918,6 +4923,11 @@ static void TurnValuesCleanUp(bool8 var0)
{
gProtectStructs[gActiveBattler].protected = 0;
gProtectStructs[gActiveBattler].endured = 0;
gProtectStructs[gActiveBattler].wideGuarded = 0;
gProtectStructs[gActiveBattler].quickGuarded = 0;
gProtectStructs[gActiveBattler].spikyShielded = 0;
gProtectStructs[gActiveBattler].kingsShielded = 0;
gProtectStructs[gActiveBattler].banefulBunkered = 0;
}
else
{

View File

@ -553,7 +553,7 @@ static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air\n
static const u8 sText_CloakedInMysticalMoonlight[] =_("It became cloaked in mystical\nmoonlight!");
static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by swirling magma!");
static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} Vanished\ninstantly!");
static const u8 sText_ProtectedTeam[] =_("Wide Guard protected your team!");
static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected\nyour team!");
static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\nguard with the target!");
static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\npower with the target!");
static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which\nthe Defense and Sp.Def stats are swapped!");
@ -565,7 +565,6 @@ static const u8 sText_TransformedIntoWaterType[] =_("{B_DEF_NAME_WITH_PREFIX} tr
static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!");
static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind offer!");
static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}s stat changes\nwere removed!");
static const u8 sText_ProtectsTeamFromPriority[] =_("Quick Guard protected your team!");
static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} switched places!");
static const u8 sText_RestoreTargetsHealth[] =_("{B_DEF_NAME_WITH_PREFIX}s HP was restored!");
static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX} into the sky!");
@ -1067,7 +1066,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
sText_EmptyString4, // 421
sText_KindOffer, // 422
sText_ResetsTargetsStatLevels, // 423
sText_ProtectsTeamFromPriority, // 424
sText_EmptyString4, // 424
sText_AllySwitchPosition, // 425
sText_RestoreTargetsHealth, // 426
sText_TookPkmnIntoTheSky, // 427
@ -1221,7 +1220,7 @@ const u16 gRainContinuesStringIds[] =
const u16 gProtectLikeUsedStringIds[] =
{
STRINGID_PKMNPROTECTEDITSELF2, STRINGID_PKMNBRACEDITSELF, STRINGID_BUTITFAILED
STRINGID_PKMNPROTECTEDITSELF2, STRINGID_PKMNBRACEDITSELF, STRINGID_BUTITFAILED, STRINGID_PROTECTEDTEAM,
};
const u16 gReflectLightScreenSafeguardStringIds[] =

View File

@ -73,8 +73,6 @@ extern u16 GetBattlePyramidPickupItemId(void);
extern u8 sub_813B21C(void);
extern u16 get_unknown_box_id(void);
#define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
// this file's functions
static bool8 IsTwoTurnsMove(u16 move);
static void TrySetDestinyBondToHappen(void);
@ -933,6 +931,28 @@ static const u8 sUnknown_0831C4F8[] =
0x03, 0x00, 0x00, 0x00
};
bool32 IsBattlerProtected(u8 battlerId, u16 move)
{
if (!(gBattleMoves[move].flags & FLAG_PROTECT_AFFECTED))
return FALSE;
else if (gProtectStructs[battlerId].protected)
return TRUE;
else if ((gProtectStructs[battlerId].wideGuarded || gProtectStructs[BATTLE_PARTNER(battlerId)].wideGuarded)
&& gBattleMoves[move].target & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))
return TRUE;
else if (gProtectStructs[battlerId].banefulBunkered)
return TRUE;
else if (gProtectStructs[battlerId].spikyShielded)
return TRUE;
else if (gProtectStructs[battlerId].kingsShielded && gBattleMoves[move].power != 0)
return TRUE;
else if ((gProtectStructs[battlerId].quickGuarded || gProtectStructs[BATTLE_PARTNER(battlerId)].quickGuarded)
&& gBattleMoves[move].priority > 0)
return TRUE;
else
return FALSE;
}
static void atk00_attackcanceler(void)
{
s32 i;
@ -1033,7 +1053,7 @@ static void atk00_attackcanceler(void)
gBattlescriptCurrInstr = BattleScript_TookAttack;
RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
}
else if (DEFENDER_IS_PROTECTED
else if (IsBattlerProtected(gBattlerTarget, gCurrentMove)
&& (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
&& ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))))
{
@ -1071,7 +1091,7 @@ static bool32 JumpIfMoveFailed(u8 adder, u16 move)
static void atk40_jumpifaffectedbyprotect(void)
{
if (DEFENDER_IS_PROTECTED)
if (IsBattlerProtected(gBattlerTarget, gCurrentMove))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
JumpIfMoveFailed(5, 0);
@ -1086,7 +1106,7 @@ static void atk40_jumpifaffectedbyprotect(void)
bool8 JumpIfMoveAffectedByProtect(u16 move)
{
bool8 affected = FALSE;
if (DEFENDER_IS_PROTECTED)
if (IsBattlerProtected(gBattlerTarget, move))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
JumpIfMoveFailed(7, move);
@ -7051,10 +7071,9 @@ static void atk76_various(void)
static void atk77_setprotectlike(void) // protect and endure
{
bool8 notLastTurn = TRUE;
u16 lastMove = gLastResultingMoves[gBattlerAttacker];
bool32 notLastTurn = TRUE;
if (lastMove != MOVE_PROTECT && lastMove != MOVE_DETECT && lastMove != MOVE_ENDURE)
if (gBattleMoves[gLastResultingMoves[gBattlerAttacker]].flags & FLAG_PROTECTION_MOVE)
gDisableStructs[gBattlerAttacker].protectUses = 0;
if (gCurrentTurnActionNumber == (gBattlersCount - 1))
@ -7062,16 +7081,41 @@ static void atk77_setprotectlike(void) // protect and endure
if (sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] >= Random() && notLastTurn)
{
if (gBattleMoves[gCurrentMove].effect == EFFECT_PROTECT)
{
gProtectStructs[gBattlerAttacker].protected = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
}
if (gBattleMoves[gCurrentMove].effect == EFFECT_ENDURE)
{
gProtectStructs[gBattlerAttacker].endured = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
}
else if (gCurrentMove == MOVE_DETECT || gCurrentMove == MOVE_PROTECT)
{
gProtectStructs[gBattlerAttacker].protected = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
}
else if (gCurrentMove == MOVE_SPIKY_SHIELD)
{
gProtectStructs[gBattlerAttacker].spikyShielded = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
}
else if (gCurrentMove == MOVE_KING_S_SHIELD)
{
gProtectStructs[gBattlerAttacker].kingsShielded = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
}
else if (gCurrentMove == MOVE_BANEFUL_BUNKER)
{
gProtectStructs[gBattlerAttacker].banefulBunkered = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
}
else if (gCurrentMove == MOVE_WIDE_GUARD)
{
gProtectStructs[gBattlerAttacker].wideGuarded = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
}
else if (gCurrentMove == MOVE_QUICK_GUARD)
{
gProtectStructs[gBattlerAttacker].quickGuarded = 1;
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
}
gDisableStructs[gBattlerAttacker].protectUses++;
}
else
@ -8428,7 +8472,9 @@ static void atk9E_metronome(void)
{
s32 i;
gCurrentMove = (Random() % MOVES_COUNT) + 1;
gCurrentMove = (Random() % (MOVES_COUNT - 1)) + 1;
if (gBattleMoves[gCurrentMove].effect == EFFECT_PLACEHOLDER)
continue;
i = -1;
while (1)

View File

@ -2197,7 +2197,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 3,
.flags = 0,
.flags = FLAG_PROTECTION_MOVE,
.split = SPLIT_STATUS,
},
{ // MOVE_MACH_PUNCH
@ -2377,7 +2377,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 3,
.flags = 0,
.flags = FLAG_PROTECTION_MOVE,
.split = SPLIT_STATUS,
},
{ // MOVE_BONE_RUSH
@ -2449,7 +2449,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 3,
.flags = 0,
.flags = FLAG_PROTECTION_MOVE,
.split = SPLIT_STATUS,
},
{ // MOVE_CHARM
@ -5638,7 +5638,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_STATUS,
},
{ // MOVE_WIDE_GUARD
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
.effect = EFFECT_PROTECT,
.power = 0,
.type = TYPE_ROCK,
.accuracy = 0,
@ -5646,7 +5646,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 3,
.flags = 0,
.flags = FLAG_PROTECTION_MOVE,
.split = SPLIT_STATUS,
},
{ // MOVE_GUARD_SPLIT
@ -6022,7 +6022,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_SPECIAL,
},
{ // MOVE_QUICK_GUARD
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
.effect = EFFECT_PROTECT,
.power = 0,
.type = TYPE_FIGHTING,
.accuracy = 0,
@ -6030,7 +6030,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 3,
.flags = 0,
.flags = FLAG_PROTECTION_MOVE,
.split = SPLIT_STATUS,
},
{ // MOVE_ALLY_SWITCH
@ -6901,7 +6901,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_SPECIAL,
},
{ // MOVE_DISARMING_VOICE
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
.effect = EFFECT_HIT,
.power = 40,
.type = TYPE_FAIRY,
.accuracy = 0,
@ -6962,13 +6962,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_STATUS,
},
{ // MOVE_FLOWER_SHIELD
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
.effect = EFFECT_FLOWER_SHIELD,
.power = 0,
.type = TYPE_FAIRY,
.accuracy = 0,
.pp = 10,
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.target = MOVE_TARGET_USER | MOVE_TARGET_FOES_AND_ALLY,
.priority = 0,
.flags = 0,
.split = SPLIT_STATUS,
@ -7070,7 +7070,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_STATUS,
},
{ // MOVE_KING_S_SHIELD
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect, as it changes Aegislash's form
.effect = EFFECT_PROTECT,
.power = 0,
.type = TYPE_STEEL,
.accuracy = 0,
@ -7078,7 +7078,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 4,
.flags = FLAG_SNATCH_AFFECTED,
.flags = FLAG_PROTECTION_MOVE,
.split = SPLIT_STATUS,
},
{ // MOVE_PLAY_NICE
@ -7166,7 +7166,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_SPECIAL,
},
{ // MOVE_SPIKY_SHIELD
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect
.effect = EFFECT_PROTECT,
.power = 0,
.type = TYPE_GRASS,
.accuracy = 0,
@ -7174,7 +7174,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 4,
.flags = 0,
.flags = FLAG_PROTECTION_MOVE,
.split = SPLIT_STATUS,
},
{ // MOVE_AROMATIC_MIST
@ -7395,7 +7395,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_PHYSICAL,
},
{ // MOVE_THOUSAND_WAVES
.effect = EFFECT_PLACEHOLDER, // Needs a custom move effect (not sure if this is like Mean Look lol, might be)
.effect = EFFECT_HIT_PREVENT_ESCAPE,
.power = 90,
.type = TYPE_GROUND,
.accuracy = 100,
@ -7503,7 +7503,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_PHYSICAL,
},
{ // MOVE_BANEFUL_BUNKER
.effect = EFFECT_PLACEHOLDER,
.effect = EFFECT_PROTECT,
.power = 0,
.type = TYPE_POISON,
.accuracy = 0,
@ -7511,11 +7511,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.secondaryEffectChance = 0,
.target = MOVE_TARGET_USER,
.priority = 4,
.flags = 0,
.flags = FLAG_PROTECTION_MOVE,
.split = SPLIT_STATUS,
},
{ // MOVE_SPIRIT_SHACKLE
.effect = EFFECT_PLACEHOLDER,
.effect = EFFECT_HIT_PREVENT_ESCAPE,
.power = 80,
.type = TYPE_GHOST,
.accuracy = 100,
@ -7540,7 +7540,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
},
{ // MOVE_SPARKLING_ARIA
.effect = EFFECT_PLACEHOLDER,
.power = 00,
.power = 90,
.type = TYPE_WATER,
.accuracy = 100,
.pp = 10,
@ -7695,7 +7695,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_SPECIAL,
},
{ // MOVE_ANCHOR_SHOT
.effect = EFFECT_MEAN_LOOK,
.effect = EFFECT_HIT_PREVENT_ESCAPE,
.power = 80,
.type = TYPE_STEEL,
.accuracy = 100,
@ -7767,7 +7767,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_SPECIAL,
},
{ // MOVE_SPEED_SWAP
.effect = EFFECT_PLACEHOLDER,
.effect = EFFECT_SPEED_SWAP,
.power = 0,
.type = TYPE_PSYCHIC,
.accuracy = 0,
@ -7779,7 +7779,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_STATUS,
},
{ // MOVE_SMART_STRIKE
.effect = EFFECT_PLACEHOLDER,
.effect = EFFECT_HIT,
.power = 70,
.type = TYPE_STEEL,
.accuracy = 0,
@ -8043,7 +8043,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
.split = SPLIT_SPECIAL,
},
{ // MOVE_TEARFUL_LOOK
.effect = EFFECT_PLACEHOLDER,
.effect = EFFECT_NOBLE_ROAR,
.power = 0,
.type = TYPE_NORMAL,
.accuracy = 0,