Obsoleted 22 more effects
Also added a better way of calculating battle_tv score properly; to do: Make it Rain
This commit is contained in:
parent
cd5c59ae5a
commit
77c722ea09
@ -57,12 +57,12 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FUSION_COMBO
|
||||
.4byte BattleScript_EffectSuperFang @ EFFECT_SUPER_FANG
|
||||
.4byte BattleScript_EffectDragonRage @ EFFECT_DRAGON_RAGE
|
||||
.4byte BattleScript_EffectTrap @ EFFECT_TRAP
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_35
|
||||
.4byte BattleScript_EffectHealBlock @ EFFECT_HEAL_BLOCK
|
||||
.4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS
|
||||
.4byte BattleScript_EffectMist @ EFFECT_MIST
|
||||
.4byte BattleScript_EffectFocusEnergy @ EFFECT_FOCUS_ENERGY
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RECOIL
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_40
|
||||
.4byte BattleScript_EffectConfuse @ EFFECT_CONFUSE
|
||||
.4byte BattleScript_EffectAttackUp2 @ EFFECT_ATTACK_UP_2
|
||||
.4byte BattleScript_EffectDefenseUp2 @ EFFECT_DEFENSE_UP_2
|
||||
@ -83,9 +83,9 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectPoison @ EFFECT_POISON
|
||||
.4byte BattleScript_EffectParalyze @ EFFECT_PARALYZE
|
||||
.4byte BattleScript_EffectTwoTurnsAttack @ EFFECT_TWO_TURNS_ATTACK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_VITAL_THROW
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_61
|
||||
.4byte BattleScript_EffectSubstitute @ EFFECT_SUBSTITUTE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RECHARGE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_63
|
||||
.4byte BattleScript_EffectRage @ EFFECT_RAGE
|
||||
.4byte BattleScript_EffectMimic @ EFFECT_MIMIC
|
||||
.4byte BattleScript_EffectMetronome @ EFFECT_METRONOME
|
||||
@ -108,7 +108,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FALSE_SWIPE
|
||||
.4byte BattleScript_EffectHealBell @ EFFECT_HEAL_BELL
|
||||
.4byte BattleScript_EffectTripleKick @ EFFECT_TRIPLE_KICK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_THIEF
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_86
|
||||
.4byte BattleScript_EffectMeanLook @ EFFECT_MEAN_LOOK
|
||||
.4byte BattleScript_EffectNightmare @ EFFECT_NIGHTMARE
|
||||
.4byte BattleScript_EffectMinimize @ EFFECT_MINIMIZE
|
||||
@ -140,7 +140,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectHit @ EFFECT_HIDDEN_POWER
|
||||
.4byte BattleScript_EffectRainDance @ EFFECT_RAIN_DANCE
|
||||
.4byte BattleScript_EffectSunnyDay @ EFFECT_SUNNY_DAY
|
||||
.4byte BattleScript_EffectHit @ EFFECT_ALL_STATS_UP_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_118
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FELL_STINGER
|
||||
.4byte BattleScript_EffectBellyDrum @ EFFECT_BELLY_DRUM
|
||||
.4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP
|
||||
@ -169,7 +169,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectMemento @ EFFECT_MEMENTO
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FACADE
|
||||
.4byte BattleScript_EffectFocusPunch @ EFFECT_FOCUS_PUNCH
|
||||
.4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLING_SALTS
|
||||
.4byte BattleScript_EffectHit @ EFFECT_DOUBLE_POWER_ON_ARG_STATUS
|
||||
.4byte BattleScript_EffectFollowMe @ EFFECT_FOLLOW_ME
|
||||
.4byte BattleScript_EffectNaturePower @ EFFECT_NATURE_POWER
|
||||
.4byte BattleScript_EffectCharge @ EFFECT_CHARGE
|
||||
@ -194,7 +194,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectGrudge @ EFFECT_GRUDGE
|
||||
.4byte BattleScript_EffectSnatch @ EFFECT_SNATCH
|
||||
.4byte BattleScript_EffectHit @ EFFECT_LOW_KICK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_SECRET_POWER
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_172
|
||||
.4byte BattleScript_EffectTeeterDance @ EFFECT_TEETER_DANCE
|
||||
.4byte BattleScript_EffectHitEscape @ EFFECT_HIT_ESCAPE
|
||||
.4byte BattleScript_EffectMudSport @ EFFECT_MUD_SPORT
|
||||
@ -211,9 +211,9 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectPledge @ EFFECT_PLEDGE
|
||||
.4byte BattleScript_EffectFling @ EFFECT_FLING
|
||||
.4byte BattleScript_EffectNaturalGift @ EFFECT_NATURAL_GIFT
|
||||
.4byte BattleScript_EffectWakeUpSlap @ EFFECT_WAKE_UP_SLAP
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_189
|
||||
.4byte BattleScript_EffectHit @ EFFECT_WRING_OUT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_HEX
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_191
|
||||
.4byte BattleScript_EffectHit @ EFFECT_ASSURANCE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_TRUMP_CARD
|
||||
.4byte BattleScript_EffectHit @ EFFECT_ACROBATICS
|
||||
@ -226,7 +226,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectHit @ EFFECT_PAYBACK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_ROUND
|
||||
.4byte BattleScript_EffectHit @ EFFECT_BRINE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_VENOSHOCK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_204
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RETALIATE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_BULLDOZE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FOUL_PLAY
|
||||
@ -290,23 +290,23 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectCopycat @ EFFECT_COPYCAT
|
||||
.4byte BattleScript_EffectDefog @ EFFECT_DEFOG
|
||||
.4byte BattleScript_EffectHitEnemyHealAlly @ EFFECT_HIT_ENEMY_HEAL_ALLY
|
||||
.4byte BattleScript_EffectSmackDown @ EFFECT_SMACK_DOWN
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_268
|
||||
.4byte BattleScript_EffectSynchronoise @ EFFECT_SYNCHRONOISE
|
||||
.4byte BattleScript_EffectPsychoShift @ EFFECT_PSYCHO_SHIFT
|
||||
.4byte BattleScript_EffectPowerTrick @ EFFECT_POWER_TRICK
|
||||
.4byte BattleScript_EffectFlameBurst @ EFFECT_FLAME_BURST
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_272
|
||||
.4byte BattleScript_EffectAfterYou @ EFFECT_AFTER_YOU
|
||||
.4byte BattleScript_EffectBestow @ EFFECT_BESTOW
|
||||
.4byte BattleScript_EffectRototiller @ EFFECT_ROTOTILLER
|
||||
.4byte BattleScript_EffectFlowerShield @ EFFECT_FLOWER_SHIELD
|
||||
.4byte BattleScript_EffectHit @ EFFECT_HIT_PREVENT_ESCAPE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_277
|
||||
.4byte BattleScript_EffectSpeedSwap @ EFFECT_SPEED_SWAP
|
||||
.4byte BattleScript_EffectDefenseUp2Hit @ EFFECT_DEFENSE_UP2_HIT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_279
|
||||
.4byte BattleScript_EffectHit @ EFFECT_REVELATION_DANCE
|
||||
.4byte BattleScript_EffectAuroraVeil @ EFFECT_AURORA_VEIL
|
||||
.4byte BattleScript_EffectThirdType @ EFFECT_THIRD_TYPE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FEINT
|
||||
.4byte BattleScript_EffectSparklingAria @ EFFECT_SPARKLING_ARIA
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_283
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_284
|
||||
.4byte BattleScript_EffectAcupressure @ EFFECT_ACUPRESSURE
|
||||
.4byte BattleScript_EffectAromaticMist @ EFFECT_AROMATIC_MIST
|
||||
.4byte BattleScript_EffectPowder @ EFFECT_POWDER
|
||||
@ -315,12 +315,12 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectMatBlock @ EFFECT_MAT_BLOCK
|
||||
.4byte BattleScript_EffectHit @ EFFECT_STOMPING_TANTRUM
|
||||
.4byte BattleScript_EffectInstruct @ EFFECT_INSTRUCT
|
||||
.4byte BattleScript_EffectThroatChop @ EFFECT_THROAT_CHOP
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_293
|
||||
.4byte BattleScript_EffectLaserFocus @ EFFECT_LASER_FOCUS
|
||||
.4byte BattleScript_EffectMagneticFlux @ EFFECT_MAGNETIC_FLUX
|
||||
.4byte BattleScript_EffectGearUp @ EFFECT_GEAR_UP
|
||||
.4byte BattleScript_EffectHit @ EFFECT_INCINERATE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_BUG_BITE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_297
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_298
|
||||
.4byte BattleScript_EffectStrengthSap @ EFFECT_STRENGTH_SAP
|
||||
.4byte BattleScript_EffectMindBlown @ EFFECT_MIND_BLOWN
|
||||
.4byte BattleScript_EffectPurify @ EFFECT_PURIFY
|
||||
@ -376,11 +376,11 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP
|
||||
.4byte BattleScript_EffectHit @ EFFECT_PSYBLADE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_HYDRO_STEAM
|
||||
.4byte BattleScript_EffectHit @ EFFECT_HIT_SET_ENTRY_HAZARD
|
||||
.4byte BattleScript_EffectHit @ EFFECT_BARB_BARRAGE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_354
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_355
|
||||
.4byte BattleScript_EffectRevivalBlessing @ EFFECT_REVIVAL_BLESSING
|
||||
.4byte BattleScript_EffectSnow @ EFFECT_SNOWSCAPE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_INFERNAL_PARADE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_358
|
||||
.4byte BattleScript_EffectTakeHeart @ EFFECT_TAKE_HEART
|
||||
.4byte BattleScript_EffectHit @ EFFECT_COLLISION_COURSE
|
||||
.4byte BattleScript_EffectMakeItRain @ EFFECT_MAKE_IT_RAIN
|
||||
@ -1187,7 +1187,7 @@ BattleScript_EffectNoRetreat:
|
||||
waitanimation
|
||||
call BattleScript_AllStatsUp
|
||||
jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_MoveEnd
|
||||
setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE
|
||||
setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE | MOVE_EFFECT_AFFECTS_USER
|
||||
seteffectprimary
|
||||
printstring STRINGID_CANTESCAPEDUETOUSEDMOVE
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
@ -1786,10 +1786,6 @@ BattleScript_EffectThirdType:
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectDefenseUp2Hit:
|
||||
setmoveeffect MOVE_EFFECT_DEF_PLUS_2 | MOVE_EFFECT_AFFECTS_USER
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectFlowerShield:
|
||||
attackcanceler
|
||||
attackstring
|
||||
@ -1899,10 +1895,6 @@ BattleScript_EffectAfterYou:
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectFlameBurst:
|
||||
setmoveeffect MOVE_EFFECT_FLAME_BURST | MOVE_EFFECT_AFFECTS_USER
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_MoveEffectFlameBurst::
|
||||
tryfaintmon BS_TARGET
|
||||
copybyte sBATTLER, sSAVED_BATTLER
|
||||
@ -1992,10 +1984,6 @@ BattleScript_SynchronoiseNoEffect:
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_SynchronoiseMoveTargetEnd
|
||||
|
||||
BattleScript_EffectSmackDown:
|
||||
setmoveeffect MOVE_EFFECT_SMACK_DOWN
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_MoveEffectSmackDown::
|
||||
printstring STRINGID_FELLSTRAIGHTDOWN
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
@ -3063,11 +3051,6 @@ BattleScript_EffectHealBlock:
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectThroatChop:
|
||||
jumpifsubstituteblocks BattleScript_EffectHit
|
||||
setmoveeffect MOVE_EFFECT_THROAT_CHOP | MOVE_EFFECT_CERTAIN
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectHitEscape:
|
||||
call BattleScript_EffectHit_Ret
|
||||
jumpifmovehadnoeffect BattleScript_MoveEnd
|
||||
@ -3885,10 +3868,6 @@ BattleScript_EffectDragonRage::
|
||||
adjustdamage
|
||||
goto BattleScript_HitFromAtkAnimation
|
||||
|
||||
BattleScript_EffectTrap::
|
||||
setmoveeffect MOVE_EFFECT_WRAP
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectRecoilIfMiss::
|
||||
attackcanceler
|
||||
accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE
|
||||
@ -5073,11 +5052,6 @@ BattleScript_SkullBashEnd::
|
||||
call BattleScript_PowerHerbActivation
|
||||
goto BattleScript_TwoTurnMovesSecondTurn
|
||||
|
||||
BattleScript_EffectBulldoze:
|
||||
setmoveeffect MOVE_EFFECT_SPD_MINUS_1
|
||||
BattleScript_EffectEarthquake:
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectFutureSight::
|
||||
attackcanceler
|
||||
attackstring
|
||||
@ -5519,13 +5493,6 @@ BattleScript_EffectFocusPunch::
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectSmellingsalt:
|
||||
BattleScript_EffectWakeUpSlap:
|
||||
BattleScript_EffectSparklingAria:
|
||||
jumpifsubstituteblocks BattleScript_EffectHit
|
||||
setmoveeffect MOVE_EFFECT_REMOVE_STATUS | MOVE_EFFECT_CERTAIN
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectFollowMe::
|
||||
attackcanceler
|
||||
attackstring
|
||||
@ -5830,7 +5797,6 @@ BattleScript_EffectSnatch:
|
||||
goto BattleScript_MoveEnd
|
||||
|
||||
BattleScript_EffectRecoilHP25:
|
||||
setmoveeffect MOVE_EFFECT_RECOIL_HP_25 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
|
||||
jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit
|
||||
incrementgamestat GAME_STAT_USED_STRUGGLE
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
@ -780,9 +780,7 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER
|
||||
#define IS_MOVE_SPECIAL(move)(GetBattleMoveCategory(move) == BATTLE_CATEGORY_SPECIAL)
|
||||
#define IS_MOVE_STATUS(move)(gBattleMoves[move].category == BATTLE_CATEGORY_STATUS)
|
||||
|
||||
#define IS_EFFECT_RECOIL(effect)(effect == EFFECT_RECOIL || effect == EFFECT_RECOIL_IF_MISS)
|
||||
|
||||
#define IS_MOVE_RECOIL(move)(IS_EFFECT_RECOIL(gBattleMoves[move].effect))
|
||||
#define IS_MOVE_RECOIL(move)(gBattleMoves[move].recoil > 0 || gBattleMoves[move].effect == EFFECT_RECOIL_IF_MISS)
|
||||
|
||||
#define BATTLER_MAX_HP(battlerId)(gBattleMons[battlerId].hp == gBattleMons[battlerId].maxHP)
|
||||
#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0) || (gBattleStruct->enduredDamage & gBitTable[gBattlerTarget]))
|
||||
|
||||
@ -66,6 +66,7 @@ u32 AI_GetBattlerMoveTargetType(u32 battlerId, u32 move);
|
||||
bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove);
|
||||
u32 AI_CalcSecondaryEffectChance(u32 battler, u32 secondaryEffectChance);
|
||||
bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef);
|
||||
u32 AI_ShouldSetUpHazards(struct AiLogicData *aiData, u32 battlerAtk, u32 battlerDef);
|
||||
|
||||
// stat stage checks
|
||||
bool32 AnyStatIsRaised(u32 battlerId);
|
||||
@ -122,7 +123,7 @@ bool32 ShouldSetSun(u32 battlerAtk, u32 atkAbility, u32 holdEffect);
|
||||
bool32 HasSleepMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef);
|
||||
bool32 IsHealingMoveEffect(u32 effect);
|
||||
bool32 HasHealingEffect(u32 battler);
|
||||
bool32 IsTrappingMoveEffect(u32 effect);
|
||||
bool32 IsTrappingMove(u32 move);
|
||||
bool32 HasTrappingMoveEffect(u32 battler);
|
||||
bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||
bool32 HasThawingMove(u32 battler);
|
||||
|
||||
@ -36,12 +36,12 @@
|
||||
#define EFFECT_FUSION_COMBO 32
|
||||
#define EFFECT_SUPER_FANG 33
|
||||
#define EFFECT_DRAGON_RAGE 34
|
||||
#define EFFECT_TRAP 35
|
||||
#define EFFECT_UNUSED_35 35
|
||||
#define EFFECT_HEAL_BLOCK 36
|
||||
#define EFFECT_RECOIL_IF_MISS 37
|
||||
#define EFFECT_MIST 38
|
||||
#define EFFECT_FOCUS_ENERGY 39
|
||||
#define EFFECT_RECOIL 40
|
||||
#define EFFECT_UNUSED_40 40
|
||||
#define EFFECT_CONFUSE 41
|
||||
#define EFFECT_ATTACK_UP_2 42
|
||||
#define EFFECT_DEFENSE_UP_2 43
|
||||
@ -62,9 +62,9 @@
|
||||
#define EFFECT_POISON 58
|
||||
#define EFFECT_PARALYZE 59
|
||||
#define EFFECT_TWO_TURNS_ATTACK 60
|
||||
#define EFFECT_VITAL_THROW 61
|
||||
#define EFFECT_UNUSED_61 61
|
||||
#define EFFECT_SUBSTITUTE 62
|
||||
#define EFFECT_RECHARGE 63
|
||||
#define EFFECT_UNUSED_63 63
|
||||
#define EFFECT_RAGE 64
|
||||
#define EFFECT_MIMIC 65
|
||||
#define EFFECT_METRONOME 66
|
||||
@ -87,7 +87,7 @@
|
||||
#define EFFECT_FALSE_SWIPE 83
|
||||
#define EFFECT_HEAL_BELL 84
|
||||
#define EFFECT_TRIPLE_KICK 85
|
||||
#define EFFECT_THIEF 86
|
||||
#define EFFECT_UNUSED_86 86
|
||||
#define EFFECT_MEAN_LOOK 87
|
||||
#define EFFECT_NIGHTMARE 88
|
||||
#define EFFECT_MINIMIZE 89
|
||||
@ -119,7 +119,7 @@
|
||||
#define EFFECT_HIDDEN_POWER 115
|
||||
#define EFFECT_RAIN_DANCE 116
|
||||
#define EFFECT_SUNNY_DAY 117
|
||||
#define EFFECT_ALL_STATS_UP_HIT 118
|
||||
#define EFFECT_UNUSED_118 118
|
||||
#define EFFECT_FELL_STINGER 119
|
||||
#define EFFECT_BELLY_DRUM 120
|
||||
#define EFFECT_PSYCH_UP 121
|
||||
@ -148,7 +148,7 @@
|
||||
#define EFFECT_MEMENTO 144
|
||||
#define EFFECT_FACADE 145
|
||||
#define EFFECT_FOCUS_PUNCH 146
|
||||
#define EFFECT_SMELLING_SALTS 147
|
||||
#define EFFECT_DOUBLE_POWER_ON_ARG_STATUS 147
|
||||
#define EFFECT_FOLLOW_ME 148
|
||||
#define EFFECT_NATURE_POWER 149
|
||||
#define EFFECT_CHARGE 150
|
||||
@ -173,7 +173,7 @@
|
||||
#define EFFECT_GRUDGE 169
|
||||
#define EFFECT_SNATCH 170
|
||||
#define EFFECT_LOW_KICK 171
|
||||
#define EFFECT_SECRET_POWER 172
|
||||
#define EFFECT_UNUSED_172 172
|
||||
#define EFFECT_TEETER_DANCE 173
|
||||
#define EFFECT_HIT_ESCAPE 174
|
||||
#define EFFECT_MUD_SPORT 175
|
||||
@ -190,9 +190,9 @@
|
||||
#define EFFECT_PLEDGE 186
|
||||
#define EFFECT_FLING 187
|
||||
#define EFFECT_NATURAL_GIFT 188
|
||||
#define EFFECT_WAKE_UP_SLAP 189
|
||||
#define EFFECT_UNUSED_189 189
|
||||
#define EFFECT_WRING_OUT 190
|
||||
#define EFFECT_HEX 191
|
||||
#define EFFECT_UNUSED_191 191
|
||||
#define EFFECT_ASSURANCE 192
|
||||
#define EFFECT_TRUMP_CARD 193
|
||||
#define EFFECT_ACROBATICS 194
|
||||
@ -205,7 +205,7 @@
|
||||
#define EFFECT_PAYBACK 201
|
||||
#define EFFECT_ROUND 202
|
||||
#define EFFECT_BRINE 203
|
||||
#define EFFECT_VENOSHOCK 204
|
||||
#define EFFECT_UNUSED_204 204
|
||||
#define EFFECT_RETALIATE 205
|
||||
#define EFFECT_BULLDOZE 206
|
||||
#define EFFECT_FOUL_PLAY 207
|
||||
@ -269,23 +269,23 @@
|
||||
#define EFFECT_COPYCAT 265
|
||||
#define EFFECT_DEFOG 266
|
||||
#define EFFECT_HIT_ENEMY_HEAL_ALLY 267
|
||||
#define EFFECT_SMACK_DOWN 268
|
||||
#define EFFECT_UNUSED_268 268
|
||||
#define EFFECT_SYNCHRONOISE 269
|
||||
#define EFFECT_PSYCHO_SHIFT 270
|
||||
#define EFFECT_POWER_TRICK 271
|
||||
#define EFFECT_FLAME_BURST 272
|
||||
#define EFFECT_UNUSED_272 272
|
||||
#define EFFECT_AFTER_YOU 273
|
||||
#define EFFECT_BESTOW 274
|
||||
#define EFFECT_ROTOTILLER 275
|
||||
#define EFFECT_FLOWER_SHIELD 276
|
||||
#define EFFECT_HIT_PREVENT_ESCAPE 277
|
||||
#define EFFECT_UNUSED_277 277
|
||||
#define EFFECT_SPEED_SWAP 278
|
||||
#define EFFECT_DEFENSE_UP2_HIT 279
|
||||
#define EFFECT_UNUSED_279 279
|
||||
#define EFFECT_REVELATION_DANCE 280
|
||||
#define EFFECT_AURORA_VEIL 281
|
||||
#define EFFECT_THIRD_TYPE 282
|
||||
#define EFFECT_FEINT 283
|
||||
#define EFFECT_SPARKLING_ARIA 284
|
||||
#define EFFECT_UNUSED_283 283
|
||||
#define EFFECT_UNUSED_284 284
|
||||
#define EFFECT_ACUPRESSURE 285
|
||||
#define EFFECT_AROMATIC_MIST 286
|
||||
#define EFFECT_POWDER 287
|
||||
@ -294,12 +294,12 @@
|
||||
#define EFFECT_MAT_BLOCK 290
|
||||
#define EFFECT_STOMPING_TANTRUM 291
|
||||
#define EFFECT_INSTRUCT 292
|
||||
#define EFFECT_THROAT_CHOP 293
|
||||
#define EFFECT_UNUSED_293 293
|
||||
#define EFFECT_LASER_FOCUS 294
|
||||
#define EFFECT_MAGNETIC_FLUX 295
|
||||
#define EFFECT_GEAR_UP 296
|
||||
#define EFFECT_INCINERATE 297
|
||||
#define EFFECT_BUG_BITE 298
|
||||
#define EFFECT_UNUSED_297 297
|
||||
#define EFFECT_UNUSED_298 298
|
||||
#define EFFECT_STRENGTH_SAP 299
|
||||
#define EFFECT_MIND_BLOWN 300
|
||||
#define EFFECT_PURIFY 301
|
||||
@ -355,11 +355,11 @@
|
||||
#define EFFECT_SHELL_TRAP 351
|
||||
#define EFFECT_PSYBLADE 352
|
||||
#define EFFECT_HYDRO_STEAM 353
|
||||
#define EFFECT_HIT_SET_ENTRY_HAZARD 354
|
||||
#define EFFECT_BARB_BARRAGE 355
|
||||
#define EFFECT_UNUSED_354 354
|
||||
#define EFFECT_UNUSED_355 355
|
||||
#define EFFECT_REVIVAL_BLESSING 356
|
||||
#define EFFECT_SNOWSCAPE 357
|
||||
#define EFFECT_INFERNAL_PARADE 358
|
||||
#define EFFECT_UNUSED_358 358
|
||||
#define EFFECT_TAKE_HEART 359
|
||||
#define EFFECT_COLLISION_COURSE 360
|
||||
#define EFFECT_MAKE_IT_RAIN 361
|
||||
|
||||
@ -1006,10 +1006,24 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
}
|
||||
}
|
||||
|
||||
// check things that aren't move effects (recoil)
|
||||
if (gBattleMoves[move].recoil > 0)
|
||||
{
|
||||
if (AI_IsDamagedByRecoil(battlerAtk))
|
||||
{
|
||||
u32 recoilDmg = max(1, aiData->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] * max(1, gBattleMoves[move].recoil) / 100);
|
||||
if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex))
|
||||
ADJUST_SCORE(-10);
|
||||
}
|
||||
}
|
||||
|
||||
// check move effects
|
||||
switch (moveEffect)
|
||||
{
|
||||
case EFFECT_HIT:
|
||||
case EFFECT_HIT: // only applies to Vital Throw
|
||||
if (gBattleMoves[move].priority < 0 && AI_STRIKES_FIRST(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40)
|
||||
ADJUST_SCORE(-1); // don't want to move last
|
||||
break;
|
||||
default:
|
||||
break; // check move damage
|
||||
case EFFECT_SLEEP:
|
||||
@ -1361,7 +1375,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
}
|
||||
break;
|
||||
//case EFFECT_BIDE:
|
||||
//case EFFECT_RECHARGE:
|
||||
//case EFFECT_COUNTER:
|
||||
case EFFECT_PRESENT:
|
||||
case EFFECT_SONICBOOM:
|
||||
@ -1856,15 +1869,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] < 75)
|
||||
ADJUST_SCORE(-6);
|
||||
break;
|
||||
case EFFECT_RECOIL:
|
||||
if (AI_IsDamagedByRecoil(battlerAtk))
|
||||
{
|
||||
u32 recoilDmg = max(1, aiData->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] * max(1, gBattleMoves[move].recoil) / 100);
|
||||
if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex))
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EFFECT_TEETER_DANCE:
|
||||
if (((gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
|
||||
|| (!DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move) && aiData->abilities[battlerDef] == ABILITY_OWN_TEMPO)
|
||||
@ -2056,7 +2060,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
|| ((aiData->abilities[battlerDef] == ABILITY_CONTRARY) && !IS_TARGETING_PARTNER(battlerAtk, battlerDef))) // don't want to raise target stats unless its your partner
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
|
||||
case EFFECT_PSYCH_UP: // haze stats check
|
||||
{
|
||||
for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++)
|
||||
@ -2392,8 +2395,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
|| PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
case EFFECT_THROAT_CHOP:
|
||||
break;
|
||||
case EFFECT_HEAL_BLOCK:
|
||||
if (gDisableStructs[battlerDef].healBlockTimer != 0
|
||||
|| PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
|
||||
@ -2475,7 +2476,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
if (instructedMove == MOVE_NONE
|
||||
|| gBattleMoves[instructedMove].instructBanned
|
||||
|| gBattleMoves[instructedMove].twoTurnMove
|
||||
|| gBattleMoves[instructedMove].effect == EFFECT_RECHARGE
|
||||
|| MoveHasMoveEffectSelf(instructedMove, MOVE_EFFECT_RECHARGE)
|
||||
|| IsZMove(instructedMove)
|
||||
|| (gLockedMoves[battlerDef] != 0 && gLockedMoves[battlerDef] != 0xFFFF)
|
||||
|| gBattleMons[battlerDef].status2 & STATUS2_MULTIPLETURNS
|
||||
@ -2566,10 +2567,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
if (aiData->hpPercents[battlerDef] < 50)
|
||||
ADJUST_SCORE(-1);
|
||||
break;
|
||||
case EFFECT_VITAL_THROW:
|
||||
if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40)
|
||||
ADJUST_SCORE(-1); // don't want to move last
|
||||
break;
|
||||
case EFFECT_FLAIL:
|
||||
if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER // Opponent should go first
|
||||
|| aiData->hpPercents[battlerAtk] > 50)
|
||||
@ -2700,7 +2697,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
case EFFECT_PERISH_SONG:
|
||||
if (!(gBattleMons[battlerDef].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)))
|
||||
{
|
||||
if (IsTrappingMoveEffect(effect) || predictedMove == MOVE_INGRAIN)
|
||||
if (IsTrappingMove(aiData->partnerMove) || predictedMove == MOVE_INGRAIN)
|
||||
ADJUST_SCORE(1);
|
||||
}
|
||||
break;
|
||||
@ -3549,7 +3546,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
break;
|
||||
case EFFECT_TOXIC:
|
||||
case EFFECT_POISON:
|
||||
case EFFECT_BARB_BARRAGE:
|
||||
IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
|
||||
break;
|
||||
case EFFECT_LIGHT_SCREEN:
|
||||
@ -3591,14 +3587,8 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
if (gStatuses3[battlerAtk] & STATUS3_ALWAYS_HITS)
|
||||
ADJUST_SCORE(5);
|
||||
break;
|
||||
case EFFECT_TRAP:
|
||||
if (HasMoveEffect(battlerDef, EFFECT_RAPID_SPIN))
|
||||
break;
|
||||
//fallthrough
|
||||
case EFFECT_MEAN_LOOK:
|
||||
if (IsBattlerTrapped(battlerDef, TRUE))
|
||||
break; // in this case its a bad attacking move
|
||||
else if (ShouldTrap(battlerAtk, battlerDef, move))
|
||||
if (!IsBattlerTrapped(battlerDef, TRUE) && ShouldTrap(battlerAtk, battlerDef, move))
|
||||
ADJUST_SCORE(5);
|
||||
break;
|
||||
case EFFECT_MIST:
|
||||
@ -3847,15 +3837,10 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
break;
|
||||
|
||||
case EFFECT_SPIKES:
|
||||
case EFFECT_HIT_SET_ENTRY_HAZARD:
|
||||
case EFFECT_STEALTH_ROCK:
|
||||
case EFFECT_STICKY_WEB:
|
||||
case EFFECT_TOXIC_SPIKES:
|
||||
if (aiData->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0)
|
||||
break;
|
||||
if (gDisableStructs[battlerAtk].isFirstTurn)
|
||||
ADJUST_SCORE(2);
|
||||
//TODO - track entire opponent party data to determine hazard effectiveness
|
||||
score += AI_ShouldSetUpHazards(aiData, battlerAtk, battlerDef);
|
||||
break;
|
||||
case EFFECT_FORESIGHT:
|
||||
if (aiData->abilities[battlerAtk] == ABILITY_SCRAPPY || aiData->abilities[battlerAtk] == ABILITY_MINDS_EYE)
|
||||
@ -4522,10 +4507,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
break;
|
||||
}*/
|
||||
break;
|
||||
case EFFECT_FEINT:
|
||||
if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT)
|
||||
ADJUST_SCORE(3);
|
||||
break;
|
||||
case EFFECT_EMBARGO:
|
||||
if (aiData->holdEffects[battlerDef] != HOLD_EFFECT_NONE)
|
||||
ADJUST_SCORE(1);
|
||||
@ -4539,12 +4520,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
|| !IsBattlerGrounded(battlerDef))
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case EFFECT_THROAT_CHOP:
|
||||
if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].soundMove && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
|
||||
ADJUST_SCORE(3); // Ai goes first and predicts the target will use a sound move
|
||||
else if (HasSoundMove(battlerDef))
|
||||
ADJUST_SCORE(3);
|
||||
break;
|
||||
case EFFECT_HEAL_BLOCK:
|
||||
if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && predictedMove != MOVE_NONE && IsHealingMoveEffect(gBattleMoves[predictedMove].effect))
|
||||
ADJUST_SCORE(3); // Try to cancel healing move
|
||||
@ -4623,16 +4598,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
&& !IS_MOVE_STATUS(move) && AI_GetTypeEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0)
|
||||
ADJUST_SCORE(1);
|
||||
break;
|
||||
case EFFECT_FLAME_BURST:
|
||||
if (isDoubleBattle)
|
||||
{
|
||||
if (IsBattlerAlive(BATTLE_PARTNER(battlerDef))
|
||||
&& aiData->hpPercents[BATTLE_PARTNER(battlerDef)] < 12
|
||||
&& aiData->abilities[BATTLE_PARTNER(battlerDef)] != ABILITY_MAGIC_GUARD
|
||||
&& !IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerDef), TYPE_FIRE))
|
||||
ADJUST_SCORE(1);
|
||||
}
|
||||
break;
|
||||
case EFFECT_TOXIC_THREAD:
|
||||
IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
|
||||
IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPEED, &score);
|
||||
@ -4859,6 +4824,34 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_STEALTH_ROCK:
|
||||
case MOVE_EFFECT_SPIKES:
|
||||
score += AI_ShouldSetUpHazards(aiData, battlerAtk, battlerDef);
|
||||
break;
|
||||
case MOVE_EFFECT_FEINT:
|
||||
if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT)
|
||||
ADJUST_SCORE(3);
|
||||
break;
|
||||
case MOVE_EFFECT_THROAT_CHOP:
|
||||
if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].soundMove && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
|
||||
ADJUST_SCORE(3); // Ai goes first and predicts the target will use a sound move
|
||||
else if (HasSoundMove(battlerDef))
|
||||
ADJUST_SCORE(3);
|
||||
break;
|
||||
case MOVE_EFFECT_FLAME_BURST:
|
||||
if (isDoubleBattle)
|
||||
{
|
||||
if (IsBattlerAlive(BATTLE_PARTNER(battlerDef))
|
||||
&& aiData->hpPercents[BATTLE_PARTNER(battlerDef)] < 12
|
||||
&& aiData->abilities[BATTLE_PARTNER(battlerDef)] != ABILITY_MAGIC_GUARD
|
||||
&& !IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerDef), TYPE_FIRE))
|
||||
ADJUST_SCORE(1);
|
||||
}
|
||||
break;
|
||||
case MOVE_EFFECT_WRAP:
|
||||
if (!HasMoveEffect(battlerDef, EFFECT_RAPID_SPIN) && !IsBattlerTrapped(battlerDef, TRUE) && ShouldTrap(battlerAtk, battlerDef, move))
|
||||
ADJUST_SCORE(5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4869,6 +4862,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
// Effects that are encouraged on the first turn of battle
|
||||
static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
{
|
||||
u8 i;
|
||||
if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)
|
||||
|| gBattleResults.battleTurnCounter != 0)
|
||||
return score;
|
||||
@ -4967,19 +4961,33 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
case EFFECT_SNOWSCAPE:
|
||||
case EFFECT_GEOMANCY:
|
||||
case EFFECT_VICTORY_DANCE:
|
||||
case EFFECT_HIT_SET_ENTRY_HAZARD:
|
||||
ADJUST_SCORE(2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Consider move effects
|
||||
for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++)
|
||||
{
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_STEALTH_ROCK:
|
||||
case MOVE_EFFECT_SPIKES:
|
||||
ADJUST_SCORE(2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
// Adds score bonus to 'riskier' move effects and high crit moves
|
||||
static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
{
|
||||
u8 i;
|
||||
if (IS_TARGETING_PARTNER(battlerAtk, battlerDef))
|
||||
return score;
|
||||
|
||||
@ -5000,7 +5008,6 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
case EFFECT_SWAGGER:
|
||||
case EFFECT_ATTRACT:
|
||||
case EFFECT_PRESENT:
|
||||
case EFFECT_ALL_STATS_UP_HIT:
|
||||
case EFFECT_BELLY_DRUM:
|
||||
case EFFECT_MIRROR_COAT:
|
||||
case EFFECT_FOCUS_PUNCH:
|
||||
@ -5013,6 +5020,20 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
break;
|
||||
}
|
||||
|
||||
// Consider move effects
|
||||
for (i = 0; i < gBattleMoves[move].numAdditionalEffects; i++)
|
||||
{
|
||||
switch (gBattleMoves[move].additionalEffects[i].moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_ALL_STATS_UP:
|
||||
if (Random() & 1)
|
||||
ADJUST_SCORE(2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
|
||||
@ -954,15 +954,17 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s
|
||||
u32 abilityDef = AI_DATA->abilities[battlerDef];
|
||||
u8 i;
|
||||
|
||||
// recoil
|
||||
if (gBattleMoves[move].recoil > 0 && AI_IsDamagedByRecoil(battlerAtk))
|
||||
return TRUE;
|
||||
|
||||
switch (gBattleMoves[move].effect)
|
||||
{
|
||||
case EFFECT_RECHARGE:
|
||||
case EFFECT_MAKE_IT_RAIN:
|
||||
case EFFECT_MIND_BLOWN:
|
||||
case EFFECT_STEEL_BEAM:
|
||||
return TRUE;
|
||||
case EFFECT_RECOIL_IF_MISS:
|
||||
case EFFECT_RECOIL:
|
||||
if (AI_IsDamagedByRecoil(battlerAtk))
|
||||
return TRUE;
|
||||
break;
|
||||
@ -985,6 +987,8 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s
|
||||
|| (noOfHitsToKo != 1 && abilityDef == ABILITY_CONTRARY && !IsMoldBreakerTypeAbility(abilityAtk)))
|
||||
return TRUE;
|
||||
break;
|
||||
case MOVE_EFFECT_RECHARGE:
|
||||
return gBattleMoves[move].additionalEffects[i].self;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -1494,7 +1498,6 @@ bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
// increased accuracy but don't always hit
|
||||
if ((((weather & B_WEATHER_RAIN) && (gBattleMoves[move].effect == EFFECT_THUNDER || gBattleMoves[move].effect == EFFECT_HURRICANE))
|
||||
|| (((weather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && move == MOVE_BLIZZARD)))
|
||||
|| (gBattleMoves[move].effect == EFFECT_VITAL_THROW)
|
||||
|| (B_MINIMIZE_DMG_ACC >= GEN_6 && (gStatuses3[battlerDef] & STATUS3_MINIMIZED) && gBattleMoves[move].minimizeDoubleDamage)
|
||||
|| (gBattleMoves[move].accuracy == 0))
|
||||
{
|
||||
@ -2080,18 +2083,17 @@ bool32 HasHealingEffect(u32 battlerId)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsTrappingMoveEffect(u32 effect)
|
||||
bool32 IsTrappingMove(u32 move)
|
||||
{
|
||||
switch (effect)
|
||||
switch (gBattleMoves[move].effect)
|
||||
{
|
||||
case EFFECT_MEAN_LOOK:
|
||||
case EFFECT_TRAP:
|
||||
case EFFECT_HIT_PREVENT_ESCAPE:
|
||||
case EFFECT_FAIRY_LOCK:
|
||||
//case EFFECT_NO_RETREAT: // TODO
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
return MoveHasMoveEffect(move, MOVE_EFFECT_PREVENT_ESCAPE, FALSE)
|
||||
|| MoveHasMoveEffect(move, MOVE_EFFECT_WRAP, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2102,7 +2104,7 @@ bool32 HasTrappingMoveEffect(u32 battler)
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && IsTrappingMoveEffect(gBattleMoves[moves[i]].effect))
|
||||
if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && IsTrappingMove(moves[i]))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -3666,8 +3668,8 @@ void IncreasePoisonScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_STALL && HasMoveEffect(battlerAtk, EFFECT_PROTECT))
|
||||
ADJUST_SCORE_PTR(1); // stall tactic
|
||||
|
||||
if (HasMoveEffect(battlerAtk, EFFECT_VENOSHOCK)
|
||||
|| HasMoveEffect(battlerAtk, EFFECT_HEX)
|
||||
if ((HasMoveEffect(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS)
|
||||
&& gBattleMoves[move].argument & STATUS1_PSN_ANY)
|
||||
|| HasMoveEffect(battlerAtk, EFFECT_VENOM_DRENCH)
|
||||
|| AI_DATA->abilities[battlerAtk] == ABILITY_MERCILESS)
|
||||
ADJUST_SCORE_PTR(2);
|
||||
@ -3691,7 +3693,10 @@ void IncreaseBurnScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
ADJUST_SCORE_PTR(2); // burning the target to stay alive is cool
|
||||
}
|
||||
|
||||
if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX))
|
||||
if ((HasMoveEffect(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS)
|
||||
&& gBattleMoves[move].argument & STATUS1_BURN)
|
||||
|| (HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_DOUBLE_POWER_ON_ARG_STATUS)
|
||||
&& gBattleMoves[move].argument & STATUS1_BURN))
|
||||
ADJUST_SCORE_PTR(1);
|
||||
}
|
||||
}
|
||||
@ -3708,7 +3713,8 @@ void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
u32 defSpeed = AI_DATA->speedStats[battlerDef];
|
||||
|
||||
if ((defSpeed >= atkSpeed && defSpeed / 2 < atkSpeed) // You'll go first after paralyzing foe
|
||||
|| HasMoveEffect(battlerAtk, EFFECT_HEX)
|
||||
|| (HasMoveEffect(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS)
|
||||
&& gBattleMoves[move].argument & STATUS1_PARALYSIS)
|
||||
|| HasMoveWithMoveEffect(battlerAtk, MOVE_EFFECT_FLINCH, TRUE) // filter out Fake Out
|
||||
|| gBattleMons[battlerDef].status2 & STATUS2_INFATUATION
|
||||
|| gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
|
||||
@ -3733,7 +3739,10 @@ void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
&& !(HasMoveEffect(battlerDef, EFFECT_SNORE) || HasMoveEffect(battlerDef, EFFECT_SLEEP_TALK)))
|
||||
ADJUST_SCORE_PTR(1);
|
||||
|
||||
if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX))
|
||||
if ((HasMoveEffect(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS)
|
||||
&& gBattleMoves[move].argument & STATUS1_SLEEP)
|
||||
|| (HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_DOUBLE_POWER_ON_ARG_STATUS)
|
||||
&& gBattleMoves[move].argument & STATUS1_SLEEP))
|
||||
ADJUST_SCORE_PTR(1);
|
||||
}
|
||||
|
||||
@ -3770,7 +3779,10 @@ void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score
|
||||
ADJUST_SCORE_PTR(2); // frostbiting the target to stay alive is cool
|
||||
}
|
||||
|
||||
if (HasMoveEffect(battlerAtk, EFFECT_HEX) || HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_HEX))
|
||||
if ((HasMoveEffect(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS)
|
||||
&& gBattleMoves[move].argument & STATUS1_FROSTBITE)
|
||||
|| (HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_DOUBLE_POWER_ON_ARG_STATUS)
|
||||
&& gBattleMoves[move].argument & STATUS1_FROSTBITE))
|
||||
ADJUST_SCORE_PTR(1);
|
||||
}
|
||||
}
|
||||
@ -3856,3 +3868,12 @@ bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef)
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//TODO - track entire opponent party data to determine hazard effectiveness
|
||||
u32 AI_ShouldSetUpHazards(struct AiLogicData *aiData, u32 battlerAtk, u32 battlerDef)
|
||||
{
|
||||
if (aiData->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0)
|
||||
return 0;
|
||||
|
||||
return 2 * gDisableStructs[battlerAtk].isFirstTurn;
|
||||
}
|
||||
|
||||
@ -4041,11 +4041,10 @@ static bool32 IsDomePopularMove(u32 move)
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 IsDomeStatusMoveEffect(u32 effect)
|
||||
static bool32 IsDomeStatusMoveEffect(u32 move)
|
||||
{
|
||||
switch(effect)
|
||||
switch(gBattleMoves[move].effect)
|
||||
{
|
||||
case EFFECT_TRAP:
|
||||
case EFFECT_SLEEP:
|
||||
case EFFECT_CONFUSE:
|
||||
case EFFECT_DISABLE:
|
||||
@ -4063,7 +4062,7 @@ static bool32 IsDomeStatusMoveEffect(u32 effect)
|
||||
case EFFECT_CURSE:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
return MoveHasMoveEffect(move, MOVE_EFFECT_WRAP, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4365,7 +4364,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
|
||||
allocatedArray[k] = IsDomeRiskyMoveEffect(gBattleMoves[move].effect) ? 1 : 0;
|
||||
break;
|
||||
case MOVE_POINTS_STATUS:
|
||||
allocatedArray[k] = IsDomeStatusMoveEffect(gBattleMoves[move].effect) ? 1 : 0;
|
||||
allocatedArray[k] = IsDomeStatusMoveEffect(move);
|
||||
break;
|
||||
case MOVE_POINTS_DMG:
|
||||
allocatedArray[k] = (gBattleMoves[move].power != 0) ? 1 : 0;
|
||||
|
||||
@ -971,20 +971,16 @@ static const u16 sProtectSuccessRates[] = {USHRT_MAX, USHRT_MAX / 2, USHRT_MAX /
|
||||
|
||||
static const u16 sFinalStrikeOnlyEffects[] =
|
||||
{
|
||||
EFFECT_RELIC_SONG,
|
||||
EFFECT_BUG_BITE,
|
||||
EFFECT_THIEF,
|
||||
EFFECT_BURN_UP,
|
||||
EFFECT_DOUBLE_SHOCK,
|
||||
EFFECT_SECRET_POWER,
|
||||
EFFECT_SMACK_DOWN,
|
||||
EFFECT_SPARKLING_ARIA,
|
||||
EFFECT_SMELLING_SALTS,
|
||||
EFFECT_WAKE_UP_SLAP,
|
||||
EFFECT_HIT_ESCAPE,
|
||||
EFFECT_RECOIL_HP_25,
|
||||
EFFECT_HIT_PREVENT_ESCAPE,
|
||||
EFFECT_HIT_SWITCH_TARGET,
|
||||
MOVE_EFFECT_BUG_BITE,
|
||||
MOVE_EFFECT_STEAL_ITEM,
|
||||
MOVE_EFFECT_BURN_UP,
|
||||
MOVE_EFFECT_DOUBLE_SHOCK,
|
||||
MOVE_EFFECT_SECRET_POWER,
|
||||
MOVE_EFFECT_SMACK_DOWN,
|
||||
MOVE_EFFECT_REMOVE_STATUS,
|
||||
MOVE_EFFECT_RECOIL_HP_25,
|
||||
MOVE_EFFECT_PREVENT_ESCAPE,
|
||||
MOVE_EFFECT_WRAP,
|
||||
};
|
||||
|
||||
static const u16 sNaturePowerMoves[BATTLE_TERRAIN_COUNT] =
|
||||
@ -1602,12 +1598,6 @@ static bool32 AccuracyCalcHelper(u16 move)
|
||||
}
|
||||
}
|
||||
|
||||
if (gBattleMoves[move].effect == EFFECT_VITAL_THROW)
|
||||
{
|
||||
JumpIfMoveFailed(7, move);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (B_MINIMIZE_DMG_ACC >= GEN_6
|
||||
&& (gStatuses3[gBattlerTarget] & STATUS3_MINIMIZED)
|
||||
&& gBattleMoves[move].minimizeDoubleDamage)
|
||||
@ -2769,7 +2759,7 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
||||
|
||||
if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT
|
||||
&& gBattleMons[gBattlerTarget].hp != 0
|
||||
&& IsFinalStrikeEffect(gCurrentMove))
|
||||
&& IsFinalStrikeEffect(gBattleScripting.moveEffect))
|
||||
{
|
||||
gBattlescriptCurrInstr++;
|
||||
return;
|
||||
@ -5413,14 +5403,12 @@ static void Cmd_moveend(void)
|
||||
&& IsBattlerAlive(gBattlerAttacker)
|
||||
&& gBattleScripting.savedDmg != 0) // Some checks may be redundant alongside this one
|
||||
{
|
||||
switch (gBattleMoves[gCurrentMove].effect)
|
||||
if (gBattleMoves[gCurrentMove].recoil > 0)
|
||||
{
|
||||
case EFFECT_RECOIL:
|
||||
gBattleMoveDamage = max(1, gBattleScripting.savedDmg * max(1, gBattleMoves[gCurrentMove].recoil) / 100);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil;
|
||||
effect = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
gBattleScripting.moveendState++;
|
||||
@ -9549,7 +9537,7 @@ static void Cmd_various(void)
|
||||
{
|
||||
VARIOUS_ARGS(const u8 *failInstr);
|
||||
u16 move = gLastPrintedMoves[gBattlerTarget];
|
||||
if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || gBattleMoves[move].effect == EFFECT_RECHARGE
|
||||
if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || MoveHasMoveEffectSelf(move, MOVE_EFFECT_RECHARGE)
|
||||
|| gBattleMoves[move].instructBanned || gBattleMoves[move].twoTurnMove || IsDynamaxed(gBattlerTarget))
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
|
||||
@ -121,13 +121,11 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
// [EFFECT_RAZOR_WIND] = 1,
|
||||
[EFFECT_SUPER_FANG] = 5,
|
||||
[EFFECT_DRAGON_RAGE] = 2,
|
||||
[EFFECT_TRAP] = 4,
|
||||
// [EFFECT_HIGH_CRITICAL] = 1,
|
||||
// [EFFECT_DOUBLE_HIT] = 1,
|
||||
[EFFECT_RECOIL_IF_MISS] = 1,
|
||||
[EFFECT_MIST] = 5,
|
||||
[EFFECT_FOCUS_ENERGY] = 1,
|
||||
[EFFECT_RECOIL] = 2,
|
||||
[EFFECT_CONFUSE] = 4,
|
||||
[EFFECT_ATTACK_UP_2] = 1,
|
||||
[EFFECT_DEFENSE_UP_2] = 1,
|
||||
@ -149,9 +147,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_PARALYZE] = 4,
|
||||
// [EFFECT_SKY_ATTACK] = 4,
|
||||
// [EFFECT_TWINEEDLE] = 1,
|
||||
[EFFECT_VITAL_THROW] = 1,
|
||||
[EFFECT_SUBSTITUTE] = 4,
|
||||
[EFFECT_RECHARGE] = 5,
|
||||
[EFFECT_RAGE] = 2,
|
||||
[EFFECT_MIMIC] = 4,
|
||||
[EFFECT_METRONOME] = 1,
|
||||
@ -175,7 +171,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_HEAL_BELL] = 5,
|
||||
// [EFFECT_QUICK_ATTACK] = 1,
|
||||
[EFFECT_TRIPLE_KICK] = 1,
|
||||
[EFFECT_THIEF] = 4,
|
||||
[EFFECT_MEAN_LOOK] = 5,
|
||||
[EFFECT_NIGHTMARE] = 3,
|
||||
[EFFECT_MINIMIZE] = 1,
|
||||
@ -194,7 +189,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_PRESENT] = 1,
|
||||
[EFFECT_FRUSTRATION] = 1,
|
||||
[EFFECT_SAFEGUARD] = 5,
|
||||
// [EFFECT_THAW_HIT] = 1, Now unused
|
||||
[EFFECT_MAGNITUDE] = 1,
|
||||
[EFFECT_BATON_PASS] = 7,
|
||||
[EFFECT_PURSUIT] = 2,
|
||||
@ -235,7 +229,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_MEMENTO] = 7,
|
||||
[EFFECT_FACADE] = 1,
|
||||
[EFFECT_FOCUS_PUNCH] = 7,
|
||||
[EFFECT_SMELLING_SALTS] = 1,
|
||||
[EFFECT_DOUBLE_POWER_ON_ARG_STATUS] = 1,
|
||||
[EFFECT_FOLLOW_ME] = 5,
|
||||
[EFFECT_NATURE_POWER] = 0,
|
||||
[EFFECT_CHARGE] = 4,
|
||||
@ -260,7 +254,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_GRUDGE] = 1,
|
||||
[EFFECT_SNATCH] = 1,
|
||||
[EFFECT_LOW_KICK] = 1,
|
||||
[EFFECT_SECRET_POWER] = 1,
|
||||
[EFFECT_TEETER_DANCE] = 6,
|
||||
// [EFFECT_BLAZE_KICK] = 1,
|
||||
[EFFECT_MUD_SPORT] = 4,
|
||||
@ -277,9 +270,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_PLEDGE] = 0, // TODO: Assign points
|
||||
[EFFECT_FLING] = 0, // TODO: Assign points
|
||||
[EFFECT_NATURAL_GIFT] = 0, // TODO: Assign points
|
||||
[EFFECT_WAKE_UP_SLAP] = 0, // TODO: Assign points
|
||||
[EFFECT_WRING_OUT] = 0, // TODO: Assign points
|
||||
[EFFECT_HEX] = 0, // TODO: Assign points
|
||||
[EFFECT_ASSURANCE] = 0, // TODO: Assign points
|
||||
[EFFECT_TRUMP_CARD] = 0, // TODO: Assign points
|
||||
[EFFECT_ACROBATICS] = 0, // TODO: Assign points
|
||||
@ -292,7 +283,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_PAYBACK] = 0, // TODO: Assign points
|
||||
[EFFECT_ROUND] = 0, // TODO: Assign points
|
||||
[EFFECT_BRINE] = 0, // TODO: Assign points
|
||||
[EFFECT_VENOSHOCK] = 0, // TODO: Assign points
|
||||
[EFFECT_RETALIATE] = 0, // TODO: Assign points
|
||||
[EFFECT_BULLDOZE] = 0, // TODO: Assign points
|
||||
[EFFECT_FOUL_PLAY] = 0, // TODO: Assign points
|
||||
@ -356,23 +346,17 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_COPYCAT] = 0, // TODO: Assign points
|
||||
[EFFECT_DEFOG] = 0, // TODO: Assign points
|
||||
[EFFECT_HIT_ENEMY_HEAL_ALLY] = 0, // TODO: Assign points
|
||||
[EFFECT_SMACK_DOWN] = 0, // TODO: Assign points
|
||||
[EFFECT_SYNCHRONOISE] = 0, // TODO: Assign points
|
||||
[EFFECT_PSYCHO_SHIFT] = 0, // TODO: Assign points
|
||||
[EFFECT_POWER_TRICK] = 0, // TODO: Assign points
|
||||
[EFFECT_FLAME_BURST] = 0, // TODO: Assign points
|
||||
[EFFECT_AFTER_YOU] = 0, // TODO: Assign points
|
||||
[EFFECT_BESTOW] = 0, // TODO: Assign points
|
||||
[EFFECT_ROTOTILLER] = 0, // TODO: Assign points
|
||||
[EFFECT_FLOWER_SHIELD] = 0, // TODO: Assign points
|
||||
[EFFECT_HIT_PREVENT_ESCAPE] = 0, // TODO: Assign points
|
||||
[EFFECT_SPEED_SWAP] = 0, // TODO: Assign points
|
||||
[EFFECT_DEFENSE_UP2_HIT] = 0, // TODO: Assign points
|
||||
[EFFECT_REVELATION_DANCE] = 0, // TODO: Assign points
|
||||
[EFFECT_AURORA_VEIL] = 0, // TODO: Assign points
|
||||
[EFFECT_THIRD_TYPE] = 0, // TODO: Assign points
|
||||
[EFFECT_FEINT] = 0, // TODO: Assign points
|
||||
[EFFECT_SPARKLING_ARIA] = 0, // TODO: Assign points
|
||||
[EFFECT_ACUPRESSURE] = 0, // TODO: Assign points
|
||||
[EFFECT_AROMATIC_MIST] = 0, // TODO: Assign points
|
||||
[EFFECT_POWDER] = 0, // TODO: Assign points
|
||||
@ -381,16 +365,12 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_MAT_BLOCK] = 0, // TODO: Assign points
|
||||
[EFFECT_STOMPING_TANTRUM] = 0, // TODO: Assign points
|
||||
[EFFECT_INSTRUCT] = 0, // TODO: Assign points
|
||||
[EFFECT_THROAT_CHOP] = 0, // TODO: Assign points
|
||||
[EFFECT_LASER_FOCUS] = 0, // TODO: Assign points
|
||||
[EFFECT_MAGNETIC_FLUX] = 0, // TODO: Assign points
|
||||
[EFFECT_GEAR_UP] = 0, // TODO: Assign points
|
||||
[EFFECT_INCINERATE] = 0, // TODO: Assign points
|
||||
[EFFECT_BUG_BITE] = 0, // TODO: Assign points
|
||||
[EFFECT_STRENGTH_SAP] = 0, // TODO: Assign points
|
||||
[EFFECT_MIND_BLOWN] = 0, // TODO: Assign points
|
||||
[EFFECT_PURIFY] = 0, // TODO: Assign points
|
||||
[EFFECT_BURN_UP] = 0, // TODO: Assign points
|
||||
[EFFECT_SHORE_UP] = 0, // TODO: Assign points
|
||||
[EFFECT_GEOMANCY] = 0, // TODO: Assign points
|
||||
[EFFECT_FAIRY_LOCK] = 0, // TODO: Assign points
|
||||
@ -1129,7 +1109,7 @@ void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruc
|
||||
tvPtr->pos[defSide][GetBattlerPosition(gBattlerAttacker) / 2].attackedByMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
|
||||
tvPtr->pos[defSide][GetBattlerPosition(gBattlerAttacker) / 2].attackedByMoveSlot = moveSlot;
|
||||
tvPtr->side[atkSide].usedMoveSlot = moveSlot;
|
||||
AddMovePoints(PTS_MOVE_EFFECT, moveSlot, gBattleMoves[move].effect, 0);
|
||||
AddMovePoints(PTS_MOVE_EFFECT, moveSlot, move, 0);
|
||||
AddPointsBasedOnWeather(weatherFlags, move, moveSlot);
|
||||
if (disableStructPtr->chargeTimer != 0)
|
||||
AddMovePoints(PTS_ELECTRIC, move, moveSlot, 0);
|
||||
@ -1291,7 +1271,26 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
|
||||
|
||||
switch (caseId)
|
||||
{
|
||||
case PTS_MOVE_EFFECT:
|
||||
case PTS_MOVE_EFFECT: //arg1 == moveSlot, arg2 == move
|
||||
{
|
||||
u8 baseFromEffect = sPointsArray[caseId][gBattleMoves[arg2].effect];
|
||||
|
||||
// various cases add/remove points
|
||||
if (gBattleMoves[arg2].recoil > 0)
|
||||
baseFromEffect++; // recoil moves
|
||||
if (MoveHasMoveEffect(arg2, MOVE_EFFECT_SP_ATK_TWO_DOWN, FALSE)
|
||||
|| MoveHasMoveEffect(arg2, MOVE_EFFECT_ATK_DEF_DOWN, FALSE))
|
||||
baseFromEffect += 2; // Overheat etc & Superpower
|
||||
if (MoveHasMoveEffect(arg2, MOVE_EFFECT_STEAL_ITEM, FALSE))
|
||||
baseFromEffect += 3;
|
||||
if (MoveHasMoveEffect(arg2, MOVE_EFFECT_WRAP, FALSE))
|
||||
baseFromEffect += 3;
|
||||
if (MoveHasMoveEffect(arg2, MOVE_EFFECT_RECHARGE, FALSE))
|
||||
baseFromEffect += 4;
|
||||
|
||||
movePoints->points[atkSide][gBattlerPartyIndexes[gBattlerAttacker] * 4 + arg1] += baseFromEffect;
|
||||
break;
|
||||
}
|
||||
case PTS_EFFECTIVENESS:
|
||||
case PTS_CRITICAL_HIT:
|
||||
case PTS_STAT_INCREASE_1:
|
||||
|
||||
@ -8830,22 +8830,14 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3
|
||||
case EFFECT_NATURAL_GIFT:
|
||||
basePower = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].power;
|
||||
break;
|
||||
case EFFECT_WAKE_UP_SLAP:
|
||||
if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP || abilityDef == ABILITY_COMATOSE)
|
||||
basePower *= 2;
|
||||
break;
|
||||
case EFFECT_SMELLING_SALTS:
|
||||
if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS)
|
||||
case EFFECT_DOUBLE_POWER_ON_ARG_STATUS:
|
||||
// Comatose targets treated as if asleep
|
||||
if ((gBattleMons[battlerDef].status1 | (STATUS1_SLEEP * (abilityDef == ABILITY_COMATOSE))) & gBattleMoves[move].argument)
|
||||
basePower *= 2;
|
||||
break;
|
||||
case EFFECT_WRING_OUT:
|
||||
basePower = 120 * gBattleMons[battlerDef].hp / gBattleMons[battlerDef].maxHP;
|
||||
break;
|
||||
case EFFECT_HEX:
|
||||
case EFFECT_INFERNAL_PARADE:
|
||||
if (gBattleMons[battlerDef].status1 & STATUS1_ANY || abilityDef == ABILITY_COMATOSE)
|
||||
basePower *= 2;
|
||||
break;
|
||||
case EFFECT_ASSURANCE:
|
||||
if (gProtectStructs[battlerDef].physicalDmg != 0 || gProtectStructs[battlerDef].specialDmg != 0 || gProtectStructs[battlerDef].confusionSelfDmg)
|
||||
basePower *= 2;
|
||||
@ -9032,11 +9024,6 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32
|
||||
if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2))
|
||||
modifier = uq4_12_multiply(modifier, UQ_4_12(2.0));
|
||||
break;
|
||||
case EFFECT_BARB_BARRAGE:
|
||||
case EFFECT_VENOSHOCK:
|
||||
if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)
|
||||
modifier = uq4_12_multiply(modifier, UQ_4_12(2.0));
|
||||
break;
|
||||
case EFFECT_RETALIATE:
|
||||
if (gSideTimers[atkSide].retaliateTimer == 1)
|
||||
modifier = uq4_12_multiply(modifier, UQ_4_12(2.0));
|
||||
|
||||
@ -110,7 +110,7 @@ static const u16 sWeatherChangingMoves[] = {
|
||||
MOVE_SUNNY_DAY,
|
||||
};
|
||||
|
||||
// EFFECT_RECHARGE, EFFECT_RECOIL
|
||||
// MOVE_EFFECT_RECHARGE, recoil
|
||||
static const u16 sPowerfulNormalMoves[] = {
|
||||
MOVE_HYPER_BEAM,
|
||||
MOVE_GIGA_IMPACT,
|
||||
|
||||
@ -316,7 +316,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BIND] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 15,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = B_UPDATED_MOVE_DATA >= GEN_5 ? 85 : 75,
|
||||
@ -564,7 +564,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_WRAP] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 15,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = B_UPDATED_MOVE_DATA >= GEN_5 ? 90 : 85,
|
||||
@ -580,7 +580,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_TAKE_DOWN] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 90,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 85,
|
||||
@ -613,7 +613,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_DOUBLE_EDGE] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 120,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
@ -1043,7 +1043,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_HYPER_BEAM] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 150,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 90,
|
||||
@ -1090,7 +1090,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
#else
|
||||
.pp = 25,
|
||||
#endif
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_FIGHTING,
|
||||
.accuracy = 80,
|
||||
@ -1363,7 +1363,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_FIRE_SPIN] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_5 ? 35 : 15,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = B_UPDATED_MOVE_DATA >= GEN_5 ? 85 : 70,
|
||||
@ -2118,7 +2118,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_CLAMP] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 35,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = B_UPDATED_MOVE_DATA >= GEN_5 ? 85 : 75,
|
||||
@ -2746,21 +2746,24 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
[MOVE_STRUGGLE] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_4
|
||||
.accuracy = 0,
|
||||
.effect = EFFECT_RECOIL_HP_25,
|
||||
.accuracy = 0,
|
||||
.mirrorMoveBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT_SELF(MOVE_EFFECT_RECOIL_HP_25)
|
||||
),
|
||||
#else
|
||||
.effect = EFFECT_HIT,
|
||||
.accuracy = 100,
|
||||
.effect = EFFECT_RECOIL,
|
||||
.recoil = 25,
|
||||
#endif
|
||||
.power = 50,
|
||||
.type = TYPE_NORMAL,
|
||||
.recoil = 25,
|
||||
.pp = 1,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = BATTLE_CATEGORY_PHYSICAL,
|
||||
.makesContact = TRUE,
|
||||
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS >= GEN_4,
|
||||
.meFirstBanned = TRUE,
|
||||
.mimicBanned = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
@ -2817,7 +2820,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.power = 40,
|
||||
.pp = 10,
|
||||
#endif
|
||||
.effect = EFFECT_THIEF,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_DARK,
|
||||
.accuracy = 100,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
@ -3924,7 +3927,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_VITAL_THROW] =
|
||||
{
|
||||
.effect = EFFECT_VITAL_THROW,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 70,
|
||||
.type = TYPE_FIGHTING,
|
||||
.accuracy = 0,
|
||||
@ -4219,7 +4222,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_WHIRLPOOL] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_5 ? 35 : 15,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = B_UPDATED_MOVE_DATA >= GEN_5 ? 85 : 70,
|
||||
@ -4477,12 +4480,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SMELLING_SALTS] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 70,
|
||||
#else
|
||||
.power = 60,
|
||||
#endif
|
||||
.effect = EFFECT_SMELLING_SALTS,
|
||||
.effect = EFFECT_DOUBLE_POWER_ON_ARG_STATUS,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_6 ? 70 : 60,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
@ -4491,21 +4490,20 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.category = BATTLE_CATEGORY_PHYSICAL,
|
||||
.argument = STATUS1_PARALYSIS,
|
||||
.makesContact = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT(MOVE_EFFECT_REMOVE_STATUS)
|
||||
),
|
||||
},
|
||||
|
||||
[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,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
.target = MOVE_TARGET_USER,
|
||||
.priority = B_UPDATED_MOVE_DATA >= GEN_6 ? 2 : 3,
|
||||
.category = BATTLE_CATEGORY_STATUS,
|
||||
.zMove = { .effect = Z_EFFECT_RESET_STATS },
|
||||
.ignoresProtect = TRUE,
|
||||
@ -4764,12 +4762,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_KNOCK_OFF] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 65,
|
||||
#else
|
||||
.power = 20,
|
||||
#endif
|
||||
.effect = EFFECT_KNOCK_OFF,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_6 ? 65 : 20,
|
||||
.type = TYPE_DARK,
|
||||
.accuracy = 100,
|
||||
.pp = 20,
|
||||
@ -4892,7 +4886,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SECRET_POWER] =
|
||||
{
|
||||
.effect = EFFECT_SECRET_POWER,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 70,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
@ -5176,7 +5170,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BLAST_BURN] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 150,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 90,
|
||||
@ -5191,7 +5185,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_HYDRO_CANNON] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 150,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 90,
|
||||
@ -5523,7 +5517,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SAND_TOMB] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_5 ? 35 : 15,
|
||||
.type = TYPE_GROUND,
|
||||
.accuracy = B_UPDATED_MOVE_DATA >= GEN_5 ? 85 : 70,
|
||||
@ -5683,7 +5677,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_FRENZY_PLANT] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 150,
|
||||
.type = TYPE_GRASS,
|
||||
.accuracy = 90,
|
||||
@ -5771,7 +5765,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_COVET] =
|
||||
{
|
||||
.effect = EFFECT_THIEF,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_5 ? 60 : 40,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
@ -5791,7 +5785,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_VOLT_TACKLE] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 120,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 100,
|
||||
@ -6023,12 +6017,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_WAKE_UP_SLAP] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 70,
|
||||
#else
|
||||
.power = 60,
|
||||
#endif
|
||||
.effect = EFFECT_WAKE_UP_SLAP,
|
||||
.effect = EFFECT_DOUBLE_POWER_ON_ARG_STATUS,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_6 ? 70 : 60,
|
||||
.type = TYPE_FIGHTING,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
@ -6037,6 +6027,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.category = BATTLE_CATEGORY_PHYSICAL,
|
||||
.argument = STATUS1_SLEEP,
|
||||
.makesContact = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT(MOVE_EFFECT_REMOVE_STATUS)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_HAMMER_ARM] =
|
||||
@ -6112,7 +6105,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_FEINT] =
|
||||
{
|
||||
.effect = EFFECT_FEINT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_5 ? 30 : 50,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
@ -6132,7 +6125,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_PLUCK] =
|
||||
{
|
||||
.effect = EFFECT_BUG_BITE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 60,
|
||||
.type = TYPE_FLYING,
|
||||
.accuracy = 100,
|
||||
@ -6586,7 +6579,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_FLARE_BLITZ] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 120,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
@ -6906,7 +6899,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BRAVE_BIRD] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 120,
|
||||
.type = TYPE_FLYING,
|
||||
.accuracy = 100,
|
||||
@ -6953,7 +6946,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_GIGA_IMPACT] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 150,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 90,
|
||||
@ -7311,7 +7304,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_ROCK_WRECKER] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 150,
|
||||
.type = TYPE_ROCK,
|
||||
.accuracy = 90,
|
||||
@ -7500,7 +7493,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BUG_BITE] =
|
||||
{
|
||||
.effect = EFFECT_BUG_BITE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 60,
|
||||
.type = TYPE_BUG,
|
||||
.accuracy = 100,
|
||||
@ -7532,7 +7525,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_WOOD_HAMMER] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 120,
|
||||
.type = TYPE_GRASS,
|
||||
.accuracy = 100,
|
||||
@ -7605,7 +7598,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_HEAD_SMASH] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 150,
|
||||
.type = TYPE_ROCK,
|
||||
.accuracy = 80,
|
||||
@ -7633,7 +7626,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_ROAR_OF_TIME] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 150,
|
||||
.type = TYPE_DRAGON,
|
||||
.accuracy = 90,
|
||||
@ -7701,7 +7694,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.power = 120,
|
||||
.accuracy = 70,
|
||||
#endif
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_FIRE,
|
||||
.pp = 5,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
@ -7880,7 +7873,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_VENOSHOCK] =
|
||||
{
|
||||
.effect = EFFECT_VENOSHOCK,
|
||||
.effect = EFFECT_DOUBLE_POWER_ON_ARG_STATUS,
|
||||
.power = 65,
|
||||
.type = TYPE_POISON,
|
||||
.accuracy = 100,
|
||||
@ -7888,6 +7881,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = BATTLE_CATEGORY_SPECIAL,
|
||||
.argument = STATUS1_PSN_ANY,
|
||||
},
|
||||
|
||||
[MOVE_AUTOTOMIZE] =
|
||||
@ -8395,18 +8389,15 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_HEX] =
|
||||
{
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_6
|
||||
.power = 65,
|
||||
#else
|
||||
.power = 50,
|
||||
#endif
|
||||
.effect = EFFECT_HEX,
|
||||
.effect = EFFECT_DOUBLE_POWER_ON_ARG_STATUS,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_6 ? 65 : 50,
|
||||
.type = TYPE_GHOST,
|
||||
.accuracy = 100,
|
||||
.pp = 10,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = BATTLE_CATEGORY_SPECIAL,
|
||||
.argument = STATUS1_ANY,
|
||||
},
|
||||
|
||||
[MOVE_SKY_DROP] =
|
||||
@ -8465,7 +8456,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
#else
|
||||
.power = 30,
|
||||
#endif
|
||||
.effect = EFFECT_INCINERATE,
|
||||
.effect = EFFECT_HIT,
|
||||
.type = TYPE_FIRE,
|
||||
.accuracy = 100,
|
||||
.pp = 15,
|
||||
@ -8746,7 +8737,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_WILD_CHARGE] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 90,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 100,
|
||||
@ -8984,7 +8975,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_HEAD_CHARGE] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 120,
|
||||
.type = TYPE_NORMAL,
|
||||
.accuracy = 100,
|
||||
@ -9807,7 +9798,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_HYPERSPACE_HOLE] =
|
||||
{
|
||||
.effect = EFFECT_FEINT,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_PSYCHIC,
|
||||
.accuracy = 0,
|
||||
@ -9818,6 +9809,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.ignoresProtect = TRUE,
|
||||
.ignoresSubstitute = TRUE,
|
||||
.metronomeBanned = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
PRIMARY_EFFECT(MOVE_EFFECT_FEINT)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_WATER_SHURIKEN] =
|
||||
@ -10100,7 +10094,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_INFESTATION] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 20,
|
||||
.type = TYPE_BUG,
|
||||
.accuracy = 100,
|
||||
@ -10167,7 +10161,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_THOUSAND_WAVES] =
|
||||
{
|
||||
.effect = EFFECT_HIT_PREVENT_ESCAPE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 90,
|
||||
.type = TYPE_GROUND,
|
||||
.accuracy = 100,
|
||||
@ -10197,7 +10191,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_LIGHT_OF_RUIN] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 140,
|
||||
.type = TYPE_FAIRY,
|
||||
.accuracy = 90,
|
||||
@ -10327,7 +10321,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SPIRIT_SHACKLE] =
|
||||
{
|
||||
.effect = EFFECT_HIT_PREVENT_ESCAPE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_GHOST,
|
||||
.accuracy = 100,
|
||||
@ -10357,7 +10351,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SPARKLING_ARIA] =
|
||||
{
|
||||
.effect = EFFECT_SPARKLING_ARIA,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 90,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 100,
|
||||
@ -10369,6 +10363,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.sheerForceBoost = TRUE,
|
||||
.ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_6,
|
||||
.soundMove = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_REMOVE_STATUS, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_ICE_HAMMER] =
|
||||
@ -10529,7 +10526,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_THROAT_CHOP] =
|
||||
{
|
||||
.effect = EFFECT_THROAT_CHOP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_DARK,
|
||||
.accuracy = 100,
|
||||
@ -10539,6 +10536,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.category = BATTLE_CATEGORY_PHYSICAL,
|
||||
.makesContact = TRUE,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_THROAT_CHOP, 100)
|
||||
),
|
||||
},
|
||||
|
||||
[MOVE_POLLEN_PUFF] =
|
||||
@ -10556,7 +10556,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_ANCHOR_SHOT] =
|
||||
{
|
||||
.effect = EFFECT_HIT_PREVENT_ESCAPE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_STEEL,
|
||||
.accuracy = 100,
|
||||
@ -10942,7 +10942,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_PRISMATIC_LASER] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 160,
|
||||
.type = TYPE_PSYCHIC,
|
||||
.accuracy = 100,
|
||||
@ -11639,7 +11639,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_SNAP_TRAP] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 35,
|
||||
.type = TYPE_GRASS,
|
||||
.accuracy = 100,
|
||||
@ -11893,7 +11893,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_METEOR_ASSAULT] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 150,
|
||||
.type = TYPE_FIGHTING,
|
||||
.accuracy = 100,
|
||||
@ -11910,7 +11910,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_ETERNABEAM] =
|
||||
{
|
||||
.effect = EFFECT_RECHARGE,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 160,
|
||||
.type = TYPE_DRAGON,
|
||||
.accuracy = 90,
|
||||
@ -12261,7 +12261,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_THUNDER_CAGE] =
|
||||
{
|
||||
.effect = EFFECT_TRAP,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 80,
|
||||
.type = TYPE_ELECTRIC,
|
||||
.accuracy = 90,
|
||||
@ -12440,7 +12440,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_STONE_AXE] =
|
||||
{
|
||||
.effect = EFFECT_HIT_SET_ENTRY_HAZARD,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 65,
|
||||
.type = TYPE_ROCK,
|
||||
.accuracy = 90,
|
||||
@ -12509,7 +12509,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_WAVE_CRASH] =
|
||||
{
|
||||
.effect = EFFECT_RECOIL,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = B_UPDATED_MOVE_DATA >= GEN_9 ? 120 : 75,
|
||||
.type = TYPE_WATER,
|
||||
.accuracy = 100,
|
||||
@ -12585,19 +12585,16 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_BARB_BARRAGE] =
|
||||
{
|
||||
.effect = EFFECT_BARB_BARRAGE,
|
||||
.effect = EFFECT_DOUBLE_POWER_ON_ARG_STATUS,
|
||||
.power = 60,
|
||||
.type = TYPE_POISON,
|
||||
.accuracy = 100,
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_9
|
||||
.pp = 10,
|
||||
#else
|
||||
.pp = 15,
|
||||
#endif
|
||||
.pp = B_UPDATED_MOVE_DATA >= GEN_9 ? 10 : 15,
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = BATTLE_CATEGORY_PHYSICAL,
|
||||
.sheerForceBoost = TRUE,
|
||||
.argument = STATUS1_PSN_ANY,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_POISON, 50)
|
||||
),
|
||||
@ -12685,7 +12682,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_INFERNAL_PARADE] =
|
||||
{
|
||||
.effect = EFFECT_INFERNAL_PARADE,
|
||||
.effect = EFFECT_DOUBLE_POWER_ON_ARG_STATUS,
|
||||
.power = 60,
|
||||
.type = TYPE_GHOST,
|
||||
.accuracy = 100,
|
||||
@ -12693,6 +12690,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
.target = MOVE_TARGET_SELECTED,
|
||||
.priority = 0,
|
||||
.category = BATTLE_CATEGORY_SPECIAL,
|
||||
.argument = STATUS1_ANY,
|
||||
.sheerForceBoost = TRUE,
|
||||
ADDITIONAL_EFFECTS(
|
||||
SECONDARY_EFFECT(MOVE_EFFECT_BURN, 30)
|
||||
@ -12701,7 +12699,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] =
|
||||
|
||||
[MOVE_CEASELESS_EDGE] =
|
||||
{
|
||||
.effect = EFFECT_HIT_SET_ENTRY_HAZARD,
|
||||
.effect = EFFECT_HIT,
|
||||
.power = 65,
|
||||
.type = TYPE_DARK,
|
||||
.accuracy = 90,
|
||||
|
||||
@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Sheer Force boosts power, but removes secondary effects of m
|
||||
MESSAGE("Wobbuffet flinched!");
|
||||
}
|
||||
// Volt Tackle/Flare Blitz edge case: recoil happens, but target isn't statused
|
||||
if (gBattleMoves[move].effect == EFFECT_RECOIL)
|
||||
if (gBattleMoves[move].recoil > 0)
|
||||
{
|
||||
HP_BAR(player);
|
||||
MESSAGE("Tauros is hit with recoil!");
|
||||
|
||||
@ -36,7 +36,8 @@ AI_SINGLE_BATTLE_TEST("AI sees increased base power of Smelling Salt")
|
||||
|
||||
GIVEN {
|
||||
ASSUME(B_UPDATED_MOVE_DATA >= GEN_6);
|
||||
ASSUME(gBattleMoves[MOVE_SMELLING_SALTS].effect == EFFECT_SMELLING_SALTS);
|
||||
ASSUME(gBattleMoves[MOVE_SMELLING_SALTS].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gBattleMoves[MOVE_SMELLING_SALTS].argument == STATUS1_PARALYSIS);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(60); Status1(status1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_SMELLING_SALTS); }
|
||||
@ -54,10 +55,12 @@ AI_SINGLE_BATTLE_TEST("AI sees increased base power of Wake Up Slap")
|
||||
|
||||
PARAMETRIZE { status1 = STATUS1_NONE; expectedMove = MOVE_BODY_SLAM; }
|
||||
PARAMETRIZE { status1 = STATUS1_SLEEP; expectedMove = MOVE_WAKE_UP_SLAP; }
|
||||
PARAMETRIZE { status1 = STATUS1_SLEEP; expectedMove = MOVE_WAKE_UP_SLAP; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(B_UPDATED_MOVE_DATA >= GEN_6);
|
||||
ASSUME(gBattleMoves[MOVE_WAKE_UP_SLAP].effect == EFFECT_WAKE_UP_SLAP);
|
||||
ASSUME(gBattleMoves[MOVE_WAKE_UP_SLAP].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gBattleMoves[MOVE_WAKE_UP_SLAP].argument == STATUS1_SLEEP);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
|
||||
PLAYER(SPECIES_MEGANIUM) { HP(35); Status1(status1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_WAKE_UP_SLAP); }
|
||||
|
||||
@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("Air Balloon pops before it can be stolen with Thief or Covet
|
||||
PARAMETRIZE { move = MOVE_THIEF; }
|
||||
PARAMETRIZE { move = MOVE_COVET; }
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[move].effect == EFFECT_THIEF);
|
||||
ASSUME(MoveHasMoveEffect(move, MOVE_EFFECT_STEAL_ITEM, FALSE) == TRUE);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); };
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
|
||||
@ -170,7 +170,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if stolen by a move")
|
||||
bool32 activate;
|
||||
PARAMETRIZE { item = ITEM_NONE; activate = FALSE; }
|
||||
PARAMETRIZE { item = ITEM_POTION; activate = TRUE; }
|
||||
ASSUME(gBattleMoves[MOVE_THIEF].effect == EFFECT_THIEF);
|
||||
ASSUME(MoveHasMoveEffect(MOVE_THIEF, MOVE_EFFECT_STEAL_ITEM, FALSE) == TRUE);
|
||||
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); }
|
||||
|
||||
@ -135,7 +135,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o
|
||||
|
||||
KNOWN_FAILING; // Knock off fails, Thief is fine
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_THIEF].effect == EFFECT_THIEF);
|
||||
ASSUME(MoveHasMoveEffect(MOVE_THIEF, MOVE_EFFECT_STEAL_ITEM, FALSE) == TRUE);
|
||||
ASSUME(gBattleMoves[MOVE_KNOCK_OFF].effect == EFFECT_KNOCK_OFF);
|
||||
PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); Item(ITEM_WHITE_HERB); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -3,7 +3,8 @@
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_BARB_BARRAGE].effect == EFFECT_BARB_BARRAGE);
|
||||
ASSUME(gBattleMoves[MOVE_BARB_BARRAGE].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gBattleMoves[MOVE_BARB_BARRAGE].argument == STATUS1_PSN_ANY);
|
||||
ASSUME(MoveHasMoveEffect(MOVE_BARB_BARRAGE, MOVE_EFFECT_POISON, FALSE) == TRUE);
|
||||
}
|
||||
|
||||
|
||||
@ -3,7 +3,8 @@
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_HEX].effect == EFFECT_HEX);
|
||||
ASSUME(gBattleMoves[MOVE_HEX].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gBattleMoves[MOVE_HEX].argument == STATUS1_ANY);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Hex deals double damage to foes with a status", s16 damage)
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_STONE_AXE].effect == EFFECT_HIT_SET_ENTRY_HAZARD);
|
||||
ASSUME(gBattleMoves[MOVE_CEASELESS_EDGE].effect == EFFECT_HIT_SET_ENTRY_HAZARD);
|
||||
ASSUME(MoveHasMoveEffect(MOVE_STONE_AXE, MOVE_EFFECT_STEALTH_ROCK, FALSE) == TRUE);
|
||||
ASSUME(MoveHasMoveEffect(MOVE_CEASELESS_EDGE, MOVE_EFFECT_SPIKES, FALSE) == TRUE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the target")
|
||||
|
||||
@ -3,10 +3,11 @@
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_INFERNAL_PARADE].effect == EFFECT_INFERNAL_PARADE);
|
||||
ASSUME(gBattleMoves[MOVE_INFERNAL_PARADE].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gBattleMoves[MOVE_INFERNAL_PARADE].argument == STATUS1_ANY);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Infernal Parade inflicts poison")
|
||||
SINGLE_BATTLE_TEST("Infernal Parade inflicts burn")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -206,10 +206,10 @@ SINGLE_BATTLE_TEST("Recoil damage is not applied if target was protected")
|
||||
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_VOLT_TACKLE].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_HEAD_SMASH].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_TAKE_DOWN].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_DOUBLE_EDGE].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_VOLT_TACKLE].recoil > 0);
|
||||
ASSUME(gBattleMoves[MOVE_HEAD_SMASH].recoil > 0);
|
||||
ASSUME(gBattleMoves[MOVE_TAKE_DOWN].recoil > 0);
|
||||
ASSUME(gBattleMoves[MOVE_DOUBLE_EDGE].recoil > 0);
|
||||
PLAYER(SPECIES_RAPIDASH);
|
||||
OPPONENT(SPECIES_BEAUTIFLY);
|
||||
} WHEN {
|
||||
|
||||
@ -7,7 +7,6 @@ SINGLE_BATTLE_TEST("Take Down deals 25% of recoil damage to the user")
|
||||
s16 recoilDamage;
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_TAKE_DOWN].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_TAKE_DOWN].recoil == 25);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -28,7 +27,6 @@ SINGLE_BATTLE_TEST("Double Edge deals 33% of recoil damage to the user")
|
||||
s16 recoilDamage;
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_DOUBLE_EDGE].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_DOUBLE_EDGE].recoil == 33);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -49,7 +47,6 @@ SINGLE_BATTLE_TEST("Head Smash deals 50% of recoil damage to the user")
|
||||
s16 recoilDamage;
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_HEAD_SMASH].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_HEAD_SMASH].recoil == 50);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
@ -70,7 +67,6 @@ SINGLE_BATTLE_TEST("Flare Blitz deals 33% of recoil damage to the user and can b
|
||||
s16 recoilDamage;
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_FLARE_BLITZ].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_FLARE_BLITZ].recoil == 33);
|
||||
ASSUME(gBattleMoves[MOVE_FLARE_BLITZ].argument == STATUS1_BURN);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -3,7 +3,8 @@
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_VENOSHOCK].effect == EFFECT_VENOSHOCK);
|
||||
ASSUME(gBattleMoves[MOVE_VENOSHOCK].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gBattleMoves[MOVE_VENOSHOCK].argument == STATUS1_PSN_ANY);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly poisoned", s16 damage)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user