mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-21 19:54:14 +01:00
Merge branch 'battle_engine' of https://github.com/rh-hideout/pokeemerald-expansion into battle_debug
This commit is contained in:
commit
e65f8dfd0e
File diff suppressed because it is too large
Load Diff
@ -13326,11 +13326,11 @@ Move_BOLT_BEAK::
|
||||
call BoltBeakSparks
|
||||
waitforvisualfinish
|
||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff
|
||||
launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4
|
||||
createsprite gHorizontalLungeSpriteTemplate, 0x2, 0x2, 0x4, 0x4
|
||||
delay 0x4
|
||||
launchtemplate gHornHitSpriteTemplate 0x84 0x3 0x8 0x8 0xa
|
||||
createsprite gHornHitSpriteTemplate, 0x84, 0x3, 0x8, 0x8, 0xa
|
||||
waitforvisualfinish
|
||||
launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1
|
||||
createsprite gFlashingHitSplatSpriteTemplate, 0x83, 0x4, 0x0, 0x0, 0x1, 0x1
|
||||
playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
|
||||
launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1
|
||||
waitforvisualfinish
|
||||
@ -13340,32 +13340,32 @@ Move_BOLT_BEAK::
|
||||
end
|
||||
BoltBeakSparks:
|
||||
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
|
||||
launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
|
||||
createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0
|
||||
delay 0x0
|
||||
launchtemplate gBoltBeakBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
|
||||
launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
|
||||
createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0
|
||||
createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1
|
||||
delay 0x0
|
||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff
|
||||
delay 0xa
|
||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x5 0x5 0x5bff
|
||||
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
|
||||
launchtemplate gBoltBeakBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
|
||||
launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
|
||||
createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0
|
||||
createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1
|
||||
delay 0x0
|
||||
launchtemplate gBoltBeakBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
|
||||
createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1
|
||||
delay 0x0
|
||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x76E1
|
||||
delay 0x14
|
||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x4 0x4 0x76E1
|
||||
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
|
||||
launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x0 0x14 0x0 0x0
|
||||
launchtemplate gBoltBeakBlueFlashingSparkTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x40 0x14 0x1 0x0
|
||||
launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x80 0x14 0x0 0x0
|
||||
launchtemplate gBoltBeakBlueFlashingSparkTemplate 0x4 0x8 0x0 0x0 0x20 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x0
|
||||
launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x20 0x14 0x0 0x0
|
||||
launchtemplate gBoltBeakBlueFlashingSparkTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x60 0x14 0x1 0x0
|
||||
launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xa0 0x14 0x0 0x0
|
||||
launchtemplate gBoltBeakBlueFlashingSparkTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xe0 0x14 0x2 0x0
|
||||
createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x0, 0x0
|
||||
createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x40, 0x14, 0x1, 0x0
|
||||
createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x80, 0x14, 0x0, 0x0
|
||||
createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x2, 0x0
|
||||
createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0x20, 0x14, 0x0, 0x0
|
||||
createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0x60, 0x14, 0x1, 0x0
|
||||
createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xa0, 0x14, 0x0, 0x0
|
||||
createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xe0, 0x14, 0x2, 0x0
|
||||
delay 0x4
|
||||
return
|
||||
|
||||
|
@ -367,6 +367,7 @@ gBattleScriptsForMoveEffects:: @ 82D86A8
|
||||
.4byte BattleScript_EffectFairyLock
|
||||
.4byte BattleScript_EffectAllySwitch
|
||||
.4byte BattleScript_EffectSleepHit
|
||||
.4byte BattleScript_EffectBodyPress
|
||||
|
||||
BattleScript_EffectSleepHit:
|
||||
setmoveeffect MOVE_EFFECT_SLEEP
|
||||
@ -2051,6 +2052,7 @@ BattleScript_EffectChangeTypeOnItem:
|
||||
BattleScript_EffectFusionCombo:
|
||||
BattleScript_EffectRevelationDance:
|
||||
BattleScript_EffectBelch:
|
||||
BattleScript_EffectBodyPress:
|
||||
|
||||
BattleScript_HitFromAtkCanceler::
|
||||
attackcanceler
|
||||
@ -2762,14 +2764,16 @@ BattleScriptFirstChargingTurn::
|
||||
attackcanceler
|
||||
printstring STRINGID_EMPTYSTRING3
|
||||
ppreduce
|
||||
attackstring
|
||||
pause B_WAIT_TIME_LONG
|
||||
copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID
|
||||
printfromtable gFirstTurnOfTwoStringIds
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
attackanimation
|
||||
waitanimation
|
||||
orword gHitMarker, HITMARKER_CHARGING
|
||||
setmoveeffect MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER
|
||||
seteffectprimary
|
||||
copybyte cMULTISTRING_CHOOSER, sTWOTURN_STRINGID
|
||||
printfromtable gFirstTurnOfTwoStringIds
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
return
|
||||
|
||||
BattleScript_EffectSuperFang::
|
||||
|
@ -239,8 +239,35 @@ struct AI_SavedBattleMon
|
||||
u16 species;
|
||||
};
|
||||
|
||||
struct AiLogicData
|
||||
{
|
||||
//attacker data
|
||||
u16 atkAbility;
|
||||
u16 atkItem;
|
||||
u16 atkHoldEffect;
|
||||
u8 atkParam;
|
||||
u16 atkSpecies;
|
||||
// target data
|
||||
u16 defAbility;
|
||||
u16 defItem;
|
||||
u16 defHoldEffect;
|
||||
u8 defParam;
|
||||
u16 defSpecies;
|
||||
// attacker partner data
|
||||
u8 battlerAtkPartner;
|
||||
u16 partnerMove;
|
||||
u16 atkPartnerAbility;
|
||||
u16 atkPartnerHoldEffect;
|
||||
bool32 targetSameSide;
|
||||
// target partner data
|
||||
u8 battlerDefPartner;
|
||||
u16 defPartnerAbility;
|
||||
u16 defPartnerHoldEffect;
|
||||
};
|
||||
|
||||
struct AI_ThinkingStruct
|
||||
{
|
||||
struct AiLogicData data;
|
||||
u8 aiState;
|
||||
u8 movesetIndex;
|
||||
u16 moveConsidered;
|
||||
@ -293,11 +320,14 @@ struct BattleResources
|
||||
struct StatsArray* beforeLvlUp;
|
||||
struct AI_ThinkingStruct *ai;
|
||||
struct BattleHistory *battleHistory;
|
||||
struct BattleScriptsStack *AI_ScriptsStack;
|
||||
u8 bufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
u8 bufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
};
|
||||
|
||||
#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai))
|
||||
#define AI_DATA ((struct AiLogicData *)(&gBattleResources->ai->data))
|
||||
#define BATTLE_HISTORY ((struct BattleHistory *)(gBattleResources->battleHistory))
|
||||
|
||||
struct BattleResults
|
||||
{
|
||||
u8 playerFaintCounter; // 0x0
|
||||
|
30
include/battle_ai_main.h
Normal file
30
include/battle_ai_main.h
Normal file
@ -0,0 +1,30 @@
|
||||
#ifndef GUARD_BATTLE_AI_MAIN_H
|
||||
#define GUARD_BATTLE_AI_MAIN_H
|
||||
|
||||
// return values for BattleAI_ChooseMoveOrAction
|
||||
// 0 - 3 are move idx
|
||||
#define AI_CHOICE_FLEE 4
|
||||
#define AI_CHOICE_WATCH 5
|
||||
#define AI_CHOICE_SWITCH 7
|
||||
|
||||
#define RETURN_SCORE_PLUS(val) \
|
||||
{ \
|
||||
score += val; \
|
||||
return score; \
|
||||
}
|
||||
|
||||
#define RETURN_SCORE_MINUS(val) \
|
||||
{ \
|
||||
score -= val; \
|
||||
return score; \
|
||||
}
|
||||
|
||||
|
||||
void BattleAI_SetupItems(void);
|
||||
void BattleAI_SetupFlags(void);
|
||||
void BattleAI_SetupAIData(u8 defaultScoreMoves);
|
||||
u8 BattleAI_ChooseMoveOrAction(void);
|
||||
|
||||
extern u8 sBattler_AI;
|
||||
|
||||
#endif // GUARD_BATTLE_AI_MAIN_H
|
@ -1,27 +0,0 @@
|
||||
#ifndef GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
|
||||
#define GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
|
||||
|
||||
// return values for BattleAI_ChooseMoveOrAction
|
||||
// 0 - 3 are move idx
|
||||
#define AI_CHOICE_FLEE 4
|
||||
#define AI_CHOICE_WATCH 5
|
||||
#define AI_CHOICE_SWITCH 7
|
||||
|
||||
s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef);
|
||||
s32 AI_CalcPartyMonDamage(u16 move, u8 battlerAtk, u8 battlerDef, struct Pokemon *mon);
|
||||
u16 AI_GetTypeEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef);
|
||||
void BattleAI_SetupItems(void);
|
||||
void BattleAI_SetupFlags(void);
|
||||
void BattleAI_SetupAIData(u8 defaultScoreMoves);
|
||||
u8 BattleAI_ChooseMoveOrAction(void);
|
||||
bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler);
|
||||
bool32 IsBattlerAIControlled(u32 battlerId);
|
||||
void ClearBattlerMoveHistory(u8 battlerId);
|
||||
void RecordLastUsedMoveBy(u32 battlerId, u32 move);
|
||||
void RecordKnownMove(u8 battlerId, u32 move);
|
||||
void RecordAbilityBattle(u8 battlerId, u16 abilityId);
|
||||
void ClearBattlerAbilityHistory(u8 battlerId);
|
||||
void RecordItemEffectBattle(u8 battlerId, u8 itemEffect);
|
||||
void ClearBattlerItemEffectHistory(u8 battlerId);
|
||||
|
||||
#endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
|
@ -34,5 +34,6 @@ enum {
|
||||
void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId);
|
||||
void AI_TrySwitchOrUseItem(void);
|
||||
u8 GetMostSuitableMonToSwitchInto(void);
|
||||
bool32 ShouldSwitch(void);
|
||||
|
||||
#endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H
|
||||
|
168
include/battle_ai_util.h
Normal file
168
include/battle_ai_util.h
Normal file
@ -0,0 +1,168 @@
|
||||
#ifndef GUARD_BATTLE_AI_UTIL_H
|
||||
#define GUARD_BATTLE_AI_UTIL_H
|
||||
|
||||
// for IsAiFaster
|
||||
#define AI_CHECK_FASTER 0 // if_user_faster
|
||||
#define AI_CHECK_SLOWER 1 // if_target_faster
|
||||
|
||||
#define FOE(battler) ((battler ^ BIT_SIDE) & BIT_SIDE)
|
||||
|
||||
bool32 AI_RandLessThan(u8 val);
|
||||
void RecordLastUsedMoveByTarget(void);
|
||||
bool32 IsBattlerAIControlled(u32 battlerId);
|
||||
void ClearBattlerMoveHistory(u8 battlerId);
|
||||
void RecordLastUsedMoveBy(u32 battlerId, u32 move);
|
||||
void RecordKnownMove(u8 battlerId, u32 move);
|
||||
void RecordAbilityBattle(u8 battlerId, u16 abilityId);
|
||||
void ClearBattlerAbilityHistory(u8 battlerId);
|
||||
void RecordItemEffectBattle(u8 battlerId, u8 itemEffect);
|
||||
void ClearBattlerItemEffectHistory(u8 battlerId);
|
||||
void SaveBattlerData(u8 battlerId);
|
||||
void SetBattlerData(u8 battlerId);
|
||||
void RestoreBattlerData(u8 battlerId);
|
||||
|
||||
u32 GetTotalBaseStat(u32 species);
|
||||
bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler);
|
||||
bool32 AtMaxHp(u8 battler);
|
||||
u32 GetHealthPercentage(u8 battler);
|
||||
bool32 IsBattlerTrapped(u8 battler, bool8 switching);
|
||||
bool32 IsAiFaster(u8 battler);
|
||||
bool32 CanTargetFaintAi(u8 battlerDef, u8 battlerAtk);
|
||||
bool32 CanMoveFaintBattler(u16 move, u8 battlerDef, u8 battlerAtk, u8 nHits);
|
||||
bool32 CanTargetFaintAiWithMod(u8 battlerDef, u8 battlerAtk, s32 hpMod, s32 dmgMod);
|
||||
s32 AI_GetAbility(u32 battlerId);
|
||||
u16 AI_GetHoldEffect(u32 battlerId);
|
||||
u32 AI_GetMoveAccuracy(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u8 atkHoldEffect, u8 defHoldEffect, u16 move);
|
||||
bool32 DoesBattlerIgnoreAbilityChecks(u16 atkAbility, u16 move);
|
||||
bool32 AI_WeatherHasEffect(void);
|
||||
bool32 CanAttackerFaintTarget(u8 battlerAtk, u8 battlerDef, u8 index, u8 numHits);
|
||||
bool32 AI_IsBattlerGrounded(u8 battlerId);
|
||||
bool32 HasDamagingMove(u8 battlerId);
|
||||
bool32 HasDamagingMoveOfType(u8 battlerId, u8 type);
|
||||
u32 GetBattlerSecondaryDamage(u8 battlerId);
|
||||
bool32 BattlerWillFaintFromWeather(u8 battler, u16 ability);
|
||||
bool32 BattlerWillFaintFromSecondaryDamage(u8 battler, u16 ability);
|
||||
bool32 ShouldTryOHKO(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u32 accuracy, u16 move);
|
||||
bool32 ShouldUseRecoilMove(u8 battlerAtk, u8 battlerDef, u32 recoilDmg, u8 moveIndex);
|
||||
u16 GetBattlerSideSpeedAverage(u8 battler);
|
||||
bool32 ShouldAbsorb(u8 battlerAtk, u8 battlerDef, u16 move, s32 damage);
|
||||
bool32 ShouldRecover(u8 battlerAtk, u8 battlerDef, u16 move, u8 healPercent);
|
||||
bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect);
|
||||
bool32 ShouldPivot(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u8 moveIndex);
|
||||
bool32 IsRecycleEncouragedItem(u16 item);
|
||||
bool32 CanKnockOffItem(u8 battler, u16 item);
|
||||
bool32 IsAbilityOfRating(u16 ability, s8 rating);
|
||||
s8 GetAbilityRating(u16 ability);
|
||||
|
||||
// stat stage checks
|
||||
bool32 AnyStatIsRaised(u8 battlerId);
|
||||
bool32 ShouldLowerStat(u8 battler, u16 battlerAbility, u8 stat);
|
||||
bool32 BattlerStatCanRise(u8 battler, u16 battlerAbility, u8 stat);
|
||||
bool32 AreBattlersStatsMaxed(u8 battler);
|
||||
bool32 BattlerHasAnyStatRaised(u8 battlerId);
|
||||
u32 CountPositiveStatStages(u8 battlerId);
|
||||
u32 CountNegativeStatStages(u8 battlerId);
|
||||
bool32 ShouldLowerAttack(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||
bool32 ShouldLowerDefense(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||
bool32 ShouldLowerSpeed(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||
bool32 ShouldLowerSpAtk(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||
bool32 ShouldLowerSpDef(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||
bool32 ShouldLowerAccuracy(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||
bool32 ShouldLowerEvasion(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||
|
||||
// move checks
|
||||
bool32 IsAffectedByPowder(u8 battler, u16 ability, u16 holdEffect);
|
||||
bool32 MovesWithSplitUnusable(u32 attacker, u32 target, u32 split);
|
||||
s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef);
|
||||
u8 GetMoveDamageResult(u16 move);
|
||||
u32 GetCurrDamageHpPercent(u8 battlerAtk, u8 battlerDef);
|
||||
u16 AI_GetTypeEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef);
|
||||
u8 AI_GetMoveEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef);
|
||||
u16 *GetMovesArray(u32 battler);
|
||||
bool32 IsConfusionMoveEffect(u16 moveEffect);
|
||||
bool32 HasMove(u32 battlerId, u32 move);
|
||||
bool32 HasOnlyMovesWithSplit(u32 battlerId, u32 split, bool32 onlyOffensive);
|
||||
bool32 HasMoveWithSplit(u32 battler, u32 split);
|
||||
bool32 HasMoveWithType(u32 battler, u8 type);
|
||||
bool32 HasMoveWithTypeAndSplit(u32 battler, u8 type, u8 split);
|
||||
bool32 HasMoveEffect(u32 battlerId, u16 moveEffect);
|
||||
bool32 HasMoveWithLowAccuracy(u8, u8, u8, bool32, u16, u16, u16, u16);
|
||||
bool32 TestMoveFlagsInMoveset(u8 battler, u32 flags);
|
||||
bool32 IsAromaVeilProtectedMove(u16 move);
|
||||
bool32 IsNonVolatileStatusMoveEffect(u16 moveEffect);
|
||||
bool32 IsStatLoweringMoveEffect(u16 moveEffect);
|
||||
bool32 IsMoveRedirectionPrevented(u16 move, u16 atkAbility);
|
||||
bool32 IsMoveEncouragedToHit(u8 battlerAtk, u8 battlerDef, u16 move);
|
||||
bool32 IsHazardMoveEffect(u16 moveEffect);
|
||||
bool32 MoveCallsOtherMove(u16 move);
|
||||
bool32 MoveRequiresRecharging(u16 move);
|
||||
bool32 IsInstructBannedMove(u16 move);
|
||||
bool32 IsEncoreEncouragedEffect(u16 moveEffect);
|
||||
void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score);
|
||||
bool32 ShouldSetSandstorm(u8 battler, u16 ability, u16 holdEffect);
|
||||
bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect);
|
||||
bool32 ShouldSetRain(u8 battlerAtk, u16 ability, u16 holdEffect);
|
||||
bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect);
|
||||
bool32 HasSleepMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef);
|
||||
bool32 IsHealingMoveEffect(u16 effect);
|
||||
bool32 HasHealingEffect(u32 battler);
|
||||
bool32 IsTrappingMoveEffect(u16 effect);
|
||||
bool32 HasTrappingMoveEffect(u8 battler);
|
||||
bool32 ShouldFakeOut(u8 battlerAtk, u8 battlerDef, u16 move);
|
||||
bool32 HasThawingMove(u8 battlerId);
|
||||
bool32 IsStatRaisingEffect(u16 effect);
|
||||
bool32 IsStatLoweringEffect(u16 effect);
|
||||
bool32 IsStatRaisingEffect(u16 effect);
|
||||
bool32 IsAttackBoostMoveEffect(u16 effect);
|
||||
bool32 IsUngroundingEffect(u16 effect);
|
||||
bool32 IsSemiInvulnerable(u8 battlerDef, u16 move);
|
||||
|
||||
// status checks
|
||||
bool32 CanBeBurned(u8 battler, u16 ability);
|
||||
bool32 CanBePoisoned(u8 battler, u16 ability);
|
||||
bool32 CanBeConfused(u8 battler, u16 ability);
|
||||
bool32 CanSleep(u8 battler, u16 ability);
|
||||
bool32 IsBattlerIncapacitated(u8 battler, u16 ability);
|
||||
bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove);
|
||||
bool32 ShouldPoisonSelf(u8 battler, u16 ability);
|
||||
bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove);
|
||||
bool32 AI_CanParalyze(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove);
|
||||
bool32 AI_CanConfuse(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove);
|
||||
bool32 ShouldBurnSelf(u8 battler, u16 ability);
|
||||
bool32 AI_CanBurn(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove);
|
||||
bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender);
|
||||
bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof);
|
||||
u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move);
|
||||
bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move);
|
||||
bool32 IsWakeupTurn(u8 battler);
|
||||
|
||||
// partner logic
|
||||
u16 GetAllyChosenMove(void);
|
||||
bool32 IsValidDoubleBattle(u8 battlerAtk);
|
||||
bool32 IsTargetingPartner(u8 battlerAtk, u8 battlerDef);
|
||||
bool32 DoesPartnerHaveSameMoveEffect(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove);
|
||||
bool32 PartnerHasSameMoveEffectWithoutTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove);
|
||||
bool32 PartnerMoveEffectIsStatusSameTarget(u8 battlerAtkPartner, u8 battlerDef, u16 partnerMove);
|
||||
bool32 PartnerMoveEffectIsWeather(u8 battlerAtkPartner, u16 partnerMove);
|
||||
bool32 PartnerMoveEffectIsTerrain(u8 battlerAtkPartner, u16 partnerMove);
|
||||
bool32 PartnerMoveIs(u8 battlerAtkPartner, u16 partnerMove, u16 moveCheck);
|
||||
bool32 PartnerMoveIsSameAsAttacker(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove);
|
||||
bool32 PartnerMoveIsSameNoTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove);
|
||||
bool32 ShouldUseWishAromatherapy(u8 battlerAtk, u8 battlerDef, u16 move);
|
||||
|
||||
// party logic
|
||||
s32 AI_CalcPartyMonDamage(u16 move, u8 battlerAtk, u8 battlerDef, struct Pokemon *mon);
|
||||
s32 CountUsablePartyMons(u8 battlerId);
|
||||
bool32 IsPartyFullyHealedExceptBattler(u8 battler);
|
||||
bool32 PartyHasMoveSplit(u8 battlerId, u8 split);
|
||||
bool32 SideHasMoveSplit(u8 battlerId, u8 split);
|
||||
|
||||
// score increases
|
||||
void IncreaseStatUpScore(u8 battlerAtk, u8 battlerDef, u8 statId, s16 *score);
|
||||
void IncreasePoisonScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score);
|
||||
void IncreaseBurnScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score);
|
||||
void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score);
|
||||
void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score);
|
||||
void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score);
|
||||
|
||||
#endif //GUARD_BATTLE_AI_UTIL_H
|
@ -6,6 +6,12 @@
|
||||
#define WINDOW_CLEAR 0x1
|
||||
#define WINDOW_x80 0x80
|
||||
|
||||
struct StatFractions
|
||||
{
|
||||
u8 dividend;
|
||||
u8 divisor;
|
||||
};
|
||||
|
||||
s32 CalcCritChanceStage(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recordAbility);
|
||||
u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||
u8 GetBattlerTurnOrderNum(u8 battlerId);
|
||||
@ -27,8 +33,11 @@ u32 IsLeafGuardProtected(u32 battler);
|
||||
bool32 IsShieldsDownProtected(u32 battler);
|
||||
u32 IsAbilityStatusProtected(u32 battler);
|
||||
bool32 TryResetBattlerStatChanges(u8 battler);
|
||||
bool32 CanCamouflage(u8 battlerId);
|
||||
u16 GetNaturePowerMove(void);
|
||||
|
||||
extern void (* const gBattleScriptingCommandsTable[])(void);
|
||||
extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4];
|
||||
extern const struct StatFractions gAccuracyStageRatios[];
|
||||
|
||||
#endif // GUARD_BATTLE_SCRIPT_COMMANDS_H
|
||||
|
@ -131,6 +131,21 @@ void ClearIllusionMon(u32 battlerId);
|
||||
bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId);
|
||||
bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
|
||||
u8 GetBattleMoveSplit(u32 moveId);
|
||||
bool32 TestMoveFlags(u16 move, u32 flag);
|
||||
struct Pokemon *GetBattlerPartyData(u8 battlerId);
|
||||
bool32 CanFling(u8 battlerId);
|
||||
bool32 IsTelekinesisBannedSpecies(u16 species);
|
||||
bool32 IsHealBlockPreventingMove(u32 battler, u32 move);
|
||||
bool32 IsThawingMove(u8 battlerId, u16 move);
|
||||
bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId);
|
||||
|
||||
// ability checks
|
||||
bool32 IsRolePlayBannedAbilityAtk(u16 ability);
|
||||
bool32 IsRolePlayBannedAbility(u16 ability);
|
||||
bool32 IsSkillSwapBannedAbility(u16 ability);
|
||||
bool32 IsWorrySeedBannedAbility(u16 ability);
|
||||
bool32 IsGastroAcidBannedAbility(u16 ability);
|
||||
bool32 IsEntrainmentBannedAbilityAttacker(u16 ability);
|
||||
bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability);
|
||||
|
||||
#endif // GUARD_BATTLE_UTIL_H
|
||||
|
@ -220,6 +220,9 @@
|
||||
#define SIDE_STATUS_CRAFTY_SHIELD (1 << 20)
|
||||
#define SIDE_STATUS_MAT_BLOCK (1 << 21)
|
||||
|
||||
#define SIDE_STATUS_HAZARDS_ANY (SIDE_STATUS_SPIKES | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_STEALTH_ROCK)
|
||||
#define SIDE_STATUS_SCREEN_ANY (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL)
|
||||
|
||||
// Field affecting statuses.
|
||||
#define STATUS_FIELD_MAGIC_ROOM (1 << 0)
|
||||
#define STATUS_FIELD_TRICK_ROOM (1 << 1)
|
||||
|
@ -35,20 +35,29 @@
|
||||
#define MOVE_POWER_GOOD 2 // Similar dmg range with best.
|
||||
#define MOVE_POWER_WEAK 3 // Significantly lower than best and good.
|
||||
|
||||
// script's table id to bit
|
||||
#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
|
||||
#define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
|
||||
#define AI_SCRIPT_CHECK_VIABILITY (1 << 2)
|
||||
#define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3)
|
||||
#define AI_SCRIPT_RISKY (1 << 4)
|
||||
#define AI_SCRIPT_PREFER_STRONGEST_MOVE (1 << 5)
|
||||
#define AI_SCRIPT_PREFER_BATON_PASS (1 << 6)
|
||||
#define AI_SCRIPT_DOUBLE_BATTLE (1 << 7)
|
||||
#define AI_SCRIPT_HP_AWARE (1 << 8)
|
||||
#define AI_SCRIPT_UNKNOWN (1 << 9)
|
||||
// 10 - 28 are not used
|
||||
#define AI_SCRIPT_ROAMING (1 << 29)
|
||||
#define AI_SCRIPT_SAFARI (1 << 30)
|
||||
#define AI_SCRIPT_FIRST_BATTLE (1 << 31)
|
||||
// AI Flags. Most run specific functions to update score, new flags are used for internal logic in other scripts
|
||||
#define AI_FLAG_CHECK_BAD_MOVE (1 << 0)
|
||||
#define AI_FLAG_TRY_TO_FAINT (1 << 1)
|
||||
#define AI_FLAG_CHECK_VIABILITY (1 << 2)
|
||||
#define AI_FLAG_SETUP_FIRST_TURN (1 << 3)
|
||||
#define AI_FLAG_RISKY (1 << 4)
|
||||
#define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5)
|
||||
#define AI_FLAG_PREFER_BATON_PASS (1 << 6)
|
||||
#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // removed, split between AI_FLAG_CHECK_BAD_MOVE & AI_FLAG_CHECK_GOOD_MOVE
|
||||
#define AI_FLAG_HP_AWARE (1 << 8)
|
||||
// New, Trainer Handicap Flags
|
||||
#define AI_FLAG_NEGATE_UNAWARE (1 << 9) // AI is NOT aware of negating effects like wonder room, mold breaker, etc
|
||||
#define AI_FLAG_WILL_SUICIDE (1 << 10) // AI will use explosion / self destruct / final gambit / etc
|
||||
// New, Trainer Strategy Flags
|
||||
#define AI_FLAG_HELP_PARTNER (1 << 11) // AI can try to help partner. If not set, will tend not to target partner
|
||||
#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves
|
||||
#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished
|
||||
#define AI_FLAG_SCREENER (1 << 14) // AI prefers screening effects like reflect, mist, etc. TODO unfinished
|
||||
#define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks
|
||||
|
||||
// 'other' ai logic flags
|
||||
#define AI_FLAG_ROAMING (1 << 29)
|
||||
#define AI_FLAG_SAFARI (1 << 30)
|
||||
#define AI_FLAG_FIRST_BATTLE (1 << 31)
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_AI_H
|
||||
|
@ -76,59 +76,59 @@
|
||||
#endif
|
||||
|
||||
// Calculation settings
|
||||
#define B_CRIT_CHANCE GEN_6 // Chances of a critical hit landing. See CalcCritChanceStage.
|
||||
#define B_CRIT_MULTIPLIER GEN_6 // In Gen6+, critical hits multiply damage by 1.5 instead of 2.
|
||||
#define B_EXP_CATCH GEN_6 // In Gen6+, Pokémon get experience from catching.
|
||||
#define B_TRAINER_EXP_MULTIPLIER GEN_6 // In Gen7+, trainer battles no longer give a 1.5 multiplier to exp gain.
|
||||
#define B_SPLIT_EXP GEN_5 // In Gen6+, all participating mon get full experience.
|
||||
#define B_SCALED_EXP GEN_6 // In Gen5 and Gen7+, experience is weighted by level difference.
|
||||
#define B_BURN_DAMAGE GEN_6 // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th.
|
||||
#define B_PARALYSIS_SPEED GEN_6 // In Gen7+, speed is decreased by 50% instead of 75%.
|
||||
#define B_TERRAIN_TYPE_BOOST GEN_6 // In Gen8+, damage is boosted by 30% instead of 50%.
|
||||
#define B_BINDING_DAMAGE GEN_6 // In Gen6+, binding damage is 1/8 of max HP instead of 1/16. (With Binding Band, 1/6 and 1/8 respectively.)
|
||||
#define B_CONFUSION_SELF_DMG_CHANCE GEN_6 // In Gen7+, confusion has a 33.3% of self-damage, instead of 50%.
|
||||
#define B_MULTI_HIT_CHANCE GEN_6 // In Gen5+, multi-hit moves have different %. See Cmd_setmultihitcounter for values.
|
||||
#define B_RECOIL_IF_MISS_DMG GEN_6 // In Gen5+, Jump Kick and Hi Jump Kick will always do half of the user's max HP when missing.
|
||||
#define B_PSYWAVE_DMG GEN_6 // Psywave's damage formula. See Cmd_psywavedamageeffect.
|
||||
#define B_BADGE_BOOST GEN_6 // In Gen4+, Gym Badges no longer boost a Pokémon's stats
|
||||
#define B_CRIT_CHANCE GEN_7 // Chances of a critical hit landing. See CalcCritChanceStage.
|
||||
#define B_CRIT_MULTIPLIER GEN_7 // In Gen6+, critical hits multiply damage by 1.5 instead of 2.
|
||||
#define B_EXP_CATCH GEN_7 // In Gen6+, Pokémon get experience from catching.
|
||||
#define B_TRAINER_EXP_MULTIPLIER GEN_7 // In Gen7+, trainer battles no longer give a 1.5 multiplier to EXP gain.
|
||||
#define B_SPLIT_EXP GEN_7 // In Gen6+, all participating mon get full experience.
|
||||
#define B_SCALED_EXP GEN_7 // In Gen5 and Gen7+, experience is weighted by level difference.
|
||||
#define B_BURN_DAMAGE GEN_7 // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th.
|
||||
#define B_PARALYSIS_SPEED GEN_7 // In Gen7+, Speed is decreased by 50% instead of 75%.
|
||||
#define B_TERRAIN_TYPE_BOOST GEN_8 // In Gen8, damage is boosted by 30% instead of 50%.
|
||||
#define B_BINDING_DAMAGE GEN_7 // In Gen6+, binding damage is 1/8 of max HP instead of 1/16. (With Binding Band, 1/6 and 1/8 respectively.)
|
||||
#define B_CONFUSION_SELF_DMG_CHANCE GEN_7 // In Gen7+, confusion has a 33.3% of self-damage, instead of 50%.
|
||||
#define B_MULTI_HIT_CHANCE GEN_7 // In Gen5+, multi-hit moves have different %. See Cmd_setmultihitcounter for values.
|
||||
#define B_RECOIL_IF_MISS_DMG GEN_7 // In Gen5+, Jump Kick and High Jump Kick will always do half of the user's max HP when missing.
|
||||
#define B_PSYWAVE_DMG GEN_7 // Psywave's damage formula. See Cmd_psywavedamageeffect.
|
||||
#define B_BADGE_BOOST GEN_7 // In Gen4+, Gym Badges no longer boost a Pokémon's stats.
|
||||
|
||||
// Move data settings
|
||||
#define B_UPDATED_MOVE_DATA GEN_7 // Updates move data in gBattleMoves, including Power, Accuracy, PP, stat changes, targets, chances of secondary effects, etc.
|
||||
#define B_PHYSICAL_SPECIAL_SPLIT GEN_6 // In Gen3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this.
|
||||
#define B_FELL_STINGER_STAT_RAISE GEN_6 // In Gen7+, it raises Atk by 3 stages instead of 2 if it causes the target to faint.
|
||||
#define B_KINGS_SHIELD_LOWER_ATK GEN_6 // In Gen7+, it lowers Atk by 1 stage instead of 2 of oponents that hit it.
|
||||
#define B_UPDATED_MOVE_DATA GEN_8 // Updates move data in gBattleMoves, including Power, Accuracy, PP, stat changes, targets, chances of secondary effects, etc.
|
||||
#define B_PHYSICAL_SPECIAL_SPLIT GEN_7 // In Gen3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this.
|
||||
#define B_FELL_STINGER_STAT_RAISE GEN_7 // In Gen7+, it raises Atk by 3 stages instead of 2 if it causes the target to faint.
|
||||
#define B_KINGS_SHIELD_LOWER_ATK GEN_7 // In Gen7+, it lowers Atk by 1 stage instead of 2 of oponents that hit it.
|
||||
#define B_SPEED_BUFFING_RAPID_SPIN GEN_8 // In Gen8, Rapid Spin raises the user's Speed by 1 stage.
|
||||
#define B_WATER_SHURIKEN_SPLIT GEN_8 // In Gen7, Water Shuriken was changed from Physical to Special.
|
||||
|
||||
// Other move settings
|
||||
#define B_SOUND_SUBSTITUTE GEN_6 // In Gen6+, sound moves bypass Substitute.
|
||||
#define B_TOXIC_NEVER_MISS GEN_6 // In Gen6+, if Toxic is used by a Poison type, it will never miss.
|
||||
#define B_PAYBACK_SWITCH_BOOST GEN_6 // In Gen5+, if the opponent switches out, Payback's damage will no longer be doubled.
|
||||
#define B_BINDING_TURNS GEN_6 // In Gen5+, binding moves last for 4-5 turns instead of 2-5 turns. (With Grip Claw, 7 and 5 turns respectively.)
|
||||
#define B_UPROAR_TURNS GEN_6 // In Gen5+, Uproar lasts for 3 turns instead of 2-5 turns.
|
||||
#define B_DISABLE_TURNS GEN_6 // Disable's turns. See Cmd_disablelastusedattack.
|
||||
#define B_INCINERATE_GEMS GEN_6 // In Gen6+, Incinerate can destroy Gems.
|
||||
#define B_MINIMIZE_DMG_ACC GEN_6 // In Gen6+, moves that causes double damage to minimized Pokémon will also skip accuracy checks.
|
||||
#define B_PP_REDUCED_BY_SPITE GEN_6 // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5.
|
||||
#define B_CAN_SPITE_FAIL GEN_6 // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP.
|
||||
#define B_CRASH_IF_TARGET_IMMUNE GEN_6 // In Gen4+, The user of Jump Kick or Hi Jump Kick will "keep going and crash" if it attacks a target that is immune to the move.
|
||||
#define B_TAILWIND_TIMER GEN_5 // In Gen5+, Tailwind lasts 4 turns instead of 3.
|
||||
#define B_MEMENTO_FAIL GEN_4 // In Gen4+, memento fails if there is no target or if the target is protected or behind substitute. But not if atk/sp.atk are at -6
|
||||
#define B_SOUND_SUBSTITUTE GEN_7 // In Gen6+, sound moves bypass Substitute.
|
||||
#define B_TOXIC_NEVER_MISS GEN_7 // In Gen6+, if Toxic is used by a Poison-type Pokémon, it will never miss.
|
||||
#define B_PAYBACK_SWITCH_BOOST GEN_7 // In Gen5+, if the opponent switches out, Payback's damage will no longer be doubled.
|
||||
#define B_BINDING_TURNS GEN_7 // In Gen5+, binding moves last for 4-5 turns instead of 2-5 turns. (With Grip Claw, 7 and 5 turns respectively.)
|
||||
#define B_UPROAR_TURNS GEN_7 // In Gen5+, Uproar lasts for 3 turns instead of 2-5 turns.
|
||||
#define B_DISABLE_TURNS GEN_7 // Disable's turns. See Cmd_disablelastusedattack.
|
||||
#define B_INCINERATE_GEMS GEN_7 // In Gen6+, Incinerate can destroy Gems.
|
||||
#define B_MINIMIZE_DMG_ACC GEN_7 // In Gen6+, moves that causes double damage to minimized Pokémon will also skip accuracy checks.
|
||||
#define B_PP_REDUCED_BY_SPITE GEN_7 // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5.
|
||||
#define B_CAN_SPITE_FAIL GEN_7 // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP.
|
||||
#define B_CRASH_IF_TARGET_IMMUNE GEN_7 // In Gen4+, The user of Jump Kick or High Jump Kick will "keep going and crash" if it attacks a target that is immune to the move.
|
||||
#define B_TAILWIND_TIMER GEN_7 // In Gen5+, Tailwind lasts 4 turns instead of 3.
|
||||
#define B_MEMENTO_FAIL GEN_7 // In Gen4+, Memento fails if there is no target or if the target is protected or behind substitute. But not if Atk/Sp. Atk are at -6.
|
||||
|
||||
// Ability settings
|
||||
#define B_ABILITY_WEATHER GEN_6 // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move.
|
||||
#define B_GALE_WINGS GEN_6 // In Gen7+ requires full HP to trigger.
|
||||
#define B_ABILITY_WEATHER GEN_7 // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability.
|
||||
#define B_GALE_WINGS GEN_7 // In Gen7+ requires full HP to trigger.
|
||||
#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.
|
||||
#define B_GHOSTS_ESCAPE GEN_6 // In Gen6+, ghosts can escape even when blocked by abilities such as Shadow Tag.
|
||||
#define B_MOODY_ACC_EVASION GEN_6 // In Gen8+, Moody CANNOT raise Accuray and Evasion any more.
|
||||
#define B_FLASH_FIRE_FROZEN GEN_6 // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before.
|
||||
#define B_SYNCHRONIZE_NATURE GEN_6 // In Gen8+, if the Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same ability, as opposed to 50% previously.
|
||||
#define B_GHOSTS_ESCAPE GEN_7 // In Gen6+, Ghost-type Pokémon can escape even when blocked by abilities such as Shadow Tag.
|
||||
#define B_MOODY_ACC_EVASION GEN_8 // In Gen8, Moody CANNOT raise Accuracy and Evasion anymore.
|
||||
#define B_FLASH_FIRE_FROZEN GEN_7 // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before.
|
||||
#define B_SYNCHRONIZE_NATURE GEN_8 // In Gen8, if the Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same ability, as opposed to 50% previously.
|
||||
#define B_UPDATED_INTIMIDATE GEN_8 // In Gen8, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities.
|
||||
|
||||
// Item settings
|
||||
#define B_HP_BERRIES GEN_6 // In Gen4+, berries which restore hp activate immediately after hp drops to half. In gen3, the effect occurs at the end of the turn.
|
||||
#define B_BERRIES_INSTANT GEN_6 // In Gen4+, most berries activate on battle start/switch-in if applicable. In gen3, they only activate either at the move end or turn end.
|
||||
#define B_HP_BERRIES GEN_7 // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn.
|
||||
#define B_BERRIES_INSTANT GEN_7 // In Gen4+, most berries activate on battle start/switch-in if applicable. In Gen3, they only activate either at the move end or turn end.
|
||||
#define B_X_ITEMS_BUFF GEN_7 // In Gen7+, the X Items raise a stat by 2 stages instead of 1.
|
||||
#define B_MENTAL_HERB GEN_5 // In Gen5+, mental herb cures Taunt, Encore, Heal Block, and Disable
|
||||
|
||||
// Flag settings
|
||||
// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to.
|
||||
@ -153,10 +153,10 @@
|
||||
|
||||
// Other
|
||||
#define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter.
|
||||
#define B_SLEEP_TURNS GEN_6 // In Gen5+, sleep lasts for 1-3 turns instead of 2-5 turns.
|
||||
#define B_PARALYZE_ELECTRIC GEN_6 // In Gen6+, Electric-type Pokémon can't be paralyzed.
|
||||
#define B_POWDER_GRASS GEN_6 // In Gen6+, Grass-type Pokémon are immune to powder and spore moves.
|
||||
#define B_STEEL_RESISTANCES GEN_6 // In Gen6+, Steel-type Pokémon are no longer resistant to Dark and Ghost moves.
|
||||
#define B_SLEEP_TURNS GEN_7 // In Gen5+, sleep lasts for 1-3 turns instead of 2-5 turns.
|
||||
#define B_PARALYZE_ELECTRIC GEN_7 // In Gen6+, Electric-type Pokémon can't be paralyzed.
|
||||
#define B_POWDER_GRASS GEN_7 // In Gen6+, Grass-type Pokémon are immune to powder and spore moves.
|
||||
#define B_STEEL_RESISTANCES GEN_7 // In Gen6+, Steel-type Pokémon are no longer resistant to Dark-type and Ghost-type moves.
|
||||
#define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8.
|
||||
|
||||
// Animation Settings
|
||||
@ -176,8 +176,8 @@
|
||||
#define B_NEW_IMPACT_PALETTE FALSE // If set to TRUE, it updates the basic 'hit' palette.
|
||||
#define B_NEW_SURF_PARTICLE_PALETTE FALSE // If set to TRUE, it updates Surf's wave palette.
|
||||
|
||||
#define B_HIDE_HEALTHBOXES_DURING_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations.
|
||||
#define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades.
|
||||
#define B_ENABLE_DEBUG TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button.
|
||||
#define B_HIDE_HEALTHBOXES_DURING_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations.
|
||||
#define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades.
|
||||
#define B_ENABLE_DEBUG TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button.
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_CONFIG_H
|
||||
|
@ -351,7 +351,8 @@
|
||||
#define EFFECT_FAIRY_LOCK 345
|
||||
#define EFFECT_ALLY_SWITCH 346
|
||||
#define EFFECT_SLEEP_HIT 347 // Relic Song
|
||||
#define EFFECT_BODY_PRESS 348
|
||||
|
||||
#define NUM_BATTLE_MOVE_EFFECTS 348
|
||||
#define NUM_BATTLE_MOVE_EFFECTS 349
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||
|
@ -142,6 +142,14 @@
|
||||
#define HOLD_EFFECT_MEMORY 153
|
||||
#define HOLD_EFFECT_PLATE 154
|
||||
|
||||
// Gen8 hold effects
|
||||
#define HOLD_EFFECT_UTILITY_UMBRELLA 155
|
||||
#define HOLD_EFFECT_EJECT_PACK 156
|
||||
#define HOLD_EFFECT_ROOM_SERVICE 157
|
||||
#define HOLD_EFFECT_BLUNDER_POLICY 158
|
||||
#define HOLD_EFFECT_HEAVY_DUTY_BOOTS 159
|
||||
#define HOLD_EFFECT_THROAT_SPRAY 160
|
||||
|
||||
#define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS))
|
||||
|
||||
#endif // GUARD_HOLD_EFFECTS_H
|
||||
|
@ -314,6 +314,7 @@
|
||||
#define FLAG_DANCE (1 << 21)
|
||||
#define FLAG_DMG_IN_AIR (1 << 22) // X2 dmg on air, always hits target on air
|
||||
#define FLAG_HIT_IN_AIR (1 << 23) // dmg is normal, always hits target on air
|
||||
#define FLAG_DAMAGE_AIRBORNE (1 << 24) // Makes a Ground type move do 1x damage to flying and levitating targets
|
||||
|
||||
// Split defines.
|
||||
#define SPLIT_PHYSICAL 0x0
|
||||
|
@ -74,5 +74,6 @@ ItemUseFunc ItemId_GetFieldFunc(u16 itemId);
|
||||
u8 ItemId_GetBattleUsage(u16 itemId);
|
||||
ItemUseFunc ItemId_GetBattleFunc(u16 itemId);
|
||||
u8 ItemId_GetSecondaryId(u16 itemId);
|
||||
bool32 IsPinchBerryItemEffect(u16 holdEffect);
|
||||
|
||||
#endif // GUARD_ITEM_H
|
||||
|
@ -213,7 +213,8 @@ SECTIONS {
|
||||
src/decoration.o(.text);
|
||||
src/slot_machine.o(.text);
|
||||
src/contest_painting.o(.text);
|
||||
src/battle_ai_script_commands.o(.text);
|
||||
src/battle_ai_main.o(.text);
|
||||
src/battle_ai_util.o(.text);
|
||||
src/trader.o(.text);
|
||||
src/starter_choose.o(.text);
|
||||
src/wallclock.o(.text);
|
||||
@ -345,7 +346,6 @@ SECTIONS {
|
||||
data/battle_scripts_1.o(script_data);
|
||||
data/field_effect_scripts.o(script_data);
|
||||
data/battle_scripts_2.o(script_data);
|
||||
data/battle_ai_scripts.o(script_data);
|
||||
data/contest_ai_scripts.o(script_data);
|
||||
data/mystery_event_script_cmd_table.o(script_data);
|
||||
} =0
|
||||
@ -587,7 +587,8 @@ SECTIONS {
|
||||
src/decoration.o(.rodata);
|
||||
src/slot_machine.o(.rodata);
|
||||
src/contest_painting.o(.rodata);
|
||||
src/battle_ai_script_commands.o(.rodata);
|
||||
src/battle_ai_main.o(.rodata);
|
||||
src/battle_ai_util.o(.rodata);
|
||||
src/trader.o(.rodata);
|
||||
src/starter_choose.o(.rodata);
|
||||
src/wallclock.o(.rodata);
|
||||
|
4976
src/battle_ai_main.c
Normal file
4976
src/battle_ai_main.c
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_ai_util.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_setup.h"
|
||||
@ -416,7 +417,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 ShouldSwitch(void)
|
||||
bool32 ShouldSwitch(void)
|
||||
{
|
||||
u8 battlerIn1, battlerIn2;
|
||||
s32 firstId;
|
||||
|
3463
src/battle_ai_util.c
Normal file
3463
src/battle_ai_util.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_interface.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_interface.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_arena.h"
|
||||
#include "battle_controllers.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_message.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_interface.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_message.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_message.h"
|
||||
|
@ -18,7 +18,8 @@
|
||||
#include "text_window.h"
|
||||
#include "international_string_util.h"
|
||||
#include "strings.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_ai_util.h"
|
||||
#include "list_menu.h"
|
||||
#include "decompress.h"
|
||||
#include "trainer_pokemon_sprites.h"
|
||||
@ -32,6 +33,7 @@
|
||||
#include "constants/moves.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/hold_effects.h"
|
||||
|
||||
#define MAX_MODIFY_DIGITS 4
|
||||
|
||||
@ -98,6 +100,7 @@ enum
|
||||
LIST_ITEM_SIDE_STATUS,
|
||||
LIST_ITEM_AI,
|
||||
LIST_ITEM_AI_MOVES_PTS,
|
||||
LIST_ITEM_AI_INFO,
|
||||
LIST_ITEM_VARIOUS,
|
||||
LIST_ITEM_COUNT
|
||||
};
|
||||
@ -149,7 +152,11 @@ enum
|
||||
VARIOUS_IN_LOVE,
|
||||
};
|
||||
|
||||
// Static Declarations
|
||||
static const u8 *GetHoldEffectName(u16 holdEffect);
|
||||
|
||||
// const rom data
|
||||
static const u8 sText_HoldEffect[] = _("Hold Effect");
|
||||
static const u8 sText_Ability[] = _("Ability");
|
||||
static const u8 sText_Moves[] = _("Moves");
|
||||
static const u8 sText_Stats[] = _("Stats");
|
||||
@ -222,6 +229,7 @@ static const u8 sText_HpAware[] = _("HP aware");
|
||||
static const u8 sText_Unknown[] = _("Unknown");
|
||||
static const u8 sText_InLove[] = _("In Love");
|
||||
static const u8 sText_AIMovePts[] = _("AI Move Pts");
|
||||
static const u8 sText_AiKnowledge[] = _("AI Info");
|
||||
static const u8 sText_EffectOverride[] = _("Effect Override");
|
||||
|
||||
static const u8 sText_EmptyString[] = _("");
|
||||
@ -319,6 +327,7 @@ static const struct ListMenuItem sMainListItems[] =
|
||||
{sText_SideStatus, LIST_ITEM_SIDE_STATUS},
|
||||
{sText_AI, LIST_ITEM_AI},
|
||||
{sText_AIMovePts, LIST_ITEM_AI_MOVES_PTS},
|
||||
{sText_AiKnowledge, LIST_ITEM_AI_INFO},
|
||||
{sText_Various, LIST_ITEM_VARIOUS},
|
||||
};
|
||||
|
||||
@ -797,6 +806,114 @@ static void SwitchToAiPointsView(u8 taskId)
|
||||
GetStructPtr(taskId)->aiViewState = 0;
|
||||
}
|
||||
|
||||
static const u8 *const sAiInfoItemNames[] =
|
||||
{
|
||||
sText_Ability,
|
||||
sText_HeldItem,
|
||||
sText_HoldEffect,
|
||||
};
|
||||
static void PutAiInfoText(struct BattleDebugMenu *data)
|
||||
{
|
||||
u32 i, j, count;
|
||||
u8 *text = malloc(0x50);
|
||||
|
||||
FillWindowPixelBuffer(data->aiMovesWindowId, 0x11);
|
||||
|
||||
// item names
|
||||
for (i = 0; i < ARRAY_COUNT(sAiInfoItemNames); i++)
|
||||
{
|
||||
AddTextPrinterParameterized(data->aiMovesWindowId, 1, sAiInfoItemNames[i], 3, i * 15, 0, NULL);
|
||||
}
|
||||
|
||||
// items info
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if (GET_BATTLER_SIDE(i) == B_SIDE_PLAYER && IsBattlerAlive(i))
|
||||
{
|
||||
u16 ability = AI_GetAbility(i);
|
||||
u16 holdEffect = AI_GetHoldEffect(i);
|
||||
u16 item = gBattleMons[i].item;
|
||||
u8 x = (i == B_POSITION_PLAYER_LEFT) ? 83 + (i) * 75 : 83 + (i-1) * 75;
|
||||
AddTextPrinterParameterized(data->aiMovesWindowId, 0, gAbilityNames[ability], x, 0, 0, NULL);
|
||||
AddTextPrinterParameterized(data->aiMovesWindowId, 0, ItemId_GetName(item), x, 15, 0, NULL);
|
||||
AddTextPrinterParameterized(data->aiMovesWindowId, 0, GetHoldEffectName(holdEffect), x, 30, 0, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
CopyWindowToVram(data->aiMovesWindowId, 3);
|
||||
free(text);
|
||||
}
|
||||
|
||||
static void Task_ShowAiKnowledge(u8 taskId)
|
||||
{
|
||||
u32 i, count;
|
||||
struct WindowTemplate winTemplate;
|
||||
struct BattleDebugMenu *data = GetStructPtr(taskId);
|
||||
|
||||
switch (data->aiViewState)
|
||||
{
|
||||
case 0:
|
||||
HideBg(0);
|
||||
ShowBg(1);
|
||||
|
||||
// Swap battler if it's player mon
|
||||
data->aiBattlerId = data->battlerId;
|
||||
while (!IsBattlerAIControlled(data->aiBattlerId))
|
||||
{
|
||||
if (++data->aiBattlerId >= gBattlersCount)
|
||||
data->aiBattlerId = 0;
|
||||
}
|
||||
|
||||
LoadMonIconPalettes();
|
||||
for (count = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
if (GET_BATTLER_SIDE(i) == B_SIDE_PLAYER && IsBattlerAlive(i))
|
||||
{
|
||||
data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species,
|
||||
SpriteCallbackDummy,
|
||||
95 + (count * 80), 17, 0, 0, FALSE);
|
||||
gSprites[data->aiIconSpriteIds[i]].data[0] = i; // battler id
|
||||
count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
data->aiIconSpriteIds[i] = 0xFF;
|
||||
}
|
||||
}
|
||||
data->aiMonSpriteId = CreateMonPicSprite_HandleDeoxys(gBattleMons[data->aiBattlerId].species,
|
||||
gBattleMons[data->aiBattlerId].otId,
|
||||
gBattleMons[data->aiBattlerId].personality,
|
||||
TRUE,
|
||||
39, 130, 15, 0xFFFF);
|
||||
data->aiViewState++;
|
||||
break;
|
||||
// Put text
|
||||
case 1:
|
||||
winTemplate = CreateWindowTemplate(1, 0, 4, 27, 14, 15, 0x200);
|
||||
data->aiMovesWindowId = AddWindow(&winTemplate);
|
||||
PutWindowTilemap(data->aiMovesWindowId);
|
||||
PutAiInfoText(data);
|
||||
data->aiViewState++;
|
||||
break;
|
||||
// Input
|
||||
case 2:
|
||||
if (gMain.newKeys & (SELECT_BUTTON | B_BUTTON))
|
||||
{
|
||||
SwitchToDebugView(taskId);
|
||||
HideBg(1);
|
||||
ShowBg(0);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SwitchToAiInfoView(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].func = Task_ShowAiKnowledge;
|
||||
GetStructPtr(taskId)->aiViewState = 0;
|
||||
}
|
||||
|
||||
static void SwitchToDebugView(u8 taskId)
|
||||
{
|
||||
u32 i;
|
||||
@ -858,6 +975,11 @@ static void Task_DebugMenuProcessInput(u8 taskId)
|
||||
SwitchToAiPointsView(taskId);
|
||||
return;
|
||||
}
|
||||
else if (listItemId == LIST_ITEM_AI_INFO && gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
SwitchToAiInfoView(taskId);
|
||||
return;
|
||||
}
|
||||
data->currentMainListItemId = listItemId;
|
||||
|
||||
// Create the secondary menu list.
|
||||
@ -1054,6 +1176,7 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data)
|
||||
itemsCount = ARRAY_COUNT(sSideStatusListItems);
|
||||
break;
|
||||
case LIST_ITEM_AI_MOVES_PTS:
|
||||
case LIST_ITEM_AI_INFO:
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1691,3 +1814,289 @@ static void UpdateMonData(struct BattleDebugMenu *data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static const u8 sText_HoldEffectNone[] = _("????????");
|
||||
static const u8 sText_HoldEffectRestoreHp[] = _("Restore Hp");
|
||||
static const u8 sText_HoldEffectCurePar[] = _("Cure Par");
|
||||
static const u8 sText_HoldEffectCureSlp[] = _("Cure Slp");
|
||||
static const u8 sText_HoldEffectCurePsn[] = _("Cure Psn");
|
||||
static const u8 sText_HoldEffectCureBrn[] = _("Cure Brn");
|
||||
static const u8 sText_HoldEffectCureFrz[] = _("Cure Frz");
|
||||
static const u8 sText_HoldEffectRestorePp[] = _("Restore Pp");
|
||||
static const u8 sText_HoldEffectCureConfusion[] = _("Cure Confusion");
|
||||
static const u8 sText_HoldEffectCureStatus[] = _("Cure Status");
|
||||
static const u8 sText_HoldEffectConfuseSpicy[] = _("Confuse Spicy");
|
||||
static const u8 sText_HoldEffectConfuseDry[] = _("Confuse Dry");
|
||||
static const u8 sText_HoldEffectConfuseSweet[] = _("Confuse Sweet");
|
||||
static const u8 sText_HoldEffectConfuseBitter[] = _("Confuse Bitter");
|
||||
static const u8 sText_HoldEffectConfuseSour[] = _("Confuse Sour");
|
||||
static const u8 sText_HoldEffectAttackUp[] = _("Attack Up");
|
||||
static const u8 sText_HoldEffectDefenseUp[] = _("Defense Up");
|
||||
static const u8 sText_HoldEffectSpeedUp[] = _("Speed Up");
|
||||
static const u8 sText_HoldEffectSpAttackUp[] = _("Sp Attack Up");
|
||||
static const u8 sText_HoldEffectSpDefenseUp[] = _("Sp Defense Up");
|
||||
static const u8 sText_HoldEffectCriticalUp[] = _("Critical Up");
|
||||
static const u8 sText_HoldEffectRandomStatUp[] = _("Random Stat Up");
|
||||
static const u8 sText_HoldEffectEvasionUp[] = _("Evasion Up");
|
||||
static const u8 sText_HoldEffectRestoreStats[] = _("Restore Stats");
|
||||
static const u8 sText_HoldEffectMachoBrace[] = _("Macho Brace");
|
||||
static const u8 sText_HoldEffectExpShare[] = _("Exp Share");
|
||||
static const u8 sText_HoldEffectQuickClaw[] = _("Quick Claw");
|
||||
static const u8 sText_HoldEffectFriendshipUp[] = _("Friendship Up");
|
||||
static const u8 sText_HoldEffectMentalHerb[] = _("Mental Herb");
|
||||
static const u8 sText_HoldEffectChoiceBand[] = _("Choice Band");
|
||||
static const u8 sText_HoldEffectFlinch[] = _("Flinch");
|
||||
static const u8 sText_HoldEffectBugPower[] = _("Bug Power");
|
||||
static const u8 sText_HoldEffectDoublePrize[] = _("Double Prize");
|
||||
static const u8 sText_HoldEffectRepel[] = _("Repel");
|
||||
static const u8 sText_HoldEffectSoulDew[] = _("Soul Dew");
|
||||
static const u8 sText_HoldEffectDeepSeaTooth[] = _("Deep Sea Tooth");
|
||||
static const u8 sText_HoldEffectDeepSeaScale[] = _("Deep Sea Scale");
|
||||
static const u8 sText_HoldEffectCanAlwaysRun[] = _("Can Always Run");
|
||||
static const u8 sText_HoldEffectPreventEvolve[] = _("Prevent Evolve");
|
||||
static const u8 sText_HoldEffectFocusBand[] = _("Focus Band");
|
||||
static const u8 sText_HoldEffectLuckyEgg[] = _("Lucky Egg");
|
||||
static const u8 sText_HoldEffectScopeLens[] = _("Scope Lens");
|
||||
static const u8 sText_HoldEffectSteelPower[] = _("Steel Power");
|
||||
static const u8 sText_HoldEffectLeftovers[] = _("Leftovers");
|
||||
static const u8 sText_HoldEffectDragonScale[] = _("Dragon Scale");
|
||||
static const u8 sText_HoldEffectLightBall[] = _("Light Ball");
|
||||
static const u8 sText_HoldEffectGroundPower[] = _("Ground Power");
|
||||
static const u8 sText_HoldEffectRockPower[] = _("Rock Power");
|
||||
static const u8 sText_HoldEffectGrassPower[] = _("Grass Power");
|
||||
static const u8 sText_HoldEffectDarkPower[] = _("Dark Power");
|
||||
static const u8 sText_HoldEffectFightingPower[] = _("Fighting Power");
|
||||
static const u8 sText_HoldEffectElectricPower[] = _("Electric Power");
|
||||
static const u8 sText_HoldEffectWaterPower[] = _("Water Power");
|
||||
static const u8 sText_HoldEffectFlyingPower[] = _("Flying Power");
|
||||
static const u8 sText_HoldEffectPoisonPower[] = _("Poison Power");
|
||||
static const u8 sText_HoldEffectIcePower[] = _("Ice Power");
|
||||
static const u8 sText_HoldEffectGhostPower[] = _("Ghost Power");
|
||||
static const u8 sText_HoldEffectPsychicPower[] = _("Psychic Power");
|
||||
static const u8 sText_HoldEffectFirePower[] = _("Fire Power");
|
||||
static const u8 sText_HoldEffectDragonPower[] = _("Dragon Power");
|
||||
static const u8 sText_HoldEffectNormalPower[] = _("Normal Power");
|
||||
static const u8 sText_HoldEffectUpGrade[] = _("Up Grade");
|
||||
static const u8 sText_HoldEffectShellBell[] = _("Shell Bell");
|
||||
static const u8 sText_HoldEffectLuckyPunch[] = _("Lucky Punch");
|
||||
static const u8 sText_HoldEffectMetalPowder[] = _("Metal Powder");
|
||||
static const u8 sText_HoldEffectThickClub[] = _("Thick Club");
|
||||
static const u8 sText_HoldEffectStick[] = _("Stick");
|
||||
static const u8 sText_HoldEffectChoiceScarf[] = _("Choice Scarf");
|
||||
static const u8 sText_HoldEffectChoiceSpecs[] = _("Choice Specs");
|
||||
static const u8 sText_HoldEffectDampRock[] = _("Damp Rock");
|
||||
static const u8 sText_HoldEffectGripClaw[] = _("Grip Claw");
|
||||
static const u8 sText_HoldEffectHeatRock[] = _("Heat Rock");
|
||||
static const u8 sText_HoldEffectIcyRock[] = _("Icy Rock");
|
||||
static const u8 sText_HoldEffectLightClay[] = _("Light Clay");
|
||||
static const u8 sText_HoldEffectSmoothRock[] = _("Smooth Rock");
|
||||
static const u8 sText_HoldEffectPowerHerb[] = _("Power Herb");
|
||||
static const u8 sText_HoldEffectBigRoot[] = _("Big Root");
|
||||
static const u8 sText_HoldEffectExpertBelt[] = _("Expert Belt");
|
||||
static const u8 sText_HoldEffectLifeOrb[] = _("Life Orb");
|
||||
static const u8 sText_HoldEffectMetronome[] = _("Metronome");
|
||||
static const u8 sText_HoldEffectMuscleBand[] = _("Muscle Band");
|
||||
static const u8 sText_HoldEffectWideLens[] = _("Wide Lens");
|
||||
static const u8 sText_HoldEffectWiseGlasses[] = _("Wise Glasses");
|
||||
static const u8 sText_HoldEffectZoomLens[] = _("Zoom Lens");
|
||||
static const u8 sText_HoldEffectLaggingTail[] = _("Lagging Tail");
|
||||
static const u8 sText_HoldEffectFocusSash[] = _("Focus Sash");
|
||||
static const u8 sText_HoldEffectFlameOrb[] = _("Flame Orb");
|
||||
static const u8 sText_HoldEffectToxicOrb[] = _("Toxic Orb");
|
||||
static const u8 sText_HoldEffectStickyBarb[] = _("Sticky Barb");
|
||||
static const u8 sText_HoldEffectIronBall[] = _("Iron Ball");
|
||||
static const u8 sText_HoldEffectBlackSludge[] = _("Black Sludge");
|
||||
static const u8 sText_HoldEffectDestinyKnot[] = _("Destiny Knot");
|
||||
static const u8 sText_HoldEffectShedShell[] = _("Shed Shell");
|
||||
static const u8 sText_HoldEffectQuickPowder[] = _("Quick Powder");
|
||||
static const u8 sText_HoldEffectAdamantOrb[] = _("Adamant Orb");
|
||||
static const u8 sText_HoldEffectLustrousOrb[] = _("Lustrous Orb");
|
||||
static const u8 sText_HoldEffectGriseousOrb[] = _("Griseous Orb");
|
||||
static const u8 sText_HoldEffectGracidea[] = _("Gracidea");
|
||||
static const u8 sText_HoldEffectResistBerry[] = _("Resist Berry");
|
||||
static const u8 sText_HoldEffectPowerItem[] = _("Power Item");
|
||||
static const u8 sText_HoldEffectRestorePctHp[] = _("Restore Pct Hp");
|
||||
static const u8 sText_HoldEffectMicleBerry[] = _("Micle Berry");
|
||||
static const u8 sText_HoldEffectCustapBerry[] = _("Custap Berry");
|
||||
static const u8 sText_HoldEffectJabocaBerry[] = _("Jaboca Berry");
|
||||
static const u8 sText_HoldEffectRowapBerry[] = _("Rowap Berry");
|
||||
static const u8 sText_HoldEffectKeeBerry[] = _("Kee Berry");
|
||||
static const u8 sText_HoldEffectMarangaBerry[] = _("Maranga Berry");
|
||||
static const u8 sText_HoldEffectFloatStone[] = _("Float Stone");
|
||||
static const u8 sText_HoldEffectEviolite[] = _("Eviolite");
|
||||
static const u8 sText_HoldEffectAssaultVest[] = _("Assault Vest");
|
||||
static const u8 sText_HoldEffectDrive[] = _("Drive");
|
||||
static const u8 sText_HoldEffectGems[] = _("Gems");
|
||||
static const u8 sText_HoldEffectRockyHelmet[] = _("Rocky Helmet");
|
||||
static const u8 sText_HoldEffectAirBalloon[] = _("Air Balloon");
|
||||
static const u8 sText_HoldEffectRedCard[] = _("Red Card");
|
||||
static const u8 sText_HoldEffectRingTarget[] = _("Ring Target");
|
||||
static const u8 sText_HoldEffectBindingBand[] = _("Binding Band");
|
||||
static const u8 sText_HoldEffectEjectButton[] = _("Eject Button");
|
||||
static const u8 sText_HoldEffectAbsorbBulb[] = _("Absorb Bulb");
|
||||
static const u8 sText_HoldEffectCellBattery[] = _("Cell Battery");
|
||||
static const u8 sText_HoldEffectFairyPower[] = _("Fairy Power");
|
||||
static const u8 sText_HoldEffectMegaStone[] = _("Mega Stone");
|
||||
static const u8 sText_HoldEffectSafetyGoogles[] = _("Safety Googles");
|
||||
static const u8 sText_HoldEffectLuminousMoss[] = _("Luminous Moss");
|
||||
static const u8 sText_HoldEffectSnowball[] = _("Snowball");
|
||||
static const u8 sText_HoldEffectWeaknessPolicy[] = _("Weakness Policy");
|
||||
static const u8 sText_HoldEffectProtectivePads[] = _("Protective Pads");
|
||||
static const u8 sText_HoldEffectTerrainExtender[] = _("Terrain Extender");
|
||||
static const u8 sText_HoldEffectSeeds[] = _("Seeds");
|
||||
static const u8 sText_HoldEffectAdrenalineOrb[] = _("Adrenaline Orb");
|
||||
static const u8 sText_HoldEffectMemory[] = _("Memory");
|
||||
static const u8 sText_HoldEffectPlate[] = _("Plate");
|
||||
static const u8 sText_HoldEffectUtilityUmbrella[] = _("Utility Umbrella");
|
||||
static const u8 sText_HoldEffectEjectPack[] = _("Eject Pack");
|
||||
static const u8 sText_HoldEffectRoomService[] = _("Room Service");
|
||||
static const u8 sText_HoldEffectBlunderPolicy[] = _("Blunder Policy");
|
||||
static const u8 sText_HoldEffectHeavyDutyBoots[] = _("Heavy Duty Boots");
|
||||
static const u8 sText_HoldEffectThroatSpray[] = _("Throat Spray");
|
||||
static const u8 *const sHoldEffectNames[] =
|
||||
{
|
||||
[HOLD_EFFECT_NONE] = sText_HoldEffectNone,
|
||||
[HOLD_EFFECT_RESTORE_HP] = sText_HoldEffectRestoreHp,
|
||||
[HOLD_EFFECT_CURE_PAR] = sText_HoldEffectCurePar,
|
||||
[HOLD_EFFECT_CURE_SLP] = sText_HoldEffectCureSlp,
|
||||
[HOLD_EFFECT_CURE_PSN] = sText_HoldEffectCurePsn,
|
||||
[HOLD_EFFECT_CURE_BRN] = sText_HoldEffectCureBrn,
|
||||
[HOLD_EFFECT_CURE_FRZ] = sText_HoldEffectCureFrz,
|
||||
[HOLD_EFFECT_RESTORE_PP] = sText_HoldEffectRestorePp,
|
||||
[HOLD_EFFECT_CURE_CONFUSION] = sText_HoldEffectCureConfusion,
|
||||
[HOLD_EFFECT_CURE_STATUS] = sText_HoldEffectCureStatus,
|
||||
[HOLD_EFFECT_CONFUSE_SPICY] = sText_HoldEffectConfuseSpicy,
|
||||
[HOLD_EFFECT_CONFUSE_DRY] = sText_HoldEffectConfuseDry,
|
||||
[HOLD_EFFECT_CONFUSE_SWEET] = sText_HoldEffectConfuseSweet,
|
||||
[HOLD_EFFECT_CONFUSE_BITTER] = sText_HoldEffectConfuseBitter,
|
||||
[HOLD_EFFECT_CONFUSE_SOUR] = sText_HoldEffectConfuseSour,
|
||||
[HOLD_EFFECT_ATTACK_UP] = sText_HoldEffectAttackUp,
|
||||
[HOLD_EFFECT_DEFENSE_UP] = sText_HoldEffectDefenseUp,
|
||||
[HOLD_EFFECT_SPEED_UP] = sText_HoldEffectSpeedUp,
|
||||
[HOLD_EFFECT_SP_ATTACK_UP] = sText_HoldEffectSpAttackUp,
|
||||
[HOLD_EFFECT_SP_DEFENSE_UP] = sText_HoldEffectSpDefenseUp,
|
||||
[HOLD_EFFECT_CRITICAL_UP] = sText_HoldEffectCriticalUp,
|
||||
[HOLD_EFFECT_RANDOM_STAT_UP] = sText_HoldEffectRandomStatUp,
|
||||
[HOLD_EFFECT_EVASION_UP] = sText_HoldEffectEvasionUp,
|
||||
[HOLD_EFFECT_RESTORE_STATS] = sText_HoldEffectRestoreStats,
|
||||
[HOLD_EFFECT_MACHO_BRACE] = sText_HoldEffectMachoBrace,
|
||||
[HOLD_EFFECT_EXP_SHARE] = sText_HoldEffectExpShare,
|
||||
[HOLD_EFFECT_QUICK_CLAW] = sText_HoldEffectQuickClaw,
|
||||
[HOLD_EFFECT_FRIENDSHIP_UP] = sText_HoldEffectFriendshipUp,
|
||||
//[HOLD_EFFECT_MENTAL_HERB] = sText_HoldEffectMentalHerb,
|
||||
[HOLD_EFFECT_CHOICE_BAND] = sText_HoldEffectChoiceBand,
|
||||
[HOLD_EFFECT_FLINCH] = sText_HoldEffectFlinch,
|
||||
[HOLD_EFFECT_BUG_POWER] = sText_HoldEffectBugPower,
|
||||
[HOLD_EFFECT_DOUBLE_PRIZE] = sText_HoldEffectDoublePrize,
|
||||
[HOLD_EFFECT_REPEL] = sText_HoldEffectRepel,
|
||||
[HOLD_EFFECT_SOUL_DEW] = sText_HoldEffectSoulDew,
|
||||
[HOLD_EFFECT_DEEP_SEA_TOOTH] = sText_HoldEffectDeepSeaTooth,
|
||||
[HOLD_EFFECT_DEEP_SEA_SCALE] = sText_HoldEffectDeepSeaScale,
|
||||
[HOLD_EFFECT_CAN_ALWAYS_RUN] = sText_HoldEffectCanAlwaysRun,
|
||||
[HOLD_EFFECT_PREVENT_EVOLVE] = sText_HoldEffectPreventEvolve,
|
||||
[HOLD_EFFECT_FOCUS_BAND] = sText_HoldEffectFocusBand,
|
||||
[HOLD_EFFECT_LUCKY_EGG] = sText_HoldEffectLuckyEgg,
|
||||
[HOLD_EFFECT_SCOPE_LENS] = sText_HoldEffectScopeLens,
|
||||
[HOLD_EFFECT_STEEL_POWER] = sText_HoldEffectSteelPower,
|
||||
[HOLD_EFFECT_LEFTOVERS] = sText_HoldEffectLeftovers,
|
||||
[HOLD_EFFECT_DRAGON_SCALE] = sText_HoldEffectDragonScale,
|
||||
[HOLD_EFFECT_LIGHT_BALL] = sText_HoldEffectLightBall,
|
||||
[HOLD_EFFECT_GROUND_POWER] = sText_HoldEffectGroundPower,
|
||||
[HOLD_EFFECT_ROCK_POWER] = sText_HoldEffectRockPower,
|
||||
[HOLD_EFFECT_GRASS_POWER] = sText_HoldEffectGrassPower,
|
||||
[HOLD_EFFECT_DARK_POWER] = sText_HoldEffectDarkPower,
|
||||
[HOLD_EFFECT_FIGHTING_POWER] = sText_HoldEffectFightingPower,
|
||||
[HOLD_EFFECT_ELECTRIC_POWER] = sText_HoldEffectElectricPower,
|
||||
[HOLD_EFFECT_WATER_POWER] = sText_HoldEffectWaterPower,
|
||||
[HOLD_EFFECT_FLYING_POWER] = sText_HoldEffectFlyingPower,
|
||||
[HOLD_EFFECT_POISON_POWER] = sText_HoldEffectPoisonPower,
|
||||
[HOLD_EFFECT_ICE_POWER] = sText_HoldEffectIcePower,
|
||||
[HOLD_EFFECT_GHOST_POWER] = sText_HoldEffectGhostPower,
|
||||
[HOLD_EFFECT_PSYCHIC_POWER] = sText_HoldEffectPsychicPower,
|
||||
[HOLD_EFFECT_FIRE_POWER] = sText_HoldEffectFirePower,
|
||||
[HOLD_EFFECT_DRAGON_POWER] = sText_HoldEffectDragonPower,
|
||||
[HOLD_EFFECT_NORMAL_POWER] = sText_HoldEffectNormalPower,
|
||||
[HOLD_EFFECT_UP_GRADE] = sText_HoldEffectUpGrade,
|
||||
[HOLD_EFFECT_SHELL_BELL] = sText_HoldEffectShellBell,
|
||||
[HOLD_EFFECT_LUCKY_PUNCH] = sText_HoldEffectLuckyPunch,
|
||||
[HOLD_EFFECT_METAL_POWDER] = sText_HoldEffectMetalPowder,
|
||||
[HOLD_EFFECT_THICK_CLUB] = sText_HoldEffectThickClub,
|
||||
[HOLD_EFFECT_STICK] = sText_HoldEffectStick,
|
||||
[HOLD_EFFECT_CHOICE_SCARF] = sText_HoldEffectChoiceScarf,
|
||||
[HOLD_EFFECT_CHOICE_SPECS] = sText_HoldEffectChoiceSpecs,
|
||||
[HOLD_EFFECT_DAMP_ROCK] = sText_HoldEffectDampRock,
|
||||
[HOLD_EFFECT_GRIP_CLAW] = sText_HoldEffectGripClaw,
|
||||
[HOLD_EFFECT_HEAT_ROCK] = sText_HoldEffectHeatRock,
|
||||
[HOLD_EFFECT_ICY_ROCK] = sText_HoldEffectIcyRock,
|
||||
[HOLD_EFFECT_LIGHT_CLAY] = sText_HoldEffectLightClay,
|
||||
[HOLD_EFFECT_SMOOTH_ROCK] = sText_HoldEffectSmoothRock,
|
||||
[HOLD_EFFECT_POWER_HERB] = sText_HoldEffectPowerHerb,
|
||||
[HOLD_EFFECT_BIG_ROOT] = sText_HoldEffectBigRoot,
|
||||
[HOLD_EFFECT_EXPERT_BELT] = sText_HoldEffectExpertBelt,
|
||||
[HOLD_EFFECT_LIFE_ORB] = sText_HoldEffectLifeOrb,
|
||||
[HOLD_EFFECT_METRONOME] = sText_HoldEffectMetronome,
|
||||
[HOLD_EFFECT_MUSCLE_BAND] = sText_HoldEffectMuscleBand,
|
||||
[HOLD_EFFECT_WIDE_LENS] = sText_HoldEffectWideLens,
|
||||
[HOLD_EFFECT_WISE_GLASSES] = sText_HoldEffectWiseGlasses,
|
||||
[HOLD_EFFECT_ZOOM_LENS] = sText_HoldEffectZoomLens,
|
||||
[HOLD_EFFECT_LAGGING_TAIL] = sText_HoldEffectLaggingTail,
|
||||
[HOLD_EFFECT_FOCUS_SASH] = sText_HoldEffectFocusSash,
|
||||
[HOLD_EFFECT_FLAME_ORB] = sText_HoldEffectFlameOrb,
|
||||
[HOLD_EFFECT_TOXIC_ORB] = sText_HoldEffectToxicOrb,
|
||||
[HOLD_EFFECT_STICKY_BARB] = sText_HoldEffectStickyBarb,
|
||||
[HOLD_EFFECT_IRON_BALL] = sText_HoldEffectIronBall,
|
||||
[HOLD_EFFECT_BLACK_SLUDGE] = sText_HoldEffectBlackSludge,
|
||||
[HOLD_EFFECT_DESTINY_KNOT] = sText_HoldEffectDestinyKnot,
|
||||
[HOLD_EFFECT_SHED_SHELL] = sText_HoldEffectShedShell,
|
||||
[HOLD_EFFECT_QUICK_POWDER] = sText_HoldEffectQuickPowder,
|
||||
[HOLD_EFFECT_ADAMANT_ORB] = sText_HoldEffectAdamantOrb,
|
||||
[HOLD_EFFECT_LUSTROUS_ORB] = sText_HoldEffectLustrousOrb,
|
||||
[HOLD_EFFECT_GRISEOUS_ORB] = sText_HoldEffectGriseousOrb,
|
||||
[HOLD_EFFECT_GRACIDEA] = sText_HoldEffectGracidea,
|
||||
[HOLD_EFFECT_RESIST_BERRY] = sText_HoldEffectResistBerry,
|
||||
[HOLD_EFFECT_POWER_ITEM] = sText_HoldEffectPowerItem,
|
||||
[HOLD_EFFECT_RESTORE_PCT_HP] = sText_HoldEffectRestorePctHp,
|
||||
//[HOLD_EFFECT_MICLE_BERRY] = sText_HoldEffectMicleBerry,
|
||||
//[HOLD_EFFECT_CUSTAP_BERRY] = sText_HoldEffectCustapBerry,
|
||||
//[HOLD_EFFECT_JABOCA_BERRY] = sText_HoldEffectJabocaBerry,
|
||||
//[HOLD_EFFECT_ROWAP_BERRY] = sText_HoldEffectRowapBerry,
|
||||
//[HOLD_EFFECT_KEE_BERRY] = sText_HoldEffectKeeBerry,
|
||||
//[HOLD_EFFECT_MARANGA_BERRY] = sText_HoldEffectMarangaBerry,
|
||||
[HOLD_EFFECT_FLOAT_STONE] = sText_HoldEffectFloatStone,
|
||||
[HOLD_EFFECT_EVIOLITE] = sText_HoldEffectEviolite,
|
||||
[HOLD_EFFECT_ASSAULT_VEST] = sText_HoldEffectAssaultVest,
|
||||
[HOLD_EFFECT_DRIVE] = sText_HoldEffectDrive,
|
||||
[HOLD_EFFECT_GEMS] = sText_HoldEffectGems,
|
||||
[HOLD_EFFECT_ROCKY_HELMET] = sText_HoldEffectRockyHelmet,
|
||||
[HOLD_EFFECT_AIR_BALLOON] = sText_HoldEffectAirBalloon,
|
||||
[HOLD_EFFECT_RED_CARD] = sText_HoldEffectRedCard,
|
||||
[HOLD_EFFECT_RING_TARGET] = sText_HoldEffectRingTarget,
|
||||
[HOLD_EFFECT_BINDING_BAND] = sText_HoldEffectBindingBand,
|
||||
[HOLD_EFFECT_EJECT_BUTTON] = sText_HoldEffectEjectButton,
|
||||
[HOLD_EFFECT_ABSORB_BULB] = sText_HoldEffectAbsorbBulb,
|
||||
[HOLD_EFFECT_CELL_BATTERY] = sText_HoldEffectCellBattery,
|
||||
[HOLD_EFFECT_FAIRY_POWER] = sText_HoldEffectFairyPower,
|
||||
[HOLD_EFFECT_MEGA_STONE] = sText_HoldEffectMegaStone,
|
||||
[HOLD_EFFECT_SAFETY_GOOGLES] = sText_HoldEffectSafetyGoogles,
|
||||
[HOLD_EFFECT_LUMINOUS_MOSS] = sText_HoldEffectLuminousMoss,
|
||||
[HOLD_EFFECT_SNOWBALL] = sText_HoldEffectSnowball,
|
||||
[HOLD_EFFECT_WEAKNESS_POLICY] = sText_HoldEffectWeaknessPolicy,
|
||||
[HOLD_EFFECT_PROTECTIVE_PADS] = sText_HoldEffectProtectivePads,
|
||||
[HOLD_EFFECT_TERRAIN_EXTENDER] = sText_HoldEffectTerrainExtender,
|
||||
[HOLD_EFFECT_SEEDS] = sText_HoldEffectSeeds,
|
||||
[HOLD_EFFECT_ADRENALINE_ORB] = sText_HoldEffectAdrenalineOrb,
|
||||
[HOLD_EFFECT_MEMORY] = sText_HoldEffectMemory,
|
||||
[HOLD_EFFECT_PLATE] = sText_HoldEffectPlate,
|
||||
[HOLD_EFFECT_UTILITY_UMBRELLA] = sText_HoldEffectUtilityUmbrella,
|
||||
[HOLD_EFFECT_EJECT_PACK] = sText_HoldEffectEjectPack,
|
||||
[HOLD_EFFECT_ROOM_SERVICE] = sText_HoldEffectRoomService,
|
||||
[HOLD_EFFECT_BLUNDER_POLICY] = sText_HoldEffectBlunderPolicy,
|
||||
[HOLD_EFFECT_HEAVY_DUTY_BOOTS] = sText_HoldEffectHeavyDutyBoots,
|
||||
[HOLD_EFFECT_THROAT_SPRAY] = sText_HoldEffectThroatSpray,
|
||||
};
|
||||
static const u8 *GetHoldEffectName(u16 holdEffect)
|
||||
{
|
||||
if (holdEffect > ARRAY_COUNT(sHoldEffectNames))
|
||||
return sHoldEffectNames[0];
|
||||
return sHoldEffectNames[holdEffect];
|
||||
}
|
||||
|
@ -877,13 +877,13 @@ u32 GetAiScriptsInBattleFactory(void)
|
||||
int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
|
||||
|
||||
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
|
||||
return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY;
|
||||
return AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY;
|
||||
else if (challengeNum < 2)
|
||||
return 0;
|
||||
else if (challengeNum < 4)
|
||||
return AI_SCRIPT_CHECK_BAD_MOVE;
|
||||
return AI_FLAG_CHECK_BAD_MOVE;
|
||||
else
|
||||
return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY;
|
||||
return AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_interface.h"
|
||||
|
@ -1,7 +1,8 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_ai_util.h"
|
||||
#include "battle_arena.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_interface.h"
|
||||
@ -3031,6 +3032,7 @@ void SwitchInClearSetData(void)
|
||||
|
||||
ClearBattlerMoveHistory(gActiveBattler);
|
||||
ClearBattlerAbilityHistory(gActiveBattler);
|
||||
ClearBattlerItemEffectHistory(gActiveBattler);
|
||||
}
|
||||
|
||||
void FaintClearSetData(void)
|
||||
@ -3119,6 +3121,7 @@ void FaintClearSetData(void)
|
||||
|
||||
ClearBattlerMoveHistory(gActiveBattler);
|
||||
ClearBattlerAbilityHistory(gActiveBattler);
|
||||
ClearBattlerItemEffectHistory(gActiveBattler);
|
||||
UndoFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler));
|
||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
||||
UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]);
|
||||
|
@ -4,7 +4,8 @@
|
||||
#include "constants/battle_script_commands.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_ai_util.h"
|
||||
#include "battle_scripts.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/abilities.h"
|
||||
@ -813,13 +814,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
|
||||
Cmd_metalburstdamagecalculator, //0xFF
|
||||
};
|
||||
|
||||
struct StatFractions
|
||||
{
|
||||
u8 dividend;
|
||||
u8 divisor;
|
||||
};
|
||||
|
||||
static const struct StatFractions sAccuracyStageRatios[] =
|
||||
const struct StatFractions gAccuracyStageRatios[] =
|
||||
{
|
||||
{ 33, 100}, // -6
|
||||
{ 36, 100}, // -5
|
||||
@ -921,92 +916,167 @@ static const u8 sForbiddenMoves[MOVES_COUNT] =
|
||||
[MOVE_NONE] = 0xFF, // Can't use a non-move lol
|
||||
[MOVE_STRUGGLE] = 0xFF, // Neither Struggle
|
||||
[MOVE_AFTER_YOU] = FORBIDDEN_METRONOME,
|
||||
[MOVE_APPLE_ACID] = FORBIDDEN_METRONOME,
|
||||
[MOVE_ASSIST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_ASTRAL_BARRAGE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_AURA_WHEEL] = FORBIDDEN_METRONOME,
|
||||
[MOVE_BADDY_BAD] = FORBIDDEN_METRONOME,
|
||||
[MOVE_BANEFUL_BUNKER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BEAK_BLAST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_BEHEMOTH_BASH] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BEHEMOTH_BLADE] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BELCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_BESTOW] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_BIDE] = FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_BODY_PRESS] = FORBIDDEN_METRONOME,
|
||||
[MOVE_BOUNCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_BOUNCY_BUBBLE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_BRANCH_POKE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_BREAKING_SWIPE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_BUZZY_BUZZ] = FORBIDDEN_METRONOME,
|
||||
[MOVE_CELEBRATE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_CHATTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_CIRCLE_THROW] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_CLANGOROUS_SOUL] = FORBIDDEN_METRONOME,
|
||||
[MOVE_COPYCAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_COUNTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_COVET] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_CRAFTY_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_CRAFTY_SHIELD] = FORBIDDEN_METRONOME,
|
||||
[MOVE_DECORATE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_DESTINY_BOND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_DETECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_DIG] = FORBIDDEN_ASSIST,
|
||||
[MOVE_DIVE] = FORBIDDEN_ASSIST,
|
||||
[MOVE_DRAGON_TAIL] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_DIAMOND_STORM] = FORBIDDEN_METRONOME,
|
||||
[MOVE_DIG] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_DIVE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_DOUBLE_IRON_BASH] = FORBIDDEN_METRONOME,
|
||||
[MOVE_DRAGON_ASCENT] = FORBIDDEN_METRONOME,
|
||||
[MOVE_DRAGON_ENERGY] = FORBIDDEN_METRONOME,
|
||||
[MOVE_DRAGON_TAIL] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_DRUM_BEATING] = FORBIDDEN_METRONOME,
|
||||
[MOVE_DYNAMAX_CANNON] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_ENDURE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_ETERNABEAM] = FORBIDDEN_METRONOME,
|
||||
[MOVE_FALSE_SURRENDER] = FORBIDDEN_METRONOME,
|
||||
[MOVE_FEINT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_FIERY_WRATH] = FORBIDDEN_METRONOME,
|
||||
[MOVE_FLEUR_CANNON] = FORBIDDEN_METRONOME,
|
||||
[MOVE_FLY] = FORBIDDEN_ASSIST,
|
||||
[MOVE_FLOATY_FALL] = FORBIDDEN_METRONOME,
|
||||
[MOVE_FLY] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_FOCUS_PUNCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_FOLLOW_ME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_FREEZE_SHOCK] = FORBIDDEN_METRONOME,
|
||||
[MOVE_FREEZE_SHOCK] = FORBIDDEN_METRONOME | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_FREEZING_GLARE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_FREEZY_FROST] = FORBIDDEN_METRONOME,
|
||||
[MOVE_GEOMANCY] = FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_GLACIAL_LANCE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_GLITZY_GLOW] = FORBIDDEN_METRONOME,
|
||||
[MOVE_GRAV_APPLE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_HELPING_HAND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_HOLD_HANDS] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_HYPERSPACE_FURY] = FORBIDDEN_METRONOME,
|
||||
[MOVE_HYPERSPACE_HOLE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_ICE_BURN] = FORBIDDEN_METRONOME,
|
||||
[MOVE_ICE_BURN] = FORBIDDEN_METRONOME | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_INSTRUCT] = FORBIDDEN_METRONOME,
|
||||
[MOVE_JUNGLE_HEALING] = FORBIDDEN_METRONOME,
|
||||
[MOVE_KINGS_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_LIFE_DEW] = FORBIDDEN_METRONOME,
|
||||
[MOVE_LIGHT_OF_RUIN] = FORBIDDEN_METRONOME,
|
||||
[MOVE_MAT_BLOCK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_ME_FIRST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_METEOR_ASSAULT] = FORBIDDEN_METRONOME,
|
||||
[MOVE_METRONOME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_MIMIC] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_MIND_BLOWN] = FORBIDDEN_METRONOME,
|
||||
[MOVE_MIRROR_COAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_MIRROR_MOVE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_MOONGEIST_BEAM] = FORBIDDEN_METRONOME,
|
||||
[MOVE_NATURE_POWER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_NATURES_MADNESS] = FORBIDDEN_METRONOME,
|
||||
[MOVE_OBSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT,
|
||||
[MOVE_ORIGIN_PULSE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_OVERDRIVE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_PHANTOM_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_PHOTON_GEYSER] = FORBIDDEN_METRONOME,
|
||||
[MOVE_PIKA_PAPOW] = FORBIDDEN_METRONOME,
|
||||
[MOVE_PLASMA_FISTS] = FORBIDDEN_METRONOME,
|
||||
[MOVE_PRECIPICE_BLADES] = FORBIDDEN_METRONOME,
|
||||
[MOVE_PROTECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_PYRO_BALL] = FORBIDDEN_METRONOME,
|
||||
[MOVE_QUASH] = FORBIDDEN_METRONOME,
|
||||
[MOVE_QUICK_GUARD] = FORBIDDEN_METRONOME,
|
||||
[MOVE_RAGE_POWDER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_RAZOR_WIND] = FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_RELIC_SONG] = FORBIDDEN_METRONOME,
|
||||
[MOVE_ROAR] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_SAPPY_SEED] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SECRET_SWORD] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SHADOW_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SHELL_TRAP] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SKETCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SIZZLY_SLIDE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SKETCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SKULL_BASH] = FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SKY_ATTACK] = FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SKY_DROP] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SLEEP_TALK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SNAP_TRAP] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SNARL] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SNATCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_SNORE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SOLAR_BEAM] = FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SOLAR_BLADE] = FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_SPARKLY_SWIRL] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SPECTRAL_THIEF] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SPIKY_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_SPOTLIGHT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST,
|
||||
[MOVE_SPIRIT_BREAK] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SPLISHY_SPLASH] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SPOTLIGHT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_STEAM_ERUPTION] = FORBIDDEN_METRONOME,
|
||||
[MOVE_STEEL_BEAM] = FORBIDDEN_METRONOME,
|
||||
[MOVE_STRANGE_STEAM] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SUNSTEEL_STRIKE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SURGING_STRIKES] = FORBIDDEN_METRONOME,
|
||||
[MOVE_SWITCHEROO] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_TECHNO_BLAST] = FORBIDDEN_METRONOME,
|
||||
[MOVE_THIEF] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_THOUSAND_ARROWS] = FORBIDDEN_METRONOME,
|
||||
[MOVE_THOUSAND_WAVES] = FORBIDDEN_METRONOME,
|
||||
[MOVE_THUNDER_CAGE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_THUNDEROUS_KICK] = FORBIDDEN_METRONOME,
|
||||
[MOVE_TRANSFORM] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC,
|
||||
[MOVE_TRICK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_V_CREATE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_WIDE_GUARD] = FORBIDDEN_METRONOME,
|
||||
[MOVE_WHIRLWIND] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_UPROAR] = FORBIDDEN_SLEEP_TALK,
|
||||
[MOVE_V_CREATE] = FORBIDDEN_METRONOME,
|
||||
[MOVE_VEEVEE_VOLLEY] = FORBIDDEN_METRONOME,
|
||||
[MOVE_WHIRLWIND] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||
[MOVE_WICKED_BLOW] = FORBIDDEN_METRONOME,
|
||||
[MOVE_WIDE_GUARD] = FORBIDDEN_METRONOME,
|
||||
[MOVE_ZIPPY_ZAP] = FORBIDDEN_METRONOME,
|
||||
};
|
||||
|
||||
static const u16 sMoveEffectsForbiddenToInstruct[] =
|
||||
{
|
||||
EFFECT_ASSIST,
|
||||
//EFFECT_BEAK_BLAST,
|
||||
EFFECT_BELCH,
|
||||
EFFECT_BIDE,
|
||||
//EFFECT_CELEBRATE,
|
||||
//EFFECT_CHATTER,
|
||||
EFFECT_COPYCAT,
|
||||
//EFFECT_DYNAMAX_CANNON,
|
||||
EFFECT_FOCUS_PUNCH,
|
||||
//EFFECT_GEOMANCY,
|
||||
EFFECT_GEOMANCY,
|
||||
//EFFECT_HOLD_HANDS,
|
||||
EFFECT_INSTRUCT,
|
||||
EFFECT_ME_FIRST,
|
||||
EFFECT_METRONOME,
|
||||
EFFECT_MIMIC,
|
||||
EFFECT_MIRROR_MOVE,
|
||||
EFFECT_NATURE_POWER,
|
||||
//EFFECT_OBSTRUCT,
|
||||
EFFECT_RAMPAGE,
|
||||
EFFECT_RECHARGE,
|
||||
EFFECT_RECOIL_25,
|
||||
EFFECT_ROLLOUT,
|
||||
EFFECT_SEMI_INVULNERABLE,
|
||||
//EFFECT_SHELL_TRAP,
|
||||
EFFECT_SKETCH,
|
||||
@ -1016,21 +1086,22 @@ static const u16 sMoveEffectsForbiddenToInstruct[] =
|
||||
EFFECT_SOLARBEAM,
|
||||
EFFECT_TRANSFORM,
|
||||
EFFECT_TWO_TURNS_ATTACK,
|
||||
EFFECT_UPROAR,
|
||||
FORBIDDEN_INSTRUCT_END
|
||||
};
|
||||
|
||||
static const u16 sNaturePowerMoves[] =
|
||||
{
|
||||
[BATTLE_TERRAIN_GRASS] = MOVE_STUN_SPORE,
|
||||
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_RAZOR_LEAF,
|
||||
[BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
|
||||
[BATTLE_TERRAIN_GRASS] = MOVE_ENERGY_BALL,
|
||||
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_ENERGY_BALL,
|
||||
[BATTLE_TERRAIN_SAND] = MOVE_EARTH_POWER,
|
||||
[BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_TERRAIN_WATER] = MOVE_SURF,
|
||||
[BATTLE_TERRAIN_POND] = MOVE_BUBBLE_BEAM,
|
||||
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE,
|
||||
[BATTLE_TERRAIN_CAVE] = MOVE_SHADOW_BALL,
|
||||
[BATTLE_TERRAIN_BUILDING] = MOVE_SWIFT,
|
||||
[BATTLE_TERRAIN_PLAIN] = MOVE_SWIFT
|
||||
[BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
|
||||
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTH_POWER,
|
||||
[BATTLE_TERRAIN_CAVE] = MOVE_POWER_GEM,
|
||||
[BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
|
||||
[BATTLE_TERRAIN_PLAIN] = MOVE_TRI_ATTACK
|
||||
};
|
||||
|
||||
static const u16 sPickupItems[] =
|
||||
@ -1083,7 +1154,7 @@ static const u8 sTerrainToType[] =
|
||||
[BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER,
|
||||
[BATTLE_TERRAIN_WATER] = TYPE_WATER,
|
||||
[BATTLE_TERRAIN_POND] = TYPE_WATER,
|
||||
[BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK,
|
||||
[BATTLE_TERRAIN_MOUNTAIN] = TYPE_GROUND,
|
||||
[BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
|
||||
[BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL,
|
||||
[BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL,
|
||||
@ -1535,8 +1606,8 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
if (defAbility == ABILITY_WONDER_SKIN && gBattleMoves[move].power == 0)
|
||||
moveAcc = 50;
|
||||
|
||||
calc = sAccuracyStageRatios[buff].dividend * moveAcc;
|
||||
calc /= sAccuracyStageRatios[buff].divisor;
|
||||
calc = gAccuracyStageRatios[buff].dividend * moveAcc;
|
||||
calc /= gAccuracyStageRatios[buff].divisor;
|
||||
|
||||
if (atkAbility == ABILITY_COMPOUND_EYES)
|
||||
calc = (calc * 130) / 100; // 1.3 compound eyes boost
|
||||
@ -7688,51 +7759,25 @@ static void Cmd_various(void)
|
||||
gBattlescriptCurrInstr += 7;
|
||||
return;
|
||||
case VARIOUS_SET_SIMPLE_BEAM:
|
||||
switch (gBattleMons[gActiveBattler].ability)
|
||||
if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gActiveBattler].ability))
|
||||
{
|
||||
case ABILITY_SIMPLE:
|
||||
case ABILITY_TRUANT:
|
||||
case ABILITY_STANCE_CHANGE:
|
||||
case ABILITY_DISGUISE:
|
||||
case ABILITY_MULTITYPE:
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[gActiveBattler].ability = ABILITY_SIMPLE;
|
||||
gBattlescriptCurrInstr += 7;
|
||||
break;
|
||||
}
|
||||
return;
|
||||
case VARIOUS_TRY_ENTRAINMENT:
|
||||
switch (gBattleMons[gBattlerTarget].ability)
|
||||
if (IsEntrainmentBannedAbilityAttacker(gBattleMons[gBattlerAttacker].ability)
|
||||
|| IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||
{
|
||||
case ABILITY_TRUANT:
|
||||
case ABILITY_MULTITYPE:
|
||||
case ABILITY_STANCE_CHANGE:
|
||||
case ABILITY_SCHOOLING:
|
||||
case ABILITY_COMATOSE:
|
||||
case ABILITY_SHIELDS_DOWN:
|
||||
case ABILITY_DISGUISE:
|
||||
case ABILITY_RKS_SYSTEM:
|
||||
case ABILITY_BATTLE_BOND:
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||
return;
|
||||
}
|
||||
switch (gBattleMons[gBattlerAttacker].ability)
|
||||
{
|
||||
case ABILITY_TRACE:
|
||||
case ABILITY_FORECAST:
|
||||
case ABILITY_FLOWER_GIFT:
|
||||
case ABILITY_ZEN_MODE:
|
||||
case ABILITY_ILLUSION:
|
||||
case ABILITY_IMPOSTER:
|
||||
case ABILITY_POWER_OF_ALCHEMY:
|
||||
case ABILITY_RECEIVER:
|
||||
case ABILITY_DISGUISE:
|
||||
case ABILITY_POWER_CONSTRUCT:
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||
return;
|
||||
}
|
||||
|
||||
if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability)
|
||||
{
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||
@ -11062,6 +11107,12 @@ static void Cmd_callterrainattack(void) // nature power
|
||||
gBattlescriptCurrInstr++;
|
||||
}
|
||||
|
||||
u16 GetNaturePowerMove(void)
|
||||
{
|
||||
//TODO terrain
|
||||
return sNaturePowerMoves[gBattleTerrain];
|
||||
}
|
||||
|
||||
static void Cmd_cureifburnedparalysedorpoisoned(void) // refresh
|
||||
{
|
||||
if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON))
|
||||
@ -11228,18 +11279,20 @@ static void Cmd_tryswapitems(void) // trick
|
||||
|
||||
static void Cmd_trycopyability(void) // role play
|
||||
{
|
||||
switch (gBattleMons[gBattlerTarget].ability)
|
||||
u16 defAbility = gBattleMons[gBattlerTarget].ability;
|
||||
|
||||
if (gBattleMons[gBattlerAttacker].ability == defAbility
|
||||
|| defAbility == ABILITY_NONE
|
||||
|| IsRolePlayBannedAbilityAtk(gBattleMons[gBattlerAttacker].ability)
|
||||
|| IsRolePlayBannedAbility(defAbility))
|
||||
{
|
||||
case ABILITY_NONE:
|
||||
case ABILITY_WONDER_GUARD:
|
||||
case ABILITY_DISGUISE:
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
break;
|
||||
default:
|
||||
gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability;
|
||||
gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
|
||||
gBattlescriptCurrInstr += 5;
|
||||
break;
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].ability = defAbility;
|
||||
gLastUsedAbility = defAbility;
|
||||
gBattlescriptCurrInstr += 5;
|
||||
}
|
||||
}
|
||||
|
||||
@ -11293,28 +11346,14 @@ static void Cmd_settoxicspikes(void)
|
||||
|
||||
static void Cmd_setgastroacid(void)
|
||||
{
|
||||
switch (gBattleMons[gBattlerTarget].ability)
|
||||
if (IsGastroAcidBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||
{
|
||||
case ABILITY_AS_ONE_ICE_RIDER:
|
||||
case ABILITY_AS_ONE_SHADOW_RIDER:
|
||||
case ABILITY_BATTLE_BOND:
|
||||
case ABILITY_COMATOSE:
|
||||
case ABILITY_DISGUISE:
|
||||
case ABILITY_GULP_MISSILE:
|
||||
case ABILITY_ICE_FACE:
|
||||
case ABILITY_MULTITYPE:
|
||||
case ABILITY_POWER_CONSTRUCT:
|
||||
case ABILITY_RKS_SYSTEM:
|
||||
case ABILITY_SCHOOLING:
|
||||
case ABILITY_SHIELDS_DOWN:
|
||||
case ABILITY_STANCE_CHANGE:
|
||||
case ABILITY_ZEN_MODE:
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
else
|
||||
{
|
||||
gStatuses3[gBattlerTarget] |= STATUS3_GASTRO_ACID;
|
||||
gBattlescriptCurrInstr += 5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -11383,24 +11422,13 @@ static void Cmd_setroom(void)
|
||||
|
||||
static void Cmd_tryswapabilities(void) // skill swap
|
||||
{
|
||||
switch (gBattleMons[gBattlerAttacker].ability)
|
||||
if (IsSkillSwapBannedAbility(gBattleMons[gBattlerAttacker].ability)
|
||||
|| IsSkillSwapBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||
{
|
||||
case ABILITY_NONE:
|
||||
case ABILITY_WONDER_GUARD:
|
||||
case ABILITY_DISGUISE:
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (gBattleMons[gBattlerTarget].ability)
|
||||
{
|
||||
case ABILITY_NONE:
|
||||
case ABILITY_WONDER_GUARD:
|
||||
case ABILITY_DISGUISE:
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
|
||||
{
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
@ -11628,7 +11656,7 @@ static void Cmd_getsecretpowereffect(void)
|
||||
switch (gBattleTerrain)
|
||||
{
|
||||
case BATTLE_TERRAIN_GRASS:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_POISON;
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
|
||||
break;
|
||||
case BATTLE_TERRAIN_LONG_GRASS:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
|
||||
@ -11637,16 +11665,16 @@ static void Cmd_getsecretpowereffect(void)
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
||||
break;
|
||||
case BATTLE_TERRAIN_UNDERWATER:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_1;
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||
break;
|
||||
case BATTLE_TERRAIN_WATER:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||
break;
|
||||
case BATTLE_TERRAIN_POND:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1;
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||
break;
|
||||
case BATTLE_TERRAIN_MOUNTAIN:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION;
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
||||
break;
|
||||
case BATTLE_TERRAIN_CAVE:
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH;
|
||||
@ -11873,6 +11901,13 @@ static void Cmd_tryrecycleitem(void)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 CanCamouflage(u8 battlerId)
|
||||
{
|
||||
if (IS_BATTLER_OF_TYPE(battlerId, sTerrainToType[gBattleTerrain]))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void Cmd_settypetoterrain(void)
|
||||
{
|
||||
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]))
|
||||
@ -12397,11 +12432,36 @@ static void Cmd_trainerslideout(void)
|
||||
gBattlescriptCurrInstr += 2;
|
||||
}
|
||||
|
||||
static const u16 sTelekinesisBanList[] =
|
||||
{
|
||||
SPECIES_DIGLETT,
|
||||
SPECIES_DUGTRIO,
|
||||
#ifdef POKEMON_EXPANSION
|
||||
SPECIES_DIGLETT_ALOLAN,
|
||||
SPECIES_DUGTRIO_ALOLAN,
|
||||
SPECIES_SANDYGAST,
|
||||
SPECIES_PALOSSAND,
|
||||
SPECIES_GENGAR_MEGA,
|
||||
#endif
|
||||
};
|
||||
|
||||
bool32 IsTelekinesisBannedSpecies(u16 species)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sTelekinesisBanList); i++)
|
||||
{
|
||||
if (species == sTelekinesisBanList[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void Cmd_settelekinesis(void)
|
||||
{
|
||||
if (gStatuses3[gBattlerTarget] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN)
|
||||
|| gFieldStatuses & STATUS_FIELD_GRAVITY
|
||||
|| (gBattleMons[gBattlerTarget].species == SPECIES_DIGLETT || gBattleMons[gBattlerTarget].species == SPECIES_DUGTRIO))
|
||||
|| IsTelekinesisBannedSpecies(gBattleMons[gBattlerTarget].species))
|
||||
{
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
}
|
||||
@ -12469,19 +12529,14 @@ static void Cmd_trygetbaddreamstarget(void)
|
||||
|
||||
static void Cmd_tryworryseed(void)
|
||||
{
|
||||
switch (gBattleMons[gBattlerTarget].ability)
|
||||
if (IsWorrySeedBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||
{
|
||||
case ABILITY_INSOMNIA:
|
||||
case ABILITY_MULTITYPE:
|
||||
case ABILITY_TRUANT:
|
||||
case ABILITY_STANCE_CHANGE:
|
||||
case ABILITY_DISGUISE:
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[gBattlerTarget].ability = ABILITY_INSOMNIA;
|
||||
gBattlescriptCurrInstr += 5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,8 @@
|
||||
#include "trig.h"
|
||||
#include "window.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_ai_main.h"
|
||||
#include "battle_ai_util.h"
|
||||
#include "event_data.h"
|
||||
#include "link.h"
|
||||
#include "malloc.h"
|
||||
@ -87,6 +88,134 @@ static const u8 sPkblToEscapeFactor[][3] = {
|
||||
static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1};
|
||||
static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4};
|
||||
|
||||
static const u16 sSkillSwapBannedAbilities[] =
|
||||
{
|
||||
ABILITY_WONDER_GUARD,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_ILLUSION,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_NEUTRALIZING_GAS,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_HUNGER_SWITCH,
|
||||
ABILITY_GULP_MISSILE,
|
||||
};
|
||||
|
||||
static const u16 sRolePlayBannedAbilities[] =
|
||||
{
|
||||
ABILITY_TRACE,
|
||||
ABILITY_WONDER_GUARD,
|
||||
ABILITY_FORECAST,
|
||||
ABILITY_FLOWER_GIFT,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_ILLUSION,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_IMPOSTER,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_POWER_OF_ALCHEMY,
|
||||
ABILITY_RECEIVER,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_HUNGER_SWITCH,
|
||||
ABILITY_GULP_MISSILE,
|
||||
};
|
||||
|
||||
static const u16 sRolePlayBannedAttackerAbilities[] =
|
||||
{
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
};
|
||||
|
||||
static const u16 sWorrySeedBannedAbilities[] =
|
||||
{
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_TRUANT,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
};
|
||||
|
||||
static const u16 sGastroAcidBannedAbilities[] =
|
||||
{
|
||||
ABILITY_AS_ONE_ICE_RIDER,
|
||||
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_ZEN_MODE,
|
||||
};
|
||||
|
||||
static const u16 sEntrainmentBannedAttackerAbilities[] =
|
||||
{
|
||||
ABILITY_TRACE,
|
||||
ABILITY_FORECAST,
|
||||
ABILITY_FLOWER_GIFT,
|
||||
ABILITY_ZEN_MODE,
|
||||
ABILITY_ILLUSION,
|
||||
ABILITY_IMPOSTER,
|
||||
ABILITY_POWER_OF_ALCHEMY,
|
||||
ABILITY_RECEIVER,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_POWER_CONSTRUCT,
|
||||
ABILITY_NEUTRALIZING_GAS,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_HUNGER_SWITCH,
|
||||
ABILITY_GULP_MISSILE,
|
||||
};
|
||||
|
||||
static const u16 sEntrainmentTargetSimpleBeamBannedAbilities[] =
|
||||
{
|
||||
ABILITY_TRUANT,
|
||||
ABILITY_MULTITYPE,
|
||||
ABILITY_STANCE_CHANGE,
|
||||
ABILITY_SCHOOLING,
|
||||
ABILITY_COMATOSE,
|
||||
ABILITY_SHIELDS_DOWN,
|
||||
ABILITY_DISGUISE,
|
||||
ABILITY_RKS_SYSTEM,
|
||||
ABILITY_BATTLE_BOND,
|
||||
ABILITY_ICE_FACE,
|
||||
ABILITY_GULP_MISSILE,
|
||||
};
|
||||
|
||||
// Functions
|
||||
void HandleAction_UseMove(void)
|
||||
{
|
||||
u32 i, side, moveType, var = 4;
|
||||
@ -1407,11 +1536,11 @@ static bool32 IsGravityPreventingMove(u32 move)
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 IsHealBlockPreventingMove(u32 battler, u32 move)
|
||||
bool32 IsHealBlockPreventingMove(u32 battler, u32 move)
|
||||
{
|
||||
if (!(gStatuses3[battler] & STATUS3_HEAL_BLOCK))
|
||||
return FALSE;
|
||||
|
||||
|
||||
switch (gBattleMoves[move].effect)
|
||||
{
|
||||
case EFFECT_ABSORB:
|
||||
@ -2909,7 +3038,7 @@ void TryClearRageAndFuryCutter(void)
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 IsThawingMove(u8 battlerId, u16 move)
|
||||
bool32 IsThawingMove(u8 battlerId, u16 move)
|
||||
{
|
||||
switch (move)
|
||||
{
|
||||
@ -5716,10 +5845,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
||||
u8 ppBonuses;
|
||||
u16 move;
|
||||
|
||||
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
|
||||
mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
|
||||
else
|
||||
mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
|
||||
mon = GetBattlerPartyData(battlerId);
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
move = GetMonData(mon, MON_DATA_MOVE1 + i);
|
||||
@ -7398,6 +7524,11 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b
|
||||
atkStage = gBattleMons[battlerDef].statStages[STAT_SPATK];
|
||||
}
|
||||
}
|
||||
if (gBattleMoves[move].effect == EFFECT_BODY_PRESS)
|
||||
{
|
||||
atkStat = gBattleMons[battlerAtk].defense;
|
||||
atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IS_MOVE_PHYSICAL(move))
|
||||
@ -7961,7 +8092,7 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat
|
||||
&& gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1)
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities);
|
||||
|
||||
if (moveType == TYPE_GROUND && !IsBattlerGrounded(battlerDef))
|
||||
if (moveType == TYPE_GROUND && !IsBattlerGrounded(battlerDef) && !(gBattleMoves[move].flags & FLAG_DAMAGE_AIRBORNE))
|
||||
{
|
||||
modifier = UQ_4_12(0.0);
|
||||
if (recordAbilities && GetBattlerAbility(battlerDef) == ABILITY_LEVITATE)
|
||||
@ -7973,6 +8104,14 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat
|
||||
RecordAbilityBattle(battlerDef, ABILITY_LEVITATE);
|
||||
}
|
||||
}
|
||||
|
||||
// Thousand Arrows ignores type modifiers for flying mons
|
||||
if (!IsBattlerGrounded(battlerDef) && (gBattleMoves[move].flags & FLAG_DAMAGE_AIRBORNE)
|
||||
&& (gBattleMons[battlerDef].type1 == TYPE_FLYING || gBattleMons[battlerDef].type2 == TYPE_FLYING || gBattleMons[battlerDef].type3 == TYPE_FLYING))
|
||||
{
|
||||
modifier = UQ_4_12(1.0);
|
||||
}
|
||||
|
||||
if (GetBattlerAbility(battlerDef) == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0) && gBattleMoves[move].power)
|
||||
{
|
||||
modifier = UQ_4_12(0.0);
|
||||
@ -8403,3 +8542,123 @@ static bool32 IsUnnerveAbilityOnOpposingSide(u8 battlerId)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 TestMoveFlags(u16 move, u32 flag)
|
||||
{
|
||||
if (gBattleMoves[move].flags & flag)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
struct Pokemon *GetBattlerPartyData(u8 battlerId)
|
||||
{
|
||||
struct Pokemon *mon;
|
||||
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
|
||||
mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
|
||||
else
|
||||
mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
|
||||
|
||||
return mon;
|
||||
}
|
||||
|
||||
//Make sure the input bank is any bank on the specific mon's side
|
||||
bool32 CanFling(u8 battlerId)
|
||||
{
|
||||
u16 item = gBattleMons[battlerId].item;
|
||||
u16 itemEffect = ItemId_GetHoldEffect(item);
|
||||
|
||||
if (item == ITEM_NONE
|
||||
|| GetBattlerAbility(battlerId) == ABILITY_KLUTZ
|
||||
|| gFieldStatuses & STATUS_FIELD_MAGIC_ROOM
|
||||
|| gDisableStructs[battlerId].embargoTimer != 0
|
||||
|| !CanBattlerGetOrLoseItem(battlerId, item)
|
||||
//|| itemEffect == HOLD_EFFECT_PRIMAL_ORB
|
||||
|| itemEffect == HOLD_EFFECT_GEMS
|
||||
#ifdef ITEM_ABILITY_CAPSULE
|
||||
|| item == ITEM_ABILITY_CAPSULE
|
||||
#endif
|
||||
|| (ItemId_GetPocket(item) == POCKET_BERRIES && IsAbilityOnSide(battlerId, ABILITY_UNNERVE))
|
||||
|| GetPocketByItemId(item) == POCKET_POKE_BALLS)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// ability checks
|
||||
bool32 IsRolePlayBannedAbilityAtk(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sRolePlayBannedAttackerAbilities); i++)
|
||||
{
|
||||
if (ability == sRolePlayBannedAttackerAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsRolePlayBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sRolePlayBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sRolePlayBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsSkillSwapBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sSkillSwapBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sSkillSwapBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsWorrySeedBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sWorrySeedBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sWorrySeedBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsGastroAcidBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sGastroAcidBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sGastroAcidBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsEntrainmentBannedAbilityAttacker(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sEntrainmentBannedAttackerAbilities); i++)
|
||||
{
|
||||
if (ability == sEntrainmentBannedAttackerAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability)
|
||||
{
|
||||
u32 i;
|
||||
for (i = 0; i < ARRAY_COUNT(sEntrainmentTargetSimpleBeamBannedAbilities); i++)
|
||||
{
|
||||
if (ability == sEntrainmentTargetSimpleBeamBannedAbilities[i])
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,6 @@ void AllocateBattleResources(void)
|
||||
gBattleResources->beforeLvlUp = AllocZeroed(sizeof(*gBattleResources->beforeLvlUp));
|
||||
gBattleResources->ai = AllocZeroed(sizeof(*gBattleResources->ai));
|
||||
gBattleResources->battleHistory = AllocZeroed(sizeof(*gBattleResources->battleHistory));
|
||||
gBattleResources->AI_ScriptsStack = AllocZeroed(sizeof(*gBattleResources->AI_ScriptsStack));
|
||||
|
||||
gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
||||
gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
||||
@ -59,7 +58,6 @@ void FreeBattleResources(void)
|
||||
FREE_AND_SET_NULL(gBattleResources->beforeLvlUp);
|
||||
FREE_AND_SET_NULL(gBattleResources->ai);
|
||||
FREE_AND_SET_NULL(gBattleResources->battleHistory);
|
||||
FREE_AND_SET_NULL(gBattleResources->AI_ScriptsStack);
|
||||
FREE_AND_SET_NULL(gBattleResources);
|
||||
|
||||
FREE_AND_SET_NULL(gLinkBattleSendBuffer);
|
||||
|
@ -265,12 +265,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.accuracy = 0,
|
||||
.flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#elif B_UPDATED_MOVE_DATA >= GEN_5
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5
|
||||
.accuracy = 100,
|
||||
.flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#else
|
||||
.accuracy = 100,
|
||||
.flags = FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_ROAR,
|
||||
.power = 0,
|
||||
@ -337,7 +337,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 45,
|
||||
.pp = 25,
|
||||
#elif B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5
|
||||
.power = 35,
|
||||
.pp = 15,
|
||||
#else
|
||||
@ -420,6 +420,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_ROLLING_KICK] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.power = 60,
|
||||
.type = TYPE_FIGHTING,
|
||||
@ -428,7 +433,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -507,7 +511,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_7
|
||||
.power = 40,
|
||||
.accuracy = 100,
|
||||
#elif B_UPDATED_MOVE_DATA >= GEN_5
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5 || B_UPDATED_MOVE_DATA == GEN_6
|
||||
.power = 50,
|
||||
.accuracy = 100,
|
||||
#else
|
||||
@ -715,12 +719,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.accuracy = 0,
|
||||
.flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_MAGIC_COAT_AFFECTED,
|
||||
#elif B_UPDATED_MOVE_DATA >= GEN_5
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5
|
||||
.accuracy = 100,
|
||||
.flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_MAGIC_COAT_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_MAGIC_COAT_AFFECTED,
|
||||
#else
|
||||
.accuracy = 100,
|
||||
.flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
|
||||
#endif
|
||||
.effect = EFFECT_ROAR,
|
||||
.power = 0,
|
||||
@ -897,7 +901,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 90,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
#elif B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5
|
||||
.power = 95,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
#else
|
||||
@ -1068,8 +1072,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_COUNTER] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4
|
||||
.flags = FLAG_MAKES_CONTACT,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#endif
|
||||
@ -1274,7 +1280,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_STRING_SHOT] =
|
||||
{
|
||||
.effect = EFFECT_SPEED_DOWN_2,
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.effect = EFFECT_SPEED_DOWN_2,
|
||||
#else
|
||||
.effect = EFFECT_SPEED_DOWN,
|
||||
#endif
|
||||
.power = 0,
|
||||
.type = TYPE_BUG,
|
||||
.accuracy = 95,
|
||||
@ -1972,10 +1982,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_WATERFALL] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.effect = EFFECT_HIT,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.power = 80,
|
||||
.type = TYPE_WATER,
|
||||
@ -1984,7 +1999,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 20,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -2174,13 +2188,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.accuracy = 90,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5
|
||||
.accuracy = 80,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
#else
|
||||
.accuracy = 55,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
#endif
|
||||
.effect = EFFECT_POISON,
|
||||
.power = 0,
|
||||
@ -2241,6 +2255,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_SKY_ATTACK] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_TWO_TURNS_ATTACK,
|
||||
.power = 140,
|
||||
.type = TYPE_FLYING,
|
||||
@ -2249,7 +2268,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.argument = MOVE_EFFECT_FLINCH,
|
||||
},
|
||||
@ -2714,8 +2732,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 50,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5
|
||||
.power = 40,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
|
||||
#else
|
||||
.power = 40,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
|
||||
#endif
|
||||
.effect = EFFECT_SNORE,
|
||||
.type = TYPE_NORMAL,
|
||||
@ -2724,7 +2747,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -2762,17 +2784,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_CONVERSION_2] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.target = MOVE_TARGET_USER,
|
||||
#else
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
#endif
|
||||
.effect = EFFECT_CONVERSION_2,
|
||||
.power = 0,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
.accuracy = 0,
|
||||
.pp = 30,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 0,
|
||||
.flags = 0,
|
||||
.split = SPLIT_STATUS,
|
||||
@ -2799,10 +2817,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5
|
||||
.accuracy = 100,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
#else
|
||||
.accuracy = 85,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
#endif
|
||||
.effect = EFFECT_SPEED_DOWN_2,
|
||||
.power = 0,
|
||||
@ -2862,6 +2880,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_PROTECT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.priority = 4,
|
||||
#else
|
||||
.priority = 3,
|
||||
#endif
|
||||
.effect = EFFECT_PROTECT,
|
||||
.power = 0,
|
||||
.type = TYPE_NORMAL,
|
||||
@ -2869,7 +2892,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 4,
|
||||
.flags = FLAG_PROTECTION_MOVE,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
@ -3039,7 +3061,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.accuracy = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
|
||||
#elif B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4
|
||||
.accuracy = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#else
|
||||
@ -3100,6 +3122,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_DETECT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.priority = 4,
|
||||
#else
|
||||
.priority = 3,
|
||||
#endif
|
||||
.effect = EFFECT_PROTECT,
|
||||
.power = 0,
|
||||
.type = TYPE_FIGHTING,
|
||||
@ -3107,7 +3134,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.pp = 5,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 4,
|
||||
.flags = FLAG_PROTECTION_MOVE,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
@ -3133,9 +3159,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
[MOVE_LOCK_ON] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_4
|
||||
.accuracy = 100,
|
||||
#else
|
||||
.accuracy = 0,
|
||||
#else
|
||||
.accuracy = 100,
|
||||
#endif
|
||||
.effect = EFFECT_LOCK_ON,
|
||||
.power = 0,
|
||||
@ -3208,6 +3234,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_ENDURE] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.priority = 4,
|
||||
#else
|
||||
.priority = 3,
|
||||
#endif
|
||||
.effect = EFFECT_ENDURE,
|
||||
.power = 0,
|
||||
.type = TYPE_NORMAL,
|
||||
@ -3215,7 +3246,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 4,
|
||||
.flags = FLAG_PROTECTION_MOVE,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
@ -3594,7 +3624,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_RAPID_SPIN] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 50,
|
||||
#else
|
||||
.power = 20,
|
||||
@ -3612,7 +3642,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_SWEET_SCENT] =
|
||||
{
|
||||
.effect = EFFECT_EVASION_DOWN_2,
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.effect = EFFECT_EVASION_DOWN_2,
|
||||
#else
|
||||
.effect = EFFECT_EVASION_DOWN,
|
||||
#endif
|
||||
.power = 0,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
@ -3714,8 +3748,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_HIDDEN_POWER] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 60,
|
||||
#else
|
||||
.power = 1,
|
||||
#endif
|
||||
.effect = EFFECT_HIDDEN_POWER,
|
||||
.power = 60,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
@ -3742,6 +3780,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_TWISTER] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR,
|
||||
#else
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR,
|
||||
#endif
|
||||
.effect = EFFECT_TWISTER,
|
||||
.power = 40,
|
||||
.type = TYPE_DRAGON,
|
||||
@ -3750,7 +3793,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 20,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_IN_AIR,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -3802,8 +3844,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_MIRROR_COAT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_PROTECT_AFFECTED,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4
|
||||
.flags = 0,
|
||||
#else
|
||||
.flags = FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#endif
|
||||
@ -3821,9 +3865,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
[MOVE_PSYCH_UP] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_SNATCH_AFFECTED,
|
||||
#else
|
||||
.flags = 0,
|
||||
#else
|
||||
.flags = FLAG_SNATCH_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_PSYCH_UP,
|
||||
.power = 0,
|
||||
@ -3949,12 +3993,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_BEAT_UP] =
|
||||
{
|
||||
.effect = EFFECT_BEAT_UP,
|
||||
#if B_BEAT_UP_DMG >= GEN_5
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.power = 1,
|
||||
#else
|
||||
.power = 10,
|
||||
#endif
|
||||
.effect = EFFECT_BEAT_UP,
|
||||
.type = TYPE_DARK,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
@ -3967,9 +4011,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_FAKE_OUT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.priority = 3,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4
|
||||
.priority = 1,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.priority = 1,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FAKE_OUT,
|
||||
@ -3979,7 +4028,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 3,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -4196,6 +4244,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_FOLLOW_ME] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.priority = 2,
|
||||
#else
|
||||
.priority = 3,
|
||||
#endif
|
||||
.effect = EFFECT_FOLLOW_ME,
|
||||
.power = 0,
|
||||
.type = TYPE_NORMAL,
|
||||
@ -4203,7 +4256,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 2,
|
||||
.flags = 0,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
@ -4213,7 +4265,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.effect = EFFECT_NATURE_POWER,
|
||||
.power = 0,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 95,
|
||||
.accuracy = 0,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_DEPENDS,
|
||||
@ -4240,6 +4292,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#else
|
||||
.flags = FLAG_PROTECT_AFFECTED,
|
||||
#endif
|
||||
@ -4310,7 +4364,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.effect = EFFECT_WISH,
|
||||
.power = 0,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
.accuracy = 0,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
@ -4616,10 +4670,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_TAIL_GLOW] =
|
||||
{
|
||||
.effect = EFFECT_SPECIAL_ATTACK_UP_3,
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.effect = EFFECT_SPECIAL_ATTACK_UP_3,
|
||||
#else
|
||||
.effect = EFFECT_SPECIAL_ATTACK_UP_2,
|
||||
#endif
|
||||
.power = 0,
|
||||
.type = TYPE_BUG,
|
||||
.accuracy = 100,
|
||||
.accuracy = 0,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
@ -4778,7 +4836,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_POISON_FANG] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.secondaryEffectChance = 50,
|
||||
#else
|
||||
.secondaryEffectChance = 30,
|
||||
@ -4938,7 +4996,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 130,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
#elif B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5
|
||||
.power = 140,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
#else
|
||||
@ -4957,9 +5015,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_ODOR_SLEUTH] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_4
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.accuracy = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MAGIC_COAT_AFFECTED,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4
|
||||
.accuracy = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
#else
|
||||
.accuracy = 100,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
@ -5497,10 +5558,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_ROCK_BLAST] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_7
|
||||
.accuracy = 90,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5 || B_UPDATED_MOVE_DATA == GEN_6
|
||||
.accuracy = 90,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
#else
|
||||
.accuracy = 80,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_MULTI_HIT,
|
||||
.power = 25,
|
||||
@ -5509,7 +5575,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -6274,6 +6339,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_DARK_PULSE] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST,
|
||||
#else
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_DARK,
|
||||
@ -6282,7 +6352,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 20,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -6332,8 +6401,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.pp = 15,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5
|
||||
.pp = 20,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.pp = 20,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.power = 75,
|
||||
@ -6342,7 +6416,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -6396,8 +6469,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE,
|
||||
#else
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.power = 100,
|
||||
@ -6621,6 +6696,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_THUNDER_FANG] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_STATUS,
|
||||
.power = 65,
|
||||
.type = TYPE_ELECTRIC,
|
||||
@ -6629,13 +6709,17 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.argument = STATUS1_PARALYSIS,
|
||||
},
|
||||
|
||||
[MOVE_ICE_FANG] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_STATUS,
|
||||
.power = 65,
|
||||
.type = TYPE_ICE,
|
||||
@ -6644,13 +6728,17 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.argument = STATUS1_FREEZE,
|
||||
},
|
||||
|
||||
[MOVE_FIRE_FANG] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_STATUS,
|
||||
.power = 65,
|
||||
.type = TYPE_FIRE,
|
||||
@ -6659,7 +6747,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
.argument = STATUS1_BURN,
|
||||
},
|
||||
@ -6790,7 +6877,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = -7,
|
||||
.flags = 0,
|
||||
.flags = FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
|
||||
@ -6920,6 +7007,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_IRON_HEAD] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_STEEL,
|
||||
@ -6928,7 +7020,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -7010,17 +7101,23 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 65,
|
||||
.secondaryEffectChance = 100,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_5
|
||||
.power = 60,
|
||||
.secondaryEffectChance = 10,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.power = 60,
|
||||
.secondaryEffectChance = 31,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_CONFUSE_HIT,
|
||||
.type = TYPE_FLYING,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -7382,7 +7479,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.flags = 0,
|
||||
.flags = FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
|
||||
@ -7474,7 +7571,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.flags = 0,
|
||||
.flags = FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
|
||||
@ -7874,7 +7971,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
|
||||
@ -8855,7 +8952,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_FOES_AND_ALLY,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -8898,7 +8995,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -9100,7 +9197,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = 0,
|
||||
.flags = 0,
|
||||
.flags = FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.split = SPLIT_STATUS,
|
||||
},
|
||||
|
||||
@ -9194,7 +9291,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_WATER_SHURIKEN] =
|
||||
{
|
||||
#if B_WATER_SHURIKEN_SPLIT >= GEN_7
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_7
|
||||
.split = SPLIT_SPECIAL,
|
||||
#else
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -9488,10 +9585,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.type = TYPE_GROUND,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.secondaryEffectChance = 0,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIT_IN_AIR,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIT_IN_AIR | FLAG_DAMAGE_AIRBORNE,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -9659,7 +9756,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_STAT_STAGES_IGNORED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -9688,7 +9785,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -9856,7 +9953,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -9996,7 +10093,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -10038,7 +10135,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = -3,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_BALLISTIC,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -10052,7 +10149,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -10066,7 +10163,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -10122,7 +10219,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -10178,7 +10275,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 1,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -10359,17 +10456,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.power = 80,
|
||||
.effect = EFFECT_PLACEHOLDER, // TODO: EFFECT_EVASION_UP_HIT
|
||||
.pp = 10,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.effect = EFFECT_ALWAYS_CRIT,
|
||||
.power = 50,
|
||||
.pp = 15,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
#endif
|
||||
.effect = EFFECT_ALWAYS_CRIT,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 100,
|
||||
.secondaryEffectChance = 0,
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 2,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
@ -10378,9 +10476,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
[MOVE_SPLISHY_SPLASH] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_PARALYZE_HIT,
|
||||
.power = 90,
|
||||
@ -10396,9 +10494,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
[MOVE_FLOATY_FALL] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_FLINCH_HIT,
|
||||
.power = 90,
|
||||
@ -10614,9 +10712,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
[MOVE_DOUBLE_IRON_BASH] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_8
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
|
||||
#else
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_MINIMIZE | FLAG_IRON_FIST_BOOST,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_MINIMIZE | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST,
|
||||
#endif
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO (EFFECT_FLINCH_HIT + EFFECT_DOUBLE_HIT)
|
||||
.power = 60,
|
||||
@ -10828,7 +10926,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
|
||||
[MOVE_BODY_PRESS] =
|
||||
{
|
||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
||||
.effect = EFFECT_BODY_PRESS,
|
||||
.power = 80,
|
||||
.type = TYPE_FIGHTING,
|
||||
.accuracy = 100,
|
||||
@ -10864,7 +10962,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -10892,7 +10990,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -10948,7 +11046,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -10990,7 +11088,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -11004,7 +11102,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -11018,7 +11116,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -11032,7 +11130,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 20,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -11186,7 +11284,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -11256,7 +11354,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -11270,7 +11368,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_BOTH,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -11382,7 +11480,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 30,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -11465,7 +11563,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
|
||||
@ -11493,7 +11591,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
|
||||
.flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST,
|
||||
.split = SPLIT_PHYSICAL,
|
||||
},
|
||||
|
||||
@ -11535,7 +11633,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
||||
.secondaryEffectChance = 0,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND,
|
||||
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND,
|
||||
.split = SPLIT_SPECIAL,
|
||||
},
|
||||
};
|
||||
|
1678
src/data/trainers.h
1678
src/data/trainers.h
File diff suppressed because it is too large
Load Diff
23
src/item.c
23
src/item.c
@ -953,3 +953,26 @@ u8 ItemId_GetSecondaryId(u16 itemId)
|
||||
{
|
||||
return gItems[SanitizeItemId(itemId)].secondaryId;
|
||||
}
|
||||
|
||||
bool32 IsPinchBerryItemEffect(u16 holdEffect)
|
||||
{
|
||||
switch (holdEffect)
|
||||
{
|
||||
case HOLD_EFFECT_ATTACK_UP:
|
||||
case HOLD_EFFECT_DEFENSE_UP:
|
||||
case HOLD_EFFECT_SPEED_UP:
|
||||
case HOLD_EFFECT_SP_ATTACK_UP:
|
||||
case HOLD_EFFECT_SP_DEFENSE_UP:
|
||||
case HOLD_EFFECT_CRITICAL_UP:
|
||||
case HOLD_EFFECT_RANDOM_STAT_UP:
|
||||
#ifdef HOLD_EFFECT_CUSTAP_BERRY
|
||||
case HOLD_EFFECT_CUSTAP_BERRY:
|
||||
#endif
|
||||
#ifdef HOLD_EFFECT_MICLE_BERRY
|
||||
case HOLD_EFFECT_MICLE_BERRY:
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -897,7 +897,7 @@ void FillHillTrainersParties(void)
|
||||
// hill trainers.
|
||||
u32 GetTrainerHillAIFlags(void)
|
||||
{
|
||||
return (AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY);
|
||||
return (AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY);
|
||||
}
|
||||
|
||||
u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
|
||||
|
@ -91,7 +91,7 @@
|
||||
.include "src/region_map.o"
|
||||
.include "src/decoration.o"
|
||||
.include "src/slot_machine.o"
|
||||
.include "src/battle_ai_script_commands.o"
|
||||
.include "src/battle_ai_main.o"
|
||||
.include "src/fldeff_misc.o"
|
||||
.include "src/pokeblock.o"
|
||||
.include "src/field_specials.o"
|
||||
|
Loading…
x
Reference in New Issue
Block a user