Battlemove refactored (recoil, crit and Z moves) (#3575)
* Unified EFFECT_RECOIL Combined EFFECT_RECOIL_25/33/50/33_STATUS into a single EFFECT; added an extra field to BattleMove 'secondaryData' that contains the franction of HP recoil; argument still holds status effect for Flare Blitz/Volt Tackle * BattleMove struct change Added critrate, recoil, multihit fields, made zMove into a union of effect/powerOverride for status/non-status moves respectively. Added new recoil field and zMove field to all moves. To-do: crit rate, multihit * Critrate field added Moves use a critRate field instead of a flag - obsoletes EFFECT_ALWAYS_CRIT * Just a little define Makes clear that critBoost = 3 means ALWAYS CRIT * Added a proper recoil field Just to make it unambiguous and flexible - can finally have a move with 69% recoil. * Fixed AI damage calculation for multi-strike moves * Fixes + removed unused effects * Tests fixes Two to fix: pass when run in isolation but not when the whole group is run, which is annoying... * Minor fixes * Minor tweaks * Fixed move effects * recoil tests --------- Co-authored-by: Alex <alexthenotes@gmail.com>
This commit is contained in:
parent
74a6b8764c
commit
4a1a6c5625
@ -69,7 +69,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS
|
||||
.4byte BattleScript_EffectMist @ EFFECT_MIST
|
||||
.4byte BattleScript_EffectFocusEnergy @ EFFECT_FOCUS_ENERGY
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RECOIL_25
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RECOIL
|
||||
.4byte BattleScript_EffectConfuse @ EFFECT_CONFUSE
|
||||
.4byte BattleScript_EffectAttackUp2 @ EFFECT_ATTACK_UP_2
|
||||
.4byte BattleScript_EffectDefenseUp2 @ EFFECT_DEFENSE_UP_2
|
||||
@ -123,7 +123,6 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectSpite @ EFFECT_SPITE
|
||||
.4byte BattleScript_EffectHit @ EFFECT_FALSE_SWIPE
|
||||
.4byte BattleScript_EffectHealBell @ EFFECT_HEAL_BELL
|
||||
.4byte BattleScript_EffectHit @ EFFECT_ALWAYS_CRIT
|
||||
.4byte BattleScript_EffectTripleKick @ EFFECT_TRIPLE_KICK
|
||||
.4byte BattleScript_EffectThief @ EFFECT_THIEF
|
||||
.4byte BattleScript_EffectMeanLook @ EFFECT_MEAN_LOOK
|
||||
@ -215,7 +214,6 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectSnatch @ EFFECT_SNATCH
|
||||
.4byte BattleScript_EffectHit @ EFFECT_LOW_KICK
|
||||
.4byte BattleScript_EffectSecretPower @ EFFECT_SECRET_POWER
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RECOIL_33
|
||||
.4byte BattleScript_EffectTeeterDance @ EFFECT_TEETER_DANCE
|
||||
.4byte BattleScript_EffectHitEscape @ EFFECT_HIT_ESCAPE
|
||||
.4byte BattleScript_EffectMudSport @ EFFECT_MUD_SPORT
|
||||
@ -307,9 +305,7 @@ gBattleScriptsForMoveEffects::
|
||||
.4byte BattleScript_EffectGrowth @ EFFECT_GROWTH
|
||||
.4byte BattleScript_EffectCloseCombat @ EFFECT_CLOSE_COMBAT
|
||||
.4byte BattleScript_EffectLastResort @ EFFECT_LAST_RESORT
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RECOIL_33_STATUS
|
||||
.4byte BattleScript_EffectFlinchStatus @ EFFECT_FLINCH_STATUS
|
||||
.4byte BattleScript_EffectHit @ EFFECT_RECOIL_50
|
||||
.4byte BattleScript_EffectShellSmash @ EFFECT_SHELL_SMASH
|
||||
.4byte BattleScript_EffectShiftGear @ EFFECT_SHIFT_GEAR
|
||||
.4byte BattleScript_EffectDefenseUp3 @ EFFECT_DEFENSE_UP_3
|
||||
|
||||
@ -764,11 +764,7 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER
|
||||
#define IS_MOVE_SPECIAL(move)(GetBattleMoveSplit(move) == SPLIT_SPECIAL)
|
||||
#define IS_MOVE_STATUS(move)(gBattleMoves[move].split == SPLIT_STATUS)
|
||||
|
||||
#define IS_EFFECT_RECOIL(effect)(effect == EFFECT_RECOIL_25 \
|
||||
|| effect == EFFECT_RECOIL_IF_MISS \
|
||||
|| effect == EFFECT_RECOIL_50 \
|
||||
|| effect == EFFECT_RECOIL_33 \
|
||||
|| effect == EFFECT_RECOIL_33_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))
|
||||
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
#define EFFECT_RECOIL_IF_MISS 44
|
||||
#define EFFECT_MIST 45
|
||||
#define EFFECT_FOCUS_ENERGY 46
|
||||
#define EFFECT_RECOIL_25 47
|
||||
#define EFFECT_RECOIL 47
|
||||
#define EFFECT_CONFUSE 48
|
||||
#define EFFECT_ATTACK_UP_2 49
|
||||
#define EFFECT_DEFENSE_UP_2 50
|
||||
@ -102,325 +102,321 @@
|
||||
#define EFFECT_SPITE 98
|
||||
#define EFFECT_FALSE_SWIPE 99
|
||||
#define EFFECT_HEAL_BELL 100
|
||||
#define EFFECT_ALWAYS_CRIT 101
|
||||
#define EFFECT_TRIPLE_KICK 102
|
||||
#define EFFECT_THIEF 103
|
||||
#define EFFECT_MEAN_LOOK 104
|
||||
#define EFFECT_NIGHTMARE 105
|
||||
#define EFFECT_MINIMIZE 106
|
||||
#define EFFECT_CURSE 107
|
||||
#define EFFECT_HEALING_WISH 108
|
||||
#define EFFECT_PROTECT 109
|
||||
#define EFFECT_SPIKES 110
|
||||
#define EFFECT_FORESIGHT 111
|
||||
#define EFFECT_PERISH_SONG 112
|
||||
#define EFFECT_SANDSTORM 113
|
||||
#define EFFECT_ENDURE 114
|
||||
#define EFFECT_ROLLOUT 115
|
||||
#define EFFECT_SWAGGER 116
|
||||
#define EFFECT_FURY_CUTTER 117
|
||||
#define EFFECT_ATTRACT 118
|
||||
#define EFFECT_RETURN 119
|
||||
#define EFFECT_PRESENT 120
|
||||
#define EFFECT_FRUSTRATION 121
|
||||
#define EFFECT_SAFEGUARD 122
|
||||
#define EFFECT_MAGNITUDE 123
|
||||
#define EFFECT_BATON_PASS 124
|
||||
#define EFFECT_PURSUIT 125
|
||||
#define EFFECT_RAPID_SPIN 126
|
||||
#define EFFECT_SONICBOOM 127
|
||||
#define EFFECT_CAPTIVATE 128
|
||||
#define EFFECT_MORNING_SUN 129
|
||||
#define EFFECT_SYNTHESIS 130
|
||||
#define EFFECT_MOONLIGHT 131
|
||||
#define EFFECT_HIDDEN_POWER 132
|
||||
#define EFFECT_RAIN_DANCE 133
|
||||
#define EFFECT_SUNNY_DAY 134
|
||||
#define EFFECT_DEFENSE_UP_HIT 135
|
||||
#define EFFECT_ATTACK_UP_HIT 136
|
||||
#define EFFECT_ALL_STATS_UP_HIT 137
|
||||
#define EFFECT_FELL_STINGER 138
|
||||
#define EFFECT_BELLY_DRUM 139
|
||||
#define EFFECT_PSYCH_UP 140
|
||||
#define EFFECT_MIRROR_COAT 141
|
||||
#define EFFECT_SKULL_BASH 142
|
||||
#define EFFECT_EARTHQUAKE 143
|
||||
#define EFFECT_FUTURE_SIGHT 144
|
||||
#define EFFECT_GUST 145
|
||||
#define EFFECT_SOLAR_BEAM 146
|
||||
#define EFFECT_THUNDER 147
|
||||
#define EFFECT_TELEPORT 148
|
||||
#define EFFECT_BEAT_UP 149
|
||||
#define EFFECT_SEMI_INVULNERABLE 150
|
||||
#define EFFECT_DEFENSE_CURL 151
|
||||
#define EFFECT_SOFTBOILED 152
|
||||
#define EFFECT_FAKE_OUT 153
|
||||
#define EFFECT_UPROAR 154
|
||||
#define EFFECT_STOCKPILE 155
|
||||
#define EFFECT_SPIT_UP 156
|
||||
#define EFFECT_SWALLOW 157
|
||||
#define EFFECT_WORRY_SEED 158
|
||||
#define EFFECT_HAIL 159
|
||||
#define EFFECT_TORMENT 160
|
||||
#define EFFECT_FLATTER 161
|
||||
#define EFFECT_WILL_O_WISP 162
|
||||
#define EFFECT_MEMENTO 163
|
||||
#define EFFECT_FACADE 164
|
||||
#define EFFECT_FOCUS_PUNCH 165
|
||||
#define EFFECT_SMELLING_SALTS 166
|
||||
#define EFFECT_FOLLOW_ME 167
|
||||
#define EFFECT_NATURE_POWER 168
|
||||
#define EFFECT_CHARGE 169
|
||||
#define EFFECT_TAUNT 170
|
||||
#define EFFECT_HELPING_HAND 171
|
||||
#define EFFECT_TRICK 172
|
||||
#define EFFECT_ROLE_PLAY 173
|
||||
#define EFFECT_WISH 174
|
||||
#define EFFECT_ASSIST 175
|
||||
#define EFFECT_INGRAIN 176
|
||||
#define EFFECT_SUPERPOWER 177
|
||||
#define EFFECT_MAGIC_COAT 178
|
||||
#define EFFECT_RECYCLE 179
|
||||
#define EFFECT_REVENGE 180
|
||||
#define EFFECT_BRICK_BREAK 181
|
||||
#define EFFECT_YAWN 182
|
||||
#define EFFECT_KNOCK_OFF 183
|
||||
#define EFFECT_ENDEAVOR 184
|
||||
#define EFFECT_ERUPTION 185
|
||||
#define EFFECT_SKILL_SWAP 186
|
||||
#define EFFECT_IMPRISON 187
|
||||
#define EFFECT_REFRESH 188
|
||||
#define EFFECT_GRUDGE 189
|
||||
#define EFFECT_SNATCH 190
|
||||
#define EFFECT_LOW_KICK 191
|
||||
#define EFFECT_SECRET_POWER 192
|
||||
#define EFFECT_RECOIL_33 193
|
||||
#define EFFECT_TEETER_DANCE 194
|
||||
#define EFFECT_HIT_ESCAPE 195
|
||||
#define EFFECT_MUD_SPORT 196
|
||||
#define EFFECT_POISON_FANG 197
|
||||
#define EFFECT_WEATHER_BALL 198
|
||||
#define EFFECT_OVERHEAT 199
|
||||
#define EFFECT_TICKLE 200
|
||||
#define EFFECT_COSMIC_POWER 201
|
||||
#define EFFECT_SKY_UPPERCUT 202
|
||||
#define EFFECT_BULK_UP 203
|
||||
#define EFFECT_PLACEHOLDER 204
|
||||
#define EFFECT_WATER_SPORT 205
|
||||
#define EFFECT_CALM_MIND 206
|
||||
#define EFFECT_DRAGON_DANCE 207
|
||||
#define EFFECT_CAMOUFLAGE 208
|
||||
#define EFFECT_TRIPLE_KICK 101
|
||||
#define EFFECT_THIEF 102
|
||||
#define EFFECT_MEAN_LOOK 103
|
||||
#define EFFECT_NIGHTMARE 104
|
||||
#define EFFECT_MINIMIZE 105
|
||||
#define EFFECT_CURSE 106
|
||||
#define EFFECT_HEALING_WISH 107
|
||||
#define EFFECT_PROTECT 108
|
||||
#define EFFECT_SPIKES 109
|
||||
#define EFFECT_FORESIGHT 110
|
||||
#define EFFECT_PERISH_SONG 111
|
||||
#define EFFECT_SANDSTORM 112
|
||||
#define EFFECT_ENDURE 113
|
||||
#define EFFECT_ROLLOUT 114
|
||||
#define EFFECT_SWAGGER 115
|
||||
#define EFFECT_FURY_CUTTER 116
|
||||
#define EFFECT_ATTRACT 117
|
||||
#define EFFECT_RETURN 118
|
||||
#define EFFECT_PRESENT 119
|
||||
#define EFFECT_FRUSTRATION 120
|
||||
#define EFFECT_SAFEGUARD 121
|
||||
#define EFFECT_MAGNITUDE 122
|
||||
#define EFFECT_BATON_PASS 123
|
||||
#define EFFECT_PURSUIT 124
|
||||
#define EFFECT_RAPID_SPIN 125
|
||||
#define EFFECT_SONICBOOM 126
|
||||
#define EFFECT_CAPTIVATE 127
|
||||
#define EFFECT_MORNING_SUN 128
|
||||
#define EFFECT_SYNTHESIS 129
|
||||
#define EFFECT_MOONLIGHT 130
|
||||
#define EFFECT_HIDDEN_POWER 131
|
||||
#define EFFECT_RAIN_DANCE 132
|
||||
#define EFFECT_SUNNY_DAY 133
|
||||
#define EFFECT_DEFENSE_UP_HIT 134
|
||||
#define EFFECT_ATTACK_UP_HIT 135
|
||||
#define EFFECT_ALL_STATS_UP_HIT 136
|
||||
#define EFFECT_FELL_STINGER 137
|
||||
#define EFFECT_BELLY_DRUM 138
|
||||
#define EFFECT_PSYCH_UP 139
|
||||
#define EFFECT_MIRROR_COAT 140
|
||||
#define EFFECT_SKULL_BASH 141
|
||||
#define EFFECT_EARTHQUAKE 142
|
||||
#define EFFECT_FUTURE_SIGHT 143
|
||||
#define EFFECT_GUST 144
|
||||
#define EFFECT_SOLAR_BEAM 145
|
||||
#define EFFECT_THUNDER 146
|
||||
#define EFFECT_TELEPORT 147
|
||||
#define EFFECT_BEAT_UP 148
|
||||
#define EFFECT_SEMI_INVULNERABLE 149
|
||||
#define EFFECT_DEFENSE_CURL 150
|
||||
#define EFFECT_SOFTBOILED 151
|
||||
#define EFFECT_FAKE_OUT 152
|
||||
#define EFFECT_UPROAR 153
|
||||
#define EFFECT_STOCKPILE 154
|
||||
#define EFFECT_SPIT_UP 155
|
||||
#define EFFECT_SWALLOW 156
|
||||
#define EFFECT_WORRY_SEED 157
|
||||
#define EFFECT_HAIL 158
|
||||
#define EFFECT_TORMENT 159
|
||||
#define EFFECT_FLATTER 160
|
||||
#define EFFECT_WILL_O_WISP 161
|
||||
#define EFFECT_MEMENTO 162
|
||||
#define EFFECT_FACADE 163
|
||||
#define EFFECT_FOCUS_PUNCH 164
|
||||
#define EFFECT_SMELLING_SALTS 165
|
||||
#define EFFECT_FOLLOW_ME 166
|
||||
#define EFFECT_NATURE_POWER 167
|
||||
#define EFFECT_CHARGE 168
|
||||
#define EFFECT_TAUNT 169
|
||||
#define EFFECT_HELPING_HAND 170
|
||||
#define EFFECT_TRICK 171
|
||||
#define EFFECT_ROLE_PLAY 172
|
||||
#define EFFECT_WISH 173
|
||||
#define EFFECT_ASSIST 174
|
||||
#define EFFECT_INGRAIN 175
|
||||
#define EFFECT_SUPERPOWER 176
|
||||
#define EFFECT_MAGIC_COAT 177
|
||||
#define EFFECT_RECYCLE 178
|
||||
#define EFFECT_REVENGE 179
|
||||
#define EFFECT_BRICK_BREAK 180
|
||||
#define EFFECT_YAWN 181
|
||||
#define EFFECT_KNOCK_OFF 182
|
||||
#define EFFECT_ENDEAVOR 183
|
||||
#define EFFECT_ERUPTION 184
|
||||
#define EFFECT_SKILL_SWAP 185
|
||||
#define EFFECT_IMPRISON 186
|
||||
#define EFFECT_REFRESH 187
|
||||
#define EFFECT_GRUDGE 188
|
||||
#define EFFECT_SNATCH 189
|
||||
#define EFFECT_LOW_KICK 190
|
||||
#define EFFECT_SECRET_POWER 191
|
||||
#define EFFECT_TEETER_DANCE 192
|
||||
#define EFFECT_HIT_ESCAPE 193
|
||||
#define EFFECT_MUD_SPORT 194
|
||||
#define EFFECT_POISON_FANG 195
|
||||
#define EFFECT_WEATHER_BALL 196
|
||||
#define EFFECT_OVERHEAT 197
|
||||
#define EFFECT_TICKLE 198
|
||||
#define EFFECT_COSMIC_POWER 199
|
||||
#define EFFECT_SKY_UPPERCUT 200
|
||||
#define EFFECT_BULK_UP 201
|
||||
#define EFFECT_PLACEHOLDER 202
|
||||
#define EFFECT_WATER_SPORT 203
|
||||
#define EFFECT_CALM_MIND 204
|
||||
#define EFFECT_DRAGON_DANCE 205
|
||||
#define EFFECT_CAMOUFLAGE 206
|
||||
|
||||
// New move effects
|
||||
#define EFFECT_PLEDGE 209
|
||||
#define EFFECT_FLING 210
|
||||
#define EFFECT_NATURAL_GIFT 211
|
||||
#define EFFECT_WAKE_UP_SLAP 212
|
||||
#define EFFECT_WRING_OUT 213
|
||||
#define EFFECT_HEX 214
|
||||
#define EFFECT_ASSURANCE 215
|
||||
#define EFFECT_TRUMP_CARD 216
|
||||
#define EFFECT_ACROBATICS 217
|
||||
#define EFFECT_HEAT_CRASH 218
|
||||
#define EFFECT_PUNISHMENT 219
|
||||
#define EFFECT_STORED_POWER 220
|
||||
#define EFFECT_ELECTRO_BALL 221
|
||||
#define EFFECT_GYRO_BALL 222
|
||||
#define EFFECT_ECHOED_VOICE 223
|
||||
#define EFFECT_PAYBACK 224
|
||||
#define EFFECT_ROUND 225
|
||||
#define EFFECT_BRINE 226
|
||||
#define EFFECT_VENOSHOCK 227
|
||||
#define EFFECT_RETALIATE 228
|
||||
#define EFFECT_BULLDOZE 229
|
||||
#define EFFECT_FOUL_PLAY 230
|
||||
#define EFFECT_PSYSHOCK 231
|
||||
#define EFFECT_ROOST 232
|
||||
#define EFFECT_GRAVITY 233
|
||||
#define EFFECT_MIRACLE_EYE 234
|
||||
#define EFFECT_TAILWIND 235
|
||||
#define EFFECT_EMBARGO 236
|
||||
#define EFFECT_AQUA_RING 237
|
||||
#define EFFECT_TRICK_ROOM 238
|
||||
#define EFFECT_WONDER_ROOM 239
|
||||
#define EFFECT_MAGIC_ROOM 240
|
||||
#define EFFECT_MAGNET_RISE 241
|
||||
#define EFFECT_TOXIC_SPIKES 242
|
||||
#define EFFECT_GASTRO_ACID 243
|
||||
#define EFFECT_STEALTH_ROCK 244
|
||||
#define EFFECT_TELEKINESIS 245
|
||||
#define EFFECT_POWER_SWAP 246
|
||||
#define EFFECT_GUARD_SWAP 247
|
||||
#define EFFECT_HEART_SWAP 248
|
||||
#define EFFECT_POWER_SPLIT 249
|
||||
#define EFFECT_GUARD_SPLIT 250
|
||||
#define EFFECT_STICKY_WEB 251
|
||||
#define EFFECT_METAL_BURST 252
|
||||
#define EFFECT_LUCKY_CHANT 253
|
||||
#define EFFECT_SUCKER_PUNCH 254
|
||||
#define EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2 255
|
||||
#define EFFECT_SIMPLE_BEAM 256
|
||||
#define EFFECT_ENTRAINMENT 257
|
||||
#define EFFECT_HEAL_PULSE 258
|
||||
#define EFFECT_QUASH 259
|
||||
#define EFFECT_ION_DELUGE 260
|
||||
#define EFFECT_FREEZE_DRY 261
|
||||
#define EFFECT_TOPSY_TURVY 262
|
||||
#define EFFECT_MISTY_TERRAIN 263
|
||||
#define EFFECT_GRASSY_TERRAIN 264
|
||||
#define EFFECT_ELECTRIC_TERRAIN 265
|
||||
#define EFFECT_PSYCHIC_TERRAIN 266
|
||||
#define EFFECT_ATTACK_ACCURACY_UP 267
|
||||
#define EFFECT_ATTACK_SPATK_UP 268
|
||||
#define EFFECT_HURRICANE 269
|
||||
#define EFFECT_TWO_TYPED_MOVE 270
|
||||
#define EFFECT_ME_FIRST 271
|
||||
#define EFFECT_SPEED_UP_HIT 272
|
||||
#define EFFECT_QUIVER_DANCE 273
|
||||
#define EFFECT_COIL 274
|
||||
#define EFFECT_ELECTRIFY 275
|
||||
#define EFFECT_REFLECT_TYPE 276
|
||||
#define EFFECT_SOAK 277
|
||||
#define EFFECT_GROWTH 278
|
||||
#define EFFECT_CLOSE_COMBAT 279
|
||||
#define EFFECT_LAST_RESORT 280
|
||||
#define EFFECT_RECOIL_33_STATUS 281
|
||||
#define EFFECT_FLINCH_STATUS 282
|
||||
#define EFFECT_RECOIL_50 283
|
||||
#define EFFECT_SHELL_SMASH 284
|
||||
#define EFFECT_SHIFT_GEAR 285
|
||||
#define EFFECT_DEFENSE_UP_3 286
|
||||
#define EFFECT_NOBLE_ROAR 287
|
||||
#define EFFECT_VENOM_DRENCH 288
|
||||
#define EFFECT_TOXIC_THREAD 289
|
||||
#define EFFECT_CLEAR_SMOG 290
|
||||
#define EFFECT_HIT_SWITCH_TARGET 291
|
||||
#define EFFECT_FINAL_GAMBIT 292
|
||||
#define EFFECT_CHANGE_TYPE_ON_ITEM 293
|
||||
#define EFFECT_AUTOTOMIZE 294
|
||||
#define EFFECT_COPYCAT 295
|
||||
#define EFFECT_DEFOG 296
|
||||
#define EFFECT_HIT_ENEMY_HEAL_ALLY 297
|
||||
#define EFFECT_SMACK_DOWN 298
|
||||
#define EFFECT_SYNCHRONOISE 299
|
||||
#define EFFECT_PSYCHO_SHIFT 300
|
||||
#define EFFECT_POWER_TRICK 301
|
||||
#define EFFECT_FLAME_BURST 302
|
||||
#define EFFECT_AFTER_YOU 303
|
||||
#define EFFECT_BESTOW 304
|
||||
#define EFFECT_ROTOTILLER 305
|
||||
#define EFFECT_FLOWER_SHIELD 306
|
||||
#define EFFECT_HIT_PREVENT_ESCAPE 307
|
||||
#define EFFECT_SPEED_SWAP 308
|
||||
#define EFFECT_DEFENSE_UP2_HIT 309
|
||||
#define EFFECT_REVELATION_DANCE 310
|
||||
#define EFFECT_AURORA_VEIL 311
|
||||
#define EFFECT_THIRD_TYPE 312
|
||||
#define EFFECT_FEINT 313
|
||||
#define EFFECT_SPARKLING_ARIA 314
|
||||
#define EFFECT_ACUPRESSURE 315
|
||||
#define EFFECT_AROMATIC_MIST 316
|
||||
#define EFFECT_POWDER 317
|
||||
#define EFFECT_SP_ATTACK_UP_HIT 318
|
||||
#define EFFECT_BELCH 319
|
||||
#define EFFECT_PARTING_SHOT 320
|
||||
#define EFFECT_SPECTRAL_THIEF 321
|
||||
#define EFFECT_V_CREATE 322
|
||||
#define EFFECT_MAT_BLOCK 323
|
||||
#define EFFECT_STOMPING_TANTRUM 324
|
||||
#define EFFECT_CORE_ENFORCER 325
|
||||
#define EFFECT_INSTRUCT 326
|
||||
#define EFFECT_THROAT_CHOP 327
|
||||
#define EFFECT_LASER_FOCUS 328
|
||||
#define EFFECT_MAGNETIC_FLUX 329
|
||||
#define EFFECT_GEAR_UP 330
|
||||
#define EFFECT_INCINERATE 331
|
||||
#define EFFECT_BUG_BITE 332
|
||||
#define EFFECT_STRENGTH_SAP 333
|
||||
#define EFFECT_MIND_BLOWN 334
|
||||
#define EFFECT_PURIFY 335
|
||||
#define EFFECT_BURN_UP 336
|
||||
#define EFFECT_SHORE_UP 337
|
||||
#define EFFECT_GEOMANCY 338
|
||||
#define EFFECT_FAIRY_LOCK 339
|
||||
#define EFFECT_ALLY_SWITCH 340
|
||||
#define EFFECT_RELIC_SONG 341
|
||||
#define EFFECT_ATTACKER_DEFENSE_DOWN_HIT 342
|
||||
#define EFFECT_BODY_PRESS 343
|
||||
#define EFFECT_EERIE_SPELL 344
|
||||
#define EFFECT_JUNGLE_HEALING 345
|
||||
#define EFFECT_COACHING 346
|
||||
#define EFFECT_LASH_OUT 347
|
||||
#define EFFECT_GRASSY_GLIDE 348
|
||||
#define EFFECT_DYNAMAX_DOUBLE_DMG 349
|
||||
#define EFFECT_DECORATE 350
|
||||
#define EFFECT_SNIPE_SHOT 351
|
||||
#define EFFECT_RECOIL_HP_25 352
|
||||
#define EFFECT_STUFF_CHEEKS 353
|
||||
#define EFFECT_GRAV_APPLE 354
|
||||
#define EFFECT_EVASION_UP_HIT 355
|
||||
#define EFFECT_GLITZY_GLOW 356
|
||||
#define EFFECT_BADDY_BAD 357
|
||||
#define EFFECT_SAPPY_SEED 358
|
||||
#define EFFECT_FREEZY_FROST 359
|
||||
#define EFFECT_SPARKLY_SWIRL 360
|
||||
#define EFFECT_PLASMA_FISTS 361
|
||||
#define EFFECT_HYPERSPACE_FURY 362
|
||||
#define EFFECT_AURA_WHEEL 363
|
||||
#define EFFECT_PHOTON_GEYSER 364
|
||||
#define EFFECT_SHELL_SIDE_ARM 365
|
||||
#define EFFECT_TERRAIN_PULSE 366
|
||||
#define EFFECT_JAW_LOCK 367
|
||||
#define EFFECT_NO_RETREAT 368
|
||||
#define EFFECT_TAR_SHOT 369
|
||||
#define EFFECT_POLTERGEIST 370
|
||||
#define EFFECT_OCTOLOCK 371
|
||||
#define EFFECT_CLANGOROUS_SOUL 372
|
||||
#define EFFECT_BOLT_BEAK 373
|
||||
#define EFFECT_SKY_DROP 374
|
||||
#define EFFECT_EXPANDING_FORCE 375
|
||||
#define EFFECT_METEOR_BEAM 376
|
||||
#define EFFECT_RISING_VOLTAGE 377
|
||||
#define EFFECT_BEAK_BLAST 378
|
||||
#define EFFECT_COURT_CHANGE 379
|
||||
#define EFFECT_STEEL_BEAM 380
|
||||
#define EFFECT_EXTREME_EVOBOOST 381
|
||||
#define EFFECT_HIT_SET_REMOVE_TERRAIN 382 // genesis supernova
|
||||
#define EFFECT_DARK_VOID 383
|
||||
#define EFFECT_SLEEP_HIT 384
|
||||
#define EFFECT_DOUBLE_SHOCK 385
|
||||
#define EFFECT_SPECIAL_ATTACK_UP_HIT 386
|
||||
#define EFFECT_VICTORY_DANCE 387
|
||||
#define EFFECT_TEATIME 388
|
||||
#define EFFECT_ATTACK_UP_USER_ALLY 389 // Howl 8th Gen
|
||||
#define EFFECT_SHELL_TRAP 390
|
||||
#define EFFECT_PSYBLADE 391
|
||||
#define EFFECT_HYDRO_STEAM 392
|
||||
#define EFFECT_HIT_SET_ENTRY_HAZARD 393
|
||||
#define EFFECT_DIRE_CLAW 394
|
||||
#define EFFECT_BARB_BARRAGE 395
|
||||
#define EFFECT_REVIVAL_BLESSING 396
|
||||
#define EFFECT_FROSTBITE_HIT 397
|
||||
#define EFFECT_SNOWSCAPE 398
|
||||
#define EFFECT_TRIPLE_ARROWS 399
|
||||
#define EFFECT_INFERNAL_PARADE 400
|
||||
#define EFFECT_TAKE_HEART 401
|
||||
#define EFFECT_AXE_KICK 402
|
||||
#define EFFECT_COLLISION_COURSE 403
|
||||
#define EFFECT_SPIN_OUT 404
|
||||
#define EFFECT_MAKE_IT_RAIN 405
|
||||
#define EFFECT_CORROSIVE_GAS 406
|
||||
#define EFFECT_POPULATION_BOMB 407
|
||||
#define EFFECT_MORTAL_SPIN 408
|
||||
#define EFFECT_SALT_CURE 409
|
||||
#define EFFECT_CHILLY_RECEPTION 410
|
||||
#define EFFECT_MATCHA_GOTCHA 411
|
||||
#define EFFECT_SYRUP_BOMB 412
|
||||
#define EFFECT_MAX_MOVE 413
|
||||
#define EFFECT_GLAIVE_RUSH 414
|
||||
#define EFFECT_RAGING_BULL 415
|
||||
#define EFFECT_RAGE_FIST 416
|
||||
#define EFFECT_PLEDGE 207
|
||||
#define EFFECT_FLING 208
|
||||
#define EFFECT_NATURAL_GIFT 209
|
||||
#define EFFECT_WAKE_UP_SLAP 210
|
||||
#define EFFECT_WRING_OUT 211
|
||||
#define EFFECT_HEX 212
|
||||
#define EFFECT_ASSURANCE 213
|
||||
#define EFFECT_TRUMP_CARD 214
|
||||
#define EFFECT_ACROBATICS 215
|
||||
#define EFFECT_HEAT_CRASH 216
|
||||
#define EFFECT_PUNISHMENT 217
|
||||
#define EFFECT_STORED_POWER 218
|
||||
#define EFFECT_ELECTRO_BALL 219
|
||||
#define EFFECT_GYRO_BALL 220
|
||||
#define EFFECT_ECHOED_VOICE 221
|
||||
#define EFFECT_PAYBACK 222
|
||||
#define EFFECT_ROUND 223
|
||||
#define EFFECT_BRINE 224
|
||||
#define EFFECT_VENOSHOCK 225
|
||||
#define EFFECT_RETALIATE 226
|
||||
#define EFFECT_BULLDOZE 227
|
||||
#define EFFECT_FOUL_PLAY 228
|
||||
#define EFFECT_PSYSHOCK 229
|
||||
#define EFFECT_ROOST 230
|
||||
#define EFFECT_GRAVITY 231
|
||||
#define EFFECT_MIRACLE_EYE 232
|
||||
#define EFFECT_TAILWIND 233
|
||||
#define EFFECT_EMBARGO 234
|
||||
#define EFFECT_AQUA_RING 235
|
||||
#define EFFECT_TRICK_ROOM 236
|
||||
#define EFFECT_WONDER_ROOM 237
|
||||
#define EFFECT_MAGIC_ROOM 238
|
||||
#define EFFECT_MAGNET_RISE 239
|
||||
#define EFFECT_TOXIC_SPIKES 240
|
||||
#define EFFECT_GASTRO_ACID 241
|
||||
#define EFFECT_STEALTH_ROCK 242
|
||||
#define EFFECT_TELEKINESIS 243
|
||||
#define EFFECT_POWER_SWAP 244
|
||||
#define EFFECT_GUARD_SWAP 245
|
||||
#define EFFECT_HEART_SWAP 246
|
||||
#define EFFECT_POWER_SPLIT 247
|
||||
#define EFFECT_GUARD_SPLIT 248
|
||||
#define EFFECT_STICKY_WEB 249
|
||||
#define EFFECT_METAL_BURST 250
|
||||
#define EFFECT_LUCKY_CHANT 251
|
||||
#define EFFECT_SUCKER_PUNCH 252
|
||||
#define EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2 253
|
||||
#define EFFECT_SIMPLE_BEAM 254
|
||||
#define EFFECT_ENTRAINMENT 255
|
||||
#define EFFECT_HEAL_PULSE 256
|
||||
#define EFFECT_QUASH 257
|
||||
#define EFFECT_ION_DELUGE 258
|
||||
#define EFFECT_FREEZE_DRY 259
|
||||
#define EFFECT_TOPSY_TURVY 260
|
||||
#define EFFECT_MISTY_TERRAIN 261
|
||||
#define EFFECT_GRASSY_TERRAIN 262
|
||||
#define EFFECT_ELECTRIC_TERRAIN 263
|
||||
#define EFFECT_PSYCHIC_TERRAIN 264
|
||||
#define EFFECT_ATTACK_ACCURACY_UP 265
|
||||
#define EFFECT_ATTACK_SPATK_UP 266
|
||||
#define EFFECT_HURRICANE 267
|
||||
#define EFFECT_TWO_TYPED_MOVE 268
|
||||
#define EFFECT_ME_FIRST 269
|
||||
#define EFFECT_SPEED_UP_HIT 270
|
||||
#define EFFECT_QUIVER_DANCE 271
|
||||
#define EFFECT_COIL 272
|
||||
#define EFFECT_ELECTRIFY 273
|
||||
#define EFFECT_REFLECT_TYPE 274
|
||||
#define EFFECT_SOAK 275
|
||||
#define EFFECT_GROWTH 276
|
||||
#define EFFECT_CLOSE_COMBAT 277
|
||||
#define EFFECT_LAST_RESORT 278
|
||||
#define EFFECT_FLINCH_STATUS 279
|
||||
#define EFFECT_SHELL_SMASH 280
|
||||
#define EFFECT_SHIFT_GEAR 281
|
||||
#define EFFECT_DEFENSE_UP_3 282
|
||||
#define EFFECT_NOBLE_ROAR 283
|
||||
#define EFFECT_VENOM_DRENCH 284
|
||||
#define EFFECT_TOXIC_THREAD 285
|
||||
#define EFFECT_CLEAR_SMOG 286
|
||||
#define EFFECT_HIT_SWITCH_TARGET 287
|
||||
#define EFFECT_FINAL_GAMBIT 288
|
||||
#define EFFECT_CHANGE_TYPE_ON_ITEM 289
|
||||
#define EFFECT_AUTOTOMIZE 290
|
||||
#define EFFECT_COPYCAT 291
|
||||
#define EFFECT_DEFOG 292
|
||||
#define EFFECT_HIT_ENEMY_HEAL_ALLY 293
|
||||
#define EFFECT_SMACK_DOWN 294
|
||||
#define EFFECT_SYNCHRONOISE 295
|
||||
#define EFFECT_PSYCHO_SHIFT 296
|
||||
#define EFFECT_POWER_TRICK 297
|
||||
#define EFFECT_FLAME_BURST 298
|
||||
#define EFFECT_AFTER_YOU 299
|
||||
#define EFFECT_BESTOW 300
|
||||
#define EFFECT_ROTOTILLER 301
|
||||
#define EFFECT_FLOWER_SHIELD 302
|
||||
#define EFFECT_HIT_PREVENT_ESCAPE 303
|
||||
#define EFFECT_SPEED_SWAP 304
|
||||
#define EFFECT_DEFENSE_UP2_HIT 305
|
||||
#define EFFECT_REVELATION_DANCE 306
|
||||
#define EFFECT_AURORA_VEIL 307
|
||||
#define EFFECT_THIRD_TYPE 308
|
||||
#define EFFECT_FEINT 309
|
||||
#define EFFECT_SPARKLING_ARIA 310
|
||||
#define EFFECT_ACUPRESSURE 311
|
||||
#define EFFECT_AROMATIC_MIST 312
|
||||
#define EFFECT_POWDER 313
|
||||
#define EFFECT_SP_ATTACK_UP_HIT 314
|
||||
#define EFFECT_BELCH 315
|
||||
#define EFFECT_PARTING_SHOT 316
|
||||
#define EFFECT_SPECTRAL_THIEF 317
|
||||
#define EFFECT_V_CREATE 318
|
||||
#define EFFECT_MAT_BLOCK 319
|
||||
#define EFFECT_STOMPING_TANTRUM 320
|
||||
#define EFFECT_CORE_ENFORCER 321
|
||||
#define EFFECT_INSTRUCT 322
|
||||
#define EFFECT_THROAT_CHOP 323
|
||||
#define EFFECT_LASER_FOCUS 324
|
||||
#define EFFECT_MAGNETIC_FLUX 325
|
||||
#define EFFECT_GEAR_UP 326
|
||||
#define EFFECT_INCINERATE 327
|
||||
#define EFFECT_BUG_BITE 328
|
||||
#define EFFECT_STRENGTH_SAP 329
|
||||
#define EFFECT_MIND_BLOWN 330
|
||||
#define EFFECT_PURIFY 331
|
||||
#define EFFECT_BURN_UP 332
|
||||
#define EFFECT_SHORE_UP 333
|
||||
#define EFFECT_GEOMANCY 334
|
||||
#define EFFECT_FAIRY_LOCK 335
|
||||
#define EFFECT_ALLY_SWITCH 336
|
||||
#define EFFECT_RELIC_SONG 337
|
||||
#define EFFECT_ATTACKER_DEFENSE_DOWN_HIT 338
|
||||
#define EFFECT_BODY_PRESS 339
|
||||
#define EFFECT_EERIE_SPELL 340
|
||||
#define EFFECT_JUNGLE_HEALING 341
|
||||
#define EFFECT_COACHING 342
|
||||
#define EFFECT_LASH_OUT 343
|
||||
#define EFFECT_GRASSY_GLIDE 344
|
||||
#define EFFECT_DYNAMAX_DOUBLE_DMG 345
|
||||
#define EFFECT_DECORATE 346
|
||||
#define EFFECT_SNIPE_SHOT 347
|
||||
#define EFFECT_RECOIL_HP_25 348
|
||||
#define EFFECT_STUFF_CHEEKS 349
|
||||
#define EFFECT_GRAV_APPLE 350
|
||||
#define EFFECT_EVASION_UP_HIT 351
|
||||
#define EFFECT_GLITZY_GLOW 352
|
||||
#define EFFECT_BADDY_BAD 353
|
||||
#define EFFECT_SAPPY_SEED 354
|
||||
#define EFFECT_FREEZY_FROST 355
|
||||
#define EFFECT_SPARKLY_SWIRL 356
|
||||
#define EFFECT_PLASMA_FISTS 357
|
||||
#define EFFECT_HYPERSPACE_FURY 358
|
||||
#define EFFECT_AURA_WHEEL 359
|
||||
#define EFFECT_PHOTON_GEYSER 360
|
||||
#define EFFECT_SHELL_SIDE_ARM 361
|
||||
#define EFFECT_TERRAIN_PULSE 362
|
||||
#define EFFECT_JAW_LOCK 363
|
||||
#define EFFECT_NO_RETREAT 364
|
||||
#define EFFECT_TAR_SHOT 365
|
||||
#define EFFECT_POLTERGEIST 366
|
||||
#define EFFECT_OCTOLOCK 367
|
||||
#define EFFECT_CLANGOROUS_SOUL 368
|
||||
#define EFFECT_BOLT_BEAK 369
|
||||
#define EFFECT_SKY_DROP 370
|
||||
#define EFFECT_EXPANDING_FORCE 371
|
||||
#define EFFECT_METEOR_BEAM 372
|
||||
#define EFFECT_RISING_VOLTAGE 373
|
||||
#define EFFECT_BEAK_BLAST 374
|
||||
#define EFFECT_COURT_CHANGE 375
|
||||
#define EFFECT_STEEL_BEAM 376
|
||||
#define EFFECT_EXTREME_EVOBOOST 377
|
||||
#define EFFECT_HIT_SET_REMOVE_TERRAIN 378
|
||||
#define EFFECT_DARK_VOID 379
|
||||
#define EFFECT_SLEEP_HIT 380
|
||||
#define EFFECT_DOUBLE_SHOCK 381
|
||||
#define EFFECT_SPECIAL_ATTACK_UP_HIT 382
|
||||
#define EFFECT_VICTORY_DANCE 383
|
||||
#define EFFECT_TEATIME 384
|
||||
#define EFFECT_ATTACK_UP_USER_ALLY 385
|
||||
#define EFFECT_SHELL_TRAP 386
|
||||
#define EFFECT_PSYBLADE 387
|
||||
#define EFFECT_HYDRO_STEAM 388
|
||||
#define EFFECT_HIT_SET_ENTRY_HAZARD 389
|
||||
#define EFFECT_DIRE_CLAW 390
|
||||
#define EFFECT_BARB_BARRAGE 391
|
||||
#define EFFECT_REVIVAL_BLESSING 392
|
||||
#define EFFECT_FROSTBITE_HIT 393
|
||||
#define EFFECT_SNOWSCAPE 394
|
||||
#define EFFECT_TRIPLE_ARROWS 395
|
||||
#define EFFECT_INFERNAL_PARADE 396
|
||||
#define EFFECT_TAKE_HEART 397
|
||||
#define EFFECT_AXE_KICK 398
|
||||
#define EFFECT_COLLISION_COURSE 399
|
||||
#define EFFECT_SPIN_OUT 400
|
||||
#define EFFECT_MAKE_IT_RAIN 401
|
||||
#define EFFECT_CORROSIVE_GAS 402
|
||||
#define EFFECT_POPULATION_BOMB 403
|
||||
#define EFFECT_MORTAL_SPIN 404
|
||||
#define EFFECT_SALT_CURE 405
|
||||
#define EFFECT_CHILLY_RECEPTION 406
|
||||
#define EFFECT_MATCHA_GOTCHA 407
|
||||
#define EFFECT_SYRUP_BOMB 408
|
||||
#define EFFECT_MAX_MOVE 409
|
||||
#define EFFECT_GLAIVE_RUSH 410
|
||||
#define EFFECT_RAGING_BULL 411
|
||||
#define EFFECT_RAGE_FIST 412
|
||||
|
||||
#define NUM_BATTLE_MOVE_EFFECTS 417
|
||||
#define NUM_BATTLE_MOVE_EFFECTS 413
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||
|
||||
@ -230,6 +230,9 @@
|
||||
#define SPLIT_SPECIAL 0x1
|
||||
#define SPLIT_STATUS 0x2
|
||||
|
||||
// Just for readability
|
||||
#define ALWAYS_CRIT 3
|
||||
|
||||
// Growth rates
|
||||
#define GROWTH_MEDIUM_FAST 0
|
||||
#define GROWTH_ERRATIC 1
|
||||
|
||||
@ -407,15 +407,22 @@ struct BattleMove
|
||||
{
|
||||
u16 effect;
|
||||
u8 power;
|
||||
u8 type;
|
||||
u8 accuracy;
|
||||
u8 pp;
|
||||
u8 type:5;
|
||||
u8 split:3;
|
||||
|
||||
u16 accuracy:7;
|
||||
u16 recoil:7;
|
||||
u16 critBoost:2;
|
||||
u8 secondaryEffectChance;
|
||||
u16 target;
|
||||
s8 priority;
|
||||
u8 split;
|
||||
u16 argument;
|
||||
u8 zMoveEffect;
|
||||
|
||||
u16 target;
|
||||
u8 pp;
|
||||
union {
|
||||
u8 effect;
|
||||
u8 powerOverride;
|
||||
} zMove;
|
||||
|
||||
// Flags
|
||||
u32 makesContact:1;
|
||||
u32 ignoresProtect:1;
|
||||
@ -423,7 +430,6 @@ struct BattleMove
|
||||
u32 snatchAffected:1;
|
||||
u32 mirrorMoveBanned:1;
|
||||
u32 ignoresKingsRock:1;
|
||||
u32 highCritRatio:1;
|
||||
u32 twoTurnMove:1;
|
||||
u32 punchingMove:1;
|
||||
u32 sheerForceBoost:1;
|
||||
@ -461,6 +467,8 @@ struct BattleMove
|
||||
u32 encoreBanned:1;
|
||||
u32 parentalBondBanned:1;
|
||||
u32 skyBattleBanned:1;
|
||||
|
||||
u16 argument;
|
||||
};
|
||||
|
||||
#define SPINDA_SPOT_WIDTH 16
|
||||
|
||||
@ -1854,29 +1854,10 @@ 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_25:
|
||||
case EFFECT_RECOIL:
|
||||
if (AI_IsDamagedByRecoil(battlerAtk))
|
||||
{
|
||||
u32 recoilDmg = max(1, aiData->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 4);
|
||||
if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex))
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EFFECT_RECOIL_33:
|
||||
case EFFECT_RECOIL_33_STATUS:
|
||||
if (AI_IsDamagedByRecoil(battlerAtk))
|
||||
{
|
||||
u32 recoilDmg = max(1, aiData->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 3);
|
||||
if (!ShouldUseRecoilMove(battlerAtk, battlerDef, recoilDmg, AI_THINKING_STRUCT->movesetIndex))
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EFFECT_RECOIL_50:
|
||||
if (AI_IsDamagedByRecoil(battlerAtk))
|
||||
{
|
||||
u32 recoilDmg = max(1, aiData->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] / 2);
|
||||
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;
|
||||
@ -2727,21 +2708,6 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
ADJUST_SCORE(1);
|
||||
}
|
||||
break;
|
||||
case EFFECT_ALWAYS_CRIT:
|
||||
// Ally decided to use Frost Breath on us. we must have Anger Point as our ability
|
||||
if (aiData->abilities[battlerAtk] == ABILITY_ANGER_POINT)
|
||||
{
|
||||
if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER) // Partner moving first
|
||||
{
|
||||
// discourage raising our attack since it's about to be maxed out
|
||||
if (IsAttackBoostMoveEffect(effect))
|
||||
ADJUST_SCORE(-3);
|
||||
// encourage moves hitting multiple opponents
|
||||
if (!IS_MOVE_STATUS(move) && (moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)))
|
||||
ADJUST_SCORE(3);
|
||||
}
|
||||
}
|
||||
break;
|
||||
// Don't change weather if ally already decided to do so.
|
||||
case EFFECT_SUNNY_DAY:
|
||||
case EFFECT_HAIL:
|
||||
@ -2754,6 +2720,20 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
}
|
||||
} // check partner move effect
|
||||
|
||||
// Adjust for always crit moves
|
||||
if (gBattleMoves[aiData->partnerMove].critBoost == ALWAYS_CRIT && aiData->abilities[battlerAtk] == ABILITY_ANGER_POINT)
|
||||
{
|
||||
if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER) // Partner moving first
|
||||
{
|
||||
// discourage raising our attack since it's about to be maxed out
|
||||
if (IsAttackBoostMoveEffect(effect))
|
||||
ADJUST_SCORE(-3);
|
||||
// encourage moves hitting multiple opponents
|
||||
if (!IS_MOVE_STATUS(move) && (moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)))
|
||||
ADJUST_SCORE(3);
|
||||
}
|
||||
}
|
||||
|
||||
// consider our move effect relative to partner state
|
||||
switch (effect)
|
||||
{
|
||||
@ -4996,7 +4976,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
if (IS_TARGETING_PARTNER(battlerAtk, battlerDef))
|
||||
return score;
|
||||
|
||||
if (gBattleMoves[move].highCritRatio)
|
||||
if (gBattleMoves[move].critBoost > 0)
|
||||
ADJUST_SCORE(2);
|
||||
|
||||
switch (gBattleMoves[move].effect)
|
||||
|
||||
@ -775,7 +775,9 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes
|
||||
dmg = 20 * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
|
||||
break;
|
||||
case EFFECT_MULTI_HIT:
|
||||
dmg *= (aiData->abilities[battlerAtk] == ABILITY_SKILL_LINK ? 5 : 3);
|
||||
dmg *= (aiData->abilities[battlerAtk] == ABILITY_SKILL_LINK
|
||||
&& !(move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)
|
||||
? 5 : 3);
|
||||
break;
|
||||
case EFFECT_ENDEAVOR:
|
||||
// If target has less HP than user, Endeavor does no damage
|
||||
@ -807,8 +809,6 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes
|
||||
// Handle other multi-strike moves
|
||||
if (gBattleMoves[move].strikeCount > 1 && gBattleMoves[move].effect != EFFECT_TRIPLE_KICK)
|
||||
dmg *= gBattleMoves[move].strikeCount;
|
||||
else if (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)
|
||||
dmg *= 3;
|
||||
|
||||
if (dmg == 0)
|
||||
dmg = 1;
|
||||
@ -969,11 +969,8 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s
|
||||
case EFFECT_MIND_BLOWN:
|
||||
case EFFECT_STEEL_BEAM:
|
||||
return TRUE;
|
||||
case EFFECT_RECOIL_25:
|
||||
case EFFECT_RECOIL_IF_MISS:
|
||||
case EFFECT_RECOIL_50:
|
||||
case EFFECT_RECOIL_33:
|
||||
case EFFECT_RECOIL_33_STATUS:
|
||||
case EFFECT_RECOIL:
|
||||
if (AI_IsDamagedByRecoil(battlerAtk))
|
||||
return TRUE;
|
||||
break;
|
||||
@ -2234,7 +2231,17 @@ bool32 HasSoundMove(u32 battler)
|
||||
|
||||
bool32 HasHighCritRatioMove(u32 battler)
|
||||
{
|
||||
CHECK_MOVE_FLAG(highCritRatio);
|
||||
s32 i;
|
||||
u16 *moves = GetMovesArray(battler);
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && gBattleMoves[moves[i]].critBoost > 0
|
||||
&& gBattleMoves[moves[i]].critBoost < ALWAYS_CRIT) // don't count always crit moves
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 HasMagicCoatAffectedMove(u32 battler)
|
||||
|
||||
@ -1892,20 +1892,20 @@ s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec
|
||||
s32 critChance = 0;
|
||||
|
||||
if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT || gStatuses3[battlerAtk] & STATUS3_CANT_SCORE_A_CRIT
|
||||
|| abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR)
|
||||
|| abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR)
|
||||
{
|
||||
critChance = -1;
|
||||
}
|
||||
else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS
|
||||
|| gBattleMoves[move].effect == EFFECT_ALWAYS_CRIT
|
||||
|| (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY))
|
||||
|| gBattleMoves[gCurrentMove].critBoost == ALWAYS_CRIT
|
||||
|| (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY))
|
||||
{
|
||||
critChance = -2;
|
||||
}
|
||||
else
|
||||
{
|
||||
critChance = 2 * ((gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY) != 0)
|
||||
+ (gBattleMoves[gCurrentMove].highCritRatio)
|
||||
+ gBattleMoves[gCurrentMove].critBoost
|
||||
+ (holdEffectAtk == HOLD_EFFECT_SCOPE_LENS)
|
||||
+ 2 * (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[battlerAtk].species == SPECIES_CHANSEY)
|
||||
+ 2 * BENEFITS_FROM_LEEK(battlerAtk, holdEffectAtk)
|
||||
@ -5349,28 +5349,13 @@ static void Cmd_moveend(void)
|
||||
{
|
||||
switch (gBattleMoves[gCurrentMove].effect)
|
||||
{
|
||||
case EFFECT_RECOIL_25: // Take Down, 25% recoil
|
||||
gBattleMoveDamage = max(1, gBattleScripting.savedDmg / 4);
|
||||
case EFFECT_RECOIL:
|
||||
gBattleMoveDamage = max(1, gBattleScripting.savedDmg * max(1, gBattleMoves[gCurrentMove].recoil) / 100);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil;
|
||||
effect = TRUE;
|
||||
break;
|
||||
case EFFECT_RECOIL_33: // Double Edge, 33 % recoil
|
||||
gBattleMoveDamage = max(1, gBattleScripting.savedDmg / 3);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil;
|
||||
effect = TRUE;
|
||||
break;
|
||||
case EFFECT_RECOIL_50: // Head Smash, 50 % recoil
|
||||
gBattleMoveDamage = max(1, gBattleScripting.savedDmg / 2);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil;
|
||||
effect = TRUE;
|
||||
break;
|
||||
case EFFECT_RECOIL_33_STATUS: // Flare Blitz - can burn, Volt Tackle - can paralyze
|
||||
gBattleMoveDamage = max(1, gBattleScripting.savedDmg / 3);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoilWithStatus;
|
||||
if (gBattleMoves[gCurrentMove].argument) // Flare Blitz - can burn, Volt Tackle - can paralyze
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoilWithStatus;
|
||||
else
|
||||
gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil;
|
||||
effect = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -134,7 +134,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_RECOIL_IF_MISS] = 1,
|
||||
[EFFECT_MIST] = 5,
|
||||
[EFFECT_FOCUS_ENERGY] = 1,
|
||||
[EFFECT_RECOIL_25] = 2,
|
||||
[EFFECT_RECOIL] = 2,
|
||||
[EFFECT_CONFUSE] = 4,
|
||||
[EFFECT_ATTACK_UP_2] = 1,
|
||||
[EFFECT_DEFENSE_UP_2] = 1,
|
||||
@ -280,7 +280,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_SNATCH] = 1,
|
||||
[EFFECT_LOW_KICK] = 1,
|
||||
[EFFECT_SECRET_POWER] = 1,
|
||||
[EFFECT_RECOIL_33] = 2,
|
||||
[EFFECT_TEETER_DANCE] = 6,
|
||||
// [EFFECT_BLAZE_KICK] = 1,
|
||||
[EFFECT_MUD_SPORT] = 4,
|
||||
@ -368,9 +367,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
[EFFECT_GROWTH] = 0, // TODO: Assign points
|
||||
[EFFECT_CLOSE_COMBAT] = 0, // TODO: Assign points
|
||||
[EFFECT_LAST_RESORT] = 0, // TODO: Assign points
|
||||
[EFFECT_RECOIL_33_STATUS] = 0, // TODO: Assign points
|
||||
[EFFECT_FLINCH_STATUS] = 0, // TODO: Assign points
|
||||
[EFFECT_RECOIL_50] = 0, // TODO: Assign points
|
||||
[EFFECT_SHELL_SMASH] = 0, // TODO: Assign points
|
||||
[EFFECT_SHIFT_GEAR] = 0, // TODO: Assign points
|
||||
[EFFECT_DEFENSE_UP_3] = 0, // TODO: Assign points
|
||||
|
||||
@ -3777,7 +3777,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
|
||||
gBattleScripting.battler = gBattlerAttacker;
|
||||
if (gBattleStruct->zmove.activeSplit == SPLIT_STATUS)
|
||||
{
|
||||
gBattleStruct->zmove.effect = gBattleMoves[gBattleStruct->zmove.baseMoves[gBattlerAttacker]].zMoveEffect;
|
||||
gBattleStruct->zmove.effect = gBattleMoves[gBattleStruct->zmove.baseMoves[gBattlerAttacker]].zMove.effect;
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_ZMoveActivateStatus;
|
||||
}
|
||||
|
||||
@ -406,7 +406,7 @@ bool32 MoveSelectionDisplayZMove(u16 zmove, u32 battler)
|
||||
|
||||
if (IS_MOVE_STATUS(move))
|
||||
{
|
||||
u8 zEffect = gBattleMoves[move].zMoveEffect;
|
||||
u8 zEffect = gBattleMoves[move].zMove.effect;
|
||||
|
||||
gDisplayedStringBattle[0] = EOS;
|
||||
|
||||
@ -692,38 +692,30 @@ u16 GetZMovePower(u16 move)
|
||||
if (gBattleMoves[move].effect == EFFECT_OHKO)
|
||||
return 180;
|
||||
|
||||
switch (move)
|
||||
if (gBattleMoves[move].zMove.powerOverride > 0)
|
||||
return gBattleMoves[move].zMove.powerOverride;
|
||||
else
|
||||
{
|
||||
case MOVE_MEGA_DRAIN: return 120;
|
||||
case MOVE_CORE_ENFORCER: return 140;
|
||||
case MOVE_WEATHER_BALL: return 160;
|
||||
case MOVE_HEX: return 160;
|
||||
case MOVE_FLYING_PRESS: return 170;
|
||||
case MOVE_GEAR_GRIND: return 180;
|
||||
case MOVE_V_CREATE: return 220;
|
||||
default:
|
||||
{
|
||||
if (gBattleMoves[move].power >= 140)
|
||||
return 200;
|
||||
else if (gBattleMoves[move].power >= 130)
|
||||
return 195;
|
||||
else if (gBattleMoves[move].power >= 120)
|
||||
return 190;
|
||||
else if (gBattleMoves[move].power >= 110)
|
||||
return 185;
|
||||
else if (gBattleMoves[move].power >= 100)
|
||||
return 180;
|
||||
else if (gBattleMoves[move].power >= 90)
|
||||
return 175;
|
||||
else if (gBattleMoves[move].power >= 80)
|
||||
return 160;
|
||||
else if (gBattleMoves[move].power >= 70)
|
||||
return 140;
|
||||
else if (gBattleMoves[move].power >= 60)
|
||||
return 120;
|
||||
else
|
||||
return 100;
|
||||
}
|
||||
if (gBattleMoves[move].power >= 140)
|
||||
return 200;
|
||||
else if (gBattleMoves[move].power >= 130)
|
||||
return 195;
|
||||
else if (gBattleMoves[move].power >= 120)
|
||||
return 190;
|
||||
else if (gBattleMoves[move].power >= 110)
|
||||
return 185;
|
||||
else if (gBattleMoves[move].power >= 100)
|
||||
return 180;
|
||||
else if (gBattleMoves[move].power >= 90)
|
||||
return 175;
|
||||
else if (gBattleMoves[move].power >= 80)
|
||||
return 160;
|
||||
else if (gBattleMoves[move].power >= 70)
|
||||
return 140;
|
||||
else if (gBattleMoves[move].power >= 60)
|
||||
return 120;
|
||||
else
|
||||
return 100;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -110,7 +110,7 @@ static const u16 sWeatherChangingMoves[] = {
|
||||
MOVE_SUNNY_DAY,
|
||||
};
|
||||
|
||||
// EFFECT_RECHARGE, EFFECT_RECOIL_33
|
||||
// EFFECT_RECHARGE, EFFECT_RECOIL
|
||||
static const u16 sPowerfulNormalMoves[] = {
|
||||
MOVE_HYPER_BEAM,
|
||||
MOVE_GIGA_IMPACT,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -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_33_STATUS)
|
||||
if (gBattleMoves[move].effect == EFFECT_RECOIL)
|
||||
{
|
||||
HP_BAR(player);
|
||||
MESSAGE("Tauros is hit with recoil!");
|
||||
|
||||
@ -148,11 +148,11 @@ SINGLE_BATTLE_TEST("Focus Energy increases the user's critical hit ratio by two
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Flag highCritRatio increases the critical hit ratio by one stage")
|
||||
SINGLE_BATTLE_TEST("High crit rate increases the critical hit ratio by one stage")
|
||||
{
|
||||
PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT);
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_SLASH].highCritRatio == TRUE);
|
||||
ASSUME(gBattleMoves[MOVE_SLASH].critBoost == 1);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -192,10 +192,10 @@ SINGLE_BATTLE_TEST("Scope Lens increases the critical hit ratio by one stage")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Flag highCritRatio, Super Luck and Scope Lens cause the move to result in a critical hit")
|
||||
SINGLE_BATTLE_TEST("High crit rate, Super Luck and Scope Lens cause the move to result in a critical hit")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_SLASH].highCritRatio == TRUE);
|
||||
ASSUME(gBattleMoves[MOVE_SLASH].critBoost == 1);
|
||||
ASSUME(gItems[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SUPER_LUCK); Item(ITEM_SCOPE_LENS); };
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two s
|
||||
{
|
||||
PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT);
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_TACKLE].highCritRatio == FALSE);
|
||||
ASSUME(gBattleMoves[MOVE_TACKLE].critBoost == 0);
|
||||
ASSUME(B_CRIT_CHANCE >= GEN_6);
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_LANSAT_BERRY); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -99,7 +99,7 @@ SINGLE_BATTLE_TEST("Critical hits occur at a 1/24 rate")
|
||||
SINGLE_BATTLE_TEST("Slash's critical hits occur at a 1/8 rate")
|
||||
{
|
||||
ASSUME(B_CRIT_CHANCE >= GEN_7);
|
||||
ASSUME(gBattleMoves[MOVE_SLASH].highCritRatio);
|
||||
ASSUME(gBattleMoves[MOVE_SLASH].critBoost == 1);
|
||||
PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT);
|
||||
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_33_STATUS);
|
||||
ASSUME(gBattleMoves[MOVE_HEAD_SMASH].effect == EFFECT_RECOIL_50);
|
||||
ASSUME(gBattleMoves[MOVE_TAKE_DOWN].effect == EFFECT_RECOIL_25);
|
||||
ASSUME(gBattleMoves[MOVE_DOUBLE_EDGE].effect == EFFECT_RECOIL_33);
|
||||
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);
|
||||
PLAYER(SPECIES_RAPIDASH);
|
||||
OPPONENT(SPECIES_BEAUTIFLY);
|
||||
} WHEN {
|
||||
|
||||
89
test/battle/move_effect/recoil.c
Normal file
89
test/battle/move_effect/recoil.c
Normal file
@ -0,0 +1,89 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Take Down deals 25% of recoil damage to the user")
|
||||
{
|
||||
s16 directDamage;
|
||||
s16 recoilDamage;
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_TAKE_DOWN].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_TAKE_DOWN].recoil == 25);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_TAKE_DOWN); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_TAKE_DOWN, player);
|
||||
HP_BAR(opponent, captureDamage: &directDamage);
|
||||
HP_BAR(player, captureDamage: &recoilDamage);
|
||||
} THEN {
|
||||
EXPECT_MUL_EQ(directDamage, UQ_4_12(0.25), recoilDamage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Double Edge deals 33% of recoil damage to the user")
|
||||
{
|
||||
s16 directDamage;
|
||||
s16 recoilDamage;
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_DOUBLE_EDGE].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_DOUBLE_EDGE].recoil == 33);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DOUBLE_EDGE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_EDGE, player);
|
||||
HP_BAR(opponent, captureDamage: &directDamage);
|
||||
HP_BAR(player, captureDamage: &recoilDamage);
|
||||
} THEN {
|
||||
EXPECT_MUL_EQ(directDamage, UQ_4_12(0.33), recoilDamage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Head Smash deals 50% of recoil damage to the user")
|
||||
{
|
||||
s16 directDamage;
|
||||
s16 recoilDamage;
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_HEAD_SMASH].effect == EFFECT_RECOIL);
|
||||
ASSUME(gBattleMoves[MOVE_HEAD_SMASH].recoil == 50);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_HEAD_SMASH); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAD_SMASH, player);
|
||||
HP_BAR(opponent, captureDamage: &directDamage);
|
||||
HP_BAR(player, captureDamage: &recoilDamage);
|
||||
} THEN {
|
||||
EXPECT_MUL_EQ(directDamage, UQ_4_12(0.50), recoilDamage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Flare Blitz deals 33% of recoil damage to the user and can burn target")
|
||||
{
|
||||
s16 directDamage;
|
||||
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);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_FLARE_BLITZ); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_FLARE_BLITZ, player);
|
||||
HP_BAR(opponent, captureDamage: &directDamage);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent);
|
||||
STATUS_ICON(opponent, burn: TRUE);
|
||||
HP_BAR(player, captureDamage: &recoilDamage);
|
||||
} THEN {
|
||||
EXPECT_MUL_EQ(directDamage, UQ_4_12(0.33), recoilDamage);
|
||||
}
|
||||
}
|
||||
@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Triple Arrows makes the foe flinch 30% of the time")
|
||||
SINGLE_BATTLE_TEST("Triple Arrows lands a critical hit")
|
||||
{
|
||||
ASSUME(B_CRIT_CHANCE >= GEN_7);
|
||||
ASSUME(gBattleMoves[MOVE_TRIPLE_ARROWS].highCritRatio == TRUE);
|
||||
ASSUME(gBattleMoves[MOVE_TRIPLE_ARROWS].critBoost == 1);
|
||||
PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT);
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -50,6 +50,7 @@ SINGLE_BATTLE_TEST("Surging Strikes hits 3 times with each hit being a critical
|
||||
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_SURGING_STRIKES].strikeCount == 3);
|
||||
ASSUME(gBattleMoves[MOVE_SURGING_STRIKES].critBoost == ALWAYS_CRIT);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user