mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-01-13 23:23:43 +01:00
Flower Shield and protect moves
This commit is contained in:
parent
de9e9072fc
commit
6b5c52e926
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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[] =
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user