Fix Scale Shot bug and use Canceller Multihit Moves (#3290)

This commit is contained in:
Alex 2023-09-10 16:57:19 +02:00 committed by GitHub
parent 49e791f128
commit 18577ce598
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 471 additions and 348 deletions

View File

@ -145,7 +145,6 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectPresent @ EFFECT_PRESENT .4byte BattleScript_EffectPresent @ EFFECT_PRESENT
.4byte BattleScript_EffectHit @ EFFECT_FRUSTRATION .4byte BattleScript_EffectHit @ EFFECT_FRUSTRATION
.4byte BattleScript_EffectSafeguard @ EFFECT_SAFEGUARD .4byte BattleScript_EffectSafeguard @ EFFECT_SAFEGUARD
.4byte BattleScript_EffectHit @ EFFECT_UNUSED_125
.4byte BattleScript_EffectMagnitude @ EFFECT_MAGNITUDE .4byte BattleScript_EffectMagnitude @ EFFECT_MAGNITUDE
.4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS .4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS
.4byte BattleScript_EffectHit @ EFFECT_PURSUIT .4byte BattleScript_EffectHit @ EFFECT_PURSUIT
@ -406,7 +405,6 @@ gBattleScriptsForMoveEffects::
.4byte BattleScript_EffectHit @ EFFECT_BOLT_BEAK .4byte BattleScript_EffectHit @ EFFECT_BOLT_BEAK
.4byte BattleScript_EffectSkyDrop @ EFFECT_SKY_DROP .4byte BattleScript_EffectSkyDrop @ EFFECT_SKY_DROP
.4byte BattleScript_EffectHit @ EFFECT_EXPANDING_FORCE .4byte BattleScript_EffectHit @ EFFECT_EXPANDING_FORCE
.4byte BattleScript_EffectScaleShot @ EFFECT_SCALE_SHOT
.4byte BattleScript_EffectMeteorBeam @ EFFECT_METEOR_BEAM .4byte BattleScript_EffectMeteorBeam @ EFFECT_METEOR_BEAM
.4byte BattleScript_EffectHit @ EFFECT_RISING_VOLTAGE .4byte BattleScript_EffectHit @ EFFECT_RISING_VOLTAGE
.4byte BattleScript_EffectHit @ EFFECT_BEAK_BLAST .4byte BattleScript_EffectHit @ EFFECT_BEAK_BLAST
@ -723,60 +721,6 @@ BattleScript_FirstChargingTurnMeteorBeam::
seteffectsecondary seteffectsecondary
return 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: BattleScript_EffectSkyDrop:
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2 jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2
attackcanceler attackcanceler
@ -881,7 +825,7 @@ BattleScript_FlingEnd:
tryfaintmon BS_TARGET tryfaintmon BS_TARGET
trysymbiosis trysymbiosis
goto BattleScript_MoveEnd goto BattleScript_MoveEnd
BattleScript_FlingFailConsumeItem:: BattleScript_FlingFailConsumeItem::
removeitem BS_ATTACKER removeitem BS_ATTACKER
goto BattleScript_FailedFromAtkString goto BattleScript_FailedFromAtkString

View File

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

View File

@ -3864,13 +3864,6 @@ void SetMoveEffect(bool32 primary, u32 certain)
gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION; gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION;
gBattleMons[gBattlerAttacker].status2 |= STATUS2_ESCAPE_PREVENTION; gBattleMons[gBattlerAttacker].status2 |= STATUS2_ESCAPE_PREVENTION;
break; break;
case MOVE_EFFECT_SCALE_SHOT:
if (!NoAliveMonsForEitherParty())
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_DefDownSpeedUp;
}
break;
case MOVE_EFFECT_BURN_UP: case MOVE_EFFECT_BURN_UP:
// This seems unnecessary but is done to make it work properly with Parental Bond // This seems unnecessary but is done to make it work properly with Parental Bond
BattleScriptPush(gBattlescriptCurrInstr + 1); BattleScriptPush(gBattlescriptCurrInstr + 1);
@ -6095,6 +6088,12 @@ static void Cmd_moveend(void)
gBattleScripting.multihitString[4]++; gBattleScripting.multihitString[4]++;
if (--gMultiHitCounter == 0) if (--gMultiHitCounter == 0)
{ {
if (gBattleMoves[gCurrentMove].argument == MOVE_EFFECT_SCALE_SHOT && !NoAliveMonsForEitherParty())
{
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_DefDownSpeedUp;
}
BattleScriptPushCursor(); BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings; gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings;
effect = TRUE; effect = TRUE;

View File

@ -469,7 +469,6 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] =
[EFFECT_BOLT_BEAK] = 0, // TODO: Assign points [EFFECT_BOLT_BEAK] = 0, // TODO: Assign points
[EFFECT_SKY_DROP] = 0, // TODO: Assign points [EFFECT_SKY_DROP] = 0, // TODO: Assign points
[EFFECT_EXPANDING_FORCE] = 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_METEOR_BEAM] = 0, // TODO: Assign points
[EFFECT_RISING_VOLTAGE] = 0, // TODO: Assign points [EFFECT_RISING_VOLTAGE] = 0, // TODO: Assign points
[EFFECT_BEAK_BLAST] = 0, // TODO: Assign points [EFFECT_BEAK_BLAST] = 0, // TODO: Assign points

View File

@ -12038,7 +12038,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] =
[MOVE_SCALE_SHOT] = [MOVE_SCALE_SHOT] =
{ {
.effect = EFFECT_SCALE_SHOT, .effect = EFFECT_MULTI_HIT,
.power = 25, .power = 25,
.type = TYPE_DRAGON, .type = TYPE_DRAGON,
.accuracy = 90, .accuracy = 90,
@ -12049,6 +12049,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] =
.flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED,
.split = SPLIT_PHYSICAL, .split = SPLIT_PHYSICAL,
.zMoveEffect = Z_EFFECT_NONE, .zMoveEffect = Z_EFFECT_NONE,
.argument = MOVE_EFFECT_SCALE_SHOT,
}, },
[MOVE_METEOR_BEAM] = [MOVE_METEOR_BEAM] =

View File

@ -0,0 +1,181 @@
#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(gBattleMoves[MOVE_BULLET_SEED].effect == EFFECT_MULTI_HIT);
}
SINGLE_BATTLE_TEST("Multi hit Moves hit the maximum amount with Skill Link")
{
PASSES_RANDOMLY(100, 100, RNG_HITS);
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SKILL_LINK); };
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_BULLET_SEED); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
MESSAGE("Hit 5 time(s)!");
}
}
SINGLE_BATTLE_TEST("Multi hit Moves hit twice 35 Percent of the time")
{
PASSES_RANDOMLY(35, 100, RNG_HITS);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_BULLET_SEED); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
MESSAGE("Hit 2 time(s)!");
}
}
SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 35 Percent of the time")
{
PASSES_RANDOMLY(35, 100, RNG_HITS);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_BULLET_SEED); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
MESSAGE("Hit 3 time(s)!");
}
}
SINGLE_BATTLE_TEST("Multi hit Moves hit four times 35 Percent of the time")
{
PASSES_RANDOMLY(15, 100, RNG_HITS);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_BULLET_SEED); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
MESSAGE("Hit 4 time(s)!");
}
}
SINGLE_BATTLE_TEST("Multi hit Moves hit four times 35 Percent of the time")
{
PASSES_RANDOMLY(15, 100, RNG_HITS);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_BULLET_SEED); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
MESSAGE("Hit 5 time(s)!");
}
}
SINGLE_BATTLE_TEST("Multi hit Moves hit at least four times with Loaded Dice")
{
PASSES_RANDOMLY(50, 100, RNG_LOADED_DICE);
GIVEN {
ASSUME(gItems[ITEM_LOADED_DICE].holdEffect == HOLD_EFFECT_LOADED_DICE);
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LOADED_DICE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_BULLET_SEED); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
MESSAGE("Hit 4 time(s)!");
}
}
SINGLE_BATTLE_TEST("Multi hit Moves hit five times 50 Percent of the time with Loaded Dice")
{
PASSES_RANDOMLY(50, 100, RNG_LOADED_DICE);
GIVEN {
ASSUME(gItems[ITEM_LOADED_DICE].holdEffect == HOLD_EFFECT_LOADED_DICE);
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LOADED_DICE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_BULLET_SEED); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player);
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!");
}
}