diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 981cf5ae33..ac5d433a3c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -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 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index eab1cf992b..e91d45d3e1 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -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 diff --git a/src/battle_bg.c b/src/battle_bg.c index b3fea1a203..97d5cc862f 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -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, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c2618afb49..8369f13d15 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -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, diff --git a/src/battle_tv.c b/src/battle_tv.c index d282393516..5d03753e47 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -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 diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 5393d19738..75b89dccc6 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -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] = diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index b6eb714831..668c1dede9 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -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, diff --git a/test/battle/ability/battle_bond.c b/test/battle/ability/battle_bond.c new file mode 100644 index 0000000000..36ce8990b1 --- /dev/null +++ b/test/battle/ability/battle_bond.c @@ -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); + } +} diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index 67515c7d54..1aded8dd34 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -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!"); + } +}