Merge branch 'RHH/master' into RHH/upcoming

# Conflicts:
#	include/constants/battle_move_effects.h
#	test/battle/move_effect/multi_hit.c
This commit is contained in:
Eduardo Quezada 2023-09-10 18:38:46 -03:00
commit 755e260da4
9 changed files with 525 additions and 373 deletions

View File

@ -145,7 +145,6 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectPresent @ EFFECT_PRESENT
.4byte BattleScript_EffectHit @ EFFECT_FRUSTRATION
.4byte BattleScript_EffectSafeguard @ EFFECT_SAFEGUARD
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_125
.4byte BattleScript_EffectMagnitude @ EFFECT_MAGNITUDE
.4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS
.4byte BattleScript_EffectHit @ EFFECT_PURSUIT
@ -404,7 +403,6 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectHit @ EFFECT_BOLT_BEAK
.4byte BattleScript_EffectSkyDrop @ EFFECT_SKY_DROP
.4byte BattleScript_EffectHit @ EFFECT_EXPANDING_FORCE
.4byte BattleScript_EffectScaleShot @ EFFECT_SCALE_SHOT
.4byte BattleScript_EffectMeteorBeam @ EFFECT_METEOR_BEAM
.4byte BattleScript_EffectHit @ EFFECT_RISING_VOLTAGE
.4byte BattleScript_EffectHit @ EFFECT_BEAK_BLAST
@ -805,60 +803,6 @@ BattleScript_FirstChargingTurnMeteorBeam::
seteffectsecondary
return
BattleScript_EffectScaleShot::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
setmultihitcounter 0x0
initmultihitstring
sethword sMULTIHIT_EFFECT, 0x0
BattleScript_ScaleShotLoop::
jumpifhasnohp BS_ATTACKER, BattleScript_ScaleShotEnd
jumpifhasnohp BS_TARGET, BattleScript_ScaleShotPrintStrings
jumpifhalfword CMP_EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_ScaleShotDoMultiHit
jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_ScaleShotPrintStrings
BattleScript_ScaleShotDoMultiHit::
movevaluescleanup
copyhword sMOVE_EFFECT, sMULTIHIT_EFFECT
critcalc
damagecalc
jumpifmovehadnoeffect BattleScript_ScaleShotMultiHitNoMoreHits
adjustdamage
attackanimation
waitanimation
effectivenesssound
hitanimation BS_TARGET
waitstate
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
critmessage
waitmessage B_WAIT_TIME_LONG
multihitresultmessage
printstring STRINGID_EMPTYSTRING3
waitmessage 1
addbyte sMULTIHIT_STRING + 4, 0x1
moveendto MOVEEND_NEXT_TARGET
jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_FOE_ENDURED, BattleScript_ScaleShotPrintStrings
decrementmultihit BattleScript_ScaleShotLoop
goto BattleScript_ScaleShotPrintStrings
BattleScript_ScaleShotMultiHitNoMoreHits::
pause B_WAIT_TIME_SHORT
BattleScript_ScaleShotPrintStrings::
resultmessage
waitmessage B_WAIT_TIME_LONG
jumpifmovehadnoeffect BattleScript_ScaleShotEnd
copyarray gBattleTextBuff1, sMULTIHIT_STRING, 0x6
printstring STRINGID_HITXTIMES
waitmessage B_WAIT_TIME_LONG
BattleScript_ScaleShotEnd::
setmoveeffect MOVE_EFFECT_SCALE_SHOT | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
seteffectwithchance
tryfaintmon BS_TARGET
moveendcase MOVEEND_SYNCHRONIZE_TARGET
moveendfrom MOVEEND_STATUS_IMMUNITY_ABILITIES
end
BattleScript_EffectSkyDrop:
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2
attackcanceler
@ -963,7 +907,7 @@ BattleScript_FlingEnd:
tryfaintmon BS_TARGET
trysymbiosis
goto BattleScript_MoveEnd
BattleScript_FlingFailConsumeItem::
removeitem BS_ATTACKER
goto BattleScript_FailedFromAtkString

View File

@ -124,298 +124,296 @@
#define EFFECT_PRESENT 120
#define EFFECT_FRUSTRATION 121
#define EFFECT_SAFEGUARD 122
#define EFFECT_UNUSED_125 123
#define EFFECT_MAGNITUDE 124
#define EFFECT_BATON_PASS 125
#define EFFECT_PURSUIT 126
#define EFFECT_RAPID_SPIN 127
#define EFFECT_SONICBOOM 128
#define EFFECT_CAPTIVATE 129
#define EFFECT_MORNING_SUN 130
#define EFFECT_SYNTHESIS 131
#define EFFECT_MOONLIGHT 132
#define EFFECT_HIDDEN_POWER 133
#define EFFECT_RAIN_DANCE 134
#define EFFECT_SUNNY_DAY 135
#define EFFECT_DEFENSE_UP_HIT 136
#define EFFECT_ATTACK_UP_HIT 137
#define EFFECT_ALL_STATS_UP_HIT 138
#define EFFECT_FELL_STINGER 139
#define EFFECT_BELLY_DRUM 140
#define EFFECT_PSYCH_UP 141
#define EFFECT_MIRROR_COAT 142
#define EFFECT_SKULL_BASH 143
#define EFFECT_EARTHQUAKE 144
#define EFFECT_FUTURE_SIGHT 145
#define EFFECT_GUST 146
#define EFFECT_SOLAR_BEAM 147
#define EFFECT_THUNDER 148
#define EFFECT_TELEPORT 149
#define EFFECT_BEAT_UP 150
#define EFFECT_SEMI_INVULNERABLE 151
#define EFFECT_DEFENSE_CURL 152
#define EFFECT_SOFTBOILED 153
#define EFFECT_FAKE_OUT 154
#define EFFECT_UPROAR 155
#define EFFECT_STOCKPILE 156
#define EFFECT_SPIT_UP 157
#define EFFECT_SWALLOW 158
#define EFFECT_WORRY_SEED 159
#define EFFECT_HAIL 160
#define EFFECT_TORMENT 161
#define EFFECT_FLATTER 162
#define EFFECT_WILL_O_WISP 163
#define EFFECT_MEMENTO 164
#define EFFECT_FACADE 165
#define EFFECT_FOCUS_PUNCH 166
#define EFFECT_SMELLINGSALT 167
#define EFFECT_FOLLOW_ME 168
#define EFFECT_NATURE_POWER 169
#define EFFECT_CHARGE 170
#define EFFECT_TAUNT 171
#define EFFECT_HELPING_HAND 172
#define EFFECT_TRICK 173
#define EFFECT_ROLE_PLAY 174
#define EFFECT_WISH 175
#define EFFECT_ASSIST 176
#define EFFECT_INGRAIN 177
#define EFFECT_SUPERPOWER 178
#define EFFECT_MAGIC_COAT 179
#define EFFECT_RECYCLE 180
#define EFFECT_REVENGE 181
#define EFFECT_BRICK_BREAK 182
#define EFFECT_YAWN 183
#define EFFECT_KNOCK_OFF 184
#define EFFECT_ENDEAVOR 185
#define EFFECT_ERUPTION 186
#define EFFECT_SKILL_SWAP 187
#define EFFECT_IMPRISON 188
#define EFFECT_REFRESH 189
#define EFFECT_GRUDGE 190
#define EFFECT_SNATCH 191
#define EFFECT_LOW_KICK 192
#define EFFECT_SECRET_POWER 193
#define EFFECT_RECOIL_33 194
#define EFFECT_TEETER_DANCE 195
#define EFFECT_HIT_ESCAPE 196
#define EFFECT_MUD_SPORT 197
#define EFFECT_POISON_FANG 198
#define EFFECT_WEATHER_BALL 199
#define EFFECT_OVERHEAT 200
#define EFFECT_TICKLE 201
#define EFFECT_COSMIC_POWER 202
#define EFFECT_SKY_UPPERCUT 203
#define EFFECT_BULK_UP 204
#define EFFECT_PLACEHOLDER 205
#define EFFECT_WATER_SPORT 206
#define EFFECT_CALM_MIND 207
#define EFFECT_DRAGON_DANCE 208
#define EFFECT_CAMOUFLAGE 209
#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_SMELLINGSALT 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
// New move effects
#define EFFECT_PLEDGE 210
#define EFFECT_FLING 211
#define EFFECT_NATURAL_GIFT 212
#define EFFECT_WAKE_UP_SLAP 213
#define EFFECT_WRING_OUT 214
#define EFFECT_HEX 215
#define EFFECT_ASSURANCE 216
#define EFFECT_TRUMP_CARD 217
#define EFFECT_ACROBATICS 218
#define EFFECT_HEAT_CRASH 219
#define EFFECT_PUNISHMENT 220
#define EFFECT_STORED_POWER 221
#define EFFECT_ELECTRO_BALL 222
#define EFFECT_GYRO_BALL 223
#define EFFECT_ECHOED_VOICE 224
#define EFFECT_PAYBACK 225
#define EFFECT_ROUND 226
#define EFFECT_BRINE 227
#define EFFECT_VENOSHOCK 228
#define EFFECT_RETALIATE 229
#define EFFECT_BULLDOZE 230
#define EFFECT_FOUL_PLAY 231
#define EFFECT_PSYSHOCK 232
#define EFFECT_ROOST 233
#define EFFECT_GRAVITY 234
#define EFFECT_MIRACLE_EYE 235
#define EFFECT_TAILWIND 236
#define EFFECT_EMBARGO 237
#define EFFECT_AQUA_RING 238
#define EFFECT_TRICK_ROOM 239
#define EFFECT_WONDER_ROOM 240
#define EFFECT_MAGIC_ROOM 241
#define EFFECT_MAGNET_RISE 242
#define EFFECT_TOXIC_SPIKES 243
#define EFFECT_GASTRO_ACID 244
#define EFFECT_STEALTH_ROCK 245
#define EFFECT_TELEKINESIS 246
#define EFFECT_POWER_SWAP 247
#define EFFECT_GUARD_SWAP 248
#define EFFECT_HEART_SWAP 249
#define EFFECT_POWER_SPLIT 250
#define EFFECT_GUARD_SPLIT 251
#define EFFECT_STICKY_WEB 252
#define EFFECT_METAL_BURST 253
#define EFFECT_LUCKY_CHANT 254
#define EFFECT_SUCKER_PUNCH 255
#define EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2 256
#define EFFECT_SIMPLE_BEAM 257
#define EFFECT_ENTRAINMENT 258
#define EFFECT_HEAL_PULSE 259
#define EFFECT_QUASH 260
#define EFFECT_ION_DELUGE 261
#define EFFECT_FREEZE_DRY 262
#define EFFECT_TOPSY_TURVY 263
#define EFFECT_MISTY_TERRAIN 264
#define EFFECT_GRASSY_TERRAIN 265
#define EFFECT_ELECTRIC_TERRAIN 266
#define EFFECT_PSYCHIC_TERRAIN 267
#define EFFECT_ATTACK_ACCURACY_UP 268
#define EFFECT_ATTACK_SPATK_UP 269
#define EFFECT_HURRICANE 270
#define EFFECT_TWO_TYPED_MOVE 271
#define EFFECT_ME_FIRST 272
#define EFFECT_SPEED_UP_HIT 273
#define EFFECT_QUIVER_DANCE 274
#define EFFECT_COIL 275
#define EFFECT_ELECTRIFY 276
#define EFFECT_REFLECT_TYPE 277
#define EFFECT_SOAK 278
#define EFFECT_GROWTH 279
#define EFFECT_CLOSE_COMBAT 280
#define EFFECT_LAST_RESORT 281
#define EFFECT_RECOIL_33_STATUS 282
#define EFFECT_FLINCH_STATUS 283
#define EFFECT_RECOIL_50 284
#define EFFECT_SHELL_SMASH 285
#define EFFECT_SHIFT_GEAR 286
#define EFFECT_DEFENSE_UP_3 287
#define EFFECT_NOBLE_ROAR 288
#define EFFECT_VENOM_DRENCH 289
#define EFFECT_TOXIC_THREAD 290
#define EFFECT_CLEAR_SMOG 291
#define EFFECT_HIT_SWITCH_TARGET 292
#define EFFECT_FINAL_GAMBIT 293
#define EFFECT_CHANGE_TYPE_ON_ITEM 294
#define EFFECT_AUTOTOMIZE 295
#define EFFECT_COPYCAT 296
#define EFFECT_DEFOG 297
#define EFFECT_HIT_ENEMY_HEAL_ALLY 298
#define EFFECT_SMACK_DOWN 299
#define EFFECT_SYNCHRONOISE 300
#define EFFECT_PSYCHO_SHIFT 301
#define EFFECT_POWER_TRICK 302
#define EFFECT_FLAME_BURST 303
#define EFFECT_AFTER_YOU 304
#define EFFECT_BESTOW 305
#define EFFECT_ROTOTILLER 306
#define EFFECT_FLOWER_SHIELD 307
#define EFFECT_HIT_PREVENT_ESCAPE 308
#define EFFECT_SPEED_SWAP 309
#define EFFECT_DEFENSE_UP2_HIT 310
#define EFFECT_REVELATION_DANCE 311
#define EFFECT_AURORA_VEIL 312
#define EFFECT_THIRD_TYPE 313
#define EFFECT_FEINT 314
#define EFFECT_SPARKLING_ARIA 315
#define EFFECT_ACUPRESSURE 316
#define EFFECT_AROMATIC_MIST 317
#define EFFECT_POWDER 318
#define EFFECT_SP_ATTACK_UP_HIT 319
#define EFFECT_BELCH 320
#define EFFECT_PARTING_SHOT 321
#define EFFECT_SPECTRAL_THIEF 322
#define EFFECT_V_CREATE 323
#define EFFECT_MAT_BLOCK 324
#define EFFECT_STOMPING_TANTRUM 325
#define EFFECT_CORE_ENFORCER 326
#define EFFECT_INSTRUCT 327
#define EFFECT_THROAT_CHOP 328
#define EFFECT_LASER_FOCUS 329
#define EFFECT_MAGNETIC_FLUX 330
#define EFFECT_GEAR_UP 331
#define EFFECT_INCINERATE 332
#define EFFECT_BUG_BITE 333
#define EFFECT_STRENGTH_SAP 334
#define EFFECT_MIND_BLOWN 335
#define EFFECT_PURIFY 336
#define EFFECT_BURN_UP 337
#define EFFECT_SHORE_UP 338
#define EFFECT_GEOMANCY 339
#define EFFECT_FAIRY_LOCK 340
#define EFFECT_ALLY_SWITCH 341
#define EFFECT_RELIC_SONG 342
#define EFFECT_ATTACKER_DEFENSE_DOWN_HIT 343
#define EFFECT_BODY_PRESS 344
#define EFFECT_EERIE_SPELL 345
#define EFFECT_JUNGLE_HEALING 346
#define EFFECT_COACHING 347
#define EFFECT_LASH_OUT 348
#define EFFECT_GRASSY_GLIDE 349
#define EFFECT_REMOVE_TERRAIN 350
#define EFFECT_DYNAMAX_DOUBLE_DMG 351
#define EFFECT_DECORATE 352
#define EFFECT_SNIPE_SHOT 353
#define EFFECT_RECOIL_HP_25 354
#define EFFECT_STUFF_CHEEKS 355
#define EFFECT_GRAV_APPLE 356
#define EFFECT_EVASION_UP_HIT 357
#define EFFECT_GLITZY_GLOW 358
#define EFFECT_BADDY_BAD 359
#define EFFECT_SAPPY_SEED 360
#define EFFECT_FREEZY_FROST 361
#define EFFECT_SPARKLY_SWIRL 362
#define EFFECT_PLASMA_FISTS 363
#define EFFECT_HYPERSPACE_FURY 364
#define EFFECT_AURA_WHEEL 365
#define EFFECT_PHOTON_GEYSER 366
#define EFFECT_SHELL_SIDE_ARM 367
#define EFFECT_TERRAIN_PULSE 368
#define EFFECT_JAW_LOCK 369
#define EFFECT_NO_RETREAT 370
#define EFFECT_TAR_SHOT 371
#define EFFECT_POLTERGEIST 372
#define EFFECT_OCTOLOCK 373
#define EFFECT_CLANGOROUS_SOUL 374
#define EFFECT_BOLT_BEAK 375
#define EFFECT_SKY_DROP 376
#define EFFECT_EXPANDING_FORCE 377
#define EFFECT_SCALE_SHOT 378
#define EFFECT_METEOR_BEAM 379
#define EFFECT_RISING_VOLTAGE 380
#define EFFECT_BEAK_BLAST 381
#define EFFECT_COURT_CHANGE 382
#define EFFECT_STEEL_BEAM 383
#define EFFECT_EXTREME_EVOBOOST 384
#define EFFECT_HIT_SET_REMOVE_TERRAIN 385 // genesis supernova
#define EFFECT_DARK_VOID 386
#define EFFECT_SLEEP_HIT 387
#define EFFECT_DOUBLE_SHOCK 388
#define EFFECT_SPECIAL_ATTACK_UP_HIT 389
#define EFFECT_VICTORY_DANCE 390
#define EFFECT_TEATIME 391
#define EFFECT_ATTACK_UP_USER_ALLY 392 // Howl 6th Gen
#define EFFECT_SHELL_TRAP 393
#define EFFECT_PSYBLADE 394
#define EFFECT_HYDRO_STEAM 395
#define EFFECT_HIT_SET_ENTRY_HAZARD 396
#define EFFECT_DIRE_CLAW 397
#define EFFECT_BARB_BARRAGE 398
#define EFFECT_REVIVAL_BLESSING 399
#define EFFECT_FROSTBITE_HIT 400
#define EFFECT_SNOWSCAPE 401
#define EFFECT_TRIPLE_ARROWS 402
#define EFFECT_INFERNAL_PARADE 403
#define EFFECT_TAKE_HEART 404
#define EFFECT_AXE_KICK 405
#define EFFECT_COLLISION_COURSE 406
#define EFFECT_SPIN_OUT 407
#define EFFECT_MAKE_IT_RAIN 408
#define EFFECT_CORROSIVE_GAS 409
#define EFFECT_POPULATION_BOMB 410
#define EFFECT_MORTAL_SPIN 411
#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_REMOVE_TERRAIN 349
#define EFFECT_DYNAMAX_DOUBLE_DMG 350
#define EFFECT_DECORATE 351
#define EFFECT_SNIPE_SHOT 352
#define EFFECT_RECOIL_HP_25 353
#define EFFECT_STUFF_CHEEKS 354
#define EFFECT_GRAV_APPLE 355
#define EFFECT_EVASION_UP_HIT 356
#define EFFECT_GLITZY_GLOW 357
#define EFFECT_BADDY_BAD 358
#define EFFECT_SAPPY_SEED 359
#define EFFECT_FREEZY_FROST 360
#define EFFECT_SPARKLY_SWIRL 361
#define EFFECT_PLASMA_FISTS 362
#define EFFECT_HYPERSPACE_FURY 363
#define EFFECT_AURA_WHEEL 364
#define EFFECT_PHOTON_GEYSER 365
#define EFFECT_SHELL_SIDE_ARM 366
#define EFFECT_TERRAIN_PULSE 367
#define EFFECT_JAW_LOCK 368
#define EFFECT_NO_RETREAT 369
#define EFFECT_TAR_SHOT 370
#define EFFECT_POLTERGEIST 371
#define EFFECT_OCTOLOCK 372
#define EFFECT_CLANGOROUS_SOUL 373
#define EFFECT_BOLT_BEAK 374
#define EFFECT_SKY_DROP 375
#define EFFECT_EXPANDING_FORCE 376
#define EFFECT_METEOR_BEAM 377
#define EFFECT_RISING_VOLTAGE 378
#define EFFECT_BEAK_BLAST 379
#define EFFECT_COURT_CHANGE 380
#define EFFECT_STEEL_BEAM 381
#define EFFECT_EXTREME_EVOBOOST 382
#define EFFECT_HIT_SET_REMOVE_TERRAIN 383 // genesis supernova
#define EFFECT_DARK_VOID 384
#define EFFECT_SLEEP_HIT 385
#define EFFECT_DOUBLE_SHOCK 386
#define EFFECT_SPECIAL_ATTACK_UP_HIT 387
#define EFFECT_VICTORY_DANCE 388
#define EFFECT_TEATIME 389
#define EFFECT_ATTACK_UP_USER_ALLY 390 // Howl 6th Gen
#define EFFECT_SHELL_TRAP 391
#define EFFECT_PSYBLADE 392
#define EFFECT_HYDRO_STEAM 393
#define EFFECT_HIT_SET_ENTRY_HAZARD 394
#define EFFECT_DIRE_CLAW 395
#define EFFECT_BARB_BARRAGE 396
#define EFFECT_REVIVAL_BLESSING 397
#define EFFECT_FROSTBITE_HIT 398
#define EFFECT_SNOWSCAPE 399
#define EFFECT_TRIPLE_ARROWS 400
#define EFFECT_INFERNAL_PARADE 401
#define EFFECT_TAKE_HEART 402
#define EFFECT_AXE_KICK 403
#define EFFECT_COLLISION_COURSE 404
#define EFFECT_SPIN_OUT 405
#define EFFECT_MAKE_IT_RAIN 406
#define EFFECT_CORROSIVE_GAS 407
#define EFFECT_POPULATION_BOMB 408
#define EFFECT_MORTAL_SPIN 409
#define NUM_BATTLE_MOVE_EFFECTS 412
#define NUM_BATTLE_MOVE_EFFECTS 410
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H

View File

@ -204,7 +204,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] =
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 57,
.width = 8,
.width = 16, //for z effect descriptions
.height = 2,
.paletteNum = 5,
.baseBlock = 0x0328,
@ -216,7 +216,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] =
.width = 8,
.height = 2,
.paletteNum = 5,
.baseBlock = 0x0338,
.baseBlock = 0x0340,
},
[B_WIN_PP] = {
.bg = 0,

View File

@ -3626,13 +3626,6 @@ void SetMoveEffect(bool32 primary, u32 certain)
gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION;
gBattleMons[gBattlerAttacker].status2 |= STATUS2_ESCAPE_PREVENTION;
break;
case MOVE_EFFECT_SCALE_SHOT:
if (!NoAliveMonsForEitherParty())
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_DefDownSpeedUp;
}
break;
case MOVE_EFFECT_BURN_UP:
// This seems unnecessary but is done to make it work properly with Parental Bond
BattleScriptPush(gBattlescriptCurrInstr + 1);
@ -5801,6 +5794,12 @@ static void Cmd_moveend(void)
gBattleScripting.multihitString[4]++;
if (--gMultiHitCounter == 0)
{
if (gBattleMoves[gCurrentMove].argument == MOVE_EFFECT_SCALE_SHOT && !NoAliveMonsForEitherParty())
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_DefDownSpeedUp;
}
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings;
effect = TRUE;
@ -8528,6 +8527,16 @@ static bool32 ChangeOrderTargetAfterAttacker(void)
return TRUE;
}
static u32 CalculateBattlerPartyCount(u32 battler)
{
u32 count;
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
count = CalculatePlayerPartyCount();
else
count = CalculateEnemyPartyCount();
return count;
}
static void Cmd_various(void)
{
CMD_ARGS(u8 battler, u8 id);
@ -10320,7 +10329,7 @@ static void Cmd_various(void)
VARIOUS_ARGS();
if (gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_BATTLE_BOND
&& HasAttackerFaintedTarget()
&& CalculateEnemyPartyCount() > 1
&& CalculateBattlerPartyCount(gBattlerTarget) > 1
&& !(gBattleStruct->battleBondTransformed[GET_BATTLER_SIDE2(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]))
{
gBattleStruct->battleBondTransformed[GET_BATTLER_SIDE2(gBattlerAttacker)] |= gBitTable[gBattlerPartyIndexes[gBattlerAttacker]];
@ -15886,7 +15895,6 @@ static const u16 sParentalBondBannedEffects[] =
EFFECT_MULTI_HIT,
EFFECT_OHKO,
EFFECT_ROLLOUT,
EFFECT_SCALE_SHOT,
EFFECT_SEMI_INVULNERABLE,
EFFECT_SKULL_BASH,
EFFECT_SKY_DROP,

View File

@ -182,7 +182,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_CONVERSION_2] = 4,
[EFFECT_LOCK_ON] = 3,
[EFFECT_SKETCH] = 3,
// [EFFECT_UNUSED_60] = 3,
[EFFECT_SLEEP_TALK] = 3,
[EFFECT_DESTINY_BOND] = 3,
[EFFECT_FLAIL] = 2,
@ -196,7 +195,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_NIGHTMARE] = 3,
[EFFECT_MINIMIZE] = 1,
[EFFECT_CURSE] = 2,
// [EFFECT_UNUSED_6E] = 1,
[EFFECT_PROTECT] = 5,
[EFFECT_SPIKES] = 4,
[EFFECT_FORESIGHT] = 3,
@ -217,7 +215,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_PURSUIT] = 2,
[EFFECT_RAPID_SPIN] = 2,
[EFFECT_SONICBOOM] = 1,
// [EFFECT_UNUSED_83] = 1,
[EFFECT_MORNING_SUN] = 4,
[EFFECT_SYNTHESIS] = 4,
[EFFECT_MOONLIGHT] = 4,
@ -227,7 +224,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_DEFENSE_UP_HIT] = 1,
[EFFECT_ATTACK_UP_HIT] = 1,
[EFFECT_ALL_STATS_UP_HIT] = 1,
// [EFFECT_UNUSED_8D] = 1,
[EFFECT_BELLY_DRUM] = 7,
[EFFECT_PSYCH_UP] = 7,
[EFFECT_MIRROR_COAT] = 6,
@ -249,7 +245,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_STOCKPILE] = 3,
[EFFECT_SPIT_UP] = 3,
[EFFECT_SWALLOW] = 3,
// [EFFECT_UNUSED_A3] = 1,
[EFFECT_HAIL] = 4,
[EFFECT_SNOWSCAPE] = 4,
[EFFECT_TORMENT] = 7,
@ -469,7 +464,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_BOLT_BEAK] = 0, // TODO: Assign points
[EFFECT_SKY_DROP] = 0, // TODO: Assign points
[EFFECT_EXPANDING_FORCE] = 0, // TODO: Assign points
[EFFECT_SCALE_SHOT] = 0, // TODO: Assign points
[EFFECT_METEOR_BEAM] = 0, // TODO: Assign points
[EFFECT_RISING_VOLTAGE] = 0, // TODO: Assign points
[EFFECT_BEAK_BLAST] = 0, // TODO: Assign points

View File

@ -12137,7 +12137,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] =
[MOVE_SCALE_SHOT] =
{
.effect = EFFECT_SCALE_SHOT,
.effect = EFFECT_MULTI_HIT,
.power = 25,
.type = TYPE_DRAGON,
.accuracy = 90,
@ -12147,6 +12147,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] =
.priority = 0,
.split = SPLIT_PHYSICAL,
.zMoveEffect = Z_EFFECT_NONE,
.argument = MOVE_EFFECT_SCALE_SHOT,
},
[MOVE_METEOR_BEAM] =

View File

@ -23099,7 +23099,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD},
.abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED},
.abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_ROCK_HEAD},
.bodyColor = BODY_COLOR_BROWN,
.noFlip = FALSE,
.flags = SPECIES_FLAG_HISUIAN_FORM,
@ -23122,7 +23122,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD},
.abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_JUSTIFIED},
.abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE, ABILITY_ROCK_HEAD},
.bodyColor = BODY_COLOR_BROWN,
.noFlip = FALSE,
.flags = SPECIES_FLAG_HISUIAN_FORM,
@ -23191,7 +23191,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_SLOW,
.eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD},
.abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FLASH_FIRE},
.abilities = {ABILITY_BLAZE, ABILITY_NONE, ABILITY_FRISK},
.bodyColor = BODY_COLOR_YELLOW,
.noFlip = FALSE,
.flags = SPECIES_FLAG_HISUIAN_FORM,
@ -23263,7 +23263,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_SLOW,
.eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD},
.abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHELL_ARMOR},
.abilities = {ABILITY_TORRENT, ABILITY_NONE, ABILITY_SHARPNESS},
.bodyColor = BODY_COLOR_BLUE,
.noFlip = FALSE,
.flags = SPECIES_FLAG_HISUIAN_FORM,
@ -23356,7 +23356,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING},
.abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_DEFIANT},
.abilities = {ABILITY_KEEN_EYE, ABILITY_SHEER_FORCE, ABILITY_TINTED_LENS},
.bodyColor = BODY_COLOR_RED,
.noFlip = FALSE,
.flags = SPECIES_FLAG_HISUIAN_FORM,
@ -23382,7 +23382,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
.friendship = 35,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON},
.abilities = {ABILITY_SAP_SIPPER, ABILITY_OVERCOAT, ABILITY_GOOEY},
.abilities = {ABILITY_SAP_SIPPER, ABILITY_SHELL_ARMOR, ABILITY_GOOEY},
.bodyColor = BODY_COLOR_PURPLE,
.noFlip = FALSE,
.flags = SPECIES_FLAG_HISUIAN_FORM,
@ -23405,7 +23405,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
.friendship = 35,
.growthRate = GROWTH_SLOW,
.eggGroups = { EGG_GROUP_DRAGON, EGG_GROUP_DRAGON},
.abilities = {ABILITY_SAP_SIPPER, ABILITY_OVERCOAT, ABILITY_GOOEY},
.abilities = {ABILITY_SAP_SIPPER, ABILITY_SHELL_ARMOR, ABILITY_GOOEY},
.bodyColor = BODY_COLOR_PURPLE,
.noFlip = FALSE,
.flags = SPECIES_FLAG_HISUIAN_FORM,
@ -23453,7 +23453,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
.friendship = STANDARD_FRIENDSHIP,
.growthRate = GROWTH_MEDIUM_SLOW,
.eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING},
.abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_LONG_REACH},
.abilities = {ABILITY_OVERGROW, ABILITY_NONE, ABILITY_SCRAPPY},
.bodyColor = BODY_COLOR_BROWN,
.noFlip = FALSE,
.flags = SPECIES_FLAG_HISUIAN_FORM,

View File

@ -0,0 +1,161 @@
#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(P_GEN_6_POKEMON == TRUE);
ASSUME(gBattleMoves[MOVE_WATER_GUN].power != 0);
}
SINGLE_BATTLE_TEST("Battle Bond does not transform species other than Greninja")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_BATTLE_BOND); }
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_WATER_GUN); SEND_OUT(opponent, 1); }
} SCENE {
HP_BAR(opponent);
MESSAGE("Foe Wobbuffet fainted!");
NONE_OF {
ABILITY_POPUP(player, ABILITY_BATTLE_BOND);
MESSAGE("Wobbuffet became fully charged due to its bond with its trainer!");
}
} THEN {
EXPECT(player->species == SPECIES_WOBBUFFET);
}
}
// Battle Bond transforms the pokemon when fainting any battler(opposing or partner), unless it's the last pokemon and the battle ends.
SINGLE_BATTLE_TEST("Battle Bond transforms player's Greninja - Singles")
{
u32 monsCountPlayer, monsCountOpponent;
PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 1; }
PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 2; }
PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 1; }
PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; }
GIVEN {
PLAYER(SPECIES_GRENINJA_BATTLE_BOND);
if (monsCountPlayer == 2) {
PLAYER(SPECIES_WOBBUFFET);
}
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
if (monsCountOpponent == 2) {
OPPONENT(SPECIES_WOBBUFFET);
}
} WHEN {
if (monsCountOpponent == 2) {
TURN { MOVE(player, MOVE_WATER_GUN); SEND_OUT(opponent, 1); }
} else {
TURN { MOVE(player, MOVE_WATER_GUN); }
}
} SCENE {
HP_BAR(opponent);
MESSAGE("Foe Wobbuffet fainted!");
if (monsCountOpponent != 1) {
ABILITY_POPUP(player, ABILITY_BATTLE_BOND);
MESSAGE("Greninja became fully charged due to its bond with its trainer!");
MESSAGE("Greninja became Ash-Greninja!");
} else {
NONE_OF {
ABILITY_POPUP(player, ABILITY_BATTLE_BOND);
MESSAGE("Greninja became fully charged due to its bond with its trainer!");
}
}
} FINALLY {
if (monsCountOpponent != 1) {
EXPECT(player->species == SPECIES_GRENINJA_ASH);
} else {
EXPECT(player->species == SPECIES_GRENINJA_BATTLE_BOND);
}
}
}
SINGLE_BATTLE_TEST("Battle Bond transforms opponent's Greninja - Singles")
{
u32 monsCountPlayer, monsCountOpponent;
PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 1; }
PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 2; }
PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 1; }
PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; }
GIVEN {
OPPONENT(SPECIES_GRENINJA_BATTLE_BOND);
if (monsCountOpponent == 2) {
OPPONENT(SPECIES_WOBBUFFET);
}
PLAYER(SPECIES_WOBBUFFET) {HP(1); }
if (monsCountPlayer == 2) {
PLAYER(SPECIES_WOBBUFFET);
}
} WHEN {
if (monsCountPlayer == 2) {
TURN { MOVE(opponent, MOVE_WATER_GUN); SEND_OUT(player, 1); }
} else {
TURN { MOVE(opponent, MOVE_WATER_GUN); }
}
} SCENE {
HP_BAR(player);
MESSAGE("Wobbuffet fainted!");
if (monsCountPlayer != 1) {
ABILITY_POPUP(opponent, ABILITY_BATTLE_BOND);
MESSAGE("Foe Greninja became fully charged due to its bond with its trainer!");
MESSAGE("Foe Greninja became Ash-Greninja!");
} else {
NONE_OF {
ABILITY_POPUP(opponent, ABILITY_BATTLE_BOND);
MESSAGE("Foe Greninja became fully charged due to its bond with its trainer!");
}
}
} FINALLY {
if (monsCountPlayer != 1) {
EXPECT(opponent->species == SPECIES_GRENINJA_ASH);
} else {
EXPECT(opponent->species == SPECIES_GRENINJA_BATTLE_BOND);
}
}
}
DOUBLE_BATTLE_TEST("Battle Bond transforms player's Greninja when fainting its Ally")
{
u32 monsCountPlayer, monsCountOpponent;
PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; }
PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 3; }
PARAMETRIZE {monsCountPlayer = 3; monsCountOpponent = 2; }
PARAMETRIZE {monsCountPlayer = 3; monsCountOpponent = 3; }
GIVEN {
PLAYER(SPECIES_GRENINJA_BATTLE_BOND);
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
if (monsCountPlayer == 3) {
PLAYER(SPECIES_WOBBUFFET);
}
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
if (monsCountOpponent == 3) {
OPPONENT(SPECIES_WOBBUFFET);
}
} WHEN {
if (monsCountPlayer == 3) {
TURN { MOVE(playerLeft, MOVE_WATER_GUN, target:playerRight); SEND_OUT(playerRight, 2); }
} else {
TURN { MOVE(playerLeft, MOVE_WATER_GUN, target:playerRight); }
}
} SCENE {
HP_BAR(playerRight);
MESSAGE("Wobbuffet fainted!");
ABILITY_POPUP(playerLeft, ABILITY_BATTLE_BOND);
MESSAGE("Greninja became fully charged due to its bond with its trainer!");
MESSAGE("Greninja became Ash-Greninja!");
} FINALLY {
EXPECT(playerLeft->species == SPECIES_GRENINJA_ASH);
}
}

View File

@ -133,3 +133,49 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit five times 50 Percent of the time with L
MESSAGE("Hit 5 time(s)!");
}
}
SINGLE_BATTLE_TEST("Scale Shot decreses defense and increases speed after final hit")
{
GIVEN {
ASSUME(gBattleMoves[MOVE_SCALE_SHOT].effect == EFFECT_MULTI_HIT);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCALE_SHOT); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
MESSAGE("Hit 5 time(s)!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
MESSAGE("Wobbuffet's Defense fell!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
MESSAGE("Wobbuffet's Speed rose!");
}
}
SINGLE_BATTLE_TEST("Endure does not prevent multiply hits and stat changes accure at the end of the turn")
{
GIVEN {
ASSUME(gBattleMoves[MOVE_SCALE_SHOT].effect == EFFECT_MULTI_HIT);
ASSUME(gBattleMoves[MOVE_ENDURE].effect == EFFECT_ENDURE);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
} WHEN {
TURN { MOVE(opponent, MOVE_ENDURE); MOVE(player, MOVE_SCALE_SHOT); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_ENDURE, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player);
MESSAGE("Hit 5 time(s)!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
MESSAGE("Wobbuffet's Defense fell!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
MESSAGE("Wobbuffet's Speed rose!");
}
}