diff --git a/.all-contributorsrc b/.all-contributorsrc index ee9a9c49f7..8ae6daf62c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -633,6 +633,15 @@ "contributions": [ "design" ] + }, + { + "login": "ChrispyChris27", + "name": "ChrispyChris27", + "avatar_url": "https://avatars.githubusercontent.com/u/173648816?v=4", + "profile": "https://github.com/ChrispyChris27", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 0c918c334b..03c9151c06 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -43,9 +43,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.14.2 (Latest release) + - 1.14.3 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.14.2 - 1.14.1 - 1.14.0 - 1.13.4 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index b172a867aa..395f0d590c 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -43,9 +43,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.14.2 (Latest release) + - 1.14.3 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.14.2 - 1.14.1 - 1.14.0 - 1.13.4 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index c69e2c1052..732281edca 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -43,9 +43,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.14.2 (Latest release) + - 1.14.3 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.14.2 - 1.14.1 - 1.14.0 - 1.13.4 diff --git a/.gitignore b/.gitignore index 1ac6e11c9a..ee55147562 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,7 @@ src/data/debug_trainers.h test/battle/trainer_control.h tools/compresSmol/compresSmol tools/compresSmol/compresSmolTilemap +tools/aif2pcm/aif2pcm *.Identifier *.smol *.fastSmol diff --git a/CREDITS.md b/CREDITS.md index 10786eff5d..7d9e48d70e 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -91,6 +91,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d SabataLunar
SabataLunar

🎨 PacFire
PacFire

🎨 + ChrispyChris27
ChrispyChris27

💻 diff --git a/README.md b/README.md index c9a538c49a..11666a16a5 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ If you use **`pokeemerald-expansion`**, please credit **RHH (Rom Hacking Hideout)**. Optionally, include the version number for clarity. ``` -Based off RHH's pokeemerald-expansion 1.14.2 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.14.3 https://github.com/rh-hideout/pokeemerald-expansion/ ``` Please consider [crediting all contributors](CREDITS.md) involved in the project! diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index 3d60680da6..c24a6b8253 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -10,7 +10,7 @@ .2byte \tag .endm -.macro createsprite template:req, anim_battler:req, subpriority_offset:req, argv:vararg + .macro createsprite template:req, anim_battler:req, subpriority_offset:req, argv:vararg .byte 0x02 .4byte \template .if \anim_battler == ANIM_TARGET @@ -351,3 +351,300 @@ createvisualtask AnimTask_IsDoubleBattle, 0 jumprettrue \ptr .endm + +@ createsprite wrappers +@ The arguments are based on the CMD_ARGS of the callback associated with the template. + + .macro simple_palette_blend unused_anim_battler=ANIM_ATTACKER, unused_subpriority_offset=2, selector:req, delay:req, initial_blend_y:req, target_blend_y:req, color:req + createsprite gSimplePaletteBlendSpriteTemplate, \unused_anim_battler, \unused_subpriority_offset, \selector, \delay, \initial_blend_y, \target_blend_y, \color + .endm + + .macro complex_palette_blend unused_anim_battler=ANIM_ATTACKER, unused_subpriority_offset=2, selector:req, delay:req, num_blends:req, color1:req, blend_y1:req, color2:req, blend_y2:req + createsprite gComplexPaletteBlendSpriteTemplate, \unused_anim_battler, \unused_subpriority_offset, \selector, \delay, \num_blends, \color1, \blend_y1, \color2, \blend_y2 + .endm + + .macro shake_mon_or_platform unused_anim_battler=ANIM_ATTACKER, unused_subpriority_offset=2, velocity:req, shake_timer:req, shake_duration:req, type:req, battler_selector + .if \type == SHAKE_MON_X || \type == SHAKE_MON_Y + .ifb \battler_selector + .error "battler_selector required for SHAKE_MON_X or SHAKE_MON_Y" + .endif + .else + .ifnb \battler_selector + .warning "unused battler_selector in shake_mon_or_platform" + .endif + .endif + .ifb \battler_selector + createsprite gShakeMonOrPlatformSpriteTemplate, \unused_anim_battler, \unused_subpriority_offset, \velocity, \shake_timer, \shake_duration, \type + .else + createsprite gShakeMonOrPlatformSpriteTemplate, \unused_anim_battler, \unused_subpriority_offset, \velocity, \shake_timer, \shake_duration, \type, \battler_selector + .endif + .endm + + .macro create_megahorn_horn_sprite anim_battler:req, subpriority_offset:req, x1:req, y1:req, x2:req, y2:req, duration:req + createsprite gMegahornHornSpriteTemplate, \anim_battler, \subpriority_offset, \x1, \y1, \x2, \y2, \duration + .endm + + .macro create_leech_life_needle_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req + createsprite gLeechLifeNeedleSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration + .endm + + .macro create_web_thread_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, unk2:req, amplitude:req, targets_both:req + createsprite gWebThreadSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \unk2, \amplitude, \targets_both + .endm + + .macro create_string_wrap_sprite anim_battler:req, subpriority_offset:req, x:req, y:req + createsprite gStringWrapSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y + .endm + + .macro create_linear_stinger_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req + createsprite gLinearStingerSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration + .endm + + .macro create_pin_missile_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req, wave_amplitude:req + createsprite gPinMissileSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration, \wave_amplitude + .endm + + .macro create_tail_glow_orb_sprite anim_battler:req, subpriority_offset:req, relative_to:req + createsprite gTailGlowOrbSpriteTemplate, \anim_battler, \subpriority_offset, \relative_to + .endm + + .macro create_sharp_teeth_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, animation:req, x_velocity:req, y_velocity:req, half_duration:req + createsprite gSharpTeethSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \animation, 256 * \x_velocity, 256 * \y_velocity, \half_duration + .endm + + .macro create_clamp_jaw_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, animation:req, x_velocity:req, y_velocity:req, half_duration:req + createsprite gClampJawSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \animation, 256 * \x_velocity, 256 * \y_velocity, \half_duration + .endm + + .macro create_tear_drop_sprite anim_battler:req, subpriority_offset:req, relative_to:req, type:req + createsprite gTearDropSpriteTemplate, \anim_battler, \subpriority_offset, \relative_to, \type + .endm + + .macro create_claw_slash_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, animation:req + createsprite gClawSlashSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \animation + .endm + + .macro create_outrage_flame_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req, x_velocity:req, y_velocity:req, flicker_duration:req + createsprite gOutrageFlameSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration, 256 * \x_velocity, 256 * \y_velocity, \flicker_duration + .endm + + .macro create_dragon_breath_fire_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req + createsprite gDragonBreathFireSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration + .endm + + .macro create_dragon_rage_fire_spit_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req + createsprite gDragonRageFireSpitSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration + .endm + + .macro create_dragon_rage_fire_plume_sprite anim_battler:req, subpriority_offset:req, relative_to:req, x:req, y:req + createsprite gDragonRageFirePlumeSpriteTemplate, \anim_battler, \subpriority_offset, \relative_to, \x, \y + .endm + + .macro create_dragon_dance_orb_sprite anim_battler:req, subpriority_offset:req, angle:req + createsprite gDragonDanceOrbSpriteTemplate, \anim_battler, \subpriority_offset, 256 * \angle + .endm + + .macro create_overheat_flame_sprite anim_battler:req, subpriority_offset:req, speed:req, unk1:req, unk2:req, duration:req, y:req + createsprite gOverheatFlameSpriteTemplate, \anim_battler, \subpriority_offset, \speed, \unk1, \unk2, \duration, \y + .endm + + .macro create_sleep_powder_particle_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req, y_velocity:req, wave_amplitude:req, wave_speed:req + createsprite gSleepPowderParticleSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration, 256 * \y_velocity, \wave_amplitude, \wave_speed + .endm + + .macro create_stun_spore_particle_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req, y_velocity:req, wave_amplitude:req, wave_speed:req + createsprite gStunSporeParticleSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration, 256 * \y_velocity, \wave_amplitude, \wave_speed + .endm + + .macro create_poison_powder_particle_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req, y_velocity:req, wave_amplitude:req, wave_speed:req + createsprite gPoisonPowderParticleSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration, 256 * \y_velocity, \wave_amplitude, \wave_speed + .endm + + .macro create_power_absorption_orb_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req + createsprite gPowerAbsorptionOrbSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration + .endm + + .macro create_stockpile_absorption_orb_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req + createsprite gStockpileAbsorptionOrbSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration + .endm + + .macro create_solar_beam_big_orb_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req, animation:req + createsprite gSolarBeamBigOrbSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration, \animation + .endm + + .macro create_absorption_orb_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, wave_amplitude:req, wave_period:req + createsprite gAbsorptionOrbSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \wave_amplitude, \wave_period + .endm + + .macro create_hyper_beam_orb_sprite anim_battler:req, subpriority_offset:req + createsprite gHyperBeamOrbSpriteTemplate, \anim_battler, \subpriority_offset + .endm + + .macro createleechseedsprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req, wave_amplitude:req + createsprite gLeechSeedSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration, \wave_amplitude + .endm + + .macro create_spore_particle_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, wave_offset:req, duration:req, blend:req + createsprite gSporeParticleSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \wave_offset, \duration, \blend + .endm + + .macro create_petal_dance_big_flower_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_y:req, duration:req + createsprite gPetalDanceBigFlowerSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_y, \duration + .endm + + .macro create_petal_dance_small_flower_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_y:req, duration:req + createsprite gPetalDanceSmallFlowerSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_y, \duration + .endm + + .macro create_razor_leaf_particle_sprite anim_battler:req, subpriority_offset:req, upward_delta_x:req, upward_delta_y:req, upward_duration:req + createsprite gRazorLeafParticleSpriteTemplate, \anim_battler, \subpriority_offset, \upward_delta_x, \upward_delta_y, \upward_duration + .endm + + .macro create_razor_leaf_cutter_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req, wave_amplitude:req, target_both:req + createsprite gRazorLeafCutterSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration, \wave_amplitude, \target_both + .endm + + .macro create_swift_star_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req, wave_amplitude:req, target_both:req + createsprite gSwiftStarSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration, \wave_amplitude, \target_both + .endm + + .macro create_twister_leaf_sprite anim_battler:req, subpriority_offset:req, duration:req, distance_y:req, wave_period:req, wave_amplitude:req, speed_up_on_frame:req + createsprite gTwisterLeafSpriteTemplate, \anim_battler, \subpriority_offset, \duration, \distance_y, \wave_period, \wave_amplitude, \speed_up_on_frame + .endm + + .macro create_constrict_binding_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, affine_animation:req, squeezes:req + createsprite gConstrictBindingSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \affine_animation, \squeezes + .endm + + .macro create_mimic_orb_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req + createsprite gMimicOrbSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y + .endm + + .macro create_ingrain_root_sprite anim_battler:req, subpriority_offset:req, offset_x:req, offset_y:req, subpriority:req, animation:req, duration:req + createsprite gIngrainRootSpriteTemplate, \anim_battler, \subpriority_offset, \offset_x, \offset_y, \subpriority - 30, \animation, \duration + .endm + + .macro create_frenzy_plant_root_sprite anim_battler:req, subpriority_offset:req, interpolate_percent:req, offset_x:req, offset_y:req, subpriority:req, animation:req, duration:req + createsprite gFrenzyPlantRootSpriteTemplate, \anim_battler, \subpriority_offset, \interpolate_percent, \offset_x, \offset_y, \subpriority - 30, \animation, \duration + .endm + + .macro create_ingrain_orb_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, velocity_x:req, wave_amplitude:req, duration:req + createsprite gIngrainOrbSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \velocity_x, \wave_amplitude, \duration + .endm + + .macro create_present_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, unk2:req, unk3:req, unk4:req + createsprite gPresentSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \unk2, \unk3, \unk4 + .endm + + .macro create_present_heal_particle_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, velocity_y:req, unused3=1 + createsprite gPresentHealParticleSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \velocity_y, \unused3 + .endm + + .macro create_item_steal_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, unk2, unk3, unk4 + createsprite gItemStealSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \unk2, \unk3, \unk4 + .endm + + .macro create_trick_bag_sprite anim_battler:req, subpriority_offset:req, initial_y:req, wave_offset:req + createsprite gTrickBagSpriteTemplate, \anim_battler, \subpriority_offset, \initial_y, \wave_offset + .endm + + .macro create_confusion_duck_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, wave_offset:req, wave_period:req, duration:req + createsprite gConfusionDuckSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \wave_offset, \wave_period, \duration + .endm + + .macro create_basic_hitsplat_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, relative_to:req, animation:req + createsprite gBasicHitSplatSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \relative_to, \animation + .endm + + .macro create_persist_hitsplat_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, relative_to:req, animation:req, duration:req + createsprite gPersistHitSplatSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \relative_to, \animation, \duration + .endm + + .macro create_handle_invert_hitsplat_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, relative_to:req, animation:req + createsprite gHandleInvertHitSplatSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \relative_to, \animation + .endm + + .macro create_random_pos_hitsplat_sprite anim_battler:req, subpriority_offset:req, relative_to:req, animation + .ifnb \animation + createsprite gRandomPosHitSplatSpriteTemplate, \anim_battler, \subpriority_offset, \relative_to, \animation + .else + createsprite gRandomPosHitSplatSpriteTemplate, \anim_battler, \subpriority_offset, \relative_to, -1 + .endif + .endm + + .macro create_mon_edge_hitsplat_sprite anim_battler:req, subpriority_offset:req, relative_to:req, x:req, y:req, animation:req + createsprite gMonEdgeHitSplatSpriteTemplate, \anim_battler, \subpriority_offset, \relative_to, \x, \y, \animation + .endm + + .macro create_cross_impact_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, relative_to:req, duration:req + createsprite gCrossImpactSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \relative_to, \duration + .endm + + .macro create_flashing_hitsplat_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, relative_to:req, animation:req + createsprite gFlashingHitSplatSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \relative_to, \animation + .endm + +@ createvisualtask wrappers +@ The arguments are based on the CMD_ARGS of the task. + + .macro metallic_shine priority=5, permanent:req, color + .ifb \color + createvisualtask AnimTask_MetallicShine, \priority, \permanent, FALSE, RGB_BLACK + .else + createvisualtask AnimTask_MetallicShine, \priority, \permanent, TRUE, \color + .endif + .endm + + .macro set_grayscale_pal priority=5, battler:req + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, \priority, \battler, FALSE + .endm + + .macro set_original_pal priority=5, battler:req + createvisualtask AnimTask_SetGrayscaleOrOriginalPal, \priority, \battler, TRUE + .endm + + .macro attacker_fade_to_invisible priority=2, step_delay:req + createvisualtask AnimTask_AttackerFadeToInvisible, \priority, \step_delay + .endm + + .macro attacker_fade_from_invisible priority=2, step_delay:req + createvisualtask AnimTask_AttackerFadeFromInvisible, \priority, \step_delay + .endm + + .macro shrink_target_copy priority=5, unk0:req, unk1:req + createvisualtask AnimTask_ShrinkTargetCopy, \priority, \unk0, \unk1 + .endm + + .macro create_leaf_blade_task priority=5 + createvisualtask AnimTask_LeafBlade, \priority + .endm + + .macro blend_color_cycle priority=2, selector:req, delay:req, num_blends:req, initial_blend_y:req, target_blend_y:req, color:req + createvisualtask AnimTask_BlendColorCycle, \priority, \selector, \delay, \num_blends, \initial_blend_y, \target_blend_y, \color + .endm + + .macro blend_color_cycleexclude priority=2, unk0:req, delay:req, num_blends:req, initial_blend_y:req, target_blend_y:req, color:req + createvisualtask AnimTask_BlendColorCycleExclude, \priority, \unk0, \delay, \num_blends, \initial_blend_y, \target_blend_y, \color + .endm + + .macro blend_color_cyclebytag priority=2, tag:req, delay:req, num_blends:req, initial_blend_y:req, target_blend_y:req, color:req + createvisualtask AnimTask_BlendColorCycleByTag, \priority, \tag, \delay, \num_blends, \initial_blend_y, \target_blend_y, \color + .endm + + .macro flash_anim_tag_with_color priority=2, tag:req, delay:req, num_blends:req, color1:req, blend_y1:req, color2:req, blend_y2:req + createvisualtask AnimTask_FlashAnimTagWithColor, \priority, \tag, \delay, \num_blends, \color1, \blend_y1, \color2, \blend_y2 + .endm + + @ NOTE: This function is different on expansion compared to pret + .macro invert_screen_color priority=2, scenery:req + @ NOTE: These generate 0x000 or 0x101 to match, but the code checks for '& 0x100'. + createvisualtask AnimTask_InvertScreenColor, \priority, \scenery + .endm + + .macro tint_palettes priority=2, scenery:req, attacker:req, target:req, duration:req, color:req + createvisualtask AnimTask_TintPalettes, \priority, \scenery << 8, \attacker << 8, \target << 8, \duration, \color & 0x1F, (\color >> 5) & 0x1F, (\color >> 10) & 0x1F + .endm + + .macro shake_battle_platforms priority=2, x_offset:req, y_offset:req, shakes:req, delay:req + createvisualtask AnimTask_ShakeBattlePlatforms, \priority, \x_offset, \y_offset, \shakes, \delay + .endm diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 220346b67a..78f45c1c61 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -72,7 +72,7 @@ gBattleAnimMove_MiracleEye:: createsprite gWhiteHaloSpriteTemplate, ANIM_ATTACKER, 5 delay 40 playsewithpan SE_M_LEER, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG, 1, 2, 0, 10, RGB_BLACK + blend_color_cycle selector=F_PAL_BG, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB_BLACK call MindReaderEyeSpikeEffect waitforvisualfinish call UnsetPsychicBg @@ -90,7 +90,7 @@ gBattleAnimMove_WakeUpSlap:: createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 0, 0, 10, 1, 3, 0 waitforvisualfinish playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 2 waitforvisualfinish createsprite gSmellingSaltExclamationSpriteTemplate, ANIM_TARGET, 2, 1, 8, 3 @@ -116,7 +116,7 @@ gBattleAnimMove_HammerArm:: gBattleAnimMove_GyroBall:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + metallic_shine permanent=0 waitforvisualfinish playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 @@ -126,7 +126,7 @@ gBattleAnimMove_GyroBall:: delay 3 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -32, 0, 0, 3 waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 @@ -182,7 +182,7 @@ gBattleAnimMove_NaturalGift:: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 16, RGB(27, 31, 18) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=16, color=RGB(27, 31, 18) playsewithpan SE_M_MEGA_KICK, -64 call GrantingStarsEffect waitforvisualfinish @@ -191,12 +191,12 @@ gBattleAnimMove_NaturalGift:: playsewithpan SE_M_TELEPORT, -64 delay 8 createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB(0, 0, 19), 14, 0, 3 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 128 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 170 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 213 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=43/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=85/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=128/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=170/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=213/256 delay 30 playsewithpan SE_M_TELEPORT, -64 delay 30 @@ -224,21 +224,21 @@ gBattleAnimMove_Pluck:: loadspritegfx ANIM_TAG_SEED_BROWN loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 40, -10, -5, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 40, x=-10, y=-5, relative_to=ANIM_TARGET, animation=2 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 3, 0, 20, 2, 1 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 7, 1, 20, 1, 1 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -3, 5, 25, 2, -1 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 4, -4, 30, 3, -1 delay 30 playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 40, 5, 10, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 40, x=5, y=10, relative_to=ANIM_TARGET, animation=2 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 3, -4, 20, 1, 1 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 7, -6, 20, 0, 1 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -3, -9, 25, 1, -1 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 4, -4, 30, 2, -1 delay 30 playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 40, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -3, -4, 20, 1, 1 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, 7, -6, 25, 0, 1 createsprite gPluckParticleSpriteTemplate, ANIM_ATTACKER, 40, -4, -10, 25, 1, 1 @@ -322,7 +322,7 @@ gBattleAnimMove_MetalBurst:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loadspritegfx ANIM_TAG_RED_ORB loopsewithpan SE_M_TRI_ATTACK, -64, 18, 3 - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE + set_grayscale_pal battler=ANIM_ATTACKER createvisualtask AnimTask_DefenseCurlDeformMon, 5 waitforvisualfinish setarg 7, -1 @@ -337,7 +337,7 @@ gBattleAnimMove_MetalBurst:: createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 20, 192 createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 waitforvisualfinish - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE + set_original_pal battler=ANIM_ATTACKER waitforvisualfinish end @@ -353,7 +353,7 @@ gBattleAnimMove_UTurn:: createsprite gUTurnBallSpriteTemplate, ANIM_TARGET, 2, 0, 0, 21 waitforvisualfinish playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createsprite gUTurnBallBackSpriteTemplate, ANIM_ATTACKER, 3, 4, 0, -16, 36 waitforvisualfinish @@ -455,22 +455,22 @@ gBattleAnimMove_Payback:: delay 0 setalpha 12, 8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 30, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=24, y=8, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-24, y=-16, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=8, y=4, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-16, y=19, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=18, y=-18, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 waitforvisualfinish clearmonbg ANIM_TARGET @@ -489,7 +489,7 @@ gBattleAnimMove_Assurance:: setalpha 12, 8 createsprite gPalmSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0 playsewithpan SE_M_VITAL_THROW2, -64 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -529,7 +529,7 @@ gBattleAnimMove_Fling:: createsprite gBlackBallSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 playsewithpan SE_M_SWAGGER, -64 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW, +63 clearmonbg ANIM_DEF_PARTNER @@ -544,7 +544,7 @@ gBattleAnimMove_PsychoShift:: monbg ANIM_ATTACKER setalpha 12, 8 playsewithpan SE_M_MEGA_KICK, -64 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0/256 delay 30 waitforvisualfinish createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 1, 0 @@ -676,7 +676,7 @@ gBattleAnimMove_GastroAcid:: playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 15 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(30, 0, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(30, 0, 31) createsprite gGreenPoisonDrip, ANIM_TARGET, 2, 0, -22, 0, 15, 55, FALSE playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 10 @@ -738,14 +738,14 @@ gBattleAnimMove_MeFirst:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 22, 3 waitforvisualfinish panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 - createvisualtask AnimTask_ShrinkTargetCopy, 5, 128, 24 + shrink_target_copy unk0=128, unk1=24 delay 15 - createsprite gMimicOrbSpriteTemplate, ANIM_TARGET, 2, -12, 24 + create_mimic_orb_sprite ANIM_TARGET, 2, initial_x=-12, initial_y=24 delay 10 setarg 7, 0xFFFF waitforvisualfinish playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 11, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_WHITE waitforvisualfinish clearmonbg_static ANIM_DEF_PARTNER blendoff @@ -755,12 +755,12 @@ gBattleAnimMove_Copycat:: loadspritegfx ANIM_TAG_GRAY_ORB loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 8, 1, 0, 12, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=8, num_blends=1, initial_blend_y=0, target_blend_y=12, color=RGB_WHITE createvisualtask AnimTask_StockpileDeformMon, 5 call StockpileAbsorb call StockpileAbsorb waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 12, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_ATTACKER, delay=0, initial_blend_y=12, target_blend_y=0, color=RGB_WHITE waitforvisualfinish createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0 playsewithpan SE_M_SUPERSONIC, -64 @@ -887,26 +887,26 @@ gBattleAnimMove_LastResort:: waitbgfadein loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_ATTACKER, delay=4, num_blends=2, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=16, target_blend_y=16, color=RGB_WHITE createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 delay 3 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 132, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 132, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, -32, 0, 0, 3 waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 @@ -938,7 +938,7 @@ gBattleAnimMove_SuckerPunch:: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 createsprite gSuckerPunchSpriteTemplate, ANIM_TARGET, 2, -18, 5, 40, 8, 160, 0 delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-8, y=8, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 6, 384, ANIM_TARGET, 2 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish @@ -1049,7 +1049,7 @@ gBattleAnimGeneral_AquaRingHeal:: createsprite gGuardRingSpriteTemplate, ANIM_ATTACKER, 0 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATK_SIDE, 0, 2, 0, 10, RGB_WHITE + blend_color_cycle selector=F_PAL_ATK_SIDE, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -1059,7 +1059,7 @@ gBattleAnimMove_MagnetRise:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 0, 1, 5, 5, RGB(31, 31, 20) + blend_color_cycle selector=(F_PAL_BG | F_PAL_BATTLERS), delay=0, num_blends=1, initial_blend_y=5, target_blend_y=5, color=RGB(31, 31, 20) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -12, 4, 10, 10, 12, 6 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 @@ -1084,11 +1084,11 @@ gBattleAnimMove_MagnetRise:: delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 0, 1, 0, 0, RGB(31, 31, 20) + blend_color_cycle selector=(F_PAL_BG | F_PAL_BATTLERS), delay=0, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 20) delay 20 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 0, 1, 7, 7, RGB(31, 31, 20) + blend_color_cycle selector=(F_PAL_BG | F_PAL_BATTLERS), delay=0, num_blends=1, initial_blend_y=7, target_blend_y=7, color=RGB(31, 31, 20) waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 0, 1, 0, 0, RGB(31, 31, 20) + blend_color_cycle selector=(F_PAL_BG | F_PAL_BATTLERS), delay=0, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 20) waitforvisualfinish end @@ -1128,31 +1128,31 @@ gBattleAnimMove_FlareBlitz:: call SetImpactBackground createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=24, y=8, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-24, y=-16, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=8, y=4, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-16, y=19, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=18, y=-18, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 @@ -1216,7 +1216,7 @@ gBattleAnimMove_RockPolish:: loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_SPARKLE_3 setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 3, 0, 12, RGB_BLACK + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=3, initial_blend_y=0, target_blend_y=12, color=RGB_BLACK waitforvisualfinish loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER, 10, 7 createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -10, 3 @@ -1274,7 +1274,7 @@ gBattleAnimMove_RockPolish:: delay 1 createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 0, -17 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 3, 12, 0, RGB_BLACK + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=3, initial_blend_y=12, target_blend_y=0, color=RGB_BLACK waitforvisualfinish blendoff end @@ -1294,38 +1294,38 @@ gBattleAnimMove_PoisonJab:: delay 2 createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 10, 30, 10 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -7, 4, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-7, y=4, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -17, -27, 10 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -4, -6, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-4, y=-6, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 2, 31, 10 createvisualtask AnimTask_SwayMon, 5, 0, 3, 8192, 6, ANIM_TARGET createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB(16, 0, 16), 12, 0, 1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 6, 4, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=6, y=4, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, 15, -27, 10 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -6, 8, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-6, y=8, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -31, -2, 10 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, 6, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=12, y=6, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gPoisonJabProjectileSpriteTemplate, ANIM_TARGET, 2, -26, -18, 10 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -6, -8, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-6, y=-8, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 8, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=8, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -8, 0, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-8, y=0, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -7, -5, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-7, y=-5, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish call PoisonBubblesEffect @@ -1340,7 +1340,7 @@ gBattleAnimMove_DarkPulse:: waitbgfadein loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 20, 3 createvisualtask AnimTask_SwayMon, ANIM_TARGET, 0, 6, 0x0800, 8, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 4, 0, 12, RGB(30, 10, 13) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(30, 10, 13) call DarkPulseParticle call DarkPulseParticle call DarkPulseParticle @@ -1371,7 +1371,7 @@ DarkPulseParticle: gBattleAnimMove_NightSlash:: loadspritegfx ANIM_TAG_SLASH createvisualtask AnimTask_BlendNightSlash, 2, ANIM_TARGET, 2, 0, 8, 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 3, 0, 12, RGB_BLACK + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=3, initial_blend_y=0, target_blend_y=12, color=RGB_BLACK waitforvisualfinish createsprite gNightSlashLeftSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET @@ -1384,7 +1384,7 @@ gBattleAnimMove_NightSlash:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 18, 1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 3, 12, 0, RGB_BLACK + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=3, initial_blend_y=12, target_blend_y=0, color=RGB_BLACK waitforvisualfinish end @@ -1427,7 +1427,7 @@ gBattleAnimMove_AquaTail:: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET createsprite gAquaTailKnockOffSpriteTemplate, ANIM_ATTACKER, 2, -16, -16 delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=5, num_blends=1, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 createsprite gAquaTailHitSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -12, 10, 0, 3 @@ -1515,7 +1515,7 @@ gBattleAnimMove_XScissor:: playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=10, color2=RGB_BLACK, blend_y2=0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -1553,14 +1553,14 @@ gBattleAnimMove_DragonPulse:: loadspritegfx ANIM_TAG_DRAGON_PULSE monbg ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=7, color=RGB_BLACK waitforvisualfinish playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15 call DragonPulseParticle call DragonPulseParticle createvisualtask AnimTask_SwayMon, ANIM_TARGET, 0, 6, 2048, 4, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(30, 10, 13) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(30, 10, 13) call DragonPulseParticle call DragonPulseParticle call DragonPulseParticle @@ -1572,7 +1572,7 @@ gBattleAnimMove_DragonPulse:: call DragonPulseParticle waitforvisualfinish delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 7, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=7, target_blend_y=0, color=RGB_BLACK waitforvisualfinish blendoff clearmonbg ANIM_TARGET @@ -1592,8 +1592,8 @@ gBattleAnimMove_DragonRush:: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET createsprite gDragonRushSpriteTemplate, ANIM_ATTACKER, 3, -16, -16 delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=5, num_blends=1, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 1 waitforvisualfinish playsewithpan 131, SOUND_PAN_TARGET @@ -1612,7 +1612,7 @@ gBattleAnimMove_DragonRush:: gBattleAnimMove_PowerGem:: @ Copy of Hidden Power with background blackened loadspritegfx ANIM_TAG_POWER_GEM - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 1, 0, 7, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=7, color=RGB_BLACK waitforvisualfinish playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 @@ -1640,7 +1640,7 @@ gBattleAnimMove_PowerGem:: @ Copy of Hidden Power with background blackened createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 160 createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 192 createsprite gPowerGemOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 1, 7, 0, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=1, initial_blend_y=7, target_blend_y=0, color=RGB_BLACK waitforvisualfinish end @@ -1653,7 +1653,7 @@ gBattleAnimMove_DrainPunch:: setalpha 12, 8 playsewithpan SE_M_VITAL_THROW2, -64 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 delay 20 call MegaDrainAbsorbEffect @@ -1671,7 +1671,7 @@ gBattleAnimMove_VacuumWave:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_TARGET setalpha 12, 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=8, y=-8, relative_to=ANIM_TARGET, animation=2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0, RGB_WHITE, 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 @@ -1709,7 +1709,7 @@ gBattleAnimMove_EnergyBall:: loadspritegfx ANIM_TAG_ENERGY_BALL monbg ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 8, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=8, color=RGB_BLACK waitforvisualfinish delay 15 createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_MIST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 5, 0, 5 @@ -1717,7 +1717,7 @@ gBattleAnimMove_EnergyBall:: waitforvisualfinish playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 8, 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 8, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=8, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -1730,7 +1730,7 @@ gBattleAnimMove_BraveBird:: monbg ANIM_ATTACKER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE delay 4 - createvisualtask AnimTask_AttackerFadeToInvisible, 5, 0 + attacker_fade_to_invisible priority=5, step_delay=0 waitforvisualfinish createvisualtask SoundTask_PlaySE2WithPanning, 5, 238, SOUND_PAN_ATTACKER createsprite gSkyAttackBirdSpriteTemplate, ANIM_TARGET, 2 @@ -1738,7 +1738,7 @@ gBattleAnimMove_BraveBird:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 10, 0, 18, 1 createvisualtask SoundTask_PlaySE1WithPanning, 5, 141, SOUND_PAN_TARGET delay 20 - createvisualtask AnimTask_AttackerFadeFromInvisible, 5, 1 + attacker_fade_from_invisible priority=5, step_delay=1 delay 2 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 15, 0, RGB_WHITE waitforvisualfinish @@ -1758,21 +1758,21 @@ gBattleAnimMove_EarthPower:: waitbgfadein loopsewithpan 145, SOUND_PAN_TARGET 11, 3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=5, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -10, -15 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-10, y=-15 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=0, y=25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 15, 5 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=15, y=5 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -25, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-25, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 30, 30 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=30, y=30 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, -27, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=-27, y=25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 0, 8 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=0, y=8 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 66, 0, 0, 4 waitforvisualfinish @@ -1787,8 +1787,8 @@ gBattleAnimMove_Switcheroo:: waitbgfadein loadspritegfx ANIM_TAG_ITEM_BAG loadspritegfx ANIM_TAG_SPEED_DUST - createsprite gTrickBagSpriteTemplate, ANIM_ATTACKER, 2, -39, 80 - createsprite gTrickBagSpriteTemplate, ANIM_ATTACKER, 2, -39, 208 + create_trick_bag_sprite ANIM_ATTACKER, 2, initial_y=-39, wave_offset=80 + create_trick_bag_sprite ANIM_ATTACKER, 2, initial_y=-39, wave_offset=208 delay 16 playsewithpan SE_M_SKETCH, 0 createvisualtask AnimTask_StretchTargetUp, 3 @@ -1839,7 +1839,7 @@ GigaImpactContinuity: delay 11 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -16, 0, 0, 4 @@ -1879,43 +1879,43 @@ gBattleAnimMove_BulletPunch:: monbg ANIM_TARGET setalpha 12, 8 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -8, 0, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -16, 8, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-16, y=8, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, -16, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-16, y=8, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=16, y=8, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 24, 0, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=24, y=0, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 24, 16, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 24, 16, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=24, y=16, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -24, 16, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -24, 16, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-24, y=16, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -24, -8, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -24, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-24, y=-8, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -24, 8, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -24, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-24, y=8, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 waitforvisualfinish @@ -1931,7 +1931,7 @@ gBattleAnimMove_Avalanche:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_ICE_CHUNK monbg ANIM_DEF_PARTNER - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 + shake_mon_or_platform velocity=7, shake_timer=1, shake_duration=11, type=1 createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -5, 1, -5, 1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 2 @@ -1994,10 +1994,10 @@ gBattleAnimMove_IceShard:: delay 1 createsprite gIceShardSpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 delay 4 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, -31, 0, 7, RGB(0, 20, 31) + simple_palette_blend selector=F_PAL_TARGET, delay=-31, initial_blend_y=0, target_blend_y=7, color=RGB(0, 20, 31) createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 25, 1 call IceCrystalEffectShort - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31) + simple_palette_blend selector=F_PAL_TARGET, delay=5, initial_blend_y=7, target_blend_y=0, color=RGB(0, 20, 31) waitforvisualfinish blendoff clearmonbg ANIM_TARGET @@ -2014,12 +2014,12 @@ gBattleAnimMove_ShadowClaw:: createsprite gHorizontalLungeSpriteTemplate ANIM_ATTACKER, 2, 6, 4 delay 4 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 18, 1 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, -10, 0 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, 10, 0 + create_claw_slash_sprite ANIM_TARGET, 2, x=-10, y=-10, animation=0 + create_claw_slash_sprite ANIM_TARGET, 2, x=-10, y=10, animation=0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET delay 12 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, -10, 1 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, 10, 1 + create_claw_slash_sprite ANIM_TARGET, 2, x=10, y=-10, animation=1 + create_claw_slash_sprite ANIM_TARGET, 2, x=10, y=10, animation=1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish restorebg @@ -2035,9 +2035,9 @@ gBattleAnimMove_ThunderFang:: loadspritegfx ANIM_TAG_SHARP_TEETH monbg ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 delay 1 @@ -2046,16 +2046,16 @@ gBattleAnimMove_ThunderFang:: createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, 16 delay 1 playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=-32, animation=0, x_velocity=0/256, y_velocity=819/256, half_duration=10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=32, animation=4, x_velocity=0/256, y_velocity=-819/256, half_duration=10 delay 1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK delay 20 waitforvisualfinish clearmonbg ANIM_TARGET @@ -2069,7 +2069,7 @@ gBattleAnimMove_IceFang:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=7, color=RGB_BLACK createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(12, 26, 31) delay 20 playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET @@ -2083,17 +2083,17 @@ gBattleAnimMove_IceFang:: createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 160 createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 224 playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=-32, animation=0, x_velocity=0/256, y_velocity=819/256, half_duration=10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=32, animation=4, x_velocity=0/256, y_velocity=-819/256, half_duration=10 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 7, 1 delay 15 call IceCrystalEffectShort delay 5 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(12, 26, 31) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=7, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -2111,12 +2111,12 @@ gBattleAnimMove_FireFang:: createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 64 createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 128 createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 196 - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=-32, animation=0, x_velocity=0/256, y_velocity=819/256, half_duration=10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=32, animation=4, x_velocity=0/256, y_velocity=-819/256, half_duration=10 playsewithpan SE_M_BITE, SOUND_PAN_TARGET delay 10 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 7, 1 call FireSpreadEffect delay 4 @@ -2140,14 +2140,14 @@ gBattleAnimMove_ShadowSneak:: waitforvisualfinish playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3 - createvisualtask AnimTask_AttackerFadeToInvisible, 0x2, 0x1 + attacker_fade_to_invisible priority=0x2, step_delay=0x1 waitforvisualfinish clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER delay 1 createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 delay 48 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 15, RGB_BLACK + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=15, color=RGB_BLACK createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 call ShadowSneakMovement createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 @@ -2238,7 +2238,7 @@ gBattleAnimMove_PsychoCut:: createsprite gPsychoCutSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 - createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20 + create_cross_impact_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=1, duration=20 createvisualtask AnimTask_BlendBattleAnimPal, 1, F_PAL_BG, 2, 4, 0, RGB_BLACK createvisualtask AnimTask_BlendBattleAnimPal, 1, F_PAL_ATTACKER, 2, 10, 0, RGB(20, 12, 23) clearmonbg ANIM_TARGET @@ -2251,7 +2251,7 @@ gBattleAnimMove_ZenHeadbutt:: loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=4, color=RGB_BLACK waitforvisualfinish createsprite gZenHeadbuttSpriteTemplate, ANIM_ATTACKER, 2, 0 delay 18 @@ -2272,7 +2272,7 @@ gBattleAnimMove_ZenHeadbutt:: createsprite gAquaTailHitSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=4, initial_blend_y=4, target_blend_y=0, color=RGB_BLACK clearmonbg ANIM_ATTACKER blendoff delay 1 @@ -2280,29 +2280,29 @@ gBattleAnimMove_ZenHeadbutt:: gBattleAnimMove_MirrorShot:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK + metallic_shine permanent=1 waitforvisualfinish loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 10, RGB_WHITEALPHA createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(21, 21, 21) waitforvisualfinish - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 10, 0, RGB_WHITEALPHA @@ -2361,17 +2361,17 @@ gBattleAnimMove_RockClimb:: createvisualtask AnimTask_Rollout, 2, 1 waitforvisualfinish createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, 0, 1, 30, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -15, 8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-15, y=8, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, -12, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-5, y=-12, relative_to=ANIM_TARGET, animation=1 delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -32, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=-32, relative_to=ANIM_TARGET, animation=1 delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 5, -52, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=5, y=-52, relative_to=ANIM_TARGET, animation=1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, -25, 16, 1, 4 delay 4 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 0, 3, 6, 1 @@ -2434,38 +2434,38 @@ gBattleAnimMove_DracoMeteor:: call DracoMeteor2 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 32 @; For Meteor 1 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=40, y=32@; For Meteor 1 createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 delay 7 call DracoMeteor3 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 32 @; For Meteor 2 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=-8, y=32@; For Meteor 2 delay 7 call DracoMeteor4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 32 @; For Meteor 3 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=21, y=32@; For Meteor 3 delay 7 call DracoMeteor1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 32 @; For Meteor 4 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=-8, y=32@; For Meteor 4 createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 delay 7 call DracoMeteor2 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 32 @; For Meteor 1 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=40, y=32@; For Meteor 1 delay 7 call DracoMeteor3 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 32 @; For Meteor 3 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=21, y=32@; For Meteor 3 delay 15 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 32 @; For Meteor 3 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=21, y=32@; For Meteor 3 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 2, 1 delay 7 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB(1, 2, 11) @@ -2506,16 +2506,16 @@ gBattleAnimMove_Discharge:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 20) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=5, target_blend_y=5, color=RGB(31, 31, 20) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 20) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 20) delay 10 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 20) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=5, target_blend_y=5, color=RGB(31, 31, 20) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 @@ -2532,34 +2532,34 @@ gBattleAnimMove_Discharge:: waitforvisualfinish createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(0, 0, 23) waitforvisualfinish - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA @@ -2610,7 +2610,7 @@ DischargeElectrify: gBattleAnimMove_LavaPlume:: loadspritegfx ANIM_TAG_FIRE_PLUME loopsewithpan 152, SOUND_PAN_ATTACKER, 9, 2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 32, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 32, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATK_PARTNER, 1, 0, 32, 1 @@ -2634,7 +2634,7 @@ gBattleAnimMove_LeafStorm:: monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 12, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=12, color=RGB(13, 31, 12) waitforvisualfinish splitbgprio ANIM_TARGET setalpha 12, 8 @@ -2716,7 +2716,7 @@ gBattleAnimMove_LeafStorm:: createsprite gBattleAnimSpriteTemplate_LeafStorm, ANIM_ATTACKER, 2, 26, 8, 12, 20, 27, 0, 0 delay 3 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 0, -36, 10 createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 24, -12, 10 createsprite gBattleAnimSpriteTemplate_LeafStorm2, ANIM_TARGET, 2, 1, 1, 24, 12, 10 @@ -2734,7 +2734,7 @@ gBattleAnimMove_LeafStorm:: waitforvisualfinish blendoff delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 12, 0, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=12, target_blend_y=0, color=RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -2760,7 +2760,7 @@ PowerWhipOnPlayer: PowerWhipContinue: waitbgfadeout delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 playsewithpan SE_BANG, SOUND_PAN_TARGET waitforvisualfinish @@ -2792,7 +2792,7 @@ gBattleAnimMove_RockWrecker:: playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gReallyBigRockBlastRockSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 25, 257 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 131, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 130, 0, 0, 20, 24, 14, 2 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 8, 0, 40, 1 @@ -2812,8 +2812,8 @@ gBattleAnimMove_CrossPoison:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 10, RGB_BLACK, 10 - createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=10 + create_cross_impact_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=1, duration=20 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 waitforvisualfinish call PoisonBubblesEffect @@ -2883,7 +2883,7 @@ gBattleAnimMove_IronHead:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK + metallic_shine permanent=1 waitforvisualfinish createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -2894,10 +2894,10 @@ gBattleAnimMove_IronHead:: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 7, 1 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE + set_original_pal battler=ANIM_ATTACKER waitforvisualfinish end @@ -3007,17 +3007,17 @@ gBattleAnimMove_StoneEdge:: delay 2 createsprite gStoneEdgeSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, 49, 1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-32, y=-16, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=32, y=20, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -3063,7 +3063,7 @@ gBattleAnimMove_GrassKnot:: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 createsprite gGrassKnotSpriteTemplate, ANIM_TARGET, 2, -18, 19, 40, 8, 160, 0 delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-8, y=8, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 6, 384, ANIM_TARGET, 2 playsewithpan SE_M_VITAL_THROW2 SOUND_PAN_TARGET waitforvisualfinish @@ -3253,7 +3253,7 @@ gBattleAnimMove_ChargeBeam:: loadspritegfx ANIM_TAG_ELECTRICITY loadspritegfx ANIM_TAG_SPARK_2 setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=4, color=RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 20, 0, 2 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER @@ -3288,7 +3288,7 @@ gBattleAnimMove_ChargeBeam:: delay 20 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(31, 31, 22) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=4, initial_blend_y=4, target_blend_y=0, color=RGB_BLACK blendoff end @@ -3317,7 +3317,7 @@ gBattleAnimMove_WoodHammer:: WoodHammerImpact: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gWoodHammerSmallSpriteTemplate, ANIM_TARGET, 2, 0, 0, 20, 24, 14, 1 createsprite gWoodHammerSmallSpriteTemplate, ANIM_TARGET, 2, 5, 0, -20, 24, 14, 0 createsprite gWoodHammerSmallSpriteTemplate, ANIM_TARGET, 2, 0, 5, 20, -24, 14, 1 @@ -3389,18 +3389,18 @@ gBattleAnimMove_AttackOrder:: createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 20, 255, 15, 32, 0 createsprite gAttackOrderParticleSpriteTemplate, ANIM_TARGET, 2, 110, 10, 8, 32, 20 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-32, y=-16, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=32, y=20, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -3491,7 +3491,7 @@ gBattleAnimMove_HeadSmash:: call SetImpactBackground createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 0 + create_flashing_hitsplat_sprite ANIM_TARGET, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 32, 3, 4 createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 8, 31, 2, 2 @@ -3509,7 +3509,7 @@ gBattleAnimMove_DoubleHit:: setalpha 12, 8 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 8 @@ -3520,7 +3520,7 @@ gBattleAnimMove_DoubleHit:: @ I don't know, but I'm not gonna argue with it createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 8 @@ -3609,7 +3609,7 @@ gBattleAnimMove_LunarDance:: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_HOLLOW_ORB setalpha 0, 16 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK waitforvisualfinish createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 120, 56 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -3630,12 +3630,12 @@ gBattleAnimMove_LunarDance:: playsewithpan 203, SOUND_PAN_ATTACKER delay 8 createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB(0, 0, 19), 14, 0, 3 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 128 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 170 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 213 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=43/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=85/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=128/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=170/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=213/256 delay 30 playsewithpan 203, SOUND_PAN_ATTACKER delay 30 @@ -3678,13 +3678,11 @@ gBattleAnimMove_MagmaStorm:: loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 5, 8 createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_ATTACKER | F_PAL_TARGET), 4, 2, 2, 0, 12, RGB(22, 9, 7) + blend_color_cycle selector=(F_PAL_ATTACKER | F_PAL_TARGET), delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(22, 9, 7) call FireSpinEffect call FireSpinEffect - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_ATTACKER | F_PAL_TARGET), 4, 2, 2, 0, 12, RGB(22, 9, 7) call FireSpinEffect call FireSpinEffect - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_ATTACKER | F_PAL_TARGET), 4, 2, 2, 0, 12, RGB(22, 9, 7) call FireSpinEffect restorebg waitbgfadeout @@ -3778,22 +3776,22 @@ gBattleAnimMove_SeedFlare:: delay 30 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 40, 1 createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 10, 0x900, 0x60, 1 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, 20, 1 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, -20, 1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=0x16, wave_amplitude=20, target_both=1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=0x16, wave_amplitude=-20, target_both=1 delay 2 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x5a, 0x800, 0x60, 1 delay 8 createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x32, 0xa00, 0x60, 1 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, 20, 1 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, -20, 1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=0x16, wave_amplitude=20, target_both=1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=0x16, wave_amplitude=-20, target_both=1 delay 2 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 20, 0x900, 0x60, 1 delay 8 createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x46, 0x7c0, 0x60, 1 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, 20, 1 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 0x16, -20, 1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=0x16, wave_amplitude=20, target_both=1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=0x16, wave_amplitude=-20, target_both=1 delay 2 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET delay 8 @@ -3876,19 +3874,19 @@ ShadowForceWaitEnd: ShadowForcePrep: monbg ANIM_ATTACKER playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 16, RGB_BLACK - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, FALSE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATK_PARTNER, FALSE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_DEF_PARTNER, FALSE + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK + set_grayscale_pal battler=ANIM_TARGET + set_grayscale_pal battler=ANIM_ATTACKER + set_grayscale_pal battler=ANIM_ATK_PARTNER + set_grayscale_pal battler=ANIM_DEF_PARTNER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3 - createvisualtask AnimTask_AttackerFadeToInvisible, 2, 1 + attacker_fade_to_invisible step_delay=1 delay 80 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_BLACK - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, TRUE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATK_PARTNER, TRUE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_DEF_PARTNER, TRUE + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK + set_original_pal battler=ANIM_TARGET + set_original_pal battler=ANIM_ATTACKER + set_original_pal battler=ANIM_ATK_PARTNER + set_original_pal battler=ANIM_DEF_PARTNER waitforvisualfinish clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER @@ -3905,7 +3903,7 @@ ShadowForceAttack: createvisualtask AnimTask_NightShadeClone, 5, 85 delay 70 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 0, 2, 0, 13, RGB_BLACK + blend_color_cycle selector=F_PAL_TARGET, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=13, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -4061,7 +4059,7 @@ gBattleAnimMove_Psyshock:: setalpha 8, 8 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_WHITE waitforvisualfinish delay 10 call PsyshockConverge @@ -4191,7 +4189,7 @@ gBattleAnimMove_RagePowder:: call RagePowderSprinkle call RagePowderSprinkle call RagePowderSprinkle - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -4274,7 +4272,7 @@ gBattleAnimMove_FlameBurst:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_EXPLOSION playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 18 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 16, 1 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 0, 1, 0 @@ -4317,12 +4315,12 @@ gBattleAnimMove_QuiverDance:: playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER delay 8 createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB_GREEN, 14, 0, 3 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 128 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 170 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 213 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=43/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=85/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=128/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=170/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=213/256 delay 30 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER delay 30 @@ -4336,7 +4334,7 @@ gBattleAnimMove_HeavySlam:: loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + metallic_shine permanent=0 waitforvisualfinish monbg ANIM_TARGET setalpha 12, 8 @@ -4346,7 +4344,7 @@ gBattleAnimMove_HeavySlam:: delay 11 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2 delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -28, 0, 0, 3 @@ -4445,7 +4443,7 @@ gBattleAnimMove_Soak:: delay 30 playsewithpan SE_M_WATERFALL, 63 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 17, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB_BLUE + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB_BLUE createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0 @@ -4482,7 +4480,7 @@ gBattleAnimMove_FlameCharge:: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 5 delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 6, 0, 8, 1 call FireSpreadEffect playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_ATTACKER @@ -4499,12 +4497,12 @@ FlameChargeSwirl: gBattleAnimMove_Coil:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 + create_constrict_binding_sprite ANIM_TARGET, 4, initial_x=0x0, initial_y=0x10, affine_animation=0x0, squeezes=0x2 delay 7 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x0, 0x2 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x8, 0x1, 0x2 + create_constrict_binding_sprite ANIM_TARGET, 3, initial_x=0x0, initial_y=0x0, affine_animation=0x0, squeezes=0x2 + create_constrict_binding_sprite ANIM_TARGET, 2, initial_x=0x0, initial_y=0x8, affine_animation=0x1, squeezes=0x2 delay 7 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfff8, 0x1, 0x2 + create_constrict_binding_sprite ANIM_TARGET, 3, initial_x=0x0, initial_y=0xfff8, affine_animation=0x1, squeezes=0x2 delay 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 6, 1 delay 20 @@ -4521,7 +4519,7 @@ gBattleAnimMove_LowSweep:: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 createsprite gSlidingKickSpriteTemplate, ANIM_TARGET, 2, -24, 14, 40, 8, 160, 0 delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-8, y=8, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 @@ -4534,7 +4532,7 @@ gBattleAnimMove_AcidSpray:: playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 33 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(30, 0, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(30, 0, 31) playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 10, 15, 55, FALSE createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -20, 15, 55, FALSE @@ -4703,7 +4701,7 @@ gBattleAnimMove_ChipAway:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 delay 4 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2 SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -4728,7 +4726,7 @@ gBattleAnimMove_ClearSmog:: call ClearSmogCloud delay 120 loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 18, 2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB_WHITE + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB_WHITE delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1 waitforvisualfinish @@ -4761,10 +4759,10 @@ gBattleAnimMove_StoredPower:: delay 10 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, 0, 1, 8, 1, 0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -12, 10, 1, 1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-12, y=10, relative_to=1, animation=1 delay 5 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, -10, 1, 1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=12, y=-10, relative_to=1, animation=1 waitforvisualfinish call UnsetPsychicBg waitforvisualfinish @@ -4774,7 +4772,7 @@ gBattleAnimMove_QuickGuard:: loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @hand loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles setalpha 12, 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 10, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB_WHITE delay 16 monbg ANIM_ATTACKER createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 14, 0, 8, ANIM_ATTACKER, 0 @@ -4821,7 +4819,7 @@ gBattleAnimMove_Scald:: call ScaldBeams call ScaldBeams call ScaldBeams - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 call ScaldHitSplats call ScaldBeams @@ -4869,7 +4867,7 @@ gBattleAnimMove_ShellSmash:: createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 waitforvisualfinish playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 visible ANIM_ATTACKER createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 20, 24, 14, 2 createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 5, 0, -20, 24, 14, 1 @@ -4889,26 +4887,26 @@ gBattleAnimMove_HealPulse:: loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB(13, 31, 12), 8 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -16, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-16, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 16, 32, -3, -1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=16, initial_y=32, velocity_y=-3, unused3=-1 delay 3 createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB(13, 31, 12), 8 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 32, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=32, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -32, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-32, initial_y=32, velocity_y=-3 delay 3 createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB(13, 31, 12), 8 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 0, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=0, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-8, initial_y=32, velocity_y=-3 delay 3 createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB(13, 31, 12), 8 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-8, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 24, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=24, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -24, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-24, initial_y=32, velocity_y=-3 waitforvisualfinish waitsound call HealingEffect2 @@ -4927,7 +4925,7 @@ gBattleAnimMove_Hex:: createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 2, 0, 37, 1 playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET delay 32 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(10, 2, 19) @;Deep purple + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(10, 2, 19)@;Deep purple createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 4 waitforvisualfinish clearmonbg ANIM_TARGET @@ -4961,7 +4959,7 @@ SkyDropUnleash: createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 delay 7 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 11, 1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -4989,7 +4987,7 @@ gBattleAnimMove_CircleThrow:: waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gCircleThrowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 @@ -5203,7 +5201,7 @@ gBattleAnimMove_FinalGambit:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK @Darken waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_WHITE waitforvisualfinish playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER createsprite gFinalGambitBlueYawnTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x25 @@ -5315,7 +5313,7 @@ gBattleAnimMove_WaterPledge:: panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 11, RGB_BLUE + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_BLUE createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 createsprite gWaterPledgeOrbSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 @@ -5428,7 +5426,7 @@ gBattleAnimMove_FirePledge:: panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 createsprite gFirePledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 @@ -5574,7 +5572,7 @@ GrassPledgeMiddleFountain: playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 0, 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 11, RGB_GREEN + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_GREEN createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 37, 1 createsprite gGrassPledgeSpriteTemplate, ANIM_TARGET, 3, 0, 10, -40, 2 @@ -5649,15 +5647,15 @@ gBattleAnimMove_StruggleBug:: createsprite gMovementWavesSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 2 loopsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER, 0x8, 0x2 waitforvisualfinish - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0 createvisualtask AnimTask_ShakeTargetPartnerBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB(31, 16, 2) delay 5 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=1 delay 5 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=1 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -5721,7 +5719,7 @@ gBattleAnimMove_DragonTail:: createsprite gSlamHitSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -12, 10, 0, 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 call TailWhackDown @@ -5735,7 +5733,7 @@ gBattleAnimMove_DragonTail:: blendoff end TailWhackDown: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -10, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-10, y=-8, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 0x1b, 2, 3 createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 8, 28, 3, 4 @@ -5755,7 +5753,7 @@ gBattleAnimMove_WorkUp:: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -18, 26, 3 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 18, 26, 3 delay 14 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(31, 2, 4) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(31, 2, 4) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -13, 26, 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, 13, 26, 2 @@ -5784,7 +5782,7 @@ gBattleAnimMove_Electroweb:: monbg ANIM_DEF_PARTNER delay 0 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPIDER_WEB, 0, 6, 6, RGB(31, 30, 1) - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 0, 9, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=9, color=RGB_BLACK waitforvisualfinish splitbgprio ANIM_TARGET waitforvisualfinish @@ -5793,7 +5791,7 @@ gBattleAnimMove_Electroweb:: waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 9, 0, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=2, initial_blend_y=9, target_blend_y=0, color=RGB_BLACK call ElectricityEffect_OnTargets gBattleAnimMove_ElectrowebWait:: waitforvisualfinish @@ -5820,7 +5818,7 @@ gBattleAnimMove_WildCharge:: delay 11 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 16, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET call ElectricityEffect @@ -5851,37 +5849,37 @@ gBattleAnimMove_DrillRun:: playse 0x14 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x0, y=0x0, relative_to=0x1, animation=0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x2, 0x1, 0x3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x0, y=0x2, relative_to=0x1, animation=0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xfffc, 0x3, 0x1, 0x3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0xfffc, y=0x3, relative_to=0x1, animation=0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xfff8, 0xfffb, 0x1, 0x3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0xfff8, y=0xfffb, relative_to=0x1, animation=0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x4, 0xfff4, 0x1, 0x3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x4, y=0xfff4, relative_to=0x1, animation=0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x0, 0x1, 0x3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x10, y=0x0, relative_to=0x1, animation=0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x5, 0x12, 0x1, 0x3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x5, y=0x12, relative_to=0x1, animation=0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffef, 0xc, 0x1, 0x2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0xffef, y=0xc, relative_to=0x1, animation=0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffeb, 0xfff1, 0x1, 0x2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0xffeb, y=0xfff1, relative_to=0x1, animation=0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x8, 0xffe5, 0x1, 0x2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x8, y=0xffe5, relative_to=0x1, animation=0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x0, 0x1, 0x2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x20, y=0x0, relative_to=0x1, animation=0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x2 @@ -5933,7 +5931,7 @@ gBattleAnimMove_HornLeech:: createsprite gHornLeechHornTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x25 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x0, y=0x0, relative_to=0x1, animation=0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET call GigaDrainAbsorbEffect waitforvisualfinish @@ -5951,7 +5949,7 @@ gBattleAnimMove_SacredSword:: playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 delay 22 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_SWORD, delay=2, num_blends=2, color1=RGB(18, 31, 31), blend_y1=16, color2=0, blend_y2=0 waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -5990,11 +5988,11 @@ gBattleAnimMove_HeatCrash:: playsewithpan SE_SUCCESS, SOUND_PAN_TARGET createsprite gHeatCrashEruptionRockTemplate, ANIM_ATTACKER, 3, 0x0, 0xffe0, 0xf delay 19 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=-8, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 4, 9, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=10, y=-8, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 5, 1 createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xfff4, 0x20, 0x3, 0x4 @@ -6042,13 +6040,13 @@ gBattleAnimMove_Steamroller:: setalpha 12, 8 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 6, 3 delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -28, 0, 0, 3 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 3, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=0, y=3, relative_to=ANIM_TARGET, animation=0 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 10, 6, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=10, y=6, relative_to=ANIM_TARGET, animation=0 delay 1 waitforvisualfinish createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 @@ -6134,14 +6132,14 @@ gBattleAnimMove_Psystrike:: monbg ANIM_TARGET setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_RED waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1 createvisualtask AnimTask_ScaleMonAndRestore, 5, -9, -9, 15, ANIM_TARGET, 1 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -6218,7 +6216,7 @@ gBattleAnimMove_HeadCharge:: createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 2, 0, 4, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x2 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x0, y=0x0, relative_to=0x1, animation=0x1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish restorebg @@ -6234,13 +6232,13 @@ gBattleAnimMove_GearGrind:: createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x0, 0x333, 0x333, 0xa createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x0, 0xfccd, 0xfccd, 0xa delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 5, 2 waitforvisualfinish createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe0, 0x0, 0xfccd, 0x333, 0xa createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x20, 0x0, 0x333, 0xfccd, 0xa delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=8, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 8, 4, 2 waitforvisualfinish stopsound @@ -6859,18 +6857,18 @@ gBattleAnimMove_RelicSong:: createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-32, y=-16, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 delay 5 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=32, y=20, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -6889,7 +6887,7 @@ gBattleAnimMove_SecretSword:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 16, RGB_BLACK createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 delay 22 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_SWORD, delay=2, num_blends=2, color1=RGB(18, 31, 31), blend_y1=16, color2=0, blend_y2=0 waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -6963,7 +6961,7 @@ gBattleAnimMove_BoltStrike:: monbg ANIM_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(30, 31, 1) createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 32, 1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET @@ -7203,18 +7201,18 @@ gBattleAnimMove_Snarl:: createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x18, 0xffe8, 0x1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0xffe8, 0x0 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-32, y=-16, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=32, y=20, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish call UnsetPsychicBg @@ -7331,8 +7329,8 @@ gBattleAnimMove_VCreate:: createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, 0x1, 0x1 waitforvisualfinish createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xfff6, 0x1 + create_claw_slash_sprite ANIM_TARGET, 2, x=0xfff6, y=0xfff6, animation=0x0 + create_claw_slash_sprite ANIM_TARGET, 2, x=0xa, y=0xfff6, animation=0x1 waitforvisualfinish createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 waitforvisualfinish @@ -7367,7 +7365,7 @@ gBattleAnimMove_FusionFlare:: playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call FusionFlareBuff delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x8, 0x1, 0x0 delay 8 @@ -7381,7 +7379,7 @@ gBattleAnimMove_FusionFlare:: createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x50, 0x3c, 0xa, 0x3, 0x14, 0x32, 0x0 createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x8c, 0x64, 0x10, 0x1, 0x14, 0x1e, 0x1 delay 41 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED delay 5 createsprite gFusionFlareRedRingTemplate, ANIM_ATTACKER, 3, 0x1, 0x1, 0x1, 0x1, 0x1F, 0x8 createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x64, 0x64, 0x8, 0x1, 0x14, 0x28, 0x0 @@ -7576,7 +7574,7 @@ gBattleAnimMove_StickyWeb:: loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 0, 9, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=9, color=RGB_BLACK waitforvisualfinish splitbgprio ANIM_TARGET loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 9, 6 @@ -7606,7 +7604,7 @@ gBattleAnimMove_StickyWeb:: waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 9, 0, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=2, initial_blend_y=9, target_blend_y=0, color=RGB_BLACK end gBattleAnimMove_FellStinger:: @@ -7618,9 +7616,9 @@ gBattleAnimMove_FellStinger:: waitbgfadein delay 0 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20 + create_linear_stinger_sprite ANIM_TARGET, 2, initial_x=20, initial_y=0, target_x=-8, target_y=0, duration=20 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 5, 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET waitforvisualfinish @@ -7646,7 +7644,7 @@ PhantomForcePrep: delay 0 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3 - createvisualtask AnimTask_AttackerFadeToInvisible, 2, 1 + attacker_fade_to_invisible step_delay=1 waitforvisualfinish clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER @@ -7670,23 +7668,23 @@ PhantomForceAttack: delay 30 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(0, 0, 23) waitforvisualfinish - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 0, 2, 0, 13, RGB_PURPLE + blend_color_cycle selector=F_PAL_TARGET, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=13, color=RGB_PURPLE waitforvisualfinish delay 1 playsewithpan SOUND_PAN_ATTACKER, 192 @@ -7710,13 +7708,13 @@ gBattleAnimMove_TrickOrTreat:: delay 10 playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB(10, 2, 19) + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB(10, 2, 19) waitforvisualfinish playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaryFace, 5 delay 13 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(10, 2, 19) @;Deep purple + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(10, 2, 19)@;Deep purple playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 14, 1 @@ -7731,7 +7729,7 @@ gBattleAnimMove_NobleRoar:: monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER setalpha 8, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 8, RGB(4, 0, 0) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=8, color=RGB(4, 0, 0) waitforvisualfinish createvisualtask SoundTask_PlayCryHighPitch, 2, ANIM_ATTACKER, 2 createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, ANIM_ATTACKER, 1 @@ -7739,7 +7737,7 @@ gBattleAnimMove_NobleRoar:: delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 9, 1 delay 10 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 8, 0, RGB(4, 0, 0) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=8, target_blend_y=0, color=RGB(4, 0, 0) waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -7769,7 +7767,7 @@ gBattleAnimMove_ParabolicCharge:: loadspritegfx ANIM_TAG_ORBS monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 6, RGB(18, 16, 3) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=6, color=RGB(18, 16, 3) waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 3, 20, 20 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER @@ -7797,7 +7795,7 @@ ParabolicChargeHeal: clearmonbg ANIM_ATTACKER waitforvisualfinish call HealingEffect - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 6, 0, RGB(18, 16, 3) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=6, target_blend_y=0, color=RGB(18, 16, 3) waitforvisualfinish blendoff end @@ -7865,11 +7863,11 @@ gBattleAnimMove_PetalBlizzard:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 120, 70, 5, 70, 30 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=120, distance_y=70, wave_period=5, wave_amplitude=70, speed_up_on_frame=30 delay 1 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x37, 0x6, 0x3c, 0x19 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=0x73, distance_y=0x37, wave_period=0x6, wave_amplitude=0x3c, speed_up_on_frame=0x19 delay 1 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x3c, 0x7, 0x3c, 0x1e + create_twister_leaf_sprite ANIM_TARGET, 2, duration=0x73, distance_y=0x3c, wave_period=0x7, wave_amplitude=0x3c, speed_up_on_frame=0x1e createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x73, 0x37, 0xA, 0x3c, 0x1e delay 3 createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x64, 0x32, 0x4, 0x32, 0x1A @@ -7879,26 +7877,26 @@ gBattleAnimMove_PetalBlizzard:: createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x73, 0x28, 0xA, 0x30, 0x1E delay 3 createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x78, 0x1E, 0x6, 0x2d, 0x19 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x23, 0xA, 0x3c, 0x1e + create_twister_leaf_sprite ANIM_TARGET, 2, duration=0x73, distance_y=0x23, wave_period=0xA, wave_amplitude=0x3c, speed_up_on_frame=0x1e delay 3 createsprite gPetalBlizzardTwister2Template, ANIM_TARGET, 2, 0x69, 0x14, 0x8, 0x28, 0x0 delay 3 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xff, 0xf, 0x20, 0x0 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x6e, 0xA, 0x8, 0x20, 0x14 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=0x14, distance_y=0xff, wave_period=0xf, wave_amplitude=0x20, speed_up_on_frame=0x0 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=0x6e, distance_y=0xA, wave_period=0x8, wave_amplitude=0x20, speed_up_on_frame=0x14 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-32, y=-16, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATK_PARTNER, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=32, y=20, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -7910,7 +7908,7 @@ gBattleAnimMove_FreezeDry:: setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_IMPACT - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=7, color=RGB_BLACK createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(12, 26, 31) delay 20 playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET @@ -7935,7 +7933,7 @@ gBattleAnimMove_FreezeDry:: waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(12, 26, 31) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=7, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -7978,16 +7976,16 @@ gBattleAnimMove_PartingShot:: gBattleAnimMove_TopsyTurvy:: loadspritegfx ANIM_TAG_SWEAT_DROP setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + simple_palette_blend unused_anim_battler=ANIM_TARGET, selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=4, color=RGB_BLACK waitforvisualfinish createvisualtask AnimTask_RotateVertically, 2, ANIM_TARGET, 768 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, F_PAL_TARGET, 5, 0, 8, RGB(9, 0, 16) + simple_palette_blend unused_anim_battler=ANIM_TARGET, selector=F_PAL_TARGET, delay=5, initial_blend_y=0, target_blend_y=8, color=RGB(9, 0, 16) playsewithpan SE_ROTATING_GATE, SOUND_PAN_TARGET delay 116 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, F_PAL_TARGET, 5, 8, 0, RGB(9, 0, 16) + simple_palette_blend unused_anim_battler=ANIM_TARGET, selector=F_PAL_TARGET, delay=5, initial_blend_y=8, target_blend_y=0, color=RGB(9, 0, 16) playsewithpan SE_FALL, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, F_PAL_BG, 2, 4, 0, RGB_BLACK + simple_palette_blend unused_anim_battler=ANIM_TARGET, selector=F_PAL_BG, delay=2, initial_blend_y=4, target_blend_y=0, color=RGB_BLACK waitforvisualfinish blendoff end @@ -8010,7 +8008,7 @@ gBattleAnimMove_DrainingKiss:: createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -128, -22 createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 delay 5 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 waitforvisualfinish @@ -8066,7 +8064,7 @@ gBattleAnimMove_CraftyShield:: createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x18, 0x18 delay 20 playsewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_CONVERSION, 1, 1, RGB(31, 31, 13), 12, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_CONVERSION, delay=1, num_blends=1, color1=RGB(31, 31, 13), blend_y1=12, color2=0, blend_y2=0 delay 6 createvisualtask AnimTask_ConversionAlphaBlend, 0x5 waitforvisualfinish @@ -8084,23 +8082,23 @@ gBattleAnimMove_FlowerShield:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 8, RGB(29, 19, 27) waitforvisualfinish playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x8, 0x64 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x8, 0x64 + create_petal_dance_big_flower_sprite ANIM_ATTACKER, 2, initial_x=0x0, initial_y=0xffe8, target_y=0x8, duration=0x8c + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0x10, initial_y=0xffe8, target_y=0x8, duration=0x64 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0xfff0, initial_y=0xffe8, target_y=0x8, duration=0x64 delay 15 - createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe8, 0x8, 0x64 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe8, 0x8, 0x64 + create_petal_dance_big_flower_sprite ANIM_ATTACKER, 2, initial_x=0x0, initial_y=0xffe8, target_y=0x8, duration=0x8c + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0x20, initial_y=0xffe8, target_y=0x8, duration=0x64 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0xffe0, initial_y=0xffe8, target_y=0x8, duration=0x64 delay 15 - createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0xffe8, 0x8, 0x64 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xffe8, 0x8, 0x64 + create_petal_dance_big_flower_sprite ANIM_ATTACKER, 2, initial_x=0x0, initial_y=0xffe8, target_y=0x8, duration=0x8c + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0x18, initial_y=0xffe8, target_y=0x8, duration=0x64 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0xffe8, initial_y=0xffe8, target_y=0x8, duration=0x64 delay 30 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x0, 0x64 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x0, 0x64 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0x10, initial_y=0xffe8, target_y=0x0, duration=0x64 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0xfff0, initial_y=0xffe8, target_y=0x0, duration=0x64 delay 30 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff0, 0xe, 0x50 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xfff2, 0x10, 0x50 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0x14, initial_y=0xfff0, target_y=0xe, duration=0x50 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=0xffec, initial_y=0xfff2, target_y=0x10, duration=0x50 waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB(29, 19, 27) waitforvisualfinish @@ -8334,7 +8332,7 @@ gBattleAnimMove_Moonblast:: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR setalpha 0, 16 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK waitforvisualfinish createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 120, 56 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -8354,7 +8352,7 @@ gBattleAnimMove_Moonblast:: gBattleAnimMove_Boomburst:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_THIN_RING - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10 + invert_screen_color scenery=0x1 | 0x4 | 0x8 | 0x10 createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0 createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 @@ -8380,7 +8378,7 @@ gBattleAnimMove_Boomburst:: createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1 Boomburst_Last: delay 4 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10 + invert_screen_color scenery=0x1 | 0x4 | 0x8 | 0x10 waitforvisualfinish end Boomburst_Doubles: @@ -8497,18 +8495,18 @@ gBattleAnimMove_DiamondStorm:: createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x6e, 0xa, 0x8, 0x20, 0x14 waitforvisualfinish @this is the buffet part - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-32, y=-16, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=32, y=20, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 15, 0, RGB(8, 4, 6) @@ -8644,7 +8642,7 @@ gBattleAnimMove_MysticalFire:: setalpha 8, 8 playse 0xb1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_WHITE waitforvisualfinish waitsound blendoff @@ -8713,7 +8711,7 @@ gBattleAnimMove_AromaticMist:: call SweetScentEffect createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x37, 0x0 setpan SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 1, 5, 5, 13, RGB(31, 21, 21) + blend_color_cycle selector=F_PAL_DEF_SIDE, delay=1, num_blends=5, initial_blend_y=5, target_blend_y=13, color=RGB(31, 21, 21) call SweetScentEffect waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB(29, 19, 27) @@ -9071,33 +9069,33 @@ gBattleAnimMove_DazzlingGleam:: loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 13, RGB(31, 25, 25) + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=13, color=RGB(31, 25, 25) loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 16, 3 createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 12, -5, 0, 0, 32, 60 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 3, 0, 16, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=3, initial_blend_y=0, target_blend_y=16, color=RGB_WHITE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(31, 28, 28) createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 21, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 3, 21, 1 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 13, 0, RGB(31, 25, 25) + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=13, target_blend_y=0, color=RGB(31, 25, 25) waitforvisualfinish clearmonbg 0x0 blendoff @@ -9192,7 +9190,7 @@ gBattleAnimMove_Nuzzle:: playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 call ElectricityEffectNoSound waitforvisualfinish end @@ -9210,7 +9208,7 @@ gBattleAnimMove_HoldBack:: createsprite gHoldBackSwipeTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 10, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gHoldBackRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 createsprite gHoldBackStarsTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xa0, 0xffe0 createsprite gHoldBackStarsTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xff00, 0xffd8 @@ -9267,7 +9265,7 @@ gBattleAnimMove_PowerUpPunch:: playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -9289,7 +9287,7 @@ gBattleAnimMove_OblivionWing:: call OblivionWingBeam call OblivionWingBeam createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 40, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 4, 0, 12, RGB(31, 4, 10) @Pinkish Red + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(31, 4, 10)@Pinkish Red call OblivionWingBeam call OblivionWingBeam call OblivionWingBeam @@ -9583,7 +9581,7 @@ gBattleAnimMove_LightOfRuin:: panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 15, RGB(31, 24, 26) createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_ORBS, delay=1, num_blends=12, color1=RGB_RED, blend_y1=16, color2=0, blend_y2=0 call LightOfRuinBeam call LightOfRuinBeam call LightOfRuinBeam @@ -9786,7 +9784,7 @@ gBattleAnimMove_DragonAscent:: createsprite gDragonAscentDrakeTemplate, ANIM_ATTACKER, 2, 5 delay 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -32, 0, 0, 3 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 6, 0, 12, 1 createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 2, 16, 0, RGB(26, 31, 0) @@ -10268,10 +10266,10 @@ gBattleAnimMove_HighHorsepower:: delay 50 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET call SetImpactBackground - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=8, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -10367,7 +10365,7 @@ SolarBladeUnleash: call SolarBladeSunRays call SolarBladeSunRays call SolarBladeSunRays - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_SWORD, delay=2, num_blends=2, color1=RGB(18, 31, 31), blend_y1=16, color2=0, blend_y2=0 waitforvisualfinish call SetSolarBeamBg playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET @@ -10391,9 +10389,9 @@ gBattleAnimMove_Leafage:: loadspritegfx ANIM_TAG_IMPACT @hit monbg ANIM_DEF_PARTNER playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0x14, 0x1 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0x0, 0x1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=0x14, initial_y=0xfff6, target_x=0x14, target_y=0x0, duration=0x16, wave_amplitude=0x14, target_both=0x1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=0x14, initial_y=0xfff6, target_x=0x14, target_y=0x0, duration=0x16, wave_amplitude=0xffec, target_both=0x1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=0x14, initial_y=0xfff6, target_x=0x14, target_y=0x0, duration=0x16, wave_amplitude=0x0, target_both=0x1 delay 20 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gLeafageImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 @@ -10537,7 +10535,7 @@ gBattleAnimMove_ThroatChop:: playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 0, 0, 10, 1, 3, 0 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 + invert_screen_color scenery=0x101 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 delay 3 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 @@ -10556,7 +10554,7 @@ gBattleAnimMove_ThroatChop:: playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 + invert_screen_color scenery=0x101 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -10842,7 +10840,7 @@ gBattleAnimMove_PowerTrip:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call PowerTripBuffUp delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_BLACK + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call PowerTripBuffUp delay 8 @@ -11361,7 +11359,7 @@ gBattleAnimGeneral_BeakBlastSetUp:: loadspritegfx ANIM_TAG_SMALL_EMBER @Fire playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER delay 3 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 waitforvisualfinish end @@ -11506,7 +11504,7 @@ gBattleAnimMove_AuroraVeil:: createsprite gAuroraVeilRingTemplate, ANIM_ATTACKER, 2 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATK_SIDE, 0, 2, 0, 10, RGB_WHITE + blend_color_cycle selector=F_PAL_ATK_SIDE, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB_WHITE waitforvisualfinish call UnsetPsychicBg waitforvisualfinish @@ -11523,10 +11521,10 @@ gBattleAnimGeneral_ShellTrapSetUp:: delay 4 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET delay 21 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=10, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=0, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=10, relative_to=ANIM_TARGET, animation=2 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -11718,7 +11716,7 @@ gBattleAnimMove_FleurCannon:: waitforvisualfinish panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_ORBS, delay=1, num_blends=12, color1=RGB_RED, blend_y1=16, color2=0, blend_y2=0 call FleurCannonBeam call FleurCannonBeam call FleurCannonBeam @@ -11773,17 +11771,17 @@ gBattleAnimMove_PsychicFangs:: choosetwoturnanim PsychicFangsRegular PsychicFangsDestroyWall PsychicFangsRegular: playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x1, 0x333, 0x333, 0xa - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x5, 0xfccd, 0xfccd, 0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0xffe0, y=0xffe0, animation=0x1, x_velocity=0x333/256, y_velocity=0x333/256, half_duration=0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0x20, y=0x20, animation=0x5, x_velocity=0xfccd/256, y_velocity=0xfccd/256, half_duration=0xa delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 5, 2 delay 16 playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe0, 0x7, 0xfccd, 0x333, 0xa - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x20, 0x3, 0x333, 0xfccd, 0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0x20, y=0xffe0, animation=0x7, x_velocity=0xfccd/256, y_velocity=0x333/256, half_duration=0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0xffe0, y=0x20, animation=0x3, x_velocity=0x333/256, y_velocity=0xfccd/256, half_duration=0xa delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=8, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 8, 4, 2 PsychicFangsEnd: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET @@ -11795,17 +11793,17 @@ PsychicFangsEnd: PsychicFangsDestroyWall: createsprite gBrickBreakWallSpriteTemplate, ANIM_ATTACKER, 3, 0x1, 0x0, 0x0, 0x21, 0xa playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x1, 0x333, 0x333, 0xa - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x5, 0xfccd, 0xfccd, 0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0xffe0, y=0xffe0, animation=0x1, x_velocity=0x333/256, y_velocity=0x333/256, half_duration=0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0x20, y=0x20, animation=0x5, x_velocity=0xfccd/256, y_velocity=0xfccd/256, half_duration=0xa delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 5, 2 delay 16 playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe0, 0x7, 0xfccd, 0x333, 0xa - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x20, 0x3, 0x333, 0xfccd, 0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0x20, y=0xffe0, animation=0x7, x_velocity=0xfccd/256, y_velocity=0x333/256, half_duration=0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0xffe0, y=0x20, animation=0x3, x_velocity=0x333/256, y_velocity=0xfccd/256, half_duration=0xa delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=8, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0xfff8, 0xfff4 createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1, 0x8, 0xfff4 createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0xfff8, 0xc @@ -11849,7 +11847,7 @@ gBattleAnimMove_StompingTantrum:: clearmonbg ANIM_TARGET end StompingTantrumImpact: - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=1 return gBattleAnimMove_ShadowBone:: @@ -11863,9 +11861,9 @@ gBattleAnimMove_ShadowBone:: playsewithpan SE_M_BONEMERANG, SOUND_PAN_TARGET createsprite gSpinningBoneSpriteTemplate, ANIM_ATTACKER, 2, 0xffd6, 0xffe7, 0x0, 0x0, 0xf delay 12 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 0x5, 0x1, 0x0, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, delay=0x5, num_blends=0x1, color1=0x0, blend_y1=10, color2=RGB_BLACK, blend_y2=0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_NightmareClone, 0x2 @@ -11888,7 +11886,7 @@ gBattleAnimMove_Accelerock:: playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER delay 4 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3, 0x0, 0x5, 0x1 createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0xffec, 0x18, 0xe, 0x1 @@ -11910,7 +11908,7 @@ gBattleAnimMove_Liquidation:: setalpha 12, 8 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET waitforvisualfinish @@ -12251,7 +12249,7 @@ gBattleAnimMove_MoongeistBeam:: delay 32 createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 15, 0, 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_ORBS, delay=1, num_blends=12, color1=RGB_RED, blend_y1=16, color2=0, blend_y2=0 call MoongeistBeamOrbs call MoongeistBeamOrbs call MoongeistBeamOrbs @@ -12319,15 +12317,15 @@ gBattleAnimMove_TearfulLook:: delay 53 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 0xC, 0x2 delay 8 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0x1, type=0x0 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0x1, type=0x1 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0x1, type=0x2 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0x1, type=0x3 delay 8 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0x1, type=0x0 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0x1, type=0x1 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0x1, type=0x2 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0x1, type=0x3 waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 5, 0, RGB(0, 15, 31) waitforvisualfinish @@ -12477,7 +12475,7 @@ gBattleAnimMove_MultiAttack:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call MultiAttackBuff delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call MultiAttackBuff delay 8 @@ -12614,7 +12612,7 @@ gBattleAnimMove_PlasmaFists:: end PlasmaFistSpark1: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 11, RGB(31, 31, 22) + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(31, 31, 22) createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 @@ -12630,9 +12628,9 @@ PlasmaFistSpark2: PlasmaFistsImpact: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x8, 0x1, 0x0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 delay 1 - createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 + invert_screen_color scenery=0x101 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 delay 1 @@ -12641,10 +12639,10 @@ PlasmaFistsImpact: createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, 16 delay 1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 + invert_screen_color scenery=0x101 delay 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 return gBattleAnimMove_PhotonGeyser:: @@ -12658,8 +12656,8 @@ gBattleAnimMove_PhotonGeyser:: setalpha 12, 8 createsprite gPhotonGeyserChargeTemplate, ANIM_ATTACKER, 2, 0x0 call PhotonGeyserSparks1 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=0xffd8, y=0xffd8, duration=0x10 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=0x0, y=0x28, duration=0x10 delay 10 call PhotonGeyserSparks2 delay 10 @@ -12668,8 +12666,8 @@ gBattleAnimMove_PhotonGeyser:: call PhotonGeyserSparks2 delay 10 call PhotonGeyserSparks1 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=0x0, y=0xffd8, duration=0x10 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=0x28, y=0x14, duration=0x10 delay 10 call PhotonGeyserSparks2 delay 10 @@ -12678,8 +12676,8 @@ gBattleAnimMove_PhotonGeyser:: call PhotonGeyserSparks2 delay 10 call PhotonGeyserSparks1 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x0, 0x10 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0x0, 0x10 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=0xffd8, y=0x0, duration=0x10 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=0x28, y=0x0, duration=0x10 delay 10 call PhotonGeyserSparks2 delay 10 @@ -12771,7 +12769,7 @@ gBattleAnimMove_ZippyZap:: playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER delay 4 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=1 call ElectricityEffect playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish @@ -12802,7 +12800,7 @@ gBattleAnimMove_FloatyFall:: playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE delay 20 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish @@ -12829,10 +12827,10 @@ gBattleAnimMove_BouncyBubble:: splitbgprio ANIM_TARGET setalpha 12, 8 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 12, RGB(13, 12, 31) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=12, color=RGB(13, 12, 31) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 delay 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 waitforvisualfinish @@ -12842,7 +12840,7 @@ gBattleAnimMove_BouncyBubble:: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 12, 0, RGB(13, 12, 31) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=12, target_blend_y=0, color=RGB(13, 12, 31) waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -12912,7 +12910,7 @@ gBattleAnimMove_SizzlySlide:: playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER delay 4 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET call FireSpreadEffect @@ -12944,7 +12942,7 @@ gBattleAnimMove_GlitzyGlow:: createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1 delay 36 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 1, 0, 6, 1 + shake_battle_platforms x_offset=1, y_offset=0, shakes=6, delay=1 waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, 0 @Darken waitforvisualfinish @@ -13142,7 +13140,7 @@ gBattleAnimMove_DoubleIronBash:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2 - createvisualtask AnimTask_MetallicShine, 0x5, 0x0, 0x0, 0x0 + metallic_shine priority=0x5, permanent=0x0 waitforvisualfinish monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -13155,7 +13153,7 @@ gBattleAnimMove_DoubleIronBash:: delay 24 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 9 delay 17 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -32, 0, 0, 3 waitforvisualfinish playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET @@ -13195,9 +13193,9 @@ gBattleAnimMove_DynamaxCannon:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 2, 15, 0, 0 fadetobg BG_DYNAMAX_CANNON waitbgfadein - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 4, 10) @Pinkish Red + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(31, 4, 10)@Pinkish Red panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER SOUND_PAN_TARGET 2 0 - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1 + shake_mon_or_platform velocity=4, shake_timer=1, shake_duration=180, type=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 87, 1 call DynamaxCannonLaunch call DynamaxCannonLaunch @@ -13263,7 +13261,7 @@ gBattleAnimMove_JawLock:: createsprite gJawLockTeethTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x1, 0x333, 0x333, 0xa, 15 createsprite gJawLockTeethTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x5, 0xfccd, 0xfccd, 0xa, 15 delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 10, 2 waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 7, 0, RGB_BLACK @;Black @@ -13300,13 +13298,13 @@ POST_BERRY_EAT: end BitePlayer: playsewithpan SE_M_BITE, 0x3f - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x27, 0xffD0, 0x0, 0x0, 0x333, 0xa - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x27, 0x10, 0x4, 0x0, 0xfccd, 0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0x27, y=0xffD0, animation=0x0, x_velocity=0x0/256, y_velocity=0x333/256, half_duration=0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0x27, y=0x10, animation=0x4, x_velocity=0x0/256, y_velocity=0xfccd/256, half_duration=0xa return BiteOpponent: playsewithpan SE_M_BITE, 0x3f - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffDF, 0xffD0, 0x0, 0x0, 0x333, 0xa - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffDF, 0x10, 0x4, 0x0, 0xfccd, 0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0xffDF, y=0xffD0, animation=0x0, x_velocity=0x0/256, y_velocity=0x333/256, half_duration=0xa + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0xffDF, y=0x10, animation=0x4, x_velocity=0x0/256, y_velocity=0xfccd/256, half_duration=0xa return gBattleAnimMove_NoRetreat:: @@ -13329,7 +13327,7 @@ gBattleAnimMove_TarShot:: playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 15 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 16, RGB_BLACK @;Black + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK@;Black createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xffe6, 0xffe8, 0x0, 0xf, 0x37 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 10 @@ -13346,24 +13344,24 @@ gBattleAnimMove_MagicPowder:: loadspritegfx ANIM_TAG_POISON_POWDER loadspritegfx ANIM_TAG_WATER_GUN loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER 0xE 0x8 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xffe2, 0xffea, 0x75, 0x50, 0x5, 0x1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0xffe2, y=0xffea, duration=0x75, y_velocity=0x50/256, wave_amplitude=0x5, wave_speed=0x1 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xa, 0xffea, 0x75, 0x50, 0xfffb, 0x1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xffe7, 0xffea, 0x75, 0x70, 0x5, 0x3 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0xffe7, y=0xffea, duration=0x75, y_velocity=0x70/256, wave_amplitude=0x5, wave_speed=0x3 delay 15 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfffb, 0xffea, 0x75, 0x50, 0xfffb, 0x1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0x5, 0xffea, 0x75, 0x60, 0x5, 0x1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0x5, y=0xffea, duration=0x75, y_velocity=0x60/256, wave_amplitude=0x5, wave_speed=0x1 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0x0, 0xffea, 0x75, 0x45, 0xfffb, 0x1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xffea, 0x75, 0x70, 0x5, 0x2 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0xfff1, y=0xffea, duration=0x75, y_velocity=0x70/256, wave_amplitude=0x5, wave_speed=0x2 delay 30 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfff1, 0xffea, 0x75, 0x70, 0x5, 0x2 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xf, 0xffea, 0x75, 0x50, 0xfffb, 0x1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0xf, y=0xffea, duration=0x75, y_velocity=0x50/256, wave_amplitude=0xfffb, wave_speed=0x1 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfff6, 0xffea, 0x75, 0x60, 0x7, 0x2 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xffea, 0x75, 0x5a, 0xfff8, 0x0 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0xfffb, y=0xffea, duration=0x75, y_velocity=0x5a/256, wave_amplitude=0xfff8, wave_speed=0x0 delay 20 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfff6, 0xffea, 0x75, 0x50, 0xfffb, 0x1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xffea, 0x75, 0x59, 0x5, 0x2 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0x0, y=0xffea, duration=0x75, y_velocity=0x59/256, wave_amplitude=0x5, wave_speed=0x2 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0x14, 0xffea, 0x75, 0x70, 0xfff8, 0x2 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0x5, 0xffea, 0x75, 0x50, 0x5, 0x1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0x5, y=0xffea, duration=0x75, y_velocity=0x50/256, wave_amplitude=0x5, wave_speed=0x1 waitforvisualfinish playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET createvisualtask AnimTask_ScaleMonAndRestore, 5, -6, -6, 15, ANIM_TARGET, 1 @@ -13402,16 +13400,16 @@ gBattleAnimMove_Octolock:: loadspritegfx ANIM_TAG_TENDRILS createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_TENDRILS, 0, 12, 12, RGB(24, 12, 15) @Pinkish Red loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET 0x6 0x4 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 + create_constrict_binding_sprite ANIM_TARGET, 4, initial_x=0x0, initial_y=0x10, affine_animation=0x0, squeezes=0x2 delay 7 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x0, 0x2 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x8, 0x1, 0x2 + create_constrict_binding_sprite ANIM_TARGET, 3, initial_x=0x0, initial_y=0x0, affine_animation=0x0, squeezes=0x2 + create_constrict_binding_sprite ANIM_TARGET, 2, initial_x=0x0, initial_y=0x8, affine_animation=0x1, squeezes=0x2 delay 7 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfff8, 0x1, 0x2 + create_constrict_binding_sprite ANIM_TARGET, 3, initial_x=0x0, initial_y=0xfff8, affine_animation=0x1, squeezes=0x2 delay 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 6, 1 delay 20 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 8, RGB_RED + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_RED playsewithpan SE_M_BIND, SOUND_PAN_TARGET setarg 0x7 0xffff waitforvisualfinish @@ -13426,16 +13424,16 @@ gBattleAnimMove_BoltBeak:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HORN_HIT, 0, 12, 12, RGB(29, 28, 1) @Yellow call BoltBeakSparks waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 22) createsprite gHorizontalLungeSpriteTemplate, 0x2, 0x2, 0x4, 0x4 delay 4 createsprite gHornHitSpriteTemplate, 0x84, 0x3, 0x8, 0x8, 0xa waitforvisualfinish - createsprite gFlashingHitSplatSpriteTemplate, 0x83, 0x4, 0x0, 0x0, 0x1, 0x1 + create_flashing_hitsplat_sprite 0x83, 0x4, x=0x0, y=0x0, relative_to=0x1, animation=0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, -31, 2, 0, 6, RGB(31, 31, 22) + blend_color_cycle selector=F_PAL_TARGET, delay=-31, num_blends=2, initial_blend_y=0, target_blend_y=6, color=RGB(31, 31, 22) call ElectricityEffect waitforvisualfinish end @@ -13446,18 +13444,18 @@ BoltBeakSparks: createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 7, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 22) delay 10 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=5, target_blend_y=5, color=RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 7, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 delay 0 createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(1, 23, 29) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(1, 23, 29) delay 20 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 4, 4, RGB(1, 23, 29) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=4, target_blend_y=4, color=RGB(1, 23, 29) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x0, 0x0 createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x40, 0x14, 0x1, 0x0 @@ -13618,29 +13616,29 @@ gBattleAnimMove_DrumBeating:: call BellyDrumLeft createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x3, 0x0 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0x10, 0x6, 0x0, 0x3, 0x50 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=0x55, offset_x=0x10, offset_y=0x6, subpriority=0x0, animation=0x3, duration=0x50 playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET delay 5 - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0xfff0, 0xfffa, 0x0, 0x2, 0x4b + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=0x55, offset_x=0xfff0, offset_y=0xfffa, subpriority=0x0, animation=0x2, duration=0x4b playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -10, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-10, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 8, 0, 20, 1 delay 3 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 8, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=8, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 3 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, -3, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=-3, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 3 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -3, 1, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-3, y=1, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 1, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=1, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=10, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -13656,8 +13654,8 @@ gBattleAnimMove_SnapTrap:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=-32, animation=0, x_velocity=0/256, y_velocity=819/256, half_duration=10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=32, animation=4, x_velocity=0/256, y_velocity=-819/256, half_duration=10 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 10 @@ -13693,7 +13691,7 @@ gBattleAnimMove_PyroBall:: playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET createsprite gPyroBallEmberBallTemplate, ANIM_ATTACKER, 2, 0, 10, 0, 5, 20, -20 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB_RED + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB_RED createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 call FireSpreadEffect delay 32 @@ -13713,7 +13711,7 @@ gBattleAnimMove_BehemothBlade:: playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 delay 22 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_SWORD, delay=2, num_blends=2, color1=RGB(18, 31, 31), blend_y1=16, color2=0, blend_y2=0 waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -13934,7 +13932,7 @@ gBattleAnimMove_AuraWheel:: delay 4 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 23, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 2, 12, 0, RGB(1, 23, 29) @Revert blue Electricity createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x0, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x40, 0x28, 0x1, 0x8003 @@ -13954,21 +13952,21 @@ gBattleAnimMove_BreakingSwipe:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0, 12, 12, RGB_RED @Red monbg ANIM_TARGET setalpha 12, 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-32, y=-16, relative_to=ANIM_TARGET, animation=1 createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 21, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 3, 21, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=1 createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=1 createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=32, y=20, relative_to=ANIM_TARGET, animation=1 createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitsound @@ -13984,7 +13982,7 @@ gBattleAnimMove_BranchPoke:: createsprite gBranchPokeBranchTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x25 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0x0, y=0x0, relative_to=0x1, animation=0x1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET waitforvisualfinish end @@ -14006,12 +14004,12 @@ gBattleAnimMove_Overdrive:: end OverdriveRings: playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_SIDE), 3, 8, 0, RGB_YELLOW + simple_palette_blend selector=(F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_SIDE), delay=3, initial_blend_y=8, target_blend_y=0, color=RGB_YELLOW createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0 createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1 - createvisualtask AnimTask_ShakeBattlePlatforms, 0x2, 0x1, 0x0, 0x6, 0x1 + shake_battle_platforms priority=0x2, x_offset=0x1, y_offset=0x0, shakes=0x6, delay=0x1 createvisualtask SoundTask_WaitForCry, 0x5 return @@ -14216,7 +14214,7 @@ gBattleAnimMove_FalseSurrender:: delay 0 playsewithpan SE_M_FAINT_ATTACK, 0xc0 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3 - createvisualtask AnimTask_AttackerFadeToInvisible, 0x2, 0x1 + attacker_fade_to_invisible priority=0x2, step_delay=0x1 waitforvisualfinish clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER @@ -14226,7 +14224,7 @@ gBattleAnimMove_FalseSurrender:: setalpha 12, 8 delay 1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 10, RGB_BLACK, 10 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=10 createsprite gSpriteTemplate_LargeCrossImpact, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x14 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 waitforvisualfinish @@ -14237,7 +14235,7 @@ gBattleAnimMove_FalseSurrender:: delay 1 createvisualtask AnimTask_InitAttackerFadeFromInvisible, 0x2, monbg ANIM_ATTACKER - createvisualtask AnimTask_AttackerFadeFromInvisible, 0x2, 0x1 + attacker_fade_from_invisible priority=0x2, step_delay=0x1 waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -14302,7 +14300,7 @@ gBattleAnimMove_Eternabeam:: call OblivionWingBeam call OblivionWingBeam createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 4, 0, 12, RGB(31, 4, 10) @Pinkish Red + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(31, 4, 10)@Pinkish Red call OblivionWingBeam call OblivionWingBeam call OblivionWingBeam @@ -14371,7 +14369,7 @@ EternabeamGeyser: gBattleAnimMove_SteelBeam:: loadspritegfx ANIM_TAG_CLAW_SLASH loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + metallic_shine permanent=0 delay 48 loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_GUST @@ -14437,7 +14435,7 @@ gBattleAnimMove_ExpandingForce:: monbg ANIM_DEF_PARTNER call SetPsychicBackground createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, F_PAL_ATTACKER, 2, 0, 8, RGB(31, 23, 0) + blend_color_cycle selector=F_PAL_ATTACKER, delay=F_PAL_ATTACKER, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB(31, 23, 0) waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET choosetwoturnanim ExpandingForceSingleTarget ExpandingForceBothTargets @@ -14570,7 +14568,7 @@ gBattleAnimMove_ScaleShot:: createsprite gSpriteTemplate_ScaleShotScale, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0x14, 0x101 waitforvisualfinish playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 delay 16 stopsound @@ -14651,7 +14649,7 @@ gBattleAnimMove_ShellSideArmPhysical:: @ Modified Body Slam, placeholder delay 11 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2 delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -28, 0, 0, 3 @@ -14684,7 +14682,7 @@ gBattleAnimMove_ShellSideArmSpecial:: @ Modified Snipe Shot, placeholder gBattleAnimMove_MistyExplosion:: loadspritegfx ANIM_TAG_EXPLOSION - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(27, 18, 30), 8, RGB_BLACK, 8 + complex_palette_blend selector=F_PAL_BG, delay=8, num_blends=9, color1=RGB(27, 18, 30), blend_y1=8, color2=RGB_BLACK, blend_y2=8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_RIGHT, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_LEFT, 8, 0, 40, 1 @@ -14703,7 +14701,7 @@ gBattleAnimMove_GrassyGlide:: loadspritegfx ANIM_TAG_IMPACT @hits loadspritegfx ANIM_TAG_WHIP_HIT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 13, 13, RGB(6, 19, 0) @;Leaf Green - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB(12, 29, 0) + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB(12, 29, 0) delay 2 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, -120, 0, 0, 10 @;Slide off off, screen @@ -14731,7 +14729,7 @@ ANIM_RISING_VOLTAGE_NORMAL: createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 0, 0x0 waitforvisualfinish createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 0x2, 0x0, 0x1, 0x34, 0x1, 0x0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 4, 0, 12, RGB(29, 28, 1) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(29, 28, 1) playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 delay 1 @@ -14789,7 +14787,7 @@ gBattleAnimMove_TerrainPulse:: loadspritegfx ANIM_TAG_DRAGON_PULSE monbg ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=7, color=RGB_BLACK createvisualtask AnimTask_TerrainPulse, 0x5 jumpargeq 0x0, TYPE_ELECTRIC, TerrainPulseElectric jumpargeq 0x0, TYPE_GRASS, TerrainPulseGrass @@ -14803,7 +14801,7 @@ TerrainPulseNormal: call DragonPulseParticle call DragonPulseParticle createvisualtask AnimTask_SwayMon, 5, 0, 2, 51200, 24, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB_WHITE + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB_WHITE goto TerrainPulseEnd TerrainPulseElectric: @@ -14814,7 +14812,7 @@ TerrainPulseElectric: call DragonPulseParticle call DragonPulseParticle createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(27, 27, 0) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(27, 27, 0) goto TerrainPulseEnd TerrainPulseGrass: @@ -14825,7 +14823,7 @@ TerrainPulseGrass: call DragonPulseParticle call DragonPulseParticle createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(11, 26, 11) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(11, 26, 11) goto TerrainPulseEnd TerrainPulseFairy: @@ -14836,7 +14834,7 @@ TerrainPulseFairy: call DragonPulseParticle call DragonPulseParticle createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 24, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(31, 24, 31) goto TerrainPulseEnd TerrainPulsePsychic: @@ -14847,7 +14845,7 @@ TerrainPulsePsychic: call DragonPulseParticle call DragonPulseParticle createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(27, 0, 13) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(27, 0, 13) goto TerrainPulseEnd TerrainPulseEnd: @@ -14862,7 +14860,7 @@ TerrainPulseEnd: call DragonPulseParticle waitforvisualfinish delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 7, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=7, target_blend_y=0, color=RGB_BLACK waitforvisualfinish blendoff clearmonbg ANIM_TARGET @@ -14920,11 +14918,11 @@ gBattleAnimMove_BurningJealousy:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 42, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 8, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_RED call BurningJealousyFireBuffEffect delay 8 call BurningJealousyFireBuffEffect - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 8, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_RED delay 4 call BurningJealousyFireBuffEffect waitforvisualfinish @@ -14978,7 +14976,7 @@ gBattleAnimMove_LashOut:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call PowerTripBuffUp delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call PowerTripBuffUp delay 8 @@ -15017,13 +15015,13 @@ gBattleAnimMove_Poltergeist:: loadspritegfx ANIM_TAG_POLTERGEIST fadetobg BG_NIGHTMARE waitbgfadein - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_ATTACKER, delay=0, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK waitforvisualfinish createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, -16, -8 createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 16, -8 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 16, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_ATTACKER, delay=0, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER delay 1 createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x24 @@ -15032,9 +15030,9 @@ gBattleAnimMove_Poltergeist:: createvisualtask AnimTask_PoltergeistItem, 2 waitforvisualfinish setalpha 12, 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 5, 1, 0, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, delay=5, num_blends=1, color1=0, blend_y1=10, color2=RGB_BLACK, blend_y2=0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_NightmareClone, 0x2 @@ -15054,7 +15052,7 @@ gBattleAnimMove_CorrosiveGas:: monbg ANIM_ATTACKER loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER, 0x8, 0x3 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 1, 2, 0, 15, RGB(15, 15, 6) @;Garbage green + blend_color_cycle selector=F_PAL_ATTACKER, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=15, color=RGB(15, 15, 6)@;Garbage green createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x7a, 0x3, 0xfff2, 0x12, 0x2e delay 0 createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x79, 0x3, 0xe, 0xfff2, 0x2e @@ -15068,7 +15066,7 @@ gBattleAnimMove_CorrosiveGas:: createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x7b, 0x3, 0x4, 0x4, 0x1e waitforvisualfinish playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_TARGET | F_PAL_ATK_PARTNER | F_PAL_DEF_PARTNER), 1, 2, 0, 14, RGB(15, 15, 6) @;Garbage green + blend_color_cycle selector=(F_PAL_BG | F_PAL_TARGET | F_PAL_ATK_PARTNER | F_PAL_DEF_PARTNER), delay=1, num_blends=2, initial_blend_y=0, target_blend_y=14, color=RGB(15, 15, 6)@;Garbage green waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -15078,7 +15076,7 @@ gBattleAnimMove_Coaching:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 1 waitforvisualfinish playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 10, RGB(29, 18, 7) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB(29, 18, 7) createvisualtask AnimTask_Splash, 2, ANIM_TARGET, 1 waitforvisualfinish end @@ -15118,14 +15116,14 @@ gBattleAnimMove_TripleAxel:: goto TripleAxelTurn2 TripleAxelTurn0: createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0xfff0, 0xfff8, 0x14, 0x1, 0x2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -16, -16, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-16, y=-16, relative_to=ANIM_TARGET, animation=2 createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0xfff0, 0xfff8, 0xff00, 0xffd8 createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0xfff0, 0xfff8, 0x1a0, 0xffda createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 4, 1 goto TripleAxelEnd TripleAxelTurn1: createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0x8, 0x8, 0x14, 0x1, 0x2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=8, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x8, 0x8, 0xa0, 0xffe0 createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x8, 0x8, 0xff00, 0xffd8 createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x8, 0x8, 0x1a0, 0xffda @@ -15134,7 +15132,7 @@ TripleAxelTurn1: goto TripleAxelEnd TripleAxelTurn2: createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x14, 0x1, 0x2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=-8, relative_to=ANIM_TARGET, animation=1 createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x0, 0x0, 0xa0, 0xffe0 createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x0, 0x0, 0xff00, 0xffd8 createsprite gTripleAxelIceCrystalSpriteTemplate, ANIM_TARGET, 1, 0x0, 0x0, 0x80, 0xfff0 @@ -15158,38 +15156,38 @@ gBattleAnimMove_DualWingbeat:: playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET jumpifmoveturn 1, DualWingbeatRightSide DualWingbeatLeftSide: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -20, 10, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-20, y=10, relative_to=ANIM_TARGET, animation=2 delay 1 playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -20, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-20, y=0, relative_to=ANIM_TARGET, animation=2 call DualWingbeatFeatherScatterLeft delay 1 playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -20, -10, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-20, y=-10, relative_to=ANIM_TARGET, animation=2 delay 1 playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 5, -20, -20, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 5, x=-20, y=-20, relative_to=ANIM_TARGET, animation=2 delay 1 playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 6, -20, -30, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 6, x=-20, y=-30, relative_to=ANIM_TARGET, animation=2 waitforvisualfinish blendoff end DualWingbeatRightSide: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 10, 10, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=10, y=10, relative_to=ANIM_TARGET, animation=2 delay 1 playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=10, y=0, relative_to=ANIM_TARGET, animation=2 call DualWingbeatFeatherScatterRight delay 1 playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 10, -10, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=10, y=-10, relative_to=ANIM_TARGET, animation=2 delay 1 playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 5, 10, -20, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 5, x=10, y=-20, relative_to=ANIM_TARGET, animation=2 delay 1 playsewithpan SE_M_WING_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 6, 10, -30, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 6, x=10, y=-30, relative_to=ANIM_TARGET, animation=2 waitforvisualfinish blendoff end @@ -15236,28 +15234,28 @@ gBattleAnimMove_JungleHealing:: loadspritegfx ANIM_TAG_SPARKLE_2 fadetobg BG_SNUGGLE_FOREVER waitbgfadeout - createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x1a, 0xffff, 0x2, 0x96 + create_ingrain_root_sprite ANIM_ATTACKER, 2, offset_x=0x10, offset_y=0x1a, subpriority=0xffff, animation=0x2, duration=0x96 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER delay 10 - createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x14, 0x1, 0x1, 0x8c + create_ingrain_root_sprite ANIM_ATTACKER, 2, offset_x=0xffe0, offset_y=0x14, subpriority=0x1, animation=0x1, duration=0x8c playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER delay 10 - createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x16, 0x1, 0x0, 0x82 + create_ingrain_root_sprite ANIM_ATTACKER, 2, offset_x=0x20, offset_y=0x16, subpriority=0x1, animation=0x0, duration=0x82 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER delay 10 - createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x19, 0xffff, 0x3, 0x78 + create_ingrain_root_sprite ANIM_ATTACKER, 2, offset_x=0xfff0, offset_y=0x19, subpriority=0xffff, animation=0x3, duration=0x78 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER delay 40 - createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 0x20, 0x1a, 0xffff, 0x3, 0x1e + create_ingrain_orb_sprite ANIM_ATTACKER, 3, initial_x=0x20, initial_y=0x1a, velocity_x=0xffff, wave_amplitude=0x3, duration=0x1e delay 5 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 5 - createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 0xffd0, 0x14, 0x1, 0x2, 0x1e + create_ingrain_orb_sprite ANIM_ATTACKER, 3, initial_x=0xffd0, initial_y=0x14, velocity_x=0x1, wave_amplitude=0x2, duration=0x1e playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 5 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 5 - createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 0x30, 0x1a, 0xfffe, 0x3, 0x12 + create_ingrain_orb_sprite ANIM_ATTACKER, 3, initial_x=0x30, initial_y=0x1a, velocity_x=0xfffe, wave_amplitude=0x3, duration=0x12 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 10 playsewithpan SE_M_STAT_INCREASE, 0xc0 @@ -15309,7 +15307,7 @@ gBattleAnimMove_WickedBlow:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call WickedBlowBuffEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_BLACK + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call WickedBlowBuffEffect delay 8 @@ -15323,7 +15321,7 @@ gBattleAnimMove_WickedBlow:: createsprite gSpriteTemplate_WickedBlowFist, ANIM_TARGET, 4, ANIM_TARGET, 0, 0, 16, 32 delay 6 loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 0x4, 0x6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gSpriteTemplate_WickedBlowBlackStars, ANIM_TARGET, 2, 0xfff0, 0xfff8, 0xfe80, 0xffe1 createsprite gSpriteTemplate_WickedBlowRedStars, ANIM_TARGET, 2, 0xfff0, 0xfff8, 0xff00, 0xffd8 createsprite gSpriteTemplate_WickedBlowBlackStars, ANIM_TARGET, 2, 0xfff0, 0xfff8, 0xff80, 0xffea @@ -15449,7 +15447,7 @@ gBattleAnimMove_DragonEnergy:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0, 12, 12, RGB(30, 2, 11) @;Regidrago Reddish Reddish, Purple monbg ANIM_TARGET playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 4, 0, 11, RGB(31, 28, 31) @;Pinkish White + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=4, initial_blend_y=0, target_blend_y=11, color=RGB(31, 28, 31)@;Pinkish White waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_TARGET createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 16, 0, RGB(30, 2, 11) @;Regidrago Reddish Reddish, Purple @@ -15512,7 +15510,7 @@ gBattleAnimMove_FreezingGlare:: createvisualtask AnimTask_GlareEyeDots, 0x5, 0x0 playsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(12, 26, 31) @;Ice blue + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(12, 26, 31)@;Ice blue createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 28, 1 call IceCrystalEffectShort waitforvisualfinish @@ -15623,10 +15621,10 @@ gBattleAnimMove_ThunderousKick:: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 48, 3, 0, 4 delay 7 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 16, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=8, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 clearmonbg ANIM_TARGET @@ -15645,7 +15643,7 @@ gBattleAnimMove_GlacialLance:: createvisualtask AnimTask_CentredFrozenIceCube, ANIM_TARGET, 0 createsprite gSpriteTemplate_GlacialLance, ANIM_TARGET, 2, 0, 40, 0, 0, 40, 50, 10 delay 60 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ICICLE_SPEAR, 4, 1, RGB_WHITE, 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_ICICLE_SPEAR, delay=4, num_blends=1, color1=RGB_WHITE, blend_y1=16, color2=0, blend_y2=0 playsewithpan SE_M_DETECT, SOUND_PAN_TARGET delay 38 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET @@ -15888,7 +15886,7 @@ gBattleAnimMove_PowerShift:: createsprite gSpriteTemplate_PowerShiftDefenseBall, ANIM_ATTACKER, 2, POWER_SHIFT_RIGHT_X, 0, POWER_SHIFT_LEFT_X, 0, POWER_SHIFT_DELAY, POWER_SHIFT_ARC waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 10, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER end @@ -15929,7 +15927,7 @@ gBattleAnimMove_SpringtideStorm:: playsewithpan SE_M_GUST, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 2, 6, 0, 11, RGB(31, 22, 30) + blend_color_cycle selector=(F_PAL_TARGET | F_PAL_DEF_PARTNER), delay=2, num_blends=6, initial_blend_y=0, target_blend_y=11, color=RGB(31, 22, 30) call HurricaneGustCentered call SpringtideStormHeartSwirl call HurricaneGustCentered @@ -16018,7 +16016,7 @@ MysticalPowerFoeTwoRingsOnly: gBattleAnimMove_RagingFury:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 0x8, 0x3 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), 2, 5, 3, 8, RGB_RED + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), delay=2, num_blends=5, initial_blend_y=3, target_blend_y=8, color=RGB_RED createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -20, 8, 32, 8, 56, 6 call OutrageFlames call OutrageFlames @@ -16149,12 +16147,12 @@ gBattleAnimMove_VictoryDance:: playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER delay 8 createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB(29, 24, 2), 14, 0, 3 @;Light orange - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x2b - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x55 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x80 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xaa - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xd5 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0x0/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0x2b/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0x55/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0x80/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0xaa/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0xd5/256 delay 30 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER delay 30 @@ -16287,7 +16285,7 @@ gBattleAnimMove_EsperWing:: monbg ANIM_TARGET call SetPsychicBackground playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB(31, 23, 0) + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB(31, 23, 0) waitforvisualfinish playsewithpan SE_M_WING_ATTACK, SOUND_PAN_ATTACKER call EsperWingBlade @@ -16675,7 +16673,7 @@ gBattleAnimMove_BitterBlade:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 3, 0, 12, RGB(14, 6, 24) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=3, initial_blend_y=0, target_blend_y=12, color=RGB(14, 6, 24) playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER waitforvisualfinish call EndureEffect @@ -16696,7 +16694,7 @@ gBattleAnimMove_BitterBlade:: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 3, 12, 0, RGB(14, 6, 24) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=3, initial_blend_y=12, target_blend_y=0, color=RGB(14, 6, 24) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -16754,7 +16752,7 @@ gBattleAnimMove_SyrupBombRed:: call SyrupBombProjectileRed call SyrupBombProjectileRed createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(20, 3, 3) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(20, 3, 3) createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 createsprite gSyrupBombRedHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 @@ -16792,7 +16790,7 @@ gBattleAnimMove_SyrupBombYellow:: call SyrupBombProjectileYellow call SyrupBombProjectileYellow createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(23, 13, 1) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(23, 13, 1) createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 createsprite gSyrupBombYellowHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 @@ -16825,7 +16823,7 @@ SyrupBombSpeedDropRed: loadspritegfx ANIM_TAG_SYRUP_SHELL_RED loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 13, 6 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(20, 3, 3) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(20, 3, 3) createsprite gSyrupBombRedShellBSpriteTemplate, ANIM_TARGET, 1, ANIM_TARGET, 60 waitforvisualfinish end @@ -16835,7 +16833,7 @@ SyrupBombSpeedDropYellow: loadspritegfx ANIM_TAG_SYRUP_SHELL_YELLOW loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 13, 6 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(23, 13, 1) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(23, 13, 1) createsprite gSyrupBombYellowShellBSpriteTemplate, ANIM_TARGET, 1, ANIM_TARGET, 60 waitforvisualfinish end @@ -16845,10 +16843,10 @@ gBattleAnimMove_ChillyReception:: loadspritegfx ANIM_TAG_PINK_CLOUD loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_RotateMonSpriteToSide, 2, 16, 96, ANIM_ATTACKER, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 1, 0, 13, RGB_BLACK + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=1, initial_blend_y=0, target_blend_y=13, color=RGB_BLACK delay 60 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 1, 13, 0, RGB_BLACK + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=1, initial_blend_y=13, target_blend_y=0, color=RGB_BLACK createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 waitforvisualfinish createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_ROAR @@ -16883,7 +16881,7 @@ gBattleAnimMove_ChillyReception:: waitforvisualfinish clearmonbg ANIM_ATTACKER delay 10 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 0, 3, RGB_WHITE + simple_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=1, initial_blend_y=0, target_blend_y=3, color=RGB_WHITE playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER call ChillyReceptionSnowballs call ChillyReceptionSnowballs @@ -16892,7 +16890,7 @@ gBattleAnimMove_ChillyReception:: playsewithpan SE_M_GUST2, SOUND_PAN_TARGET waitforvisualfinish waitsound - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 3, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=1, initial_blend_y=3, target_blend_y=0, color=RGB_WHITE end ChillyReceptionSnowballs: createsprite gPowderSnowSnowballSpriteTemplate, ANIM_ATTACKER, 40, 200, -150, 24, 0, 56, 4, 4, 0 @@ -16945,7 +16943,7 @@ gBattleAnimMove_AlluringVoice:: createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 1, 0, 6, 1 + shake_battle_platforms x_offset=1, y_offset=0, shakes=6, delay=1 createvisualtask SoundTask_WaitForCry, 5 delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 26, 1 @@ -17002,7 +17000,7 @@ gBattleAnimMove_GigatonHammer:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 4 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + metallic_shine permanent=0 createsprite gWoodHammerHammerSpriteTemplate, ANIM_TARGET, 2 delay 60 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 @@ -17016,7 +17014,7 @@ gBattleAnimMove_GigatonHammer:: end GigatonHammerImpact: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xfff4, 0x20, 0x3, 0x4 createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0x8, 0x1f, 0x2, 0x2 createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xfffc, 0x1c, 0x2, 0x3 @@ -17035,7 +17033,7 @@ gBattleAnimMove_IceSpinner:: call IceCrystalSpinEffect call IceCrystalSpinEffect waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 10, 1, 0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish @@ -17089,7 +17087,7 @@ RagingBullNormal: delay 3 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -32, 0, 0, 3 waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 @@ -17126,7 +17124,7 @@ RagingBullShatteredWall: waitforvisualfinish createsprite gBrickBreakWallSpriteTemplate, ANIM_ATTACKER, 3, ANIM_TARGET, 0, 0, 90, 10 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -32, 0, 0, 3 delay 20 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 @@ -17172,7 +17170,7 @@ gBattleAnimMove_UpperHand:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 createvisualtask AnimTask_StretchTargetUp, 3 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE clearmonbg ANIM_DEF_PARTNER blendoff end @@ -17200,7 +17198,7 @@ gBattleAnimMove_JetPunch:: createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x14, ANIM_TARGET createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0 playsewithpan SE_M_DIVE, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 delay 6 createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x14, ANIM_TARGET @@ -17242,7 +17240,7 @@ gBattleAnimMove_PsychicNoise:: playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, -24, 1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, -24, 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(14, 14, 14) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(14, 14, 14) delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, -2, 25, 1 waitforvisualfinish @@ -17266,23 +17264,23 @@ gBattleAnimMove_TemperFlare:: createvisualtask AnimTask_SwayMon, 5, 0, 16, 6144, 8, ANIM_ATTACKER delay 5 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 10, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 call FireSpreadEffect playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=24, y=8, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-24, y=-16, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=8, y=4, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-16, y=19, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=18, y=-18, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish end @@ -17302,7 +17300,7 @@ gBattleAnimMove_Trailblaze:: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 5 delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 6, 0, 8, 1 createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 @@ -17357,19 +17355,19 @@ gBattleAnimMove_LastRespects:: playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER createvisualtask AnimTask_NightShadeClone, 5, 85 delay 15 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 14, 1, 0 @@ -17459,34 +17457,34 @@ gBattleAnimMove_LuminaCrash:: playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createvisualtask AnimTask_Flash, 2 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(31, 12, 31) - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_DEF_PARTNER, 2 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_ATK_PARTNER, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_DEF_PARTNER, animation=2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_ATK_PARTNER, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, 215, SOUND_PAN_TARGET delay 3 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1 @@ -17504,36 +17502,36 @@ gBattleAnimMove_TorchSong:: setalpha 8, 8 createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE call TorchSongEffect - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 32, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 64, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 96, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 128, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 160, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 192, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 224, 30, 25, 10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=0, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=32, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=64, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=96, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=128, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=160, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=192, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=224, unk2=30, duration=25, y=10 waitforvisualfinish createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE call TorchSongEffect - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 30, 25, -5 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 32, 30, 25, -5 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 64, 30, 25, -5 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 96, 30, 25, -5 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 128, 30, 25, -5 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 160, 30, 25, -5 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 192, 30, 25, -5 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 224, 30, 25, -5 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=0, unk2=30, duration=25, y=-5 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=32, unk2=30, duration=25, y=-5 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=64, unk2=30, duration=25, y=-5 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=96, unk2=30, duration=25, y=-5 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=128, unk2=30, duration=25, y=-5 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=160, unk2=30, duration=25, y=-5 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=192, unk2=30, duration=25, y=-5 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=224, unk2=30, duration=25, y=-5 waitforvisualfinish createvisualtask SoundTask_PlayCryWithEcho, 5, TRUE call TorchSongEffect - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 32, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 64, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 96, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 128, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 160, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 192, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 224, 30, 25, -20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=0, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=32, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=64, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=96, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=128, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=160, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=192, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=224, unk2=30, duration=25, y=-20 delay 12 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_BIRD, 0, 10, 10, RGB_RED createsprite gSkyAttackBirdSpriteTemplate, ANIM_TARGET, 2 @@ -17546,11 +17544,11 @@ gBattleAnimMove_TorchSong:: clearmonbg ANIM_DEF_PARTNER end TorchSongEffect: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 8, 0, RGB_RED + simple_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, initial_blend_y=8, target_blend_y=0, color=RGB_RED createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0 createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 1, 0, 6, 1 + shake_battle_platforms x_offset=1, y_offset=0, shakes=6, delay=1 createvisualtask SoundTask_WaitForCry, 5 return @@ -17571,7 +17569,7 @@ gBattleAnimMove_AquaStep:: createsprite gSpinningHandOrFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 30 delay 30 createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 14, 1 createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 20, ANIM_TARGET delay 4 @@ -17615,7 +17613,7 @@ gBattleAnimMove_RageFist:: createvisualtask AnimTask_AttackerPunchWithTrace, 2, RGB_BLACK, 13 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gSprayWaterDropletSpriteTemplate, ANIM_TARGET, 5, 0, 1 @@ -17640,7 +17638,7 @@ gBattleAnimMove_ChillingWater:: playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 33 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(20, 27, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(20, 27, 31) playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, 10, 15, 55, FALSE createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -20, -20, 15, 55, FALSE @@ -17700,7 +17698,7 @@ gBattleAnimMove_Pounce:: setalpha 12, 8 createvisualtask AnimTask_DuckDownHop, 5, ANIM_ATTACKER, 28, -8, 10, 14, 10, 18 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish @@ -17919,7 +17917,7 @@ gBattleAnimMove_AxeKick:: createsprite gAxeKickSpriteTemplate, ANIM_TARGET, 3 delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 1, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_SquishTargetShort, 2 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 @@ -17929,7 +17927,7 @@ gBattleAnimMove_SpinOut:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + metallic_shine permanent=0 waitforvisualfinish call SetHighSpeedBg loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 3 @@ -17939,7 +17937,7 @@ gBattleAnimMove_SpinOut:: createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 0 loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 10, 1, 0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish @@ -17957,15 +17955,15 @@ gBattleAnimMove_MortalSpin:: loadspritegfx ANIM_TAG_POISON_BUBBLE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_RAPID_SPIN, 0, 6, 6, RGB(15, 0, 15) monbg ANIM_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 1, 0, 13, RGB(10, 2, 19) + simple_palette_blend selector=F_PAL_ATTACKER, delay=1, initial_blend_y=0, target_blend_y=13, color=RGB(10, 2, 19) delay 16 createsprite gRapidSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 32, -32, 40, -2 createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 0 loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 10, 1, 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 1, 13, 0, RGB(10, 2, 19) + simple_palette_blend selector=F_PAL_ATTACKER, delay=1, initial_blend_y=13, target_blend_y=0, color=RGB(10, 2, 19) call PoisonBubblesEffect waitforvisualfinish delay 8 @@ -18017,7 +18015,7 @@ gBattleAnimMove_FlowerTrick:: createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish @@ -18034,7 +18032,7 @@ gBattleAnimMove_MakeItRain:: createsprite gCoinThrowSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 1152 waitforvisualfinish playsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 1, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gFallingCoinSpriteTemplate, ANIM_ATTACKER, 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 waitforvisualfinish @@ -18044,7 +18042,7 @@ gBattleAnimMove_MakeItRain:: jumprettrue MakingItRainOnPlayer MakingItRainContinue: waitbgfadeout - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 + shake_mon_or_platform velocity=7, shake_timer=1, shake_duration=11, type=1 loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 8, 15 createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -5, 0, -5, 1 delay 2 @@ -18112,44 +18110,44 @@ gBattleAnimMove_HyperDrill:: playse 20 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=1, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 2, 1, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0, y=2, relative_to=1, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -4, 3, 1, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-4, y=3, relative_to=1, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -8, -5, 1, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-8, y=-5, relative_to=1, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 4, -12, 1, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=4, y=-12, relative_to=1, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 16, 0, 1, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=16, y=0, relative_to=1, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 5, 18, 1, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=5, y=18, relative_to=1, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -17, 12, 1, 2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-17, y=12, relative_to=1, animation=2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -21, -15, 1, 2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-21, y=-15, relative_to=1, animation=2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, -27, 1, 2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=8, y=-27, relative_to=1, animation=2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 0, 1, 2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=32, y=0, relative_to=1, animation=2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=8, color2=RGB_BLACK, blend_y2=0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=8, color2=RGB_BLACK, blend_y2=0 restorebg waitbgfadein blendoff @@ -18166,7 +18164,7 @@ gBattleAnimMove_TwinBeam:: call PsybeamRings call PsywaveRings call PsybeamRings - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 4, 0, 12, RGB(31, 18, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(31, 18, 31) call PsywaveRings call PsybeamRings call PsywaveRings @@ -18195,22 +18193,22 @@ gBattleAnimMove_Comeuppance:: delay 5 setalpha 12, 8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 30, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=24, y=8, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-24, y=-16, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=8, y=4, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-16, y=19, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=18, y=-18, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, +63 waitforvisualfinish clearmonbg ANIM_TARGET @@ -18323,7 +18321,7 @@ FickleBeamRegular: call PsybeamRings call PsybeamRings createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 4, 25, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(15, 8, 30) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(15, 8, 30) call PsybeamRings call PsybeamRings call PsybeamRings @@ -18346,7 +18344,7 @@ FickleBeamIntense: delay 30 createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 15, 0, 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_ORBS, delay=1, num_blends=12, color1=RGB_RED, blend_y1=16, color2=0, blend_y2=0 call HyperBeamOrbs call HyperBeamOrbs call HyperBeamOrbs @@ -18580,21 +18578,21 @@ TeraStarstormSingle: delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 delay 2 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, -5, 30, 0, 1 delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -16, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-16, y=8, relative_to=ANIM_TARGET, animation=2 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 delay 2 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 5, 30, 0, 1 delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 16, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=16, y=8, relative_to=ANIM_TARGET, animation=2 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 delay 2 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 @@ -18602,15 +18600,15 @@ TeraStarstormSingle: createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 delay 5 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 24, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=24, y=0, relative_to=ANIM_TARGET, animation=2 delay 5 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 24, 16, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=24, y=16, relative_to=ANIM_TARGET, animation=2 waitforvisualfinish restorebg waitbgfadeout @@ -18644,8 +18642,8 @@ TeraStarstormDouble: createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 0, 1 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 1, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, -8, 0, ANIM_DEF_PARTNER, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_DEF_PARTNER, 2, x=-8, y=0, relative_to=ANIM_DEF_PARTNER, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 delay 2 @@ -18655,8 +18653,8 @@ TeraStarstormDouble: createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 1, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -16, 0, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, -16, 0, ANIM_DEF_PARTNER, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-16, y=0, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_DEF_PARTNER, 2, x=-16, y=0, relative_to=ANIM_DEF_PARTNER, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 delay 2 @@ -18666,8 +18664,8 @@ TeraStarstormDouble: createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 1, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 16, 8, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, 16, 8, ANIM_DEF_PARTNER, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=16, y=8, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_DEF_PARTNER, 2, x=16, y=8, relative_to=ANIM_DEF_PARTNER, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 delay 2 @@ -18677,26 +18675,26 @@ TeraStarstormDouble: createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 1, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 24, 0, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, 24, 0, ANIM_DEF_PARTNER, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=24, y=0, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_DEF_PARTNER, 2, x=24, y=0, relative_to=ANIM_DEF_PARTNER, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 delay 5 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 24, 16, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, 24, 16, ANIM_DEF_PARTNER, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=24, y=16, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_DEF_PARTNER, 2, x=24, y=16, relative_to=ANIM_DEF_PARTNER, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 delay 5 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -24, 16, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, -24, 16, ANIM_DEF_PARTNER, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-24, y=16, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_DEF_PARTNER, 2, x=-24, y=16, relative_to=ANIM_DEF_PARTNER, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 delay 5 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -24, -8, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, -24, -8, ANIM_DEF_PARTNER, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-24, y=-8, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_DEF_PARTNER, 2, x=-24, y=-8, relative_to=ANIM_DEF_PARTNER, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 3, 50, 1 call ExpandingForceExplosionGeyser @@ -18767,7 +18765,7 @@ gBattleAnimMove_GlaiveRush:: playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 delay 22 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_SWORD, delay=2, num_blends=2, color1=RGB(18, 31, 31), blend_y1=16, color2=0, blend_y2=0 waitforvisualfinish delay 1 loadspritegfx ANIM_TAG_IMPACT @@ -18776,13 +18774,13 @@ gBattleAnimMove_GlaiveRush:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_ASCENT, 0, 10, 10, RGB(0, 0, 31) @Blue createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE delay 4 - createvisualtask AnimTask_AttackerFadeToInvisible, 5, 0 + attacker_fade_to_invisible priority=5, step_delay=0 waitforvisualfinish createvisualtask SoundTask_PlaySE2WithPanning, 5, 238, SOUND_PAN_ATTACKER createsprite gGlaiveRushSpriteTemplate, ANIM_TARGET, 2 delay 14 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, 1, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=1, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 6, 0, 12, 1 createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 2, 16, 0, RGB(26, 31, 0) @@ -19041,9 +19039,9 @@ gBattleAnimMove_ElectroDrift:: createvisualtask AnimTask_VoltTackleBolt, 5, 4 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER delay 2 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 5 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 10, 0, 18, 1 @@ -19155,25 +19153,25 @@ gBattleAnimMove_SupercellSlam:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=5, target_blend_y=5, color=RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, ANIM_ATTACKER, 1, 0 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 22) delay 10 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=5, target_blend_y=5, color=RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, ANIM_ATTACKER, 1, 1 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 22) delay 20 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 7, 7, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=7, target_blend_y=7, color=RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 @@ -19185,7 +19183,7 @@ gBattleAnimMove_SupercellSlam:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 delay 4 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 22) delay 4 monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -19195,7 +19193,7 @@ gBattleAnimMove_SupercellSlam:: delay 11 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2 delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3 @@ -19209,7 +19207,7 @@ gBattleAnimMove_SupercellSlam:: waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, -31, 2, 0, 6, RGB(31, 31, 22) + blend_color_cycle selector=F_PAL_TARGET, delay=-31, num_blends=2, initial_blend_y=0, target_blend_y=6, color=RGB(31, 31, 22) call ElectricityEffect waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -19224,27 +19222,27 @@ gBattleAnimMove_BlazingTorque:: playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createvisualtask AnimTask_StartSlidingBg, 5, 0x0A00, 0, 1, -1 waitbgfadein - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_ATTACKER, delay=4, num_blends=2, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=16, target_blend_y=16, color=RGB_WHITE createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 delay 3 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET call FireSpreadEffect - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 @waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 @@ -19264,27 +19262,27 @@ gBattleAnimMove_WickedTorque:: fadetobg BG_DARK waitbgfadein playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_ATTACKER, delay=4, num_blends=2, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=16, target_blend_y=16, color=RGB_WHITE createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 delay 3 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 3, 10, 0, 0 createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0, 0, 256, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE delay 2 createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0, 0, 256, 0 waitforvisualfinish @@ -19307,24 +19305,24 @@ gBattleAnimMove_NoxiousTorque:: createvisualtask AnimTask_StartSlidingBg, 5, 0x0A00, 0, 1, -1 waitbgfadein playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_ATTACKER, delay=4, num_blends=2, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=16, target_blend_y=16, color=RGB_WHITE createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 delay 3 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(30, 0, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(30, 0, 31) createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -42, -42, 20 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 @@ -19337,7 +19335,7 @@ gBattleAnimMove_NoxiousTorque:: createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -43, -12, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 16, -46, 20 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 @@ -19358,28 +19356,28 @@ gBattleAnimMove_CombatTorque:: createvisualtask AnimTask_StartSlidingBg, 5, 0, 0x1000, 0, -1 waitbgfadein playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_ATTACKER, delay=4, num_blends=2, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=16, target_blend_y=16, color=RGB_WHITE createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 delay 3 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gSuperpowerFireballSpriteTemplate, ANIM_TARGET, 3, ANIM_ATTACKER delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 @waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 @@ -19401,14 +19399,14 @@ gBattleAnimMove_MagicalTorque:: fadetobg BG_TWINKLE_TACKLE waitbgfadeout playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_ATTACKER, delay=4, num_blends=2, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=16, target_blend_y=16, color=RGB_WHITE createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 160, -32 @@ -19418,14 +19416,14 @@ gBattleAnimMove_MagicalTorque:: createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -128, -22 createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31 delay 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 delay 3 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 @@ -19566,42 +19564,42 @@ TeraBlastFighting: createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 63, 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 24, 0, 0, 10, 1, ANIM_FOOT_1, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -6, 18, 0, 0, 10, 1, ANIM_CHOP, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -64, 16, 0, 0, 10, 1, ANIM_FIST_1, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 21, 0, 0, 10, 1, ANIM_FOOT_2, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 20, 0, 0, 10, 1, ANIM_FIST_1, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -32, 23, 0, 0, 10, 1, ANIM_CHOP, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 2 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -64, 17, 0, 0, 10, 1, ANIM_FOOT_1, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -80, 16, 0, 0, 10, 1, ANIM_FOOT_2, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -96, 21, 0, 0, 10, 1, ANIM_CHOP, 1 @@ -19609,34 +19607,34 @@ TeraBlastFighting: playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 24, 0, 0, 10, 1, ANIM_FOOT_1, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -6, 18, 0, 0, 10, 1, ANIM_CHOP, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -64, 16, 0, 0, 10, 1, ANIM_FIST_1, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 21, 0, 0, 10, 1, ANIM_FOOT_2, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 20, 0, 0, 10, 1, ANIM_FIST_1, 1 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -32, 23, 0, 0, 10, 1, ANIM_CHOP, 1 delay 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=1, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET call EternabeamGeyser delay 5 @@ -19683,7 +19681,7 @@ TeraBlastPoison: createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -42, -42, 20 playsewithpan SE_M_DIG, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 50, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB_PURPLE + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB_PURPLE call PoisonBubblesEffect createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 @@ -19742,7 +19740,7 @@ TeraBlastFlying: delay 6 call TeraBlastFlyingBeam createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 50, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 2, 0, 12, RGB_WHITE + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB_WHITE call TeraBlastFlyingBeam call TeraBlastFlyingBeam delay 8 @@ -19795,33 +19793,33 @@ TeraBlastRock: call TeraBlastRock2 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 16 @; For Meteor 1 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=40, y=16@; For Meteor 1 createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 delay 3 call TeraBlastRock3 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 16 @; For Meteor 2 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=-8, y=16@; For Meteor 2 delay 3 call TeraBlastRock4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 16 @; For Meteor 3 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=21, y=16@; For Meteor 3 delay 3 call TeraBlastRock1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 16 @; For Meteor 4 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=-8, y=16@; For Meteor 4 createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 delay 3 call TeraBlastRock2 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 16 @; For Meteor 1 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=40, y=16@; For Meteor 1 delay 3 call TeraBlastRock3 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 16 @; For Meteor 3 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=21, y=16@; For Meteor 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 call EternabeamGeyser delay 5 @@ -19938,55 +19936,55 @@ TeraBlastGround: delay 40 loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET 11, 3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=5, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -10, -15 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-10, y=-15 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=0, y=25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 15, 5 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=15, y=5 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -25, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-25, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 30, 30 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=30, y=30 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, -27, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=-27, y=25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 0, 8 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=0, y=8 delay 1 loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET 11, 3 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=5, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -10, -15 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-10, y=-15 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=0, y=25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 15, 5 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=15, y=5 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -25, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-25, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 30, 30 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=30, y=30 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, -27, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=-27, y=25 delay 1 loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET 11, 3 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 0, 8 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=0, y=8 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=5, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -10, -15 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-10, y=-15 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=0, y=25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 15, 5 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=15, y=5 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -25, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-25, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 30, 30 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=30, y=30 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, -27, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=-27, y=25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 0, 8 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=0, y=8 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 call EternabeamGeyser delay 5 @@ -20040,7 +20038,7 @@ TeraBlastGhost: createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 0, 40, 16 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB_PURPLE + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB_PURPLE createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 0, -40, 16 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 2 @@ -20122,7 +20120,7 @@ TeraBlastSteel: call ContinentalCrushStockpileRocks delay 30 loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + metallic_shine permanent=0 waitforvisualfinish playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gReallyBigRockBlastRockSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 25, 257 @@ -20176,7 +20174,7 @@ TeraBlastFireOnOpponent: call FireSpreadBlast call FireSpreadBlast createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 43, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 0, 0) + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(31, 0, 0) call FireSpreadBlast call FireSpreadBlast call FireSpreadBlast @@ -20202,7 +20200,7 @@ TeraBlastFireOnPlayer: call FireSpreadBlastOpponent call FireSpreadBlastOpponent createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 43, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 0, 0) + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(31, 0, 0) call FireSpreadBlastOpponent call FireSpreadBlastOpponent call FireSpreadBlastOpponent @@ -20254,33 +20252,33 @@ TeraBlastWater: call TeraBlastWater2 playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 16 @; For Meteor 1 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=40, y=16@; For Meteor 1 createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 delay 3 call TeraBlastWater3 playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 16 @; For Meteor 2 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=-8, y=16@; For Meteor 2 delay 3 call TeraBlastWater4 playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 16 @; For Meteor 3 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=21, y=16@; For Meteor 3 delay 3 call TeraBlastWater1 playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 16 @; For Meteor 4 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=-8, y=16@; For Meteor 4 createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 delay 3 call TeraBlastWater2 playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 16 @; For Meteor 1 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=40, y=16@; For Meteor 1 delay 3 call TeraBlastWater3 playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 16 @; For Meteor 3 + create_dragon_rage_fire_plume_sprite ANIM_ATTACKER, 2, relative_to=ANIM_TARGET, x=21, y=16@; For Meteor 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 call EternabeamGeyser delay 5 @@ -20464,12 +20462,12 @@ TeraBlastPsychic: waitbgfadeout createvisualtask AnimTask_SetPsychicBackground, 5 waitbgfadein - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 8, 8, 30, 1 createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 30, ANIM_TARGET, 1 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 call EternabeamGeyser @@ -20579,7 +20577,7 @@ TeraBlastDragonOnOpponent: call FireSpreadBlast call FireSpreadBlast createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 43, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 0, 0) + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(31, 0, 0) call FireSpreadBlast call FireSpreadBlast call FireSpreadBlast @@ -20603,7 +20601,7 @@ TeraBlastDragonOnPlayer: call FireSpreadBlastOpponent call FireSpreadBlastOpponent createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 43, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 0, 0) + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(31, 0, 0) call FireSpreadBlastOpponent call FireSpreadBlastOpponent call FireSpreadBlastOpponent @@ -20655,7 +20653,7 @@ TeraBlastDark: delay 6 call TeraBlastFlyingBeam createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 50, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 2, 0, 12, RGB_BLACK + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB_BLACK call TeraBlastFlyingBeam call TeraBlastFlyingBeam delay 8 @@ -20697,7 +20695,7 @@ TeraBlastFairy: fadetobg BG_TWINKLE_TACKLE waitbgfadein loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB_MAGENTA + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB_MAGENTA call TeraBlastFairyHearts createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 8, 8, 15, 1 createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_TARGET, 1 @@ -20914,19 +20912,19 @@ OrderUpNone: loadspritegfx ANIM_TAG_TATSUGIRI_STRETCHY createsprite gOrderUpTatsugiriCurlySpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 50, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 createsprite gOrderUpTatsugiriDroopySpriteTemplate, ANIM_TARGET, 2, 0, 12, 64, 46, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 createsprite gOrderUpTatsugiriStretchySpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 42, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish @@ -20935,19 +20933,19 @@ OrderUpCurly: loadspritegfx ANIM_TAG_TATSUGIRI_CURLY createsprite gOrderUpTatsugiriCurlySpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 50, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 createsprite gOrderUpTatsugiriCurlySpriteTemplate, ANIM_TARGET, 2, 0, 12, 64, 46, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 createsprite gOrderUpTatsugiriCurlySpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 42, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish @@ -20956,19 +20954,19 @@ OrderUpDroopy: loadspritegfx ANIM_TAG_TATSUGIRI_DROOPY createsprite gOrderUpTatsugiriDroopySpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 50, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 createsprite gOrderUpTatsugiriDroopySpriteTemplate, ANIM_TARGET, 2, 0, 12, 64, 46, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 createsprite gOrderUpTatsugiriDroopySpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 42, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish @@ -20977,19 +20975,19 @@ OrderUpStretchy: loadspritegfx ANIM_TAG_TATSUGIRI_STRETCHY createsprite gOrderUpTatsugiriStretchySpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 50, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 createsprite gOrderUpTatsugiriStretchySpriteTemplate, ANIM_TARGET, 2, 0, 12, 64, 46, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 createsprite gOrderUpTatsugiriStretchySpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 42, 0 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish @@ -20998,7 +20996,7 @@ OrderUpStretchy: gBattleAnimMove_MatchaGotcha:: loadspritegfx ANIM_TAG_POISON_BUBBLE playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_ATTACKER, delay=4, num_blends=2, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish delay 10 loopsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 27, 2 @@ -21027,7 +21025,7 @@ MatchaGotchaSingle: delay 28 playsewithpan SE_M_DIVE, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 0, 0) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(31, 0, 0) createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 10, 15, 55, FALSE createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -20, 15, 55, FALSE delay 3 @@ -21057,7 +21055,7 @@ MatchaGotchaDouble: playsewithpan SE_M_DIVE, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_DEF_PARTNER, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 0, 0) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(31, 0, 0) createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 10, 15, 55, 0 createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -20, 15, 55, 0 createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 10, 15, 55, 2 @@ -21094,7 +21092,7 @@ gBattleAnimMove_Pound:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -21114,82 +21112,82 @@ DoubleSlapContinue: blendoff end DoubleSlapLeft: - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=2 goto DoubleSlapContinue DoubleSlapRight: - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=8, y=0, relative_to=ANIM_TARGET, animation=2 goto DoubleSlapContinue gBattleAnimMove_PoisonPowder:: loadspritegfx ANIM_TAG_POISON_POWDER loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 10, -22, 117, 80, -5, 1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, -25, -22, 117, 112, 5, 3 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=-30, y=-22, duration=117, y_velocity=80/256, wave_amplitude=5, wave_speed=1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=10, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=-25, y=-22, duration=117, y_velocity=112/256, wave_amplitude=5, wave_speed=3 delay 15 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, -5, -22, 117, 80, -5, 1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 5, -22, 117, 96, 5, 1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0, -22, 117, 69, -5, 1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=-5, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=5, y=-22, duration=117, y_velocity=96/256, wave_amplitude=5, wave_speed=1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0, y=-22, duration=117, y_velocity=69/256, wave_amplitude=-5, wave_speed=1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=-15, y=-22, duration=117, y_velocity=112/256, wave_amplitude=5, wave_speed=2 delay 30 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 15, -22, 117, 80, -5, 1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, -10, -22, 117, 96, 7, 2 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, -5, -22, 117, 90, -8, 0 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=-15, y=-22, duration=117, y_velocity=112/256, wave_amplitude=5, wave_speed=2 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=15, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=-10, y=-22, duration=117, y_velocity=96/256, wave_amplitude=7, wave_speed=2 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=-5, y=-22, duration=117, y_velocity=90/256, wave_amplitude=-8, wave_speed=0 delay 20 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, -10, -22, 117, 80, -5, 1 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0, -22, 117, 89, 5, 2 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 20, -22, 117, 112, -8, 2 - createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 5, -22, 117, 80, 5, 1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=-10, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=0, y=-22, duration=117, y_velocity=89/256, wave_amplitude=5, wave_speed=2 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=20, y=-22, duration=117, y_velocity=112/256, wave_amplitude=-8, wave_speed=2 + create_poison_powder_particle_sprite ANIM_TARGET, 2, x=5, y=-22, duration=117, y_velocity=80/256, wave_amplitude=5, wave_speed=1 waitforvisualfinish end gBattleAnimMove_StunSpore:: loadspritegfx ANIM_TAG_STUN_SPORE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, 10, -22, 117, 80, -5, 1 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -25, -22, 117, 112, 5, 3 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=-30, y=-22, duration=117, y_velocity=80/256, wave_amplitude=5, wave_speed=1 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=10, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=-25, y=-22, duration=117, y_velocity=112/256, wave_amplitude=5, wave_speed=3 delay 15 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -5, -22, 117, 80, -5, 1 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, 5, -22, 117, 96, 5, 1 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, 0, -22, 117, 69, -5, 1 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=-5, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=5, y=-22, duration=117, y_velocity=96/256, wave_amplitude=5, wave_speed=1 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=0, y=-22, duration=117, y_velocity=69/256, wave_amplitude=-5, wave_speed=1 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=-15, y=-22, duration=117, y_velocity=112/256, wave_amplitude=5, wave_speed=2 delay 30 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, 15, -22, 117, 80, -5, 1 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -10, -22, 117, 96, 7, 2 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -5, -22, 117, 90, -8, 0 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=-15, y=-22, duration=117, y_velocity=112/256, wave_amplitude=5, wave_speed=2 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=15, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=-10, y=-22, duration=117, y_velocity=96/256, wave_amplitude=7, wave_speed=2 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=-5, y=-22, duration=117, y_velocity=90/256, wave_amplitude=-8, wave_speed=0 delay 20 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -10, -22, 117, 80, -5, 1 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, 0, -22, 117, 89, 5, 2 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, 20, -22, 117, 112, -8, 2 - createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, 5, -22, 117, 80, 5, 1 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=-10, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=0, y=-22, duration=117, y_velocity=89/256, wave_amplitude=5, wave_speed=2 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=20, y=-22, duration=117, y_velocity=112/256, wave_amplitude=-8, wave_speed=2 + create_stun_spore_particle_sprite ANIM_TARGET, 2, x=5, y=-22, duration=117, y_velocity=80/256, wave_amplitude=5, wave_speed=1 waitforvisualfinish end gBattleAnimMove_SleepPowder:: loadspritegfx ANIM_TAG_SLEEP_POWDER loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, 10, -22, 117, 80, -5, 1 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -25, -22, 117, 112, 5, 3 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=-30, y=-22, duration=117, y_velocity=80/256, wave_amplitude=5, wave_speed=1 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=10, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=-25, y=-22, duration=117, y_velocity=112/256, wave_amplitude=5, wave_speed=3 delay 15 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -5, -22, 117, 80, -5, 1 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, 5, -22, 117, 96, 5, 1 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0, -22, 117, 69, -5, 1 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=-5, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=5, y=-22, duration=117, y_velocity=96/256, wave_amplitude=5, wave_speed=1 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=0, y=-22, duration=117, y_velocity=69/256, wave_amplitude=-5, wave_speed=1 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=-15, y=-22, duration=117, y_velocity=112/256, wave_amplitude=5, wave_speed=2 delay 30 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, 15, -22, 117, 80, -5, 1 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -10, -22, 117, 96, 7, 2 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -5, -22, 117, 90, -8, 0 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=-15, y=-22, duration=117, y_velocity=112/256, wave_amplitude=5, wave_speed=2 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=15, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=-10, y=-22, duration=117, y_velocity=96/256, wave_amplitude=7, wave_speed=2 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=-5, y=-22, duration=117, y_velocity=90/256, wave_amplitude=-8, wave_speed=0 delay 20 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -10, -22, 117, 80, -5, 1 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0, -22, 117, 89, 5, 2 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, 20, -22, 117, 112, -8, 2 - createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, 5, -22, 117, 80, 5, 1 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=-10, y=-22, duration=117, y_velocity=80/256, wave_amplitude=-5, wave_speed=1 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=0, y=-22, duration=117, y_velocity=89/256, wave_amplitude=5, wave_speed=2 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=20, y=-22, duration=117, y_velocity=112/256, wave_amplitude=-8, wave_speed=2 + create_sleep_powder_particle_sprite ANIM_TARGET, 2, x=5, y=-22, duration=117, y_velocity=80/256, wave_amplitude=5, wave_speed=1 waitforvisualfinish end @@ -21199,21 +21197,21 @@ gBattleAnimMove_Swift:: monbg ANIM_DEF_PARTNER setalpha 12, 8 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gSwiftStarSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 22, 20, 1 + create_swift_star_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=22, wave_amplitude=20, target_both=1 delay 5 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gSwiftStarSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 5, 22, -18, 1 + create_swift_star_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=5, duration=22, wave_amplitude=-18, target_both=1 delay 5 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gSwiftStarSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, -10, 22, 15, 1 + create_swift_star_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=-10, duration=22, wave_amplitude=15, target_both=1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 18, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 2, 0, 18, 1 delay 5 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gSwiftStarSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 22, -20, 1 + create_swift_star_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=22, wave_amplitude=-20, target_both=1 delay 5 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gSwiftStarSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 22, 12, 1 + create_swift_star_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=22, wave_amplitude=12, target_both=1 delay 5 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -21232,13 +21230,13 @@ gBattleAnimMove_Strength:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_TARGET, 18, 6, 2, 4 delay 4 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 16, 12, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=16, y=12, relative_to=ANIM_TARGET, animation=1 delay 4 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, -12, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-16, y=-12, relative_to=ANIM_TARGET, animation=1 delay 4 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 3, 4, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=3, y=4, relative_to=ANIM_TARGET, animation=1 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 waitforvisualfinish @@ -21252,7 +21250,7 @@ gBattleAnimMove_Tackle:: setalpha 12, 8 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish @@ -21270,7 +21268,7 @@ gBattleAnimMove_BodySlam:: delay 11 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2 delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -28, 0, 0, 3 @@ -21372,22 +21370,22 @@ gBattleAnimMove_PinMissile:: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER - createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, -8, -8, 20, -32 + create_pin_missile_sprite ANIM_ATTACKER, 2, initial_x=20, initial_y=-8, target_x=-8, target_y=-8, duration=20, wave_amplitude=-32 delay 15 - createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 8, 8, 20, -40 + create_pin_missile_sprite ANIM_ATTACKER, 2, initial_x=20, initial_y=-8, target_x=8, target_y=8, duration=20, wave_amplitude=-40 delay 4 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -8, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-8, y=-8, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 2, 1 delay 9 - createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 0, 0, 20, -32 + create_pin_missile_sprite ANIM_ATTACKER, 2, initial_x=20, initial_y=-8, target_x=0, target_y=0, duration=20, wave_amplitude=-32 delay 4 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=8, y=8, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 2, 1 delay 14 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 2, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -21406,17 +21404,17 @@ gBattleAnimMove_IcicleSpear:: createsprite gIcicleSpearSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 8, 8, 20, -40 delay 4 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -8, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-8, y=-8, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 2, 1 delay 9 createsprite gIcicleSpearSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 0, 0, 20, -32 delay 4 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=8, y=8, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 2, 1 delay 14 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 2, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -21429,8 +21427,8 @@ gBattleAnimMove_TakeDown:: setalpha 12, 8 createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -24, 8, 23, 10, 40, 10 delay 35 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=10, color2=RGB_BLACK, blend_y2=0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -16, 0, 0, 4 @@ -21449,26 +21447,26 @@ gBattleAnimMove_TakeDown:: gBattleAnimMove_DoubleEdge:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_ATTACKER, delay=4, num_blends=2, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=16, target_blend_y=16, color=RGB_WHITE createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 delay 3 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -32, 0, 0, 3 waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 @@ -21487,9 +21485,9 @@ gBattleAnimMove_PoisonSting:: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20 + create_linear_stinger_sprite ANIM_TARGET, 2, initial_x=20, initial_y=0, target_x=-8, target_y=0, duration=20 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 5, 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET waitforvisualfinish @@ -21506,14 +21504,14 @@ gBattleAnimMove_Twineedle:: splitbgprio ANIM_TARGET setalpha 12, 8 loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 6, 2 - createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 10, -4, 0, -4, 20 - createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 12, 10, 12, 20 + create_linear_stinger_sprite ANIM_TARGET, 2, initial_x=10, initial_y=-4, target_x=0, target_y=-4, duration=20 + create_linear_stinger_sprite ANIM_TARGET, 2, initial_x=20, initial_y=12, target_x=10, target_y=12, duration=20 delay 20 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 5, 1 - createsprite gHandleInvertHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -4, 1, 3 + create_handle_invert_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=-4, relative_to=1, animation=3 loopsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 5, 2 delay 1 - createsprite gHandleInvertHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 10, 12, 1, 3 + create_handle_invert_hitsplat_sprite ANIM_ATTACKER, 3, x=10, y=12, relative_to=1, animation=3 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -21570,13 +21568,13 @@ FireBlastCross: gBattleAnimMove_LeechSeed:: loadspritegfx ANIM_TAG_SEED playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER - createsprite gLeechSeedSpriteTemplate, ANIM_TARGET, 2, 15, 0, 0, 24, 35, -32 + createleechseedsprite ANIM_TARGET, 2, initial_x=15, initial_y=0, target_x=0, target_y=24, duration=35, wave_amplitude=-32 delay 8 playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER - createsprite gLeechSeedSpriteTemplate, ANIM_TARGET, 2, 15, 0, -16, 24, 35, -40 + createleechseedsprite ANIM_TARGET, 2, initial_x=15, initial_y=0, target_x=-16, target_y=24, duration=35, wave_amplitude=-40 delay 8 playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER - createsprite gLeechSeedSpriteTemplate, ANIM_TARGET, 2, 15, 0, 16, 24, 35, -37 + createleechseedsprite ANIM_TARGET, 2, initial_x=15, initial_y=0, target_x=16, target_y=24, duration=35, wave_amplitude=-37 delay 12 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET, 10, 8 waitforvisualfinish @@ -21626,17 +21624,17 @@ gBattleAnimMove_MegaPunch:: loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET delay 2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK setalpha 12, 8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 50 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE delay 50 call SetImpactBackground - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=8, color2=RGB_BLACK, blend_y2=0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -21651,7 +21649,7 @@ gBattleAnimMove_MegaKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET delay 2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK setalpha 12, 8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 50 @@ -21659,10 +21657,10 @@ gBattleAnimMove_MegaKick:: delay 50 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET call SetImpactBackground - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=8, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -21685,11 +21683,11 @@ CometPunchContinue: blendoff end CometPunchLeft: - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=-8, relative_to=ANIM_TARGET, animation=2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -8, 0, 8, 1, 0 goto CometPunchContinue CometPunchRight: - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=8, y=-8, relative_to=ANIM_TARGET, animation=2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 goto CometPunchContinue @@ -21714,7 +21712,7 @@ SonicBoomProjectile: delay 4 return SonicBoomHit: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 delay 4 return @@ -21821,23 +21819,23 @@ BeatUpContinue: blendoff end BeatUpLeft: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -20, -20, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-20, y=-20, relative_to=ANIM_TARGET, animation=2 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, -20, -12, 8, 1, 0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=8, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 8, 8, 8, 1, 0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET goto BeatUpContinue BeatUpRight: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 12, -20, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=12, y=-20, relative_to=ANIM_TARGET, animation=2 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 12, -12, 8, 1, 0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -12, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-12, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, -12, 8, 8, 1, 0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET @@ -21851,7 +21849,7 @@ gBattleAnimMove_Stomp:: playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET createsprite gStompFootSpriteTemplate, ANIM_ATTACKER, 3, 0, -32, 15 delay 19 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=-8, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 4, 9, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish @@ -21914,10 +21912,10 @@ gBattleAnimMove_Reversal:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB_WHITE, 8, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=3, color1=RGB_WHITE, blend_y1=8, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish delay 30 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 3, 2, 0, 10, RGB_WHITE + blend_color_cycle selector=(F_PAL_BG | F_PAL_BATTLERS), delay=3, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB_WHITE delay 10 playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER createsprite gReversalOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 0 @@ -21931,9 +21929,9 @@ gBattleAnimMove_Reversal:: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 delay 8 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 8, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_WHITE, blend_y1=8, color2=RGB_BLACK, blend_y2=0 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 10, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0 end @@ -21955,12 +21953,12 @@ PursuitContinue: end PursuitNormal: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 6, 1, 0 goto PursuitContinue PursuitOnSwitchout: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 6, 1, 0 goto PursuitContinue @@ -21974,13 +21972,13 @@ gBattleAnimMove_SpikeCannon:: waitforvisualfinish loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 5, 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 - createsprite gLinearStingerSpriteTemplate, ANIM_ATTACKER, 2, 10, -8, -8, -8, 20 - createsprite gLinearStingerSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 0, 0, 20 - createsprite gLinearStingerSpriteTemplate, ANIM_ATTACKER, 2, 26, 8, 8, 8, 20 + create_linear_stinger_sprite ANIM_ATTACKER, 2, initial_x=10, initial_y=-8, target_x=-8, target_y=-8, duration=20 + create_linear_stinger_sprite ANIM_ATTACKER, 2, initial_x=18, initial_y=0, target_x=0, target_y=0, duration=20 + create_linear_stinger_sprite ANIM_ATTACKER, 2, initial_x=26, initial_y=8, target_x=8, target_y=8, duration=20 waitforvisualfinish - createsprite gHandleInvertHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -8, -8, 1, 2 - createsprite gHandleInvertHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 - createsprite gHandleInvertHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 8, 1, 2 + create_handle_invert_hitsplat_sprite ANIM_ATTACKER, 3, x=-8, y=-8, relative_to=1, animation=2 + create_handle_invert_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=1, animation=2 + create_handle_invert_hitsplat_sprite ANIM_ATTACKER, 3, x=8, y=8, relative_to=1, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 7, 1 loopsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET, 5, 3 waitforvisualfinish @@ -21996,7 +21994,7 @@ gBattleAnimMove_SwordsDance:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 16, 6, 1, 4 createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 delay 22 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_SWORD, delay=2, num_blends=2, color1=RGB(18, 31, 31), blend_y1=16, color2=0, blend_y2=0 waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -22006,7 +22004,7 @@ gBattleAnimMove_SwordsDance:: gBattleAnimMove_PsychUp:: loadspritegfx ANIM_TAG_SPIRAL monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendColorCycleExclude, 2, 1, 2, 6, 1, 11, RGB_BLACK + blend_color_cycleexclude unk0=1, delay=2, num_blends=6, initial_blend_y=1, target_blend_y=11, color=RGB_BLACK setalpha 12, 8 loopsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 5, 10 createsprite gPsychUpSpiralSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 0, 0 @@ -22030,7 +22028,7 @@ gBattleAnimMove_DizzyPunch:: setalpha 12, 8 call DizzyPunchLunge createsprite gFistFootSpriteTemplate, ANIM_TARGET, 5, 16, 8, 20, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 16, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=16, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 16, 8, 160, -32 createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 16, 8, -256, -40 @@ -22041,7 +22039,7 @@ gBattleAnimMove_DizzyPunch:: delay 10 call DizzyPunchLunge createsprite gFistFootSpriteTemplate, ANIM_TARGET, 5, -16, -8, 20, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -16, -16, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-16, y=-16, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, -16, -8, 160, -32 createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, -16, -8, -256, -40 @@ -22113,13 +22111,13 @@ FuryCutterRight: createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 goto FuryCutterContinue FuryCutterMedium: - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB(9, 8, 10), 4, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB(9, 8, 10), blend_y1=4, color2=RGB_BLACK, blend_y2=0 goto FuryCutterContinue2 FuryCutterStrong: - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=3, color1=RGB(9, 8, 10), blend_y1=4, color2=RGB_BLACK, blend_y2=0 goto FuryCutterContinue2 FuryCutterStrongest: - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=3, color1=RGB(9, 8, 10), blend_y1=4, color2=RGB_BLACK, blend_y2=0 goto FuryCutterContinue2 gBattleAnimMove_SelfDestruct:: @@ -22164,7 +22162,7 @@ gBattleAnimMove_Slam:: createsprite gSlamHitSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -12, 10, 0, 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 delay 3 @@ -22294,7 +22292,7 @@ RisingWaterHitEffect: gBattleAnimMove_Explosion:: loadspritegfx ANIM_TAG_EXPLOSION - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(26, 8, 8), 8, RGB_BLACK, 8 + complex_palette_blend selector=F_PAL_BG, delay=8, num_blends=9, color1=RGB(26, 8, 8), blend_y1=8, color2=RGB_BLACK, blend_y2=8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_RIGHT, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_LEFT, 8, 0, 40, 1 @@ -22328,12 +22326,12 @@ Explosion1: gBattleAnimMove_DefenseCurl:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 18, 3 - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE + set_grayscale_pal battler=ANIM_ATTACKER createvisualtask AnimTask_DefenseCurlDeformMon, 5 waitforvisualfinish createsprite gEclipsingOrbSpriteTemplate, ANIM_ATTACKER, 2, 0, 6, 0, 1 waitforvisualfinish - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE + set_original_pal battler=ANIM_ATTACKER waitforvisualfinish end @@ -22349,7 +22347,7 @@ gBattleAnimMove_Protect:: gBattleAnimMove_Detect:: loadspritegfx ANIM_TAG_SPARKLE_4 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 9, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=9, color=RGB_BLACK waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_WHITE delay 18 @@ -22357,7 +22355,7 @@ gBattleAnimMove_Detect:: createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 20, -20 waitforvisualfinish delay 10 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 9, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=9, target_blend_y=0, color=RGB_BLACK createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB_WHITE waitforvisualfinish end @@ -22393,22 +22391,22 @@ Frustration_Strongest: createvisualtask AnimTask_SwayMon, 5, 0, 16, 6144, 8, ANIM_ATTACKER delay 5 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 30, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=24, y=8, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-24, y=-16, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=8, y=4, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-16, y=19, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=18, y=-18, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 9, 0, RGB_RED @@ -22426,15 +22424,15 @@ Frustration_Strong: createvisualtask AnimTask_StrongFrustrationGrowAndShrink, 5 delay 7 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=8, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 6, 1 delay 14 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 12, -6, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=12, y=-6, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 6, 1 delay 14 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -12, -6, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-12, y=-6, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 6, 1 waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 9, 0, RGB_RED @@ -22447,13 +22445,13 @@ Frustration_Medium: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 4, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=4, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -4, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-4, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 6, 1 goto Frustration_Continue Frustration_Weak: @@ -22463,7 +22461,7 @@ Frustration_Weak: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 10, 2 delay 12 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 goto Frustration_Continue @@ -22479,7 +22477,7 @@ gBattleAnimMove_Safeguard:: createsprite gGuardRingSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATK_SIDE, 0, 2, 0, 10, RGB_WHITE + blend_color_cycle selector=F_PAL_ATK_SIDE, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -22518,7 +22516,7 @@ gBattleAnimMove_ViseGrip:: createsprite gViceGripSpriteTemplate, ANIM_ATTACKER, 2, 0 createsprite gViceGripSpriteTemplate, ANIM_ATTACKER, 2, 1 delay 9 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 1, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 5, 1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -22540,8 +22538,8 @@ gBattleAnimMove_Guillotine:: createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 23, 1 delay 46 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 8, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=8, color2=RGB_BLACK, blend_y2=0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -22560,7 +22558,7 @@ gBattleAnimMove_PayDay:: createsprite gCoinThrowSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 1152 waitforvisualfinish playsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 1, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createsprite gFallingCoinSpriteTemplate, ANIM_ATTACKER, 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 waitforvisualfinish @@ -22571,71 +22569,71 @@ gBattleAnimMove_PayDay:: gBattleAnimMove_Outrage:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 8, 3 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), 2, 5, 3, 8, RGB(14, 13, 0) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), delay=2, num_blends=5, initial_blend_y=3, target_blend_y=8, color=RGB(14, 13, 0) createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 6, 5, 4 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, 0, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=1280/256, y_velocity=0/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, 0, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=-1280/256, y_velocity=0/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 0, 1280, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=0/256, y_velocity=1280/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 0, -1280, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=0/256, y_velocity=-1280/256, flicker_duration=3 delay 0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 40, 1 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, 768, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=1280/256, y_velocity=768/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, 768, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=-1280/256, y_velocity=768/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, -768, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=1280/256, y_velocity=-768/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, -768, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=-1280/256, y_velocity=-768/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, 0, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=1280/256, y_velocity=0/256, flicker_duration=3 call OutrageFlames call OutrageFlames waitforvisualfinish end OutrageFlames: delay 3 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, 0, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=-1280/256, y_velocity=0/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 0, 1280, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=0/256, y_velocity=1280/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 0, -1280, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=0/256, y_velocity=-1280/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, 768, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=1280/256, y_velocity=768/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, 768, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=-1280/256, y_velocity=768/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, -768, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=1280/256, y_velocity=-768/256, flicker_duration=3 delay 0 - createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, -768, 3 + create_outrage_flame_sprite ANIM_TARGET, 2, x=0, y=0, duration=30, x_velocity=-1280/256, y_velocity=-768/256, flicker_duration=3 return gBattleAnimMove_Spark:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=5, target_blend_y=5, color=RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 22) delay 10 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=5, target_blend_y=5, color=RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 22) delay 20 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 7, 7, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=7, target_blend_y=7, color=RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 @@ -22647,14 +22645,14 @@ gBattleAnimMove_Spark:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 delay 4 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + blend_color_cycle selector=(F_PAL_BG | F_PAL_ATTACKER), delay=-31, num_blends=1, initial_blend_y=0, target_blend_y=0, color=RGB(31, 31, 22) createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 4 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, -31, 2, 0, 6, RGB(31, 31, 22) + blend_color_cycle selector=F_PAL_TARGET, delay=-31, num_blends=2, initial_blend_y=0, target_blend_y=6, color=RGB(31, 31, 22) call ElectricityEffect waitforvisualfinish end @@ -22685,7 +22683,7 @@ gBattleAnimMove_Attract:: createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 112, 256, 90 createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 200, 272, 90 delay 75 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 10, RGB(31, 25, 27) + blend_color_cycle selector=F_PAL_TARGET, delay=4, num_blends=4, initial_blend_y=0, target_blend_y=10, color=RGB(31, 25, 27) end gBattleAnimMove_Growth:: @@ -22695,7 +22693,7 @@ gBattleAnimMove_Growth:: waitforvisualfinish end GrowthEffect: - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_WHITE playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_ATTACKER, 0 return @@ -22725,7 +22723,7 @@ gBattleAnimMove_ConfuseRay:: fadetobg BG_GHOST waitbgfadein createvisualtask SoundTask_AdjustPanningVar, 2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 - createvisualtask AnimTask_BlendColorCycleByTag, 2, ANIM_TAG_YELLOW_BALL, 0, 6, 0, 14, RGB(31, 10, 0) + blend_color_cyclebytag tag=ANIM_TAG_YELLOW_BALL, delay=0, num_blends=6, initial_blend_y=0, target_blend_y=14, color=RGB(31, 10, 0) createsprite gConfuseRayBallBounceSpriteTemplate, ANIM_TARGET, 2, 28, 0, 288 waitforvisualfinish setalpha 8, 8 @@ -22755,12 +22753,12 @@ gBattleAnimMove_MeanLook:: loadspritegfx ANIM_TAG_EYE monbg ANIM_DEF_PARTNER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK loopsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_TARGET, 15, 4 waitplaysewithpan SE_M_LEER, SOUND_PAN_TARGET, 85 createsprite gMeanLookEyeSpriteTemplate, ANIM_ATTACKER, 2 delay 120 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK delay 30 clearmonbg ANIM_DEF_PARTNER waitforvisualfinish @@ -22768,7 +22766,7 @@ gBattleAnimMove_MeanLook:: gBattleAnimMove_RockThrow:: loadspritegfx ANIM_TAG_ROCKS - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_TARGET, 2, 6, 1, 15, 1 + shake_mon_or_platform unused_anim_battler=ANIM_TARGET, velocity=6, shake_timer=1, shake_duration=15, type=1 createsprite gFallingRockSpriteTemplate, ANIM_TARGET, 2, 0, 1, 0, 0 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 6 @@ -22790,7 +22788,7 @@ gBattleAnimMove_RockThrow:: gBattleAnimMove_RockSlide:: loadspritegfx ANIM_TAG_ROCKS monbg ANIM_DEF_PARTNER - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 + shake_mon_or_platform velocity=7, shake_timer=1, shake_duration=11, type=1 createsprite gFallingRockSpriteTemplate, ANIM_TARGET, 2, -5, 1, -5, 1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET delay 2 @@ -22848,7 +22846,7 @@ gBattleAnimMove_Thief:: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 delay 6 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 8, 1 waitforvisualfinish delay 20 @@ -22999,7 +22997,7 @@ gBattleAnimMove_Conversion:: createsprite gConversionSpriteTemplate, ANIM_ATTACKER, 2, 24, 24 delay 20 playsewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_CONVERSION, 1, 1, RGB(31, 31, 13), 12, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_CONVERSION, delay=1, num_blends=1, color1=RGB(31, 31, 13), blend_y1=12, color2=0, blend_y2=0 delay 6 createvisualtask AnimTask_ConversionAlphaBlend, 5 waitforvisualfinish @@ -23067,7 +23065,7 @@ gBattleAnimMove_RollingKick:: createsprite gSlidingKickSpriteTemplate, ANIM_ATTACKER, 2, -24, 0, 48, 10, 160, 0 delay 5 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 8 @@ -23086,7 +23084,7 @@ gBattleAnimMove_Headbutt:: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish end @@ -23104,7 +23102,7 @@ gBattleAnimMove_HornAttack:: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 4, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET waitforvisualfinish end @@ -23122,14 +23120,14 @@ FuryAttackContinue: FuryAttackRight: createsprite gHornHitSpriteTemplate, ANIM_TARGET, 4, 8, 8, 10 waitforvisualfinish - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET goto FuryAttackContinue FuryAttackLeft: createsprite gHornHitSpriteTemplate, ANIM_TARGET, 4, -8, -8, 10 waitforvisualfinish - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET goto FuryAttackContinue @@ -23153,37 +23151,37 @@ HornDrillContinue: playse SE_BANG createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 2, ANIM_TARGET, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=0, y=2, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -4, 3, ANIM_TARGET, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-4, y=3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -8, -5, ANIM_TARGET, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-8, y=-5, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 4, -12, ANIM_TARGET, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=4, y=-12, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 16, 0, ANIM_TARGET, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=16, y=0, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 5, 18, ANIM_TARGET, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=5, y=18, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -17, 12, ANIM_TARGET, 2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-17, y=12, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -21, -15, ANIM_TARGET, 2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-21, y=-15, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, -27, ANIM_TARGET, 2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=8, y=-27, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 0, ANIM_TARGET, 2 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=32, y=0, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET delay 4 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 @@ -23260,7 +23258,7 @@ gBattleAnimMove_LowKick:: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 createsprite gSlidingKickSpriteTemplate, ANIM_TARGET, 2, -24, 28, 40, 8, 160, 0 delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-8, y=8, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 6, 384, ANIM_TARGET, 2 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish @@ -23272,9 +23270,9 @@ gBattleAnimMove_Earthquake:: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 50 playsewithpan SE_M_EARTHQUAKE, 0 delay 10 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + complex_palette_blend selector=F_PAL_BG, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=14, color2=RGB_WHITE, blend_y2=14 delay 16 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + complex_palette_blend selector=F_PAL_BG, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=14, color2=RGB_WHITE, blend_y2=14 end gBattleAnimMove_Fissure:: @@ -23285,11 +23283,11 @@ gBattleAnimMove_Fissure:: delay 8 call FissureDirtPlumeFar delay 15 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + complex_palette_blend selector=F_PAL_BG, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=14, color2=RGB_WHITE, blend_y2=14 delay 15 call FissureDirtPlumeClose delay 15 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + complex_palette_blend selector=F_PAL_BG, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=14, color2=RGB_WHITE, blend_y2=14 delay 15 call FissureDirtPlumeFar delay 50 @@ -23354,7 +23352,7 @@ DigUnleash: delay 1 createvisualtask AnimTask_DigUpMovement, 2, TRUE delay 16 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_ATTACKER clearmonbg ANIM_ATTACKER @@ -23408,7 +23406,7 @@ gBattleAnimMove_QuickAttack:: playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER delay 4 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -23430,7 +23428,7 @@ gBattleAnimMove_Rage:: waitforvisualfinish createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, TRUE, 1, 10, 1, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish @@ -23521,10 +23519,10 @@ SkullBashAttack: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER waitforvisualfinish playse SE_BANG - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + complex_palette_blend selector=F_PAL_BG, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=14, color2=RGB_WHITE, blend_y2=14 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 0 + create_flashing_hitsplat_sprite ANIM_TARGET, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=0 loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 8, 3 waitforvisualfinish createvisualtask AnimTask_SkullBashPosition, 2, 1 @@ -23584,7 +23582,7 @@ gBattleAnimMove_Barrage:: createvisualtask AnimTask_BarrageBall, 3 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER delay 24 - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, 40, 1 + shake_mon_or_platform velocity=8, shake_timer=1, shake_duration=40, type=1 createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 0, 4, 20, 1 createvisualtask AnimTask_ShakeMon, 3, ANIM_DEF_PARTNER, 0, 4, 20, 1 loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 2 @@ -23640,7 +23638,7 @@ SkyAttackUnleash: monbg ANIM_ATTACKER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE delay 4 - createvisualtask AnimTask_AttackerFadeToInvisible, 5, 0 + attacker_fade_to_invisible priority=5, step_delay=0 waitforvisualfinish createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_SKY_UPPERCUT, SOUND_PAN_ATTACKER createsprite gSkyAttackBirdSpriteTemplate, ANIM_TARGET, 2 @@ -23648,7 +23646,7 @@ SkyAttackUnleash: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 10, 0, 18, 1 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 20 - createvisualtask AnimTask_AttackerFadeFromInvisible, 5, 1 + attacker_fade_from_invisible priority=5, step_delay=1 delay 2 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 15, 0, RGB_WHITE waitforvisualfinish @@ -23700,7 +23698,7 @@ gBattleAnimMove_SuperFang:: createsprite gSuperFangSpriteTemplate, ANIM_TARGET, 2 playsewithpan SE_M_BITE, SOUND_PAN_TARGET delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB(31, 2, 2), 14, RGB_WHITE, 14 + complex_palette_blend selector=F_PAL_BG, delay=3, num_blends=1, color1=RGB(31, 2, 2), blend_y1=14, color2=RGB_WHITE, blend_y2=14 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 7, 12, 1 waitforvisualfinish blendoff @@ -23727,7 +23725,7 @@ gBattleAnimMove_Struggle:: createsprite gMovementWavesSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 2 loopsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER, 12, 4 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish @@ -23775,7 +23773,7 @@ gBattleAnimMove_Flail:: createvisualtask AnimTask_FlailMovement, 2, ANIM_ATTACKER loopsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER, 8, 2 waitforvisualfinish - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 30, 1, 0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish @@ -23788,7 +23786,7 @@ gBattleAnimMove_Spite:: playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitbgfadein monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 6, 0, 8, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=6, initial_blend_y=0, target_blend_y=8, color=RGB_WHITE createvisualtask AnimTask_SpiteTargetShadow, 2 loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 20, 3 waitforvisualfinish @@ -23827,7 +23825,7 @@ gBattleAnimMove_MachPunch:: createvisualtask AnimTask_AttackerPunchWithTrace, 2, RGB(8, 9, 28), 10 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 @@ -23881,7 +23879,7 @@ gBattleAnimMove_Endure:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -23925,7 +23923,7 @@ gBattleAnimMove_Rollout:: createvisualtask AnimTask_Rollout, 2, 0 waitforvisualfinish createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 30, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -23955,7 +23953,7 @@ gBattleAnimMove_FalseSwipe:: delay 2 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end @@ -24015,9 +24013,9 @@ MagnitudeIntense: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 0, 50 loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 10 delay 10 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + complex_palette_blend selector=F_PAL_BG, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=14, color2=RGB_WHITE, blend_y2=14 delay 16 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + complex_palette_blend selector=F_PAL_BG, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=14, color2=RGB_WHITE, blend_y2=14 goto MagnitudeEnd gBattleAnimMove_RapidSpin:: @@ -24028,7 +24026,7 @@ gBattleAnimMove_RapidSpin:: createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 0 loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 10, 1, 0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish @@ -24044,7 +24042,7 @@ gBattleAnimMove_Moonlight:: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR setalpha 0, 16 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK waitforvisualfinish createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 120, 56 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -24081,13 +24079,13 @@ gBattleAnimMove_ExtremeSpeed:: createvisualtask AnimTask_ExtremeSpeedImpact, 2 delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gMonEdgeHitSplatSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, -12, 3 + create_mon_edge_hitsplat_sprite ANIM_TARGET, 2, relative_to=ANIM_TARGET, x=0, y=-12, animation=3 delay 10 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gMonEdgeHitSplatSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 12, 3 + create_mon_edge_hitsplat_sprite ANIM_TARGET, 2, relative_to=ANIM_TARGET, x=0, y=12, animation=3 delay 10 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gMonEdgeHitSplatSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 0, 3 + create_mon_edge_hitsplat_sprite ANIM_TARGET, 2, relative_to=ANIM_TARGET, x=0, y=0, animation=3 waitforvisualfinish createvisualtask AnimTask_SpeedDust, 2 delay 10 @@ -24238,7 +24236,7 @@ gBattleAnimMove_Charge:: loadspritegfx ANIM_TAG_ELECTRICITY monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=4, color=RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 60, 2, 12 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER @@ -24262,7 +24260,7 @@ gBattleAnimMove_Charge:: createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0, -16, -16 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=4, initial_blend_y=4, target_blend_y=0, color=RGB_BLACK clearmonbg ANIM_ATTACKER blendoff end @@ -24331,7 +24329,7 @@ gBattleAnimMove_Superpower:: createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 2, ANIM_ATTACKER playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER delay 20 - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1 + shake_mon_or_platform velocity=4, shake_timer=1, shake_duration=180, type=1 createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_EARTHQUAKE, 0 delay 40 createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 200, 96, 1, 120 @@ -24383,22 +24381,22 @@ BrickBreakNormal: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8 delay 4 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -18, -18, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-18, y=-18, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET delay 20 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, 18, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=18, y=18, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET delay 20 createvisualtask AnimTask_WindUpLunge, 2, ANIM_ATTACKER, -24, 0, 24, 10, 24, 3 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 6, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=6, color=RGB_BLACK delay 37 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 10, 1, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 6, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=6, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end @@ -24409,18 +24407,18 @@ BrickBreakShatteredWall: delay 4 createsprite gBrickBreakWallSpriteTemplate, ANIM_ATTACKER, 3, ANIM_TARGET, 0, 0, 90, 10 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -18, -18, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-18, y=-18, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET delay 20 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8 delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, 18, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=18, y=18, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET delay 20 createvisualtask AnimTask_WindUpLunge, 2, ANIM_ATTACKER, -24, 0, 24, 10, 24, 3 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 6, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=6, color=RGB_BLACK delay 37 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 10, 1, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish @@ -24430,7 +24428,7 @@ BrickBreakShatteredWall: createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 3, 8, 12 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 6, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=6, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end @@ -24459,17 +24457,17 @@ gBattleAnimMove_Endeavor:: createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(31, 21, 0), 12, 1, 2 delay 6 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 12, -12, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=12, y=-12, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 24 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -12, 12, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-12, y=12, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end gBattleAnimMove_Eruption:: loadspritegfx ANIM_TAG_WARM_ROCK - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 2, 0, 4, RGB_RED + simple_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=2, initial_blend_y=0, target_blend_y=4, color=RGB_RED waitforvisualfinish createvisualtask AnimTask_EruptionLaunchRocks, 2 waitplaysewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER, 60 @@ -24489,7 +24487,7 @@ gBattleAnimMove_Eruption:: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 8, 60 loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 16, 12 delay 80 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, F_PAL_BG | F_PAL_BATTLERS, 4, 4, 0, RGB_RED + simple_palette_blend unused_subpriority_offset=40, selector=F_PAL_BG | F_PAL_BATTLERS, delay=4, initial_blend_y=4, target_blend_y=0, color=RGB_RED end gBattleAnimMove_SkillSwap:: @@ -24546,13 +24544,13 @@ gBattleAnimMove_Camouflage:: setalpha 16, 0 createvisualtask AnimTask_SetCamouflageBlend, 5, F_PAL_ATTACKER, 3, 0, 14 delay 16 - createvisualtask AnimTask_AttackerFadeToInvisible, 2, 4 + attacker_fade_to_invisible step_delay=4 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER waitforvisualfinish delay 8 createvisualtask AnimTask_SetCamouflageBlend, 5, F_PAL_ATTACKER, 0, 0, 0 waitforvisualfinish - createvisualtask AnimTask_AttackerFadeFromInvisible, 2, 1 + attacker_fade_from_invisible step_delay=1 waitforvisualfinish blendoff clearmonbg ANIM_ATK_PARTNER @@ -24562,13 +24560,13 @@ gBattleAnimMove_TailGlow:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=4, color=RGB_BLACK waitforvisualfinish - createsprite gTailGlowOrbSpriteTemplate, ANIM_ATTACKER, 66, ANIM_ATTACKER + create_tail_glow_orb_sprite ANIM_ATTACKER, 66, relative_to=ANIM_ATTACKER delay 18 loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER, 16, 6 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=4, initial_blend_y=4, target_blend_y=0, color=RGB_BLACK clearmonbg ANIM_ATTACKER blendoff delay 1 @@ -24591,22 +24589,22 @@ gBattleAnimMove_LusterPurge:: waitforvisualfinish createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(0, 0, 23) waitforvisualfinish - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA @@ -24626,7 +24624,7 @@ gBattleAnimMove_MistBall:: waitforvisualfinish playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 10, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 1, 1, RGB(23, 16, 31), 16, RGB_WHITE, 16 + complex_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=1, num_blends=1, color1=RGB(23, 16, 31), blend_y1=16, color2=RGB_WHITE, blend_y2=16 delay 0 playsewithpan SE_M_HAZE, 0 createvisualtask AnimTask_MistBallFog, 5 @@ -24756,7 +24754,7 @@ gBattleAnimMove_NeedleArm:: createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 16, 16, 16 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 18, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 1, 1, 0, -24, 10 @@ -24787,12 +24785,12 @@ gBattleAnimMove_CrushClaw:: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 delay 4 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 18, 1 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, -10, 0 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, 10, 0 + create_claw_slash_sprite ANIM_TARGET, 2, x=-10, y=-10, animation=0 + create_claw_slash_sprite ANIM_TARGET, 2, x=-10, y=10, animation=0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET delay 12 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, -10, 1 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, 10, 1 + create_claw_slash_sprite ANIM_TARGET, 2, x=10, y=-10, animation=1 + create_claw_slash_sprite ANIM_TARGET, 2, x=10, y=10, animation=1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish blendoff @@ -24804,7 +24802,7 @@ gBattleAnimMove_Aromatherapy:: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 0, 0, 7, RGB(13, 31, 12) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=0, initial_blend_y=0, target_blend_y=7, color=RGB(13, 31, 12) delay 1 monbg ANIM_ATTACKER delay 1 @@ -24822,7 +24820,7 @@ gBattleAnimMove_Aromatherapy:: waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 0, 7, 0, RGB(13, 31, 12) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=0, initial_blend_y=7, target_blend_y=0, color=RGB(13, 31, 12) delay 1 playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER createvisualtask AnimTask_StatusClearedEffect, 2, 1 @@ -24833,7 +24831,7 @@ gBattleAnimMove_Aromatherapy:: createsprite gSparklingStarsSpriteTemplate, ANIM_ATTACKER, 16, 12, -5, 0, 0, 32, 60, 1 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_ANIM_1), 3, 10, 0, RGB(13, 31, 12) + simple_palette_blend unused_subpriority_offset=0, selector=(F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_ANIM_1), delay=3, initial_blend_y=10, target_blend_y=0, color=RGB(13, 31, 12) createsprite gBlendThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 16, 0, 0, 0, 1 waitforvisualfinish end @@ -24847,17 +24845,17 @@ gBattleAnimMove_FakeTears:: createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 1 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 12, 4 delay 8 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0, 1 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0, type=0 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0, type=1 delay 8 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0, 2 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0, 3 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0, type=2 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0, type=3 delay 8 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0, 1 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0, type=0 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0, type=1 delay 8 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0, 2 - createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0, 3 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0, type=2 + create_tear_drop_sprite ANIM_ATTACKER, 2, relative_to=0, type=3 waitforvisualfinish end @@ -24894,13 +24892,13 @@ gBattleAnimMove_OdorSleuth:: waitforvisualfinish clearmonbg ANIM_TARGET delay 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_WHITEALPHA, 16, RGB_WHITEALPHA, 0 + complex_palette_blend selector=F_PAL_BG, delay=3, num_blends=1, color1=RGB_WHITEALPHA, blend_y1=16, color2=RGB_WHITEALPHA, blend_y2=0 playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER end gBattleAnimMove_GrassWhistle:: loadspritegfx ANIM_TAG_MUSIC_NOTES - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB(18, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=4, color=RGB(18, 31, 12) waitforvisualfinish createvisualtask AnimTask_MusicNotesRainbowBlend, 2 waitforvisualfinish @@ -24931,19 +24929,19 @@ gBattleAnimMove_GrassWhistle:: delay 4 waitforvisualfinish createvisualtask AnimTask_MusicNotesClearRainbowBlend, 2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB(18, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=4, initial_blend_y=4, target_blend_y=0, color=RGB(18, 31, 12) waitforvisualfinish end gBattleAnimMove_Tickle:: loadspritegfx ANIM_TAG_EYE_SPARKLE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_ATTACKER, delay=0, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK waitforvisualfinish createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, -16, -8 createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 16, -8 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 16, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_ATTACKER, delay=0, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK waitforvisualfinish delay 20 createvisualtask AnimTask_SwayMon, 3, 0, 6, 1280, 3, ANIM_ATTACKER @@ -24980,7 +24978,7 @@ gBattleAnimMove_ShadowPunch:: createvisualtask AnimTask_AttackerPunchWithTrace, 2, RGB_BLACK, 13 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 @@ -25022,7 +25020,7 @@ gBattleAnimMove_AerialAce:: playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=10, color2=RGB_BLACK, blend_y2=0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -25031,8 +25029,8 @@ gBattleAnimMove_AerialAce:: gBattleAnimMove_IronDefense:: loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 2, RGB_WHITEALPHA, 14, RGB_WHITEALPHA, 0 + metallic_shine permanent=0 + complex_palette_blend selector=F_PAL_BG, delay=8, num_blends=2, color1=RGB_WHITEALPHA, blend_y1=14, color2=RGB_WHITEALPHA, blend_y2=0 waitforvisualfinish end @@ -25165,7 +25163,7 @@ gBattleAnimMove_CalmMind:: gBattleAnimMove_LeafBlade:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_CROSS_IMPACT - createvisualtask AnimTask_LeafBlade, 5 + create_leaf_blade_task delay 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 playsewithpan SE_M_CUT, SOUND_PAN_TARGET @@ -25180,7 +25178,7 @@ gBattleAnimMove_LeafBlade:: setalpha 12, 8 delay 12 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 18, 1 - createsprite gCrossImpactSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 36 + create_cross_impact_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=1, duration=36 playsewithpan SE_M_LEER, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -25196,12 +25194,12 @@ gBattleAnimMove_DragonDance:: playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER delay 8 createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB(0, 0, 19), 14, 0, 3 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 128 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 170 - createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 213 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=0/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=43/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=85/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=128/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=170/256 + create_dragon_dance_orb_sprite ANIM_ATTACKER, 2, angle=213/256 delay 30 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER delay 30 @@ -25218,7 +25216,7 @@ gBattleAnimMove_ShockWave:: loadspritegfx ANIM_TAG_LIGHTNING monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=4, color=RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 20, 0, 2 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER @@ -25243,7 +25241,7 @@ gBattleAnimMove_ShockWave:: gBattleAnimMove_Harden:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + metallic_shine permanent=0 waitforvisualfinish end @@ -25300,7 +25298,7 @@ gBattleAnimMove_MindReader:: createsprite gWhiteHaloSpriteTemplate, ANIM_ATTACKER, 5 delay 40 playsewithpan SE_M_LEER, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG, 1, 2, 0, 10, RGB_BLACK + blend_color_cycle selector=F_PAL_BG, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB_BLACK call MindReaderEyeSpikeEffect waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -25336,7 +25334,7 @@ gBattleAnimMove_IcePunch:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=7, color=RGB_BLACK createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(12, 26, 31) delay 20 playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET @@ -25351,7 +25349,7 @@ gBattleAnimMove_IcePunch:: createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 224 delay 17 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 4, 0, -10, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=-10, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 3, 1 @@ -25361,7 +25359,7 @@ gBattleAnimMove_IcePunch:: delay 5 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(12, 26, 31) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=7, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -25383,7 +25381,7 @@ gBattleAnimMove_Confusion:: call SetPsychicBackground setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_WHITE waitforvisualfinish playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 15, 1 @@ -25400,7 +25398,7 @@ gBattleAnimMove_Psychic:: call SetPsychicBackground setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB(31, 23, 0) + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB(31, 23, 0) waitforvisualfinish loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1 @@ -25425,7 +25423,7 @@ FutureSight: call SetPsychicBackground setalpha 8, 8 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=8, color=RGB_WHITE createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_ATTACKER, 1 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -25438,9 +25436,9 @@ gBattleAnimMove_Thunder:: waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 5, -256, 0, 1, -1 waitbgfadein - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK delay 16 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 16, -36 @@ -25457,7 +25455,7 @@ gBattleAnimMove_Thunder:: createsprite gLightningSpriteTemplate, ANIM_TARGET, 6, -16, 16 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET delay 5 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 24, -32 delay 1 @@ -25465,9 +25463,9 @@ gBattleAnimMove_Thunder:: delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 24, 16 delay 30 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 5 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -32 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET @@ -25476,13 +25474,13 @@ gBattleAnimMove_Thunder:: delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 delay 10 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 createvisualtask AnimTask_ShakeTargetInPattern, 2, 30, 3, TRUE, 0 delay 2 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK + simple_palette_blend unused_anim_battler=ANIM_TARGET, selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK waitforvisualfinish restorebg waitbgfadeout @@ -25496,13 +25494,13 @@ gBattleAnimMove_ThunderPunch:: loadspritegfx ANIM_TAG_LIGHTNING monbg ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK waitforvisualfinish playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 delay 1 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 delay 1 @@ -25511,12 +25509,12 @@ gBattleAnimMove_ThunderPunch:: createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, 16 delay 1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK delay 20 waitforvisualfinish clearmonbg ANIM_TARGET @@ -25539,12 +25537,12 @@ gBattleAnimMove_SacredFire:: delay 1 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 20, 10, 50, 5, 1, 1 delay 1 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 16, 50, 5, 0, 1 delay 1 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -20, 10, 50, 5, -1, 1 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 waitforvisualfinish playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET @@ -25556,10 +25554,10 @@ gBattleAnimMove_SacredFire:: playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET createsprite gLargeFlameSpriteTemplate, ANIM_TARGET, 2, 16, 0, 80, 16, 0, 1 delay 1 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 1 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 0 @@ -25598,29 +25596,29 @@ gBattleAnimMove_DragonBreath:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 7, 7 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 9, RGB_RED - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 21, 1 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 delay 2 - createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + create_dragon_breath_fire_sprite ANIM_TARGET, 2, initial_x=0, initial_y=0, target_x=0, target_y=0, duration=20 waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 9, 0, RGB_RED waitforvisualfinish @@ -25682,7 +25680,7 @@ SnoreEffect: playsewithpan SE_M_SNORE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 7, ANIM_ATTACKER, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 7, 1 - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 14, 0, 0 + shake_mon_or_platform velocity=6, shake_timer=1, shake_duration=14, type=0, battler_selector=0 createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -42, -38, 24, 0, 0 createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 0, -42, 24, 0, 0 createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 42, -38, 24, 0, 0 @@ -25806,7 +25804,7 @@ gBattleAnimMove_Smog:: call SmogCloud delay 120 loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 18, 2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(26, 0, 26) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(26, 0, 26) delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1 waitforvisualfinish @@ -25826,7 +25824,7 @@ gBattleAnimMove_FeintAttack:: delay 0 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3 - createvisualtask AnimTask_AttackerFadeToInvisible, 2, 1 + attacker_fade_to_invisible step_delay=1 waitforvisualfinish clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER @@ -25836,7 +25834,7 @@ gBattleAnimMove_FeintAttack:: monbg ANIM_TARGET delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 9, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -25846,7 +25844,7 @@ gBattleAnimMove_FeintAttack:: delay 32 createvisualtask AnimTask_InitAttackerFadeFromInvisible, 2 monbg ANIM_ATTACKER - createvisualtask AnimTask_AttackerFadeFromInvisible, 2, 1 + attacker_fade_from_invisible step_delay=1 waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -25913,25 +25911,25 @@ gBattleAnimMove_DragonRage:: waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, ANIM_ATTACKER, 15, 0, 0, 4 waitforvisualfinish - createsprite gDragonRageFireSpitSpriteTemplate, ANIM_TARGET, 2, 30, 15, 0, 10, 10 + create_dragon_rage_fire_spit_sprite ANIM_TARGET, 2, initial_x=30, initial_y=15, target_x=0, target_y=10, duration=10 waitforvisualfinish loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET, 11, 3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=5, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -10, -15 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-10, y=-15 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=0, y=25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 15, 5 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=15, y=5 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -25, 0 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=-25, y=0 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 30, 30 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=30, y=30 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, -27, 25 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 2, relative_to=1, x=-27, y=25 delay 1 - createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 0, 8 + create_dragon_rage_fire_plume_sprite ANIM_TARGET, 66, relative_to=1, x=0, y=8 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 66, 0, 0, 4 waitforvisualfinish @@ -25957,10 +25955,10 @@ gBattleAnimMove_Bite:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=-32, animation=0, x_velocity=0/256, y_velocity=819/256, half_duration=10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=0, y=32, animation=4, x_velocity=0/256, y_velocity=-819/256, half_duration=10 delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 7, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -25976,17 +25974,17 @@ gBattleAnimMove_Crunch:: waitbgfadein setalpha 12, 8 playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, -32, -32, 1, 819, 819, 10 - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 32, 32, 5, -819, -819, 10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=-32, y=-32, animation=1, x_velocity=819/256, y_velocity=819/256, half_duration=10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=32, y=32, animation=5, x_velocity=-819/256, y_velocity=-819/256, half_duration=10 delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 5, 2 waitforvisualfinish playsewithpan SE_M_BITE, SOUND_PAN_TARGET - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 32, -32, 7, -819, 819, 10 - createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, -32, 32, 3, 819, -819, 10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=32, y=-32, animation=7, x_velocity=-819/256, y_velocity=819/256, half_duration=10 + create_sharp_teeth_sprite ANIM_ATTACKER, 2, x=-32, y=32, animation=3, x_velocity=819/256, y_velocity=-819/256, half_duration=10 delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=8, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 8, 4, 2 waitforvisualfinish clearmonbg ANIM_TARGET @@ -26002,10 +26000,10 @@ gBattleAnimMove_Clamp:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_VICEGRIP, SOUND_PAN_TARGET - createsprite gClampJawSpriteTemplate, ANIM_ATTACKER, 2, -32, 0, 2, 819, 0, 10 - createsprite gClampJawSpriteTemplate, ANIM_ATTACKER, 2, 32, 0, 6, -819, 0, 10 + create_clamp_jaw_sprite ANIM_ATTACKER, 2, x=-32, y=0, animation=2, x_velocity=819/256, y_velocity=0/256, half_duration=10 + create_clamp_jaw_sprite ANIM_ATTACKER, 2, x=32, y=0, animation=6, x_velocity=-819/256, y_velocity=0/256, half_duration=10 delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -26018,7 +26016,7 @@ gBattleAnimMove_IceBeam:: splitbgprio ANIM_TARGET setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=7, color=RGB_BLACK waitforvisualfinish createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_BUBBLE_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 4, 4, 0, 10 createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 20, 12, 0, 12, 20 @@ -26027,7 +26025,7 @@ gBattleAnimMove_IceBeam:: call IceBeamCreateCrystals call IceBeamCreateCrystals call IceBeamCreateCrystals - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, -31, 0, 7, RGB(0, 20, 31) + simple_palette_blend selector=F_PAL_TARGET, delay=-31, initial_blend_y=0, target_blend_y=7, color=RGB(0, 20, 31) createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 25, 1 call IceBeamCreateCrystals call IceBeamCreateCrystals @@ -26043,9 +26041,9 @@ gBattleAnimMove_IceBeam:: waitforvisualfinish delay 20 call IceCrystalEffectShort - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31) + simple_palette_blend selector=F_PAL_TARGET, delay=5, initial_blend_y=7, target_blend_y=0, color=RGB(0, 20, 31) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=7, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -26108,7 +26106,7 @@ SolarBeamEnd: SolarBeamSetUp: monbg ANIM_ATK_PARTNER setalpha 12, 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 1, 4, 0, 11, RGB(31, 31, 11) + blend_color_cycle selector=F_PAL_ATTACKER, delay=1, num_blends=4, initial_blend_y=0, target_blend_y=11, color=RGB(31, 31, 11) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call SolarBeamAbsorbEffect waitforvisualfinish @@ -26116,54 +26114,54 @@ SolarBeamSetUp: blendoff goto SolarBeamEnd SolarBeamAbsorbEffect: - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 40, 40, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=40, y=40, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -40, -40, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=-40, y=-40, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0, 40, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=0, y=40, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0, -40, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=0, y=-40, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 40, -20, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=40, y=-20, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 40, 20, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=40, y=20, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -40, -20, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=-40, y=-20, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -40, 20, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=-40, y=20, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -20, 30, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=-20, y=30, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 20, -30, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=20, y=-30, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -20, -30, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=-20, y=-30, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 20, 30, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=20, y=30, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -40, 0, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=-40, y=0, duration=16 delay 2 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 40, 0, 16 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=40, y=0, duration=16 delay 2 return SolarBeamUnleash: call SetSolarBeamBg panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 createvisualtask AnimTask_CreateSmallSolarBeamOrbs, 5 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=0 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=1 delay 4 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 10, RGB(25, 31, 0) - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=2 delay 4 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 65, 1 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=3 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=4 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=5 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=6 delay 4 call SolarBeamUnleash1 call SolarBeamUnleash1 @@ -26172,19 +26170,19 @@ SolarBeamUnleash: call UnsetSolarBeamBg goto SolarBeamEnd SolarBeamUnleash1: - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 0 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=0 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=1 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=2 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 3 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=3 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 4 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=4 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 5 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=5 delay 4 - createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 6 + create_solar_beam_big_orb_sprite ANIM_TARGET, 3, x=15, y=0, duration=20, animation=6 delay 4 return @@ -26231,7 +26229,7 @@ BlizzardIceCrystals: gBattleAnimMove_PowderSnow:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 0, 3, RGB_BLACK + simple_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=1, initial_blend_y=0, target_blend_y=3, color=RGB_BLACK waitforvisualfinish panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 call PowderSnowSnowballs @@ -26243,7 +26241,7 @@ gBattleAnimMove_PowderSnow:: waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 20 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 3, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=1, initial_blend_y=3, target_blend_y=0, color=RGB_BLACK end PowderSnowSnowballs: createsprite gPowderSnowSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0, 56, 4, 4, 1 @@ -26324,7 +26322,7 @@ gBattleAnimMove_SignalBeam:: call SignalBeamOrbs call SignalBeamOrbs createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 25, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 8, 5, RGB_RED, 8, RGB(1, 30, 0), 8 + complex_palette_blend selector=F_PAL_TARGET, delay=8, num_blends=5, color1=RGB_RED, blend_y1=8, color2=RGB(1, 30, 0), blend_y2=8 call SignalBeamOrbs call SignalBeamOrbs call SignalBeamOrbs @@ -26357,10 +26355,10 @@ gBattleAnimMove_Absorb:: monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 4, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=4, color=RGB(13, 31, 12) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 delay 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 waitforvisualfinish @@ -26370,7 +26368,7 @@ gBattleAnimMove_Absorb:: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 4, 0, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=4, target_blend_y=0, color=RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -26378,28 +26376,28 @@ gBattleAnimMove_Absorb:: AbsorbEffect: playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 16, 33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=16, wave_period=33 delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, -15, -16, 36 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=-15, wave_amplitude=-16, wave_period=36 delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -10, 20, 20, 39 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-10, y=20, wave_amplitude=20, wave_period=39 delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 5, -18, -20, 35 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=5, y=-18, wave_amplitude=-20, wave_period=35 delay 4 return @@ -26410,10 +26408,10 @@ gBattleAnimMove_MegaDrain:: monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 8, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=8, color=RGB(13, 31, 12) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 delay 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 waitforvisualfinish @@ -26423,7 +26421,7 @@ gBattleAnimMove_MegaDrain:: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 8, 0, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=8, target_blend_y=0, color=RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -26431,36 +26429,36 @@ gBattleAnimMove_MegaDrain:: MegaDrainAbsorbEffect: playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 5, -18, -20, 35 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=5, y=-18, wave_amplitude=-20, wave_period=35 delay 4 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -10, 20, 20, 39 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-10, y=20, wave_amplitude=20, wave_period=39 delay 4 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 16, 33 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=16, wave_period=33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 delay 4 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, -15, -16, 36 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=-15, wave_amplitude=-16, wave_period=36 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 delay 4 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, -15, -16, 36 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=-15, wave_amplitude=-16, wave_period=36 delay 4 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 16, 33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=16, wave_period=33 delay 4 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -10, 20, 20, 39 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-10, y=20, wave_amplitude=20, wave_period=39 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 delay 4 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 5, -18, -20, 35 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=5, y=-18, wave_amplitude=-20, wave_period=35 delay 4 return @@ -26471,10 +26469,10 @@ gBattleAnimMove_GigaDrain:: monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 12, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=12, color=RGB(13, 31, 12) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 delay 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 waitforvisualfinish @@ -26484,7 +26482,7 @@ gBattleAnimMove_GigaDrain:: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 12, 0, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=12, target_blend_y=0, color=RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -26492,44 +26490,44 @@ gBattleAnimMove_GigaDrain:: GigaDrainAbsorbEffect: playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 5, -18, -40, 35 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -10, 20, 20, 39 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=5, y=-18, wave_amplitude=-40, wave_period=35 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-10, y=20, wave_amplitude=20, wave_period=39 delay 4 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 28, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -10, 20, 40, 39 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=28, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-10, y=20, wave_amplitude=40, wave_period=39 delay 4 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 16, 33 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -32, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=16, wave_period=33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-32, wave_period=26 delay 4 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, -15, -16, 36 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=-15, wave_amplitude=-16, wave_period=36 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 delay 4 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 16, 33 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, -15, -16, 36 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=16, wave_period=33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=-15, wave_amplitude=-16, wave_period=36 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 delay 4 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 16, 33 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -40, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=16, wave_period=33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-40, wave_period=26 delay 4 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 36, 33 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -10, 20, 20, 39 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=36, wave_period=33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-10, y=20, wave_amplitude=20, wave_period=39 delay 4 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 5, -18, -20, 35 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=5, y=-18, wave_amplitude=-20, wave_period=35 delay 4 return @@ -26543,21 +26541,21 @@ gBattleAnimMove_LeechLife:: splitbgprio_foes ANIM_TARGET setalpha 12, 8 delay 1 - createsprite gLeechLifeNeedleSpriteTemplate, ANIM_ATTACKER, 2, -20, 15, 12 + create_leech_life_needle_sprite ANIM_ATTACKER, 2, x=-20, y=15, duration=12 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET delay 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=7, color=RGB_BLACK waitforvisualfinish call AbsorbEffect waitforvisualfinish delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 7, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=7, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -26565,7 +26563,7 @@ gBattleAnimMove_LeechLife:: gBattleAnimMove_Synthesis:: loadspritegfx ANIM_TAG_SPARKLE_2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 16, RGB(27, 31, 18) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=16, color=RGB(27, 31, 18) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call GrantingStarsEffect waitforvisualfinish @@ -26607,7 +26605,7 @@ gBattleAnimMove_Sludge:: createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(30, 0, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(30, 0, 31) call PoisonBubblesEffect waitforvisualfinish end @@ -26625,7 +26623,7 @@ gBattleAnimMove_SludgeBomb:: call SludgeBombProjectile call SludgeBombProjectile createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(30, 0, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(30, 0, 31) createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 @@ -26669,7 +26667,7 @@ gBattleAnimMove_Acid:: delay 15 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_DEF_PARTNER, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 2, 2, 0, 12, RGB(30, 0, 31) + blend_color_cycle selector=F_PAL_DEF_SIDE, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(30, 0, 31) createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -22, 0, 15, 55, TRUE playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 10 @@ -26698,7 +26696,7 @@ gBattleAnimMove_Bonemerang:: createsprite gBonemerangSpriteTemplate, ANIM_ATTACKER, 2 delay 20 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 5, 0, 5, 1 delay 17 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER @@ -26717,9 +26715,9 @@ gBattleAnimMove_BoneClub:: playsewithpan SE_M_BONEMERANG, SOUND_PAN_TARGET createsprite gSpinningBoneSpriteTemplate, ANIM_ATTACKER, 2, -42, -25, 0, 0, 15 delay 12 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 5, 1, RGB_BLACK, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, delay=5, num_blends=1, color1=RGB_BLACK, blend_y1=10, color2=RGB_BLACK, blend_y2=0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -26734,7 +26732,7 @@ gBattleAnimMove_BoneRush:: playsewithpan SE_M_BONEMERANG, SOUND_PAN_TARGET createsprite gSpinningBoneSpriteTemplate, ANIM_ATTACKER, 2, -42, -25, 0, 0, 15 delay 12 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 5, 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET waitforvisualfinish @@ -26776,14 +26774,14 @@ MegahornContinue: delay 10 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 6 delay 3 - createsprite gMegahornHornSpriteTemplate, ANIM_ATTACKER, 3, -42, 25, 0, 0, 6 + create_megahorn_horn_sprite ANIM_ATTACKER, 3, x1=-42, y1=25, x2=0, y2=0, duration=6 delay 4 playsewithpan SE_M_VICEGRIP, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -16, 4, 1, 4 waitforvisualfinish createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, -4, 1, 12, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, delay=5, num_blends=1, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 delay 10 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 11 delay 3 @@ -26813,7 +26811,7 @@ gBattleAnimMove_Gust:: createvisualtask AnimTask_AnimateGustTornadoPalette, 5, 1, 70 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 1, 0, 7, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_GUST2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -26834,8 +26832,8 @@ gBattleAnimMove_WingAttack:: delay 24 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 9 delay 17 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, ANIM_TARGET, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=16, y=0, relative_to=ANIM_TARGET, animation=1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-16, y=0, relative_to=ANIM_TARGET, animation=1 loopsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET, 5, 2 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 11 @@ -26848,7 +26846,7 @@ gBattleAnimMove_Peck:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_RotateMonToSideAndRestore, 2, 3, -768, ANIM_TARGET, 2 - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -12, 0, ANIM_TARGET, 3 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-12, y=0, relative_to=ANIM_TARGET, animation=3 waitforvisualfinish end @@ -26866,7 +26864,7 @@ gBattleAnimMove_Aeroblast:: call AeroblastBeam call AeroblastBeam waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -26925,7 +26923,7 @@ gBattleAnimMove_Crabhammer:: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB(13, 21, 31), 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB(13, 21, 31), blend_y1=10, color2=RGB_BLACK, blend_y2=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -24, 0, 0, 4 waitforvisualfinish delay 8 @@ -27021,14 +27019,14 @@ gBattleAnimMove_Whirlpool:: splitbgprio ANIM_TARGET setalpha 12, 8 delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(0, 13, 23) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_TARGET, delay=2, initial_blend_y=0, target_blend_y=7, color=RGB(0, 13, 23) playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 50, 1 call WhirlpoolEffect call WhirlpoolEffect call WhirlpoolEffect delay 12 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(0, 13, 23) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_TARGET, delay=2, initial_blend_y=7, target_blend_y=0, color=RGB(0, 13, 23) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -27067,7 +27065,7 @@ FlyUnleash: playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE delay 20 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish @@ -27094,7 +27092,7 @@ BounceUnleash: createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 delay 7 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 11, 1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -27111,7 +27109,7 @@ gBattleAnimMove_KarateChop:: createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 0, 0, 10, 1, 3, 0 waitforvisualfinish playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -27128,8 +27126,8 @@ gBattleAnimMove_CrossChop:: createsprite gCrossChopHandSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1 delay 40 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 10, RGB_BLACK, 10 - createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=10 + create_cross_impact_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=1, duration=20 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -27146,7 +27144,7 @@ gBattleAnimMove_JumpKick:: createsprite gJumpKickSpriteTemplate, ANIM_ATTACKER, 2, -16, 8, 0, 0, 10, ANIM_TARGET, 1, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 1, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 5, 0, 7, 1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish @@ -27167,7 +27165,7 @@ gBattleAnimMove_HighJumpKick:: createsprite gJumpKickSpriteTemplate, ANIM_ATTACKER, 2, -16, 8, 0, 0, 10, ANIM_TARGET, 1, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -28, 0, 0, 3 delay 3 @@ -27210,19 +27208,19 @@ TripleKickContinue: TripleKickLeft: createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, -16, -8, 20, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -16, -16, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-16, y=-16, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 goto TripleKickContinue TripleKickRight: createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 8, 8, 20, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=8, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 goto TripleKickContinue TripleKickCenter: createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 20, 1, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=-8, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 goto TripleKickContinue @@ -27236,7 +27234,7 @@ gBattleAnimMove_DynamicPunch:: setalpha 12, 8 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 20, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 5, 0, 7, 1 delay 1 waitsound @@ -27270,18 +27268,18 @@ gBattleAnimMove_Counter:: waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -15, 18, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-15, y=18, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 25, 1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -15, 18, 8, 1, 0 delay 3 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, -4, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=-4, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0, -4, 8, 1, 0 delay 3 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 15, 9, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=15, y=9, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 15, 9, 8, 1, 0 @@ -27301,7 +27299,7 @@ gBattleAnimMove_VitalThrow:: waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -24, 0, 0, 4 @@ -27322,7 +27320,7 @@ gBattleAnimMove_RockSmash:: monbg ANIM_DEF_PARTNER setalpha 12, 8 delay 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 8, 1, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 @@ -27367,11 +27365,11 @@ gBattleAnimMove_Submission:: end SubmissionHit: - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -12, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=-12, relative_to=ANIM_TARGET, animation=1 delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -12, 8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=-12, y=8, relative_to=ANIM_TARGET, animation=1 delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 12, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=12, y=0, relative_to=ANIM_TARGET, animation=1 delay 8 return @@ -27412,11 +27410,11 @@ gBattleAnimMove_CottonSpore:: end CreateCottonSpores: - createsprite gSporeParticleSpriteTemplate, ANIM_ATTACKER, 2, 0, -20, 85, 80, 0 + create_spore_particle_sprite ANIM_ATTACKER, 2, x=0, y=-20, wave_offset=85, duration=80, blend=0 delay 12 - createsprite gSporeParticleSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 170, 80, 0 + create_spore_particle_sprite ANIM_ATTACKER, 2, x=0, y=-10, wave_offset=170, duration=80, blend=0 delay 12 - createsprite gSporeParticleSpriteTemplate, ANIM_ATTACKER, 2, 0, -15, 0, 80, 0 + create_spore_particle_sprite ANIM_ATTACKER, 2, x=0, y=-15, wave_offset=0, duration=80, blend=0 delay 12 return @@ -27436,11 +27434,11 @@ gBattleAnimMove_Spore:: end CreateSpore: - createsprite gSporeParticleSpriteTemplate, ANIM_TARGET, 2, 0, -20, 85, 80, 1 + create_spore_particle_sprite ANIM_TARGET, 2, x=0, y=-20, wave_offset=85, duration=80, blend=1 delay 12 - createsprite gSporeParticleSpriteTemplate, ANIM_TARGET, 2, 0, -10, 170, 80, 1 + create_spore_particle_sprite ANIM_TARGET, 2, x=0, y=-10, wave_offset=170, duration=80, blend=1 delay 12 - createsprite gSporeParticleSpriteTemplate, ANIM_TARGET, 2, 0, -15, 0, 80, 1 + create_spore_particle_sprite ANIM_TARGET, 2, x=0, y=-15, wave_offset=0, duration=80, blend=1 delay 12 return @@ -27451,28 +27449,28 @@ gBattleAnimMove_PetalDance:: setalpha 12, 8 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 6, 6, 3 - createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, 8, 140 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 16, -24, 8, 100 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, -16, -24, 8, 100 + create_petal_dance_big_flower_sprite ANIM_ATTACKER, 2, initial_x=0, initial_y=-24, target_y=8, duration=140 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=16, initial_y=-24, target_y=8, duration=100 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=-16, initial_y=-24, target_y=8, duration=100 delay 15 - createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, 8, 140 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 32, -24, 8, 100 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, -32, -24, 8, 100 + create_petal_dance_big_flower_sprite ANIM_ATTACKER, 2, initial_x=0, initial_y=-24, target_y=8, duration=140 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=32, initial_y=-24, target_y=8, duration=100 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=-32, initial_y=-24, target_y=8, duration=100 delay 15 - createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, 8, 140 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 24, -24, 8, 100 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, -24, -24, 8, 100 + create_petal_dance_big_flower_sprite ANIM_ATTACKER, 2, initial_x=0, initial_y=-24, target_y=8, duration=140 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=24, initial_y=-24, target_y=8, duration=100 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=-24, initial_y=-24, target_y=8, duration=100 delay 30 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 16, -24, 0, 100 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, -16, -24, 0, 100 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=16, initial_y=-24, target_y=0, duration=100 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=-16, initial_y=-24, target_y=0, duration=100 delay 30 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 20, -16, 14, 80 - createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, -20, -14, 16, 80 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=20, initial_y=-16, target_y=14, duration=80 + create_petal_dance_small_flower_sprite ANIM_ATTACKER, 2, initial_x=-20, initial_y=-14, target_y=16, duration=80 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 5 delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 6, 0, 8, 1 waitforvisualfinish delay 8 @@ -27490,29 +27488,29 @@ gBattleAnimMove_RazorLeaf:: setalpha 12, 8 delay 1 loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER, 10, 5 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -3, -2, 10 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-3, upward_delta_y=-2, upward_duration=10 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -1, -1, 15 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-1, upward_delta_y=-1, upward_duration=15 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -4, -4, 7 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-4, upward_delta_y=-4, upward_duration=7 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, 3, -3, 11 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=3, upward_delta_y=-3, upward_duration=11 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -1, -6, 8 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-1, upward_delta_y=-6, upward_duration=8 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, 2, -1, 12 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=2, upward_delta_y=-1, upward_duration=12 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -3, -4, 13 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-3, upward_delta_y=-4, upward_duration=13 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, 4, -5, 7 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=4, upward_delta_y=-5, upward_duration=7 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, 2, -6, 11 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=2, upward_delta_y=-6, upward_duration=11 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -3, -5, 8 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-3, upward_delta_y=-5, upward_duration=8 delay 60 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 22, 20, 1 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 22, -20, 1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=22, wave_amplitude=20, target_both=1 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=22, wave_amplitude=-20, target_both=1 delay 20 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 @@ -27530,7 +27528,7 @@ gBattleAnimMove_AncientPower:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 10, 1 + shake_mon_or_platform velocity=4, shake_timer=1, shake_duration=10, type=1 createsprite gAncientPowerRockSpriteTemplate, ANIM_ATTACKER, 2, 20, 32, -48, 50, 2 createsprite gAncientPowerRockSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, -38, 25, 5 createsprite gAncientPowerRockSpriteTemplate, ANIM_ATTACKER, 2, 32, 32, -28, 40, 3 @@ -27549,7 +27547,7 @@ gBattleAnimMove_AncientPower:: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 16, 0, 0, 4 delay 3 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 @@ -27588,7 +27586,7 @@ gBattleAnimMove_Mist:: call MistCloud call MistCloud delay 32 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATK_SIDE, 8, 2, 0, 14, RGB_WHITE + blend_color_cycle selector=F_PAL_ATK_SIDE, delay=8, num_blends=2, initial_blend_y=0, target_blend_y=14, color=RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -27623,7 +27621,7 @@ gBattleAnimMove_FirePunch:: playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET waitforvisualfinish createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 call FireSpreadEffect delay 4 @@ -27690,44 +27688,44 @@ gBattleAnimMove_DreamEater:: end DreamEaterAbsorb: playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 5, -18, -40, 35 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -10, 20, 20, 39 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=5, y=-18, wave_amplitude=-40, wave_period=35 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-10, y=20, wave_amplitude=20, wave_period=39 delay 4 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 28, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -10, 20, 40, 39 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=28, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-10, y=20, wave_amplitude=40, wave_period=39 delay 4 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 16, 33 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -32, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=16, wave_period=33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-32, wave_period=26 delay 4 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, -15, -16, 36 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=-15, wave_amplitude=-16, wave_period=36 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 delay 4 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 16, 33 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, -15, -16, 36 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=16, wave_period=33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=-15, wave_amplitude=-16, wave_period=36 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 delay 4 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 16, 33 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -40, 26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=16, wave_period=33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-40, wave_period=26 delay 4 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -5, 15, 36, 33 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, -5, -8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, -10, 20, 20, 39 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-5, y=15, wave_amplitude=36, wave_period=33 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=10, y=-5, wave_amplitude=-8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=-10, y=20, wave_amplitude=20, wave_period=39 delay 4 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 8, 26 - createsprite gAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 3, 5, -18, -20, 35 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=0, y=5, wave_amplitude=8, wave_period=26 + create_absorption_orb_sprite ANIM_ATTACKER, 3, x=5, y=-18, wave_amplitude=-20, wave_period=35 delay 4 return @@ -27759,9 +27757,9 @@ gBattleAnimMove_PoisonGas:: delay 40 loopsewithpan SE_M_MIST, SOUND_PAN_TARGET, 28, 6 .if B_UPDATED_MOVE_DATA >= GEN_5 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 6, 2, 0, 12, RGB(26, 0, 26) + blend_color_cycle selector=F_PAL_DEF_SIDE, delay=6, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(26, 0, 26) .else - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 6, 2, 0, 12, RGB(26, 0, 26) + blend_color_cycle selector=F_PAL_TARGET, delay=6, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(26, 0, 26) .endif waitforvisualfinish blendoff @@ -27796,7 +27794,7 @@ gBattleAnimMove_Psybeam:: call PsybeamRings call PsybeamRings createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 4, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 18, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(31, 18, 31) call PsybeamRings call PsybeamRings call PsybeamRings @@ -27821,7 +27819,7 @@ gBattleAnimMove_Hypnosis:: call HypnosisRings call HypnosisRings call HypnosisRings - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 18, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(31, 18, 31) waitforvisualfinish delay 1 call UnsetPsychicBg @@ -27841,7 +27839,7 @@ gBattleAnimMove_Psywave:: createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TELEPORT, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 9, 0, 10 call PsywaveRings call PsywaveRings - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 4, 0, 12, RGB(31, 18, 31) + blend_color_cycle selector=F_PAL_TARGET, delay=1, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(31, 18, 31) call PsywaveRings call PsywaveRings call PsywaveRings @@ -27882,7 +27880,7 @@ gBattleAnimMove_SteelWing:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + metallic_shine permanent=0 waitforvisualfinish monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -27895,8 +27893,8 @@ gBattleAnimMove_SteelWing:: delay 24 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 9 delay 17 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, ANIM_TARGET, 1 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=16, y=0, relative_to=ANIM_TARGET, animation=1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-16, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 11 @@ -27908,17 +27906,17 @@ gBattleAnimMove_SteelWing:: gBattleAnimMove_IronTail:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK + metallic_shine permanent=1 waitforvisualfinish monbg ANIM_TARGET setalpha 12, 8 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE + set_original_pal battler=ANIM_ATTACKER clearmonbg ANIM_TARGET blendoff waitforvisualfinish @@ -27928,17 +27926,17 @@ gBattleAnimMove_PoisonTail:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 1, 1, RGB(24, 6, 23) + metallic_shine permanent=1, color=RGB(24, 6, 23) waitforvisualfinish monbg ANIM_TARGET setalpha 12, 8 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, TRUE + set_original_pal battler=ANIM_ATTACKER clearmonbg ANIM_TARGET blendoff call PoisonBubblesEffect @@ -27948,21 +27946,21 @@ gBattleAnimMove_PoisonTail:: gBattleAnimMove_MetalClaw:: loadspritegfx ANIM_TAG_CLAW_SLASH loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 - createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + metallic_shine permanent=0 waitforvisualfinish createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 delay 2 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, -10, 0 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, 10, 0 - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1 + create_claw_slash_sprite ANIM_TARGET, 2, x=-10, y=-10, animation=0 + create_claw_slash_sprite ANIM_TARGET, 2, x=-10, y=10, animation=0 + shake_mon_or_platform velocity=-4, shake_timer=1, shake_duration=10, type=3, battler_selector=1 delay 8 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 delay 2 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, -10, 1 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, 10, 1 - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1 + create_claw_slash_sprite ANIM_TARGET, 2, x=10, y=-10, animation=1 + create_claw_slash_sprite ANIM_TARGET, 2, x=10, y=10, animation=1 + shake_mon_or_platform velocity=-4, shake_timer=1, shake_duration=10, type=3, battler_selector=1 waitforvisualfinish end @@ -27977,7 +27975,7 @@ gBattleAnimMove_NightShade:: createvisualtask AnimTask_NightShadeClone, 5, 85 delay 70 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 0, 2, 0, 13, RGB_BLACK + blend_color_cycle selector=F_PAL_TARGET, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=13, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -28039,7 +28037,7 @@ gBattleAnimMove_FocusEnergy:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -28052,7 +28050,7 @@ gBattleAnimMove_Bide:: end BideSetUp: loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER, 9, 2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 waitforvisualfinish end @@ -28070,13 +28068,13 @@ BideUnleash: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 12, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 16, 1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 18, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 1, x=18, y=-8, relative_to=ANIM_TARGET, animation=1 delay 5 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, -18, 8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 1, x=-18, y=8, relative_to=ANIM_TARGET, animation=1 delay 5 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, -8, -5, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 1, x=-8, y=-5, relative_to=ANIM_TARGET, animation=1 waitforvisualfinish delay 5 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 @@ -28092,7 +28090,7 @@ gBattleAnimMove_StringShot:: loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 0, 9, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=9, color=RGB_BLACK waitforvisualfinish loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 9, 6 call StringShotThread @@ -28115,20 +28113,20 @@ gBattleAnimMove_StringShot:: call StringShotThread waitforvisualfinish playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET - createsprite gStringWrapSpriteTemplate, ANIM_TARGET, 2, 0, 10 + create_string_wrap_sprite ANIM_TARGET, 2, x=0, y=10 delay 4 - createsprite gStringWrapSpriteTemplate, ANIM_TARGET, 2, 0, -2 + create_string_wrap_sprite ANIM_TARGET, 2, x=0, y=-2 delay 4 - createsprite gStringWrapSpriteTemplate, ANIM_TARGET, 2, 0, 22 + create_string_wrap_sprite ANIM_TARGET, 2, x=0, y=22 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 9, 0, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=2, initial_blend_y=9, target_blend_y=0, color=RGB_BLACK end StringShotThread: - createsprite gWebThreadSpriteTemplate, ANIM_TARGET, 2, 20, 0, 512, 20, 1 + create_web_thread_sprite ANIM_TARGET, 2, x=20, y=0, unk2=512, amplitude=20, targets_both=1 delay 1 return @@ -28137,7 +28135,7 @@ gBattleAnimMove_SpiderWeb:: loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 0, 9, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=9, color=RGB_BLACK waitforvisualfinish splitbgprio ANIM_TARGET loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 9, 6 @@ -28161,11 +28159,11 @@ gBattleAnimMove_SpiderWeb:: waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 9, 0, RGB_BLACK + simple_palette_blend unused_subpriority_offset=5, selector=F_PAL_BG, delay=2, initial_blend_y=9, target_blend_y=0, color=RGB_BLACK end SpiderWebThread: - createsprite gWebThreadSpriteTemplate, ANIM_TARGET, 2, 20, 0, 512, 20, 0 + create_web_thread_sprite ANIM_TARGET, 2, x=20, y=0, unk2=512, amplitude=20, targets_both=0 delay 1 return @@ -28229,7 +28227,7 @@ gBattleAnimMove_Recover:: monbg ANIM_ATK_PARTNER setalpha 12, 8 loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 6, 0, 11, RGB(31, 31, 11) + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=6, initial_blend_y=0, target_blend_y=11, color=RGB(31, 31, 11) call RecoverAbsorbEffect call RecoverAbsorbEffect call RecoverAbsorbEffect @@ -28242,19 +28240,19 @@ gBattleAnimMove_Recover:: end RecoverAbsorbEffect: - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 40, -10, 13 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=40, y=-10, duration=13 delay 3 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -35, -10, 13 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=-35, y=-10, duration=13 delay 3 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 15, -40, 13 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=15, y=-40, duration=13 delay 3 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -10, -32, 13 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=-10, y=-32, duration=13 delay 3 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 25, -20, 13 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=25, y=-20, duration=13 delay 3 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -40, -20, 13 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=-40, y=-20, duration=13 delay 3 - createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 5, -40, 13 + create_power_absorption_orb_sprite ANIM_ATTACKER, 2, x=5, y=-40, duration=13 delay 3 return @@ -28264,14 +28262,14 @@ gBattleAnimMove_Mimic:: monbg_static ANIM_DEF_PARTNER splitbgprio_all panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 - createvisualtask AnimTask_ShrinkTargetCopy, 5, 128, 24 + shrink_target_copy unk0=128, unk1=24 delay 15 - createsprite gMimicOrbSpriteTemplate, ANIM_TARGET, 2, -12, 24 + create_mimic_orb_sprite ANIM_TARGET, 2, initial_x=-12, initial_y=24 delay 10 setarg 7, 0xFFFF waitforvisualfinish playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 11, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_WHITE waitforvisualfinish clearmonbg_static ANIM_DEF_PARTNER blendoff @@ -28280,12 +28278,12 @@ gBattleAnimMove_Mimic:: gBattleAnimMove_Constrict:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 4 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 2 + create_constrict_binding_sprite ANIM_TARGET, 4, initial_x=0, initial_y=16, affine_animation=0, squeezes=2 delay 7 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 2 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 2, 0, 8, 1, 2 + create_constrict_binding_sprite ANIM_TARGET, 3, initial_x=0, initial_y=0, affine_animation=0, squeezes=2 + create_constrict_binding_sprite ANIM_TARGET, 2, initial_x=0, initial_y=8, affine_animation=1, squeezes=2 delay 7 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0, -8, 1, 2 + create_constrict_binding_sprite ANIM_TARGET, 3, initial_x=0, initial_y=-8, affine_animation=1, squeezes=2 delay 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 6, 1 delay 20 @@ -28318,7 +28316,7 @@ CurseGhost: createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 14, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 16, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -28336,7 +28334,7 @@ CurseStats: CurseStats1: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_DrawFallingWhiteLinesOnAttacker, 5 - createvisualtask AnimTask_BlendColorCycle, 5, F_PAL_ATTACKER, 4, 2, 0, 10, RGB_RED + blend_color_cycle priority=5, selector=F_PAL_ATTACKER, delay=4, num_blends=2, initial_blend_y=0, target_blend_y=10, color=RGB_RED return gBattleAnimMove_SoftBoiled:: @@ -28351,7 +28349,7 @@ gBattleAnimMove_SoftBoiled:: delay 120 delay 7 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 10, 0, RGB(12, 24, 30) + simple_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, initial_blend_y=10, target_blend_y=0, color=RGB(12, 24, 30) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 31, 16, 0, 1 delay 8 createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 31, 16, 0, 1 @@ -28422,12 +28420,12 @@ gBattleAnimMove_FakeOut:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 createvisualtask AnimTask_StretchTargetUp, 3 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE end gBattleAnimMove_ScaryFace:: loadspritegfx ANIM_TAG_EYE_SPARKLE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), 3, 0, 16, RGB_BLACK + simple_palette_blend selector=(F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), delay=3, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitforvisualfinish delay 10 @@ -28439,7 +28437,7 @@ gBattleAnimMove_ScaryFace:: waitforvisualfinish createvisualtask AnimTask_ShakeTargetInPattern, 3, 20, 1, FALSE playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), 3, 16, 0, RGB_BLACK + simple_palette_blend selector=(F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), delay=3, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK waitforvisualfinish end @@ -28493,28 +28491,28 @@ gBattleAnimMove_FurySwipes:: gBattleAnimMove_Ingrain:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_ORBS - createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 16, 26, -1, 2, 150 + create_ingrain_root_sprite ANIM_ATTACKER, 2, offset_x=16, offset_y=26, subpriority=-1, animation=2, duration=150 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER delay 10 - createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, -32, 20, 1, 1, 140 + create_ingrain_root_sprite ANIM_ATTACKER, 2, offset_x=-32, offset_y=20, subpriority=1, animation=1, duration=140 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER delay 10 - createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 32, 22, 1, 0, 130 + create_ingrain_root_sprite ANIM_ATTACKER, 2, offset_x=32, offset_y=22, subpriority=1, animation=0, duration=130 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER delay 10 - createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, -16, 25, -1, 3, 120 + create_ingrain_root_sprite ANIM_ATTACKER, 2, offset_x=-16, offset_y=25, subpriority=-1, animation=3, duration=120 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER delay 40 - createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 32, 26, -1, 3, 30 + create_ingrain_orb_sprite ANIM_ATTACKER, 3, initial_x=32, initial_y=26, velocity_x=-1, wave_amplitude=3, duration=30 delay 5 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 5 - createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, -48, 20, 1, 2, 30 + create_ingrain_orb_sprite ANIM_ATTACKER, 3, initial_x=-48, initial_y=20, velocity_x=1, wave_amplitude=2, duration=30 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 5 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 5 - createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 48, 26, -2, 3, 18 + create_ingrain_orb_sprite ANIM_ATTACKER, 3, initial_x=48, initial_y=26, velocity_x=-2, wave_amplitude=3, duration=18 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER delay 10 waitforvisualfinish @@ -28523,7 +28521,7 @@ gBattleAnimMove_Ingrain:: gBattleAnimMove_Present:: loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_IsHealingMove, 2 - createsprite gPresentSpriteTemplate, ANIM_TARGET, 2, 0, -5, 10, 2, -1 + create_present_sprite ANIM_TARGET, 2, initial_x=0, initial_y=-5, unk2=10, unk3=2, unk4=-1 playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER delay 14 playsewithpan SE_M_BUBBLE2, SOUND_PAN_ATTACKER @@ -28558,23 +28556,23 @@ PresentHeal: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -16, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-16, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 16, 32, -3, -1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=16, initial_y=32, velocity_y=-3, unused3=-1 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 32, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=32, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -32, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-32, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 0, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=0, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-8, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-8, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 24, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=24, initial_y=32, velocity_y=-3 delay 3 - createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -24, 32, -3, 1 + create_present_heal_particle_sprite ANIM_TARGET, 4, initial_x=-24, initial_y=32, velocity_y=-3 waitforvisualfinish waitsound call HealingEffect2 @@ -28583,7 +28581,7 @@ PresentHeal: gBattleAnimMove_BatonPass:: loadspritegfx ANIM_TAG_POKEBALL playsewithpan SE_M_BATON_PASS, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 1, 2, 0, 11, RGB(31, 22, 30) + blend_color_cycle selector=(F_PAL_BG | F_PAL_BATTLERS), delay=1, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(31, 22, 30) createsprite gBatonPassPokeballSpriteTemplate, ANIM_ATTACKER, 2 end @@ -28609,17 +28607,17 @@ gBattleAnimMove_PerishSong:: delay 20 panse SE_M_PERISH_SONG, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 delay 80 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 16, RGB_BLACK - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_PLAYER_LEFT, FALSE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_PLAYER_RIGHT, FALSE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_OPPONENT_LEFT, FALSE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_OPPONENT_RIGHT, FALSE + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK + set_grayscale_pal battler=ANIM_PLAYER_LEFT + set_grayscale_pal battler=ANIM_PLAYER_RIGHT + set_grayscale_pal battler=ANIM_OPPONENT_LEFT + set_grayscale_pal battler=ANIM_OPPONENT_RIGHT delay 100 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_BLACK - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_PLAYER_LEFT, TRUE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_PLAYER_RIGHT, TRUE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_OPPONENT_LEFT, TRUE - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_OPPONENT_RIGHT, TRUE + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK + set_original_pal battler=ANIM_PLAYER_LEFT + set_original_pal battler=ANIM_PLAYER_RIGHT + set_original_pal battler=ANIM_OPPONENT_LEFT + set_original_pal battler=ANIM_OPPONENT_RIGHT waitforvisualfinish end @@ -28690,7 +28688,7 @@ gBattleAnimMove_TriAttack:: delay 20 createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 6, 0, 7 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK delay 16 loadspritegfx ANIM_TAG_FIRE createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 0 @@ -28712,7 +28710,7 @@ gBattleAnimMove_TriAttack:: createvisualtask AnimTask_ShakeTargetInPattern, 2, 20, 3, TRUE, 1 waitforvisualfinish loadspritegfx ANIM_TAG_LIGHTNING - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 delay 1 @@ -28722,11 +28720,11 @@ gBattleAnimMove_TriAttack:: delay 20 createvisualtask AnimTask_ShakeTargetInPattern, 2, 20, 3, TRUE, 0 delay 2 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 waitforvisualfinish loadspritegfx ANIM_TAG_ICE_CRYSTALS call IceCrystalEffectShort - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK waitforvisualfinish end @@ -28784,8 +28782,8 @@ gBattleAnimMove_Encore:: gBattleAnimMove_Trick:: loadspritegfx ANIM_TAG_ITEM_BAG loadspritegfx ANIM_TAG_SPEED_DUST - createsprite gTrickBagSpriteTemplate, ANIM_ATTACKER, 2, -40, 80 - createsprite gTrickBagSpriteTemplate, ANIM_ATTACKER, 2, -40, 208 + create_trick_bag_sprite ANIM_ATTACKER, 2, initial_y=-40, wave_offset=80 + create_trick_bag_sprite ANIM_ATTACKER, 2, initial_y=-40, wave_offset=208 delay 16 playsewithpan SE_M_SKETCH, 0 createvisualtask AnimTask_StretchTargetUp, 3 @@ -28812,7 +28810,7 @@ gBattleAnimMove_Trick:: gBattleAnimMove_Wish:: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_SPARKLE_2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=0, target_blend_y=10, color=RGB_BLACK waitforvisualfinish panse_adjustall SE_M_REFLECT, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 createsprite gWishStarSpriteTemplate, ANIM_ATTACKER, 40 @@ -28821,36 +28819,36 @@ gBattleAnimMove_Wish:: loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 16, 3 call GrantingStarsEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=10, target_blend_y=0, color=RGB_BLACK waitforvisualfinish end gBattleAnimMove_Stockpile:: loadspritegfx ANIM_TAG_GRAY_ORB playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 8, 1, 0, 12, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=8, num_blends=1, initial_blend_y=0, target_blend_y=12, color=RGB_WHITE createvisualtask AnimTask_StockpileDeformMon, 5 call StockpileAbsorb call StockpileAbsorb waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 12, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_ATTACKER, delay=0, initial_blend_y=12, target_blend_y=0, color=RGB_WHITE end StockpileAbsorb: - createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 55, 55, 13 + create_stockpile_absorption_orb_sprite ANIM_ATTACKER, 2, x=55, y=55, duration=13 delay 1 - createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -55, -55, 13 + create_stockpile_absorption_orb_sprite ANIM_ATTACKER, 2, x=-55, y=-55, duration=13 delay 1 - createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0, 55, 13 + create_stockpile_absorption_orb_sprite ANIM_ATTACKER, 2, x=0, y=55, duration=13 delay 1 - createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0, -55, 13 + create_stockpile_absorption_orb_sprite ANIM_ATTACKER, 2, x=0, y=-55, duration=13 delay 1 - createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 55, -34, 13 + create_stockpile_absorption_orb_sprite ANIM_ATTACKER, 2, x=55, y=-34, duration=13 delay 1 - createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 55, 34, 13 + create_stockpile_absorption_orb_sprite ANIM_ATTACKER, 2, x=55, y=34, duration=13 delay 1 - createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -55, -34, 13 + create_stockpile_absorption_orb_sprite ANIM_ATTACKER, 2, x=-55, y=-34, duration=13 delay 1 - createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, -55, 34, 13 + create_stockpile_absorption_orb_sprite ANIM_ATTACKER, 2, x=-55, y=34, duration=13 delay 1 return @@ -28878,10 +28876,10 @@ SpitUpContinue: delay 5 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 8, 1, 0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -12, 10, ANIM_TARGET, 1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=-12, y=10, relative_to=ANIM_TARGET, animation=1 delay 5 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, -10, ANIM_TARGET, 1 + create_flashing_hitsplat_sprite ANIM_TARGET, 3, x=12, y=-10, relative_to=ANIM_TARGET, animation=1 waitforvisualfinish end SpitUpStrong: @@ -28987,7 +28985,7 @@ gBattleAnimMove_SweetScent:: call SweetScentEffect createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 55, 0 setpan SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 1, 5, 5, 13, RGB(31, 21, 21) + blend_color_cycle selector=F_PAL_DEF_SIDE, delay=1, num_blends=5, initial_blend_y=5, target_blend_y=13, color=RGB(31, 21, 21) call SweetScentEffect waitforvisualfinish end @@ -29018,7 +29016,7 @@ SweetScentEffect: gBattleAnimMove_HyperBeam:: loadspritegfx ANIM_TAG_ORBS - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 0, 16, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=4, initial_blend_y=0, target_blend_y=16, color=RGB_BLACK waitforvisualfinish delay 10 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_ATTACKER @@ -29027,7 +29025,7 @@ gBattleAnimMove_HyperBeam:: delay 30 createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 15, 0, 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 - createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 + flash_anim_tag_with_color tag=ANIM_TAG_ORBS, delay=1, num_blends=12, color1=RGB_RED, blend_y1=16, color2=0, blend_y2=0 call HyperBeamOrbs call HyperBeamOrbs call HyperBeamOrbs @@ -29058,11 +29056,11 @@ gBattleAnimMove_HyperBeam:: call HyperBeamOrbs createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(25, 25, 25) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 16, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=4, initial_blend_y=16, target_blend_y=0, color=RGB_BLACK end HyperBeamOrbs: - createsprite gHyperBeamOrbSpriteTemplate, ANIM_TARGET, 2 - createsprite gHyperBeamOrbSpriteTemplate, ANIM_TARGET, 2 + create_hyper_beam_orb_sprite ANIM_TARGET, 2 + create_hyper_beam_orb_sprite ANIM_TARGET, 2 delay 1 return @@ -29114,7 +29112,7 @@ CreateFlatterConfetti: gBattleAnimMove_RolePlay:: monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB_WHITE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 10, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=10, color=RGB_BLACK waitforvisualfinish playsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_DETECT, SOUND_PAN_ATTACKER, 30 @@ -29123,7 +29121,7 @@ gBattleAnimMove_RolePlay:: clearmonbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE delay 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 10, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=2, initial_blend_y=10, target_blend_y=0, color=RGB_BLACK end gBattleAnimMove_Refresh:: @@ -29136,7 +29134,7 @@ gBattleAnimMove_Refresh:: call GrantingStarsEffect waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 10, 0, RGB(12, 24, 30) + simple_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, initial_blend_y=10, target_blend_y=0, color=RGB(12, 24, 30) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 end @@ -29151,10 +29149,10 @@ gBattleAnimMove_BlazeKick:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE delay 30 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 14, 1 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, num_blends=1, color1=RGB_BLACK, blend_y1=8, color2=RGB_BLACK, blend_y2=0 call FireSpreadEffect waitforvisualfinish clearmonbg ANIM_TARGET @@ -29173,25 +29171,25 @@ gBattleAnimMove_HyperVoice:: end HyperVoiceEffect: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 8, 0, RGB_YELLOW + simple_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=3, initial_blend_y=8, target_blend_y=0, color=RGB_YELLOW createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0 createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 1, 0, 6, 1 + shake_battle_platforms x_offset=1, y_offset=0, shakes=6, delay=1 createvisualtask SoundTask_WaitForCry, 5 return gBattleAnimMove_SandTomb:: loadspritegfx ANIM_TAG_MUD_SAND - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_TARGET, delay=2, initial_blend_y=0, target_blend_y=7, color=RGB(19, 17, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 43, 1 playsewithpan SE_M_SAND_TOMB, SOUND_PAN_TARGET call SandTombSwirlingDirt call SandTombSwirlingDirt call SandTombSwirlingDirt delay 22 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(19, 17, 0) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_TARGET, delay=2, initial_blend_y=7, target_blend_y=0, color=RGB(19, 17, 0) waitforvisualfinish end @@ -29249,10 +29247,10 @@ ArmThrustContinue: blendoff end ArmThrustRight: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=8, y=0, relative_to=ANIM_TARGET, animation=2 goto ArmThrustContinue ArmThrustLeft: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-8, y=0, relative_to=ANIM_TARGET, animation=2 goto ArmThrustContinue gBattleAnimMove_MuddyWater:: @@ -29298,9 +29296,9 @@ gBattleAnimMove_DragonClaw:: createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 28, 528, 30, 13, 50, ANIM_ATTACKER delay 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, -10, 0 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, 10, 0 - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1 + create_claw_slash_sprite ANIM_TARGET, 2, x=-10, y=-10, animation=0 + create_claw_slash_sprite ANIM_TARGET, 2, x=-10, y=10, animation=0 + shake_mon_or_platform velocity=-4, shake_timer=1, shake_duration=10, type=3, battler_selector=1 createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 480, 20, 16, -46, ANIM_ATTACKER delay 2 createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 33, 576, 20, 8, 42, ANIM_ATTACKER @@ -29311,9 +29309,9 @@ gBattleAnimMove_DragonClaw:: createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 28, 512, 25, 16, 46, ANIM_ATTACKER delay 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, -10, 1 - createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, 10, 1 - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1 + create_claw_slash_sprite ANIM_TARGET, 2, x=10, y=-10, animation=1 + create_claw_slash_sprite ANIM_TARGET, 2, x=10, y=10, animation=1 + shake_mon_or_platform velocity=-4, shake_timer=1, shake_duration=10, type=3, battler_selector=1 createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 33, 464, 30, 15, -50, ANIM_ATTACKER delay 2 createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 28, 528, 30, 13, 50, ANIM_ATTACKER @@ -29394,7 +29392,7 @@ gBattleAnimMove_MeteorMash:: createsprite gMeteorMashStarSpriteTemplate, ANIM_TARGET, 3, -80, -64, 40, 32, 30 delay 20 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 5, 0, 20, 1 waitforvisualfinish delay 10 @@ -29410,7 +29408,7 @@ gBattleAnimMove_Revenge:: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createsprite gRevengeSmallScratchSpriteTemplate, ANIM_ATTACKER, 2, 10, -10 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 4, 2, 8, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=4, initial_blend_y=2, target_blend_y=8, color=RGB_RED waitforvisualfinish unloadspritegfx ANIM_TAG_PURPLE_SCRATCH loadspritegfx ANIM_TAG_PURPLE_SWIPE @@ -29422,10 +29420,10 @@ gBattleAnimMove_Revenge:: unloadspritegfx ANIM_TAG_PURPLE_SWIPE loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 10, 1 - createsprite gPersistHitSplatSpriteTemplate, ANIM_TARGET, 3, -10, -8, ANIM_TARGET, 1, 8 + create_persist_hitsplat_sprite ANIM_TARGET, 3, x=-10, y=-8, relative_to=ANIM_TARGET, animation=1, duration=8 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 8 - createsprite gPersistHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, 8, ANIM_TARGET, 1, 8 + create_persist_hitsplat_sprite ANIM_TARGET, 3, x=10, y=8, relative_to=ANIM_TARGET, animation=1, duration=8 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -29440,7 +29438,7 @@ gBattleAnimMove_PoisonFang:: delay 10 createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 3, 0, 10, 1 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 0, 4, 0, 12, RGB(26, 0, 26) + blend_color_cycle selector=F_PAL_TARGET, delay=0, num_blends=4, initial_blend_y=0, target_blend_y=12, color=RGB(26, 0, 26) call PoisonBubblesEffect waitforvisualfinish end @@ -29456,55 +29454,55 @@ gBattleAnimMove_FrenzyPlant:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 2, 0, 5, RGB_BLACK + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=2, initial_blend_y=0, target_blend_y=5, color=RGB_BLACK waitforvisualfinish - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 10, 8, 2, 0, 0, 100 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=10, offset_x=8, offset_y=2, subpriority=0, animation=0, duration=100 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER delay 5 - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, -2, 0, 1, 95 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=20, offset_x=-8, offset_y=-2, subpriority=0, animation=1, duration=95 playsewithpan SE_M_SCRATCH, -43 delay 5 - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 30, 8, -4, 0, 0, 90 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=30, offset_x=8, offset_y=-4, subpriority=0, animation=0, duration=90 playsewithpan SE_M_SCRATCH, -22 delay 5 - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 40, -8, 4, 0, 1, 85 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=40, offset_x=-8, offset_y=4, subpriority=0, animation=1, duration=85 playsewithpan SE_M_SCRATCH, 0 delay 5 - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 50, 8, 0, 0, 0, 85 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=50, offset_x=8, offset_y=0, subpriority=0, animation=0, duration=85 playsewithpan SE_M_SCRATCH, +21 delay 5 - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 60, -8, -2, 0, 1, 85 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=60, offset_x=-8, offset_y=-2, subpriority=0, animation=1, duration=85 playsewithpan SE_M_SCRATCH, +42 delay 5 - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 75, 8, 0, 0, 0, 85 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=75, offset_x=8, offset_y=0, subpriority=0, animation=0, duration=85 playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET delay 5 - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 85, 16, 6, 0, 3, 80 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=85, offset_x=16, offset_y=6, subpriority=0, animation=3, duration=80 playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET delay 5 - createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 85, -16, -6, 0, 2, 75 + create_frenzy_plant_root_sprite ANIM_ATTACKER, 2, interpolate_percent=85, offset_x=-16, offset_y=-6, subpriority=0, animation=2, duration=75 playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -10, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-10, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 8, 0, 20, 1 delay 3 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 8, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=8, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 3 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, -3, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=-3, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 3 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -3, 1, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-3, y=1, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 1, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=1, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=10, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 2, 5, 0, RGB_BLACK + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_BG, delay=2, initial_blend_y=5, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -29551,16 +29549,16 @@ FocusPunchContinue: playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET createsprite gFocusPunchFistSpriteTemplate, ANIM_TARGET, 2 delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-8, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 8, 0, 24, 1 delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 2, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=2, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, -6, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=-6, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 8, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=8, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish restorebg @@ -29600,7 +29598,7 @@ ReturnWeak: createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 16, 1, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-8, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_COMET_PUNCH, SOUND_PAN_TARGET goto ReturnContinue ReturnMedium: @@ -29613,7 +29611,7 @@ ReturnMedium: delay 11 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 5, 4 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_MEGA_KICK2, SOUND_PAN_TARGET goto ReturnContinue ReturnStrong: @@ -29629,35 +29627,35 @@ ReturnStrong: createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-8, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=10, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 3, -5, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=3, y=-5, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -5, 3, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-5, y=3, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 goto ReturnContinue ReturnStrongest: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 6, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=0, target_blend_y=6, color=RGB_BLACK waitforvisualfinish createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 16, 1, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 3, -5, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=3, y=-5, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 12, 1, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-8, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 waitforvisualfinish @@ -29665,7 +29663,7 @@ ReturnStrongest: createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-8, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 waitforvisualfinish @@ -29673,7 +29671,7 @@ ReturnStrongest: createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 5, 1 createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-8, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 5, 1 @@ -29681,7 +29679,7 @@ ReturnStrongest: createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 4, 2, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER delay 5 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-8, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 5, 1 @@ -29690,25 +29688,25 @@ ReturnStrongest: call ReturnStrongestHit call ReturnStrongestHit call ReturnStrongestHit - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-10, y=-8, relative_to=ANIM_TARGET, animation=0 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 8, 0, 24, 1 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=10, y=10, relative_to=ANIM_TARGET, animation=0 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 3, -5, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=3, y=-5, relative_to=ANIM_TARGET, animation=0 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -5, 3, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=-5, y=3, relative_to=ANIM_TARGET, animation=0 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 6, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=6, target_blend_y=0, color=RGB_BLACK goto ReturnContinue ReturnStrongestHit: createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 4, 3, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 5, 1 @@ -29765,21 +29763,21 @@ gBattleAnimMove_BlastBurn:: createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 40, 20, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -40, 20, 24, 0, 0, 0 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 25 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -96, 0, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 6, -60, -30, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 70, 0, -48, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 70, 60, -30, 24, 0, 0, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -4, 3, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-4, y=3, relative_to=ANIM_TARGET, animation=0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 12, 0, 20, 1 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 2, 0, 10, 1 + shake_battle_platforms x_offset=2, y_offset=0, shakes=10, delay=1 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 96, 0, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 60, 30, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 48, 24, 0, 0, 0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, -60, 30, 24, 0, 0, 0 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -29788,32 +29786,32 @@ gBattleAnimMove_BlastBurn:: gBattleAnimMove_RockTomb:: loadspritegfx ANIM_TAG_X_SIGN loadspritegfx ANIM_TAG_ROCKS - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 2, 0, 10, 1 + shake_battle_platforms x_offset=2, y_offset=0, shakes=10, delay=1 waitforvisualfinish createsprite gRockTombRockSpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 114, 0 delay 8 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 0, 2, 3, 1 + shake_battle_platforms x_offset=0, y_offset=2, shakes=3, delay=1 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET delay 8 createsprite gRockTombRockSpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 98, 0 delay 8 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 0, 2, 3, 1 + shake_battle_platforms x_offset=0, y_offset=2, shakes=3, delay=1 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET delay 8 createsprite gRockTombRockSpriteTemplate, ANIM_TARGET, 66, 3, 6, 64, 82, 0 delay 8 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 0, 2, 3, 1 + shake_battle_platforms x_offset=0, y_offset=2, shakes=3, delay=1 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET delay 8 createsprite gRockTombRockSpriteTemplate, ANIM_TARGET, 2, -3, 13, 64, 66, 0 delay 8 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 0, 2, 3, 1 + shake_battle_platforms x_offset=0, y_offset=2, shakes=3, delay=1 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET delay 24 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET createsprite gRedXSpriteTemplate, ANIM_TARGET, 5, ANIM_TARGET, 50 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 20, 1 - createvisualtask AnimTask_ShakeBattlePlatforms, 2, 2, 0, 10, 1 + shake_battle_platforms x_offset=2, y_offset=0, shakes=10, delay=1 waitforvisualfinish end @@ -29940,7 +29938,7 @@ gBattleAnimMove_RockBlast:: playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gRockBlastRockSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 25, 257 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 2, 0, 0, 20, 24, 14, 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 @@ -29955,7 +29953,7 @@ gBattleAnimMove_Overheat:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 18 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 5, RGB(28, 0, 0) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=5, color=RGB(28, 0, 0) waitforvisualfinish createvisualtask AnimTask_AllocBackupPalBuffer, 5 waitforvisualfinish @@ -29966,39 +29964,39 @@ gBattleAnimMove_Overheat:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_CopyPalUnfadedToBackup, 5, 1, 0 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 1, 0, 13, RGB(28, 0, 0) + simple_palette_blend selector=F_PAL_ATTACKER, delay=1, initial_blend_y=0, target_blend_y=13, color=RGB(28, 0, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 2, 0, 15, 1 waitforvisualfinish playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 32, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 64, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 96, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 128, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 160, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 192, 30, 25, -20 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 224, 30, 25, -20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=0, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=32, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=64, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=96, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=128, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=160, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=192, unk2=30, duration=25, y=-20 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=224, unk2=30, duration=25, y=-20 delay 5 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 30, 25, 0 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 32, 30, 25, 0 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 64, 30, 25, 0 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 96, 30, 25, 0 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 128, 30, 25, 0 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 160, 30, 25, 0 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 192, 30, 25, 0 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 224, 30, 25, 0 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=0, unk2=30, duration=25, y=0 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=32, unk2=30, duration=25, y=0 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=64, unk2=30, duration=25, y=0 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=96, unk2=30, duration=25, y=0 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=128, unk2=30, duration=25, y=0 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=160, unk2=30, duration=25, y=0 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=192, unk2=30, duration=25, y=0 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=224, unk2=30, duration=25, y=0 delay 5 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 32, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 64, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 96, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 2, 1, 128, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 160, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 192, 30, 25, 10 - createsprite gOverheatFlameSpriteTemplate, ANIM_ATTACKER, 66, 1, 224, 30, 25, 10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=0, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=32, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=64, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=96, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 2, speed=1, unk1=128, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=160, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=192, unk2=30, duration=25, y=10 + create_overheat_flame_sprite ANIM_ATTACKER, 66, speed=1, unk1=224, unk2=30, duration=25, y=10 delay 5 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, 3, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-5, y=3, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 10, 0, 25, 1 delay 6 @@ -30012,12 +30010,12 @@ gBattleAnimMove_Overheat:: playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET createvisualtask AnimTask_CopyPalFadedToUnfaded, 5, 1 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, -1, 0, 13, RGB(18, 18, 18) + simple_palette_blend selector=F_PAL_ATTACKER, delay=-1, initial_blend_y=0, target_blend_y=13, color=RGB(18, 18, 18) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 3, 0, 15, 1 waitforvisualfinish createvisualtask AnimTask_CopyPalUnfadedFromBackup, 5, 0, 1 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 5, 0, RGB(28, 0, 0) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=5, target_blend_y=0, color=RGB(28, 0, 0) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -30025,7 +30023,7 @@ gBattleAnimMove_Overheat:: delay 15 createvisualtask AnimTask_CopyPalUnfadedFromBackup, 5, 1, 0 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 13, 0, RGB(18, 18, 18) + simple_palette_blend selector=F_PAL_ATTACKER, delay=0, initial_blend_y=13, target_blend_y=0, color=RGB(18, 18, 18) waitforvisualfinish createvisualtask AnimTask_FreeBackupPalBuffer, 5 waitforvisualfinish @@ -30039,7 +30037,7 @@ gBattleAnimMove_HydroCannon:: playsewithpan SE_M_SURF, SOUND_PAN_ATTACKER createsprite gHydroCannonChargeSpriteTemplate, ANIM_TARGET, 2 delay 10 - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 delay 30 panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 call HydroCannonBeam @@ -30056,7 +30054,7 @@ gBattleAnimMove_HydroCannon:: call HydroCannonBeam createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + invert_screen_color scenery=0x1 | 0x2 | 0x4 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -30135,7 +30133,7 @@ SeismicTossStrong: call SeismicTossRockScatter1 goto SeismicTossContinue SeismicTossRockScatter1: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -10, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-10, y=-8, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 5, 1 createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 27, 2, 3 @@ -30144,7 +30142,7 @@ SeismicTossRockScatter1: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 25, 4, 4 return SeismicTossRockScatter2: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=10, y=-8, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 5, 1 createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 32, 3, 4 @@ -30169,7 +30167,7 @@ gBattleAnimMove_WaterPulse:: monbg ANIM_TARGET splitbgprio ANIM_TARGET playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 7, RGB(0, 25, 28) + simple_palette_blend selector=F_PAL_BG, delay=0, initial_blend_y=0, target_blend_y=7, color=RGB(0, 25, 28) delay 10 createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 100, 100, 8, 1, 20, 40, 0 createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 20, 100, 16, 2, 10, 35, 1 @@ -30189,7 +30187,7 @@ gBattleAnimMove_WaterPulse:: delay 13 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 8, 18, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 7, 0, RGB(0, 25, 28) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=7, target_blend_y=0, color=RGB(0, 25, 28) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -30202,7 +30200,7 @@ gBattleAnimMove_PsychoBoost:: createvisualtask AnimTask_FadeScreenToWhite, 5 waitbgfadein delay 6 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG, 2, 8, 0, 10, RGB_BLACK + blend_color_cycle selector=F_PAL_BG, delay=2, num_blends=8, initial_blend_y=0, target_blend_y=10, color=RGB_BLACK delay 0 splitbgprio ANIM_ATTACKER setalpha 8, 8 @@ -30229,8 +30227,8 @@ gBattleAnimMove_KnockOff:: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET createsprite gKnockOffStrikeSpriteTemplate, ANIM_TARGET, 2, -16, -16 delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 2 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=5, num_blends=1, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -12, 10, 0, 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 @@ -30246,16 +30244,16 @@ gBattleAnimMove_DoomDesire:: createvisualtask GetIsDoomDesireHitTurn, 2 delay 1 monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, FALSE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 4, RGB_BLACK + set_grayscale_pal battler=ANIM_TARGET + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=4, color=RGB_BLACK waitforvisualfinish setalpha 8, 8 playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_ATTACKER, 1 waitforvisualfinish delay 20 - createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, TRUE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 4, 0, RGB_BLACK + set_original_pal battler=ANIM_TARGET + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=4, target_blend_y=0, color=RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -30276,20 +30274,20 @@ gBattleAnimMove_SkyUppercut:: delay 4 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -28, 28, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-28, y=28, relative_to=ANIM_TARGET, animation=1 delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -15, 8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-15, y=8, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, -12, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-5, y=-12, relative_to=ANIM_TARGET, animation=1 delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -32, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=-32, relative_to=ANIM_TARGET, animation=1 delay 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 5, -52, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=5, y=-52, relative_to=ANIM_TARGET, animation=1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -26, 16, 1, 4 delay 4 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 0, 3, 6, 1 @@ -30357,39 +30355,39 @@ gBattleAnimMove_Twister:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 120, 70, 5, 70, 30 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=120, distance_y=70, wave_period=5, wave_amplitude=70, speed_up_on_frame=30 delay 1 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 115, 55, 6, 60, 25 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=115, distance_y=55, wave_period=6, wave_amplitude=60, speed_up_on_frame=25 delay 1 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 115, 60, 7, 60, 30 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 115, 55, 10, 60, 30 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=115, distance_y=60, wave_period=7, wave_amplitude=60, speed_up_on_frame=30 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=115, distance_y=55, wave_period=10, wave_amplitude=60, speed_up_on_frame=30 delay 3 createsprite gTwisterRockSpriteTemplate, ANIM_TARGET, 2, 100, 50, 4, 50, 26 delay 1 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 105, 25, 8, 60, 20 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=105, distance_y=25, wave_period=8, wave_amplitude=60, speed_up_on_frame=20 delay 1 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 115, 40, 10, 48, 30 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=115, distance_y=40, wave_period=10, wave_amplitude=48, speed_up_on_frame=30 delay 3 createsprite gTwisterRockSpriteTemplate, ANIM_TARGET, 2, 120, 30, 6, 45, 25 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 115, 35, 10, 60, 30 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=115, distance_y=35, wave_period=10, wave_amplitude=60, speed_up_on_frame=30 delay 3 createsprite gTwisterRockSpriteTemplate, ANIM_TARGET, 2, 105, 20, 8, 40, 0 delay 3 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 20, 255, 15, 32, 0 - createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 110, 10, 8, 32, 20 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=20, distance_y=255, wave_period=15, wave_amplitude=32, speed_up_on_frame=0 + create_twister_leaf_sprite ANIM_TARGET, 2, duration=110, distance_y=10, wave_period=8, wave_amplitude=32, speed_up_on_frame=20 waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-32, y=-16, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 + create_random_pos_hitsplat_sprite ANIM_TARGET, 3, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=32, y=20, relative_to=ANIM_TARGET, animation=3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -30405,33 +30403,33 @@ gBattleAnimMove_MagicalLeaf:: delay 1 loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER, 10, 5 createvisualtask AnimTask_CycleMagicalLeafPal, 5 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -3, -2, 10 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-3, upward_delta_y=-2, upward_duration=10 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -1, -1, 15 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-1, upward_delta_y=-1, upward_duration=15 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -4, -4, 7 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-4, upward_delta_y=-4, upward_duration=7 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, 3, -3, 11 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=3, upward_delta_y=-3, upward_duration=11 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -1, -6, 8 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-1, upward_delta_y=-6, upward_duration=8 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, 2, -1, 12 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=2, upward_delta_y=-1, upward_duration=12 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -3, -4, 13 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-3, upward_delta_y=-4, upward_duration=13 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, 4, -5, 7 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=4, upward_delta_y=-5, upward_duration=7 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, 2, -6, 11 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=2, upward_delta_y=-6, upward_duration=11 delay 2 - createsprite gRazorLeafParticleSpriteTemplate, ANIM_ATTACKER, 2, -3, -5, 8 + create_razor_leaf_particle_sprite ANIM_ATTACKER, 2, upward_delta_x=-3, upward_delta_y=-5, upward_duration=8 delay 60 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 32, 20, 0 - createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 20, -10, 20, 0, 32, -20, 0 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=32, wave_amplitude=20, target_both=0 + create_razor_leaf_cutter_sprite ANIM_TARGET, 3, initial_x=20, initial_y=-10, target_x=20, target_y=0, duration=32, wave_amplitude=-20, target_both=0 delay 30 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, -4, ANIM_TARGET, 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 10, 4, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=-4, relative_to=ANIM_TARGET, animation=2 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=10, y=4, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 delay 20 setarg 7, 0xFFFF @@ -30539,7 +30537,7 @@ gBattleAnimMove_WeatherBall:: waitforvisualfinish delay 15 playsewithpan SE_M_DETECT, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 + complex_palette_blend selector=F_PAL_BG | F_PAL_BATTLERS, delay=5, num_blends=1, color1=RGB_WHITE, blend_y1=10, color2=RGB_BLACK, blend_y2=0 waitforvisualfinish createvisualtask AnimTask_GetWeather, 2 delay 1 @@ -30555,7 +30553,7 @@ WeatherBallNormal: createsprite gWeatherBallNormalDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0 waitforvisualfinish playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 4, x=-10, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 8, 1 waitforvisualfinish end @@ -30631,7 +30629,7 @@ gBattleAnimMove_Count:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -30874,11 +30872,11 @@ ElectricityEffect_OnTargets: ConfusionEffect: loopsewithpan SE_M_DIZZY_PUNCH, SOUND_PAN_TARGET, 13, 6 - createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 0, 3, 90 - createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 51, 3, 90 - createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 102, 3, 90 - createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 153, 3, 90 - createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 204, 3, 90 + create_confusion_duck_sprite ANIM_TARGET, 2, x=0, y=-15, wave_offset=0, wave_period=3, duration=90 + create_confusion_duck_sprite ANIM_TARGET, 2, x=0, y=-15, wave_offset=51, wave_period=3, duration=90 + create_confusion_duck_sprite ANIM_TARGET, 2, x=0, y=-15, wave_offset=102, wave_period=3, duration=90 + create_confusion_duck_sprite ANIM_TARGET, 2, x=0, y=-15, wave_offset=153, wave_period=3, duration=90 + create_confusion_duck_sprite ANIM_TARGET, 2, x=0, y=-15, wave_offset=204, wave_period=3, duration=90 return SetPsychicBackground: @@ -30943,7 +30941,7 @@ UnsetSolarBeamBg: gBattleAnimStatus_Poison:: loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 13, 6 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 18, 2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 12, RGB(30, 0, 31) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB(30, 0, 31) end gBattleAnimStatus_Confusion:: @@ -31027,7 +31025,7 @@ gBattleAnimStatus_Frostbite:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET call IceCrystalEffectShort - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31) + simple_palette_blend selector=F_PAL_TARGET, delay=5, initial_blend_y=7, target_blend_y=0, color=RGB(0, 20, 31) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -31086,9 +31084,9 @@ gBattleAnimGeneral_TurnTrap:: Status_BindWrap: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 2 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 1 + create_constrict_binding_sprite ANIM_TARGET, 4, initial_x=0, initial_y=16, affine_animation=0, squeezes=1 delay 7 - createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 2, 0, 8, 1, 1 + create_constrict_binding_sprite ANIM_TARGET, 2, initial_x=0, initial_y=8, affine_animation=1, squeezes=1 delay 3 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 delay 20 @@ -31116,13 +31114,11 @@ Status_MagmaStorm: loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 5, 8 createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_ATTACKER | F_PAL_TARGET), 4, 2, 2, 0, 12, RGB(22, 9, 7) + blend_color_cycle selector=(F_PAL_ATTACKER | F_PAL_TARGET), delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(22, 9, 7) call FireSpinEffect call FireSpinEffect - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_ATTACKER | F_PAL_TARGET), 4, 2, 2, 0, 12, RGB(22, 9, 7) call FireSpinEffect call FireSpinEffect - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_ATTACKER | F_PAL_TARGET), 4, 2, 2, 0, 12, RGB(22, 9, 7) call FireSpinEffect restorebg waitbgfadeout @@ -31139,13 +31135,13 @@ Status_Whirlpool: splitbgprio ANIM_TARGET setalpha 12, 8 delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(0, 13, 23) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_TARGET, delay=2, initial_blend_y=0, target_blend_y=7, color=RGB(0, 13, 23) playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 30, 1 call WhirlpoolEffect call WhirlpoolEffect delay 12 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(0, 13, 23) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_TARGET, delay=2, initial_blend_y=7, target_blend_y=0, color=RGB(0, 13, 23) waitforvisualfinish stopsound clearmonbg ANIM_DEF_PARTNER @@ -31157,10 +31153,10 @@ Status_Clamp: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_VICEGRIP, SOUND_PAN_TARGET - createsprite gClampJawSpriteTemplate, ANIM_ATTACKER, 2, -32, 0, 2, 819, 0, 10 - createsprite gClampJawSpriteTemplate, ANIM_ATTACKER, 2, 32, 0, 6, -819, 0, 10 + create_clamp_jaw_sprite ANIM_ATTACKER, 2, x=-32, y=0, animation=2, x_velocity=819/256, y_velocity=0/256, half_duration=10 + create_clamp_jaw_sprite ANIM_ATTACKER, 2, x=32, y=0, animation=6, x_velocity=-819/256, y_velocity=0/256, half_duration=10 delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -31177,13 +31173,13 @@ Status_Snap_Trap: Status_SandTomb: loadspritegfx ANIM_TAG_MUD_SAND - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_TARGET, delay=2, initial_blend_y=0, target_blend_y=7, color=RGB(19, 17, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 30, 1 playsewithpan SE_M_SAND_TOMB, SOUND_PAN_TARGET call SandTombSwirlingDirt call SandTombSwirlingDirt delay 22 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(19, 17, 0) + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_TARGET, delay=2, initial_blend_y=7, target_blend_y=0, color=RGB(19, 17, 0) waitforvisualfinish stopsound end @@ -31221,7 +31217,7 @@ gBattleAnimGeneral_HeldItemEffect:: call GrantingStarsEffect waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 3, 7, 0, RGB(17, 31, 25) + simple_palette_blend selector=F_PAL_ATTACKER, delay=3, initial_blend_y=7, target_blend_y=0, color=RGB(17, 31, 25) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 waitforvisualfinish end @@ -31244,7 +31240,7 @@ gBattleAnimGeneral_SmokeballEscape:: createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 124, 2, 14, -20, 30 delay 4 playsewithpan SE_BALL_OPEN, SOUND_PAN_TARGET - createvisualtask AnimTask_AttackerFadeToInvisible, 2, 2 + attacker_fade_to_invisible step_delay=2 createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 123, 3, 4, 4, 30 delay 14 playsewithpan SE_BALL_OPEN, SOUND_PAN_TARGET @@ -31265,11 +31261,11 @@ gBattleAnimGeneral_SmokeballEscape:: end gBattleAnimGeneral_HangedOn:: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_ATTACKER, 7, 0, 9, RGB_RED + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_ATTACKER, delay=7, initial_blend_y=0, target_blend_y=9, color=RGB_RED playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_SlideMonForFocusBand, 5, 30, 128, 0, 1, 2, 0, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_ATTACKER, 4, 9, 0, RGB_RED + simple_palette_blend unused_subpriority_offset=0, selector=F_PAL_ATTACKER, delay=4, initial_blend_y=9, target_blend_y=0, color=RGB_RED waitforvisualfinish delay 6 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 0, 0, 0, 15 @@ -31317,7 +31313,7 @@ gBattleAnimGeneral_MonHit:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -31329,7 +31325,7 @@ gBattleAnimGeneral_ItemSteal:: createvisualtask AnimTask_SetAnimAttackerAndTargetForEffectAtk, 2 createvisualtask AnimTask_SetTargetToEffectBattler, 2 @ Redundant with above delay 1 - createsprite gItemStealSpriteTemplate, ANIM_ATTACKER, 2, 0, -5, 10, 2, -1 + create_item_steal_sprite ANIM_ATTACKER, 2, initial_x=0, initial_y=-5, unk2=10, unk3=2, unk4=-1 end gBattleAnimGeneral_SnatchMove:: @@ -31378,7 +31374,7 @@ gBattleAnimGeneral_FutureSightHit:: gBattleAnimGeneral_DoomDesireHit:: createvisualtask AnimTask_SetAnimTargetToBattlerTarget, 2 loadspritegfx ANIM_TAG_EXPLOSION - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 16, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=0, target_blend_y=16, color=RGB_WHITE waitforvisualfinish delay 10 createvisualtask AnimTask_DoomDesireLightBeam, 5 @@ -31405,7 +31401,7 @@ gBattleAnimGeneral_DoomDesireHit:: playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=16, target_blend_y=0, color=RGB_WHITE waitforvisualfinish end @@ -31414,7 +31410,7 @@ gBattleAnimGeneral_FocusPunchSetUp:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -31427,7 +31423,7 @@ gBattleAnimGeneral_IngrainHeal:: loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 4, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=0, target_blend_y=4, color=RGB(13, 31, 12) waitforvisualfinish delay 3 call AbsorbEffect @@ -31435,7 +31431,7 @@ gBattleAnimGeneral_IngrainHeal:: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 4, 0, RGB(13, 31, 12) + simple_palette_blend selector=F_PAL_BG, delay=1, initial_blend_y=4, target_blend_y=0, color=RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -31443,7 +31439,7 @@ gBattleAnimGeneral_IngrainHeal:: gBattleAnimGeneral_WishHeal:: loadspritegfx ANIM_TAG_SPARKLE_2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=0, target_blend_y=10, color=RGB_BLACK waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call GrantingStarsEffect @@ -31452,7 +31448,7 @@ gBattleAnimGeneral_WishHeal:: loadspritegfx ANIM_TAG_BLUE_STAR call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK + simple_palette_blend selector=F_PAL_BG, delay=3, initial_blend_y=10, target_blend_y=0, color=RGB_BLACK end gBattleAnimGeneral_SimpleHeal:: @@ -31491,7 +31487,7 @@ gBattleAnimGeneral_MegaEvolution:: monbg ANIM_ATTACKER setalpha 12, 8 loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 6, 0, 11, RGB(31, 31, 11) + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=6, initial_blend_y=0, target_blend_y=11, color=RGB(31, 31, 11) call MegaEvolutionParticles call MegaEvolutionParticles call MegaEvolutionParticles @@ -31556,7 +31552,7 @@ gBattleAnimGeneral_TeraCharge:: monbg ANIM_ATTACKER setalpha 12, 8 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 6, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=6, initial_blend_y=0, target_blend_y=11, color=RGB_RED call RainbowEndureEffect call RainbowEndureEffect call RainbowEndureEffect @@ -31632,7 +31628,7 @@ gBattleAnimGeneral_ZMoveActivate:: waitbgfadein createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x0, 0x0, 0xFFFF playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 6, 0, 11, RGB(28, 21, 29) + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=6, initial_blend_y=0, target_blend_y=11, color=RGB(28, 21, 29) call ZMoveBuffEffect call ZMoveBuffEffect call ZMoveBuffEffect @@ -31663,7 +31659,7 @@ gBattleAnimGeneral_TotemFlare:: monbg ANIM_ATTACKER setalpha 12, 8 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 6, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=0, num_blends=6, initial_blend_y=0, target_blend_y=11, color=RGB_RED call RainbowEndureEffect call RainbowEndureEffect call RainbowEndureEffect @@ -31691,7 +31687,7 @@ gBattleAnimGeneral_GulpMissile:: @ Tackle anim (placeholder) setalpha 12, 8 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_ATTACKER, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_ATTACKER, animation=2 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 3, 0, 6, 1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish @@ -32143,7 +32139,7 @@ BallThrowTrainerBlock: setalpha 12, 8 delay 0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -4, -20, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-4, y=-20, relative_to=ANIM_TARGET, animation=2 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -32266,7 +32262,7 @@ gBattleAnimMove_AllOutPummeling:: waitforvisualfinish call EndureEffect loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect waitforvisualfinish @@ -32279,48 +32275,48 @@ gBattleAnimMove_AllOutPummeling:: createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 63, 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x18, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_1, 0x1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xfffa, 0x12, 0x0, 0x0, 0xa, 0x1, ANIM_CHOP, 0x1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x10, 0x0, 0x0, 0xa, 0x1, ANIM_FIST_1, 0x1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x15, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_2, 0x1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x14, 0x0, 0x0, 0xa, 0x1, ANIM_FIST_1, 0x1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x17, 0x0, 0x0, 0xa, 0x1, ANIM_CHOP, 0x1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x11, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_1, 0x1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffb0, 0x10, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_2, 0x1 delay 2 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffa0, 0x15, 0x0, 0x0, 0xa, 0x1, ANIM_CHOP, 0x1 delay 2 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 16 createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -24, 8, 23, 10, 40, 10 @@ -32398,7 +32394,7 @@ FinishSupersonicSkystrike: playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER createsprite gSupersonicSkystrikeFlySpriteTemplate, ANIM_ATTACKER, 2, 0x14 delay 16 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_ATTACKER, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -256, 21, 0, 4 createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 12, -24, -16, 24 @ 12, -48, -16, 24 @@ -32526,7 +32522,7 @@ gBattleAnimMove_TectonicRage:: delay 32 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER monbg ANIM_TARGET - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 2 + create_basic_hitsplat_sprite ANIM_ATTACKER, 4, x=0, y=0, relative_to=ANIM_TARGET, animation=2 delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -256, 21, 0, 4 delay 10 @@ -32634,7 +32630,7 @@ gBattleAnimMove_ContinentalCrush:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call ContinentalCrashBuffEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(19, 14, 11) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(19, 14, 11) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call ContinentalCrashBuffEffect delay 8 @@ -32667,14 +32663,14 @@ FinishContinentalCrush: delay 5 visible ANIM_ATTACKER delay 4 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(19, 14, 11) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(19, 14, 11) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call ContinentalCrushStockpileRocks playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call ContinentalCrushStockpileRocks createsprite gContinentalCrushGrowingRockSpriteTemplate, ANIM_ATTACKER, 2, 0x0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(19, 14, 11) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(19, 14, 11) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call ContinentalCrushStockpileRocks @@ -32901,7 +32897,7 @@ gSavageSpinOutStringBlastSpriteTemplateSHOT: delay 3 return SavageSpinOutCrash_1: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -10, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=-10, y=-8, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 12, -24, -16, 24 createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 16, -38, -10, 24 @@ -32909,7 +32905,7 @@ SavageSpinOutCrash_1: createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 1, 12, -36, -16, 24 return SavageSpinOutCrash_2: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 10, -8, ANIM_TARGET, 1 + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=10, y=-8, relative_to=ANIM_TARGET, animation=1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 12, -48, -16, 24 createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 16, -16, -10, 24 @@ -32934,7 +32930,7 @@ gBattleAnimMove_NeverEndingNightmare:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call NeverendingNightmareBuffEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(0, 6, 16) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(0, 6, 16) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call NeverendingNightmareBuffEffect delay 8 @@ -33163,7 +33159,7 @@ FinishCorkscrewCrash: delay 16 stopsound playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=0, relative_to=ANIM_TARGET, animation=0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -256, 15, 0, 4 @ shove target down a bit waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 @@ -33381,7 +33377,7 @@ gBattleAnimMove_HydroVortex:: call HydroVortexBubbles loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_WATERFALL, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(0, 13, 23) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(0, 13, 23) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 waitforvisualfinish unloadspritegfx ANIM_TAG_SPLASH @@ -34032,7 +34028,7 @@ SubzeroSlammerFinish: waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 0x11 waitforvisualfinish call SubzeroSlammerIceSwirl - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(0, 20, 31) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(0, 20, 31) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call SubzeroSlammerIceSwirl call SubzeroSlammerIceSwirl @@ -34144,7 +34140,7 @@ gBattleAnimMove_DevastatingDrake:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call DevastatingDrakeBuffEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(0, 6, 16) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(0, 6, 16) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call DevastatingDrakeBuffEffect delay 8 @@ -34369,7 +34365,7 @@ gBattleAnimMove_BlackHoleEclipse:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_BLACK + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -34666,7 +34662,7 @@ gBattleAnimMove_Catastropika:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(31, 31, 22) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(31, 31, 22) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -34884,7 +34880,7 @@ gBattleAnimMove_10000000VoltThunderbolt:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 16 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 @thunder flash + invert_screen_color scenery=0x101@thunder flash createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER @ charge createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 64, -36 delay 1 @@ -34899,7 +34895,7 @@ gBattleAnimMove_10000000VoltThunderbolt:: @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 20 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 @thunder flash + invert_screen_color scenery=0x101@thunder flash createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -64, -36 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -64, -20 @@ -34913,7 +34909,7 @@ gBattleAnimMove_10000000VoltThunderbolt:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 20 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 @thunder flash + invert_screen_color scenery=0x101@thunder flash createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -112, -36 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -112, -20 @@ -34927,7 +34923,7 @@ gBattleAnimMove_10000000VoltThunderbolt:: @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 delay 16 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 @thunder flash + invert_screen_color scenery=0x101@thunder flash createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -48, -36 delay 1 createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -48, -20 @@ -34949,7 +34945,7 @@ gBattleAnimMove_10000000VoltThunderbolt:: loadspritegfx ANIM_TAG_POISON_BUBBLE @purple loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER, 0x5, 0xA createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 -@ createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 + @flash_anim_tag_with_color tag=ANIM_TAG_ORBS, delay=1, num_blends=12, color1=RGB_RED, blend_y1=16, color2=0, blend_y2=0 call TenMillionVoltThunderboltBeamRed call TenMillionVoltThunderboltBeamBlue createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 50, 1 @@ -35437,7 +35433,7 @@ PulverizingPancakeFinish: createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 delay 7 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 @big hit marker + create_basic_hitsplat_sprite ANIM_TARGET, 2, x=0, y=0, relative_to=ANIM_TARGET, animation=0@big hit marker delay 0 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 4, 44 createsprite gPulverizingPancakeYellowRingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x100, 0x0 @@ -36110,7 +36106,7 @@ gBattleAnimMove_OceanicOperetta:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call OceanicOperettaBuffEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call OceanicOperettaBuffEffect delay 8 @@ -36317,7 +36313,7 @@ SplinteredStormshardsByPlayer: visible ANIM_ATTACKER delay 1 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x60, 0x80, 0x60, 0x30, 0x30 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(31, 31, 22) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(31, 31, 22) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 delay 2 call SplinteredStormshardsPlayer_Rising2 @@ -36398,7 +36394,7 @@ SplinteredStormshardsByOpponent: visible ANIM_ATTACKER delay 1 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xd0, 0x40, 0xd0, 0x0, 0x30 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(31, 31, 22) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(31, 31, 22) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 delay 2 call SplinteredStormshardsOpponent_Rising2 @@ -36626,18 +36622,18 @@ gBattleAnimMove_LetsSnuggleForever:: end LetsSnuggleForeverTears: playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET - createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0 - createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x1 + create_tear_drop_sprite ANIM_TARGET, 2, relative_to=ANIM_TARGET, type=0x0 + create_tear_drop_sprite ANIM_TARGET, 2, relative_to=ANIM_TARGET, type=0x1 delay 8 - createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x2 - createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x3 + create_tear_drop_sprite ANIM_TARGET, 2, relative_to=ANIM_TARGET, type=0x2 + create_tear_drop_sprite ANIM_TARGET, 2, relative_to=ANIM_TARGET, type=0x3 return LetsSnuggleForeverImpacts: - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -12, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=0, y=-12, relative_to=ANIM_TARGET, animation=0 delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -12, 8, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=-12, y=8, relative_to=ANIM_TARGET, animation=0 delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, 0, ANIM_TARGET, 0 + create_basic_hitsplat_sprite ANIM_TARGET, 3, x=12, y=0, relative_to=ANIM_TARGET, animation=0 delay 8 return LetsSnuggleForeverStars_1: @@ -37052,7 +37048,7 @@ gBattleAnimMove_SearingSunrazeSmash:: call SearingSunrazeSmashFlare delay 8 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_WHITE + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call SearingSunrazeSmashFlare delay 8 @@ -37281,7 +37277,7 @@ gBattleAnimMove_MenacingMoonrazeMaelstrom:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call MenacingMoonrazeMaelstromFlare delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 12, RGB_BLACK + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call MenacingMoonrazeMaelstromFlare playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -37341,7 +37337,7 @@ MenacingMoonrazeMaelstromFinish: unloadspritegfx ANIM_TAG_METEOR @superpower playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call MenacingMoonrazeMaelstromChargeUp - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 12, RGB_BLACK + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=12, color=RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call MenacingMoonrazeMaelstromChargeUp call MenacingMoonrazeMaelstromChargeUp @@ -37470,7 +37466,7 @@ gBattleAnimMove_LightThatBurnsTheSky:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(31, 31, 22) + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB(31, 31, 22) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -37647,7 +37643,7 @@ gBattleAnimMove_SoulStealing7StarStrike:: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call SoulStealingSevenStarStrikeBuffEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_BLACK + blend_color_cycle selector=F_PAL_ATTACKER, delay=2, num_blends=2, initial_blend_y=0, target_blend_y=11, color=RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call SoulStealingSevenStarStrikeBuffEffect delay 8 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 7007410e15..25262692d7 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1185,7 +1185,7 @@ BattleScript_EffectPartingShotTrySpAtk: statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotMaybeSwitch call BattleScript_EffectPartingShotMaybePrintStat BattleScript_EffectPartingShotMaybeSwitch: - jumpifgenconfiglowerthan CONFIG_PARTING_SHOT_SWITCH, GEN_7, BattleScript_EffectPartingShotSwitch + jumpifgenconfiglowerthan CONFIG_B_PARTING_SHOT_SWITCH, GEN_7, BattleScript_EffectPartingShotSwitch jumpifbyte CMP_NOT_EQUAL, sB_ANIM_TARGETS_HIT, 0, BattleScript_EffectPartingShotSwitch goto BattleScript_MoveEnd @@ -1534,7 +1534,7 @@ BattleScript_EffectHitEnemyHealAlly:: BattleScript_EffectDefog:: setstatchanger STAT_EVASION, 1, TRUE attackcanceler - jumpifgenconfiglowerthan CONFIG_DEFOG_EFFECT_CLEARING, GEN_5, BattleScript_DefogAfterSubstituteCheck + jumpifgenconfiglowerthan CONFIG_B_DEFOG_EFFECT_CLEARING, GEN_5, BattleScript_DefogAfterSubstituteCheck jumpifsubstituteblocks BattleScript_DefogIfCanClearHazards BattleScript_DefogAfterSubstituteCheck: jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_EVASION, MIN_STAT_STAGE, BattleScript_DefogWorks @@ -1542,7 +1542,7 @@ BattleScript_DefogIfCanClearHazards: trydefog FALSE, BattleScript_ButItFailed BattleScript_DefogWorks: accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE - jumpifgenconfiglowerthan CONFIG_DEFOG_EFFECT_CLEARING, GEN_5, BattleScript_DefogWorksAfterSubstituteCheck + jumpifgenconfiglowerthan CONFIG_B_DEFOG_EFFECT_CLEARING, GEN_5, BattleScript_DefogWorksAfterSubstituteCheck jumpifsubstituteblocks BattleScript_DefogTryHazardsWithAnim BattleScript_DefogWorksAfterSubstituteCheck: statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_DefogTryHazardsWithAnim @@ -2071,7 +2071,7 @@ BattleScript_EffectHealingWish:: setatkhptozero tryfaintmon BS_ATTACKER storehealingwish BS_ATTACKER - jumpifgenconfiglowerthan CONFIG_HEALING_WISH_SWITCH, GEN_5, BattleScript_EffectHealingWishGen4 + jumpifgenconfiglowerthan CONFIG_B_HEALING_WISH_SWITCH, GEN_5, BattleScript_EffectHealingWishGen4 BattleScript_EffectHealingWishEnd: moveendall end @@ -2357,7 +2357,7 @@ BattleScript_TryTailwindAbilitiesLoop_WindPower: BattleScript_EffectMiracleEye:: attackcanceler accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE - jumpifgenconfiglowerthan CONFIG_MIRACLE_EYE_FAIL, GEN_5, BattleScript_MiracleEyeSet + jumpifgenconfiglowerthan CONFIG_B_MIRACLE_EYE_FAIL, GEN_5, BattleScript_MiracleEyeSet jumpifvolatile BS_TARGET, VOLATILE_MIRACLE_EYE, BattleScript_ButItFailed BattleScript_MiracleEyeSet: setvolatile BS_TARGET, VOLATILE_MIRACLE_EYE @@ -3380,7 +3380,7 @@ BattleScript_EffectMeanLook:: accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON jumpifvolatile BS_TARGET, VOLATILE_ESCAPE_PREVENTION, BattleScript_ButItFailed jumpifsubstituteblocks BattleScript_ButItFailed - jumpifgenconfiglowerthan CONFIG_GHOSTS_ESCAPE, GEN_6, BattleScript_EffectMeanLookGen5 + jumpifgenconfiglowerthan CONFIG_B_GHOSTS_ESCAPE, GEN_6, BattleScript_EffectMeanLookGen5 jumpiftype BS_TARGET, TYPE_GHOST, BattleScript_ButItFailed BattleScript_EffectMeanLookGen5: attackanimation @@ -3393,6 +3393,7 @@ BattleScript_EffectMeanLookGen5: BattleScript_EffectNightmare:: attackcanceler jumpifsubstituteblocks BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifvolatile BS_TARGET, VOLATILE_NIGHTMARE, BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_NightmareWorked jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_NightmareWorked @@ -3408,7 +3409,7 @@ BattleScript_NightmareWorked:: BattleScript_EffectMinimize:: attackcanceler setvolatile BS_ATTACKER, VOLATILE_MINIMIZE - jumpifgenconfiglowerthan CONFIG_MINIMIZE_EVASION, GEN_5, BattleScript_EffectMinimizeGen4 + jumpifgenconfiglowerthan CONFIG_B_MINIMIZE_EVASION, GEN_5, BattleScript_EffectMinimizeGen4 setstatchanger STAT_EVASION, 2, FALSE goto BattleScript_EffectStatUpAfterAtkCanceler BattleScript_EffectMinimizeGen4: @@ -3482,8 +3483,8 @@ BattleScript_EffectSpikes:: BattleScript_EffectForesight:: attackcanceler accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON - jumpifgenconfiglowerthan CONFIG_FORESIGHT_FAIL, GEN_3, BattleScript_ForesightFailCheck - jumpifgenconfiglowerthan CONFIG_FORESIGHT_FAIL, GEN_5, BattleScript_ForesightSet + jumpifgenconfiglowerthan CONFIG_B_FORESIGHT_FAIL, GEN_3, BattleScript_ForesightFailCheck + jumpifgenconfiglowerthan CONFIG_B_FORESIGHT_FAIL, GEN_5, BattleScript_ForesightSet BattleScript_ForesightFailCheck: jumpifvolatile BS_TARGET, VOLATILE_FORESIGHT, BattleScript_ButItFailed BattleScript_ForesightSet: @@ -3767,6 +3768,7 @@ BattleScript_EffectBellyDrum:: BattleScript_EffectPsychUp:: attackcanceler + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE copyfoestats attackanimation waitanimation @@ -3793,7 +3795,7 @@ BattleScript_EffectFutureSight:: goto BattleScript_MoveEnd BattleScript_EffectTeleport:: - jumpifgenconfiglowerthan CONFIG_TELEPORT_BEHAVIOR, GEN_8, BattleScript_EffectTeleportGen7 + jumpifgenconfiglowerthan CONFIG_B_TELEPORT_BEHAVIOR, GEN_8, BattleScript_EffectTeleportGen7 jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_EffectBatonPass jumpifside BS_ATTACKER, B_SIDE_PLAYER, BattleScript_EffectBatonPass goto BattleScript_DoEffectTeleport @@ -3812,7 +3814,7 @@ BattleScript_DoEffectTeleport:: goto BattleScript_MoveEnd BattleScript_EffectBeatUp:: - jumpifgenconfiglowerthan CONFIG_BEAT_UP, GEN_5, BattleScript_EffectBeatUpGen3 + jumpifgenconfiglowerthan CONFIG_B_BEAT_UP, GEN_5, BattleScript_EffectBeatUpGen3 goto BattleScript_EffectHit BattleScript_EffectBeatUpGen3: @@ -5972,7 +5974,7 @@ BattleScript_CudChewActivates:: end2 BattleScript_ApplyDisguiseFormChangeHPLoss:: - jumpifgenconfiglowerthan CONFIG_DISGUISE_HP_LOSS, GEN_8, BattleScript_ApplyDisguiseFormChangeHPLossReturn + jumpifgenconfiglowerthan CONFIG_B_DISGUISE_HP_LOSS, GEN_8, BattleScript_ApplyDisguiseFormChangeHPLossReturn healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE BattleScript_ApplyDisguiseFormChangeHPLossReturn: @@ -7336,7 +7338,7 @@ BattleScript_WeakArmorDefPrintString: printstring STRINGID_TARGETABILITYSTATLOWER waitmessage B_WAIT_TIME_LONG BattleScript_WeakArmorActivatesSpeed: - jumpifgenconfiglowerthan CONFIG_WEAK_ARMOR_SPEED, GEN_7, BattleScript_WeakArmorSetSpeedGen6 + jumpifgenconfiglowerthan CONFIG_B_WEAK_ARMOR_SPEED, GEN_7, BattleScript_WeakArmorSetSpeedGen6 setstatchanger STAT_SPEED, 2, FALSE goto BattleScript_WeakArmorDoSpeed BattleScript_WeakArmorSetSpeedGen6: diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index ebf3e7727b..97130374bf 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -44,6 +44,7 @@ - [Vs. Seeker](tutorials/vs_seeker.md) - [Changelog](./CHANGELOG.md) - [1.14.x]() + - [Version 1.14.3](changelogs/1.14.x/1.14.3.md) - [Version 1.14.2](changelogs/1.14.x/1.14.2.md) - [Version 1.14.1](changelogs/1.14.x/1.14.1.md) - [Version 1.14.0](changelogs/1.14.x/1.14.0.md) diff --git a/docs/changelogs/1.14.x/1.14.3.md b/docs/changelogs/1.14.x/1.14.3.md new file mode 100644 index 0000000000..2ad269b714 --- /dev/null +++ b/docs/changelogs/1.14.x/1.14.3.md @@ -0,0 +1,170 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.14.3 +`. +``` + + +## 🧬 General 🧬 +### Changed +* Misc style and whitespace cleanup by @grintoul1 in [#8681](https://github.com/rh-hideout/pokeemerald-expansion/pull/8681) +* Disable L button config (throw ball shortcut or move description) when there is overlap with L=A option by @FosterProgramming in [#8332](https://github.com/rh-hideout/pokeemerald-expansion/pull/8332) +* Update CONTRIBUTING.md by @pkmnsnfrn in [#8879](https://github.com/rh-hideout/pokeemerald-expansion/pull/8879) +* Deleted unnecessary files by @Bassoonian in [#8899](https://github.com/rh-hideout/pokeemerald-expansion/pull/8899) +* Fix Metronome bans by @amiosi in [#8834](https://github.com/rh-hideout/pokeemerald-expansion/pull/8834) +* Move CMD_ARGS to battle_script_commands by @hedara90 in [#8974](https://github.com/rh-hideout/pokeemerald-expansion/pull/8974) + - `CMD_ARGS` for battle scripts now only exist in `src/battle_script_commands.c` +* Pret merge (20th of January, 2026) by @hedara90 in [#8973](https://github.com/rh-hideout/pokeemerald-expansion/pull/8973) +* Remove trailing whitespace - Master by @AsparagusEduardo in [#9011](https://github.com/rh-hideout/pokeemerald-expansion/pull/9011) +* fix: updated rulings about big feature label by @pkmnsnfrn in [#9027](https://github.com/rh-hideout/pokeemerald-expansion/pull/9027) +* Add aif2pcm to gitignore by @hedara90 in [#9077](https://github.com/rh-hideout/pokeemerald-expansion/pull/9077) + +### Fixed +* Add check to warn of a non-working config setup by @FosterProgramming in [#8686](https://github.com/rh-hideout/pokeemerald-expansion/pull/8686) +* Various sprite visualizer fixes if configs disabled by @kittenchilly in [#8697](https://github.com/rh-hideout/pokeemerald-expansion/pull/8697) +* Fix trade evo with partner by @FosterProgramming in [#8857](https://github.com/rh-hideout/pokeemerald-expansion/pull/8857) +* Fixed Acc value shadow cut off when Accuracy = 100 by @montmoguri in [#8886](https://github.com/rh-hideout/pokeemerald-expansion/pull/8886) +* Fix vivillon icy snow icon by @FosterProgramming in [#8970](https://github.com/rh-hideout/pokeemerald-expansion/pull/8970) +* Fix premier ball wrong data size by @FosterProgramming in [#8979](https://github.com/rh-hideout/pokeemerald-expansion/pull/8979) +* Fixes creation of certain overworld sprites in object_event_pic_tables_followers.h by @ChrispyChris27 in [#9065](https://github.com/rh-hideout/pokeemerald-expansion/pull/9065) + +## 🗺️ Overworld 🗺️ +### Fixed +* Fix teleport location by @cawtds in [#8941](https://github.com/rh-hideout/pokeemerald-expansion/pull/8941) +* Fix substitute follower appearing with dead party by @FosterProgramming in [#9028](https://github.com/rh-hideout/pokeemerald-expansion/pull/9028) +* Fix berry tree spawning with max yield when OW_BERRY_ALWAYS_WATERABLE is active by @FosterProgramming in [#8976](https://github.com/rh-hideout/pokeemerald-expansion/pull/8976) +* Fix debug menu using female icon with male palette by @FosterProgramming in [#9092](https://github.com/rh-hideout/pokeemerald-expansion/pull/9092) + +## 🐉 Pokémon 🐉 +### Changed +* Miscellaneous species_info Changes by @amiosi in [#8462](https://github.com/rh-hideout/pokeemerald-expansion/pull/8462) + +### Fixed +* Fix in-battle form changes always reverting by @AsparagusEduardo in [#8810](https://github.com/rh-hideout/pokeemerald-expansion/pull/8810) +* Fix typo in Salazzle form species ID table reference by @ostomachion in [#8904](https://github.com/rh-hideout/pokeemerald-expansion/pull/8904) +* Mega Gardevoir should always be Fairy-type by @amiosi in [#8955](https://github.com/rh-hideout/pokeemerald-expansion/pull/8955) + +## ⚔️ Battle General ⚔️ +### Changed +* Add enum for battle script commands by @AlexOn1ine in [#8778](https://github.com/rh-hideout/pokeemerald-expansion/pull/8778) +* Miscellaneous fixes to configs and other values by @amiosi in [#8662](https://github.com/rh-hideout/pokeemerald-expansion/pull/8662) +* Updating IsNonVolatileStatusBlocked by @bassforte123 in [#8728](https://github.com/rh-hideout/pokeemerald-expansion/pull/8728) + +### Fixed +* Fix berry activation timing for Yawn sleep and Leech Seed damage by @moostoet in [#8776](https://github.com/rh-hideout/pokeemerald-expansion/pull/8776) + - Fix Chesto/Sitrus berry activation timing for status and damage +* Fix Cheek Pouch not activating for Bug Bite, Pluck, and Fling berry effects by @Cle-bit in [#8782](https://github.com/rh-hideout/pokeemerald-expansion/pull/8782) +* Fix wrongly getting a battler position in the type effectiveness functions by @Bassoonian in [#8787](https://github.com/rh-hideout/pokeemerald-expansion/pull/8787) +* fix crash damage implementation and incorrect memento generation by @amiosi in [#8804](https://github.com/rh-hideout/pokeemerald-expansion/pull/8804) +* Fix Sticky Hold blocking user's own Trick or Bestow by @Cle-bit in [#8860](https://github.com/rh-hideout/pokeemerald-expansion/pull/8860) +* Fixes Nightmare not affecting Comatose and adds various missing tests by @Cle-bit in [#8859](https://github.com/rh-hideout/pokeemerald-expansion/pull/8859) +* Fix Protosynthesis/Quark Drive defensive boost calculation by @hedara90 in [#8875](https://github.com/rh-hideout/pokeemerald-expansion/pull/8875) +* Fix wrong cases of DamageContext by @Bassoonian in [#8895](https://github.com/rh-hideout/pokeemerald-expansion/pull/8895) +* Fix misaligned shadows of transformed mons when `B_ENEMY_MON_SHADOW_STYLE <= GEN_3` by @estellarc in [#8887](https://github.com/rh-hideout/pokeemerald-expansion/pull/8887) +* fix ITEM_NONE being considered a form change item by DoesSpeciesUseHoldItemToChangeForm by @phexmiau in [#8915](https://github.com/rh-hideout/pokeemerald-expansion/pull/8915) +* Fix Memento and Block regressions by @amiosi in [#8942](https://github.com/rh-hideout/pokeemerald-expansion/pull/8942) +* Fixed several issues with Parting Shot by @Cle-bit in [#8928](https://github.com/rh-hideout/pokeemerald-expansion/pull/8928) +* Align Crafty Shield with wiki and refine IsAllyProtectingFromMove by @Cle-bit in [#8990](https://github.com/rh-hideout/pokeemerald-expansion/pull/8990) +* Fixes Hyperspace Fury not breaking protection by @PhallenTree in [#8999](https://github.com/rh-hideout/pokeemerald-expansion/pull/8999) +* Fix Magnetic Flux target handling in singles by @Cle-bit in [#9007](https://github.com/rh-hideout/pokeemerald-expansion/pull/9007) +* fix: IsDoubleBattle() return value by @khbsd in [#9012](https://github.com/rh-hideout/pokeemerald-expansion/pull/9012) +* Remove player party shiny bit setting in CreateFrontierBrainPokemon by @grintoul1 in [#9022](https://github.com/rh-hideout/pokeemerald-expansion/pull/9022) +* Fix Foresight/Miracle Eye repeated-use behavior by @Cle-bit in [#9025](https://github.com/rh-hideout/pokeemerald-expansion/pull/9025) +* Fix Crafty Shield consecutive-use failure by @Cle-bit in [#9023](https://github.com/rh-hideout/pokeemerald-expansion/pull/9023) +* Fixes Beak Blast burning attacker when charging 2 turn move by @PhallenTree in [#9026](https://github.com/rh-hideout/pokeemerald-expansion/pull/9026) +* Fix Synchronoise typeless behavior in Gen7+ by @Cle-bit in [#9031](https://github.com/rh-hideout/pokeemerald-expansion/pull/9031) +* Fix Psych Up wrong battler message and Gen 6+ crit ratio copying by @Cle-bit in [#9015](https://github.com/rh-hideout/pokeemerald-expansion/pull/9015) +* Add accuracy check to BattleScript_EffectNightmare by @AlexOn1ine in [#9032](https://github.com/rh-hideout/pokeemerald-expansion/pull/9032) +* Fixes to Commander and Emergency Exit by @AlexOn1ine in [#9040](https://github.com/rh-hideout/pokeemerald-expansion/pull/9040) +* Fixes Fling being usable with reusable TMs by @PhallenTree in [#8906](https://github.com/rh-hideout/pokeemerald-expansion/pull/8906) +* Fix Forewarn edge cases and random selection by @Cle-bit in [#9049](https://github.com/rh-hideout/pokeemerald-expansion/pull/9049) +* Fix Pickpocket moveend target checks and Thief/Covet handoff by @Cle-bit in [#9037](https://github.com/rh-hideout/pokeemerald-expansion/pull/9037) +* Fixes Infiltrator and adds config for Substitute interaction by @PhallenTree in [#9073](https://github.com/rh-hideout/pokeemerald-expansion/pull/9073) +* Fix Tranformed mon changing forms when fainting by @AsparagusEduardo in [#9106](https://github.com/rh-hideout/pokeemerald-expansion/pull/9106) +* Prevent Incinerate from burning items under Sticky Hold by @Cle-Bit in [#9068](https://github.com/rh-hideout/pokeemerald-expansion/pull/9068) + +## 🤹 Moves 🤹 +### Changed +* Corrected Stone Axe and Ceaseless Edge descriptions by @fdeblasio in [#9062](https://github.com/rh-hideout/pokeemerald-expansion/pull/9062) + +### Fixed +* Fix Hyper Beam animation by @hedara90 in [#8872](https://github.com/rh-hideout/pokeemerald-expansion/pull/8872) +* Fixed instances of COMBO_STARTER_CHARGE used incorrectly by @fdeblasio in [#9034](https://github.com/rh-hideout/pokeemerald-expansion/pull/9034) + +## 🧶 Items 🧶 +### Changed +* Miscellaneous Item Changes by @amiosi in [#8461](https://github.com/rh-hideout/pokeemerald-expansion/pull/8461) +* add the type boost value for gen 3 sea incense by @amiosi in [#8826](https://github.com/rh-hideout/pokeemerald-expansion/pull/8826) +* Changes to Item icons and palettes by @amiosi in [#8614](https://github.com/rh-hideout/pokeemerald-expansion/pull/8614) + +## 🤖 Battle AI 🤖 +### Fixed +* Fix Sticky Hold blocking user's own Trick or Bestow by @Cle-bit in [#8860](https://github.com/rh-hideout/pokeemerald-expansion/pull/8860) +* Fix AI absorber switching for edge cases by @Cle-bit in [#8964](https://github.com/rh-hideout/pokeemerald-expansion/pull/8964) +* Fix the speed scoring of Tailwind for AI by @Cle-bit in [#8968](https://github.com/rh-hideout/pokeemerald-expansion/pull/8968) +* Fix AI wakeup-turn detection to consider Early Bird by @Cle-bit in [#9053](https://github.com/rh-hideout/pokeemerald-expansion/pull/9053) + +## 🧹 Other Cleanup 🧹 +* Misc style and whitespace cleanup by @grintoul1 in [#8681](https://github.com/rh-hideout/pokeemerald-expansion/pull/8681) +* Disable L button config (throw ball shortcut or move description) when there is overlap with L=A option by @FosterProgramming in [#8332](https://github.com/rh-hideout/pokeemerald-expansion/pull/8332) +* Various sprite visualizer fixes if configs disabled by @kittenchilly in [#8697](https://github.com/rh-hideout/pokeemerald-expansion/pull/8697) +* Updating IsNonVolatileStatusBlocked by @bassforte123 in [#8728](https://github.com/rh-hideout/pokeemerald-expansion/pull/8728) +* Deleted unnecessary files by @Bassoonian in [#8899](https://github.com/rh-hideout/pokeemerald-expansion/pull/8899) +* Fix Metronome bans by @amiosi in [#8834](https://github.com/rh-hideout/pokeemerald-expansion/pull/8834) +* Move CMD_ARGS to battle_script_commands by @hedara90 in [#8974](https://github.com/rh-hideout/pokeemerald-expansion/pull/8974) + - `CMD_ARGS` for battle scripts now only exist in `src/battle_script_commands.c` +* Remove trailing whitespace - Master by @AsparagusEduardo in [#9011](https://github.com/rh-hideout/pokeemerald-expansion/pull/9011) +* Corrected Stone Axe and Ceaseless Edge descriptions by @fdeblasio in [#9062](https://github.com/rh-hideout/pokeemerald-expansion/pull/9062) +* Add aif2pcm to gitignore by @hedara90 in [#9077](https://github.com/rh-hideout/pokeemerald-expansion/pull/9077) +* Fixes Infiltrator test battler not using intended move by @PhallenTree in [#9096](https://github.com/rh-hideout/pokeemerald-expansion/pull/9096) + +## 🧪 Test Runner 🧪 +### Changed +* Add inverse battle type matchup test by @izrofid in [#8779](https://github.com/rh-hideout/pokeemerald-expansion/pull/8779) +* `B_ABILITY_TRIGGER_CHANCE` config tests by @AsparagusEduardo in [#8594](https://github.com/rh-hideout/pokeemerald-expansion/pull/8594) +* Support end-of-battle party data check in tests by @AsparagusEduardo in [#8831](https://github.com/rh-hideout/pokeemerald-expansion/pull/8831) + - If you added tests that checks for party data (`gPlayerParty`), make sure that you're not using a species which changes form at the end of the battle, as its data could be overriten by the form change. +* Only test if move name fits on the bag screen for moves names within a TM/HM by @estellarc in [#8882](https://github.com/rh-hideout/pokeemerald-expansion/pull/8882) +* Added tests for fainting form changes by @AsparagusEduardo in [#8912](https://github.com/rh-hideout/pokeemerald-expansion/pull/8912) +* Add tests for type-changing abilities by @Cle-bit in [#8794](https://github.com/rh-hideout/pokeemerald-expansion/pull/8794) +* Fixes Infiltrator test battler not using intended move by @PhallenTree in [#9096](https://github.com/rh-hideout/pokeemerald-expansion/pull/9096) + +### Fixed +* Fix Sticky Hold blocking user's own Trick or Bestow by @Cle-bit in [#8860](https://github.com/rh-hideout/pokeemerald-expansion/pull/8860) +* Fixes Nightmare not affecting Comatose and adds various missing tests by @Cle-bit in [#8859](https://github.com/rh-hideout/pokeemerald-expansion/pull/8859) +* Fixes Hyperspace Fury not breaking protection by @PhallenTree in [#8999](https://github.com/rh-hideout/pokeemerald-expansion/pull/8999) +* Fix Magnetic Flux target handling in singles by @Cle-bit in [#9007](https://github.com/rh-hideout/pokeemerald-expansion/pull/9007) +* Fix Foresight/Miracle Eye repeated-use behavior by @Cle-bit in [#9025](https://github.com/rh-hideout/pokeemerald-expansion/pull/9025) +* Fixes Beak Blast burning attacker when charging 2 turn move by @PhallenTree in [#9026](https://github.com/rh-hideout/pokeemerald-expansion/pull/9026) +* Fix Psych Up wrong battler message and Gen 6+ crit ratio copying by @Cle-bit in [#9015](https://github.com/rh-hideout/pokeemerald-expansion/pull/9015) +* Fix Pickpocket moveend target checks and Thief/Covet handoff by @Cle-bit in [#9037](https://github.com/rh-hideout/pokeemerald-expansion/pull/9037) + +## 📚 Documentation 📚 +* Add enum for battle script commands by @AlexOn1ine in [#8778](https://github.com/rh-hideout/pokeemerald-expansion/pull/8778) +* Port old list of credits to modern system by @Bassoonian in [#7887](https://github.com/rh-hideout/pokeemerald-expansion/pull/7887) +* Miscellaneous fixes to configs and other values by @amiosi in [#8662](https://github.com/rh-hideout/pokeemerald-expansion/pull/8662) +* Remove credits from code by @Bassoonian in [#8748](https://github.com/rh-hideout/pokeemerald-expansion/pull/8748) +* Miscellaneous species_info Changes by @amiosi in [#8462](https://github.com/rh-hideout/pokeemerald-expansion/pull/8462) +* Update CONTRIBUTING.md by @pkmnsnfrn in [#8879](https://github.com/rh-hideout/pokeemerald-expansion/pull/8879) +* Amend "SS Item" category of scope doc by @Pawkkie in [#8966](https://github.com/rh-hideout/pokeemerald-expansion/pull/8966) +* fix: updated rulings about big feature label by @pkmnsnfrn in [#9027](https://github.com/rh-hideout/pokeemerald-expansion/pull/9027) + +## 👻 Sprites 👻 +### Changed +* Changes to Item icons and palettes by @amiosi in [#8614](https://github.com/rh-hideout/pokeemerald-expansion/pull/8614) + +### Fixed +* Fix vivillon icy snow icon by @FosterProgramming in [#8970](https://github.com/rh-hideout/pokeemerald-expansion/pull/8970) +* Fix premier ball wrong data size by @FosterProgramming in [#8979](https://github.com/rh-hideout/pokeemerald-expansion/pull/8979) +* Fixes creation of certain overworld sprites in object_event_pic_tables_followers.h by @ChrispyChris27 in [#9065](https://github.com/rh-hideout/pokeemerald-expansion/pull/9065) + +## New Contributors +* @ostomachion made their first contribution in [#8904](https://github.com/rh-hideout/pokeemerald-expansion/pull/8904) +* @ChrispyChris27 made their first contribution in [#9065](https://github.com/rh-hideout/pokeemerald-expansion/pull/9065) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.14.2...expansion/1.14.3 + + + + diff --git a/include/battle_anim_internal.h b/include/battle_anim_internal.h new file mode 100644 index 0000000000..0518b9c728 --- /dev/null +++ b/include/battle_anim_internal.h @@ -0,0 +1,18 @@ +#ifndef GUARD_BATTLE_ANIM_INTERNAL_H +#define GUARD_BATTLE_ANIM_INTERNAL_H + +/* CMD_ARGS provides a way to locally name the members of gBattleAnimArgs. + * + * For example: + * { + * CMD_ARGS(x, y); + * // cmd->x is gBattleAnimArgs[0] and cmd->y is gBattleAnimArgs[1] + * } */ +#if MODERN +#define CMD_ARGS(...) struct { s16 __VA_ARGS__; } *cmd = (void *)gBattleAnimArgs +#else +#define CMD_ARGS(...) struct CMD_ARGS { s16 __VA_ARGS__; } +#define cmd ((struct CMD_ARGS *)gBattleAnimArgs) +#endif + +#endif diff --git a/include/battle_util.h b/include/battle_util.h index bb81da042b..edd303f6df 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -383,6 +383,7 @@ bool32 CanBeFrozen(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef); bool32 CanGetFrostbite(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef); bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef, enum MoveEffect secondaryMoveEffect, enum FunctionCallOption option); bool32 CanBeConfused(u32 battler); +bool32 IsSafeguardProtected(u32 battlerAtk, u32 battlerDef, u32 abilityAtk); u32 GetBattlerAffectionHearts(u32 battler); void TryToRevertMimicryAndFlags(void); bool32 BattleArenaTurnEnd(void); diff --git a/include/config/battle.h b/include/config/battle.h index 9d2814cb85..965174d579 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -90,6 +90,7 @@ #define B_MINIMIZE_EVASION GEN_LATEST // In Gen5+, Minimize raises evasion by 2 stages instead of 1. #define B_GROWTH_STAT_RAISE GEN_LATEST // In Gen5+, Growth raises Attack in addition to Special Attack by 1 stage each. Under the effects of the sun, it raises them by 2 stages each instead. #define B_FOCUS_ENERGY_CRIT_RATIO GEN_LATEST // In Gen3+, Focus Energy increases critical hit ratio by 2 instead of 1. +#define B_PSYCH_UP_CRIT_RATIO GEN_LATEST // In Gen6+, Psych Up also copies the target's critical hit ratio. // Other move settings #define B_INCINERATE_GEMS GEN_LATEST // In Gen6+, Incinerate can destroy Gems. @@ -171,6 +172,7 @@ #define B_ATE_MULTIPLIER GEN_LATEST // In Gen7+, -ate abilities (Aerilate, Galvanize, Normalize, Pixilate, Refrigerate) multiply damage by 1.2. Otherwise, it's 1.3, except Normalize which has no multiplier. #define B_DEFIANT_STICKY_WEB GEN_LATEST // In Gen9+, Defiant activates on Sticky Web regardless of who set it up. In Gen8, Defiant does not activate on Sticky Web set up by an ally after Court Change swaps its side. #define B_POWDER_OVERCOAT GEN_LATEST // In Gen6+, Overcoat blocks powder and spore moves from affecting the user. +#define B_INFILTRATOR_SUBSTITUTE GEN_LATEST // In Gen6+, Infiltrator bypasses Substitute when using a move, excluding Transform and Sky Drop. // Item settings #define B_CONFUSE_BERRIES_HEAL GEN_LATEST // In Gens3-6, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP. diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 6ac604798f..5a2dfb8899 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -697,4 +697,7 @@ enum SpeciesGfxChange // It's redundant with F_PAL_BATTLERS, because they're only ever used together to refer to all the battlers at once. #define F_PAL_BATTLERS_2 (1 << 7 | 1 << 8 | 1 << 9 | 1 << 10) +enum { SHAKE_BG_X, SHAKE_BG_Y, SHAKE_MON_X, SHAKE_MON_Y }; +enum { SHAKE_MON_ATTACKER, SHAKE_MON_TARGET, SHAKE_MON_BOTH }; + #endif // GUARD_CONSTANTS_BATTLE_ANIM_H diff --git a/include/constants/expansion.h b/include/constants/expansion.h index b280aefacc..83ed2a13d6 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,10 +1,10 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.14.2 +// Last version: 1.14.3 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 14 -#define EXPANSION_VERSION_PATCH 3 +#define EXPANSION_VERSION_PATCH 4 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. diff --git a/include/constants/generational_changes.h b/include/constants/generational_changes.h index ad700a6ea2..0a5331c342 100644 --- a/include/constants/generational_changes.h +++ b/include/constants/generational_changes.h @@ -4,200 +4,202 @@ /* Config definitions */ #define CONFIG_DEFINITIONS(F) \ /* Calculation settings */ \ - F(CRIT_CHANCE, critChance, (u32, GEN_COUNT - 1)) \ - F(CRIT_MULTIPLIER, critMultiplier, (u32, GEN_COUNT - 1)) \ - F(PARALYSIS_SPEED, paralysisSpeed, (u32, GEN_COUNT - 1)) \ - F(CONFUSION_SELF_DMG_CHANCE, confusionSelfDmgChance, (u32, GEN_COUNT - 1)) \ - F(MULTI_HIT_CHANCE, multiHitChance, (u32, GEN_COUNT - 1)) \ - F(WHITEOUT_MONEY, whiteoutMoney, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(LIGHT_BALL_ATTACK_BOOST, lightBallAttackBoost, (u32, GEN_COUNT - 1)) \ + F(B_CRIT_CHANCE, critChance, (u32, GEN_COUNT - 1)) \ + F(B_CRIT_MULTIPLIER, critMultiplier, (u32, GEN_COUNT - 1)) \ + F(B_PARALYSIS_SPEED, paralysisSpeed, (u32, GEN_COUNT - 1)) \ + F(B_CONFUSION_SELF_DMG_CHANCE, confusionSelfDmgChance, (u32, GEN_COUNT - 1)) \ + F(B_MULTI_HIT_CHANCE, multiHitChance, (u32, GEN_COUNT - 1)) \ + F(B_WHITEOUT_MONEY, whiteoutMoney, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_LIGHT_BALL_ATTACK_BOOST, lightBallAttackBoost, (u32, GEN_COUNT - 1)) \ /* Experience settings */ \ - F(EXP_CATCH, expCatch, (u32, GEN_COUNT - 1)) \ - F(TRAINER_EXP_MULTIPLIER, trainerExpMultiplier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SPLIT_EXP, splitExp, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SCALED_EXP, scaledExp, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(UNEVOLVED_EXP_MULTIPLIER, unevolvedExpMultiplier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(LEVEL_UP_NOTIFICATION, levelUpNotification, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_EXP_CATCH, expCatch, (u32, GEN_COUNT - 1)) \ + F(B_TRAINER_EXP_MULTIPLIER, trainerExpMultiplier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SPLIT_EXP, splitExp, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SCALED_EXP, scaledExp, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_UNEVOLVED_EXP_MULTIPLIER, unevolvedExpMultiplier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_LEVEL_UP_NOTIFICATION, levelUpNotification, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ /* Stat settings */ \ - F(BADGE_BOOST, badgeBoost, (u32, GEN_COUNT - 1)) \ - F(FRIENDSHIP_BOOST, friendshipBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(MAX_LEVEL_EV_GAINS, maxLevelEvGains, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(RECALCULATE_STATS, recalculateStats, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_BADGE_BOOST, badgeBoost, (u32, GEN_COUNT - 1)) \ + F(B_FRIENDSHIP_BOOST, friendshipBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_MAX_LEVEL_EV_GAINS, maxLevelEvGains, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_RECALCULATE_STATS, recalculateStats, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ /* Damage settings */ \ - F(BURN_DAMAGE, burnDamage, (u32, GEN_COUNT - 1)) \ - F(BURN_FACADE_DMG, burnFacadeDmg, (u32, GEN_COUNT - 1)) \ - F(BINDING_DAMAGE, bindingDamage, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(PSYWAVE_DMG, psywaveDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(PAYBACK_SWITCH_BOOST, paybackSwitchBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(HIDDEN_POWER_DMG, hiddenPowerDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(ROUGH_SKIN_DMG, roughSkinDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(KNOCK_OFF_DMG, knockOffDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SPORT_DMG_REDUCTION, sportDmgReduction, (u32, GEN_COUNT - 1)) \ - F(EXPLOSION_DEFENSE, explosionDefense, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(PARENTAL_BOND_DMG, parentalBondDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(MULTIPLE_TARGETS_DMG, multipleTargetsDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_BURN_DAMAGE, burnDamage, (u32, GEN_COUNT - 1)) \ + F(B_BURN_FACADE_DMG, burnFacadeDmg, (u32, GEN_COUNT - 1)) \ + F(B_BINDING_DAMAGE, bindingDamage, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_PSYWAVE_DMG, psywaveDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_PAYBACK_SWITCH_BOOST, paybackSwitchBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_HIDDEN_POWER_DMG, hiddenPowerDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_ROUGH_SKIN_DMG, roughSkinDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_KNOCK_OFF_DMG, knockOffDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SPORT_DMG_REDUCTION, sportDmgReduction, (u32, GEN_COUNT - 1)) \ + F(B_EXPLOSION_DEFENSE, explosionDefense, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_PARENTAL_BOND_DMG, parentalBondDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_MULTIPLE_TARGETS_DMG, multipleTargetsDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ /* Type settings */ \ - F(GHOSTS_ESCAPE, ghostsEscape, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(PARALYZE_ELECTRIC, paralyzeElectric, (u32, GEN_COUNT - 1)) \ - F(POWDER_GRASS, powderGrass, (u32, GEN_COUNT - 1)) \ - F(POWDER_OVERCOAT, powderOvercoat, (u32, GEN_COUNT - 1)) \ - F(UPDATED_TYPE_MATCHUPS, updatedTypeMatchups, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(PRANKSTER_DARK_TYPES, pranksterDarkTypes, (u32, GEN_COUNT - 1)) \ - F(SHEER_COLD_IMMUNITY, sheerColdImmunity, (u32, GEN_COUNT - 1)) \ - F(ROOST_PURE_FLYING, roostPureFlying, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(STATUS_TYPE_IMMUNITY, statusTypeImmunity, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_GHOSTS_ESCAPE, ghostsEscape, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_PARALYZE_ELECTRIC, paralyzeElectric, (u32, GEN_COUNT - 1)) \ + F(B_POWDER_GRASS, powderGrass, (u32, GEN_COUNT - 1)) \ + F(B_POWDER_OVERCOAT, powderOvercoat, (u32, GEN_COUNT - 1)) \ + F(B_UPDATED_TYPE_MATCHUPS, updatedTypeMatchups, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_PRANKSTER_DARK_TYPES, pranksterDarkTypes, (u32, GEN_COUNT - 1)) \ + F(B_SHEER_COLD_IMMUNITY, sheerColdImmunity, (u32, GEN_COUNT - 1)) \ + F(B_ROOST_PURE_FLYING, roostPureFlying, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_STATUS_TYPE_IMMUNITY, statusTypeImmunity, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ /* Turn settings */ \ - F(BINDING_TURNS, bindingTurns, (u32, GEN_COUNT - 1)) \ - F(UPROAR_TURNS, uproarTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(UPROAR_IGNORE_SOUNDPROOF, uproarIgnoreSoundproof, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(DISABLE_TURNS, disableTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(TAILWIND_TURNS, tailwindTurns, (u32, GEN_COUNT - 1)) \ - F(SLEEP_TURNS, sleepTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(TAUNT_TURNS, tauntTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SPORT_TURNS, sportTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(MEGA_EVO_TURN_ORDER, megaEvoTurnOrder, (u32, GEN_COUNT - 1)) \ - F(RECALC_TURN_AFTER_ACTIONS, recalcTurnAfterActions, (u32, GEN_COUNT - 1)) \ - F(FAINT_SWITCH_IN, faintSwitchIn, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_BINDING_TURNS, bindingTurns, (u32, GEN_COUNT - 1)) \ + F(B_UPROAR_TURNS, uproarTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_UPROAR_IGNORE_SOUNDPROOF, uproarIgnoreSoundproof, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_DISABLE_TURNS, disableTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_TAILWIND_TURNS, tailwindTurns, (u32, GEN_COUNT - 1)) \ + F(B_SLEEP_TURNS, sleepTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_TAUNT_TURNS, tauntTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SPORT_TURNS, sportTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_MEGA_EVO_TURN_ORDER, megaEvoTurnOrder, (u32, GEN_COUNT - 1)) \ + F(B_RECALC_TURN_AFTER_ACTIONS, recalcTurnAfterActions, (u32, GEN_COUNT - 1)) \ + F(B_FAINT_SWITCH_IN, faintSwitchIn, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ /* Move data settings */ \ - F(UPDATED_MOVE_DATA, updatedMoveData, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(UPDATED_MOVE_TYPES, updatedMoveTypes, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(UPDATED_MOVE_FLAGS, updatedMoveFlags, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(PHYSICAL_SPECIAL_SPLIT, physicalSpecialSplit, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(RECOIL_IF_MISS_DMG, recoilIfMissDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(KLUTZ_FLING_INTERACTION, klutzFlingInteraction, (u32, GEN_COUNT - 1)) \ - F(UPDATED_CONVERSION, updatedConversion, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(UPDATED_CONVERSION_2, updatedConversion2, (u32, GEN_COUNT - 1)) \ - F(PP_REDUCED_BY_SPITE, ppReducedBySpite, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(EXTRAPOLATED_MOVE_FLAGS, extrapolatedMoveFlags, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_UPDATED_MOVE_DATA, updatedMoveData, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_UPDATED_MOVE_TYPES, updatedMoveTypes, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_UPDATED_MOVE_FLAGS, updatedMoveFlags, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_PHYSICAL_SPECIAL_SPLIT, physicalSpecialSplit, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_RECOIL_IF_MISS_DMG, recoilIfMissDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_KLUTZ_FLING_INTERACTION, klutzFlingInteraction, (u32, GEN_COUNT - 1)) \ + F(B_UPDATED_CONVERSION, updatedConversion, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_UPDATED_CONVERSION_2, updatedConversion2, (u32, GEN_COUNT - 1)) \ + F(B_PP_REDUCED_BY_SPITE, ppReducedBySpite, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_EXTRAPOLATED_MOVE_FLAGS, extrapolatedMoveFlags, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ /* Ability data settings */ \ - F(UPDATED_ABILITY_DATA, updatedAbilityData, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_UPDATED_ABILITY_DATA, updatedAbilityData, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ /* Move accuracy settings */ \ - F(TOXIC_NEVER_MISS, toxicNeverMiss, (u32, GEN_COUNT - 1)) \ - F(MINIMIZE_DMG_ACC, minimizeDmgAcc, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(BLIZZARD_HAIL, blizzardHail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SHEER_COLD_ACC, sheerColdAcc, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_TOXIC_NEVER_MISS, toxicNeverMiss, (u32, GEN_COUNT - 1)) \ + F(B_MINIMIZE_DMG_ACC, minimizeDmgAcc, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_BLIZZARD_HAIL, blizzardHail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SHEER_COLD_ACC, sheerColdAcc, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ /* Move stat change settings */ \ - F(FELL_STINGER_STAT_RAISE, fellStingerStatRaise, (u32, GEN_COUNT - 1)) \ - F(KINGS_SHIELD_LOWER_ATK, kingsShieldLowerAtk, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SPEED_BUFFING_RAPID_SPIN, speedBuffingRapidSpin, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(CHARGE_SPDEF_RAISE, chargeSpDefRaise, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(MINIMIZE_EVASION, minimizeEvasion, (u32, GEN_COUNT - 1)) \ - F(GROWTH_STAT_RAISE, growthStatRaise, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(FOCUS_ENERGY_CRIT_RATIO, focusEnergyCritRatio, (u32, GEN_COUNT - 1)) \ + F(B_FELL_STINGER_STAT_RAISE, fellStingerStatRaise, (u32, GEN_COUNT - 1)) \ + F(B_KINGS_SHIELD_LOWER_ATK, kingsShieldLowerAtk, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SPEED_BUFFING_RAPID_SPIN, speedBuffingRapidSpin, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_CHARGE_SPDEF_RAISE, chargeSpDefRaise, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_MINIMIZE_EVASION, minimizeEvasion, (u32, GEN_COUNT - 1)) \ + F(B_GROWTH_STAT_RAISE, growthStatRaise, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_FOCUS_ENERGY_CRIT_RATIO, focusEnergyCritRatio, (u32, GEN_COUNT - 1)) \ + F(B_PSYCH_UP_CRIT_RATIO, psychUpCritRatio, (u32, GEN_COUNT - 1)) \ /* Other move settings */ \ - F(INCINERATE_GEMS, incinerateGems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(CAN_SPITE_FAIL, canSpiteFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(CRASH_IF_TARGET_IMMUNE, crashIfTargetImmune, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(MEMENTO_FAIL, mementoFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(PARTING_SHOT_SWITCH, partingShotSwitch, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(GLARE_GHOST, glareGhost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SKILL_SWAP, skillSwap, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(BRICK_BREAK, brickBreak, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(WISH_HP_SOURCE, wishHpSource, (u32, GEN_COUNT - 1)) \ - F(RAMPAGE_CANCELLING, rampageCancelling, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(HEAL_BLOCKING, healBlocking, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(ROOTED_GROUNDING, rootedGrounding, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(METRONOME_MOVES, metronomeMoves, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(TELEPORT_BEHAVIOR, teleportBehavior, (u32, GEN_COUNT - 1)) \ - F(BEAT_UP, beatUp, (u32, GEN_COUNT - 1)) \ - F(DARK_VOID_FAIL, darkVoidFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(BURN_HIT_THAW, burnHitThaw, (u32, GEN_COUNT - 1)) \ - F(HEALING_WISH_SWITCH, healingWishSwitch, (u32, GEN_COUNT - 1)) \ - F(DEFOG_EFFECT_CLEARING, defogEffectClearing, (u32, GEN_COUNT - 1)) \ - F(STOCKPILE_RAISES_DEFS, stockpileRaisesDefs, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(TRANSFORM_SHINY, transformShiny, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(TRANSFORM_FORM_CHANGES, transformFormChanges, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(WIDE_GUARD, wideGuard, (u32, GEN_COUNT - 1)) \ - F(QUICK_GUARD, quickGuard, (u32, GEN_COUNT - 1)) \ - F(IMPRISON, imprison, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(ALLY_SWITCH_FAIL_CHANCE, allySwitchFailChance, (u32, GEN_COUNT - 1)) \ - F(SKETCH_BANS, sketchBans, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(KNOCK_OFF_REMOVAL, knockOffRemoval, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(HEAL_BELL_SOUNDPROOF, healBellSoundproof, (u32, GEN_COUNT - 1)) \ - F(CHARGE, charge, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(POWDER_RAIN, powderRain, (u32, GEN_COUNT - 1)) \ - F(AFTER_YOU_TURN_ORDER, afterYouTurnOrder, (u32, GEN_COUNT - 1)) \ - F(QUASH_TURN_ORDER, quashTurnOrder, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(DESTINY_BOND_FAIL, destinyBondFail, (u32, GEN_COUNT - 1)) \ - F(FORESIGHT_FAIL, foresightFail, (u32, GEN_COUNT - 1)) \ - F(MIRACLE_EYE_FAIL, miracleEyeFail, (u32, GEN_COUNT - 1)) \ - F(PURSUIT_TARGET, pursuitTarget, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SKIP_RECHARGE, skipRecharge, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(ENCORE_TARGET, encoreTarget, (u32, GEN_COUNT - 1)) \ - F(TIME_OF_DAY_HEALING_MOVES, timeOfDayHealingMoves, (u32, GEN_COUNT - 1)) \ - F(DREAM_EATER_LIQUID_OOZE, dreamEaterLiquidOoze, (u32, GEN_COUNT - 1)) \ + F(B_INCINERATE_GEMS, incinerateGems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_CAN_SPITE_FAIL, canSpiteFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_CRASH_IF_TARGET_IMMUNE, crashIfTargetImmune, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_MEMENTO_FAIL, mementoFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_PARTING_SHOT_SWITCH, partingShotSwitch, (u32, GEN_COUNT - 1)) \ + F(B_GLARE_GHOST, glareGhost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SKILL_SWAP, skillSwap, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_BRICK_BREAK, brickBreak, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_WISH_HP_SOURCE, wishHpSource, (u32, GEN_COUNT - 1)) \ + F(B_RAMPAGE_CANCELLING, rampageCancelling, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_HEAL_BLOCKING, healBlocking, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_ROOTED_GROUNDING, rootedGrounding, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_METRONOME_MOVES, metronomeMoves, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_TELEPORT_BEHAVIOR, teleportBehavior, (u32, GEN_COUNT - 1)) \ + F(B_BEAT_UP, beatUp, (u32, GEN_COUNT - 1)) \ + F(B_DARK_VOID_FAIL, darkVoidFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_BURN_HIT_THAW, burnHitThaw, (u32, GEN_COUNT - 1)) \ + F(B_HEALING_WISH_SWITCH, healingWishSwitch, (u32, GEN_COUNT - 1)) \ + F(B_DEFOG_EFFECT_CLEARING, defogEffectClearing, (u32, GEN_COUNT - 1)) \ + F(B_STOCKPILE_RAISES_DEFS, stockpileRaisesDefs, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_TRANSFORM_SHINY, transformShiny, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_TRANSFORM_FORM_CHANGES, transformFormChanges, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_WIDE_GUARD, wideGuard, (u32, GEN_COUNT - 1)) \ + F(B_QUICK_GUARD, quickGuard, (u32, GEN_COUNT - 1)) \ + F(B_IMPRISON, imprison, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_ALLY_SWITCH_FAIL_CHANCE, allySwitchFailChance, (u32, GEN_COUNT - 1)) \ + F(B_SKETCH_BANS, sketchBans, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_KNOCK_OFF_REMOVAL, knockOffRemoval, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_HEAL_BELL_SOUNDPROOF, healBellSoundproof, (u32, GEN_COUNT - 1)) \ + F(B_CHARGE, charge, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_POWDER_RAIN, powderRain, (u32, GEN_COUNT - 1)) \ + F(B_AFTER_YOU_TURN_ORDER, afterYouTurnOrder, (u32, GEN_COUNT - 1)) \ + F(B_QUASH_TURN_ORDER, quashTurnOrder, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_DESTINY_BOND_FAIL, destinyBondFail, (u32, GEN_COUNT - 1)) \ + F(B_FORESIGHT_FAIL, foresightFail, (u32, GEN_COUNT - 1)) \ + F(B_MIRACLE_EYE_FAIL, miracleEyeFail, (u32, GEN_COUNT - 1)) \ + F(B_PURSUIT_TARGET, pursuitTarget, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SKIP_RECHARGE, skipRecharge, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_ENCORE_TARGET, encoreTarget, (u32, GEN_COUNT - 1)) \ + F(B_TIME_OF_DAY_HEALING_MOVES, timeOfDayHealingMoves, (u32, GEN_COUNT - 1)) \ + F(B_DREAM_EATER_LIQUID_OOZE, dreamEaterLiquidOoze, (u32, GEN_COUNT - 1)) \ /* Ability settings */ \ - F(GALE_WINGS, galeWings, (u32, GEN_COUNT - 1)) \ - F(STANCE_CHANGE_FAIL, stanceChangeFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SHADOW_TAG_ESCAPE, shadowTagEscape, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(MOODY_ACC_EVASION, moodyAccEvasion, (u32, GEN_COUNT - 1)) \ - F(FLASH_FIRE_FROZEN, flashFireFrozen, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SYNCHRONIZE_TOXIC, synchronizeToxic, (u32, GEN_COUNT - 1)) \ - F(UPDATED_INTIMIDATE, updatedIntimidate, (u32, GEN_COUNT - 1)) \ - F(OBLIVIOUS_TAUNT, obliviousTaunt, (u32, GEN_COUNT - 1)) \ - F(STURDY, sturdy, (u32, GEN_COUNT - 1)) \ - F(PLUS_MINUS_INTERACTION, plusMinusInteraction, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(WEATHER_FORMS, weatherForms, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SYMBIOSIS_GEMS, symbiosisGems, (u32, GEN_COUNT - 1)) \ - F(ABSORBING_ABILITY_STRING, absorbingAbilityString, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(REDIRECT_ABILITY_IMMUNITY, redirectAbilityImmunity, (u32, GEN_COUNT - 1)) \ - F(REDIRECT_ABILITY_ALLIES, redirectAbilityAllies, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(LEAF_GUARD_PREVENTS_REST, leafGuardPreventsRest, (u32, GEN_COUNT - 1)) \ - F(TRANSISTOR_BOOST, transistorBoost, (u32, GEN_COUNT - 1)) \ - F(ILLUMINATE_EFFECT, illuminateEffect, (u32, GEN_COUNT - 1)) \ - F(WEAK_ARMOR_SPEED, weakArmorSpeed, (u32, GEN_COUNT - 1)) \ - F(PROTEAN_LIBERO, proteanLibero, (u32, GEN_COUNT - 1)) \ - F(INTREPID_SWORD, intrepidSword, (u32, GEN_COUNT - 1)) \ - F(DAUNTLESS_SHIELD, dauntlessShield, (u32, GEN_COUNT - 1)) \ - F(DISGUISE_HP_LOSS, disguiseHpLoss, (u32, GEN_COUNT - 1)) \ - F(ABILITY_TRIGGER_CHANCE, abilityTriggerChance, (u32, GEN_COUNT - 1)) \ - F(PICKUP_WILD, pickupWild, (u32, GEN_COUNT - 1)) \ - F(MAGIC_GUARD, magicGuard, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(BATTLE_BOND, battleBond, (u32, GEN_COUNT - 1)) \ - F(ATE_MULTIPLIER, ateMultiplier, (u32, GEN_COUNT - 1)) \ - F(DEFIANT_STICKY_WEB, defiantStickyWeb, (u32, GEN_COUNT - 1)) \ + F(B_GALE_WINGS, galeWings, (u32, GEN_COUNT - 1)) \ + F(B_STANCE_CHANGE_FAIL, stanceChangeFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SHADOW_TAG_ESCAPE, shadowTagEscape, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_MOODY_ACC_EVASION, moodyAccEvasion, (u32, GEN_COUNT - 1)) \ + F(B_FLASH_FIRE_FROZEN, flashFireFrozen, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SYNCHRONIZE_TOXIC, synchronizeToxic, (u32, GEN_COUNT - 1)) \ + F(B_UPDATED_INTIMIDATE, updatedIntimidate, (u32, GEN_COUNT - 1)) \ + F(B_OBLIVIOUS_TAUNT, obliviousTaunt, (u32, GEN_COUNT - 1)) \ + F(B_STURDY, sturdy, (u32, GEN_COUNT - 1)) \ + F(B_PLUS_MINUS_INTERACTION, plusMinusInteraction, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_WEATHER_FORMS, weatherForms, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SYMBIOSIS_GEMS, symbiosisGems, (u32, GEN_COUNT - 1)) \ + F(B_ABSORBING_ABILITY_STRING, absorbingAbilityString, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_REDIRECT_ABILITY_IMMUNITY, redirectAbilityImmunity, (u32, GEN_COUNT - 1)) \ + F(B_REDIRECT_ABILITY_ALLIES, redirectAbilityAllies, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_LEAF_GUARD_PREVENTS_REST, leafGuardPreventsRest, (u32, GEN_COUNT - 1)) \ + F(B_TRANSISTOR_BOOST, transistorBoost, (u32, GEN_COUNT - 1)) \ + F(B_ILLUMINATE_EFFECT, illuminateEffect, (u32, GEN_COUNT - 1)) \ + F(B_WEAK_ARMOR_SPEED, weakArmorSpeed, (u32, GEN_COUNT - 1)) \ + F(B_PROTEAN_LIBERO, proteanLibero, (u32, GEN_COUNT - 1)) \ + F(B_INTREPID_SWORD, intrepidSword, (u32, GEN_COUNT - 1)) \ + F(B_DAUNTLESS_SHIELD, dauntlessShield, (u32, GEN_COUNT - 1)) \ + F(B_DISGUISE_HP_LOSS, disguiseHpLoss, (u32, GEN_COUNT - 1)) \ + F(B_ABILITY_TRIGGER_CHANCE, abilityTriggerChance, (u32, GEN_COUNT - 1)) \ + F(B_PICKUP_WILD, pickupWild, (u32, GEN_COUNT - 1)) \ + F(B_MAGIC_GUARD, magicGuard, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_BATTLE_BOND, battleBond, (u32, GEN_COUNT - 1)) \ + F(B_ATE_MULTIPLIER, ateMultiplier, (u32, GEN_COUNT - 1)) \ + F(B_DEFIANT_STICKY_WEB, defiantStickyWeb, (u32, GEN_COUNT - 1)) \ + F(B_INFILTRATOR_SUBSTITUTE, infiltratorSubstitute, (u32, GEN_COUNT - 1)) \ /* Item settings */ \ - F(CONFUSE_BERRIES_HEAL, confuseBerriesHeal, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(X_ITEMS_BUFF, xItemsBuff, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(MENTAL_HERB, mentalHerb, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(TRAINERS_KNOCK_OFF_ITEMS, trainersKnockOffItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(RETURN_STOLEN_NPC_ITEMS, returnStolenNpcItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(STEAL_WILD_ITEMS, stealWildItems, (u32, GEN_COUNT - 1)) \ - F(RESTORE_HELD_BATTLE_ITEMS, restoreHeldBattleItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SOUL_DEW_BOOST, soulDewBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(NET_BALL_MODIFIER, netBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(DIVE_BALL_MODIFIER, diveBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(NEST_BALL_MODIFIER, nestBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(REPEAT_BALL_MODIFIER, repeatBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(TIMER_BALL_MODIFIER, timerBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(DUSK_BALL_MODIFIER, duskBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(QUICK_BALL_MODIFIER, quickBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(LURE_BALL_MODIFIER, lureBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(HEAVY_BALL_MODIFIER, heavyBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(DREAM_BALL_MODIFIER, dreamBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SPORT_BALL_MODIFIER, sportBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SAFARI_BALL_MODIFIER, safariBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(FRIEND_BALL_MODIFIER, friendBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SERENE_GRACE_BOOST, sereneGraceBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(IRON_BALL, ironBall, (u32, GEN_COUNT - 1)) \ + F(B_CONFUSE_BERRIES_HEAL, confuseBerriesHeal, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_X_ITEMS_BUFF, xItemsBuff, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_MENTAL_HERB, mentalHerb, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_TRAINERS_KNOCK_OFF_ITEMS, trainersKnockOffItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_RETURN_STOLEN_NPC_ITEMS, returnStolenNpcItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_STEAL_WILD_ITEMS, stealWildItems, (u32, GEN_COUNT - 1)) \ + F(B_RESTORE_HELD_BATTLE_ITEMS, restoreHeldBattleItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SOUL_DEW_BOOST, soulDewBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_NET_BALL_MODIFIER, netBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_DIVE_BALL_MODIFIER, diveBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_NEST_BALL_MODIFIER, nestBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_REPEAT_BALL_MODIFIER, repeatBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_TIMER_BALL_MODIFIER, timerBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_DUSK_BALL_MODIFIER, duskBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_QUICK_BALL_MODIFIER, quickBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_LURE_BALL_MODIFIER, lureBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_HEAVY_BALL_MODIFIER, heavyBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_DREAM_BALL_MODIFIER, dreamBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SPORT_BALL_MODIFIER, sportBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SAFARI_BALL_MODIFIER, safariBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_FRIEND_BALL_MODIFIER, friendBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SERENE_GRACE_BOOST, sereneGraceBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_IRON_BALL, ironBall, (u32, GEN_COUNT - 1)) \ /* Weather settings */ \ - F(ABILITY_WEATHER, abilityWeather, (u32, GEN_COUNT - 1)) \ - F(SANDSTORM_SPDEF_BOOST, sandstormSpDefBoost, (u32, GEN_COUNT - 1)) \ - F(OVERWORLD_FOG, overworldFog, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(OVERWORLD_SNOW, overworldSnow, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SNOW_WARNING, snowWarning, (u32, GEN_COUNT - 1)) \ - F(PREFERRED_ICE_WEATHER, preferredIceWeather, (u32, B_ICE_WEATHER_SNOW)) /* TODO: use in tests */ \ + F(B_ABILITY_WEATHER, abilityWeather, (u32, GEN_COUNT - 1)) \ + F(B_SANDSTORM_SPDEF_BOOST, sandstormSpDefBoost, (u32, GEN_COUNT - 1)) \ + F(B_OVERWORLD_FOG, overworldFog, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_OVERWORLD_SNOW, overworldSnow, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SNOW_WARNING, snowWarning, (u32, GEN_COUNT - 1)) \ + F(B_PREFERRED_ICE_WEATHER, preferredIceWeather, (u32, B_ICE_WEATHER_SNOW)) /* TODO: use in tests */ \ /* Terrain settings */ \ - F(TERRAIN_TYPE_BOOST, terrainTypeBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SECRET_POWER_EFFECT, secretPowerEffect, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(SECRET_POWER_ANIMATION, secretPowerAnimation, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(NATURE_POWER_MOVES, naturePowerMoves, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(CAMOUFLAGE_TYPES, camouflageTypes, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_TERRAIN_TYPE_BOOST, terrainTypeBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SECRET_POWER_EFFECT, secretPowerEffect, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_SECRET_POWER_ANIMATION, secretPowerAnimation, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_NATURE_POWER_MOVES, naturePowerMoves, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_CAMOUFLAGE_TYPES, camouflageTypes, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ /* Other settings */ \ - F(WILD_NATURAL_ENEMIES, wildNaturalEnemies, (u32, TRUE)) /* TODO: use in tests */ \ - F(AFFECTION_MECHANICS, affectionMechanics, (u32, TRUE)) /* TODO: use in tests */ \ - F(OBEDIENCE_MECHANICS, obedienceMechanics, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ - F(USE_FROSTBITE, useFrostbite, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_WILD_NATURAL_ENEMIES, wildNaturalEnemies, (u32, TRUE)) /* TODO: use in tests */ \ + F(B_AFFECTION_MECHANICS, affectionMechanics, (u32, TRUE)) /* TODO: use in tests */ \ + F(B_OBEDIENCE_MECHANICS, obedienceMechanics, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(B_USE_FROSTBITE, useFrostbite, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ #define GET_CONFIG_MAXIMUM(_typeMaxValue, ...) INVOKE_WITH_B(GET_CONFIG_MAXIMUM_, _typeMaxValue) diff --git a/include/generational_changes.h b/include/generational_changes.h index 2e6767ca84..fc1ed0132f 100644 --- a/include/generational_changes.h +++ b/include/generational_changes.h @@ -16,7 +16,9 @@ struct GenChanges // ... }; -u32 GetConfig(enum ConfigTag configTag); +#define GetConfig(name) GetConfigInternal(CONFIG_##name) + +u32 GetConfigInternal(enum ConfigTag configTag); void SetConfig(enum ConfigTag configTag, u32 value); #if TESTING diff --git a/include/random.h b/include/random.h index 84318bedc0..df3d1c20be 100644 --- a/include/random.h +++ b/include/random.h @@ -167,6 +167,7 @@ enum RandomTag RNG_QUICK_DRAW, RNG_QUICK_CLAW, RNG_TRACE, + RNG_FOREWARN, RNG_FICKLE_BEAM, RNG_AI_ABILITY, RNG_AI_SWITCH_HASBADODDS, diff --git a/include/test/battle.h b/include/test/battle.h index 06072a35c4..1b8e4e42af 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -309,7 +309,7 @@ * of `enum ConfigTag` * Example: * GIVEN { - * WITH_CONFIG(CONFIG_GALE_WINGS, GEN_6); + * WITH_CONFIG(B_GALE_WINGS, GEN_6); * } * The `value` may be inferred from a local variable, e.g. set by * PARAMETRIZE. @@ -970,7 +970,7 @@ struct moveWithPP { #define AI_LOG AILogScores(__LINE__) #define FLAG_SET(flagId) SetFlagForTest(__LINE__, flagId) -#define WITH_CONFIG(configTag, value) TestSetConfig(__LINE__, configTag, value) +#define WITH_CONFIG(configTag, value) TestSetConfig(__LINE__, CONFIG_##configTag, value) #define PLAYER(species) for (OpenPokemon(__LINE__, B_POSITION_PLAYER_LEFT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) #define OPPONENT(species) for (OpenPokemon(__LINE__, B_POSITION_OPPONENT_LEFT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index e0490b6712..68cf333b57 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1267,7 +1267,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } // def partner ability checks // gen7+ dark type mons immune to priority->elevated moves from prankster - if (GetConfig(CONFIG_PRANKSTER_DARK_TYPES) >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) + if (GetConfig(B_PRANKSTER_DARK_TYPES) >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) && aiData->abilities[battlerAtk] == ABILITY_PRANKSTER && IsBattleMoveStatus(move) && !(moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER))) RETURN_SCORE_MINUS(10); @@ -1729,7 +1729,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_SHEER_COLD: - if (GetConfig(CONFIG_SHEER_COLD_IMMUNITY) >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) + if (GetConfig(B_SHEER_COLD_IMMUNITY) >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) RETURN_SCORE_MINUS(20); // fallthrough case EFFECT_OHKO: @@ -3396,7 +3396,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_VOLT_ABSORB: if (moveType == TYPE_ELECTRIC) { - if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) < GEN_5 && atkPartnerAbility == ABILITY_LIGHTNING_ROD) + if (GetConfig(B_REDIRECT_ABILITY_IMMUNITY) < GEN_5 && atkPartnerAbility == ABILITY_LIGHTNING_ROD) { RETURN_SCORE_MINUS(10); } @@ -3442,7 +3442,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_STORM_DRAIN: if (moveType == TYPE_WATER) { - if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) < GEN_5 && atkPartnerAbility == ABILITY_STORM_DRAIN) + if (GetConfig(B_REDIRECT_ABILITY_IMMUNITY) < GEN_5 && atkPartnerAbility == ABILITY_STORM_DRAIN) { RETURN_SCORE_MINUS(10); } @@ -5395,7 +5395,7 @@ static s32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move, stru case EFFECT_ION_DELUGE: if ((aiData->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE - || (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) + || (GetConfig(B_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) && predictedType == TYPE_NORMAL) ADJUST_SCORE(DECENT_EFFECT); break; @@ -5455,7 +5455,7 @@ static s32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move, stru if (predictedMove != MOVE_NONE && (aiData->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE - || (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD))) + || (GetConfig(B_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD))) { ADJUST_SCORE(DECENT_EFFECT); } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index defc1c3c89..f5d105d04c 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -298,7 +298,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) // Check if mon gets one shot if (maxDamageTaken > gBattleMons[battler].hp - && !(gItemsInfo[gBattleMons[battler].item].holdEffect == HOLD_EFFECT_FOCUS_SASH || (!IsMoldBreakerTypeAbility(opposingBattler, gAiLogicData->abilities[opposingBattler]) && GetConfig(CONFIG_STURDY) >= GEN_5 && aiAbility == ABILITY_STURDY))) + && !(gItemsInfo[gBattleMons[battler].item].holdEffect == HOLD_EFFECT_FOCUS_SASH || (!IsMoldBreakerTypeAbility(opposingBattler, gAiLogicData->abilities[opposingBattler]) && GetConfig(B_STURDY) >= GEN_5 && aiAbility == ABILITY_STURDY))) { getsOneShot = TRUE; } @@ -534,14 +534,14 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_WATER_ABSORB; absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_DRY_SKIN; - if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5) + if (GetConfig(B_REDIRECT_ABILITY_IMMUNITY) >= GEN_5) absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_STORM_DRAIN; } if (incomingType == TYPE_ELECTRIC || (isOpposingBattlerChargingOrInvulnerable && incomingType == TYPE_ELECTRIC)) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_VOLT_ABSORB; absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_MOTOR_DRIVE; - if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5) + if (GetConfig(B_REDIRECT_ABILITY_IMMUNITY) >= GEN_5) absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_LIGHTNING_ROD; } if (incomingType == TYPE_GRASS || (isOpposingBattlerChargingOrInvulnerable && incomingType == TYPE_GRASS)) @@ -567,7 +567,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) } if (IsPowderMove(incomingMove) || (isOpposingBattlerChargingOrInvulnerable && IsPowderMove(incomingMove))) { - if (GetConfig(CONFIG_POWDER_OVERCOAT) >= GEN_6) + if (GetConfig(B_POWDER_OVERCOAT) >= GEN_6) absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_OVERCOAT; } if (numAbsorbingAbilities == 0) @@ -720,7 +720,7 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) && gAiLogicData->abilities[opposingBattler] != ABILITY_UNAWARE && gAiLogicData->abilities[opposingBattler] != ABILITY_KEEN_EYE && gAiLogicData->abilities[opposingBattler] != ABILITY_MINDS_EYE - && (GetConfig(CONFIG_ILLUMINATE_EFFECT) >= GEN_9 && gAiLogicData->abilities[opposingBattler] != ABILITY_ILLUMINATE) + && (GetConfig(B_ILLUMINATE_EFFECT) >= GEN_9 && gAiLogicData->abilities[opposingBattler] != ABILITY_ILLUMINATE) && !gBattleMons[battler].volatiles.foresight && !gBattleMons[battler].volatiles.miracleEye) switchMon = FALSE; @@ -1763,7 +1763,7 @@ static u32 GetSwitchinStatusDamage(u32 battler) { if (status & STATUS1_BURN) { - if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) + if (GetConfig(B_BURN_DAMAGE) >= GEN_7 || GetConfig(B_BURN_DAMAGE) == GEN_1) statusDamage = maxHP / 16; else statusDamage = maxHP / 8; @@ -1774,7 +1774,7 @@ static u32 GetSwitchinStatusDamage(u32 battler) } else if (status & STATUS1_FROSTBITE) { - if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) + if (GetConfig(B_BURN_DAMAGE) >= GEN_7 || GetConfig(B_BURN_DAMAGE) == GEN_1) statusDamage = maxHP / 16; else statusDamage = maxHP / 8; @@ -1858,7 +1858,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) currentHP = currentHP - damageTaken; // One shot prevention effects - if (damageTaken >= maxHP && startingHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && GetConfig(CONFIG_STURDY) >= GEN_5 && ability == ABILITY_STURDY)) && hitsToKO < 1) + if (damageTaken >= maxHP && startingHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && GetConfig(B_STURDY) >= GEN_5 && ability == ABILITY_STURDY)) && hitsToKO < 1) currentHP = 1; // If mon is still alive, apply weather impact first, as it might KO the mon before it can heal with its item (order is weather -> item -> status) @@ -2050,7 +2050,7 @@ static s32 GetMaxPriorityDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposi static bool32 CanAbilityTrapOpponent(enum Ability ability, u32 opponent) { - if ((GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(opponent, TYPE_GHOST))) + if ((GetConfig(B_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(opponent, TYPE_GHOST))) return FALSE; else if (ability == ABILITY_SHADOW_TAG) { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 70683fc420..c607450315 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -474,7 +474,7 @@ bool32 AI_CanBattlerEscape(u32 battler) { enum HoldEffect holdEffect = gAiLogicData->holdEffects[battler]; - if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + if (GetConfig(B_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return TRUE; if (holdEffect == HOLD_EFFECT_SHED_SHELL) return TRUE; @@ -818,7 +818,7 @@ static inline void CalcDynamicMoveDamage(struct DamageContext *ctx, u16 *medianD median = maximum = minimum = max(0, gBattleMons[ctx->battlerDef].hp - gBattleMons[ctx->battlerAtk].hp); break; case EFFECT_BEAT_UP: - if (GetConfig(CONFIG_BEAT_UP) >= GEN_5) + if (GetConfig(B_BEAT_UP) >= GEN_5) { u32 partyCount = CalculatePartyCount(GetBattlerParty(ctx->battlerAtk)); u32 i; @@ -873,7 +873,7 @@ static inline bool32 ShouldCalcCritDamage(u32 battlerAtk, u32 battlerDef, u32 mo s32 critChanceIndex = 0; // Get crit chance - if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) + if (GetConfig(B_CRIT_CHANCE) == GEN_1) critChanceIndex = CalcCritChanceStageGen1(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); else critChanceIndex = CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); @@ -882,11 +882,11 @@ static inline bool32 ShouldCalcCritDamage(u32 battlerAtk, u32 battlerDef, u32 mo return TRUE; if (critChanceIndex >= RISKY_AI_CRIT_STAGE_THRESHOLD // Not guaranteed but above Risky threshold && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_RISKY) - && GetConfig(CONFIG_CRIT_CHANCE) != GEN_1) + && GetConfig(B_CRIT_CHANCE) != GEN_1) return TRUE; if (critChanceIndex >= RISKY_AI_CRIT_THRESHOLD_GEN_1 // Not guaranteed but above Risky threshold && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_RISKY) - && GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) + && GetConfig(B_CRIT_CHANCE) == GEN_1) return TRUE; return FALSE; } @@ -1476,7 +1476,7 @@ bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) if (!DoesBattlerIgnoreAbilityChecks(battler, gAiLogicData->abilities[battler], move)) { - if (GetConfig(CONFIG_STURDY) >= GEN_5 && gAiLogicData->abilities[battlerTarget] == ABILITY_STURDY) + if (GetConfig(B_STURDY) >= GEN_5 && gAiLogicData->abilities[battlerTarget] == ABILITY_STURDY) return TRUE; if (IsMimikyuDisguised(battlerTarget)) return TRUE; @@ -1830,7 +1830,7 @@ u32 AI_GetSwitchinWeather(struct BattlePokemon battleMon) case ABILITY_SAND_STREAM: return B_WEATHER_SANDSTORM; case ABILITY_SNOW_WARNING: - return GetConfig(CONFIG_SNOW_WARNING) >= GEN_9 ? B_WEATHER_SNOW : B_WEATHER_HAIL; + return GetConfig(B_SNOW_WARNING) >= GEN_9 ? B_WEATHER_SNOW : B_WEATHER_HAIL; default: return gBattleWeather; } @@ -1931,7 +1931,7 @@ bool32 IsHazardClearingMove(u32 move) case EFFECT_TIDY_UP: return TRUE; case EFFECT_DEFOG: - if (GetConfig(CONFIG_DEFOG_EFFECT_CLEARING) >= GEN_6) + if (GetConfig(B_DEFOG_EFFECT_CLEARING) >= GEN_6) return TRUE; break; } @@ -2198,7 +2198,7 @@ bool32 CanLowerStat(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData, if (stat == STAT_DEF) return FALSE; case ABILITY_ILLUMINATE: - if (GetConfig(CONFIG_ILLUMINATE_EFFECT) < GEN_9) + if (GetConfig(B_ILLUMINATE_EFFECT) < GEN_9) break; case ABILITY_KEEN_EYE: case ABILITY_MINDS_EYE: @@ -2938,7 +2938,7 @@ bool32 IsSwitchOutEffect(enum BattleMoveEffects effect) switch (effect) { case EFFECT_TELEPORT: - if (GetConfig(CONFIG_TELEPORT_BEHAVIOR) >= GEN_8) + if (GetConfig(B_TELEPORT_BEHAVIOR) >= GEN_8) return TRUE; case EFFECT_HIT_ESCAPE: case EFFECT_PARTING_SHOT: @@ -3365,7 +3365,7 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, enum Ability defAbility if (!IsBattleMoveStatus(move) && ((gAiLogicData->shouldSwitch & (1u << battlerAtk)) || (AI_BattlerAtMaxHp(battlerDef) && (gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH - || (GetConfig(CONFIG_STURDY) >= GEN_5 && defAbility == ABILITY_STURDY) + || (GetConfig(B_STURDY) >= GEN_5 && defAbility == ABILITY_STURDY) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD)))) return SHOULD_PIVOT; // pivot to break sash/sturdy/multiscale @@ -3373,7 +3373,7 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, enum Ability defAbility else if (!hasStatBoost) { if (!IsBattleMoveStatus(move) && (AI_BattlerAtMaxHp(battlerDef) && (gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH - || (GetConfig(CONFIG_STURDY) >= GEN_5 && defAbility == ABILITY_STURDY) + || (GetConfig(B_STURDY) >= GEN_5 && defAbility == ABILITY_STURDY) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD))) return SHOULD_PIVOT; // pivot to break sash/sturdy/multiscale @@ -3829,24 +3829,21 @@ bool32 HasChoiceEffect(u32 battler) } } -static u32 FindMoveUsedXTurnsAgo(u32 battlerId, u32 x) -{ - s32 i, index = gBattleHistory->moveHistoryIndex[battlerId]; - for (i = 0; i < x; i++) - { - if (--index < 0) - index = AI_MOVE_HISTORY_COUNT - 1; - } - return gBattleHistory->moveHistory[battlerId][index]; -} - bool32 IsWakeupTurn(u32 battler) { - // Check if rest was used 2 turns ago - if ((gBattleMons[battler].status1 & STATUS1_SLEEP) == 1 && GetMoveEffect(FindMoveUsedXTurnsAgo(battler, 2)) == EFFECT_REST) - return TRUE; - else // no way to know + u32 sleepTurns = gBattleMons[battler].status1 & STATUS1_SLEEP; + u32 toSub; + + if (sleepTurns == 0) return FALSE; + + // Early Bird reduces the sleep timer twice as fast. + if (gAiLogicData->abilities[battler] == ABILITY_EARLY_BIRD) + toSub = 2; + else + toSub = 1; + + return sleepTurns <= toSub; } bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) @@ -3862,7 +3859,7 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) battlerOnField1 = gBattlerPartyIndexes[battlerId]; battlerOnField2 = gBattlerPartyIndexes[GetPartnerBattler(battlerId)]; // Check partner's status - if ((GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + if ((GetConfig(B_HEAL_BELL_SOUNDPROOF) == GEN_5 || gAiLogicData->abilities[BATTLE_PARTNER(battlerId)] != ABILITY_SOUNDPROOF || !checkSoundproof) && GetMonData(&party[battlerOnField2], MON_DATA_STATUS) != STATUS1_NONE @@ -3876,8 +3873,8 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) } // Check attacker's status - if ((GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 - || GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 + if ((GetConfig(B_HEAL_BELL_SOUNDPROOF) == GEN_5 + || GetConfig(B_HEAL_BELL_SOUNDPROOF) >= GEN_8 || gAiLogicData->abilities[battlerId] != ABILITY_SOUNDPROOF || !checkSoundproof) && GetMonData(&party[battlerOnField1], MON_DATA_STATUS) != STATUS1_NONE && ShouldCureStatus(battlerId, battlerId, gAiLogicData)) @@ -3888,7 +3885,7 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) { if (i == battlerOnField1 || i == battlerOnField2) continue; - if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) < GEN_5 + if (GetConfig(B_HEAL_BELL_SOUNDPROOF) < GEN_5 && checkSoundproof && GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF) continue; @@ -5783,7 +5780,7 @@ bool32 ShouldTriggerAbility(u32 battlerAtk, u32 battlerDef, enum Ability ability { case ABILITY_LIGHTNING_ROD: case ABILITY_STORM_DRAIN: - if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) < GEN_5) + if (GetConfig(B_REDIRECT_ABILITY_IMMUNITY) < GEN_5) return FALSE; else return (BattlerStatCanRise(battlerDef, ability, STAT_SPATK) && HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)); diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index 4dc72e7859..970380bcad 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle_anim.h" +#include "battle_anim_internal.h" #include "gpu_regs.h" #include "trig.h" #include "constants/rgb.h" @@ -192,27 +193,29 @@ const struct SpriteTemplate gTailGlowOrbSpriteTemplate = static void AnimMegahornHorn(struct Sprite *sprite) { + CMD_ARGS(x1, y1, x2, y2, duration); + if (IsContest()) { StartSpriteAffineAnim(sprite, 2); - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + cmd->x2 = -cmd->x2; + cmd->x1 = -cmd->x1; } else if (IsOnPlayerSide(gBattleAnimTarget)) { StartSpriteAffineAnim(sprite, 1); - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + cmd->y1 = -cmd->y1; + cmd->x2 = -cmd->x2; + cmd->y2 = -cmd->y2; + cmd->x1 = -cmd->x1; } - sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[4]; + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->x1; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->y1; + sprite->data[0] = cmd->duration; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->x2; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->y2; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); @@ -220,20 +223,22 @@ static void AnimMegahornHorn(struct Sprite *sprite) static void AnimLeechLifeNeedle(struct Sprite *sprite) { + CMD_ARGS(x, y, duration); + if (IsContest()) { - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + cmd->x = -cmd->x; StartSpriteAffineAnim(sprite, 2); } else if (IsOnPlayerSide(gBattleAnimTarget)) { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + cmd->y = -cmd->y; + cmd->x = -cmd->x; } - sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->x; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->y; + sprite->data[0] = cmd->duration; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); @@ -244,22 +249,20 @@ static void AnimLeechLifeNeedle(struct Sprite *sprite) // Creates a single web thread that travels from attacker to target. // Used by MOVE_STRING_SHOT and MOVE_SPIDER_WEB in their first move phase. -// arg 0: x -// arg 1: y // arg 2: controls the left-to-right movement -// arg 3: amplitude -// arg 4: if targets both opponents static void AnimTranslateWebThread(struct Sprite *sprite) { + CMD_ARGS(x, y, unk2, amplitude, targetsBoth); + if (IsContest()) - gBattleAnimArgs[2] /= 2; + cmd->unk2 /= 2; InitSpritePosToAnimAttacker(sprite, TRUE); - sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[0] = cmd->unk2; sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; - if (!gBattleAnimArgs[4]) + if (!cmd->targetsBoth) { sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); @@ -270,7 +273,7 @@ static void AnimTranslateWebThread(struct Sprite *sprite) } InitAnimLinearTranslationWithSpeed(sprite); - sprite->data[5] = gBattleAnimArgs[3]; + sprite->data[5] = cmd->amplitude; sprite->callback = AnimTranslateWebThread_Step; } @@ -289,13 +292,15 @@ static void AnimTranslateWebThread_Step(struct Sprite *sprite) // Second stage of String Shot static void AnimStringWrap(struct Sprite *sprite) { + CMD_ARGS(x, y); + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); if (!IsOnPlayerSide(gBattleAnimAttacker)) - sprite->x -= gBattleAnimArgs[0]; + sprite->x -= cmd->x; else - sprite->x += gBattleAnimArgs[0]; + sprite->x += cmd->x; - sprite->y += gBattleAnimArgs[1]; + sprite->y += cmd->y; if (IsOnPlayerSide(gBattleAnimTarget)) sprite->y += 8; @@ -365,27 +370,24 @@ static void AnimSpiderWeb_End(struct Sprite *sprite) // Translates a stinger sprite linearly to a destination location. The sprite is // initially rotated so that it appears to be traveling in a straight line. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: target x pixel offset -// arg 3: target y pixel offset -// arg 4: duration void AnimTranslateStinger(struct Sprite *sprite) { + CMD_ARGS(initialX, intialY, targetX, targetY, duration); + s16 lVarX, lVarY; u16 rot; if (IsContest()) { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + cmd->targetX = -cmd->targetX; } else { if (!IsOnPlayerSide(gBattleAnimAttacker)) { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + cmd->targetX = -cmd->targetX; + cmd->intialY = -cmd->intialY; + cmd->targetY = -cmd->targetY; } } @@ -394,20 +396,20 @@ void AnimTranslateStinger(struct Sprite *sprite) if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT) { - gBattleAnimArgs[2] *= -1; - gBattleAnimArgs[0] *= -1; + cmd->targetX *= -1; + cmd->initialX *= -1; } } InitSpritePosToAnimAttacker(sprite, TRUE); - lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; - lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->targetX; + lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->targetY; rot = ArcTan2Neg(lVarX - sprite->x, lVarY - sprite->y); rot += 0xC000; TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot); - sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[0] = cmd->duration; sprite->data[2] = lVarX; sprite->data[4] = lVarY; @@ -416,23 +418,19 @@ void AnimTranslateStinger(struct Sprite *sprite) } // Rotates sprite and moves it in an arc, so that it appears like a missle or arrow traveling. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: target x pixel offset -// arg 3: target y pixel offset -// arg 4: duration -// arg 5: wave amplitude void AnimMissileArc(struct Sprite *sprite) { + CMD_ARGS(initialX, intialY, targetX, targetY, duration, waveAmplitude); + InitSpritePosToAnimAttacker(sprite, TRUE); if (!IsOnPlayerSide(gBattleAnimAttacker)) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + cmd->targetX = -cmd->targetX; - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; - sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[0] = cmd->duration; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->targetX; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->targetY; + sprite->data[5] = cmd->waveAmplitude; InitAnimArcTranslation(sprite); sprite->callback = AnimMissileArc_Step; @@ -478,7 +476,9 @@ void AnimMissileArc_Step(struct Sprite *sprite) static void AnimTailGlowOrb(struct Sprite *sprite) { - if (gBattleAnimArgs[0] == ANIM_ATTACKER) + CMD_ARGS(relativeTo); + + if (cmd->relativeTo == ANIM_ATTACKER) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 18; diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c index f8f2dcd0d0..949caf4d44 100644 --- a/src/battle_anim_dark.c +++ b/src/battle_anim_dark.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle_anim.h" +#include "battle_anim_internal.h" #include "contest.h" #include "gpu_regs.h" #include "graphics.h" @@ -290,8 +291,10 @@ static void AnimPunishment(struct Sprite *sprite) void AnimTask_AttackerFadeToInvisible(u8 taskId) { + CMD_ARGS(stepDelay); + int battler; - gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[0] = cmd->stepDelay; battler = gBattleAnimAttacker; gTasks[taskId].data[1] = 16; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); @@ -328,7 +331,9 @@ static void AnimTask_AttackerFadeToInvisible_Step(u8 taskId) void AnimTask_AttackerFadeFromInvisible(u8 taskId) { - gTasks[taskId].data[0] = gBattleAnimArgs[0]; + CMD_ARGS(stepDelay); + + gTasks[taskId].data[0] = cmd->stepDelay; gTasks[taskId].data[1] = BLDALPHA_BLEND(0, 16); gTasks[taskId].func = AnimTask_AttackerFadeFromInvisible_Step; SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].data[1]); @@ -415,12 +420,14 @@ static void AnimUnusedBagSteal_Step(struct Sprite *sprite) // Move sprite inward for Bite/Crunch and Clamp void AnimBite(struct Sprite *sprite) { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[1] = gBattleAnimArgs[4]; - sprite->data[2] = gBattleAnimArgs[5]; + CMD_ARGS(x, y, animation, xVelocity, yVelocity, halfDuration); + + sprite->x += cmd->x; + sprite->y += cmd->y; + StartSpriteAffineAnim(sprite, cmd->animation); + sprite->data[0] = cmd->xVelocity; + sprite->data[1] = cmd->yVelocity; + sprite->data[2] = cmd->halfDuration; sprite->callback = AnimBite_Step1; } @@ -447,10 +454,12 @@ static void AnimBite_Step2(struct Sprite *sprite) // Launches a tear drop away from the battler. Used by Fake Tears void AnimTearDrop(struct Sprite *sprite) { + CMD_ARGS(relativeTo, type); + u8 battler; s8 xOffset; - if (gBattleAnimArgs[0] == ANIM_ATTACKER) + if (cmd->relativeTo == ANIM_ATTACKER) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; @@ -458,7 +467,7 @@ void AnimTearDrop(struct Sprite *sprite) xOffset = 20; sprite->oam.tileNum += 4; - switch (gBattleAnimArgs[1]) + switch (cmd->type) { case 0: sprite->x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) - 8; @@ -899,21 +908,22 @@ void AnimTask_MementoHandleBg(u8 taskId) // Animates a deep slash from a claw. Used by Metal Claw, Dragon Claw, and Crush Claw void AnimClawSlash(struct Sprite *sprite) { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; - StartSpriteAnim(sprite, gBattleAnimArgs[2]); + CMD_ARGS(x, y, animation); + + sprite->x += cmd->x; + sprite->y += cmd->y; + StartSpriteAnim(sprite, cmd->animation); sprite->callback = RunStoredCallbackWhenAnimEnds; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } // Makes the attacker metallic and shining. // Used by MOVE_HARDEN and MOVE_IRON_DEFENSE. -// arg0: if true won't change battler's palette back -// arg1: if true, use custom color -// arg2: custom color // Custom color argument is used in MOVE_POISON_TAIL to make the mon turn purplish/pinkish as if became cloaked in poison. void AnimTask_MetallicShine(u8 taskId) { + CMD_ARGS(permanent, useColor, color); + u16 species; u8 spriteId; u8 newSpriteId; @@ -963,15 +973,15 @@ void AnimTask_MetallicShine(u8 taskId) gBattle_BG1_Y = -gSprites[spriteId].y + 32; paletteNum = 16 + gSprites[spriteId].oam.paletteNum; - if (gBattleAnimArgs[1] == 0) + if (cmd->useColor == 0) SetGrayscaleOrOriginalPalette(paletteNum, FALSE); else - BlendPalette(BG_PLTT_ID(paletteNum), 16, 11, gBattleAnimArgs[2]); + BlendPalette(BG_PLTT_ID(paletteNum), 16, 11, cmd->color); gTasks[taskId].data[0] = newSpriteId; - gTasks[taskId].data[1] = gBattleAnimArgs[0]; - gTasks[taskId].data[2] = gBattleAnimArgs[1]; - gTasks[taskId].data[3] = gBattleAnimArgs[2]; + gTasks[taskId].data[1] = cmd->permanent; + gTasks[taskId].data[2] = cmd->useColor; + gTasks[taskId].data[3] = cmd->color; gTasks[taskId].data[6] = priorityChanged; gTasks[taskId].func = AnimTask_MetallicShine_Step; } @@ -1020,22 +1030,22 @@ static void AnimTask_MetallicShine_Step(u8 taskId) } // Changes battler's palette to either grayscale or original. -// arg0: which battler -// arg1: FALSE grayscale, TRUE original void AnimTask_SetGrayscaleOrOriginalPal(u8 taskId) { + CMD_ARGS(battler, mode); + u8 spriteId; u8 battler; bool8 calcSpriteId = FALSE; u8 position = B_POSITION_PLAYER_LEFT; - switch (gBattleAnimArgs[0]) + switch (cmd->battler) { case ANIM_ATTACKER: case ANIM_TARGET: case ANIM_ATK_PARTNER: case ANIM_DEF_PARTNER: - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + spriteId = GetAnimBattlerSpriteId(cmd->battler); break; case ANIM_PLAYER_LEFT: position = B_POSITION_PLAYER_LEFT; @@ -1068,7 +1078,7 @@ void AnimTask_SetGrayscaleOrOriginalPal(u8 taskId) } if (spriteId != SPRITE_NONE) - SetGrayscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, gBattleAnimArgs[1]); + SetGrayscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, cmd->mode); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_anim_dragon.c b/src/battle_anim_dragon.c index 79595695e2..1f194711f7 100644 --- a/src/battle_anim_dragon.c +++ b/src/battle_anim_dragon.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle_anim.h" +#include "battle_anim_internal.h" #include "scanline_effect.h" #include "task.h" #include "trig.h" @@ -404,24 +405,26 @@ static void AnimSpinningDracoMeteor(struct Sprite *sprite) void AnimOutrageFlame(struct Sprite *sprite) { + CMD_ARGS(x, y, duration, xVelocity, yVelocity, flickerDuration); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); if (!IsOnPlayerSide(gBattleAnimAttacker)) { - sprite->x -= gBattleAnimArgs[0]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - gBattleAnimArgs[4] = -gBattleAnimArgs[4]; + sprite->x -= cmd->x; + cmd->xVelocity = -cmd->xVelocity; + cmd->yVelocity = -cmd->yVelocity; } else { - sprite->x += gBattleAnimArgs[0]; + sprite->x += cmd->x; } - sprite->y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; - sprite->data[5] = gBattleAnimArgs[5]; + sprite->y += cmd->y; + sprite->data[0] = cmd->duration; + sprite->data[1] = cmd->xVelocity; + sprite->data[3] = cmd->yVelocity; + sprite->data[5] = cmd->flickerDuration; sprite->invisible = TRUE; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = TranslateSpriteLinearAndFlicker; @@ -429,26 +432,28 @@ void AnimOutrageFlame(struct Sprite *sprite) static void StartDragonFireTranslation(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY, targetX, targetY, duration); + SetSpriteCoordsToAnimAttackerCoords(sprite); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); if (!IsOnPlayerSide(gBattleAnimAttacker)) { - sprite->x -= gBattleAnimArgs[1]; - sprite->y += gBattleAnimArgs[1]; - sprite->data[2] -= gBattleAnimArgs[2]; - sprite->data[4] += gBattleAnimArgs[3]; + sprite->x -= cmd->initialY; + sprite->y += cmd->initialY; + sprite->data[2] -= cmd->targetX; + sprite->data[4] += cmd->targetY; } else { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; - sprite->data[2] += gBattleAnimArgs[2]; - sprite->data[4] += gBattleAnimArgs[3]; + sprite->x += cmd->initialX; + sprite->y += cmd->initialY; + sprite->data[2] += cmd->targetX; + sprite->data[4] += cmd->targetY; StartSpriteAnim(sprite, 1); } - sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[0] = cmd->duration; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } @@ -458,7 +463,9 @@ static void StartDragonFireTranslation(struct Sprite *sprite) // args[2] - initial y offset void AnimDragonRageFirePlume(struct Sprite *sprite) { - if (gBattleAnimArgs[0] == 0) + CMD_ARGS(relativeTo, x, y); + + if (cmd->relativeTo == ANIM_ATTACKER) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); @@ -469,8 +476,8 @@ void AnimDragonRageFirePlume(struct Sprite *sprite) sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); } - SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[1]); - sprite->y += gBattleAnimArgs[2]; + SetAnimSpriteInitialXOffset(sprite, cmd->x); + sprite->y += cmd->y; sprite->callback = RunStoredCallbackWhenAnimEnds; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } @@ -486,13 +493,15 @@ void AnimDragonFireToTarget(struct Sprite *sprite) void AnimDragonDanceOrb(struct Sprite *sprite) { + CMD_ARGS(angle); + u16 r5; u16 r0; sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[4] = 0; sprite->data[5] = 1; - sprite->data[6] = gBattleAnimArgs[0]; + sprite->data[6] = cmd->angle; r5 = GetBattlerSpriteCoordAttr(gBattlerAttacker, BATTLER_COORD_ATTR_HEIGHT); r0 = GetBattlerSpriteCoordAttr(gBattlerAttacker, BATTLER_COORD_ATTR_WIDTH); if (r5 > r0) @@ -633,14 +642,16 @@ static void UpdateDragonDanceScanlineEffect(struct Task *task) void AnimOverheatFlame(struct Sprite *sprite) { - int yAmplitude = (gBattleAnimArgs[2] * 3) / 5; + CMD_ARGS(speed, unk1, unk2, duration, y); + + int yAmplitude = (cmd->unk2 * 3) / 5; sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[4]; - sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]); - sprite->data[2] = Sin(gBattleAnimArgs[1], yAmplitude); - sprite->x += sprite->data[1] * gBattleAnimArgs[0]; - sprite->y += sprite->data[2] * gBattleAnimArgs[0]; - sprite->data[3] = gBattleAnimArgs[3]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + cmd->y; + sprite->data[1] = Cos(cmd->unk1, cmd->unk2); + sprite->data[2] = Sin(cmd->unk1, yAmplitude); + sprite->x += sprite->data[1] * cmd->speed; + sprite->y += sprite->data[2] * cmd->speed; + sprite->data[3] = cmd->duration; sprite->callback = AnimOverheatFlame_Step; } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index db537dc9ab..ba5dbbc68d 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -1,6 +1,7 @@ #include "global.h" #include "malloc.h" #include "battle_anim.h" +#include "battle_anim_internal.h" #include "battle_interface.h" #include "decompress.h" #include "gpu_regs.h" @@ -3255,29 +3256,25 @@ static void AnimWoodHammerHammer_WaitForDestruction(struct Sprite *sprite) // Animates the falling particles that horizontally wave back and forth. // Used by Sleep Powder, Stun Spore, and Poison Powder. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: total duration in frames -// arg 3: vertical movement speed (sub-pixel value) -// arg 4: wave amplitude -// arg 5: wave speed void AnimMovePowderParticle(struct Sprite *sprite) { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; + CMD_ARGS(x, y, duration, yVelocity, waveAmplitude, waveSpeed); + + sprite->x += cmd->x; + sprite->y += cmd->y; + sprite->data[0] = cmd->duration; + sprite->data[1] = cmd->yVelocity; if (!IsOnPlayerSide(gBattleAnimAttacker)) { - sprite->data[3] = -gBattleAnimArgs[4]; + sprite->data[3] = -cmd->waveAmplitude; } else { - sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[3] = cmd->waveAmplitude; } - sprite->data[4] = gBattleAnimArgs[5]; + sprite->data[4] = cmd->waveSpeed; sprite->callback = AnimMovePowderParticle_Step; } @@ -3298,13 +3295,12 @@ static void AnimMovePowderParticle_Step(struct Sprite *sprite) } // Moves an energy orb towards the center of the mon. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: duration void AnimPowerAbsorptionOrb(struct Sprite *sprite) { + CMD_ARGS(x, y, duration); + InitSpritePosToAnimAttacker(sprite, TRUE); - sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[0] = cmd->duration; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; @@ -3312,15 +3308,13 @@ void AnimPowerAbsorptionOrb(struct Sprite *sprite) } // Moves an orb in a straight line towards the target mon. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: duration -// arg 3: sprite anim number void AnimSolarBeamBigOrb(struct Sprite *sprite) { + CMD_ARGS(x, y, duration, animation); + InitSpritePosToAnimAttacker(sprite, TRUE); - StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data[0] = gBattleAnimArgs[2]; + StartSpriteAnim(sprite, cmd->animation); + sprite->data[0] = cmd->duration; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; @@ -3329,12 +3323,10 @@ void AnimSolarBeamBigOrb(struct Sprite *sprite) // Moves a small orb in a wavy pattern towards the target mon. // The small orb "circles" the big orbs in AnimSolarBeamBigOrb. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: duration -// arg 3: initial wave offset static void AnimSolarBeamSmallOrb(struct Sprite *sprite) { + CMD_ARGS(x, y, duration, waveOffset); + InitSpritePosToAnimAttacker(sprite, TRUE); if (IsDoubleBattle() && gAnimMoveIndex == MOVE_CORE_ENFORCER) @@ -3343,7 +3335,7 @@ static void AnimSolarBeamSmallOrb(struct Sprite *sprite) } else { - sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[0] = cmd->duration; sprite->data[1] = sprite->x; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; @@ -3351,7 +3343,7 @@ static void AnimSolarBeamSmallOrb(struct Sprite *sprite) } InitAnimLinearTranslation(sprite); - sprite->data[5] = gBattleAnimArgs[3]; + sprite->data[5] = cmd->waveOffset; sprite->callback = AnimSolarBeamSmallOrb_Step; sprite->callback(sprite); } @@ -3396,17 +3388,15 @@ void AnimTask_CreateSmallSolarBeamOrbs(u8 taskId) } // Moves an orb from the target mon to the attacking mon in an arc-like fashion. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: wave amplitude -// arg 3: wave period (lower means faster wave) void AnimAbsorptionOrb(struct Sprite *sprite) { + CMD_ARGS(x, y, waveAmplitude, wavePeriod); + InitSpritePosToAnimTarget(sprite, TRUE); - sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[0] = cmd->wavePeriod; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - sprite->data[5] = gBattleAnimArgs[2]; + sprite->data[5] = cmd->waveAmplitude; InitAnimArcTranslation(sprite); sprite->callback = AnimAbsorptionOrb_Step; } @@ -3762,22 +3752,18 @@ static void AnimMoveWringOut(struct Sprite *sprite) // seed (sprouts a sapling from a seed.) // Used by Leech Seed. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: target x pixel offset -// arg 3: target y pixel offset -// arg 4: duration -// arg 5: wave amplitude static void AnimLeechSeed(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY, targetX, targetY, duration, waveAmplitude); + InitSpritePosToAnimAttacker(sprite, TRUE); if (!IsOnPlayerSide(gBattleAnimAttacker)) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + cmd->targetX = -cmd->targetX; - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3]; - sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[0] = cmd->duration; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + cmd->targetX; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + cmd->targetY; + sprite->data[5] = cmd->waveAmplitude; InitAnimArcTranslation(sprite); sprite->callback = AnimLeechSeed_Step; } @@ -3805,20 +3791,17 @@ static void AnimLeechSeedSprouts(struct Sprite *sprite) // Moves a spore particle in a halo around the target mon. // The sprite's priority is updated to give the effect of going // behind the mon's sprite. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: initial wave offset -// arg 3: duration -// arg 4: blend (0 = off, 1 = on) void AnimSporeParticle(struct Sprite *sprite) { + CMD_ARGS(x, y, waveOffset, duration, blend); + InitSpritePosToAnimTarget(sprite, TRUE); - StartSpriteAnim(sprite, gBattleAnimArgs[4]); - if (gBattleAnimArgs[4] == 1) + StartSpriteAnim(sprite, cmd->blend); + if (cmd->blend == TRUE) sprite->oam.objMode = ST_OAM_OBJ_BLEND; - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[0] = cmd->duration; + sprite->data[1] = cmd->waveOffset; sprite->callback = AnimSporeParticle_Step; sprite->callback(sprite); } @@ -3868,18 +3851,16 @@ void AnimTask_SporeDoubleBattle(u8 taskId) // Rotates a big flower around the attacking mon, and slowly floats // downward. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: target y pixel offset -// arg 3: duration void AnimPetalDanceBigFlower(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY, targetY, duration); + InitSpritePosToAnimAttacker(sprite, FALSE); - sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[0] = cmd->duration; sprite->data[1] = sprite->x; sprite->data[2] = sprite->x; sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + cmd->targetY; InitAnimLinearTranslation(sprite); sprite->data[5] = 0x40; sprite->callback = AnimPetalDanceBigFlower_Step; @@ -3906,18 +3887,16 @@ static void AnimPetalDanceBigFlower_Step(struct Sprite *sprite) } // Slowly floats a small flower downard, while swaying from right to left. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: target y pixel offset -// arg 3: duration void AnimPetalDanceSmallFlower(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY, targetY, duration); + InitSpritePosToAnimAttacker(sprite, TRUE); - sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[0] = cmd->duration; sprite->data[1] = sprite->x; sprite->data[2] = sprite->x; sprite->data[3] = sprite->y; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + cmd->targetY; InitAnimLinearTranslation(sprite); sprite->data[5] = 0x40; sprite->callback = AnimPetalDanceSmallFlower_Step; @@ -3942,16 +3921,15 @@ static void AnimPetalDanceSmallFlower_Step(struct Sprite *sprite) } // Shoots a leaf upward, then floats it downward while swaying back and forth. -// arg 0: upward x delta per frame -// arg 1: upward y delta per frame -// arg 2: upward duration static void AnimRazorLeafParticle(struct Sprite *sprite) { + CMD_ARGS(upwardDeltaX, upwardDeltaY, upwardDuration); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[0] = cmd->upwardDeltaX; + sprite->data[1] = cmd->upwardDeltaY; + sprite->data[2] = cmd->upwardDuration; sprite->callback = AnimRazorLeafParticle_Step1; } @@ -4148,33 +4126,28 @@ static void AnimTeraStarstormStars_Step(struct Sprite *sprite) // Animates a sprite that moves linearly from one location to another, with a // single-cycle sine wave added to the y position along the way. // Used by Razor Leaf and Magical Leaf. -// arg 0: initial x offset -// arg 1: initial y offset -// arg 2: target x offset -// arg 3: target y offset -// arg 4: translation duration -// arg 5: wave amplitude -// arg 6: target between double battle opponents (boolean) void AnimTranslateLinearSingleSineWave(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY, targetX, targetY, duration, waveAmplitude, targetBoth); + InitSpritePosToAnimAttacker(sprite, TRUE); if (!IsOnPlayerSide(gBattleAnimAttacker)) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + cmd->targetX = -cmd->targetX; - sprite->data[0] = gBattleAnimArgs[4]; - if (!gBattleAnimArgs[6]) + sprite->data[0] = cmd->duration; + if (!cmd->targetBoth) { - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->targetX; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->targetY; } else { SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]); - sprite->data[2] += gBattleAnimArgs[2]; - sprite->data[4] += gBattleAnimArgs[3]; + sprite->data[2] += cmd->targetX; + sprite->data[4] += cmd->targetY; } - sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[5] = cmd->waveAmplitude; InitAnimArcTranslation(sprite); if (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)) sprite->data[0] = 1; @@ -4217,22 +4190,19 @@ static void AnimTranslateLinearSingleSineWave_Step(struct Sprite *sprite) } // Animates particles in the Twister move animation. -// arg 0: duration -// arg 1: total y delta (the particles rise upward) -// arg 2: wave period (higher means faster wave) -// arg 3: wave amplitude -// arg 4: speedup frame (particles move faster at the end of the animation) void AnimMoveTwisterParticle(struct Sprite *sprite) { + CMD_ARGS(duration, distanceY, wavePeriod, waveAmplitude, speedUpOnFrame); + if (IsDoubleBattle() == TRUE) SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y); sprite->y += 32; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = gBattleAnimArgs[2]; - sprite->data[3] = gBattleAnimArgs[3]; - sprite->data[4] = gBattleAnimArgs[4]; + sprite->data[0] = cmd->duration; + sprite->data[1] = cmd->distanceY; + sprite->data[2] = cmd->wavePeriod; + sprite->data[3] = cmd->waveAmplitude; + sprite->data[4] = cmd->speedUpOnFrame; sprite->callback = AnimMoveTwisterParticle_Step; } @@ -4265,17 +4235,15 @@ static void AnimMoveTwisterParticle_Step(struct Sprite *sprite) } // Squeezes a constricting "rope" several times via affine animations. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: affine anim num -// arg 3: num squeezes static void AnimConstrictBinding(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY, affineAnimation, squeezes); + InitSpritePosToAnimTarget(sprite, FALSE); sprite->affineAnimPaused = 1; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); - sprite->data[6] = gBattleAnimArgs[2]; - sprite->data[7] = gBattleAnimArgs[3]; + StartSpriteAffineAnim(sprite, cmd->affineAnimation); + sprite->data[6] = cmd->affineAnimation; + sprite->data[7] = cmd->squeezes; sprite->callback = AnimConstrictBinding_Step1; } @@ -4315,8 +4283,11 @@ static void AnimConstrictBinding_Step2(struct Sprite *sprite) } } +// unk1 may be some sort of duration? void AnimTask_ShrinkTargetCopy(u8 taskId) { + CMD_ARGS(unk0, unk1); + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); if (gSprites[spriteId].invisible) { @@ -4330,8 +4301,8 @@ void AnimTask_ShrinkTargetCopy(u8 taskId) spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER); gTasks[taskId].data[15] = gSprites[spriteId].oam.priority; gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(BATTLE_PARTNER(gBattleAnimTarget)); - gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[0] = cmd->unk0; + gTasks[taskId].data[1] = cmd->unk1; gTasks[taskId].data[11] = 0x100; gTasks[taskId].func = AnimTask_DuplicateAndShrinkToPos_Step1; } @@ -4357,6 +4328,7 @@ static void AnimTask_DuplicateAndShrinkToPos_Step1(u8 taskId) static void AnimTask_DuplicateAndShrinkToPos_Step2(u8 taskId) { + // TODO: gBattleAnimArgs[ARG_RET_ID]? if ((u16)gBattleAnimArgs[7] == 0xFFFF) { if (gTasks[taskId].data[0] == 0) @@ -4384,18 +4356,18 @@ static void AnimTask_DuplicateAndShrinkToPos_Step2(u8 taskId) } // Moves an orb from the target mon to the attacking mon. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset void AnimMimicOrb(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY); + switch (sprite->data[0]) { case 0: if (IsOnPlayerSide(gBattleAnimTarget)) - gBattleAnimArgs[0] *= -1; + cmd->initialX *= -1; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + cmd->initialX; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + cmd->initialY; sprite->invisible = TRUE; sprite->data[0]++; break; @@ -4415,22 +4387,19 @@ void AnimMimicOrb(struct Sprite *sprite) } // Animates a root that flickers away after some time. -// arg 0: x pixel offset -// arg 1: y pixel offset -// arg 2: sprite subpriority offset -// arg 3: sprite anim num -// arg 4: duration static void AnimIngrainRoot(struct Sprite *sprite) { + CMD_ARGS(offsetX, offsetY, subpriorityM30, animation, duration); + if (!sprite->data[0]) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); - sprite->x2 = gBattleAnimArgs[0]; - sprite->y2 = gBattleAnimArgs[1]; - sprite->subpriority = gBattleAnimArgs[2] + 30; - StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data[2] = gBattleAnimArgs[4]; + sprite->x2 = cmd->offsetX; + sprite->y2 = cmd->offsetY; + sprite->subpriority = cmd->subpriorityM30 + 30; + StartSpriteAnim(sprite, cmd->animation); + sprite->data[2] = cmd->duration; sprite->data[0]++; if (sprite->y + sprite->y2 > 120) sprite->y += sprite->y2 + sprite->y - 120; @@ -4439,14 +4408,10 @@ static void AnimIngrainRoot(struct Sprite *sprite) } // Places a root on the path to the target mon that flickers away after some time. -// arg 0: percent along the path to the target mon -// arg 1: x pixel offset -// arg 2: y pixel offset -// arg 3: sprite subpriority offset -// arg 4: sprite anum num -// arg 5: duration static void AnimFrenzyPlantRoot(struct Sprite *sprite) { + CMD_ARGS(interpolatePercent, offsetX, offsetY, subpriorityM30, animation, duration); + s16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); s16 attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); s16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); @@ -4454,13 +4419,13 @@ static void AnimFrenzyPlantRoot(struct Sprite *sprite) targetX -= attackerX; targetY -= attackerY; - sprite->x = attackerX + targetX * gBattleAnimArgs[0] / 100; - sprite->y = attackerY + targetY * gBattleAnimArgs[0] / 100; - sprite->x2 = gBattleAnimArgs[1]; - sprite->y2 = gBattleAnimArgs[2]; - sprite->subpriority = gBattleAnimArgs[3] + 30; - StartSpriteAnim(sprite, gBattleAnimArgs[4]); - sprite->data[2] = gBattleAnimArgs[5]; + sprite->x = attackerX + targetX * cmd->interpolatePercent / 100; + sprite->y = attackerY + targetY * cmd->interpolatePercent / 100; + sprite->x2 = cmd->offsetX; + sprite->y2 = cmd->offsetY; + sprite->subpriority = cmd->subpriorityM30 + 30; + StartSpriteAnim(sprite, cmd->animation); + sprite->data[2] = cmd->duration; sprite->callback = AnimRootFlickerOut; } @@ -4474,20 +4439,17 @@ static void AnimRootFlickerOut(struct Sprite *sprite) } // Moves an orb in a fast wavy path. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: horizontal velocity -// arg 3: wave amplitude -// arg 4: duration static void AnimIngrainOrb(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY, velocityX, waveAmplitude, duration); + if (!sprite->data[0]) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + cmd->initialX; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + cmd->initialY; + sprite->data[1] = cmd->velocityX; + sprite->data[2] = cmd->waveAmplitude; + sprite->data[3] = cmd->duration; } sprite->data[0]++; @@ -4568,6 +4530,9 @@ static void AnimItemSteal_Step1(struct Sprite *sprite) static void AnimPresent(struct Sprite *sprite) { + // Arguments are unused + //CMD_ARGS(initialX, initialY, unk2, unk3, unk4); + s16 targetX; s16 targetY; InitSpritePosToAnimAttacker(sprite, FALSE); @@ -4637,16 +4602,14 @@ static void AnimKnockOffItem(struct Sprite *sprite) } // Animates a heal particle upward. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: vertical velocity -// arg 3: unused static void AnimPresentHealParticle(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY, velocityY, unused3); + if (!sprite->data[0]) { InitSpritePosToAnimTarget(sprite, FALSE); - sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[1] = cmd->velocityY; } sprite->data[0]++; @@ -4657,6 +4620,9 @@ static void AnimPresentHealParticle(struct Sprite *sprite) static void AnimItemSteal(struct Sprite *sprite) { + // Arguments are unused + //CMD_ARGS(initialX, initialY); + s16 attackerX; s16 attackerY; InitSpritePosToAnimTarget(sprite, FALSE); @@ -4704,10 +4670,10 @@ static void AnimItemSteal_Step3(struct Sprite *sprite) } // Moves a bag in a circular motion. -// arg 0: y position -// arg 1: initial wave offset static void AnimTrickBag(struct Sprite *sprite) { + CMD_ARGS(initialY, waveOffset); + int a; int b; @@ -4715,14 +4681,14 @@ static void AnimTrickBag(struct Sprite *sprite) { if (!IsContest()) { - sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[1] = cmd->waveOffset; sprite->x = 120; } else { - a = gBattleAnimArgs[1] - 32; + a = cmd->waveOffset - 32; if (a < 0) - b = gBattleAnimArgs[1] + 0xDF; + b = cmd->waveOffset + 0xDF; else b = a; @@ -4730,8 +4696,8 @@ static void AnimTrickBag(struct Sprite *sprite) sprite->x = 70; } - sprite->y = gBattleAnimArgs[0]; - sprite->data[2] = gBattleAnimArgs[0]; + sprite->y = cmd->initialY; + sprite->data[2] = cmd->initialY; sprite->data[4] = 20; sprite->x2 = Cos(sprite->data[1], 60); sprite->y2 = Sin(sprite->data[1], 20); @@ -5076,8 +5042,14 @@ static void AnimTask_LeafBlade_Step2_Callback(struct Sprite *sprite) static void AnimFlyingParticle(struct Sprite *sprite) { + // unk6 chooses an anchor? + // unk3 is probably some sort of y offset relative to the center of + // the screen? + // unk5 is some kind of mode. it affects priority and y. + CMD_ARGS(unk0, unk1, unk2, unk3, unk4, unk5, unk6); + u8 battler; - if (!gBattleAnimArgs[6]) + if (!cmd->unk6) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; @@ -5085,35 +5057,35 @@ static void AnimFlyingParticle(struct Sprite *sprite) if (!IsOnPlayerSide(battler)) { sprite->data[4] = 0; - sprite->data[2] = gBattleAnimArgs[3]; + sprite->data[2] = cmd->unk3; sprite->x = -16; } else { sprite->data[4] = 1; - sprite->data[2] = -gBattleAnimArgs[3]; + sprite->data[2] = -cmd->unk3; sprite->x = DISPLAY_WIDTH + 16; } - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[3] = gBattleAnimArgs[4]; - switch (gBattleAnimArgs[5]) + sprite->data[1] = cmd->unk1; + sprite->data[0] = cmd->unk2; + sprite->data[3] = cmd->unk4; + switch (cmd->unk5) { case 0: - sprite->y = gBattleAnimArgs[0]; + sprite->y = cmd->unk0; sprite->oam.priority = GetBattlerSpriteBGPriority(battler); break; case 1: - sprite->y = gBattleAnimArgs[0]; + sprite->y = cmd->unk0; sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; break; case 2: - sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + cmd->unk0; sprite->oam.priority = GetBattlerSpriteBGPriority(battler); break; case 3: - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->unk0; GetAnimBattlerSpriteId(ANIM_TARGET); sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; break; @@ -5169,25 +5141,28 @@ void AnimTask_CycleMagicalLeafPal(u8 taskId) break; } + // TODO: gBattleAnimArgs[ARG_RET_ID]? if (gBattleAnimArgs[7] == -1) DestroyAnimVisualTask(taskId); } void AnimNeedleArmSpike(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1, unk2, unk3, unk4); + s16 a; s16 b; u16 c; u16 x; u16 y; - if (gBattleAnimArgs[4] == 0) + if (cmd->unk4 == 0) { DestroyAnimSprite(sprite); } else { - if (gBattleAnimArgs[0] == 0) + if (cmd->unk0 == 0) { if (GetMoveTarget(gAnimMoveIndex) == MOVE_TARGET_BOTH) { @@ -5212,11 +5187,11 @@ void AnimNeedleArmSpike(struct Sprite *sprite) } } - sprite->data[0] = gBattleAnimArgs[4]; - if (gBattleAnimArgs[1] == 0) + sprite->data[0] = cmd->unk4; + if (cmd->unk1 == 0) { - sprite->x = gBattleAnimArgs[2] + a; - sprite->y = gBattleAnimArgs[3] + b; + sprite->x = cmd->unk2 + a; + sprite->y = cmd->unk3 + b; sprite->data[5] = a; sprite->data[6] = b; } @@ -5224,16 +5199,16 @@ void AnimNeedleArmSpike(struct Sprite *sprite) { sprite->x = a; sprite->y = b; - sprite->data[5] = gBattleAnimArgs[2] + a; - sprite->data[6] = gBattleAnimArgs[3] + b; + sprite->data[5] = cmd->unk2 + a; + sprite->data[6] = cmd->unk3 + b; } x = sprite->x; sprite->data[1] = x * 16; y = sprite->y; sprite->data[2] = y * 16; - sprite->data[3] = (sprite->data[5] - sprite->x) * 16 / gBattleAnimArgs[4]; - sprite->data[4] = (sprite->data[6] - sprite->y) * 16 / gBattleAnimArgs[4]; + sprite->data[3] = (sprite->data[5] - sprite->x) * 16 / cmd->unk4; + sprite->data[4] = (sprite->data[6] - sprite->y) * 16 / cmd->unk4; c = ArcTan2Neg(sprite->data[5] - x, sprite->data[6] - y); if (IsContest()) c -= 0x8000; @@ -5267,15 +5242,17 @@ static void AnimWhipHit_WaitEnd(struct Sprite *sprite) static void AnimSlidingHit(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1); + if (!IsOnPlayerSide(gBattleAnimAttacker)) { - sprite->x -= gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; + sprite->x -= cmd->unk0; + sprite->y += cmd->unk1; } else { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; + sprite->x += cmd->unk0; + sprite->y += cmd->unk1; } sprite->callback = RunStoredCallbackWhenAnimEnds; @@ -5284,23 +5261,27 @@ static void AnimSlidingHit(struct Sprite *sprite) static void AnimWhipHit(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1); + if (IsOnPlayerSide(gBattleAnimAttacker)) StartSpriteAnim(sprite, 1); sprite->callback = AnimWhipHit_WaitEnd; - SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); - sprite->y += gBattleAnimArgs[1]; + SetAnimSpriteInitialXOffset(sprite, cmd->unk0); + sprite->y += cmd->unk1; } static void AnimFlickeringPunch(struct Sprite *sprite) { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; - sprite->data[5] = gBattleAnimArgs[5]; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); + CMD_ARGS(unk0, unk1, unk2, unk3, unk4, unk5, unk6); + + sprite->x += cmd->unk0; + sprite->y += cmd->unk1; + sprite->data[0] = cmd->unk2; + sprite->data[1] = cmd->unk3; + sprite->data[3] = cmd->unk4; + sprite->data[5] = cmd->unk5; + StartSpriteAffineAnim(sprite, cmd->unk6); StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = TranslateSpriteLinearAndFlicker; } @@ -5312,34 +5293,38 @@ static void AnimFlickeringPunch(struct Sprite *sprite) // arg 2: slice direction; 0 = right-to-left, 1 = left-to-right void AnimCuttingSlice(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1, unk2); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y); if (IsOnPlayerSide(gBattleAnimTarget)) sprite->y += 8; sprite->callback = AnimSlice_Step; - if (gBattleAnimArgs[2] == 0) + if (cmd->unk2 == 0) { - sprite->x += gBattleAnimArgs[0]; + sprite->x += cmd->unk0; } else { - sprite->x -= gBattleAnimArgs[0]; + sprite->x -= cmd->unk0; sprite->hFlip = 1; } - sprite->y += gBattleAnimArgs[1]; + sprite->y += cmd->unk1; sprite->data[1] -= 0x400; sprite->data[2] += 0x400; - sprite->data[5] = gBattleAnimArgs[2]; + sprite->data[5] = cmd->unk2; if (sprite->data[5] == 1) sprite->data[1] = -sprite->data[1]; } static void AnimAirCutterSlice(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1, unk2, unk3); + u8 x, y; - switch (gBattleAnimArgs[3]) + switch (cmd->unk3) { case 1: x = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X); @@ -5367,20 +5352,20 @@ static void AnimAirCutterSlice(struct Sprite *sprite) sprite->y += 8; sprite->callback = AnimSlice_Step; - if (gBattleAnimArgs[2] == 0) + if (cmd->unk2 == 0) { - sprite->x += gBattleAnimArgs[0]; + sprite->x += cmd->unk0; } else { - sprite->x -= gBattleAnimArgs[0]; + sprite->x -= cmd->unk0; sprite->hFlip = 1; } - sprite->y += gBattleAnimArgs[1]; + sprite->y += cmd->unk1; sprite->data[1] -= 0x400; sprite->data[2] += 0x400; - sprite->data[5] = gBattleAnimArgs[2]; + sprite->data[5] = cmd->unk2; if (sprite->data[5] == 1) sprite->data[1] = -sprite->data[1]; } @@ -5441,16 +5426,18 @@ static void UNUSED UnusedFlickerAnim(struct Sprite *sprite) static void AnimCirclingMusicNote(struct Sprite *sprite) { - sprite->data[0] = gBattleAnimArgs[2]; - if (!IsOnPlayerSide(gBattleAnimAttacker)) - sprite->x -= gBattleAnimArgs[0]; - else - sprite->x += gBattleAnimArgs[0]; + CMD_ARGS(unk0, unk1, unk2, unk3, unk4, unk5); - StartSpriteAnim(sprite, gBattleAnimArgs[5]); - sprite->data[1] = -gBattleAnimArgs[3]; - sprite->y += gBattleAnimArgs[1]; - sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[0] = cmd->unk2; + if (!IsOnPlayerSide(gBattleAnimAttacker)) + sprite->x -= cmd->unk0; + else + sprite->x += cmd->unk0; + + StartSpriteAnim(sprite, cmd->unk5); + sprite->data[1] = -cmd->unk3; + sprite->y += cmd->unk1; + sprite->data[3] = cmd->unk4; sprite->callback = AnimCirclingMusicNote_Step; sprite->callback(sprite); } @@ -5474,17 +5461,19 @@ static void AnimCirclingMusicNote_Step(struct Sprite *sprite) static void AnimProtect(struct Sprite *sprite) { - if (IsContest()) - gBattleAnimArgs[1] += 8; + CMD_ARGS(unk0, unk1, unk2); - sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; + if (IsContest()) + cmd->unk1 += 8; + + sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X) + cmd->unk0; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y) + cmd->unk1; if (IsOnPlayerSide(gBattleAnimAttacker) || IsContest()) sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker) + 1; else sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); - sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[0] = cmd->unk2; sprite->data[2] = OBJ_PLTT_ID(IndexOfSpritePaletteTag(ANIM_TAG_PROTECT)); sprite->data[7] = 16; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); @@ -5649,67 +5638,73 @@ static void AnimMilkBottle_Step2(struct Sprite *sprite, int unk1, int unk2) void AnimGrantingStars(struct Sprite *sprite) { - if (!InitSpritePosToAnimBattler(gBattleAnimArgs[2], sprite, FALSE)) + CMD_ARGS(unk0, unk1, unk2, unk3, unk4, unk5); + + if (!InitSpritePosToAnimBattler(cmd->unk2, sprite, FALSE)) return; - SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); - sprite->y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[5]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[2] = gBattleAnimArgs[4]; + SetAnimSpriteInitialXOffset(sprite, cmd->unk0); + sprite->y += cmd->unk1; + sprite->data[0] = cmd->unk5; + sprite->data[1] = cmd->unk3; + sprite->data[2] = cmd->unk4; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); sprite->callback = TranslateSpriteLinearFixedPoint; } static void AnimSparklingStars(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1, unk2, unk3, unk4, unk5, unk6); + u8 battler; - if (!gBattleAnimArgs[2]) + if (!cmd->unk2) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler))) { - SetAverageBattlerPositions(battler, gBattleAnimArgs[6], &sprite->x, &sprite->y); - SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); - sprite->y += gBattleAnimArgs[1]; + SetAverageBattlerPositions(battler, cmd->unk6, &sprite->x, &sprite->y); + SetAnimSpriteInitialXOffset(sprite, cmd->unk0); + sprite->y += cmd->unk1; } else { - if (!gBattleAnimArgs[6]) + if (!cmd->unk6) { sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); - sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + cmd->unk1; } else { sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); - sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + cmd->unk1; } - SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + SetAnimSpriteInitialXOffset(sprite, cmd->unk0); } - sprite->data[0] = gBattleAnimArgs[5]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[0] = cmd->unk5; + sprite->data[1] = cmd->unk3; + sprite->data[2] = cmd->unk4; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); sprite->callback = TranslateSpriteLinearFixedPoint; } static void AnimBubbleBurst(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1); + SetSpriteCoordsToAnimAttackerCoords(sprite); if (IsOnPlayerSide(gBattleAnimAttacker)) { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; + sprite->x += cmd->unk0; + sprite->y += cmd->unk1; } else { - sprite->x -= gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; + sprite->x -= cmd->unk0; + sprite->y += cmd->unk1; StartSpriteAnim(sprite, 1); } @@ -5731,17 +5726,19 @@ static void AnimBubbleBurst_Step(struct Sprite *sprite) static void AnimSleepLetterZ(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1); + SetSpriteCoordsToAnimAttackerCoords(sprite); if (IsOnPlayerSide(gBattleAnimAttacker)) { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; + sprite->x += cmd->unk0; + sprite->y += cmd->unk1; sprite->data[3] = 1; } else { - sprite->x -= gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; + sprite->x -= cmd->unk0; + sprite->y += cmd->unk1; sprite->data[3] = 0xFFFF; StartSpriteAffineAnim(sprite, 1); } @@ -5884,6 +5881,7 @@ static void AnimLockOnTarget_Step4(struct Sprite *sprite) static void AnimLockOnTarget_Step5(struct Sprite *sprite) { + // TODO: gBattleAnimArgs[ARG_RET_ID]? if ((u16)gBattleAnimArgs[7] == 0xFFFF) { sprite->data[1] = 0; @@ -5907,7 +5905,9 @@ static void AnimLockOnTarget_Step6(struct Sprite *sprite) static void AnimLockOnMoveTarget(struct Sprite *sprite) { - sprite->oam.affineParam = gBattleAnimArgs[0]; + CMD_ARGS(unk0); + + sprite->oam.affineParam = cmd->unk0; if ((s16)sprite->oam.affineParam == 1) { sprite->x -= 0x18; @@ -5939,9 +5939,11 @@ static void AnimLockOnMoveTarget(struct Sprite *sprite) static void AnimBowMon(struct Sprite *sprite) { + CMD_ARGS(unk0); + sprite->invisible = TRUE; sprite->data[0] = 0; - switch (gBattleAnimArgs[0]) + switch (cmd->unk0) { case 0: sprite->callback = AnimBowMon_Step1; @@ -6085,10 +6087,12 @@ static void AnimTipMon_Step(struct Sprite *sprite) void AnimTask_SkullBashPosition(u8 taskId) { + CMD_ARGS(unk0); + gTasks[taskId].data[0] = gBattlerSpriteIds[gBattleAnimAttacker]; gTasks[taskId].data[1] = GetBattlerSide(gBattleAnimAttacker); gTasks[taskId].data[2] = 0; - switch (gBattleAnimArgs[0]) + switch (cmd->unk0) { default: DestroyAnimVisualTask(taskId); @@ -6228,15 +6232,17 @@ static void AnimTask_SkullBashPositionReset(u8 taskId) static void AnimSlashSlice(struct Sprite *sprite) { - if (gBattleAnimArgs[0] == 0) + CMD_ARGS(unk0, unk1, unk2); + + if (cmd->unk0 == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + cmd->unk1; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + cmd->unk2; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->unk1; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->unk2; } sprite->data[0] = 0; @@ -6255,7 +6261,9 @@ static void AnimFalseSwipeSlice(struct Sprite *sprite) static void AnimFalseSwipePositionedSlice(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 48 + gBattleAnimArgs[0]; + CMD_ARGS(unk0); + + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 48 + cmd->unk0; sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); StartSpriteAnim(sprite, 1); sprite->data[0] = 0; @@ -6295,19 +6303,21 @@ void AnimFalseSwipeSlice_Step3(struct Sprite *sprite) void AnimEndureEnergy(struct Sprite *sprite) { - if (gBattleAnimArgs[0] == 0) + CMD_ARGS(unk0, unk1, unk2, unk3); + + if (cmd->unk0 == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + cmd->unk1; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + cmd->unk2; } else { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[2]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + cmd->unk1; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + cmd->unk2; } sprite->data[0] = 0; - sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[1] = cmd->unk3; sprite->callback = AnimEndureEnergy_Step; } @@ -6363,16 +6373,19 @@ static void AnimSharpenSphere_Step(struct Sprite *sprite) void AnimConversion(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1); + if (sprite->data[0] == 0) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + cmd->unk0; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + cmd->unk1; if (IsContest()) sprite->y += 10; sprite->data[0]++; } + // TODO: gBattleAnimArgs[ARG_RET_ID]? if ((u16)gBattleAnimArgs[7] == 0xFFFF) DestroyAnimSprite(sprite); } @@ -6381,6 +6394,7 @@ void AnimTask_ConversionAlphaBlend(u8 taskId) { if (gTasks[taskId].data[2] == 1) { + // TODO: gBattleAnimArgs[ARG_RET_ID]? gBattleAnimArgs[7] = 0xFFFF; gTasks[taskId].data[2]++; } @@ -6403,9 +6417,11 @@ void AnimTask_ConversionAlphaBlend(u8 taskId) static void AnimConversion2(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1, unk2); + InitSpritePosToAnimTarget(sprite, FALSE); sprite->animPaused = 1; - sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[0] = cmd->unk2; sprite->callback = AnimConversion2_Step; } @@ -6440,13 +6456,15 @@ void AnimTask_Conversion2AlphaBlend(u8 taskId) static void UNUSED AnimTask_HideBattlersHealthbox(u8 taskId) { + CMD_ARGS(unk0, unk1); + u8 i; for (i = 0; i < gBattlersCount; i++) { - if (gBattleAnimArgs[0] == TRUE && IsOnPlayerSide(i)) + if (cmd->unk0 == TRUE && IsOnPlayerSide(i)) SetHealthboxSpriteInvisible(gHealthboxSpriteIds[i]); - if (gBattleAnimArgs[1] == TRUE && !IsOnPlayerSide(i)) + if (cmd->unk1 == TRUE && !IsOnPlayerSide(i)) SetHealthboxSpriteInvisible(gHealthboxSpriteIds[i]); } @@ -6466,6 +6484,8 @@ static void UNUSED AnimTask_ShowBattlersHealthbox(u8 taskId) // args[1] - sprite y static void AnimMoon(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1); + if (IsContest()) { sprite->x = 48; @@ -6473,8 +6493,8 @@ static void AnimMoon(struct Sprite *sprite) } else { - sprite->x = gBattleAnimArgs[0]; - sprite->y = gBattleAnimArgs[1]; + sprite->x = cmd->unk0; + sprite->y = cmd->unk1; } sprite->oam.shape = SPRITE_SHAPE(64x64); @@ -6491,8 +6511,10 @@ static void AnimMoon_Step(struct Sprite *sprite) static void AnimMoonlightSparkle(struct Sprite *sprite) { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; - sprite->y = gBattleAnimArgs[1]; + CMD_ARGS(unk0, unk1); + + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + cmd->unk0; + sprite->y = cmd->unk1; sprite->data[0] = 0; sprite->data[1] = 0; sprite->data[2] = 0; @@ -6624,16 +6646,18 @@ static void AnimTask_MoonlightEndFade_Step(u8 taskId) static void AnimHornHit(struct Sprite *sprite) { - if (gBattleAnimArgs[2] < 2) - gBattleAnimArgs[2] = 2; + CMD_ARGS(unk0, unk1, unk2); - if (gBattleAnimArgs[2] > 0x7F) - gBattleAnimArgs[2] = 0x7F; + if (cmd->unk2 < 2) + cmd->unk2 = 2; + + if (cmd->unk2 > 0x7F) + cmd->unk2 = 0x7F; sprite->data[0] = 0; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; + sprite->data[1] = cmd->unk2; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->unk0; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->unk1; sprite->data[6] = sprite->x; sprite->data[7] = sprite->y; if (IsContest()) @@ -7131,16 +7155,18 @@ void AnimTask_MusicNotesClearRainbowBlend(u8 taskId) static void AnimWavyMusicNotes(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1, unk2); + u8 index; u8 x, y; SetSpriteCoordsToAnimAttackerCoords(sprite); - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - if ((index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[1]][0])) != 0xFF) + StartSpriteAnim(sprite, cmd->unk0); + if ((index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[cmd->unk1][0])) != 0xFF) sprite->oam.paletteNum = index; - sprite->sBlendTableIdx = gBattleAnimArgs[1]; + sprite->sBlendTableIdx = cmd->unk1; sprite->sBlendTimer = 0; - sprite->sBlendCycleTime = gBattleAnimArgs[2]; + sprite->sBlendCycleTime = cmd->unk2; if (IsContest()) { x = 48; @@ -7209,18 +7235,20 @@ static void AnimWavyMusicNotes_Step(struct Sprite *sprite) static void AnimFlyingMusicNotes(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1, unk2); + if (!IsOnPlayerSide(gBattleAnimAttacker)) gBattleAnimArgs[1] *= -1; - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; - StartSpriteAnim(sprite, gBattleAnimArgs[0]); + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + cmd->unk1; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + cmd->unk2; + StartSpriteAnim(sprite, cmd->unk0); sprite->data[2] = 0; sprite->data[3] = 0; sprite->data[4] = sprite->x << 4; sprite->data[5] = sprite->y << 4; - sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; - sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; + sprite->data[6] = (cmd->unk1 << 4) / 5; + sprite->data[7] = (cmd->unk2 << 7) / 5; sprite->callback = AnimFlyingMusicNotes_Step; } @@ -7245,8 +7273,10 @@ static void AnimFlyingMusicNotes_Step(struct Sprite *sprite) static void AnimBellyDrumHand(struct Sprite *sprite) { + CMD_ARGS(unk0); + s16 a; - if (gBattleAnimArgs[0] == 1) + if (cmd->unk0 == 1) { sprite->oam.matrixNum = ST_OAM_HFLIP; a = 16; @@ -7265,23 +7295,25 @@ static void AnimBellyDrumHand(struct Sprite *sprite) void AnimSlowFlyingMusicNotes(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1, unk2, unk3); + s16 xDiff; u8 index; SetSpriteCoordsToAnimAttackerCoords(sprite); sprite->y += 8; - StartSpriteAnim(sprite, gBattleAnimArgs[1]); - index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[2]][0]); + StartSpriteAnim(sprite, cmd->unk1); + index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[cmd->unk2][0]); if (index != 0xFF) sprite->oam.paletteNum = index; - xDiff = (gBattleAnimArgs[0] == 0) ? -32 : 32; + xDiff = (cmd->unk0 == 0) ? -32 : 32; sprite->data[0] = 40; sprite->data[1] = sprite->x; sprite->data[2] = xDiff + sprite->data[1]; sprite->data[3] = sprite->y; sprite->data[4] = sprite->data[3] - 40; InitAnimLinearTranslation(sprite); - sprite->data[5] = gBattleAnimArgs[3]; + sprite->data[5] = cmd->unk3; sprite->callback = AnimSlowFlyingMusicNotes_Step; } @@ -7316,16 +7348,18 @@ void SetSpriteNextToMonHead(u8 battler, struct Sprite *sprite) void AnimThoughtBubble(struct Sprite *sprite) { + CMD_ARGS(unk0, unk1); + u8 animNum; u8 battler; - if (gBattleAnimArgs[0] == 0) + if (cmd->unk0 == 0) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; SetSpriteNextToMonHead(battler, sprite); animNum = (IsOnPlayerSide(battler)) ? 0 : 1; - sprite->data[0] = gBattleAnimArgs[1]; + sprite->data[0] = cmd->unk1; sprite->data[1] = animNum + 2; StartSpriteAnim(sprite, animNum); StoreSpriteCallbackInData6(sprite, AnimThoughtBubble_Step); @@ -7344,8 +7378,10 @@ static void AnimThoughtBubble_Step(struct Sprite *sprite) void AnimMetronomeFinger(struct Sprite *sprite) { + CMD_ARGS(unk0); + u8 battler; - if (gBattleAnimArgs[0] == 0) + if (cmd->unk0 == 0) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; @@ -7368,8 +7404,10 @@ static void AnimMetronomeFinger_Step(struct Sprite *sprite) void AnimFollowMeFinger(struct Sprite *sprite) { + CMD_ARGS(unk0); + u8 battler; - if (gBattleAnimArgs[0] == 0) + if (cmd->unk0 == 0) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; @@ -7426,8 +7464,10 @@ static void AnimFollowMeFinger_Step2(struct Sprite *sprite) static void AnimTauntFinger(struct Sprite *sprite) { + CMD_ARGS(unk0); + u8 battler; - if (gBattleAnimArgs[0] == 0) + if (cmd->unk0 == 0) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c index cc55e63b0d..3beed53381 100644 --- a/src/battle_anim_normal.c +++ b/src/battle_anim_normal.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle_anim.h" +#include "battle_anim_internal.h" #include "palette.h" #include "random.h" #include "task.h" @@ -339,29 +340,26 @@ static void AnimMovePowerSwapGuardSwap(struct Sprite *sprite) } // Moves a spinning duck around the mon's head. -// arg 0: initial x pixel offset -// arg 1: initial y pixel offset -// arg 2: initial wave offset -// arg 3: wave period (higher means faster wave) -// arg 4: duration static void AnimConfusionDuck(struct Sprite *sprite) { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; + CMD_ARGS(x, y, waveOffset, wavePeriod, duration); + + sprite->x += cmd->x; + sprite->y += cmd->y; + sprite->data[0] = cmd->waveOffset; if (!IsOnPlayerSide(gBattleAnimAttacker)) { - sprite->data[1] = -gBattleAnimArgs[3]; + sprite->data[1] = -cmd->wavePeriod; sprite->data[4] = 1; } else { - sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[1] = cmd->wavePeriod; sprite->data[4] = 0; StartSpriteAnim(sprite, 1); } - sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[3] = cmd->duration; sprite->callback = AnimConfusionDuck_Step; sprite->callback(sprite); } @@ -382,15 +380,12 @@ static void AnimConfusionDuck_Step(struct Sprite *sprite) } // Performs a simple color blend on a specified sprite. -// arg 0: palette selector -// arg 1: delay -// arg 2: start blend amount -// arg 3: end blend amount -// arg 4: blend color static void AnimSimplePaletteBlend(struct Sprite *sprite) { - u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); - BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]); + CMD_ARGS(selector, delay, initialBlendY, targetBlendY, color); + + u32 selectedPalettes = UnpackSelectedBattlePalettes(cmd->selector); + BeginNormalPaletteFade(selectedPalettes, cmd->delay, cmd->initialBlendY, cmd->targetBlendY, cmd->color); sprite->invisible = TRUE; sprite->callback = AnimSimplePaletteBlend_Step; } @@ -441,21 +436,32 @@ static void AnimSimplePaletteBlend_Step(struct Sprite *sprite) DestroyAnimSprite(sprite); } +#define sTimer data[0] +#define sDelay data[1] +#define sNumBlends data[2] +#define sColor1 data[3] +#define sBlendY1 data[4] +#define sColor2 data[5] +#define sBlendY2 data[6] +#define sPaletteSelector data[7] + static void AnimComplexPaletteBlend(struct Sprite *sprite) { + CMD_ARGS(selector, delay, numBlends, color1, blendY1, color2, blendY2); + u32 selectedPalettes; - sprite->data[0] = gBattleAnimArgs[1]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = gBattleAnimArgs[2]; - sprite->data[3] = gBattleAnimArgs[3]; - sprite->data[4] = gBattleAnimArgs[4]; - sprite->data[5] = gBattleAnimArgs[5]; - sprite->data[6] = gBattleAnimArgs[6]; - sprite->data[7] = gBattleAnimArgs[0]; + sprite->sTimer = cmd->delay; + sprite->sDelay = cmd->delay; + sprite->sNumBlends = cmd->numBlends; + sprite->sColor1 = cmd->color1; + sprite->sBlendY1 = cmd->blendY1; + sprite->sColor2 = cmd->color2; + sprite->sBlendY2 = cmd->blendY2; + sprite->sPaletteSelector = cmd->selector; - selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); - BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]); + selectedPalettes = UnpackSelectedBattlePalettes(sprite->sPaletteSelector); + BlendPalettes(selectedPalettes, cmd->blendY1, cmd->color1); sprite->invisible = TRUE; sprite->callback = AnimComplexPaletteBlend_Step1; } @@ -464,30 +470,30 @@ static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite) { u32 selectedPalettes; - if (sprite->data[0] > 0) + if (sprite->sTimer > 0) { - sprite->data[0]--; + sprite->sTimer--; return; } if (gPaletteFade.active) return; - if (sprite->data[2] == 0) + if (sprite->sNumBlends == 0) { sprite->callback = AnimComplexPaletteBlend_Step2; return; } - selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); - if (sprite->data[1] & 0x100) - BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]); + selectedPalettes = UnpackSelectedBattlePalettes(sprite->sPaletteSelector); + if (sprite->sDelay & 0x100) + BlendPalettes(selectedPalettes, sprite->sBlendY1, sprite->sColor1); else - BlendPalettes(selectedPalettes, sprite->data[6], sprite->data[5]); + BlendPalettes(selectedPalettes, sprite->sBlendY2, sprite->sColor2); - sprite->data[1] ^= 0x100; - sprite->data[0] = sprite->data[1] & 0xFF; - sprite->data[2]--; + sprite->sDelay ^= 0x100; + sprite->sTimer = sprite->sDelay & 0xFF; + sprite->sNumBlends--; } static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite) @@ -496,16 +502,27 @@ static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite) if (!gPaletteFade.active) { - selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattlePalettes(sprite->sPaletteSelector); BlendPalettes(selectedPalettes, 0, 0); DestroyAnimSprite(sprite); } } +#undef sTimer +#undef sDelay +#undef sNumBlends +#undef sColor1 +#undef sBlendY1 +#undef sColor2 +#undef sBlendY2 +#undef sPaletteSelector + static void AnimCirclingSparkle(struct Sprite *sprite) { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; + CMD_ARGS(x, y); + + sprite->x += cmd->x; + sprite->y += cmd->y; sprite->data[0] = 0; sprite->data[1] = 10; sprite->data[2] = 8; @@ -533,12 +550,14 @@ static void AnimCirclingSparkle(struct Sprite *sprite) // Many uses of this task only set a tNumBlends of 2, which has the effect of blending to a color and back once void AnimTask_BlendColorCycle(u8 taskId) { - gTasks[taskId].tPalSelector = gBattleAnimArgs[0]; - gTasks[taskId].tDelay = gBattleAnimArgs[1]; - gTasks[taskId].tNumBlends = gBattleAnimArgs[2]; - gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3]; - gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4]; - gTasks[taskId].tBlendColor = gBattleAnimArgs[5]; + CMD_ARGS(selector, delay, numBlends, initialBlendY, targetBlendY, color); + + gTasks[taskId].tPalSelector = cmd->selector; + gTasks[taskId].tDelay = cmd->delay; + gTasks[taskId].tNumBlends = cmd->numBlends; + gTasks[taskId].tInitialBlendY = cmd->initialBlendY; + gTasks[taskId].tTargetBlendY = cmd->targetBlendY; + gTasks[taskId].tBlendColor = cmd->color; gTasks[taskId].tRestoreBlend = FALSE; BlendColorCycle(taskId, 0, gTasks[taskId].tTargetBlendY); gTasks[taskId].func = AnimTask_BlendColorCycleLoop; @@ -593,15 +612,17 @@ static void AnimTask_BlendColorCycleLoop(u8 taskId) // See AnimTask_BlendColorCycle. Same, but excludes Attacker and Target void AnimTask_BlendColorCycleExclude(u8 taskId) { + CMD_ARGS(unk0, delay, numBlends, initialBlendY, targetBlendY, color); + int battler; u32 selectedPalettes = 0; - gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].tDelay = gBattleAnimArgs[1]; - gTasks[taskId].tNumBlends = gBattleAnimArgs[2]; - gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3]; - gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4]; - gTasks[taskId].tBlendColor = gBattleAnimArgs[5]; + gTasks[taskId].data[0] = cmd->unk0; + gTasks[taskId].tDelay = cmd->delay; + gTasks[taskId].tNumBlends = cmd->numBlends; + gTasks[taskId].tInitialBlendY = cmd->initialBlendY; + gTasks[taskId].tTargetBlendY = cmd->targetBlendY; + gTasks[taskId].tBlendColor = cmd->color; gTasks[taskId].tRestoreBlend = 0; for (battler = 0; battler < gBattlersCount; battler++) @@ -610,7 +631,7 @@ void AnimTask_BlendColorCycleExclude(u8 taskId) selectedPalettes |= 1 << (battler + 16); } - if (gBattleAnimArgs[0] == 1) + if (cmd->unk0 == 1) selectedPalettes |= 0xE; gTasks[taskId].tPalSelectorHi = selectedPalettes >> 16; @@ -668,12 +689,14 @@ static void AnimTask_BlendColorCycleExcludeLoop(u8 taskId) // See AnimTask_BlendColorCycle. Same, but selects palette by ANIM_TAG_* void AnimTask_BlendColorCycleByTag(u8 taskId) { - gTasks[taskId].tPalTag = gBattleAnimArgs[0]; - gTasks[taskId].tDelay = gBattleAnimArgs[1]; - gTasks[taskId].tNumBlends = gBattleAnimArgs[2]; - gTasks[taskId].tInitialBlendY = gBattleAnimArgs[3]; - gTasks[taskId].tTargetBlendY = gBattleAnimArgs[4]; - gTasks[taskId].tBlendColor = gBattleAnimArgs[5]; + CMD_ARGS(tag, delay, numBlends, initialBlendY, targetBlendY, color); + + gTasks[taskId].tPalTag = cmd->tag; + gTasks[taskId].tDelay = cmd->delay; + gTasks[taskId].tNumBlends = cmd->numBlends; + gTasks[taskId].tInitialBlendY = cmd->initialBlendY; + gTasks[taskId].tTargetBlendY = cmd->targetBlendY; + gTasks[taskId].tBlendColor = cmd->color; gTasks[taskId].tRestoreBlend = FALSE; BlendColorCycleByTag(taskId, 0, gTasks[taskId].tTargetBlendY); @@ -738,26 +761,36 @@ static void AnimTask_BlendColorCycleByTagLoop(u8 taskId) #undef tPalSelectorLo // Flashes the specified anim tag with given color. Used e.g. to flash the particles red in Hyper Beam +#define tTimer data[0] +#define tDelay data[1] +#define tNumBlends data[2] +#define tColor1 data[3] +#define tBlendY1 data[4] +#define tColor2 data[5] +#define tBlendY2 data[6] +#define tAnimTag data[7] void AnimTask_FlashAnimTagWithColor(u8 taskId) { + CMD_ARGS(tag, delay, numBlends, color1, blendY1, color2, blendY2); + u8 paletteIndex; - gTasks[taskId].data[0] = gBattleAnimArgs[1]; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[2] = gBattleAnimArgs[2]; - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - gTasks[taskId].data[4] = gBattleAnimArgs[4]; - gTasks[taskId].data[5] = gBattleAnimArgs[5]; - gTasks[taskId].data[6] = gBattleAnimArgs[6]; - gTasks[taskId].data[7] = gBattleAnimArgs[0]; + gTasks[taskId].tTimer = cmd->delay; + gTasks[taskId].tDelay = cmd->delay; + gTasks[taskId].tNumBlends = cmd->numBlends; + gTasks[taskId].tColor1 = cmd->color1; + gTasks[taskId].tBlendY1 = cmd->blendY1; + gTasks[taskId].tColor2 = cmd->color2; + gTasks[taskId].tBlendY2 = cmd->blendY2; + gTasks[taskId].tAnimTag = cmd->tag; - paletteIndex = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); + paletteIndex = IndexOfSpritePaletteTag(cmd->tag); BeginNormalPaletteFade( 1 << (paletteIndex + 16), 0, - gBattleAnimArgs[4], - gBattleAnimArgs[4], - gBattleAnimArgs[3]); + cmd->blendY1, + cmd->blendY1, + cmd->color1); gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step1; } @@ -766,44 +799,44 @@ static void AnimTask_FlashAnimTagWithColor_Step1(u8 taskId) { u32 selectedPalettes; - if (gTasks[taskId].data[0] > 0) + if (gTasks[taskId].tTimer > 0) { - gTasks[taskId].data[0]--; + gTasks[taskId].tTimer--; return; } if (gPaletteFade.active) return; - if (gTasks[taskId].data[2] == 0) + if (gTasks[taskId].tNumBlends == 0) { gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step2; return; } - selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16); - if (gTasks[taskId].data[1] & 0x100) + selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].tAnimTag) + 16); + if (gTasks[taskId].tDelay & 0x100) { BeginNormalPaletteFade( selectedPalettes, 0, - gTasks[taskId].data[4], - gTasks[taskId].data[4], - gTasks[taskId].data[3]); + gTasks[taskId].tBlendY1, + gTasks[taskId].tBlendY1, + gTasks[taskId].tColor1); } else { BeginNormalPaletteFade( selectedPalettes, 0, - gTasks[taskId].data[6], - gTasks[taskId].data[6], - gTasks[taskId].data[5]); + gTasks[taskId].tBlendY2, + gTasks[taskId].tBlendY2, + gTasks[taskId].tColor2); } - gTasks[taskId].data[1] ^= 0x100; - gTasks[taskId].data[0] = gTasks[taskId].data[1] & 0xFF; - gTasks[taskId].data[2]--; + gTasks[taskId].tDelay ^= 0x100; + gTasks[taskId].tTimer = gTasks[taskId].tDelay & 0xFF; + gTasks[taskId].tNumBlends--; } static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId) @@ -812,25 +845,37 @@ static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId) if (!gPaletteFade.active) { - selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16); + selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].tAnimTag) + 16); BeginNormalPaletteFade(selectedPalettes, 0, 0, 0, RGB_BLACK); DestroyAnimVisualTask(taskId); } } +#undef tTimer +#undef tDelay +#undef tNumBlends +#undef tColor1 +#undef tBlendY1 +#undef tColor2 +#undef tBlendY2 +#undef tAnimTag + +// This function is different compared to pret, and flagsScenery doesn't properly describe what the variable is doing on expansion void AnimTask_InvertScreenColor(u8 taskId) { + CMD_ARGS(flagsScenery); + u32 selectedPalettes = 0; - if (gBattleAnimArgs[0] & 0x1) + if (cmd->flagsScenery & 0x1) selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); - if (gBattleAnimArgs[0] & 0x2) + if (cmd->flagsScenery & 0x2) selectedPalettes |= (0x10000 << gBattleAnimAttacker); - if (gBattleAnimArgs[0] & 0x4) + if (cmd->flagsScenery & 0x4) selectedPalettes |= (0x10000 << gBattleAnimTarget); - if (gBattleAnimArgs[0] & 0x8 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimTarget))) + if (cmd->flagsScenery & 0x8 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimTarget))) selectedPalettes |= (0x10000 << BATTLE_PARTNER(gBattleAnimTarget)); - if (gBattleAnimArgs[0] & 0x10 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimAttacker))) + if (cmd->flagsScenery & 0x10 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimAttacker))) selectedPalettes |= (0x10000 << BATTLE_PARTNER(gBattleAnimAttacker)); InvertPlttBuffer(selectedPalettes); @@ -848,6 +893,8 @@ void AnimTask_InvertScreenColor(u8 taskId) #define tColorB data[7] void AnimTask_TintPalettes(u8 taskId) { + CMD_ARGS(flagsScenery, flagsAttacker, flagsTarget, duration, r, g, b); + u8 attackerBattler; u8 targetBattler; u8 paletteIndex; @@ -855,13 +902,13 @@ void AnimTask_TintPalettes(u8 taskId) if (gTasks[taskId].tTimer == 0) { - gTasks[taskId].tFlagsScenery = gBattleAnimArgs[0]; - gTasks[taskId].tFlagsAttacker = gBattleAnimArgs[1]; - gTasks[taskId].tFlagsTarget = gBattleAnimArgs[2]; - gTasks[taskId].tLength = gBattleAnimArgs[3]; - gTasks[taskId].tColorR = gBattleAnimArgs[4]; - gTasks[taskId].tColorG = gBattleAnimArgs[5]; - gTasks[taskId].tColorB = gBattleAnimArgs[6]; + gTasks[taskId].tFlagsScenery = cmd->flagsScenery; + gTasks[taskId].tFlagsAttacker = cmd->flagsAttacker; + gTasks[taskId].tFlagsTarget = cmd->flagsTarget; + gTasks[taskId].tLength = cmd->duration; + gTasks[taskId].tColorR = cmd->r; + gTasks[taskId].tColorG = cmd->g; + gTasks[taskId].tColorB = cmd->b; } gTasks[taskId].tTimer++; @@ -899,25 +946,34 @@ void AnimTask_TintPalettes(u8 taskId) #undef tColorG #undef tColorB +#define sShakeVelocity data[0] +#define sShakeTimer data[1] +#define sShakeDuration data[2] +#define sTimer data[3] +#define sOriginalValue data[4] +#define sType data[5] +#define sShakePtrLo data[6] +#define sShakePtrHi data[7] + static void AnimShakeMonOrBattlePlatforms(struct Sprite *sprite) { - u16 var0; + CMD_ARGS(velocity, shakeTimer, shakeDuration, type, battlerSelector); sprite->invisible = TRUE; - sprite->data[0] = -gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = gBattleAnimArgs[1]; - sprite->data[3] = gBattleAnimArgs[2]; + sprite->sShakeVelocity = -cmd->velocity; + sprite->sShakeTimer = cmd->shakeTimer; + sprite->sShakeDuration = cmd->shakeTimer; + sprite->sTimer = cmd->shakeDuration; - switch (gBattleAnimArgs[3]) + switch (cmd->type) { - case 0: + case SHAKE_BG_X: StoreSpriteCallbackInData6(sprite, (void *)&gBattle_BG3_X); break; - case 1: + case SHAKE_BG_Y: StoreSpriteCallbackInData6(sprite, (void *)&gBattle_BG3_Y); break; - case 2: + case SHAKE_MON_X: StoreSpriteCallbackInData6(sprite, (void *)&gSpriteCoordOffsetX); break; default: @@ -925,10 +981,9 @@ static void AnimShakeMonOrBattlePlatforms(struct Sprite *sprite) break; } - sprite->data[4] = *(u16 *)(sprite->data[6] | (sprite->data[7] << 16)); - sprite->data[5] = gBattleAnimArgs[3]; - var0 = sprite->data[5] - 2; - if (var0 < 2) + sprite->sOriginalValue = *(u16 *)(sprite->sShakePtrLo | (sprite->sShakePtrHi << 16)); + sprite->sType = cmd->type; + if (sprite->sType == SHAKE_MON_X || sprite->sType == SHAKE_MON_Y) AnimShakeMonOrBattlePlatforms_UpdateCoordOffsetEnabled(); sprite->callback = AnimShakeMonOrBattlePlatforms_Step; @@ -937,27 +992,25 @@ static void AnimShakeMonOrBattlePlatforms(struct Sprite *sprite) static void AnimShakeMonOrBattlePlatforms_Step(struct Sprite *sprite) { u8 i; - u16 var0; - if (sprite->data[3] > 0) + if (sprite->sTimer > 0) { - sprite->data[3]--; - if (sprite->data[1] > 0) + sprite->sTimer--; + if (sprite->sShakeTimer > 0) { - sprite->data[1]--; + sprite->sShakeTimer--; } else { - sprite->data[1] = sprite->data[2]; - *(u16 *)(sprite->data[6] | (sprite->data[7] << 16)) += sprite->data[0]; - sprite->data[0] = -sprite->data[0]; + sprite->sShakeTimer = sprite->sShakeDuration; + *(u16 *)(sprite->sShakePtrLo | (sprite->sShakePtrHi << 16)) += sprite->sShakeVelocity; + sprite->sShakeVelocity = -sprite->sShakeVelocity; } } else { - *(u16 *)(sprite->data[6] | (sprite->data[7] << 16)) = sprite->data[4]; - var0 = sprite->data[5] - 2; - if (var0 < 2) + *(u16 *)(sprite->sShakePtrLo | (sprite->sShakePtrHi << 16)) = sprite->sOriginalValue; + if (sprite->sType == SHAKE_MON_X || sprite->sType == SHAKE_MON_Y) { for (i = 0; i < gBattlersCount; i++) gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = FALSE; @@ -969,23 +1022,35 @@ static void AnimShakeMonOrBattlePlatforms_Step(struct Sprite *sprite) static void AnimShakeMonOrBattlePlatforms_UpdateCoordOffsetEnabled(void) { + // Matches AnimShakeMonOrBattlePlatforms. + CMD_ARGS(velocity, shakeDuration, duration, type, battlerSelector); + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = FALSE; gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = FALSE; - if (gBattleAnimArgs[4] == 2) + if (cmd->battlerSelector == 2) { gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE; gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE; } else { - if (gBattleAnimArgs[4] == 0) + if (cmd->battlerSelector == 0) gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE; else gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE; } } +#undef sShakeVelocity +#undef sShakeTimer +#undef sShakeDuration +#undef sTimer +#undef sOriginalValue +#undef sType +#undef sShakePtrLo +#undef sShakePtrHi + // Task data for AnimTask_ShakeBattlePlatforms #define tXOffset data[0] #define tYOffset data[1] @@ -994,19 +1059,17 @@ static void AnimShakeMonOrBattlePlatforms_UpdateCoordOffsetEnabled(void) #define tShakeDelay data[8] // Can shake battle platforms back and forth on the X or down and back to original pos on Y (cant shake up from orig pos) -// arg0: x offset of shake -// arg1: y offset of shake -// arg2: number of shakes -// arg3: time between shakes void AnimTask_ShakeBattlePlatforms(u8 taskId) { - gTasks[taskId].tXOffset = gBattleAnimArgs[0]; - gTasks[taskId].tYOffset = gBattleAnimArgs[1]; - gTasks[taskId].tNumShakes = gBattleAnimArgs[2]; - gTasks[taskId].tTimer = gBattleAnimArgs[3]; - gTasks[taskId].tShakeDelay = gBattleAnimArgs[3]; - gBattle_BG3_X = gBattleAnimArgs[0]; - gBattle_BG3_Y = gBattleAnimArgs[1]; + CMD_ARGS(xOffset, yOffset, shakes, delay); + + gTasks[taskId].tXOffset = cmd->xOffset; + gTasks[taskId].tYOffset = cmd->yOffset; + gTasks[taskId].tNumShakes = cmd->shakes; + gTasks[taskId].tTimer = cmd->delay; + gTasks[taskId].tShakeDelay = cmd->delay; + gBattle_BG3_X = cmd->xOffset; + gBattle_BG3_Y = cmd->yOffset; gTasks[taskId].func = AnimTask_ShakeBattlePlatforms_Step; gTasks[taskId].func(taskId); } @@ -1051,8 +1114,10 @@ static void AnimTask_ShakeBattlePlatforms_Step(u8 taskId) // args[3] - affine anim number void AnimHitSplatBasic(struct Sprite *sprite) { - StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); - if (gBattleAnimArgs[2] == ANIM_ATTACKER) + CMD_ARGS(x, y, relativeTo, animation); + + StartSpriteAffineAnim(sprite, cmd->animation); + if (cmd->relativeTo == ANIM_ATTACKER) InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); @@ -1061,16 +1126,18 @@ void AnimHitSplatBasic(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -// Same as basic hit splat but takes a length of time to persist for (arg4) +// Same as basic hit splat but takes a length of time to persist for. static void AnimHitSplatPersistent(struct Sprite *sprite) { - StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); - if (gBattleAnimArgs[2] == ANIM_ATTACKER) + CMD_ARGS(x, y, relativeTo, animation, duration); + + StartSpriteAffineAnim(sprite, cmd->animation); + if (cmd->relativeTo == ANIM_ATTACKER) InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); - sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[0] = cmd->duration; sprite->callback = RunStoredCallbackWhenAffineAnimEnds; StoreSpriteCallbackInData6(sprite, DestroyAnimSpriteAfterTimer); } @@ -1079,20 +1146,25 @@ static void AnimHitSplatPersistent(struct Sprite *sprite) // Used by Twineedle and Spike Cannon static void AnimHitSplatHandleInvert(struct Sprite *sprite) { + // Matches AnimHitSplatBasic. + CMD_ARGS(x, y, relativeTo, animation); + if (!IsOnPlayerSide(gBattleAnimAttacker) && !IsContest()) - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + cmd->y = -cmd->y; AnimHitSplatBasic(sprite); } void AnimHitSplatRandom(struct Sprite *sprite) { - if (gBattleAnimArgs[1] == -1) - gBattleAnimArgs[1] = Random2() & 3; + CMD_ARGS(relativeTo, animation); - if (!InitSpritePosToAnimBattler(gBattleAnimArgs[0], sprite, FALSE)) + if (cmd->animation == -1) + cmd->animation = Random2() & 3; + + if (!InitSpritePosToAnimBattler(cmd->relativeTo, sprite, FALSE)) return; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]); + StartSpriteAffineAnim(sprite, cmd->animation); sprite->x2 += (Random2() % 48) - 24; sprite->y2 += (Random2() % 24) - 12; @@ -1103,32 +1175,38 @@ void AnimHitSplatRandom(struct Sprite *sprite) void AnimHitSplatOnMonEdge(struct Sprite *sprite) { - sprite->data[0] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + CMD_ARGS(relativeTo, x, y, animation); + + sprite->data[0] = GetAnimBattlerSpriteId(cmd->relativeTo); sprite->x = gSprites[sprite->data[0]].x + gSprites[sprite->data[0]].x2; sprite->y = gSprites[sprite->data[0]].y + gSprites[sprite->data[0]].y2; - sprite->x2 = gBattleAnimArgs[1]; - sprite->y2 = gBattleAnimArgs[2]; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + sprite->x2 = cmd->x; + sprite->y2 = cmd->y; + StartSpriteAffineAnim(sprite, cmd->animation); StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } void AnimCrossImpact(struct Sprite *sprite) { - if (gBattleAnimArgs[2] == ANIM_ATTACKER) + CMD_ARGS(x, y, relativeTo, duration); + + if (cmd->relativeTo == ANIM_ATTACKER) InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); - sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[0] = cmd->duration; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); sprite->callback = WaitAnimForDuration; } void AnimFlashingHitSplat(struct Sprite *sprite) { - StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); - if (gBattleAnimArgs[2] == ANIM_ATTACKER) + CMD_ARGS(x, y, relativeTo, animation); + + StartSpriteAffineAnim(sprite, cmd->animation); + if (cmd->relativeTo == ANIM_ATTACKER) InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); diff --git a/src/battle_end_turn.c b/src/battle_end_turn.c index 096b307b8b..9a15a33c69 100644 --- a/src/battle_end_turn.c +++ b/src/battle_end_turn.c @@ -270,7 +270,7 @@ static bool32 HandleEndTurnWish(u32 battler) s32 wishHeal = 0; gBattlerTarget = battler; PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, battler, gWishFutureKnock.wishPartyId[battler]) - if (GetConfig(CONFIG_WISH_HP_SOURCE) >= GEN_5) + if (GetConfig(B_WISH_HP_SOURCE) >= GEN_5) { if (IsOnPlayerSide(battler)) wishHeal = GetMonData(&gPlayerParty[gWishFutureKnock.wishPartyId[battler]], MON_DATA_MAX_HP) / 2; @@ -531,7 +531,7 @@ static bool32 HandleEndTurnBurn(u32 battler) && IsBattlerAlive(battler) && !IsAbilityAndRecord(battler, ability, ABILITY_MAGIC_GUARD)) { - s32 burnDamage = GetNonDynamaxMaxHP(battler) / ((GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) ? 16 : 8); + s32 burnDamage = GetNonDynamaxMaxHP(battler) / ((GetConfig(B_BURN_DAMAGE) >= GEN_7 || GetConfig(B_BURN_DAMAGE) == GEN_1) ? 16 : 8); if (ability == ABILITY_HEATPROOF) { if (burnDamage > (burnDamage / 2) + 1) // Record ability if the burn takes less damage than it normally would. @@ -556,7 +556,7 @@ static bool32 HandleEndTurnFrostbite(u32 battler) && IsBattlerAlive(battler) && !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) { - SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / ((GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) ? 16 : 8)); + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / ((GetConfig(B_BURN_DAMAGE) >= GEN_7 || GetConfig(B_BURN_DAMAGE) == GEN_1) ? 16 : 8)); BattleScriptExecute(BattleScript_FrostbiteTurnDmg); effect = TRUE; } diff --git a/src/battle_hold_effects.c b/src/battle_hold_effects.c index 9f363ea120..27b6f0247b 100644 --- a/src/battle_hold_effects.c +++ b/src/battle_hold_effects.c @@ -891,43 +891,66 @@ static u32 ItemRestorePp(u32 battler, u32 itemId, ActivationTiming timing) { enum ItemEffect effect = ITEM_NO_EFFECT; struct Pokemon *mon = GetBattlerMon(battler); - u32 i, changedPP = 0; + u32 changedPP = 0; + u32 restoreMove = MAX_MON_MOVES; + u32 missingMove = MAX_MON_MOVES; + u32 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + bool32 override = gBattleScripting.overrideBerryRequirements; enum Ability ability = GetBattlerAbility(battler); - for (i = 0; i < MAX_MON_MOVES; i++) + for (u32 i = 0; i < MAX_MON_MOVES; i++) { u32 move = GetMonData(mon, MON_DATA_MOVE1 + i); u32 currentPP = GetMonData(mon, MON_DATA_PP1 + i); - u32 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); - u32 maxPP = CalculatePPWithBonus(move, ppBonuses, i); - if (move && (currentPP == 0 || (gBattleScripting.overrideBerryRequirements && currentPP != maxPP))) + if (move == MOVE_NONE) + continue; + + if (currentPP == 0) { - u32 ppRestored = GetItemHoldEffectParam(itemId); - - if (ability == ABILITY_RIPEN) - { - ppRestored *= 2; - gBattlerAbility = battler; - } - if (currentPP + ppRestored > maxPP) - changedPP = maxPP; - else - changedPP = currentPP + ppRestored; - - PREPARE_MOVE_BUFFER(gBattleTextBuff1, move); - - if (timing == IsOnSwitchInFirstTurnActivation) - BattleScriptExecute(BattleScript_BerryPPHealEnd2); - else - BattleScriptCall(BattleScript_BerryPPHealRet); - - gBattleScripting.battler = battler; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); - MarkBattlerForControllerExec(battler); - if (MOVE_IS_PERMANENT(battler, i)) - gBattleMons[battler].pp[i] = changedPP; - effect = ITEM_PP_CHANGE; + restoreMove = i; + break; } + + if (override && missingMove == MAX_MON_MOVES) + { + u32 maxPP = CalculatePPWithBonus(move, ppBonuses, i); + if (currentPP < maxPP) + missingMove = i; + } + } + + if (restoreMove == MAX_MON_MOVES && override) + restoreMove = missingMove; + + if (restoreMove != MAX_MON_MOVES) + { + u32 move = GetMonData(mon, MON_DATA_MOVE1 + restoreMove); + u32 currentPP = GetMonData(mon, MON_DATA_PP1 + restoreMove); + u32 maxPP = CalculatePPWithBonus(move, ppBonuses, restoreMove); + u32 ppRestored = GetItemHoldEffectParam(itemId); + + if (ability == ABILITY_RIPEN) + { + ppRestored *= 2; + gBattlerAbility = battler; + } + changedPP = currentPP + ppRestored; + if (changedPP > maxPP) + changedPP = maxPP; + + PREPARE_MOVE_BUFFER(gBattleTextBuff1, move); + + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryPPHealEnd2); + else + BattleScriptCall(BattleScript_BerryPPHealRet); + + gBattleScripting.battler = battler; + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, restoreMove + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); + MarkBattlerForControllerExec(battler); + if (MOVE_IS_PERMANENT(battler, restoreMove)) + gBattleMons[battler].pp[restoreMove] = changedPP; + effect = ITEM_PP_CHANGE; } return effect; } diff --git a/src/battle_main.c b/src/battle_main.c index 3c63f3833b..d23e46797c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3010,7 +3010,7 @@ static void ClearSetBScriptingStruct(void) gBattleScripting.battleStyle = OPTIONS_BATTLE_STYLE_SET; else gBattleScripting.battleStyle = gSaveBlock2Ptr->optionsBattleStyle; - gBattleScripting.expOnCatch = (GetConfig(CONFIG_EXP_CATCH) >= GEN_6); + gBattleScripting.expOnCatch = (GetConfig(B_EXP_CATCH) >= GEN_6); gBattleScripting.specialTrainerBattleType = specialBattleType; } @@ -3304,8 +3304,10 @@ const u8* FaintClearSetData(u32 battler) gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; bool32 keepGastroAcid = gBattleMons[battler].volatiles.gastroAcid; + bool32 keepTransformed = gBattleMons[battler].volatiles.transformed; memset(&gBattleMons[battler].volatiles, 0, sizeof(struct Volatiles)); gBattleMons[battler].volatiles.gastroAcid = keepGastroAcid; // Edge case: Keep Gastro Acid if pokemon's ability can have effect after fainting, for example Innards Out. + gBattleMons[battler].volatiles.transformed = keepTransformed; // Edge case: Keep Transformed status to prevent triggering FORM_CHANGE_FAINT on transformed mons. for (i = 0; i < gBattlersCount; i++) { @@ -4106,7 +4108,7 @@ u8 IsRunningFromBattleImpossible(u32 battler) if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) return BATTLE_RUN_SUCCESS; - if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + if (GetConfig(B_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return BATTLE_RUN_SUCCESS; if (gBattleTypeFlags & BATTLE_TYPE_LINK) return BATTLE_RUN_SUCCESS; @@ -4273,7 +4275,7 @@ static void HandleTurnActionSelectionState(void) gBattleStruct->moveTarget[battler] = gBattleResources->bufferB[battler][3]; return; } - else if (GetConfig(CONFIG_ENCORE_TARGET) < GEN_5 && gDisableStructs[battler].encoredMove != MOVE_NONE) + else if (GetConfig(B_ENCORE_TARGET) < GEN_5 && gDisableStructs[battler].encoredMove != MOVE_NONE) { gChosenMoveByBattler[battler] = gDisableStructs[battler].encoredMove; gBattleStruct->chosenMovePositions[battler] = gDisableStructs[battler].encoredMovePos; @@ -4815,7 +4817,7 @@ u32 GetBattlerTotalSpeedStat(u32 battler, enum Ability ability, enum HoldEffect // paralysis drop if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && ability != ABILITY_QUICK_FEET) - speed /= GetConfig(CONFIG_PARALYSIS_SPEED) >= GEN_7 ? 2 : 4; + speed /= GetConfig(B_PARALYSIS_SPEED) >= GEN_7 ? 2 : 4; if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SWAMP) speed /= 4; @@ -4854,7 +4856,7 @@ s32 GetBattleMovePriority(u32 battler, enum Ability ability, u32 move) priority = -8; } else if (ability == ABILITY_GALE_WINGS - && (GetConfig(CONFIG_GALE_WINGS) < GEN_7 || IsBattlerAtMaxHp(battler)) + && (GetConfig(B_GALE_WINGS) < GEN_7 || IsBattlerAtMaxHp(battler)) && GetMoveType(move) == TYPE_FLYING) { priority++; @@ -5212,7 +5214,7 @@ static bool32 TryDoGimmicksBeforeMoves(void) } } - if (GetConfig(CONFIG_MEGA_EVO_TURN_ORDER) >= GEN_7) + if (GetConfig(B_MEGA_EVO_TURN_ORDER) >= GEN_7) TryChangeTurnOrder(); // This will just do nothing if no mon has mega evolved. return FALSE; } diff --git a/src/battle_pike.c b/src/battle_pike.c index 6330e04373..07eefc5ee8 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -862,7 +862,7 @@ static bool8 DoesTypePreventStatus(u16 species, u32 status) break; case STATUS1_PARALYSIS: if (GetSpeciesType(species, 0) == TYPE_GROUND || GetSpeciesType(species, 1) == TYPE_GROUND - || (GetConfig(CONFIG_PARALYZE_ELECTRIC) >= GEN_6 && (GetSpeciesType(species, 0) == TYPE_ELECTRIC || GetSpeciesType(species, 1) == TYPE_ELECTRIC))) + || (GetConfig(B_PARALYZE_ELECTRIC) >= GEN_6 && (GetSpeciesType(species, 0) == TYPE_ELECTRIC || GetSpeciesType(species, 1) == TYPE_ELECTRIC))) ret = TRUE; break; case STATUS1_BURN: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1421eaf9e6..7a29f9c5b9 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1584,11 +1584,11 @@ static const u32 sGen2CriticalHitOdds[] = {17, 32, 64, 85, 128}; // X/256 static inline u32 GetCriticalHitOdds(u32 critChance) { - if (GetConfig(CONFIG_CRIT_CHANCE) >= GEN_7) + if (GetConfig(B_CRIT_CHANCE) >= GEN_7) return sGen7CriticalHitOdds[critChance]; - if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_6) + if (GetConfig(B_CRIT_CHANCE) == GEN_6) return sGen6CriticalHitOdds[critChance]; - if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_2) + if (GetConfig(B_CRIT_CHANCE) == GEN_2) return sGen2CriticalHitOdds[critChance]; return sCriticalHitOdds[critChance]; @@ -1765,7 +1765,7 @@ static void Cmd_critcalc(void) enum Ability abilityDef = GetBattlerAbility(battlerDef); enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); - if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) + if (GetConfig(B_CRIT_CHANCE) == GEN_1) gBattleStruct->critChance[battlerDef] = CalcCritChanceStageGen1(gBattlerAttacker, battlerDef, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); else gBattleStruct->critChance[battlerDef] = CalcCritChanceStage(gBattlerAttacker, battlerDef, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); @@ -1778,9 +1778,9 @@ static void Cmd_critcalc(void) gSpecialStatuses[battlerDef].criticalHit = TRUE; else { - if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) + if (GetConfig(B_CRIT_CHANCE) == GEN_1) gSpecialStatuses[battlerDef].criticalHit = RandomChance(RNG_CRITICAL_HIT, gBattleStruct->critChance[battlerDef], 256); - else if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_2) + else if (GetConfig(B_CRIT_CHANCE) == GEN_2) gSpecialStatuses[battlerDef].criticalHit = RandomChance(RNG_CRITICAL_HIT, GetCriticalHitOdds(gBattleStruct->critChance[battlerDef]), 256); else gSpecialStatuses[battlerDef].criticalHit = RandomChance(RNG_CRITICAL_HIT, 1, GetCriticalHitOdds(gBattleStruct->critChance[battlerDef])); @@ -1949,7 +1949,7 @@ static void Cmd_adjustdamage(void) gLastUsedItem = gBattleMons[battlerDef].item; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FOE_HUNG_ON; } - else if (GetConfig(CONFIG_STURDY) >= GEN_5 && GetBattlerAbility(battlerDef) == ABILITY_STURDY && IsBattlerAtMaxHp(battlerDef)) + else if (GetConfig(B_STURDY) >= GEN_5 && GetBattlerAbility(battlerDef) == ABILITY_STURDY && IsBattlerAtMaxHp(battlerDef)) { enduredHit |= 1u << battlerDef; RecordAbilityBattle(battlerDef, ABILITY_STURDY); @@ -2418,7 +2418,7 @@ static void MoveDamageDataHpUpdate(u32 battler, u32 scriptBattler, const u8 *nex gBattleMons[battler].species = SPECIES_MIMIKYU_BUSTED_TOTEM; else gBattleMons[battler].species = SPECIES_MIMIKYU_BUSTED; - if (GetConfig(CONFIG_DISGUISE_HP_LOSS) >= GEN_8) + if (GetConfig(B_DISGUISE_HP_LOSS) >= GEN_8) SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 8); BattleScriptPush(nextInstr); gBattlescriptCurrInstr = BattleScript_TargetFormChange; @@ -2851,7 +2851,7 @@ static void Cmd_printselectionstringfromtable(void) bool32 HasBattlerActedThisTurn(u32 battler) { u32 i; - for (i = 0; i < gCurrentTurnActionNumber; i++) + for (i = 0; i <= gCurrentTurnActionNumber; i++) { if (gBattlerByTurnOrder[i] == battler) return TRUE; @@ -2882,7 +2882,7 @@ void StealTargetItem(u8 battlerStealer, u8 itemBattler) gLastUsedItem = gBattleMons[itemBattler].item; gBattleMons[itemBattler].item = ITEM_NONE; - if (GetConfig(CONFIG_STEAL_WILD_ITEMS) >= GEN_9 + if (GetConfig(B_STEAL_WILD_ITEMS) >= GEN_9 && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE)) && GetMoveEffect(gCurrentMove) == EFFECT_STEAL_ITEM && battlerStealer == gBattlerAttacker) // ensure that Pickpocket isn't activating this @@ -3094,7 +3094,7 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c case MOVE_EFFECT_PARALYSIS: case MOVE_EFFECT_TOXIC: case MOVE_EFFECT_FROSTBITE: - if (gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !primary) + if (IsSafeguardProtected(gBattlerAttacker, gEffectBattler, GetBattlerAbility(gBattlerAttacker)) && !primary) gBattlescriptCurrInstr = battleScript; else if (CanSetNonVolatileStatus( gBattlerAttacker, @@ -3108,7 +3108,7 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c case MOVE_EFFECT_CONFUSION: if (!CanBeConfused(gEffectBattler) || gBattleMons[gEffectBattler].volatiles.confusionTurns - || (gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !primary)) + || (IsSafeguardProtected(gBattlerAttacker, gEffectBattler, GetBattlerAbility(gBattlerAttacker)) && !primary)) { gBattlescriptCurrInstr = battleScript; } @@ -3236,9 +3236,9 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c else { if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_GRIP_CLAW) - gDisableStructs[gEffectBattler].wrapTurns = GetConfig(CONFIG_BINDING_TURNS) >= GEN_5 ? 7 : 5; + gDisableStructs[gEffectBattler].wrapTurns = GetConfig(B_BINDING_TURNS) >= GEN_5 ? 7 : 5; else - gDisableStructs[gEffectBattler].wrapTurns = GetConfig(CONFIG_BINDING_TURNS) >= GEN_5 ? RandomUniform(RNG_WRAP, 4, 5) : RandomUniform(RNG_WRAP, 2, 5); + gDisableStructs[gEffectBattler].wrapTurns = GetConfig(B_BINDING_TURNS) >= GEN_5 ? RandomUniform(RNG_WRAP, 4, 5) : RandomUniform(RNG_WRAP, 2, 5); gBattleMons[gEffectBattler].volatiles.wrapped = TRUE; gBattleMons[gEffectBattler].volatiles.wrappedMove = gCurrentMove; gBattleMons[gEffectBattler].volatiles.wrappedBy = gBattlerAttacker; @@ -3497,8 +3497,9 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c gBattlescriptCurrInstr = battleScript; break; case MOVE_EFFECT_INCINERATE: - if ((gBattleMons[gEffectBattler].item >= FIRST_BERRY_INDEX && gBattleMons[gEffectBattler].item <= LAST_BERRY_INDEX) - || (B_INCINERATE_GEMS >= GEN_6 && GetBattlerHoldEffect(gEffectBattler) == HOLD_EFFECT_GEMS)) + if (((gBattleMons[gEffectBattler].item >= FIRST_BERRY_INDEX && gBattleMons[gEffectBattler].item <= LAST_BERRY_INDEX) + || (B_INCINERATE_GEMS >= GEN_6 && GetBattlerHoldEffect(gEffectBattler) == HOLD_EFFECT_GEMS)) + && battlerAbility != ABILITY_STICKY_HOLD) { gLastUsedItem = gBattleMons[gEffectBattler].item; gBattleMons[gEffectBattler].item = 0; @@ -3998,7 +3999,7 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c { gBattleMons[battler].volatiles.wrapped = TRUE; if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_GRIP_CLAW) - gDisableStructs[battler].wrapTurns = (GetConfig(CONFIG_BINDING_TURNS) >= GEN_5) ? 7 : 5; + gDisableStructs[battler].wrapTurns = (GetConfig(B_BINDING_TURNS) >= GEN_5) ? 7 : 5; else gDisableStructs[battler].wrapTurns = (Random() % 2) + 4; // The Wrap effect does not expire when the user switches, so here's some cheese. @@ -5417,7 +5418,7 @@ static void Cmd_isdmgblockedbydisguise(void) gBattleMons[gBattlerAttacker].species = SPECIES_MIMIKYU_BUSTED_TOTEM; else gBattleMons[gBattlerAttacker].species = SPECIES_MIMIKYU_BUSTED; - if (GetConfig(CONFIG_DISGUISE_HP_LOSS) >= GEN_8) + if (GetConfig(B_DISGUISE_HP_LOSS) >= GEN_8) SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 8); BattleScriptPush(BattleScript_MoveEnd); gBattlescriptCurrInstr = BattleScript_TargetFormChange; @@ -5744,7 +5745,7 @@ static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move if (GetBattlerPartyState(battlerAtk)->battleBondBoost) break; - if (GetConfig(CONFIG_BATTLE_BOND) < GEN_9 && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_BATTLE_BOND) + if (GetConfig(B_BATTLE_BOND) < GEN_9 && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_BATTLE_BOND) { // TODO: Convert this to a proper FORM_CHANGE type. gLastUsedAbility = abilityAtk; @@ -5866,7 +5867,7 @@ static bool32 HandleMoveEndMoveBlock(u32 moveEffect) { StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker steals target item - if (!(GetConfig(CONFIG_STEAL_WILD_ITEMS) >= GEN_9 + if (!(GetConfig(B_STEAL_WILD_ITEMS) >= GEN_9 && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE)))) { gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS) @@ -6019,7 +6020,7 @@ static bool32 HandleMoveEndMoveBlock(u32 moveEffect) && !NoAliveMonsForEitherParty() && CompareStat(gBattlerAttacker, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(gBattlerAttacker))) { - SET_STATCHANGER(STAT_ATK, GetConfig(CONFIG_FELL_STINGER_STAT_RAISE) >= GEN_7 ? 3 : 2, FALSE); + SET_STATCHANGER(STAT_ATK, GetConfig(B_FELL_STINGER_STAT_RAISE) >= GEN_7 ? 3 : 2, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_FellStingerRaisesStat; @@ -6240,7 +6241,7 @@ static void Cmd_moveend(void) s32 healAmount = (gBattleStruct->moveDamage[gBattlerTarget] * GetMoveAbsorbPercentage(gCurrentMove) / 100); healAmount = GetDrainedBigRootHp(gBattlerAttacker, healAmount); effect = TRUE; - if ((moveEffect == EFFECT_DREAM_EATER && GetConfig(CONFIG_DREAM_EATER_LIQUID_OOZE) < GEN_5) + if ((moveEffect == EFFECT_DREAM_EATER && GetConfig(B_DREAM_EATER_LIQUID_OOZE) < GEN_5) || GetBattlerAbility(gBattlerTarget) != ABILITY_LIQUID_OOZE) { SetHealAmount(gBattlerAttacker, healAmount); @@ -6333,7 +6334,7 @@ static void Cmd_moveend(void) for (i = 0; i < gBattlersCount; i++) { if ((gSpecialStatuses[i].berryReduced - || (GetConfig(CONFIG_SYMBIOSIS_GEMS) >= GEN_7 && gSpecialStatuses[i].gemBoost)) + || (GetConfig(B_SYMBIOSIS_GEMS) >= GEN_7 && gSpecialStatuses[i].gemBoost)) && TryTriggerSymbiosis(i, BATTLE_PARTNER(i))) { BestowItem(BATTLE_PARTNER(i), i); @@ -6848,7 +6849,9 @@ static void Cmd_moveend(void) for (i = 0; i < gBattlersCount; i++) { - if (IsBattlerTurnDamaged(i) && EmergencyExitCanBeTriggered(i)) + if (!IsBattleMoveStatus(gCurrentMove) + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && EmergencyExitCanBeTriggered(i)) { emergencyExitBattlers |= 1u << i; numEmergencyExitBattlers++; @@ -7001,11 +7004,21 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_PICKPOCKET: + { + u16 attackerItem = gBattleMons[gBattlerAttacker].item; + bool32 hasPendingStolenItem = FALSE; + + if (attackerItem == ITEM_NONE + && GetMoveEffect(gCurrentMove) == EFFECT_STEAL_ITEM + && gBattleStruct->changedItems[gBattlerAttacker] != ITEM_NONE) + { + attackerItem = gBattleStruct->changedItems[gBattlerAttacker]; + hasPendingStolenItem = TRUE; + } + if (IsBattlerAlive(gBattlerAttacker) - && gBattleMons[gBattlerAttacker].item != ITEM_NONE // Attacker must be holding an item - && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & (1u << gBattlerPartyIndexes[gBattlerAttacker])) // But not knocked off - && IsMoveMakingContact(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), gCurrentMove) // Pickpocket requires contact - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) // Obviously attack needs to have worked + && attackerItem != ITEM_NONE // Attacker must have an item (including pending stolen item) + && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & (1u << gBattlerPartyIndexes[gBattlerAttacker]))) // But not knocked off { u8 battlers[4] = {0, 1, 2, 3}; SortBattlersBySpeed(battlers, FALSE); // Pickpocket activates for fastest mon without item @@ -7016,12 +7029,19 @@ static void Cmd_moveend(void) if (battler != gBattlerAttacker // Cannot pickpocket yourself && GetBattlerAbility(battler) == ABILITY_PICKPOCKET // Target must have pickpocket ability && IsBattlerTurnDamaged(battler) // Target needs to have been damaged + && IsMoveMakingContact(gBattlerAttacker, battler, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), gCurrentMove) // Pickpocket requires contact + && !(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) // Move needs to have affected this battler && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) // Subsitute unaffected && IsBattlerAlive(battler) // Battler must be alive to pickpocket && gBattleMons[battler].item == ITEM_NONE // Pickpocketer can't have an item already - && CanStealItem(battler, gBattlerAttacker, gBattleMons[gBattlerAttacker].item)) // Cannot steal plates, mega stones, etc + && CanStealItem(battler, gBattlerAttacker, attackerItem)) // Cannot steal plates, mega stones, etc { gBattlerTarget = gBattlerAbility = battler; + if (hasPendingStolenItem) + { + gBattleMons[gBattlerAttacker].item = attackerItem; + gBattleStruct->changedItems[gBattlerAttacker] = ITEM_NONE; + } // Battle scripting is super brittle so we shall do the item exchange now (if possible) if (GetBattlerAbility(gBattlerAttacker) != ABILITY_STICKY_HOLD) StealTargetItem(gBattlerTarget, gBattlerAttacker); // Target takes attacker's item @@ -7035,6 +7055,7 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; + } case MOVEEND_THIRD_MOVE_BLOCK: switch (moveEffect) { @@ -7983,7 +8004,7 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) // Starting from Gen8 - it heals only pokemon which can be healed. // In Gen5-7 the effect activates anyways. else if ((gBattleStruct->battlerState[battler].storedHealingWish) - && (GetConfig(CONFIG_HEALING_WISH_SWITCH) < GEN_8 + && (GetConfig(B_HEALING_WISH_SWITCH) < GEN_8 || gBattleMons[battler].hp != gBattleMons[battler].maxHP || gBattleMons[battler].status1 != 0)) { @@ -7992,7 +8013,7 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) gBattleStruct->battlerState[battler].storedHealingWish = FALSE; } else if ((gBattleStruct->battlerState[battler].storedLunarDance) - && (GetConfig(CONFIG_HEALING_WISH_SWITCH) < GEN_8 + && (GetConfig(B_HEALING_WISH_SWITCH) < GEN_8 || gBattleMons[battler].hp != gBattleMons[battler].maxHP || gBattleMons[battler].status1 != 0 || gBattleMons[battler].pp[0] < CalculatePPWithBonus(gBattleMons[battler].moves[0], gBattleMons[battler].ppBonuses, 0) @@ -8848,7 +8869,7 @@ static bool32 TrySymbiosis(u32 battler, u32 itemId, bool32 moveEnd) && gBattleStruct->changedItems[battler] == ITEM_NONE && GetBattlerHoldEffect(battler) != HOLD_EFFECT_EJECT_BUTTON && GetBattlerHoldEffect(battler) != HOLD_EFFECT_EJECT_PACK - && (GetConfig(CONFIG_SYMBIOSIS_GEMS) < GEN_7 || !(gSpecialStatuses[battler].gemBoost)) + && (GetConfig(B_SYMBIOSIS_GEMS) < GEN_7 || !(gSpecialStatuses[battler].gemBoost)) && GetMoveEffect(gCurrentMove) != EFFECT_FLING //Fling and damage-reducing berries are handled separately. && !gSpecialStatuses[battler].berryReduced && TryTriggerSymbiosis(battler, BATTLE_PARTNER(battler))) @@ -9442,7 +9463,7 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) DEFOG_CLEAR(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, BattleScript_SideStatusWoreOffReturn, MOVE_AURORA_VEIL); DEFOG_CLEAR(SIDE_STATUS_SAFEGUARD, safeguardTimer, BattleScript_SideStatusWoreOffReturn, MOVE_SAFEGUARD); } - if (GetConfig(CONFIG_DEFOG_EFFECT_CLEARING) >= GEN_6) + if (GetConfig(B_DEFOG_EFFECT_CLEARING) >= GEN_6) { gBattlerAttacker = i; // For correct battle string. Ally's / Foe's if (DefogClearHazards(saveBattler, i, clear)) @@ -9457,7 +9478,7 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) } return TRUE; } - if (GetConfig(CONFIG_DEFOG_EFFECT_CLEARING) >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + if (GetConfig(B_DEFOG_EFFECT_CLEARING) >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) { if (clear) { @@ -9561,7 +9582,7 @@ static bool32 IsElectricAbilityAffected(u32 battler, enum Ability ability) moveType = GetMoveType(gCurrentMove); if (moveType == TYPE_ELECTRIC - && (ability != ABILITY_LIGHTNING_ROD || GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5) + && (ability != ABILITY_LIGHTNING_ROD || GetConfig(B_REDIRECT_ABILITY_IMMUNITY) >= GEN_5) && GetBattlerAbility(battler) == ability) return TRUE; else @@ -9691,7 +9712,7 @@ static bool32 ChangeOrderTargetAfterAttacker(void) if (attackerTurnOrderNum > targetTurnOrderNum) return FALSE; if (attackerTurnOrderNum + 1 == targetTurnOrderNum) - return GetConfig(CONFIG_AFTER_YOU_TURN_ORDER) >= GEN_8; + return GetConfig(B_AFTER_YOU_TURN_ORDER) >= GEN_8; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { @@ -9734,8 +9755,8 @@ static void TryResetProtectUseCounter(u32 battler) enum BattleMoveEffects lastEffect = GetMoveEffect(lastMove); if (lastMove == MOVE_UNAVAILABLE || (!gBattleMoveEffects[lastEffect].usesProtectCounter - && ((GetConfig(CONFIG_ALLY_SWITCH_FAIL_CHANCE) >= GEN_9 && lastEffect != EFFECT_ALLY_SWITCH) - || GetConfig(CONFIG_ALLY_SWITCH_FAIL_CHANCE) < GEN_9))) + && ((GetConfig(B_ALLY_SWITCH_FAIL_CHANCE) >= GEN_9 && lastEffect != EFFECT_ALLY_SWITCH) + || GetConfig(B_ALLY_SWITCH_FAIL_CHANCE) < GEN_9))) gDisableStructs[battler].protectUses = 0; } @@ -9752,8 +9773,8 @@ static void Cmd_setprotectlike(void) notLastTurn = FALSE; if ((sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] >= RandomUniform(RNG_PROTECT_FAIL, 0, USHRT_MAX) && notLastTurn) - || (protectMethod == PROTECT_WIDE_GUARD && GetConfig(CONFIG_WIDE_GUARD) >= GEN_6) - || (protectMethod == PROTECT_QUICK_GUARD && GetConfig(CONFIG_QUICK_GUARD) >= GEN_6) + || (protectMethod == PROTECT_WIDE_GUARD && GetConfig(B_WIDE_GUARD) >= GEN_6) + || (protectMethod == PROTECT_QUICK_GUARD && GetConfig(B_QUICK_GUARD) >= GEN_6) || (protectMethod == PROTECT_CRAFTY_SHIELD)) { if (GetMoveEffect(gCurrentMove) == EFFECT_ENDURE) @@ -10210,7 +10231,7 @@ static void TryPlayStatChangeAnimation(u32 battler, enum Ability ability, u32 st } } else if (!((ability == ABILITY_KEEN_EYE || ability == ABILITY_MINDS_EYE) && currStat == STAT_ACC) - && !(GetConfig(CONFIG_ILLUMINATE_EFFECT) >= GEN_9 && ability == ABILITY_ILLUMINATE && currStat == STAT_ACC) + && !(GetConfig(B_ILLUMINATE_EFFECT) >= GEN_9 && ability == ABILITY_ILLUMINATE && currStat == STAT_ACC) && !(ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK) && !(ability == ABILITY_BIG_PECKS && currStat == STAT_DEF)) { @@ -10302,7 +10323,7 @@ static u32 ChangeStatBuffs(u32 battler, s8 statValue, enum Stat statId, union St { if (gSideTimers[GetBattlerSide(battler)].mistTimer && !flags.certain && gCurrentMove != MOVE_CURSE - && !(battler == gBattlerTarget && GetBattlerAbility(gBattlerAttacker) == ABILITY_INFILTRATOR)) + && !(battler == gBattlerTarget && GetBattlerAbility(gBattlerAttacker) == ABILITY_INFILTRATOR && !IsBattlerAlly(gBattlerAttacker, battler))) { if (flags.allowPtr) { @@ -10379,7 +10400,7 @@ static u32 ChangeStatBuffs(u32 battler, s8 statValue, enum Stat statId, union St } else if (!flags.certain && (((battlerAbility == ABILITY_KEEN_EYE || battlerAbility == ABILITY_MINDS_EYE) && statId == STAT_ACC) - || (GetConfig(CONFIG_ILLUMINATE_EFFECT) >= GEN_9 && battlerAbility == ABILITY_ILLUMINATE && statId == STAT_ACC) + || (GetConfig(B_ILLUMINATE_EFFECT) >= GEN_9 && battlerAbility == ABILITY_ILLUMINATE && statId == STAT_ACC) || (battlerAbility == ABILITY_HYPER_CUTTER && statId == STAT_ATK) || (battlerAbility == ABILITY_BIG_PECKS && statId == STAT_DEF))) { @@ -11228,8 +11249,8 @@ static void Cmd_setfocusenergy(void) } else { - if (GetConfig(CONFIG_FOCUS_ENERGY_CRIT_RATIO) >= GEN_3 - || GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) + if (GetConfig(B_FOCUS_ENERGY_CRIT_RATIO) >= GEN_3 + || GetConfig(B_CRIT_CHANCE) == GEN_1) gBattleMons[battler].volatiles.focusEnergy = TRUE; else gBattleMons[battler].volatiles.dragonCheer = TRUE; @@ -11245,6 +11266,7 @@ static void Cmd_transformdataexecution(void) gChosenMove = MOVE_UNAVAILABLE; gBattlescriptCurrInstr = cmd->nextInstr; if (gBattleMons[gBattlerTarget].volatiles.transformed + || DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove) || gBattleStruct->illusion[gBattlerTarget].state == ILLUSION_ON || IsSemiInvulnerable(gBattlerTarget, EXCLUDE_COMMANDER)) { @@ -11565,7 +11587,7 @@ static void Cmd_settypetorandomresistance(void) u32 moveToCheck; u32 typeToCheck; - if (GetConfig(CONFIG_UPDATED_CONVERSION_2) < GEN_5) + if (GetConfig(B_UPDATED_CONVERSION_2) < GEN_5) { moveToCheck = gLastLandedMoves[gBattlerAttacker]; if (GetMoveEffect(moveToCheck) == EFFECT_STRUGGLE) @@ -11730,7 +11752,7 @@ static void Cmd_settailwind(void) if (!(gSideStatuses[side] & SIDE_STATUS_TAILWIND)) { gSideStatuses[side] |= SIDE_STATUS_TAILWIND; - gSideTimers[side].tailwindTimer = (GetConfig(CONFIG_TAILWIND_TURNS) >= GEN_5 ? 4 : 3); + gSideTimers[side].tailwindTimer = (GetConfig(B_TAILWIND_TURNS) >= GEN_5 ? 4 : 3); gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -11820,8 +11842,8 @@ static void Cmd_healpartystatus(void) struct Pokemon *party = GetBattlerParty(gBattlerAttacker); bool32 isSoundMove = IsSoundMove(gCurrentMove); - if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 - || GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 + if (GetConfig(B_HEAL_BELL_SOUNDPROOF) == GEN_5 + || GetConfig(B_HEAL_BELL_SOUNDPROOF) >= GEN_8 || !(isSoundMove && GetBattlerAbility(gBattlerAttacker) == ABILITY_SOUNDPROOF)) { if (isSoundMove) @@ -11841,7 +11863,7 @@ static void Cmd_healpartystatus(void) if (IsBattlerAlive(partner)) { - if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + if (GetConfig(B_HEAL_BELL_SOUNDPROOF) == GEN_5 || !(isSoundMove && GetBattlerAbility(partner) == ABILITY_SOUNDPROOF)) { gBattleMons[partner].status1 = 0; @@ -11867,10 +11889,10 @@ static void Cmd_healpartystatus(void) bool32 isAttacker = gBattlerPartyIndexes[gBattlerAttacker] == i; bool32 isDoublesPartner = gBattlerPartyIndexes[partner] == i && IsBattlerAlive(partner); - if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 - || (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 && isAttacker)) + if (GetConfig(B_HEAL_BELL_SOUNDPROOF) == GEN_5 + || (GetConfig(B_HEAL_BELL_SOUNDPROOF) >= GEN_8 && isAttacker)) ability = ABILITY_NONE; - else if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) > GEN_5 && !isAttacker && !isDoublesPartner) + else if (GetConfig(B_HEAL_BELL_SOUNDPROOF) > GEN_5 && !isAttacker && !isDoublesPartner) ability = ABILITY_NONE; else if (isAttacker) ability = GetBattlerAbility(gBattlerAttacker); @@ -12288,7 +12310,15 @@ static void Cmd_copyfoestats(void) { gBattleMons[gBattlerAttacker].statStages[i] = gBattleMons[gBattlerTarget].statStages[i]; } - gBattleScripting.battler = gBattlerTarget; + if (GetConfig(B_PSYCH_UP_CRIT_RATIO) >= GEN_6) + { + // Copy crit boosts (Focus Energy, Dragon Cheer, G-Max Chi Strike) + gBattleMons[gBattlerAttacker].volatiles.focusEnergy = gBattleMons[gBattlerTarget].volatiles.focusEnergy; + gBattleMons[gBattlerAttacker].volatiles.dragonCheer = gBattleMons[gBattlerTarget].volatiles.dragonCheer; + gBattleMons[gBattlerAttacker].volatiles.bonusCritStages = gBattleMons[gBattlerTarget].volatiles.bonusCritStages; + } + gEffectBattler = gBattlerTarget; + gBattleScripting.battler = gBattlerAttacker; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -12350,7 +12380,7 @@ static void Cmd_recoverbasedonsunlight(void) else recoverAmount = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; } - else if (GetConfig(CONFIG_TIME_OF_DAY_HEALING_MOVES) != GEN_2) + else if (GetConfig(B_TIME_OF_DAY_HEALING_MOVES) != GEN_2) { if (!(gBattleWeather & B_WEATHER_ANY) || !HasWeatherEffect() || GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_UTILITY_UMBRELLA) recoverAmount = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; @@ -12638,7 +12668,7 @@ static void Cmd_settaunt(void) { CMD_ARGS(const u8 *failInstr); - if (GetConfig(CONFIG_OBLIVIOUS_TAUNT) >= GEN_6 && GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) + if (GetConfig(B_OBLIVIOUS_TAUNT) >= GEN_6 && GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) { gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; gLastUsedAbility = ABILITY_OBLIVIOUS; @@ -13374,6 +13404,10 @@ bool32 DoesSubstituteBlockMove(u32 battlerAtk, u32 battlerDef, u32 move) return FALSE; else if (MoveIgnoresSubstitute(move)) return FALSE; + else if (GetConfig(B_INFILTRATOR_SUBSTITUTE) < GEN_6) + return TRUE; + else if (GetMoveEffect(move) == EFFECT_TRANSFORM || GetMoveEffect(move) == EFFECT_SKY_DROP) + return TRUE; else if (IsAbilityAndRecord(battlerAtk, GetBattlerAbility(battlerAtk), ABILITY_INFILTRATOR)) return FALSE; else @@ -14703,7 +14737,7 @@ bool32 CanBurnHitThaw(u16 move) { u8 i; - if (GetConfig(CONFIG_BURN_HIT_THAW) >= GEN_6) + if (GetConfig(B_BURN_HIT_THAW) >= GEN_6) { u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); for (i = 0; i < numAdditionalEffects; i++) @@ -15487,7 +15521,7 @@ void BS_TryAllySwitch(void) { gBattlescriptCurrInstr = cmd->failInstr; } - else if (GetConfig(CONFIG_ALLY_SWITCH_FAIL_CHANCE) >= GEN_9) + else if (GetConfig(B_ALLY_SWITCH_FAIL_CHANCE) >= GEN_9) { TryResetProtectUseCounter(gBattlerAttacker); if (sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] < Random()) @@ -16367,7 +16401,7 @@ void BS_JumpIfIntimidateAbilityPrevented(void) case ABILITY_SCRAPPY: case ABILITY_OWN_TEMPO: case ABILITY_OBLIVIOUS: - if (GetConfig(CONFIG_UPDATED_INTIMIDATE) >= GEN_8) + if (GetConfig(B_UPDATED_INTIMIDATE) >= GEN_8) { hasAbility = TRUE; gBattlescriptCurrInstr = BattleScript_IntimidatePrevented; @@ -17357,21 +17391,26 @@ void BS_TryInstruct(void) gSpecialStatuses[gBattlerTarget].instructedChosenTarget = gBattleStruct->moveTarget[gBattlerTarget] | 0x4; gCalledMove = move; u32 moveIndex; + bool32 foundMove = FALSE; for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { if (gBattleMons[gBattlerTarget].moves[moveIndex] == gCalledMove) { - gCurrMovePos = moveIndex; - moveIndex = MAX_MON_MOVES; + foundMove = TRUE; break; } } - if (moveIndex != MAX_MON_MOVES || gBattleMons[gBattlerTarget].pp[gCurrMovePos] == 0) + if (!foundMove) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (gBattleMons[gBattlerTarget].pp[moveIndex] == 0) { gBattlescriptCurrInstr = cmd->failInstr; } else { + gCurrMovePos = moveIndex; gBattleScripting.battler = gBattlerAttacker; // for message gEffectBattler = gBattleStruct->lastMoveTarget[gBattlerTarget]; gBattlescriptCurrInstr = cmd->nextInstr; @@ -17978,7 +18017,7 @@ void BS_JumpIfAbilityPreventsRest(void) NATIVE_ARGS(u8 battler, const u8 *jumpInstr); u32 battler = GetBattlerForBattleScript(cmd->battler); u32 ability = GetBattlerAbility(battler); - if (GetConfig(CONFIG_LEAF_GUARD_PREVENTS_REST) >= GEN_5 && IsLeafGuardProtected(battler, ability)) + if (GetConfig(B_LEAF_GUARD_PREVENTS_REST) >= GEN_5 && IsLeafGuardProtected(battler, ability)) gBattlescriptCurrInstr = cmd->jumpInstr; else if (IsShieldsDownProtected(battler, ability)) gBattlescriptCurrInstr = cmd->jumpInstr; @@ -18073,7 +18112,7 @@ void BS_BattlerItemToLastUsedItem(void) void BS_JumpIfGenConfigLowerThan(void) { NATIVE_ARGS(u16 tag, u8 gen, const u8 *jumpInstr); - if (GetConfig(cmd->tag) < cmd->gen) + if (GetConfigInternal(cmd->tag) < cmd->gen) gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/battle_setup.c b/src/battle_setup.c index 1ad284d05e..9b8a669255 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -940,6 +940,7 @@ static bool32 IsPlayerDefeated(u32 battleOutcome) { case B_OUTCOME_LOST: case B_OUTCOME_DREW: + case B_OUTCOME_FORFEITED: return TRUE; case B_OUTCOME_WON: case B_OUTCOME_RAN: diff --git a/src/battle_util.c b/src/battle_util.c index c209573d30..cad82d035e 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -480,7 +480,7 @@ void HandleAction_UseMove(void) { gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; - if (GetConfig(CONFIG_ENCORE_TARGET) < GEN_5) + if (GetConfig(B_ENCORE_TARGET) < GEN_5) gBattleStruct->moveTarget[gBattlerAttacker] = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); } // check if the encored move wasn't overwritten @@ -695,7 +695,7 @@ bool32 TryRunFromBattle(u32 battler) gProtectStructs[battler].fleeType = FLEE_ITEM; effect++; } - else if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + else if (GetConfig(B_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) { effect++; } @@ -970,7 +970,7 @@ void HandleAction_ActionFinished(void) gBattleResources->battleScriptsStack->size = 0; gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_NONE; - if (GetConfig(CONFIG_RECALC_TURN_AFTER_ACTIONS) >= GEN_8 && !afterYouActive && !gBattleStruct->pledgeMove && !IsPursuitTargetSet()) + if (GetConfig(B_RECALC_TURN_AFTER_ACTIONS) >= GEN_8 && !afterYouActive && !gBattleStruct->pledgeMove && !IsPursuitTargetSet()) { // i starts at `gCurrentTurnActionNumber` because we don't want to recalculate turn order for mon that have already // taken action. It's been previously increased, which we want in order to not recalculate the turn of the mon that just finished its action @@ -1245,7 +1245,7 @@ bool32 ShouldDefiantCompetitiveActivate(u32 battler, enum Ability ability) if (IsBattlerAlly(gSpecialStatuses[battler].changedStatsBattlerId, battler) && !gBattleScripting.stickyWebStatDrop) return FALSE; - if (GetConfig(CONFIG_DEFIANT_STICKY_WEB) >= GEN_9 || !gBattleScripting.stickyWebStatDrop) + if (GetConfig(B_DEFIANT_STICKY_WEB) >= GEN_9 || !gBattleScripting.stickyWebStatDrop) return TRUE; // only activate Defiant/Competitive if Web was setup by foe return gSideTimers[side].stickyWebBattlerSide != side; @@ -1283,7 +1283,7 @@ void PrepareStringBattle(enum StringID stringId, u32 battler) stringId = STRINGID_STATSWONTINCREASE2; break; case STRINGID_PKMNCUTSATTACKWITH: - if (GetConfig(CONFIG_UPDATED_INTIMIDATE) >= GEN_8 + if (GetConfig(B_UPDATED_INTIMIDATE) >= GEN_8 && targetAbility == ABILITY_RATTLED && CompareStat(gBattlerTarget, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN, targetAbility)) { @@ -1425,7 +1425,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) u16 *choicedMove = &gBattleStruct->choicedMove[battler]; enum BattleMoveEffects moveEffect = GetMoveEffect(move); - if (GetConfig(CONFIG_ENCORE_TARGET) >= GEN_5 + if (GetConfig(B_ENCORE_TARGET) >= GEN_5 && DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && gDisableStructs[battler].encoredMove != move && gDisableStructs[battler].encoredMove != MOVE_NONE) { gBattleScripting.battler = battler; @@ -2282,7 +2282,7 @@ static enum MoveCanceler CancelerConfused(struct BattleContext *ctx) if (gBattleMons[ctx->battlerAtk].volatiles.confusionTurns) { // confusion dmg - if (RandomPercentage(RNG_CONFUSION, (GetConfig(CONFIG_CONFUSION_SELF_DMG_CHANCE) >= GEN_7 ? 33 : 50))) + if (RandomPercentage(RNG_CONFUSION, (GetConfig(B_CONFUSION_SELF_DMG_CHANCE) >= GEN_7 ? 33 : 50))) { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; struct DamageContext dmgCtx = {0}; @@ -2619,7 +2619,7 @@ static enum MoveCanceler CancelerWeatherPrimal(struct BattleContext *ctx) if (HasWeatherEffect() && GetMovePower(ctx->currentMove) > 0) { enum Type moveType = GetBattleMoveType(ctx->currentMove); - if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL) && (GetConfig(CONFIG_POWDER_RAIN) >= GEN_7 || !TryActivatePowderStatus(ctx->currentMove))) + if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL) && (GetConfig(B_POWDER_RAIN) >= GEN_7 || !TryActivatePowderStatus(ctx->currentMove))) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PRIMAL_WEATHER_FIZZLED_BY_RAIN; effect = MOVE_STEP_FAILURE; @@ -2852,7 +2852,7 @@ static enum MoveCanceler CancelerProtean(struct BattleContext *ctx) enum Type moveType = GetBattleMoveType(ctx->currentMove); if (ProteanTryChangeType(ctx->battlerAtk, ctx->abilities[ctx->battlerAtk], ctx->currentMove, moveType)) { - if (GetConfig(CONFIG_PROTEAN_LIBERO) >= GEN_9) + if (GetConfig(B_PROTEAN_LIBERO) >= GEN_9) gDisableStructs[ctx->battlerAtk].usedProteanLibero = TRUE; PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); gBattlerAbility = ctx->battlerAtk; @@ -2935,7 +2935,7 @@ static enum MoveCanceler CancelerMultihitMoves(struct BattleContext *ctx) && !GetMonData(&party[i], MON_DATA_IS_EGG) && !GetMonData(&party[i], MON_DATA_STATUS)) { - if (GetConfig(CONFIG_BEAT_UP) >= GEN_5) + if (GetConfig(B_BEAT_UP) >= GEN_5) gBattleStruct->beatUpSpecies[gMultiHitCounter] = species; else gBattleStruct->beatUpSpecies[gMultiHitCounter] = i; @@ -3232,7 +3232,7 @@ bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, u32 ability) { return FALSE; } - else if (GetConfig(CONFIG_ABILITY_WEATHER) < GEN_6 && ability != ABILITY_NONE) + else if (GetConfig(B_ABILITY_WEATHER) < GEN_6 && ability != ABILITY_NONE) { gBattleWeather = sBattleWeatherInfo[battleWeatherId].flag; for (u32 i = 0; i < gBattlersCount; i++) @@ -3335,12 +3335,43 @@ static void ForewarnChooseMove(u32 battler) } } - for (bestId = 0, i = 1; i < count; i++) + if (count == 0) { - if (data[i].power > data[bestId].power) - bestId = i; - else if (data[i].power == data[bestId].power && Random() & 1) + Free(data); + return; + } + + u32 tieCount = 1; + u8 bestPower = data[0].power; + + bestId = 0; + for (i = 1; i < count; i++) + { + if (data[i].power > bestPower) + { + bestPower = data[i].power; bestId = i; + tieCount = 1; + } + else if (data[i].power == bestPower) + { + tieCount++; + } + } + + if (tieCount > 1) + { + u32 tieIndex = RandomUniform(RNG_FOREWARN, 0, tieCount - 1); + for (i = 0, bestId = 0; i < count; i++) + { + if (data[i].power != bestPower) + continue; + if (tieIndex-- == 0) + { + bestId = i; + break; + } + } } gEffectBattler = data[bestId].battler; @@ -3551,14 +3582,14 @@ bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, enum Ability ability } break; case ABILITY_LIGHTNING_ROD: - if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && moveType == TYPE_ELECTRIC && GetBattlerMoveTargetType(battlerAtk, move) != MOVE_TARGET_ALL_BATTLERS) + if (GetConfig(B_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && moveType == TYPE_ELECTRIC && GetBattlerMoveTargetType(battlerAtk, move) != MOVE_TARGET_ALL_BATTLERS) { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; statId = STAT_SPATK; } break; case ABILITY_STORM_DRAIN: - if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && moveType == TYPE_WATER) + if (GetConfig(B_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && moveType == TYPE_WATER) { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; statId = STAT_SPATK; @@ -4155,7 +4186,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab } return effect; // Note: It returns effect as to not record the ability if Frisk does not activate. case ABILITY_FOREWARN: - if (!gSpecialStatuses[battler].switchInAbilityDone) + if (!gSpecialStatuses[battler].switchInAbilityDone && !IsOpposingSideEmpty(battler)) { ForewarnChooseMove(battler); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_FOREWARN; @@ -4298,12 +4329,12 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab } break; case ABILITY_SNOW_WARNING: - if (GetConfig(CONFIG_SNOW_WARNING) >= GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_SNOW, gLastUsedAbility)) + if (GetConfig(B_SNOW_WARNING) >= GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_SNOW, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesSnow); effect++; } - else if (GetConfig(CONFIG_SNOW_WARNING) < GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_HAIL, gLastUsedAbility)) + else if (GetConfig(B_SNOW_WARNING) < GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_HAIL, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesHail); effect++; @@ -4402,7 +4433,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab if (!gSpecialStatuses[battler].switchInAbilityDone && !GetBattlerPartyState(battler)->intrepidSwordBoost) { - if (GetConfig(CONFIG_INTREPID_SWORD) == GEN_9) + if (GetConfig(B_INTREPID_SWORD) == GEN_9) GetBattlerPartyState(battler)->intrepidSwordBoost = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; if (CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) @@ -4417,7 +4448,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab if (!gSpecialStatuses[battler].switchInAbilityDone && !GetBattlerPartyState(battler)->dauntlessShieldBoost) { - if (GetConfig(CONFIG_DAUNTLESS_SHIELD) == GEN_9) + if (GetConfig(B_DAUNTLESS_SHIELD) == GEN_9) GetBattlerPartyState(battler)->dauntlessShieldBoost = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; if (CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) @@ -4602,6 +4633,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab && IsBattlerAlive(battler) && gBattleStruct->battlerState[partner].commanderSpecies == SPECIES_NONE && gBattleMons[partner].species == SPECIES_DONDOZO + && (gChosenActionByBattler[partner] != B_ACTION_SWITCH || HasBattlerActedThisTurn(partner)) && GET_BASE_SPECIES_ID(GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES)) == SPECIES_TATSUGIRI) { SaveBattlerAttacker(gBattlerAttacker); @@ -4686,7 +4718,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab break; case ABILITY_SHED_SKIN: if ((gBattleMons[battler].status1 & STATUS1_ANY) - && (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) == GEN_4 ? RandomPercentage(RNG_SHED_SKIN, 30) : RandomChance(RNG_SHED_SKIN, 1, 3))) + && (GetConfig(B_ABILITY_TRIGGER_CHANCE) == GEN_4 ? RandomPercentage(RNG_SHED_SKIN, 30) : RandomChance(RNG_SHED_SKIN, 1, 3))) { ABILITY_HEAL_MON_STATUS: if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON)) @@ -4727,7 +4759,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab if (gDisableStructs[battler].isFirstTurn != 2) { u32 validToRaise = 0, validToLower = 0; - u32 statsNum = GetConfig(CONFIG_MOODY_ACC_EVASION) >= GEN_8 ? NUM_STATS : NUM_BATTLE_STATS; + u32 statsNum = GetConfig(B_MOODY_ACC_EVASION) >= GEN_8 ? NUM_STATS : NUM_BATTLE_STATS; for (i = STAT_ATK; i < statsNum; i++) { @@ -5110,7 +5142,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab { u32 poison, paralysis, sleep; - if (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_5) + if (GetConfig(B_ABILITY_TRIGGER_CHANCE) >= GEN_5) { poison = 9; paralysis = 19; @@ -5122,7 +5154,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab } sleep = 30; - i = RandomUniform(RNG_EFFECT_SPORE, 0, GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? 99 : 299); + i = RandomUniform(RNG_EFFECT_SPORE, 0, GetConfig(B_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? 99 : 299); if (i < poison) goto POISON_POINT; if (i < paralysis) @@ -5148,7 +5180,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab } break; case ABILITY_POISON_POINT: - if (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3)) + if (GetConfig(B_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3)) { POISON_POINT: { @@ -5170,7 +5202,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab } break; case ABILITY_STATIC: - if (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_STATIC, 30) : RandomChance(RNG_STATIC, 1, 3)) + if (GetConfig(B_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_STATIC, 30) : RandomChance(RNG_STATIC, 1, 3)) { STATIC: { @@ -5197,7 +5229,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move) && IsBattlerTurnDamaged(gBattlerTarget) && CanBeBurned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) - && (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3))) + && (GetConfig(B_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3))) { gEffectBattler = gBattlerAttacker; gBattleScripting.battler = gBattlerTarget; @@ -5212,7 +5244,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerTarget) - && (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_CUTE_CHARM, 30) : RandomChance(RNG_CUTE_CHARM, 1, 3)) + && (GetConfig(B_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_CUTE_CHARM, 30) : RandomChance(RNG_CUTE_CHARM, 1, 3)) && !(gBattleMons[gBattlerAttacker].volatiles.infatuation) && AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget) && !IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_OBLIVIOUS) @@ -5500,7 +5532,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab gBattleScripting.battler = gBattlerAbility = gBattlerTarget; RecordAbilityBattle(gBattlerTarget, ABILITY_SYNCHRONIZE); - if (GetConfig(CONFIG_SYNCHRONIZE_TOXIC) < GEN_5 && gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) + if (GetConfig(B_SYNCHRONIZE_TOXIC) < GEN_5 && gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; if (CanSetNonVolatileStatus( @@ -5530,7 +5562,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab gBattleScripting.battler = gBattlerAbility = gBattlerAttacker; RecordAbilityBattle(gBattlerAttacker, ABILITY_SYNCHRONIZE); - if (GetConfig(CONFIG_SYNCHRONIZE_TOXIC) < GEN_5 && gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) + if (GetConfig(B_SYNCHRONIZE_TOXIC) < GEN_5 && gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; if (CanSetNonVolatileStatus( @@ -5804,7 +5836,7 @@ u32 IsAbilityOnFieldExcept(u32 battler, enum Ability ability) u32 IsAbilityPreventingEscape(u32 battler) { - if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + if (GetConfig(B_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return 0; bool32 isBattlerGrounded = IsBattlerGrounded(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler)); @@ -5832,7 +5864,7 @@ bool32 CanBattlerEscape(u32 battler) // no ability check { if (gBattleStruct->battlerState[battler].commanderSpecies != SPECIES_NONE) return FALSE; - else if (GetConfig(CONFIG_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + else if (GetConfig(B_GHOSTS_ESCAPE) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return TRUE; else if (gBattleMons[battler].volatiles.escapePrevention) return FALSE; @@ -6082,6 +6114,17 @@ bool32 CanGetFrostbite(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef) return FALSE; } +bool32 IsSafeguardProtected(u32 battlerAtk, u32 battlerDef, u32 abilityAtk) +{ + if (!(gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD)) + return FALSE; + if (IsBattlerAlly(battlerAtk, battlerDef)) + return TRUE; + if (abilityAtk == ABILITY_INFILTRATOR) + return FALSE; + return TRUE; +} + bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef, enum MoveEffect effect, enum FunctionCallOption option) { const u8 *battleScript = NULL; @@ -6119,7 +6162,7 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, enum Ability abil { battleScript = BattleScript_AlreadyParalyzed; } - else if (GetConfig(CONFIG_PARALYZE_ELECTRIC) >= GEN_6 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ELECTRIC)) + else if (GetConfig(B_PARALYZE_ELECTRIC) >= GEN_6 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ELECTRIC)) { battleScript = BattleScript_NotAffected; } @@ -6236,7 +6279,7 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, enum Ability abil abilityDef = ABILITY_FLOWER_VEIL; battleScript = BattleScript_FlowerVeilProtects; } - else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD) + else if (IsSafeguardProtected(battlerAtk, battlerDef, abilityAtk)) { battleScript = BattleScript_SafeguardProtected; } @@ -7264,7 +7307,7 @@ static inline u32 CalcMoveBasePower(struct DamageContext *ctx) basePower *= 2; break; case EFFECT_BEAT_UP: - if (GetConfig(CONFIG_BEAT_UP) >= GEN_5) + if (GetConfig(B_BEAT_UP) >= GEN_5) basePower = CalcBeatUpPower(); break; case EFFECT_PSYBLADE: @@ -7378,9 +7421,9 @@ static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageContext *ctx) if (IsBattlerTerrainAffected(battlerAtk, ctx->abilityAtk, ctx->holdEffectAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && moveType == TYPE_PSYCHIC) modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); if (IsFieldMudSportAffected(ctx->moveType)) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_SPORT_DMG_REDUCTION) >= GEN_5 ? 0.33 : 0.5)); + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(B_SPORT_DMG_REDUCTION) >= GEN_5 ? 0.33 : 0.5)); if (IsFieldWaterSportAffected(ctx->moveType)) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_SPORT_DMG_REDUCTION) >= GEN_5 ? 0.33 : 0.5)); + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(B_SPORT_DMG_REDUCTION) >= GEN_5 ? 0.33 : 0.5)); // attacker's abilities switch (ctx->abilityAtk) @@ -7446,22 +7489,22 @@ static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageContext *ctx) break; case ABILITY_PIXILATE: if (moveType == TYPE_FAIRY && gBattleStruct->battlerState[battlerAtk].ateBoost) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(B_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); break; case ABILITY_GALVANIZE: if (moveType == TYPE_ELECTRIC && gBattleStruct->battlerState[battlerAtk].ateBoost) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(B_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); break; case ABILITY_REFRIGERATE: if (moveType == TYPE_ICE && gBattleStruct->battlerState[battlerAtk].ateBoost) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(B_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); break; case ABILITY_AERILATE: if (moveType == TYPE_FLYING && gBattleStruct->battlerState[battlerAtk].ateBoost) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(B_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); break; case ABILITY_NORMALIZE: - if (moveType == TYPE_NORMAL && gBattleStruct->battlerState[battlerAtk].ateBoost && GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7) + if (moveType == TYPE_NORMAL && gBattleStruct->battlerState[battlerAtk].ateBoost && GetConfig(B_ATE_MULTIPLIER) >= GEN_7) modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); break; case ABILITY_PUNK_ROCK: @@ -7793,7 +7836,7 @@ static inline u32 CalcAttackStat(struct DamageContext *ctx) case ABILITY_TRANSISTOR: if (moveType == TYPE_ELECTRIC) { - if (GetConfig(CONFIG_TRANSISTOR_BOOST) >= GEN_9) + if (GetConfig(B_TRANSISTOR_BOOST) >= GEN_9) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); else modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); @@ -7902,7 +7945,7 @@ static inline u32 CalcAttackStat(struct DamageContext *ctx) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case HOLD_EFFECT_LIGHT_BALL: - if (atkBaseSpeciesId == SPECIES_PIKACHU && (GetConfig(CONFIG_LIGHT_BALL_ATTACK_BOOST) >= GEN_4 || IsBattleMoveSpecial(move))) + if (atkBaseSpeciesId == SPECIES_PIKACHU && (GetConfig(B_LIGHT_BALL_ATTACK_BOOST) >= GEN_4 || IsBattleMoveSpecial(move))) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; case HOLD_EFFECT_CHOICE_BAND: @@ -8110,7 +8153,7 @@ static inline u32 CalcDefenseStat(struct DamageContext *ctx) } // sandstorm sp.def boost for rock types - if (GetConfig(CONFIG_SANDSTORM_SPDEF_BOOST) >= GEN_4 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SANDSTORM) && !usesDefStat) + if (GetConfig(B_SANDSTORM_SPDEF_BOOST) >= GEN_4 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SANDSTORM) && !usesDefStat) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); // snow def boost for ice types if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SNOW) && usesDefStat) @@ -8188,12 +8231,12 @@ static inline uq4_12_t GetBurnOrFrostBiteModifier(struct DamageContext *ctx) if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_BURN && IsBattleMovePhysical(ctx->move) - && (GetConfig(CONFIG_BURN_FACADE_DMG) < GEN_6 || moveEffect != EFFECT_FACADE) + && (GetConfig(B_BURN_FACADE_DMG) < GEN_6 || moveEffect != EFFECT_FACADE) && ctx->abilityAtk != ABILITY_GUTS) return UQ_4_12(0.5); if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_FROSTBITE && IsBattleMoveSpecial(ctx->move) - && (GetConfig(CONFIG_BURN_FACADE_DMG) < GEN_6 || moveEffect != EFFECT_FACADE)) + && (GetConfig(B_BURN_FACADE_DMG) < GEN_6 || moveEffect != EFFECT_FACADE)) return UQ_4_12(0.5); return UQ_4_12(1.0); } @@ -8201,7 +8244,7 @@ static inline uq4_12_t GetBurnOrFrostBiteModifier(struct DamageContext *ctx) static inline uq4_12_t GetCriticalModifier(bool32 isCrit) { if (isCrit) - return GetConfig(CONFIG_CRIT_MULTIPLIER) >= GEN_6 ? UQ_4_12(1.5) : UQ_4_12(2.0); + return GetConfig(B_CRIT_MULTIPLIER) >= GEN_6 ? UQ_4_12(1.5) : UQ_4_12(2.0); return UQ_4_12(1.0); } @@ -8262,7 +8305,7 @@ static inline uq4_12_t GetScreensModifier(struct DamageContext *ctx) { return UQ_4_12(1.0); } - if (ctx->abilityAtk == ABILITY_INFILTRATOR) + if (ctx->abilityAtk == ABILITY_INFILTRATOR && !IsBattlerAlly(ctx->battlerAtk, ctx->battlerDef)) { if (ctx->updateFlags) RecordAbilityBattle(ctx->battlerAtk, ctx->abilityDef); @@ -8566,7 +8609,7 @@ s32 DoFixedDamageMoveCalc(struct DamageContext *ctx) dmg = GetNonDynamaxHP(ctx->battlerAtk); break; case EFFECT_BEAT_UP: - if (GetConfig(CONFIG_BEAT_UP) < GEN_5) + if (GetConfig(B_BEAT_UP) < GEN_5) dmg = CalcBeatUpDamage(ctx); else return INT32_MAX; @@ -8840,7 +8883,7 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(struct DamageCont RecordAbilityBattle(ctx->battlerDef, ABILITY_LEVITATE); } } - else if (GetConfig(CONFIG_SHEER_COLD_IMMUNITY) >= GEN_7 && GetMoveEffect(ctx->move) == EFFECT_SHEER_COLD && IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_ICE)) + else if (GetConfig(B_SHEER_COLD_IMMUNITY) >= GEN_7 && GetMoveEffect(ctx->move) == EFFECT_SHEER_COLD && IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_ICE)) { modifier = UQ_4_12(0.0); } @@ -8854,7 +8897,7 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(struct DamageCont } // Iron Ball ignores type modifiers for flying-type mons if it is the only source of grounding - if (GetConfig(CONFIG_IRON_BALL) >= GEN_5 + if (GetConfig(B_IRON_BALL) >= GEN_5 && ctx->moveType == TYPE_GROUND && ctx->holdEffectDef == HOLD_EFFECT_IRON_BALL && IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_FLYING) @@ -9409,19 +9452,23 @@ bool32 TryBattleFormChange(u32 battler, enum FormChanges method) bool32 DoBattlersShareType(u32 battler1, u32 battler2) { s32 i; + s32 j; enum Type types1[3], types2[3]; GetBattlerTypes(battler1, FALSE, types1); GetBattlerTypes(battler2, FALSE, types2); - if (types1[2] == TYPE_MYSTERY) - types1[2] = types1[0]; - if (types2[2] == TYPE_MYSTERY) - types2[2] = types2[0]; - for (i = 0; i < 3; i++) { - if (types1[i] == types2[0] || types1[i] == types2[1] || types1[i] == types2[2]) - return TRUE; + if (types1[i] == TYPE_MYSTERY) + continue; + + for (j = 0; j < 3; j++) + { + if (types2[j] == TYPE_MYSTERY) + continue; + if (types1[i] == types2[j]) + return TRUE; + } } return FALSE; @@ -9616,7 +9663,7 @@ u32 TryImmunityAbilityHealStatus(u32 battler, enum AbilityEffect caseID) case ABILITY_OBLIVIOUS: if (gBattleMons[battler].volatiles.infatuation) effect = 3; - else if (GetConfig(CONFIG_OBLIVIOUS_TAUNT) >= GEN_6 && gDisableStructs[battler].tauntTimer != 0) + else if (GetConfig(B_OBLIVIOUS_TAUNT) >= GEN_6 && gDisableStructs[battler].tauntTimer != 0) effect = 4; break; } @@ -9666,7 +9713,7 @@ u32 TryImmunityAbilityHealStatus(u32 battler, enum AbilityEffect caseID) uq4_12_t GetBadgeBoostModifier(void) { - if (GetConfig(CONFIG_BADGE_BOOST) < GEN_3) + if (GetConfig(B_BADGE_BOOST) < GEN_3) return UQ_4_12(1.125); else return UQ_4_12(1.1); @@ -9674,7 +9721,7 @@ uq4_12_t GetBadgeBoostModifier(void) bool32 ShouldGetStatBadgeBoost(u16 badgeFlag, u32 battler) { - if (GetConfig(CONFIG_BADGE_BOOST) <= GEN_3 && badgeFlag != 0) + if (GetConfig(B_BADGE_BOOST) <= GEN_3 && badgeFlag != 0) { if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) return FALSE; @@ -9802,9 +9849,10 @@ bool32 CanFling(u32 battler) u16 item = gBattleMons[battler].item; if (item == ITEM_NONE - || (GetConfig(CONFIG_KLUTZ_FLING_INTERACTION) >= GEN_5 && GetBattlerAbility(battler) == ABILITY_KLUTZ) + || (GetConfig(B_KLUTZ_FLING_INTERACTION) >= GEN_5 && GetBattlerAbility(battler) == ABILITY_KLUTZ) || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || gBattleMons[battler].volatiles.embargo + || (GetItemTMHMIndex(item) != 0 && GetItemImportance(item) == 1) // don't fling reusable TMs || GetFlingPowerFromItemId(item) == 0 || !CanBattlerGetOrLoseItem(battler, item)) return FALSE; @@ -10010,7 +10058,7 @@ bool32 CompareStat(u32 battler, enum Stat statId, u8 cmpTo, u8 cmpKind, enum Abi bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget) { - if (GetConfig(CONFIG_PRANKSTER_DARK_TYPES) < GEN_7) + if (GetConfig(B_PRANKSTER_DARK_TYPES) < GEN_7) return FALSE; if (!gProtectStructs[battlerPrankster].pranksterElevated) return FALSE; @@ -10029,7 +10077,7 @@ bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 ch bool32 CantPickupItem(u32 battler) { // Used by RandomUniformExcept() for RNG_PICKUP - if (battler == gBattlerAttacker && (GetConfig(CONFIG_PICKUP_WILD) < GEN_9 || gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK))) + if (battler == gBattlerAttacker && (GetConfig(B_PICKUP_WILD) < GEN_9 || gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK))) return TRUE; return !(IsBattlerAlive(battler) && GetBattlerPartyState(battler)->usedHeldItem && gBattleStruct->battlerState[battler].canPickupItem); } @@ -10091,7 +10139,7 @@ static void SetRandomMultiHitCounter() { if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_LOADED_DICE) gMultiHitCounter = RandomUniform(RNG_LOADED_DICE, 4, 5); - else if (GetConfig(CONFIG_MULTI_HIT_CHANCE) >= GEN_5) + else if (GetConfig(B_MULTI_HIT_CHANCE) >= GEN_5) gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 7, 7, 3, 3); // 35%: 2 hits, 35%: 3 hits, 15% 4 hits, 15% 5 hits. else gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 3, 3, 1, 1); // 37.5%: 2 hits, 37.5%: 3 hits, 12.5% 4 hits, 12.5% 5 hits. @@ -10529,7 +10577,7 @@ void ClearDamageCalcResults(void) bool32 DoesDestinyBondFail(u32 battler) { - return GetConfig(CONFIG_DESTINY_BOND_FAIL) >= GEN_7 && gBattleMons[battler].volatiles.destinyBond; + return GetConfig(B_DESTINY_BOND_FAIL) >= GEN_7 && gBattleMons[battler].volatiles.destinyBond; } // This check has always to be the last in a condtion statement because of the recording of AI data. @@ -10815,7 +10863,7 @@ bool32 CanMoveSkipAccuracyCalc(u32 battlerAtk, u32 battlerDef, enum Ability abil u32 nonVolatileStatus = GetMoveNonVolatileStatus(move); if ((gBattleMons[battlerDef].volatiles.lockOn && gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk) - || (GetConfig(CONFIG_TOXIC_NEVER_MISS) >= GEN_6 && nonVolatileStatus == MOVE_EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) + || (GetConfig(B_TOXIC_NEVER_MISS) >= GEN_6 && nonVolatileStatus == MOVE_EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) || gBattleMons[battlerDef].volatiles.glaiveRush) { effect = TRUE; @@ -10902,7 +10950,7 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, enum Ability atkA accStage = gBattleMons[battlerAtk].statStages[STAT_ACC]; evasionStage = gBattleMons[battlerDef].statStages[STAT_EVASION]; if (atkAbility == ABILITY_UNAWARE || atkAbility == ABILITY_KEEN_EYE || atkAbility == ABILITY_MINDS_EYE - || (GetConfig(CONFIG_ILLUMINATE_EFFECT) >= GEN_9 && atkAbility == ABILITY_ILLUMINATE)) + || (GetConfig(B_ILLUMINATE_EFFECT) >= GEN_9 && atkAbility == ABILITY_ILLUMINATE)) evasionStage = DEFAULT_STAT_STAGE; if (MoveIgnoresDefenseEvasionStages(move)) evasionStage = DEFAULT_STAT_STAGE; @@ -11078,8 +11126,8 @@ static bool32 IsOpposingSideEmpty(u32 battler) bool32 IsAffectedByPowderMove(u32 battler, u32 ability, enum HoldEffect holdEffect) { - if ((GetConfig(CONFIG_POWDER_OVERCOAT) >= GEN_6 && ability == ABILITY_OVERCOAT) - || (GetConfig(CONFIG_POWDER_GRASS) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GRASS)) + if ((GetConfig(B_POWDER_OVERCOAT) >= GEN_6 && ability == ABILITY_OVERCOAT) + || (GetConfig(B_POWDER_GRASS) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GRASS)) || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES) return FALSE; return TRUE; diff --git a/src/berry.c b/src/berry.c index 27f75932bd..1584f34f47 100644 --- a/src/berry.c +++ b/src/berry.c @@ -20,6 +20,7 @@ static u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree); static u8 GetNumStagesWateredByBerryTreeId(u8 id); static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water); static u8 CalcBerryYield(struct BerryTree *tree); +static u32 GetBerryTreeAge(u8 id, u8 stage); static u8 GetBerryCountByBerryTreeId(u8 id); static u16 GetStageDurationByBerryType(u8); static u8 GetDrainRateByBerryType(u8); @@ -1961,8 +1962,15 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 allowGrowth) tree->stage = stage; tree->moistureLevel = 100; if (OW_BERRY_ALWAYS_WATERABLE) - tree->berryYield = GetBerryInfo(berry)->maxYield; - if (stage == BERRY_STAGE_BERRIES) + { + // We simulate a tree having grown without water + u32 berryTreeAge = GetBerryTreeAge(id, stage); + if (GetBerryInfo(berry)->maxYield - berryTreeAge * GetBerryInfo(berry)->maxYield / 5 < GetBerryInfo(berry)->minYield) + tree->berryYield = GetBerryInfo(berry)->minYield; + else + tree->berryYield = GetBerryInfo(berry)->maxYield - berryTreeAge * GetBerryInfo(berry)->maxYield / 5; + } + else if (stage == BERRY_STAGE_BERRIES) { tree->berryYield = CalcBerryYield(tree); tree->minutesUntilNextStage *= ((tree->mulch == ITEM_TO_MULCH(ITEM_STABLE_MULCH)) ? 6 : 4); @@ -2094,6 +2102,17 @@ static u8 CalcBerryYield(struct BerryTree *tree) return result; } +static u32 GetBerryTreeAge(u8 id, u8 stage) +{ + if (stage == BERRY_STAGE_TRUNK) + stage = 5; + else if (stage == BERRY_STAGE_BUDDING) + stage = 6; + else if (stage > 0) + stage -= 1; + return GetBerryInfo(id)->growthDuration * stage / (OW_BERRY_SIX_STAGES ? 6 : 4); +} + static u8 GetBerryCountByBerryTreeId(u8 id) { return gSaveBlock1Ptr->berryTrees[id].berryYield; @@ -2331,7 +2350,6 @@ static const u8 sBerryMutations[][3] = { {ITEM_TO_BERRY(ITEM_IAPAPA_BERRY), ITEM_TO_BERRY(ITEM_MAGO_BERRY), ITEM_TO_BERRY(ITEM_POMEG_BERRY)}, {ITEM_TO_BERRY(ITEM_CHESTO_BERRY), ITEM_TO_BERRY(ITEM_PERSIM_BERRY), ITEM_TO_BERRY(ITEM_KELPSY_BERRY)}, {ITEM_TO_BERRY(ITEM_ORAN_BERRY), ITEM_TO_BERRY(ITEM_PECHA_BERRY), ITEM_TO_BERRY(ITEM_QUALOT_BERRY)}, - {ITEM_TO_BERRY(ITEM_CHESTO_BERRY), ITEM_TO_BERRY(ITEM_PERSIM_BERRY), ITEM_TO_BERRY(ITEM_KELPSY_BERRY)}, {ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), ITEM_TO_BERRY(ITEM_LEPPA_BERRY), ITEM_TO_BERRY(ITEM_HONDEW_BERRY)}, {ITEM_TO_BERRY(ITEM_AGUAV_BERRY), ITEM_TO_BERRY(ITEM_FIGY_BERRY), ITEM_TO_BERRY(ITEM_GREPA_BERRY)}, {ITEM_TO_BERRY(ITEM_LUM_BERRY), ITEM_TO_BERRY(ITEM_SITRUS_BERRY), ITEM_TO_BERRY(ITEM_TAMATO_BERRY)}, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index a05b2fa051..de2912aa08 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -9064,8 +9064,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = #endif .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, - .contestComboStarterId = COMBO_STARTER_CHARGE, - .contestComboMoves = {0}, + .contestComboStarterId = 0, + .contestComboMoves = {COMBO_STARTER_CHARGE}, .battleAnimScript = gBattleAnimMove_VoltTackle, .validApprenticeMove = TRUE, }, @@ -13351,8 +13351,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .category = DAMAGE_CATEGORY_SPECIAL, .contestEffect = CONTEST_EFFECT_AVOID_STARTLE, //CONTEST_EFFECT_QUICKLY_GROW_BORED .contestCategory = CONTEST_CATEGORY_COOL, - .contestComboStarterId = COMBO_STARTER_CHARGE, - .contestComboMoves = {0}, + .contestComboStarterId = 0, + .contestComboMoves = {COMBO_STARTER_CHARGE}, .battleAnimScript = gBattleAnimMove_VoltSwitch, }, @@ -19483,8 +19483,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = { .name = COMPOUND_STRING("秘剑千重涛"), .description = COMPOUND_STRING( - "用贝壳之剑攻击。散落碎片\n" - "会散落在对手脚下成为撒菱。"), + "High critical hit ratio. Sets\n" + "Splinters that hurt the foe."), .effect = EFFECT_CEASELESS_EDGE, .power = 65, .type = TYPE_DARK, diff --git a/src/data/object_events/object_event_pic_tables_followers.h b/src/data/object_events/object_event_pic_tables_followers.h index 13f9d17316..4339d4c683 100644 --- a/src/data/object_events/object_event_pic_tables_followers.h +++ b/src/data/object_events/object_event_pic_tables_followers.h @@ -796,13 +796,13 @@ static const struct SpriteFrameImage sPicTable_Steelix[] = { }; #if P_GENDER_DIFFERENCES static const struct SpriteFrameImage sPicTable_SteelixF[] = { - overworld_ascending_frames(gObjectEventPic_SteelixF, 4, 4), + overworld_ascending_frames(gObjectEventPic_SteelixF, 8, 8), }; #endif //P_GENDER_DIFFERENCES #if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_SteelixMega[] = { - overworld_ascending_frames(gObjectEventPic_SteelixMega, 4, 4), + overworld_ascending_frames(gObjectEventPic_SteelixMega, 8, 8), }; #endif // P_MEGA_EVOLUTIONS #endif // OW_BATTLE_ONLY_FORMS @@ -2994,7 +2994,7 @@ static const struct SpriteFrameImage sPicTable_Latias[] = { #if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_LatiasMega[] = { - overworld_ascending_frames(gObjectEventPic_LatiasMega, 4, 4), + overworld_ascending_frames(gObjectEventPic_LatiasMega, 8, 8), }; #endif // P_MEGA_EVOLUTIONS #endif // OW_BATTLE_ONLY_FORMS @@ -3007,7 +3007,7 @@ static const struct SpriteFrameImage sPicTable_Latios[] = { #if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_LatiosMega[] = { - overworld_ascending_frames(gObjectEventPic_LatiosMega, 4, 4), + overworld_ascending_frames(gObjectEventPic_LatiosMega, 8, 8), }; #endif // P_MEGA_EVOLUTIONS #endif // OW_BATTLE_ONLY_FORMS @@ -3020,7 +3020,7 @@ static const struct SpriteFrameImage sPicTable_Kyogre[] = { #if OW_BATTLE_ONLY_FORMS #if P_PRIMAL_REVERSIONS static const struct SpriteFrameImage sPicTable_KyogrePrimal[] = { - overworld_ascending_frames(gObjectEventPic_KyogrePrimal, 4, 4), + overworld_ascending_frames(gObjectEventPic_KyogrePrimal, 8, 8), }; #endif // P_PRIMAL_REVERSIONS #endif // OW_BATTLE_ONLY_FORMS @@ -3033,7 +3033,7 @@ static const struct SpriteFrameImage sPicTable_Groudon[] = { #if OW_BATTLE_ONLY_FORMS #if P_PRIMAL_REVERSIONS static const struct SpriteFrameImage sPicTable_GroudonPrimal[] = { - overworld_ascending_frames(gObjectEventPic_GroudonPrimal, 4, 4), + overworld_ascending_frames(gObjectEventPic_GroudonPrimal, 8, 8), }; #endif // P_PRIMAL_REVERSIONS #endif // OW_BATTLE_ONLY_FORMS @@ -3046,7 +3046,7 @@ static const struct SpriteFrameImage sPicTable_Rayquaza[] = { #if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_RayquazaMega[] = { - overworld_ascending_frames(gObjectEventPic_RayquazaMega, 4, 4), + overworld_ascending_frames(gObjectEventPic_RayquazaMega, 8, 8), }; #endif // P_MEGA_EVOLUTIONS #endif // OW_BATTLE_ONLY_FORMS diff --git a/src/debug.c b/src/debug.c index a3d1e05392..3f1a53c5b9 100644 --- a/src/debug.c +++ b/src/debug.c @@ -2255,7 +2255,7 @@ static void DebugAction_Give_PokemonSimple(u8 taskId) gTasks[taskId].tIsComplex = FALSE; FreeMonIconPalettes(); - LoadMonIconPalette(gTasks[taskId].tInput); + LoadMonIconPalettePersonality(gTasks[taskId].tInput, 0); gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } @@ -2289,7 +2289,7 @@ static void DebugAction_Give_PokemonComplex(u8 taskId) gTasks[taskId].tIsComplex = TRUE; FreeMonIconPalettes(); - LoadMonIconPalette(gTasks[taskId].tInput); + LoadMonIconPalettePersonality(gTasks[taskId].tInput, 0); gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; gTasks[taskId].tIterator = 0; @@ -2313,7 +2313,7 @@ static void DebugAction_Give_Pokemon_SelectId(u8 taskId) Debug_Display_SpeciesInfo(gTasks[taskId].tInput, gTasks[taskId].tDigit, gTasks[taskId].tSubWindowId); FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); FreeMonIconPalettes(); - LoadMonIconPalette(gTasks[taskId].tInput); + LoadMonIconPalettePersonality(gTasks[taskId].tInput, 0); gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 848289aec7..188f4dc742 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1971,7 +1971,11 @@ struct Pokemon *GetFirstLiveMon(void) for (i = 0; i < PARTY_SIZE; i++) { struct Pokemon *mon = &gPlayerParty[i]; - if ((OW_FOLLOWERS_ALLOWED_SPECIES && GetMonData(mon, MON_DATA_SPECIES_OR_EGG) != VarGet(OW_FOLLOWERS_ALLOWED_SPECIES)) + u32 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); + if (species == SPECIES_NONE) + continue; + + if ((OW_FOLLOWERS_ALLOWED_SPECIES && species != VarGet(OW_FOLLOWERS_ALLOWED_SPECIES)) || (OW_FOLLOWERS_ALLOWED_MET_LVL && GetMonData(mon, MON_DATA_MET_LEVEL) != VarGet(OW_FOLLOWERS_ALLOWED_MET_LVL)) || (OW_FOLLOWERS_ALLOWED_MET_LOC && GetMonData(mon, MON_DATA_MET_LOCATION) != VarGet(OW_FOLLOWERS_ALLOWED_MET_LOC))) continue; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 56fe5868e5..3c4a1786cf 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -277,9 +277,9 @@ static const u8 sRSAvatarGfxIds[GENDER_COUNT] = [FEMALE] = OBJ_EVENT_GFX_LINK_RS_MAY }; -static const struct __attribute__((packed)) +static const struct PACKED { - u8 graphicsId; + u16 graphicsId; u8 playerFlag; } sPlayerAvatarGfxToStateFlag[GENDER_COUNT][5] = { diff --git a/src/generational_changes.c b/src/generational_changes.c index a02b6ce944..40da3d2dd1 100644 --- a/src/generational_changes.c +++ b/src/generational_changes.c @@ -3,7 +3,7 @@ #include "malloc.h" #include "constants/generational_changes.h" -#define UNPACK_CONFIG_GEN_CHANGES2(_name, _field, ...) ._field = B_##_name, +#define UNPACK_CONFIG_GEN_CHANGES2(_name, _field, ...) ._field = _name, const struct GenChanges sConfigChanges = { @@ -31,7 +31,7 @@ EWRAM_DATA struct GenChanges *gConfigChangesTestOverride = NULL; // Gets the value of a volatile status flag for a certain battler // Primarily used for the debug menu and scripts. Outside of it explicit references are preferred -u32 GetConfig(enum ConfigTag _genConfig) +u32 GetConfigInternal(enum ConfigTag _genConfig) { #if TESTING if (gConfigChangesTestOverride == NULL) diff --git a/src/pokemon.c b/src/pokemon.c index 7a4745b7b1..416265b768 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3725,6 +3725,9 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov u8 effectFlags; s8 evChange; u16 evCount; + u8 levelBefore; + bool8 didLevelUp = FALSE; + bool8 isLevelUpItem; // Determine the EV cap to use u32 maxAllowedEVs = !B_EV_ITEMS_CAP ? MAX_TOTAL_EVS : GetCurrentEVCap(); @@ -3746,6 +3749,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Get item effect itemEffect = GetItemEffect(item); + isLevelUpItem = (itemEffect[3] & ITEM3_LEVEL_UP) != 0; + levelBefore = GetMonData(mon, MON_DATA_LEVEL, NULL); // Do item effect for (i = 0; i < ITEM_EFFECT_ARG_START; i++) @@ -3800,6 +3805,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { SetMonData(mon, MON_DATA_EXP, &dataUnsigned); CalculateMonStats(mon); + if (GetMonData(mon, MON_DATA_LEVEL, NULL) > levelBefore) + didLevelUp = TRUE; retVal = FALSE; } } @@ -3918,6 +3925,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { u32 currentHP = GetMonData(mon, MON_DATA_HP, NULL); u32 maxHP = GetMonData(mon, MON_DATA_MAX_HP, NULL); + if (isLevelUpItem && !didLevelUp && (effectFlags & (ITEM4_REVIVE >> 2))) + { + itemEffectParam++; + break; + } // Check use validity. if ((effectFlags & (ITEM4_REVIVE >> 2) && currentHP != 0) || (!(effectFlags & (ITEM4_REVIVE >> 2)) && currentHP == 0)) diff --git a/test/battle/ability/aerilate.c b/test/battle/ability/aerilate.c index 5158a58de9..d90ad17403 100644 --- a/test/battle/ability/aerilate.c +++ b/test/battle/ability/aerilate.c @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Aerilate boosts power of affected moves by 20% (Gen7+) or 30 PARAMETRIZE { move = MOVE_SKILL_SWAP; genConfig = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_ATE_MULTIPLIER, genConfig); + WITH_CONFIG(B_ATE_MULTIPLIER, genConfig); ASSUME(GetMoveType(MOVE_TACKLE) == TYPE_NORMAL); ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/arena_trap.c b/test/battle/ability/arena_trap.c index 0412b8f359..eb5a9c91d6 100644 --- a/test/battle/ability/arena_trap.c +++ b/test/battle/ability/arena_trap.c @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Arena Trap doesn't prevent switch outs via moves that switch GIVEN { ASSUME(GetMoveEffect(move) == effect); ASSUME(GetMoveEffect(MOVE_SOAK) == EFFECT_SOAK); - WITH_CONFIG(CONFIG_TELEPORT_BEHAVIOR, GEN_8); + WITH_CONFIG(B_TELEPORT_BEHAVIOR, GEN_8); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); } @@ -113,7 +113,7 @@ SINGLE_BATTLE_TEST("Arena Trap prevents switch outs from Ghost-type Pokémon (Ge { GIVEN { ASSUME(GetSpeciesType(SPECIES_SHUPPET, 0) == TYPE_GHOST); - WITH_CONFIG(CONFIG_GHOSTS_ESCAPE, GEN_5); + WITH_CONFIG(B_GHOSTS_ESCAPE, GEN_5); PLAYER(SPECIES_SHUPPET); OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); } } WHEN { @@ -129,7 +129,7 @@ SINGLE_BATTLE_TEST("Arena Trap doesn't prevent switch outs from Ghost-type Poké { GIVEN { ASSUME(GetSpeciesType(SPECIES_SHUPPET, 0) == TYPE_GHOST); - WITH_CONFIG(CONFIG_GHOSTS_ESCAPE, GEN_6); + WITH_CONFIG(B_GHOSTS_ESCAPE, GEN_6); PLAYER(SPECIES_SHUPPET); OPPONENT(SPECIES_DIGLETT) { Ability(ABILITY_ARENA_TRAP); } } WHEN { diff --git a/test/battle/ability/battle_bond.c b/test/battle/ability/battle_bond.c index 9d8bb1b3cd..6c041d4f32 100644 --- a/test/battle/ability/battle_bond.c +++ b/test/battle/ability/battle_bond.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Battle Bond transforms player's Greninja - Singles") PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 2; } GIVEN { - WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8); + WITH_CONFIG(B_BATTLE_BOND, GEN_8); PLAYER(SPECIES_GRENINJA_BATTLE_BOND); if (monsCountPlayer == 2) { PLAYER(SPECIES_WOBBUFFET); @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Battle Bond transforms opponent's Greninja - Singles") PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 2; } GIVEN { - WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8); + WITH_CONFIG(B_BATTLE_BOND, GEN_8); OPPONENT(SPECIES_GRENINJA_BATTLE_BOND); if (monsCountOpponent == 2) { OPPONENT(SPECIES_WOBBUFFET); @@ -113,7 +113,7 @@ DOUBLE_BATTLE_TEST("Battle Bond transforms player's Greninja when fainting its A PARAMETRIZE { monsCountPlayer = 3; monsCountOpponent = 3; } GIVEN { - WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8); + WITH_CONFIG(B_BATTLE_BOND, GEN_8); PLAYER(SPECIES_GRENINJA_BATTLE_BOND); PLAYER(SPECIES_WOBBUFFET) { HP(1); } if (monsCountPlayer == 3) { @@ -145,7 +145,7 @@ DOUBLE_BATTLE_TEST("Battle Bond transforms player's Greninja when fainting its A SINGLE_BATTLE_TEST("Battle Bond increases Atk, SpAtk and Speed by 1 stage (Gen9+)") { GIVEN { - WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_9); + WITH_CONFIG(B_BATTLE_BOND, GEN_9); PLAYER(SPECIES_GRENINJA_BATTLE_BOND) { Ability(ABILITY_BATTLE_BOND); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("Battle Bond increases Atk, SpAtk and Speed by 1 stage (Gen9+ SINGLE_BATTLE_TEST("Battle Bond increases a Stat even if only one can be increased (Gen9+)") { GIVEN { - WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_9); + WITH_CONFIG(B_BATTLE_BOND, GEN_9); PLAYER(SPECIES_GRENINJA_BATTLE_BOND) { Ability(ABILITY_BATTLE_BOND); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/cheek_pouch.c b/test/battle/ability/cheek_pouch.c index 0e52ca3fe3..8109dbe17a 100644 --- a/test/battle/ability/cheek_pouch.c +++ b/test/battle/ability/cheek_pouch.c @@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate when using Natural Gift") } } -SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate when using Fling") +SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate when user uses Fling") { GIVEN { ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING); diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c index 5a075a8ebf..e33c4e1521 100644 --- a/test/battle/ability/commander.c +++ b/test/battle/ability/commander.c @@ -455,3 +455,22 @@ DOUBLE_BATTLE_TEST("Commander prevent Dondozo from switch out by Dragon Tail") NOT MESSAGE("Wobbuffet was dragged out!"); } } + +DOUBLE_BATTLE_TEST("Commander will not activate if partner Dondozo is about to switch out") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_DONDOZO); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + SWITCH(playerLeft, 2); + SWITCH(playerRight, 3); + } + } SCENE { + NOT ABILITY_POPUP(playerRight, ABILITY_COMMANDER); + } +} diff --git a/test/battle/ability/competitive.c b/test/battle/ability/competitive.c index b7d938ae8d..ccd7a24d2f 100644 --- a/test/battle/ability/competitive.c +++ b/test/battle/ability/competitive.c @@ -140,7 +140,7 @@ SINGLE_BATTLE_TEST("Competitive activates after Sticky Web lowers Speed") SINGLE_BATTLE_TEST("Competitive doesn't activate after Sticky Web lowers Speed if Court Changed (gen8)") { GIVEN { - WITH_CONFIG(CONFIG_DEFIANT_STICKY_WEB, GEN_8); + WITH_CONFIG(B_DEFIANT_STICKY_WEB, GEN_8); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } OPPONENT(SPECIES_WOBBUFFET); @@ -167,7 +167,7 @@ SINGLE_BATTLE_TEST("Competitive doesn't activate after Sticky Web lowers Speed i SINGLE_BATTLE_TEST("Competitive correctly activates after Sticky Web lowers Speed if Court Changed (Gen8)") { GIVEN { - WITH_CONFIG(CONFIG_DEFIANT_STICKY_WEB, GEN_8); + WITH_CONFIG(B_DEFIANT_STICKY_WEB, GEN_8); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/corrosion.c b/test/battle/ability/corrosion.c index 75ac0fc4bb..c1e56ac596 100644 --- a/test/battle/ability/corrosion.c +++ b/test/battle/ability/corrosion.c @@ -66,34 +66,7 @@ SINGLE_BATTLE_TEST("Corrosion does not effect poison type damaging moves if the } } -SINGLE_BATTLE_TEST("Corrosion can poison Poison- and Steel-type targets if it uses Fling while holding a Toxic Orb or a Poison Barb") -{ - u16 heldItem; - - PARAMETRIZE { heldItem = ITEM_POISON_BARB; } - PARAMETRIZE { heldItem = ITEM_TOXIC_ORB; } - - GIVEN { - ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING); - ASSUME(gItemsInfo[ITEM_POISON_BARB].holdEffect == HOLD_EFFECT_TYPE_POWER); - ASSUME(gItemsInfo[ITEM_POISON_BARB].secondaryId == TYPE_POISON); - ASSUME(gItemsInfo[ITEM_TOXIC_ORB].holdEffect == HOLD_EFFECT_TOXIC_ORB); - PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); Item(heldItem); } - OPPONENT(SPECIES_ODDISH); - } WHEN { - TURN { MOVE(player, MOVE_FLING); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player); - HP_BAR(opponent); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - if (heldItem == ITEM_POISON_BARB) - STATUS_ICON(opponent, poison: TRUE); - else - STATUS_ICON(opponent, badPoison: TRUE); - } -} - -SINGLE_BATTLE_TEST("If a Poison- or Steel-type Pokémon with Corrosion holds a Toxic Orb, it will badly poison itself") +SINGLE_BATTLE_TEST("Corrosion badly poisons its Poison/Steel-type user who holds a Toxic Orb") { GIVEN { ASSUME(gItemsInfo[ITEM_TOXIC_ORB].holdEffect == HOLD_EFFECT_TOXIC_ORB); @@ -107,7 +80,7 @@ SINGLE_BATTLE_TEST("If a Poison- or Steel-type Pokémon with Corrosion holds a T } } -SINGLE_BATTLE_TEST("If a Poison- or Steel-type Pokémon with Corrosion poisons a target with Synchronize, Synchronize will not poison Poison- or Steel-type Pokémon") +SINGLE_BATTLE_TEST("Corrosion can poison a target with Synchronize and Synchronize will not poison Poison- or Steel-type Pokémon") { u16 move; PARAMETRIZE { move = MOVE_TOXIC; } diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c index d2395fda17..eaf354a4c0 100644 --- a/test/battle/ability/cute_charm.c +++ b/test/battle/ability/cute_charm.c @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Cute Charm triggers 1/3 times (Gen3) or 30% (Gen 4+) of the PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30% PASSES_RANDOMLY(passes, trials, RNG_CUTE_CHARM); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); } OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM); } diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index 075a3e46a5..65f3967e98 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -580,7 +580,7 @@ SINGLE_BATTLE_TEST("Dancer user may hit itself in confusion instead of copying a PARAMETRIZE { genConfig = GEN_7; pctChance = 33; } PASSES_RANDOMLY(pctChance, 100, RNG_CONFUSION); GIVEN { - WITH_CONFIG(CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig); + WITH_CONFIG(B_CONFUSION_SELF_DMG_CHANCE, genConfig); ASSUME(IsDanceMove(MOVE_DRAGON_DANCE)); ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); PLAYER(SPECIES_WOBBUFFET) { Speed(30); } @@ -747,7 +747,7 @@ SINGLE_BATTLE_TEST("Dancer can still copy status moves if the user is holding an DOUBLE_BATTLE_TEST("Dancer copies Lunar Dance after the original user faints, but before the replacement is sent out") { GIVEN { - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_7); ASSUME(GetMoveEffect(MOVE_LUNAR_DANCE) == EFFECT_LUNAR_DANCE); PLAYER(SPECIES_WOBBUFFET) { Speed(50); } PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); } diff --git a/test/battle/ability/dauntless_shield.c b/test/battle/ability/dauntless_shield.c index 9a8871d5d7..e31ac34d4f 100644 --- a/test/battle/ability/dauntless_shield.c +++ b/test/battle/ability/dauntless_shield.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Dauntless Shield raises Defense by one stage") SINGLE_BATTLE_TEST("Dauntless Shield raises Defense by one stage every time it switches in (Gen8)") { GIVEN { - WITH_CONFIG(CONFIG_DAUNTLESS_SHIELD, GEN_8); + WITH_CONFIG(B_DAUNTLESS_SHIELD, GEN_8); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); } OPPONENT(SPECIES_WYNAUT); @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Dauntless Shield raises Defense by one stage every time it s SINGLE_BATTLE_TEST("Dauntless Shield raises Defense by one stage only once per battle (Gen 9+)") { GIVEN { - WITH_CONFIG(CONFIG_DAUNTLESS_SHIELD, GEN_9); + WITH_CONFIG(B_DAUNTLESS_SHIELD, GEN_9); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); } OPPONENT(SPECIES_WYNAUT); diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index 2c5c529717..2ac4e36948 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed") SINGLE_BATTLE_TEST("Defiant doesn't activate after Sticky Web lowers Speed if Court Changed (Gen8)") { GIVEN { - WITH_CONFIG(CONFIG_DEFIANT_STICKY_WEB, GEN_8); + WITH_CONFIG(B_DEFIANT_STICKY_WEB, GEN_8); ASSUME(GetMoveEffect(MOVE_GROWL) == EFFECT_ATTACK_DOWN); ASSUME(GetMoveEffect(MOVE_STICKY_WEB) == EFFECT_STICKY_WEB); ASSUME(GetMoveEffect(MOVE_COURT_CHANGE) == EFFECT_COURT_CHANGE); @@ -179,7 +179,7 @@ SINGLE_BATTLE_TEST("Defiant doesn't activate after Sticky Web lowers Speed if Co SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed if Court Changed (Gen9)") { GIVEN { - WITH_CONFIG(CONFIG_DEFIANT_STICKY_WEB, GEN_9); + WITH_CONFIG(B_DEFIANT_STICKY_WEB, GEN_9); ASSUME(GetMoveEffect(MOVE_GROWL) == EFFECT_ATTACK_DOWN); ASSUME(GetMoveEffect(MOVE_STICKY_WEB) == EFFECT_STICKY_WEB); ASSUME(GetMoveEffect(MOVE_COURT_CHANGE) == EFFECT_COURT_CHANGE); diff --git a/test/battle/ability/disguise.c b/test/battle/ability/disguise.c index a874ec254c..f8874a3d55 100644 --- a/test/battle/ability/disguise.c +++ b/test/battle/ability/disguise.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Disguised Mimikyu doesn't lose 1/8 of its max HP upon changing to its busted form (Gen7)") { GIVEN { - WITH_CONFIG(CONFIG_DISGUISE_HP_LOSS, GEN_7); + WITH_CONFIG(B_DISGUISE_HP_LOSS, GEN_7); PLAYER(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu will lose 1/8 of its max HP upon changing s16 disguiseDamage; GIVEN { - WITH_CONFIG(CONFIG_DISGUISE_HP_LOSS, GEN_8); + WITH_CONFIG(B_DISGUISE_HP_LOSS, GEN_8); PLAYER(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/drizzle.c b/test/battle/ability/drizzle.c index 8e6f7876c9..d46087ef18 100644 --- a/test/battle/ability/drizzle.c +++ b/test/battle/ability/drizzle.c @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Drizzle summons rain", s16 damage) SINGLE_BATTLE_TEST("Drizzle sets up rain for 5 turns (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_POLITOED) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DRIZZLE); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -48,7 +48,7 @@ SINGLE_BATTLE_TEST("Drizzle sets up rain for 5 turns (Gen6+)") SINGLE_BATTLE_TEST("Drizzle sets up rain for 8 turns with Damp Rock (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_POLITOED) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DRIZZLE); Item(ITEM_DAMP_ROCK); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Drizzle sets up rain for 8 turns with Damp Rock (Gen6+)") SINGLE_BATTLE_TEST("Drizzle sets up permanent rain (Gen3-5)") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_3); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_3); PLAYER(SPECIES_POLITOED) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DRIZZLE); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { diff --git a/test/battle/ability/drought.c b/test/battle/ability/drought.c index ba78643b50..f4d0f83446 100644 --- a/test/battle/ability/drought.c +++ b/test/battle/ability/drought.c @@ -4,7 +4,7 @@ SINGLE_BATTLE_TEST("Drought sets up sun for 5 turns (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_NINETALES) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DROUGHT); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Drought sets up sun for 5 turns (Gen6+)") SINGLE_BATTLE_TEST("Drought sets up sun for 8 turns with Heat Rock (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_NINETALES) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DROUGHT); Item(ITEM_HEAT_ROCK); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Drought sets up sun for 8 turns with Heat Rock (Gen6+)") SINGLE_BATTLE_TEST("Drought sets up permanent sun (Gen3-5)") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_3); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_3); PLAYER(SPECIES_NINETALES) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DROUGHT); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { diff --git a/test/battle/ability/early_bird.c b/test/battle/ability/early_bird.c index 9b368970f6..0f41fffc03 100644 --- a/test/battle/ability/early_bird.c +++ b/test/battle/ability/early_bird.c @@ -1,4 +1,49 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Early Bird (Ability) test titles") +SINGLE_BATTLE_TEST("Early Bird wakes up if 1 sleep turn is preset") +{ + GIVEN { + PLAYER(SPECIES_DODUO) { Ability(ABILITY_EARLY_BIRD); Status1(STATUS1_SLEEP_TURN(1)); Moves(MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Doduo woke up!"); + STATUS_ICON(player, none: TRUE); + MESSAGE("Doduo used Celebrate!"); + } +} + +SINGLE_BATTLE_TEST("Early Bird turns a 3-turn sleep into one missed turn") +{ + GIVEN { + PLAYER(SPECIES_DODUO) { Ability(ABILITY_EARLY_BIRD); Status1(STATUS1_SLEEP_TURN(3)); Moves(MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Doduo is fast asleep."); + MESSAGE("Doduo woke up!"); + STATUS_ICON(player, none: TRUE); + MESSAGE("Doduo used Celebrate!"); + } +} + +SINGLE_BATTLE_TEST("Early Bird reduces Rest sleep to one turn") +{ + GIVEN { + PLAYER(SPECIES_DODUO) { Ability(ABILITY_EARLY_BIRD); MaxHP(99); HP(66); Moves(MOVE_REST, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REST); } + TURN { MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Doduo is fast asleep."); + MESSAGE("Doduo woke up!"); + STATUS_ICON(player, none: TRUE); + MESSAGE("Doduo used Celebrate!"); + } +} diff --git a/test/battle/ability/effect_spore.c b/test/battle/ability/effect_spore.c index 59b680f422..a8f9aa4eb7 100644 --- a/test/battle/ability/effect_spore.c +++ b/test/battle/ability/effect_spore.c @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes poison 3.3% (Gen3), 10% (Gen4) and 9% (G PARAMETRIZE { config = GEN_5; passes = 9; trials = 100; } // 9% PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes paralysis 3.3% (Gen3) and 10% (Gen4+) of PARAMETRIZE { config = GEN_5; passes = 1; trials = 10; } // 10% PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes sleep 3.3% (Gen3), 10% (Gen4) and 11% (G PARAMETRIZE { config = GEN_5; passes = 11; trials = 100; } // 11% PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("Effect Spore will check if it can inflict status onto attack PARAMETRIZE { config = GEN_5; passes = 11; trials = 100; } // 11% PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Status1(STATUS1_BURN); Ability(ABILITY_EFFECT_SPORE); } diff --git a/test/battle/ability/emergency_exit.c b/test/battle/ability/emergency_exit.c index a03a4853cb..6112267aa5 100644 --- a/test/battle/ability/emergency_exit.c +++ b/test/battle/ability/emergency_exit.c @@ -209,3 +209,73 @@ WILD_BATTLE_TEST("Emergency Exit activates when taking residual damage and falli EXPECT_EQ(gBattleOutcome, B_OUTCOME_PLAYER_TELEPORTED); } } + +SINGLE_BATTLE_TEST("Emergency Exit will trigger due to recoil damage") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_MIND_BLOWN) == EFFECT_MAX_HP_50_RECOIL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_MIND_BLOWN); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, opponent); + HP_BAR(player); + HP_BAR(opponent); + ABILITY_POPUP(opponent, ABILITY_EMERGENCY_EXIT); + } +} + +SINGLE_BATTLE_TEST("Emergency Exit will trigger due to confusion damage") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_CONFUSE_RAY); + MOVE(opponent, MOVE_POUND); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponent); + HP_BAR(opponent); + NOT ABILITY_POPUP(opponent, ABILITY_EMERGENCY_EXIT); + } +} + +SINGLE_BATTLE_TEST("Emergency Exit is not triggered by Pain Split") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_PAIN_SPLIT) == EFFECT_PAIN_SPLIT); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PAIN_SPLIT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PAIN_SPLIT, player); + HP_BAR(opponent); + NOT ABILITY_POPUP(opponent, ABILITY_EMERGENCY_EXIT); + } +} + +SINGLE_BATTLE_TEST("Emergency Exit will trigger due to Jump Kick recoil") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_JUMP_KICK) == EFFECT_RECOIL_IF_MISS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_JUMP_KICK, hit: FALSE); SEND_OUT(opponent, 1); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_JUMP_KICK, opponent); + HP_BAR(opponent); + ABILITY_POPUP(opponent, ABILITY_EMERGENCY_EXIT); + } +} + diff --git a/test/battle/ability/flame_body.c b/test/battle/ability/flame_body.c index 8db6f2c142..5d1333de47 100644 --- a/test/battle/ability/flame_body.c +++ b/test/battle/ability/flame_body.c @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Flame Body triggers 1/3 times (Gen3) or 30% (Gen 4+) of the PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30% PASSES_RANDOMLY(passes, trials, RNG_FLAME_BODY); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_MAGMAR) { Ability(ABILITY_FLAME_BODY); } diff --git a/test/battle/ability/forewarn.c b/test/battle/ability/forewarn.c index 810fcd975f..dd1c99da99 100644 --- a/test/battle/ability/forewarn.c +++ b/test/battle/ability/forewarn.c @@ -1,4 +1,84 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Forewarn (Ability) test titles") +DOUBLE_BATTLE_TEST("Forewarn warns about the highest power move among all opposing battlers") +{ + GIVEN { + PLAYER(SPECIES_MUSHARNA) { Ability(ABILITY_FOREWARN); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ZUBAT) { Moves(MOVE_CRUNCH, MOVE_CELEBRATE); } + OPPONENT(SPECIES_EXCADRILL) { Moves(MOVE_FISSURE, MOVE_CELEBRATE); } + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_FOREWARN); + MESSAGE("Forewarn alerted Musharna to the opposing Excadrill's Fissure!"); + } +} + +SINGLE_BATTLE_TEST("Forewarn randomly chooses between same-power moves on one opponent") +{ + PASSES_RANDOMLY(1, 3, RNG_FOREWARN); + GIVEN { + ASSUME(GetMovePower(MOVE_TACKLE) == GetMovePower(MOVE_POUND)); + ASSUME(GetMovePower(MOVE_TACKLE) == GetMovePower(MOVE_SCRATCH)); + PLAYER(SPECIES_MUSHARNA) { Ability(ABILITY_FOREWARN); } + OPPONENT(SPECIES_ZUBAT) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_CELEBRATE); } + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(player, ABILITY_FOREWARN); + MESSAGE("Forewarn alerted Musharna to the opposing Zubat's Tackle!"); + } +} + +DOUBLE_BATTLE_TEST("Forewarn randomly chooses between opponents with same-power moves") +{ + PASSES_RANDOMLY(1, 4, RNG_FOREWARN); + GIVEN { + ASSUME(GetMovePower(MOVE_TACKLE) == GetMovePower(MOVE_POUND)); + ASSUME(GetMovePower(MOVE_TACKLE) == GetMovePower(MOVE_SCRATCH)); + ASSUME(GetMovePower(MOVE_TACKLE) == GetMovePower(MOVE_QUICK_ATTACK)); + PLAYER(SPECIES_MUSHARNA) { Ability(ABILITY_FOREWARN); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ZUBAT) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_PECK, MOVE_CELEBRATE); } + OPPONENT(SPECIES_EXCADRILL) { Moves(MOVE_SCRATCH, MOVE_QUICK_ATTACK, MOVE_ABSORB, MOVE_CELEBRATE); } + } WHEN { + TURN {} + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_FOREWARN); + MESSAGE("Forewarn alerted Musharna to the opposing Zubat's Tackle!"); + } +} + +DOUBLE_BATTLE_TEST("Forewarn does not trigger if a mon switches in while the opposing field is empty") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_U_TURN) == EFFECT_HIT_ESCAPE); + ASSUME(GetMoveEffect(MOVE_HEALING_WISH) == EFFECT_HEALING_WISH); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_MUSHARNA) { Ability(ABILITY_FOREWARN); } + OPPONENT(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TREECKO); + OPPONENT(SPECIES_TORCHIC); + } WHEN { + TURN { + MOVE(opponentRight, MOVE_HEALING_WISH); + MOVE(playerLeft, MOVE_U_TURN, target: opponentLeft); + SEND_OUT(playerLeft, 2); + SEND_OUT(opponentLeft, 2); + SEND_OUT(opponentRight, 3); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, playerLeft); + HP_BAR(opponentLeft); + NOT ABILITY_POPUP(playerLeft, ABILITY_FOREWARN); + MESSAGE("2 sent out Treecko!"); + MESSAGE("2 sent out Torchic!"); + NOT ABILITY_POPUP(playerLeft, ABILITY_FOREWARN); + } +} diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c index cc40d98b87..da8ed8f482 100644 --- a/test/battle/ability/gale_wings.c +++ b/test/battle/ability/gale_wings.c @@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority at full HP (Gen 7+)") PARAMETRIZE { hp = 100; config = GEN_6; } PARAMETRIZE { hp = 99; config = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_GALE_WINGS, config); + WITH_CONFIG(B_GALE_WINGS, config); ASSUME(GetMoveType(MOVE_AERIAL_ACE) == TYPE_FLYING); PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(hp); MaxHP(100); Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } diff --git a/test/battle/ability/galvanize.c b/test/battle/ability/galvanize.c index 8388780dc0..536bc87076 100644 --- a/test/battle/ability/galvanize.c +++ b/test/battle/ability/galvanize.c @@ -52,7 +52,7 @@ SINGLE_BATTLE_TEST("Galvanize boosts power of affected moves by 20% (Gen7+) or 3 PARAMETRIZE { ability = ABILITY_GALVANIZE; genConfig = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_ATE_MULTIPLIER, genConfig); + WITH_CONFIG(B_ATE_MULTIPLIER, genConfig); PLAYER(SPECIES_GEODUDE_ALOLA) { Ability(ability); Moves(MOVE_TACKLE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/heatproof.c b/test/battle/ability/heatproof.c index 154569fd2a..204592259b 100644 --- a/test/battle/ability/heatproof.c +++ b/test/battle/ability/heatproof.c @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Heatproof halves the damage done by burn from 1/8th to 1/16t PARAMETRIZE { config = GEN_6; burnRate = 16; } GIVEN { - WITH_CONFIG(CONFIG_BURN_DAMAGE, config); + WITH_CONFIG(B_BURN_DAMAGE, config); PLAYER (SPECIES_BRONZONG) { Ability(ABILITY_HEATPROOF); Status1(STATUS1_BURN); } OPPONENT (SPECIES_WOBBUFFET); } @@ -49,4 +49,3 @@ SINGLE_BATTLE_TEST("Heatproof halves the damage done by burn from 1/8th to 1/16t HP_BAR(player, damage: maxHP / burnRate); } } - diff --git a/test/battle/ability/illusion.c b/test/battle/ability/illusion.c index 46d99c7741..2a35953e0c 100644 --- a/test/battle/ability/illusion.c +++ b/test/battle/ability/illusion.c @@ -117,6 +117,7 @@ SINGLE_BATTLE_TEST("Illusion breaks if user loses Illusion due to Worry Seed") SINGLE_BATTLE_TEST("Illusion breaks when attacked behind a substitute") { GIVEN { + WITH_CONFIG(B_INFILTRATOR_SUBSTITUTE, GEN_6); PLAYER(SPECIES_DRAGAPULT) { Ability(ABILITY_INFILTRATOR); Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } OPPONENT(SPECIES_ZOROARK) { Speed(2); } diff --git a/test/battle/ability/infiltrator.c b/test/battle/ability/infiltrator.c index faf00ee113..cdb6d7cffe 100644 --- a/test/battle/ability/infiltrator.c +++ b/test/battle/ability/infiltrator.c @@ -1,4 +1,238 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Infiltrator (Ability) test titles") +SINGLE_BATTLE_TEST("Infiltrator bypasses the opponent's Light Screen/Reflect/Aurora Veil", s16 damage) +{ + u32 screenMove, attackingMove, ability; + + PARAMETRIZE { screenMove = MOVE_LIGHT_SCREEN; attackingMove = MOVE_WATER_GUN; ability = ABILITY_INFILTRATOR; } + PARAMETRIZE { screenMove = MOVE_LIGHT_SCREEN; attackingMove = MOVE_WATER_GUN; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { screenMove = MOVE_REFLECT; attackingMove = MOVE_SCRATCH; ability = ABILITY_INFILTRATOR; } + PARAMETRIZE { screenMove = MOVE_REFLECT; attackingMove = MOVE_SCRATCH; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { screenMove = MOVE_AURORA_VEIL; attackingMove = MOVE_WATER_GUN; ability = ABILITY_INFILTRATOR; } + PARAMETRIZE { screenMove = MOVE_AURORA_VEIL; attackingMove = MOVE_WATER_GUN; ability = ABILITY_CLEAR_BODY; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_LIGHT_SCREEN) == EFFECT_LIGHT_SCREEN); + ASSUME(GetMoveEffect(MOVE_REFLECT) == EFFECT_REFLECT); + ASSUME(GetMoveEffect(MOVE_AURORA_VEIL) == EFFECT_AURORA_VEIL); + ASSUME(GetMoveCategory(MOVE_WATER_GUN) == DAMAGE_CATEGORY_SPECIAL); + ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_DRAGAPULT) { Ability(ability); } + OPPONENT(SPECIES_ABOMASNOW) { Ability(ABILITY_SNOW_WARNING); } + } WHEN { + TURN { MOVE(opponent, screenMove); MOVE(player, attackingMove); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, screenMove, opponent); + ANIMATION(ANIM_TYPE_MOVE, attackingMove, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(0.5), results[1].damage); + EXPECT_MUL_EQ(results[2].damage, UQ_4_12(0.5), results[3].damage); + EXPECT_MUL_EQ(results[4].damage, UQ_4_12(0.5), results[5].damage); + } +} + +DOUBLE_BATTLE_TEST("Infiltrator doesn't bypass an ally's Light Screen/Reflect/Aurora Veil", s16 damage) +{ + u32 screenMove, attackingMove, ability; + + PARAMETRIZE { screenMove = MOVE_LIGHT_SCREEN; attackingMove = MOVE_WATER_GUN; ability = ABILITY_INFILTRATOR; } + PARAMETRIZE { screenMove = MOVE_LIGHT_SCREEN; attackingMove = MOVE_WATER_GUN; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { screenMove = MOVE_REFLECT; attackingMove = MOVE_SCRATCH; ability = ABILITY_INFILTRATOR; } + PARAMETRIZE { screenMove = MOVE_REFLECT; attackingMove = MOVE_SCRATCH; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { screenMove = MOVE_AURORA_VEIL; attackingMove = MOVE_WATER_GUN; ability = ABILITY_INFILTRATOR; } + PARAMETRIZE { screenMove = MOVE_AURORA_VEIL; attackingMove = MOVE_WATER_GUN; ability = ABILITY_CLEAR_BODY; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_LIGHT_SCREEN) == EFFECT_LIGHT_SCREEN); + ASSUME(GetMoveEffect(MOVE_REFLECT) == EFFECT_REFLECT); + ASSUME(GetMoveEffect(MOVE_AURORA_VEIL) == EFFECT_AURORA_VEIL); + ASSUME(GetMoveCategory(MOVE_WATER_GUN) == DAMAGE_CATEGORY_SPECIAL); + ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_DRAGAPULT) { Ability(ability); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ABOMASNOW) { Ability(ABILITY_SNOW_WARNING); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerRight, screenMove); MOVE(playerLeft, attackingMove, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, screenMove, playerRight); + ANIMATION(ANIM_TYPE_MOVE, attackingMove, playerLeft); + HP_BAR(playerRight, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_EQ(results[2].damage, results[3].damage); + EXPECT_EQ(results[4].damage, results[5].damage); + } +} + +SINGLE_BATTLE_TEST("Infiltrator bypasses the opponent's Mist") +{ + u32 ability; + + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_MIST) == EFFECT_MIST); + ASSUME(GetMoveEffect(MOVE_SCREECH) == EFFECT_DEFENSE_DOWN_2); + PLAYER(SPECIES_DRAGAPULT) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_MIST); MOVE(player, MOVE_SCREECH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponent); + if (ability == ABILITY_INFILTRATOR) + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, player); + else + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, player); + } +} + +DOUBLE_BATTLE_TEST("Infiltrator doesn't bypass an ally's Mist") +{ + u32 ability; + + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_MIST) == EFFECT_MIST); + ASSUME(GetMoveEffect(MOVE_SCREECH) == EFFECT_DEFENSE_DOWN_2); + PLAYER(SPECIES_DRAGAPULT) { Ability(ability); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerRight, MOVE_MIST); MOVE(playerLeft, MOVE_SCREECH, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, playerRight); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, playerLeft); + } +} + +SINGLE_BATTLE_TEST("Infiltrator bypasses the opponent's Safeguard") +{ + u32 ability; + + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_SAFEGUARD) == EFFECT_SAFEGUARD); + ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_NON_VOLATILE_STATUS); + PLAYER(SPECIES_DRAGAPULT) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SAFEGUARD); MOVE(player, MOVE_THUNDER_WAVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponent); + if (ability == ABILITY_INFILTRATOR) + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, player); + else + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, player); + } +} + +DOUBLE_BATTLE_TEST("Infiltrator doesn't bypass an ally's Safeguard") +{ + u32 ability; + + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_SAFEGUARD) == EFFECT_SAFEGUARD); + ASSUME(GetMoveEffect(MOVE_THUNDER_WAVE) == EFFECT_NON_VOLATILE_STATUS); + PLAYER(SPECIES_DRAGAPULT) { Ability(ability); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerRight, MOVE_SAFEGUARD); MOVE(playerLeft, MOVE_THUNDER_WAVE, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, playerRight); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, playerLeft); + } +} + +SINGLE_BATTLE_TEST("Infiltrator bypasses the opponent's Substitute (Gen 6+)") +{ + u32 ability, config; + + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; config = GEN_5; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; config = GEN_5; } + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; config = GEN_6; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; config = GEN_6; } + + GIVEN { + WITH_CONFIG(B_INFILTRATOR_SUBSTITUTE, config); + ASSUME(GetMoveEffect(MOVE_SUBSTITUTE) == EFFECT_SUBSTITUTE); + ASSUME(!MoveIgnoresSubstitute(MOVE_SCRATCH)); + PLAYER(SPECIES_DRAGAPULT) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); + if (ability == ABILITY_INFILTRATOR && config >= GEN_6) { + NOT SUB_HIT(opponent); + } else { + SUB_HIT(opponent); + } + } +} + +DOUBLE_BATTLE_TEST("Infiltrator bypasses an ally's Substitute (Gen 6+)") +{ + u32 ability, config; + + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; config = GEN_5; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; config = GEN_5; } + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; config = GEN_6; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; config = GEN_6; } + + GIVEN { + WITH_CONFIG(B_INFILTRATOR_SUBSTITUTE, config); + ASSUME(GetMoveEffect(MOVE_SUBSTITUTE) == EFFECT_SUBSTITUTE); + ASSUME(!MoveIgnoresSubstitute(MOVE_SCRATCH)); + PLAYER(SPECIES_DRAGAPULT) { Ability(ability); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerRight, MOVE_SUBSTITUTE); MOVE(playerLeft, MOVE_SCRATCH, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, playerRight); + if (ability == ABILITY_INFILTRATOR && config == GEN_6) { + NOT SUB_HIT(playerRight); + } else { + SUB_HIT(playerRight); + } + } +} + +SINGLE_BATTLE_TEST("Infiltrator doesn't ignore a battler's Substitute when using Transform or Sky Drop") +{ + u32 ability, move; + + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; move = MOVE_TRANSFORM; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; move = MOVE_TRANSFORM; } + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; move = MOVE_SKY_DROP; } + PARAMETRIZE { ability = ABILITY_INFILTRATOR; move = MOVE_SKY_DROP; } + + GIVEN { + WITH_CONFIG(B_INFILTRATOR_SUBSTITUTE, GEN_6); + ASSUME(GetMoveEffect(MOVE_SUBSTITUTE) == EFFECT_SUBSTITUTE); + ASSUME(GetMoveEffect(MOVE_TRANSFORM) == EFFECT_TRANSFORM); + ASSUME(GetMoveEffect(MOVE_SKY_DROP) == EFFECT_SKY_DROP); + PLAYER(SPECIES_DRAGAPULT) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, move, player); + } +} diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c index ef0d8ea8a0..8b2d92a590 100644 --- a/test/battle/ability/inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Inner Focus doesn't prevent intimidate (Gen3-7)") s16 turnTwoHit; GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_7); PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); } @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents intimidate (Gen8+)") s16 turnTwoHit; GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_8); PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); } diff --git a/test/battle/ability/intrepid_sword.c b/test/battle/ability/intrepid_sword.c index 2ea924fc26..52d9394d14 100644 --- a/test/battle/ability/intrepid_sword.c +++ b/test/battle/ability/intrepid_sword.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage") SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage every time it switches in (Gen8)") { GIVEN { - WITH_CONFIG(CONFIG_INTREPID_SWORD, GEN_8); + WITH_CONFIG(B_INTREPID_SWORD, GEN_8); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } OPPONENT(SPECIES_WYNAUT); @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage every time it swit SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage only once per battle (Gen9+)") { GIVEN { - WITH_CONFIG(CONFIG_INTREPID_SWORD, GEN_9); + WITH_CONFIG(B_INTREPID_SWORD, GEN_9); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } OPPONENT(SPECIES_WYNAUT); diff --git a/test/battle/ability/keen_eye.c b/test/battle/ability/keen_eye.c index 7dbef04ee8..17d4459641 100644 --- a/test/battle/ability/keen_eye.c +++ b/test/battle/ability/keen_eye.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye prevent accuracy stag PASSES_RANDOMLY(100, 100, RNG_ACCURACY); GIVEN { - WITH_CONFIG(CONFIG_ILLUMINATE_EFFECT, GEN_9); + WITH_CONFIG(B_ILLUMINATE_EFFECT, GEN_9); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) { Ability(ability); } } WHEN { @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye ignore target's evasi PASSES_RANDOMLY(100, 100, RNG_ACCURACY); GIVEN { - WITH_CONFIG(CONFIG_ILLUMINATE_EFFECT, GEN_9); + WITH_CONFIG(B_ILLUMINATE_EFFECT, GEN_9); ASSUME(GetMoveEffect(MOVE_DOUBLE_TEAM) == EFFECT_EVASION_UP); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) { Ability(ability); } @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye are ignored by Mold B PASSES_RANDOMLY(GetMoveAccuracy(MOVE_SCRATCH) * 3 / 4, 100, RNG_ACCURACY); GIVEN { - WITH_CONFIG(CONFIG_ILLUMINATE_EFFECT, GEN_9); + WITH_CONFIG(B_ILLUMINATE_EFFECT, GEN_9); PLAYER(speciesPlayer) { Ability(abilityPlayer); } OPPONENT(speciesOpponent) { Ability(abilityOpponent); } } WHEN { @@ -104,7 +104,7 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye don't prevent Topsy-T PARAMETRIZE { species = SPECIES_URSALUNA_BLOODMOON; ability = ABILITY_MINDS_EYE; } GIVEN { - WITH_CONFIG(CONFIG_ILLUMINATE_EFFECT, GEN_9); + WITH_CONFIG(B_ILLUMINATE_EFFECT, GEN_9); ASSUME(GetMoveEffect(MOVE_HONE_CLAWS) == EFFECT_ATTACK_ACCURACY_UP); ASSUME(GetMoveEffect(MOVE_TOPSY_TURVY) == EFFECT_TOPSY_TURVY); PLAYER(SPECIES_WOBBUFFET); @@ -144,7 +144,7 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye don't prevent receivi PARAMETRIZE { species = SPECIES_URSALUNA_BLOODMOON; ability = ABILITY_MINDS_EYE; } GIVEN { - WITH_CONFIG(CONFIG_ILLUMINATE_EFFECT, GEN_9); + WITH_CONFIG(B_ILLUMINATE_EFFECT, GEN_9); ASSUME(GetMoveEffect(MOVE_BATON_PASS) == EFFECT_BATON_PASS); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -177,7 +177,7 @@ SINGLE_BATTLE_TEST("Keen Eye & Gen9+ Illuminate don't prevent Spectral Thief fro PARAMETRIZE { species = SPECIES_STARYU; ability = ABILITY_ILLUMINATE; } GIVEN { - WITH_CONFIG(CONFIG_ILLUMINATE_EFFECT, GEN_9); + WITH_CONFIG(B_ILLUMINATE_EFFECT, GEN_9); ASSUME(GetMoveEffect(MOVE_HONE_CLAWS) == EFFECT_ATTACK_ACCURACY_UP); ASSUME(GetMoveEffect(MOVE_SPECTRAL_THIEF) == EFFECT_SPECTRAL_THIEF); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/leaf_guard.c b/test/battle/ability/leaf_guard.c index 8efa7abdf3..63fcf2d4f0 100644 --- a/test/battle/ability/leaf_guard.c +++ b/test/battle/ability/leaf_guard.c @@ -121,7 +121,7 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents Rest during sun (Gen 5+)") PARAMETRIZE { gen = GEN_4; } PARAMETRIZE { gen = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_LEAF_GUARD_PREVENTS_REST, gen); + WITH_CONFIG(B_LEAF_GUARD_PREVENTS_REST, gen); ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); PLAYER(SPECIES_LEAFEON) { Ability(ABILITY_LEAF_GUARD); HP(100); MaxHP(200); } OPPONENT(SPECIES_WOBBUFFET); @@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("Leaf Guard doesn't prevent Rest if Cloud Nine/Air Lock is on PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; } PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; } GIVEN { - WITH_CONFIG(CONFIG_LEAF_GUARD_PREVENTS_REST, GEN_5); + WITH_CONFIG(B_LEAF_GUARD_PREVENTS_REST, GEN_5); ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); PLAYER(SPECIES_LEAFEON) { Ability(ABILITY_LEAF_GUARD); HP(100); MaxHP(200); } OPPONENT(species) { Ability(ability); } diff --git a/test/battle/ability/lightning_rod.c b/test/battle/ability/lightning_rod.c index e1fedbe17d..3cd8bc0db9 100644 --- a/test/battle/ability/lightning_rod.c +++ b/test/battle/ability/lightning_rod.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Lightning Rod absorbs Electric-type moves and increases the PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, config); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, config); ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_RAICHU) { Ability(ABILITY_LIGHTNING_ROD); } @@ -47,7 +47,7 @@ DOUBLE_BATTLE_TEST("Lightning Rod forces single-target Electric-type moves to ta PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, config); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, config); ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -115,7 +115,7 @@ DOUBLE_BATTLE_TEST("Lightning Rod redirects an ally's attack") DOUBLE_BATTLE_TEST("Lightning Rod absorbs moves that targets all battlers but does not redirect (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); ASSUME(GetMoveType(MOVE_DISCHARGE) == TYPE_ELECTRIC); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/liquid_ooze.c b/test/battle/ability/liquid_ooze.c index 437f8e4c7a..e7a638fa98 100644 --- a/test/battle/ability/liquid_ooze.c +++ b/test/battle/ability/liquid_ooze.c @@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Liquid Ooze causes Dream Eater users to lose HP instead of h { s16 damage; GIVEN { - WITH_CONFIG(CONFIG_DREAM_EATER_LIQUID_OOZE, GEN_5); + WITH_CONFIG(B_DREAM_EATER_LIQUID_OOZE, GEN_5); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_DREAM_EATER) == EFFECT_DREAM_EATER); @@ -167,7 +167,7 @@ SINGLE_BATTLE_TEST("Liquid Ooze does not cause Dream Eater users to lose HP inst { s16 damage; GIVEN { - WITH_CONFIG(CONFIG_DREAM_EATER_LIQUID_OOZE, GEN_3); + WITH_CONFIG(B_DREAM_EATER_LIQUID_OOZE, GEN_3); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_DREAM_EATER) == EFFECT_DREAM_EATER); diff --git a/test/battle/ability/magic_bounce.c b/test/battle/ability/magic_bounce.c index efc3173de6..eda1062f84 100644 --- a/test/battle/ability/magic_bounce.c +++ b/test/battle/ability/magic_bounce.c @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Magic Bounce bounces back powder moves") SINGLE_BATTLE_TEST("Magic Bounce cannot bounce back powder moves against Grass Types") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6); + WITH_CONFIG(B_POWDER_GRASS, GEN_6); ASSUME(IsPowderMove(MOVE_STUN_SPORE)); ASSUME(GetSpeciesType(SPECIES_ODDISH, 0) == TYPE_GRASS); PLAYER(SPECIES_ODDISH); diff --git a/test/battle/ability/moody.c b/test/battle/ability/moody.c index ca04ec1f70..77345c4d8f 100644 --- a/test/battle/ability/moody.c +++ b/test/battle/ability/moody.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Moody randomly raises the user's Attack, Defense, Sp. Atk, S // HP is not included PASSES_RANDOMLY(1, statsNum - 1, RNG_MOODY_INCREASE); GIVEN { - WITH_CONFIG(CONFIG_MOODY_ACC_EVASION, config); + WITH_CONFIG(B_MOODY_ACC_EVASION, config); PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Moody randomly lowers the user's Attack, Defense, Sp. Atk, S // One stat becomes unavailable due to it already increasing PASSES_RANDOMLY(1, statsNum - 2, RNG_MOODY_DECREASE); GIVEN { - WITH_CONFIG(CONFIG_MOODY_ACC_EVASION, config); + WITH_CONFIG(B_MOODY_ACC_EVASION, config); PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Moody randomly raises the holder's Attack, Defense, Sp. Atk, PASSES_RANDOMLY(statsNum - 1, statsNum - 1, RNG_MOODY_DECREASE); GIVEN { - WITH_CONFIG(CONFIG_MOODY_ACC_EVASION, config); + WITH_CONFIG(B_MOODY_ACC_EVASION, config); PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/normalize.c b/test/battle/ability/normalize.c index 09acb4b59f..c4b9cf37c5 100644 --- a/test/battle/ability/normalize.c +++ b/test/battle/ability/normalize.c @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Normalize doesn't boost power of unaffected moves by 20% (< PARAMETRIZE { ability = ABILITY_NORMALIZE; } GIVEN { - WITH_CONFIG(CONFIG_ATE_MULTIPLIER, GEN_6); + WITH_CONFIG(B_ATE_MULTIPLIER, GEN_6); PLAYER(SPECIES_DELCATTY) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -106,7 +106,7 @@ SINGLE_BATTLE_TEST("Normalize boosts power of unaffected moves by 20% (Gen7+)", PARAMETRIZE { ability = ABILITY_NORMALIZE; } GIVEN { - WITH_CONFIG(CONFIG_ATE_MULTIPLIER, GEN_7); + WITH_CONFIG(B_ATE_MULTIPLIER, GEN_7); PLAYER(SPECIES_DELCATTY) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -125,7 +125,7 @@ SINGLE_BATTLE_TEST("Normalize doesn't boost power of affected moves by 20% (< Ge PARAMETRIZE { ability = ABILITY_NORMALIZE; } GIVEN { - WITH_CONFIG(CONFIG_ATE_MULTIPLIER, GEN_6); + WITH_CONFIG(B_ATE_MULTIPLIER, GEN_6); PLAYER(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_WATER_GUN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -144,7 +144,7 @@ SINGLE_BATTLE_TEST("Normalize boosts power of affected moves by 20% (Gen7+)", s1 PARAMETRIZE { ability = ABILITY_NORMALIZE; } GIVEN { - WITH_CONFIG(CONFIG_ATE_MULTIPLIER, GEN_7); + WITH_CONFIG(B_ATE_MULTIPLIER, GEN_7); PLAYER(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_WATER_GUN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/oblivious.c b/test/battle/ability/oblivious.c index 03f71d7f55..ecbf2d3f5f 100644 --- a/test/battle/ability/oblivious.c +++ b/test/battle/ability/oblivious.c @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Oblivious prevents Taunt (Gen6+)") PARAMETRIZE { gen = GEN_5; } PARAMETRIZE { gen = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_OBLIVIOUS_TAUNT, gen); + WITH_CONFIG(B_OBLIVIOUS_TAUNT, gen); ASSUME(GetMoveEffect(MOVE_TAUNT) == EFFECT_TAUNT); PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OBLIVIOUS); } OPPONENT(SPECIES_WOBBUFFET); @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Oblivious prevents Taunt (Gen6+)") SINGLE_BATTLE_TEST("Oblivious doesn't prevent Intimidate (Gen3-7)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_7); PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OBLIVIOUS); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Oblivious doesn't prevent Intimidate (Gen3-7)") SINGLE_BATTLE_TEST("Oblivious prevents Intimidate (Gen8+)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_8); PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OBLIVIOUS); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } diff --git a/test/battle/ability/overcoat.c b/test/battle/ability/overcoat.c index 7346691c46..c88d305c11 100644 --- a/test/battle/ability/overcoat.c +++ b/test/battle/ability/overcoat.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Overcoat blocks powder and spore moves (Gen6+)") PARAMETRIZE { gen = GEN_5; } PARAMETRIZE { gen = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_POWDER_OVERCOAT, gen); + WITH_CONFIG(B_POWDER_OVERCOAT, gen); ASSUME(IsPowderMove(MOVE_STUN_SPORE)); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT); } @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Overcoat blocks Effect Spore's effect (Gen6+)") PARAMETRIZE { config = GEN_5; } PARAMETRIZE { config = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_POWDER_OVERCOAT, config); + WITH_CONFIG(B_POWDER_OVERCOAT, config); PLAYER(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT); } OPPONENT(SPECIES_SHROOMISH) { Ability(ABILITY_EFFECT_SPORE); } } WHEN { diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c index 06b6f366ff..3195f2fcf1 100644 --- a/test/battle/ability/own_tempo.c +++ b/test/battle/ability/own_tempo.c @@ -4,7 +4,7 @@ SINGLE_BATTLE_TEST("Own Tempo doesn't prevent Intimidate (Gen3-7)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_7); ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Own Tempo doesn't prevent Intimidate (Gen3-7)") SINGLE_BATTLE_TEST("Own Tempo prevents Intimidate but no other stat down changes (Gen8+)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_8); ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c index d8be7c76f2..296a0643ff 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -111,7 +111,7 @@ SINGLE_BATTLE_TEST("Parental Bond-converted moves only hit once on Lightning Rod PARAMETRIZE { move = MOVE_THUNDERBOLT; ability = ABILITY_LIGHTNING_ROD; species = SPECIES_RAICHU; type = TYPE_ELECTRIC; } PARAMETRIZE { move = MOVE_SURF; ability = ABILITY_STORM_DRAIN; species = SPECIES_LILEEP; type = TYPE_WATER; } GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); ASSUME(GetMoveStrikeCount(move) < 2); ASSUME(GetMoveType(move) == type); PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } @@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - WITH_CONFIG(CONFIG_MULTI_HIT_CHANCE, genConfig); + WITH_CONFIG(B_MULTI_HIT_CHANCE, genConfig); ASSUME(GetMoveCategory(MOVE_COMET_PUNCH) != DAMAGE_CATEGORY_STATUS); ASSUME(GetMoveEffect(MOVE_COMET_PUNCH) == EFFECT_MULTI_HIT); PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } @@ -171,7 +171,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - WITH_CONFIG(CONFIG_MULTI_HIT_CHANCE, genConfig); + WITH_CONFIG(B_MULTI_HIT_CHANCE, genConfig); ASSUME(GetMoveCategory(MOVE_COMET_PUNCH) != DAMAGE_CATEGORY_STATUS); ASSUME(GetMoveEffect(MOVE_COMET_PUNCH) == EFFECT_MULTI_HIT); PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } @@ -201,7 +201,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - WITH_CONFIG(CONFIG_MULTI_HIT_CHANCE, genConfig); + WITH_CONFIG(B_MULTI_HIT_CHANCE, genConfig); ASSUME(GetMoveCategory(MOVE_COMET_PUNCH) != DAMAGE_CATEGORY_STATUS); ASSUME(GetMoveEffect(MOVE_COMET_PUNCH) == EFFECT_MULTI_HIT); PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } @@ -232,7 +232,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - WITH_CONFIG(CONFIG_MULTI_HIT_CHANCE, genConfig); + WITH_CONFIG(B_MULTI_HIT_CHANCE, genConfig); ASSUME(GetMoveCategory(MOVE_COMET_PUNCH) != DAMAGE_CATEGORY_STATUS); ASSUME(GetMoveEffect(MOVE_COMET_PUNCH) == EFFECT_MULTI_HIT); PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } diff --git a/test/battle/ability/pickpocket.c b/test/battle/ability/pickpocket.c index 1e8ec6a526..e6b92a6e8e 100644 --- a/test/battle/ability/pickpocket.c +++ b/test/battle/ability/pickpocket.c @@ -1,4 +1,312 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Pickpocket (Ability) test titles") +ASSUMPTIONS +{ + ASSUME(MoveMakesContact(MOVE_BREAKING_SWIPE)); + ASSUME(MoveMakesContact(MOVE_SCRATCH)); +} + +DOUBLE_BATTLE_TEST("Pickpocket checks contact/effect per target for spread moves") +{ + GIVEN { + ASSUME(GetSpeciesType(SPECIES_CLEFAIRY, 0) == TYPE_FAIRY); + ASSUME(GetMoveType(MOVE_BREAKING_SWIPE) == TYPE_DRAGON); + ASSUME(GetMoveTarget(MOVE_BREAKING_SWIPE) == MOVE_TARGET_BOTH); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MAGOST_BERRY); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); } + OPPONENT(SPECIES_CLEFAIRY); + } WHEN { + TURN { MOVE(playerLeft, MOVE_BREAKING_SWIPE); } + } SCENE { + ABILITY_POPUP(opponentLeft, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Magost Berry!"); + } THEN { + EXPECT(opponentLeft->item == ITEM_MAGOST_BERRY); + EXPECT(playerLeft->item == ITEM_NONE); + } +} + +DOUBLE_BATTLE_TEST("Pickpocket activates for the fastest itemless target when both are hit by a contact spread move") +{ + GIVEN { + ASSUME(GetMoveTarget(MOVE_BREAKING_SWIPE) == MOVE_TARGET_BOTH); + PLAYER(SPECIES_WOBBUFFET) { Speed(20); Item(ITEM_MAGOST_BERRY); } + PLAYER(SPECIES_WYNAUT) { Speed(10); } + OPPONENT(SPECIES_SNEASEL) { Speed(40); Ability(ABILITY_PICKPOCKET); } + OPPONENT(SPECIES_SNEASEL) { Speed(30); Ability(ABILITY_PICKPOCKET); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_BREAKING_SWIPE); } + } SCENE { + ABILITY_POPUP(opponentLeft, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Magost Berry!"); + } THEN { + EXPECT(opponentLeft->item == ITEM_MAGOST_BERRY); + EXPECT(opponentRight->item == ITEM_NONE); + EXPECT(playerLeft->item == ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickpocket steals the attacker's item unless it already has one") +{ + bool32 targetHasItem; + PARAMETRIZE { targetHasItem = FALSE; } + PARAMETRIZE { targetHasItem = TRUE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MAGOST_BERRY); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); Item(targetHasItem ? ITEM_EVIOLITE : ITEM_NONE); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + if (targetHasItem) { + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Magost Berry!"); + } + } else { + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Magost Berry!"); + } + } THEN { + if (targetHasItem) { + EXPECT(opponent->item == ITEM_EVIOLITE); + EXPECT(player->item == ITEM_MAGOST_BERRY); + } else { + EXPECT(opponent->item == ITEM_MAGOST_BERRY); + EXPECT(player->item == ITEM_NONE); + } + } +} + +SINGLE_BATTLE_TEST("Pickpocket does not activate if the user faints") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MAGOST_BERRY); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Magost Berry!"); + } + MESSAGE("The opposing Sneasel fainted!"); + } THEN { + EXPECT(opponent->item == ITEM_NONE); + EXPECT(player->item == ITEM_MAGOST_BERRY); + } +} + +SINGLE_BATTLE_TEST("Pickpocket cannot steal from Sticky Hold") +{ + GIVEN { + PLAYER(SPECIES_GRIMER) { Ability(ABILITY_STICKY_HOLD); Item(ITEM_MAGOST_BERRY); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + ABILITY_POPUP(player, ABILITY_STICKY_HOLD); + MESSAGE("Grimer's item cannot be removed!"); + } THEN { + EXPECT(opponent->item == ITEM_NONE); + EXPECT(player->item == ITEM_MAGOST_BERRY); + } +} + +SINGLE_BATTLE_TEST("Pickpocket cannot steal restricted held items") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_NORMALIUM_Z].holdEffect == HOLD_EFFECT_Z_CRYSTAL); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + } + } THEN { + EXPECT(opponent->item == ITEM_NONE); + EXPECT(player->item == ITEM_NORMALIUM_Z); + } +} + +SINGLE_BATTLE_TEST("Pickpocket activates after the final hit of a multi-strike move") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_FURY_SWIPES) == EFFECT_MULTI_HIT); + ASSUME(MoveMakesContact(MOVE_FURY_SWIPES)); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MAGOST_BERRY); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); } + } WHEN { + TURN { MOVE(player, MOVE_FURY_SWIPES, WITH_RNG(RNG_HITS, 3)); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, player); + MESSAGE("The Pokémon was hit 3 time(s)!"); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Magost Berry!"); + } THEN { + EXPECT(opponent->item == ITEM_MAGOST_BERRY); + EXPECT(player->item == ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickpocket activates after Magician steals an item") +{ + GIVEN { + PLAYER(SPECIES_DELPHOX) { Ability(ABILITY_MAGICIAN); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); Item(ITEM_MAGOST_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + ABILITY_POPUP(player, ABILITY_MAGICIAN); + MESSAGE("Delphox stole the opposing Sneasel's Magost Berry!"); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Delphox's Magost Berry!"); + } THEN { + EXPECT(opponent->item == ITEM_MAGOST_BERRY); + EXPECT(player->item == ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickpocket activates after Sticky Barb transfers") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_STICKY_BARB].holdEffect == HOLD_EFFECT_STICKY_BARB); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); Item(ITEM_STICKY_BARB); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + MESSAGE("The Sticky Barb attached itself to Wobbuffet!"); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Sticky Barb!"); + } THEN { + EXPECT(opponent->item == ITEM_STICKY_BARB); + EXPECT(player->item == ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickpocket activates after Thief or Covet steals an item") +{ + u16 move; + PARAMETRIZE { move = MOVE_THIEF; } + PARAMETRIZE { move = MOVE_COVET; } + GIVEN { + ASSUME(GetMoveEffect(move) == EFFECT_STEAL_ITEM); + ASSUME(MoveMakesContact(move)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); Item(ITEM_MAGOST_BERRY); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + MESSAGE("Wobbuffet stole the opposing Sneasel's Magost Berry!"); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Magost Berry!"); + } THEN { + EXPECT(opponent->item == ITEM_MAGOST_BERRY); + EXPECT(player->item == ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickpocket activates after Focus Sash is consumed") +{ + GIVEN { + ASSUME(MoveMakesContact(MOVE_SEISMIC_TOSS)); + ASSUME(gItemsInfo[ITEM_FOCUS_SASH].holdEffect == HOLD_EFFECT_FOCUS_SASH); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MAGOST_BERRY); Level(100); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); Item(ITEM_FOCUS_SASH); MaxHP(6); HP(6); } + } WHEN { + TURN { MOVE(player, MOVE_SEISMIC_TOSS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SEISMIC_TOSS, player); + MESSAGE("The opposing Sneasel hung on using its Focus Sash!"); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Magost Berry!"); + } THEN { + EXPECT(opponent->item == ITEM_MAGOST_BERRY); + EXPECT(player->item == ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickpocket activates after Knock Off, Bug Bite, or Pluck") +{ + u16 move; + PARAMETRIZE { move = MOVE_KNOCK_OFF; } + PARAMETRIZE { move = MOVE_BUG_BITE; } + PARAMETRIZE { move = MOVE_PLUCK; } + GIVEN { + ASSUME(MoveMakesContact(move)); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MAGOST_BERRY); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); Item(ITEM_ORAN_BERRY); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Magost Berry!"); + } THEN { + EXPECT(opponent->item == ITEM_MAGOST_BERRY); + EXPECT(player->item == ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickpocket steals Life Orb after it activates") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_LIFE_ORB].holdEffect == HOLD_EFFECT_LIFE_ORB); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LIFE_ORB); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + MESSAGE("Wobbuffet was hurt by the Life Orb!"); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Life Orb!"); + } THEN { + EXPECT(opponent->item == ITEM_LIFE_ORB); + EXPECT(player->item == ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickpocket steals Shell Bell after it heals the user") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_SHELL_BELL].holdEffect == HOLD_EFFECT_SHELL_BELL); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SHELL_BELL); MaxHP(100); HP(66); } + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); + HP_BAR(opponent); + HP_BAR(player); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's Shell Bell!"); + } THEN { + EXPECT(opponent->item == ITEM_SHELL_BELL); + EXPECT(player->item == ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickpocket does not prevent King's Rock or Razor Fang flinches") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_KINGS_ROCK].holdEffect == HOLD_EFFECT_FLINCH); + PLAYER(SPECIES_WOBBUFFET) { Speed(20); Item(ITEM_KINGS_ROCK); } + OPPONENT(SPECIES_SNEASEL) { Speed(10); Ability(ABILITY_PICKPOCKET); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH, WITH_RNG(RNG_HOLD_EFFECT_FLINCH, 1)); MOVE(opponent, MOVE_SCRATCH); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("The opposing Sneasel stole Wobbuffet's King's Rock!"); + MESSAGE("The opposing Sneasel flinched and couldn't move!"); + } THEN { + EXPECT(opponent->item == ITEM_KINGS_ROCK); + EXPECT(player->item == ITEM_NONE); + } +} diff --git a/test/battle/ability/pickup.c b/test/battle/ability/pickup.c index bf74823361..56e014c2c2 100644 --- a/test/battle/ability/pickup.c +++ b/test/battle/ability/pickup.c @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Pickup grants an item used by another Pokémon") WILD_BATTLE_TEST("Pickup grants an item used by itself in wild battles (Gen9+)") { GIVEN { - WITH_CONFIG(CONFIG_PICKUP_WILD, GEN_9); + WITH_CONFIG(B_PICKUP_WILD, GEN_9); PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/pixilate.c b/test/battle/ability/pixilate.c index 58c6488903..469db8eabe 100644 --- a/test/battle/ability/pixilate.c +++ b/test/battle/ability/pixilate.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Pixilate boosts power of affected moves by 20% (Gen7+) or 30 PARAMETRIZE { ability = ABILITY_PIXILATE; genConfig = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_ATE_MULTIPLIER, genConfig); + WITH_CONFIG(B_ATE_MULTIPLIER, genConfig); PLAYER(SPECIES_SYLVEON) { Ability(ability); Moves(MOVE_TACKLE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/poison_point.c b/test/battle/ability/poison_point.c index 2b6c4aa19f..2056922f31 100644 --- a/test/battle/ability/poison_point.c +++ b/test/battle/ability/poison_point.c @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Poison Point triggers 1/3 times (Gen3) or 30% (Gen 4+) of th PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30% PASSES_RANDOMLY(passes, trials, RNG_POISON_POINT); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_NIDORAN_M) { Ability(ABILITY_POISON_POINT); } diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c index 0f1fcd0930..10f613bf21 100644 --- a/test/battle/ability/prankster.c +++ b/test/battle/ability/prankster.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves don't affect Dark-type Pokémon (Ge PARAMETRIZE { gen = GEN_6; } PARAMETRIZE { gen = GEN_7; } GIVEN { - WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, gen); + WITH_CONFIG(B_PRANKSTER_DARK_TYPES, gen); PLAYER(SPECIES_UMBREON); OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); } } WHEN { @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves don't affect Dark-type Pokémon (Ge SINGLE_BATTLE_TEST("Prankster-affected moves don't affect Dark-type Pokémon after they switch-in") { GIVEN { - WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, GEN_7); + WITH_CONFIG(B_PRANKSTER_DARK_TYPES, GEN_7); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_UMBREON); OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); } @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves called via Assist don't affect Dark PARAMETRIZE { gen = GEN_6; } PARAMETRIZE { gen = GEN_7; } GIVEN { - WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, gen); + WITH_CONFIG(B_PRANKSTER_DARK_TYPES, gen); PLAYER(SPECIES_UMBREON); OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CONFUSE_RAY); } @@ -87,7 +87,7 @@ DOUBLE_BATTLE_TEST("Prankster-affected moves called via Instruct do not affect D PARAMETRIZE { gen = GEN_6; } PARAMETRIZE { gen = GEN_7; } GIVEN { - WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, gen); + WITH_CONFIG(B_PRANKSTER_DARK_TYPES, gen); PLAYER(SPECIES_VOLBEAT) { Speed(20); Ability(ABILITY_PRANKSTER); } PLAYER(SPECIES_WOBBUFFET) { Speed(10); } OPPONENT(SPECIES_UMBREON) { Speed(15); } @@ -203,7 +203,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves which are reflected by Magic Coat c PARAMETRIZE { sableyeAbility = ABILITY_KEEN_EYE; } GIVEN { - WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, GEN_7); + WITH_CONFIG(B_PRANKSTER_DARK_TYPES, GEN_7); PLAYER(SPECIES_SABLEYE) { Ability(sableyeAbility); } OPPONENT(SPECIES_MURKROW) { Ability(ABILITY_PRANKSTER); } } WHEN { diff --git a/test/battle/ability/protean.c b/test/battle/ability/protean.c index 7ebec1ff6e..74f53ba37e 100644 --- a/test/battle/ability/protean.c +++ b/test/battle/ability/protean.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Protean/Libero changes the type of the user to the move used PARAMETRIZE { ability = ABILITY_PROTEAN; species = SPECIES_KECLEON; } PARAMETRIZE { ability = ABILITY_LIBERO; species = SPECIES_RABOOT; } GIVEN { - WITH_CONFIG(CONFIG_PROTEAN_LIBERO, GEN_6); + WITH_CONFIG(B_PROTEAN_LIBERO, GEN_6); PLAYER(SPECIES_REGIROCK); OPPONENT(species) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Protean/Libero changes the type of the user only once per sw PARAMETRIZE { ability = ABILITY_PROTEAN; species = SPECIES_KECLEON; } PARAMETRIZE { ability = ABILITY_LIBERO; species = SPECIES_RABOOT; } GIVEN { - WITH_CONFIG(CONFIG_PROTEAN_LIBERO, GEN_9); + WITH_CONFIG(B_PROTEAN_LIBERO, GEN_9); PLAYER(SPECIES_REGIROCK); OPPONENT(species) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/protosynthesis.c b/test/battle/ability/protosynthesis.c index f6d55b38a3..7f179d592e 100644 --- a/test/battle/ability/protosynthesis.c +++ b/test/battle/ability/protosynthesis.c @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Protosynthesis ability pop up activates only once during the u16 turns; GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_WALKING_WAKE) { Ability(ABILITY_PROTOSYNTHESIS); } OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); } } WHEN { diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index 485ce9daf0..9dae009e03 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost typ SINGLE_BATTLE_TEST("Rattled does not boost speed by 1 when affected by Intimidate (Gen5-7)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_7); PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_SUDOWOODO) { Ability(ABILITY_RATTLED); } } WHEN { @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Rattled does not boost speed by 1 when affected by Intimidat SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when affected by Intimidate (Gen8+)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_8); PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_SUDOWOODO) { Ability(ABILITY_RATTLED); } } WHEN { diff --git a/test/battle/ability/refrigerate.c b/test/battle/ability/refrigerate.c index f0d7ec89ee..e3af5e0acd 100644 --- a/test/battle/ability/refrigerate.c +++ b/test/battle/ability/refrigerate.c @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Refrigerate boosts power of affected moves by 20% (Gen7+) or PARAMETRIZE { ability = ABILITY_REFRIGERATE; genConfig = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_ATE_MULTIPLIER, genConfig); + WITH_CONFIG(B_ATE_MULTIPLIER, genConfig); PLAYER(SPECIES_AMAURA) { Ability(ability); Moves(MOVE_TACKLE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Refrigerate doesn't affect Weather Ball's type", s16 damage) PARAMETRIZE { move = MOVE_CELEBRATE; ability = ABILITY_REFRIGERATE; } PARAMETRIZE { move = MOVE_SUNNY_DAY; ability = ABILITY_REFRIGERATE; } GIVEN { - WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_9); //To prevent capturing hail damage + WITH_CONFIG(B_SNOW_WARNING, GEN_9); //To prevent capturing hail damage ASSUME(GetMoveEffect(MOVE_WEATHER_BALL) == EFFECT_WEATHER_BALL); ASSUME(GetSpeciesType(SPECIES_PINSIR, 0) == TYPE_BUG); PLAYER(SPECIES_AMAURA) { Ability(ability); } diff --git a/test/battle/ability/sand_stream.c b/test/battle/ability/sand_stream.c index a1b9464c2a..bf5edaa598 100644 --- a/test/battle/ability/sand_stream.c +++ b/test/battle/ability/sand_stream.c @@ -4,7 +4,7 @@ SINGLE_BATTLE_TEST("Sand Stream sets up sandstorm for 5 turns (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_HIPPOWDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_STREAM); } OPPONENT(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Sand Stream sets up sandstorm for 5 turns (Gen6+)") SINGLE_BATTLE_TEST("Sand Stream sets up sandstorm for 8 turns with Smooth Rock (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_HIPPOWDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_STREAM); Item(ITEM_SMOOTH_ROCK); } OPPONENT(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Sand Stream sets up sandstorm for 8 turns with Smooth Rock ( SINGLE_BATTLE_TEST("Sand Stream sets up permanent sandstorm (Gen3-5)") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_3); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_3); PLAYER(SPECIES_HIPPOWDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_STREAM); } OPPONENT(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); } } WHEN { diff --git a/test/battle/ability/scrappy.c b/test/battle/ability/scrappy.c index 58543911f8..dd9c478112 100644 --- a/test/battle/ability/scrappy.c +++ b/test/battle/ability/scrappy.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Scrappy doesn't prevent Intimidate (Gen4-7)") s16 turnTwoHit; GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_7); PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); } @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Scrappy prevents Intimidate (Gen8+)") s16 turnTwoHit; GIVEN { - WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8); + WITH_CONFIG(B_UPDATED_INTIMIDATE, GEN_8); PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); } diff --git a/test/battle/ability/shed_skin.c b/test/battle/ability/shed_skin.c index 73f09bc9e9..d80bd4d48b 100644 --- a/test/battle/ability/shed_skin.c +++ b/test/battle/ability/shed_skin.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Shed Skin triggers 33% (Gen3, Gen5+) or 30% (Gen 4) of the t PASSES_RANDOMLY(passes, 100, RNG_SHED_SKIN); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ARBOK) { Status1(STATUS1_POISON); Ability(ABILITY_SHED_SKIN); } diff --git a/test/battle/ability/snow_warning.c b/test/battle/ability/snow_warning.c index bfb27c5f49..94a463fbb3 100644 --- a/test/battle/ability/snow_warning.c +++ b/test/battle/ability/snow_warning.c @@ -4,8 +4,8 @@ SINGLE_BATTLE_TEST("Snow Warning sets up hail for 5 turns (Gen6-8)") { GIVEN { - WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_8); - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_SNOW_WARNING, GEN_8); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -27,8 +27,8 @@ SINGLE_BATTLE_TEST("Snow Warning sets up hail for 5 turns (Gen6-8)") SINGLE_BATTLE_TEST("Snow Warning sets up hail for 8 turns with Icy Rock (Gen6-8)") { GIVEN { - WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_8); - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_SNOW_WARNING, GEN_8); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); Item(ITEM_ICY_ROCK); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -56,8 +56,8 @@ SINGLE_BATTLE_TEST("Snow Warning sets up hail for 8 turns with Icy Rock (Gen6-8) SINGLE_BATTLE_TEST("Snow Warning sets up permanent hail (Gen4-5)") { GIVEN { - WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_8); - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_5); + WITH_CONFIG(B_SNOW_WARNING, GEN_8); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_5); PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -88,8 +88,8 @@ SINGLE_BATTLE_TEST("Snow Warning sets up permanent hail (Gen4-5)") SINGLE_BATTLE_TEST("Snow Warning sets up snow for 5 turns (Gen9+)") { GIVEN { - WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_9); - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_9); + WITH_CONFIG(B_SNOW_WARNING, GEN_9); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_9); PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { @@ -111,8 +111,8 @@ SINGLE_BATTLE_TEST("Snow Warning sets up snow for 5 turns (Gen9+)") SINGLE_BATTLE_TEST("Snow Warning sets up snow for 8 turns with Icy Rock (Gen9+)") { GIVEN { - WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_9); - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_9); + WITH_CONFIG(B_SNOW_WARNING, GEN_9); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_9); PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); Item(ITEM_ICY_ROCK); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { diff --git a/test/battle/ability/stalwart.c b/test/battle/ability/stalwart.c index 3cca8e58ad..762898384d 100644 --- a/test/battle/ability/stalwart.c +++ b/test/battle/ability/stalwart.c @@ -27,7 +27,7 @@ DOUBLE_BATTLE_TEST("Stalwart stops Lightning Rod and Storm Drain from redirectin PARAMETRIZE { ability = ABILITY_LIGHTNING_ROD; species = SPECIES_RAICHU; config = GEN_4; } PARAMETRIZE { ability = ABILITY_LIGHTNING_ROD; species = SPECIES_RAICHU; config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, config); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, config); ASSUME(GetMoveType(MOVE_SPARK) == TYPE_ELECTRIC); ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER); PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_STALWART); } diff --git a/test/battle/ability/static.c b/test/battle/ability/static.c index c40197e742..ad54b691e3 100644 --- a/test/battle/ability/static.c +++ b/test/battle/ability/static.c @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Static triggers 1/3 times (Gen3) or 30% (Gen4+) of the time" PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30% PASSES_RANDOMLY(passes, trials, RNG_STATIC); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_PIKACHU) { Ability(ABILITY_STATIC); } diff --git a/test/battle/ability/sticky_hold.c b/test/battle/ability/sticky_hold.c index d6aee1ee51..b9cbc407f4 100644 --- a/test/battle/ability/sticky_hold.c +++ b/test/battle/ability/sticky_hold.c @@ -16,3 +16,27 @@ SINGLE_BATTLE_TEST("Sticky Hold prevents item theft") } } +SINGLE_BATTLE_TEST("Sticky Hold prevents Incinerate from destroying berries") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_INCINERATE); } + OPPONENT(SPECIES_GASTRODON) { Ability(ABILITY_STICKY_HOLD); Item(ITEM_CHERI_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_INCINERATE); } + } THEN { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].item, ITEM_CHERI_BERRY); + } +} + +SINGLE_BATTLE_TEST("Sticky Hold prevents Incinerate from destroying gems") +{ + GIVEN { + WITH_CONFIG(B_INCINERATE_GEMS, GEN_6); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_INCINERATE); } + OPPONENT(SPECIES_GASTRODON) { Ability(ABILITY_STICKY_HOLD); Item(ITEM_GHOST_GEM); } + } WHEN { + TURN { MOVE(player, MOVE_INCINERATE); } + } THEN { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].item, ITEM_GHOST_GEM); + } +} diff --git a/test/battle/ability/storm_drain.c b/test/battle/ability/storm_drain.c index c1cf5c890b..beb1463145 100644 --- a/test/battle/ability/storm_drain.c +++ b/test/battle/ability/storm_drain.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Storm Drain absorbs Water-type moves and increases the Sp. A PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, config); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, config); ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_GASTRODON_EAST) { Ability(ABILITY_STORM_DRAIN); } @@ -41,7 +41,7 @@ DOUBLE_BATTLE_TEST("Storm Drain forces single-target Water-type moves to target PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, config); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, config); ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/sturdy.c b/test/battle/ability/sturdy.c index 7087de3a02..dda23b6d5c 100644 --- a/test/battle/ability/sturdy.c +++ b/test/battle/ability/sturdy.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Sturdy prevents OHKOs (Gen5+)") PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_STURDY, config); + WITH_CONFIG(B_STURDY, config); PLAYER(SPECIES_GEODUDE) { Ability(ABILITY_STURDY); MaxHP(100); HP(100); } PLAYER(SPECIES_GEODUDE); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/super_luck.c b/test/battle/ability/super_luck.c index d271c6ff69..0073129f3d 100644 --- a/test/battle/ability/super_luck.c +++ b/test/battle/ability/super_luck.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Super Luck increases the critical hit ratio by 1 stage") PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { ASSUME(GetSpeciesBaseSpeed(SPECIES_TOGEPI) == 20); - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); PLAYER(SPECIES_TOGEPI) { Ability(ABILITY_SUPER_LUCK); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/symbiosis.c b/test/battle/ability/symbiosis.c index 44e7c5f1bd..d37f60c8a2 100644 --- a/test/battle/ability/symbiosis.c +++ b/test/battle/ability/symbiosis.c @@ -137,7 +137,7 @@ DOUBLE_BATTLE_TEST("Symbiosis transfers its item after Gem consumption and move { GIVEN { ASSUME(GetItemHoldEffect(ITEM_NORMAL_GEM) == HOLD_EFFECT_GEMS); - WITH_CONFIG(CONFIG_SYMBIOSIS_GEMS, GEN_7); + WITH_CONFIG(B_SYMBIOSIS_GEMS, GEN_7); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); } PLAYER(SPECIES_ORANGURU) { Ability(ABILITY_SYMBIOSIS); Item(ITEM_TOXIC_ORB); } OPPONENT(SPECIES_WOBBUFFET); @@ -160,7 +160,7 @@ DOUBLE_BATTLE_TEST("Symbiosis transfers its item after Gem consumption, but befo { GIVEN { ASSUME(GetItemHoldEffect(ITEM_NORMAL_GEM) == HOLD_EFFECT_GEMS); - WITH_CONFIG(CONFIG_SYMBIOSIS_GEMS, GEN_6); + WITH_CONFIG(B_SYMBIOSIS_GEMS, GEN_6); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); } PLAYER(SPECIES_ORANGURU) { Ability(ABILITY_SYMBIOSIS); Item(ITEM_TOXIC_ORB); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/synchronize.c b/test/battle/ability/synchronize.c index 8604814fab..15013abf7f 100644 --- a/test/battle/ability/synchronize.c +++ b/test/battle/ability/synchronize.c @@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Synchronize will mirror back non volatile status back at opp GIVEN { ASSUME(GetMoveEffect(MOVE_TOXIC) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_TOXIC) == MOVE_EFFECT_TOXIC); - WITH_CONFIG(CONFIG_SYNCHRONIZE_TOXIC, config); + WITH_CONFIG(B_SYNCHRONIZE_TOXIC, config); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ABRA) { Ability(ABILITY_SYNCHRONIZE); } } WHEN { @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Synchronize will mirror back non volatile status back at opp SINGLE_BATTLE_TEST("Synchronize will still show up the ability pop up even if it fails") { GIVEN { - WITH_CONFIG(CONFIG_PARALYZE_ELECTRIC, GEN_6); + WITH_CONFIG(B_PARALYZE_ELECTRIC, GEN_6); ASSUME(MoveMakesContact(MOVE_TACKLE)); PLAYER(SPECIES_PIKACHU) { Ability(ABILITY_STATIC); } OPPONENT(SPECIES_ABRA) { Ability(ABILITY_SYNCHRONIZE); } diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c index b8a9337d67..3682c3dcdd 100644 --- a/test/battle/ability/weak_armor.c +++ b/test/battle/ability/weak_armor.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Weak Armor lowers Defense by 1 and boosts Speed by 1 (Gen5-6 PARAMETRIZE { move = MOVE_GUST; gen = GEN_7; } GIVEN { - WITH_CONFIG(CONFIG_WEAK_ARMOR_SPEED, gen); + WITH_CONFIG(B_WEAK_ARMOR_SPEED, gen); PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Weak Armor still boosts Speed if Defense can't go any lower" PARAMETRIZE { gen = GEN_6; } PARAMETRIZE { gen = GEN_7; } GIVEN { - WITH_CONFIG(CONFIG_WEAK_ARMOR_SPEED, gen); + WITH_CONFIG(B_WEAK_ARMOR_SPEED, gen); PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -144,7 +144,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can' { u32 j; GIVEN { - WITH_CONFIG(CONFIG_WEAK_ARMOR_SPEED, GEN_7); + WITH_CONFIG(B_WEAK_ARMOR_SPEED, GEN_7); PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); } OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); } } WHEN { @@ -183,7 +183,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Speed can't { u32 j; GIVEN { - WITH_CONFIG(CONFIG_WEAK_ARMOR_SPEED, GEN_7); + WITH_CONFIG(B_WEAK_ARMOR_SPEED, GEN_7); PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); } OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); } } WHEN { diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index 43c6740f48..3d3b35111f 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -699,7 +699,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use thawing moves if target is frozen unless it PARAMETRIZE { status = STATUS1_FROSTBITE; aiMove = MOVE_EMBER; aiFlags = AI_FLAG_CHECK_BAD_MOVE; } GIVEN { - WITH_CONFIG(CONFIG_BURN_HIT_THAW, GEN_6); // In Gen 5, non-Fire burning moves didn't cause thawing + WITH_CONFIG(B_BURN_HIT_THAW, GEN_6); // In Gen 5, non-Fire burning moves didn't cause thawing ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE); ASSUME(GetMoveCategory(MOVE_TACKLE) == DAMAGE_CATEGORY_PHYSICAL); ASSUME(GetMoveCategory(MOVE_WATER_GUN) == DAMAGE_CATEGORY_SPECIAL); @@ -846,7 +846,7 @@ AI_DOUBLE_BATTLE_TEST("AI sees opposing drain ability") ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC); ASSUME(GetMoveType(MOVE_RAZOR_LEAF) != TYPE_ELECTRIC); ASSUME(GetMoveType(MOVE_METAL_CLAW) != TYPE_ELECTRIC); - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); PLAYER(SPECIES_RAICHU) { Ability(ABILITY_LIGHTNING_ROD); Moves(MOVE_CELEBRATE); } PLAYER(SPECIES_KRABBY) { Ability(ABILITY_VOLT_ABSORB); Moves(MOVE_CELEBRATE); } @@ -942,7 +942,7 @@ AI_SINGLE_BATTLE_TEST("AI will see Magnitude damage") AI_SINGLE_BATTLE_TEST("AI will prefer resisted move over failing move") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6); + WITH_CONFIG(B_POWDER_GRASS, GEN_6); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY); PLAYER(SPECIES_ROSELIA) { Moves(MOVE_ABSORB); } OPPONENT(SPECIES_GLOOM) { Moves(MOVE_MEGA_DRAIN, MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_SYNTHESIS); } diff --git a/test/battle/ai/ai_check_viability.c b/test/battle/ai/ai_check_viability.c index 0e6170b5fa..e019a11e3e 100644 --- a/test/battle/ai/ai_check_viability.c +++ b/test/battle/ai/ai_check_viability.c @@ -18,7 +18,7 @@ AI_SINGLE_BATTLE_TEST("AI sees increased base power of Facade") PARAMETRIZE { status1 = STATUS1_BURN; expectedMove = MOVE_FACADE; } GIVEN { - WITH_CONFIG(CONFIG_BURN_FACADE_DMG, GEN_6); + WITH_CONFIG(B_BURN_FACADE_DMG, GEN_6); ASSUME(GetMoveEffect(MOVE_FACADE) == EFFECT_FACADE); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET) { HP(60); } @@ -135,6 +135,25 @@ AI_SINGLE_BATTLE_TEST("AI will only use Dream Eater if target is asleep") } } +AI_SINGLE_BATTLE_TEST("AI chooses Sleep Talk only when it will not wake up with Early Bird") +{ + enum Ability ability; + + PARAMETRIZE { ability = ABILITY_RUN_AWAY; } + PARAMETRIZE { ability = ABILITY_EARLY_BIRD; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_DODRIO) { Ability(ability); Status1(STATUS1_SLEEP_TURN(2)); Moves(MOVE_SLEEP_TALK, MOVE_TACKLE); } + } WHEN { + if (ability == ABILITY_EARLY_BIRD) + TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); } + else + TURN { EXPECT_MOVE(opponent, MOVE_SLEEP_TALK); } + } +} + AI_SINGLE_BATTLE_TEST("AI sees increased base power of Spit Up") { GIVEN { @@ -218,7 +237,7 @@ AI_DOUBLE_BATTLE_TEST("AI chooses moves that cure self or partner") GIVEN { ASSUME(GetMoveEffect(MOVE_HEAL_BELL) == EFFECT_HEAL_BELL); - WITH_CONFIG(CONFIG_HEAL_BELL_SOUNDPROOF, GEN_8); + WITH_CONFIG(B_HEAL_BELL_SOUNDPROOF, GEN_8); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -267,7 +286,7 @@ AI_SINGLE_BATTLE_TEST("AI chooses moves that cure inactive party members") GIVEN { ASSUME(GetMoveEffect(MOVE_HEAL_BELL) == EFFECT_HEAL_BELL); - WITH_CONFIG(CONFIG_HEAL_BELL_SOUNDPROOF, config); + WITH_CONFIG(B_HEAL_BELL_SOUNDPROOF, config); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_REGIROCK) { Moves(MOVE_BODY_PRESS, MOVE_HEAL_BELL); } diff --git a/test/battle/ai/ai_doubles.c b/test/battle/ai/ai_doubles.c index 955c82b9f9..52834474f4 100644 --- a/test/battle/ai/ai_doubles.c +++ b/test/battle/ai/ai_doubles.c @@ -553,7 +553,7 @@ AI_DOUBLE_BATTLE_TEST("AI treats an ally's redirection ability appropriately") ASSUME(GetMoveTarget(MOVE_SURF) == MOVE_TARGET_FOES_AND_ALLY); ASSUME(GetMoveType(MOVE_SURF) == TYPE_WATER); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE); - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, config); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, config); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Moves(move, MOVE_HEADBUTT); } diff --git a/test/battle/ai/ai_flag_predict_switch.c b/test/battle/ai/ai_flag_predict_switch.c index 6f484b6378..9bae9c4bc7 100644 --- a/test/battle/ai/ai_flag_predict_switch.c +++ b/test/battle/ai/ai_flag_predict_switch.c @@ -59,7 +59,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_PREDICT_SWITCH: Considers ShouldSwitch and GetMos // Switching in trapper is an advanced feature of ShouldSwitch that requires GetMostSuitableMonToSwitchInto to also return a specific mon; this passing means the AI can use both in prediction PASSES_RANDOMLY(5, 10, RNG_AI_PREDICT_SWITCH); GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6); + WITH_CONFIG(B_POWDER_GRASS, GEN_6); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PREDICT_SWITCH | AI_FLAG_PREDICT_INCOMING_MON); PLAYER(SPECIES_SKARMORY) { Moves(MOVE_SCRATCH); } PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_ARENA_TRAP); Moves(MOVE_ACROBATICS); } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 36a859f62c..7d7cf7561f 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -405,7 +405,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Switch effect moves will send ASSUME(GetMoveEffect(MOVE_BATON_PASS) == EFFECT_BATON_PASS); ASSUME(GetMoveEffect(MOVE_CHILLY_RECEPTION) == EFFECT_CHILLY_RECEPTION); ASSUME(GetMoveEffect(MOVE_SHED_TAIL) == EFFECT_SHED_TAIL); - WITH_CONFIG(CONFIG_TELEPORT_BEHAVIOR, GEN_8); + WITH_CONFIG(B_TELEPORT_BEHAVIOR, GEN_8); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_ACE_POKEMON); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Moves(aiMove); } @@ -1111,8 +1111,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has an PARAMETRIZE { aiMon = SPECIES_SHELLDER; absorbingAbility = ABILITY_OVERCOAT; move = MOVE_MAGIC_POWDER; } PARAMETRIZE { aiMon = SPECIES_SHELLDER; absorbingAbility = ABILITY_OVERCOAT; move = MOVE_STUN_SPORE; } GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); - WITH_CONFIG(CONFIG_POWDER_OVERCOAT, GEN_6); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_POWDER_OVERCOAT, GEN_6); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); PLAYER(SPECIES_ZIGZAGOON) { Moves(move); } OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SCRATCH); } @@ -1204,7 +1204,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if Encore'd i { PASSES_RANDOMLY(SHOULD_SWITCH_ENCORE_DAMAGE_PERCENTAGE, 100, RNG_AI_SWITCH_ENCORE); GIVEN { - WITH_CONFIG(CONFIG_ENCORE_TARGET, GEN_3); + WITH_CONFIG(B_ENCORE_TARGET, GEN_3); ASSUME(GetMoveEffect(MOVE_ENCORE) == EFFECT_ENCORE); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); PLAYER(SPECIES_AZURILL) { Moves(MOVE_SCRATCH, MOVE_ENCORE); } @@ -1322,7 +1322,7 @@ AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch into mon with good type matchup AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI correctly handles abilities when scoring moves") { GIVEN { - WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, GEN_7); + WITH_CONFIG(B_PRANKSTER_DARK_TYPES, GEN_7); ASSUME(GetSpeciesType(SPECIES_GRENINJA, 1) == TYPE_DARK); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_GRENINJA) { Moves(MOVE_WATER_GUN); } @@ -1665,7 +1665,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will consider Hidden Power wh { PASSES_RANDOMLY(SHOULD_SWITCH_ABSORBS_HIDDEN_POWER_PERCENTAGE, 100, RNG_AI_SWITCH_ABSORBING_HIDDEN_POWER); GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_HIDDEN_POWER); HPIV(31); AttackIV(30); DefenseIV(31); SpAttackIV(30); SpDefenseIV(31); SpeedIV(30); } OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SCRATCH); } diff --git a/test/battle/ai/check_bad_move.c b/test/battle/ai/check_bad_move.c index c5a34f0df4..210a27d82b 100644 --- a/test/battle/ai/check_bad_move.c +++ b/test/battle/ai/check_bad_move.c @@ -16,7 +16,7 @@ AI_SINGLE_BATTLE_TEST("AI will not try to lower opposing stats if target is prot PARAMETRIZE { ability = ABILITY_CLEAR_BODY; species = SPECIES_BELDUM; move = MOVE_NOBLE_ROAR; } GIVEN { - WITH_CONFIG(CONFIG_ILLUMINATE_EFFECT, GEN_9); + WITH_CONFIG(B_ILLUMINATE_EFFECT, GEN_9); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_OMNISCIENT); PLAYER(species) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, move); } diff --git a/test/battle/badge_boost.c b/test/battle/badge_boost.c index bc60778cb1..3227926c71 100644 --- a/test/battle/badge_boost.c +++ b/test/battle/badge_boost.c @@ -16,7 +16,7 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_ATTACK boost Attack", s16 dmg) FlagSet(B_FLAG_BADGE_BOOST_ATTACK); else FlagClear(B_FLAG_BADGE_BOOST_ATTACK); - WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig); + WITH_CONFIG(B_BADGE_BOOST, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -48,7 +48,7 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPATK boost Special Attack", s FlagSet(B_FLAG_BADGE_BOOST_SPATK); else FlagClear(B_FLAG_BADGE_BOOST_SPATK); - WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig); + WITH_CONFIG(B_BADGE_BOOST, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -81,7 +81,7 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_DEFENSE boost Defense", s16 dm FlagSet(B_FLAG_BADGE_BOOST_DEFENSE); else FlagClear(B_FLAG_BADGE_BOOST_DEFENSE); - WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig); + WITH_CONFIG(B_BADGE_BOOST, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -114,7 +114,7 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPDEF boost Special Defense", FlagSet(B_FLAG_BADGE_BOOST_SPDEF); else FlagClear(B_FLAG_BADGE_BOOST_SPDEF); - WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig); + WITH_CONFIG(B_BADGE_BOOST, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -146,7 +146,7 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPEED boost Speed", s16 dmg) FlagSet(B_FLAG_BADGE_BOOST_SPEED); else FlagClear(B_FLAG_BADGE_BOOST_SPEED); - WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig); + WITH_CONFIG(B_BADGE_BOOST, genConfig); PLAYER(SPECIES_WOBBUFFET) { Speed(100); HP(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(101); HP(1); } } WHEN { diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c index 58650f7f5d..9e5aed9974 100644 --- a/test/battle/crit_chance.c +++ b/test/battle/crit_chance.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Critical hits without modifiers occur at different rates by PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetSpeciesBaseSpeed(SPECIES_WOBBUFFET) == 33); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Raising critical hit rate to 3 guarantees a cri PARAMETRIZE { genConfig = j; passes = 1, trials = 1; } // 100% PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1); ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); PLAYER(SPECIES_TOGEKISS) { Ability(ABILITY_SUPER_LUCK); Item(ITEM_SCOPE_LENS); } diff --git a/test/battle/damage_formula.c b/test/battle/damage_formula.c index b62ed36ad9..da25d8c1f7 100644 --- a/test/battle/damage_formula.c +++ b/test/battle/damage_formula.c @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Damage calculation matches Gen6+ (Muscle Band, crit)") PARAMETRIZE { expectedDamage = 276; } PARAMETRIZE { expectedDamage = 268; } GIVEN { - WITH_CONFIG(CONFIG_CRIT_MULTIPLIER, GEN_6); + WITH_CONFIG(B_CRIT_MULTIPLIER, GEN_6); ASSUME(GetMoveCategory(MOVE_ICE_FANG) == DAMAGE_CATEGORY_PHYSICAL); PLAYER(SPECIES_GLACEON) { Level(75); Attack(123); Item(ITEM_MUSCLE_BAND); } OPPONENT(SPECIES_GARCHOMP) { Defense(163); } @@ -384,7 +384,7 @@ DOUBLE_BATTLE_TEST("Transistor Damage calculation", s16 damage) } } GIVEN { - WITH_CONFIG(CONFIG_TRANSISTOR_BOOST, gen); + WITH_CONFIG(B_TRANSISTOR_BOOST, gen); ASSUME(GetMoveType(MOVE_WILD_CHARGE) == TYPE_ELECTRIC); ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC); ASSUME(GetMoveCategory(MOVE_WILD_CHARGE) == DAMAGE_CATEGORY_PHYSICAL); diff --git a/test/battle/exp.c b/test/battle/exp.c index c22b7fa2f5..803cdfb630 100644 --- a/test/battle/exp.c +++ b/test/battle/exp.c @@ -11,7 +11,7 @@ WILD_BATTLE_TEST("Pokemon gain experience after catching a Pokemon (Gen6+)") PARAMETRIZE { level = 50; config = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_EXP_CATCH, config); + WITH_CONFIG(B_EXP_CATCH, config); PLAYER(SPECIES_WOBBUFFET) { Level(level); } OPPONENT(SPECIES_CATERPIE) { HP(1); } } WHEN { diff --git a/test/battle/form_change/end_battle.c b/test/battle/form_change/end_battle.c index c3ae62f77d..4d18693827 100644 --- a/test/battle/form_change/end_battle.c +++ b/test/battle/form_change/end_battle.c @@ -125,7 +125,7 @@ SINGLE_BATTLE_TEST("Meloetta returns to Aria form upon battle end after using Re SINGLE_BATTLE_TEST("Battle Bond Greninja returns to base form upon battle end after knocking out an opponent") { GIVEN { - WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8); + WITH_CONFIG(B_BATTLE_BOND, GEN_8); PLAYER(SPECIES_GRENINJA_BATTLE_BOND); OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); @@ -194,7 +194,7 @@ SINGLE_BATTLE_TEST("Mimikyu Busted reverts to Disguised form upon battle end aft PARAMETRIZE { species = SPECIES_MIMIKYU_DISGUISED; } PARAMETRIZE { species = SPECIES_MIMIKYU_TOTEM_DISGUISED; } GIVEN { - WITH_CONFIG(CONFIG_DISGUISE_HP_LOSS, GEN_7); + WITH_CONFIG(B_DISGUISE_HP_LOSS, GEN_7); PLAYER(species) { Ability(ABILITY_DISGUISE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index 8e1945c558..bd076f2cc0 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Rayquaza can Mega Evolve knowing Dragon Ascent") SINGLE_BATTLE_TEST("Mega Evolution doesn't affect turn order (Gen6)") { GIVEN { - WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_6); + WITH_CONFIG(B_MEGA_EVO_TURN_ORDER, GEN_6); PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -90,7 +90,7 @@ SINGLE_BATTLE_TEST("Mega Evolution doesn't affect turn order (Gen6)") SINGLE_BATTLE_TEST("Mega Evolution affects turn order (Gen7+)") { GIVEN { - WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_7); + WITH_CONFIG(B_MEGA_EVO_TURN_ORDER, GEN_7); PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -106,7 +106,7 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order (Gen7+)") SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn order") { GIVEN { - WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_7); + WITH_CONFIG(B_MEGA_EVO_TURN_ORDER, GEN_7); ASSUME(GetSpeciesAbility(SPECIES_SABLEYE_MEGA, 0) != ABILITY_STALL && GetSpeciesAbility(SPECIES_SABLEYE_MEGA, 1) != ABILITY_STALL); PLAYER(SPECIES_SABLEYE) { Item(ITEM_SABLENITE); Ability(ABILITY_STALL); Speed(105); } diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c index 1db0bf7fd8..899e2a8a47 100644 --- a/test/battle/form_change/ultra_burst.c +++ b/test/battle/form_change/ultra_burst.c @@ -58,7 +58,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - player faster") SINGLE_BATTLE_TEST("Ultra Burst affects turn order") { GIVEN { - WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_7); + WITH_CONFIG(B_MEGA_EVO_TURN_ORDER, GEN_7); PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index e47cd2ca86..787682417f 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -423,7 +423,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon that changes forms does not gain { u16 capturedHP, finalHP; GIVEN { - WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8); + WITH_CONFIG(B_BATTLE_BOND, GEN_8); PLAYER(SPECIES_GRENINJA_BATTLE_BOND) { Ability(ABILITY_BATTLE_BOND); HP(100); Speed(100); } OPPONENT(SPECIES_CATERPIE) { HP(1); Speed(1000); } OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } @@ -940,7 +940,7 @@ SINGLE_BATTLE_TEST("Dynamax: G-Max Stonesurge sets up Stealth Rocks") SINGLE_BATTLE_TEST("Dynamax: G-Max Steelsurge sets up sharp steel") { GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, GEN_6); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, GEN_6); ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_STEELSURGE, MOVE_EFFECT_STEELSURGE)); PLAYER(SPECIES_COPPERAJAH) { GigantamaxFactor(TRUE); } OPPONENT(SPECIES_WOBBUFFET); @@ -1434,7 +1434,7 @@ DOUBLE_BATTLE_TEST("Dynamax: G-Max Chi Strike boosts allies' crit chance by 1 st { u32 j; GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, GEN_6); + WITH_CONFIG(B_CRIT_CHANCE, GEN_6); ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_CHI_STRIKE, MOVE_EFFECT_CRIT_PLUS_SIDE)); PLAYER(SPECIES_MACHAMP) { GigantamaxFactor(TRUE); } PLAYER(SPECIES_MACHOP); @@ -1597,7 +1597,7 @@ SINGLE_BATTLE_TEST("Dynamax: Max Moves don't bypass absorbing abilities") ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE); ASSUME(GetMoveType(MOVE_MUD_BOMB) == TYPE_GROUND); ASSUME(GetMoveType(MOVE_VINE_WHIP) == TYPE_GRASS); - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) { Ability(ability); } } WHEN { diff --git a/test/battle/gimmick/zmove.c b/test/battle/gimmick/zmove.c index 74f4ea3675..99ea302098 100644 --- a/test/battle/gimmick/zmove.c +++ b/test/battle/gimmick/zmove.c @@ -6,7 +6,7 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves do not retain priority") { GIVEN { - WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_7); // TODO: Decouple this config from other gimmicks + WITH_CONFIG(B_MEGA_EVO_TURN_ORDER, GEN_7); // TODO: Decouple this config from other gimmicks ASSUME(GetMoveType(MOVE_QUICK_ATTACK) == TYPE_NORMAL); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } @@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_BOOST_CRITS raises a battler's critical hi PARAMETRIZE { genConfig = j; chance = 2; } // 50% PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetMoveType(MOVE_FORESIGHT) == TYPE_NORMAL); ASSUME(GetMoveZEffect(MOVE_FORESIGHT) == Z_EFFECT_BOOST_CRITS); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } @@ -533,7 +533,7 @@ SINGLE_BATTLE_TEST("(Z-MOVE) 10,000,000 Volt Thunderbolt has an increased critic PARAMETRIZE { genConfig = j; chance = 2; } PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_10_000_000_VOLT_THUNDERBOLT) == 2); ASSUME(GetSpeciesBaseSpeed(SPECIES_PIKACHU_PARTNER) == 90); PLAYER(SPECIES_PIKACHU_PARTNER) { Item(ITEM_PIKASHUNIUM_Z); } diff --git a/test/battle/hold_effect/booster_energy.c b/test/battle/hold_effect/booster_energy.c index 9916fe5792..24208c38a7 100644 --- a/test/battle/hold_effect/booster_energy.c +++ b/test/battle/hold_effect/booster_energy.c @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Booster Energy will activate Quark Drive after Electric Terr SINGLE_BATTLE_TEST("Booster Energy will activate Protosynthesis after harsh sunlight ends") { GIVEN { - WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + WITH_CONFIG(B_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_RAGING_BOLT) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); } OPPONENT(SPECIES_TORKOAL) { Speed(100); Ability(ABILITY_DROUGHT); } } WHEN { diff --git a/test/battle/hold_effect/critical_up.c b/test/battle/hold_effect/critical_up.c index 163d8f1c27..92dfb4fe80 100644 --- a/test/battle/hold_effect/critical_up.c +++ b/test/battle/hold_effect/critical_up.c @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by 2 sta PARAMETRIZE { genConfig = j; chance = 2; } // 50% PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_SCRATCH) == 0); PLAYER(SPECIES_WOBBUFFET) { MaxHP(160); HP(80); Item(ITEM_LANSAT_BERRY); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/hold_effect/iron_ball.c b/test/battle/hold_effect/iron_ball.c index 48c87dbccb..d661df8f78 100644 --- a/test/battle/hold_effect/iron_ball.c +++ b/test/battle/hold_effect/iron_ball.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Ground-type moves do neutral damage to non-grounded Flying t PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_IRON_BALL, config); + WITH_CONFIG(B_IRON_BALL, config); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_SKARMORY) { Item(ITEM_IRON_BALL); } } WHEN { diff --git a/test/battle/hold_effect/leek.c b/test/battle/hold_effect/leek.c index 025686485c..d29a0753c7 100644 --- a/test/battle/hold_effect/leek.c +++ b/test/battle/hold_effect/leek.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Leek increases critical hit ratio by 2 stages for the Farfet } PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetSpeciesBaseSpeed(SPECIES_FARFETCHD) == 60); ASSUME(GetSpeciesBaseSpeed(SPECIES_FARFETCHD_GALAR) == 55); ASSUME(GetSpeciesBaseSpeed(SPECIES_SIRFETCHD) == 65); diff --git a/test/battle/hold_effect/life_orb.c b/test/battle/hold_effect/life_orb.c index 39891ca53b..435765767b 100644 --- a/test/battle/hold_effect/life_orb.c +++ b/test/battle/hold_effect/life_orb.c @@ -110,7 +110,7 @@ SINGLE_BATTLE_TEST("Life Orb does not activate if on a confusion hit") SINGLE_BATTLE_TEST("Life Orb does not activate if move was absorbed by target") { GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LIFE_ORB); } OPPONENT(SPECIES_RAICHU) { Ability(ABILITY_LIGHTNING_ROD); } } WHEN { diff --git a/test/battle/hold_effect/light_ball.c b/test/battle/hold_effect/light_ball.c index c35dd75343..4d5e897aa5 100644 --- a/test/battle/hold_effect/light_ball.c +++ b/test/battle/hold_effect/light_ball.c @@ -71,7 +71,7 @@ SINGLE_BATTLE_TEST("Light Ball doubles Pikachu's Attack (Gen4+)", s16 damage) } GIVEN { - WITH_CONFIG(CONFIG_LIGHT_BALL_ATTACK_BOOST, config); + WITH_CONFIG(B_LIGHT_BALL_ATTACK_BOOST, config); ASSUME(GetMoveCategory(MOVE_SPARK) == DAMAGE_CATEGORY_PHYSICAL); if (species == SPECIES_PIKACHU_GMAX) { PLAYER(SPECIES_PIKACHU) { Item(item); GigantamaxFactor(TRUE); } diff --git a/test/battle/hold_effect/lucky_punch.c b/test/battle/hold_effect/lucky_punch.c index bbc379d977..817f5d397e 100644 --- a/test/battle/hold_effect/lucky_punch.c +++ b/test/battle/hold_effect/lucky_punch.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Lucky Punch increases critical hit ratio by 2 stages for Cha PARAMETRIZE { genConfig = j; passes = 1; trials = 2; } // 50% PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(gItemsInfo[ITEM_LUCKY_PUNCH].holdEffect == HOLD_EFFECT_LUCKY_PUNCH); ASSUME(GetSpeciesBaseSpeed(SPECIES_CHANSEY) == 50); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/hold_effect/restore_pp.c b/test/battle/hold_effect/restore_pp.c index c3810652a4..8b3ae83141 100644 --- a/test/battle/hold_effect/restore_pp.c +++ b/test/battle/hold_effect/restore_pp.c @@ -21,3 +21,31 @@ SINGLE_BATTLE_TEST("Restore PP berry activates immediately on switch in") EXPECT(player->item == ITEM_NONE); } } + +SINGLE_BATTLE_TEST("Forced Leppa Berry consumption restores a move at 0 PP before other missing PP") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LEPPA_BERRY); Moves(MOVE_FLING); } + OPPONENT(SPECIES_WYNAUT) { MovesWithPP({MOVE_SCRATCH, 6}, {MOVE_CELEBRATE, 0}, {MOVE_POUND, 35}); } + } WHEN { + TURN { MOVE(player, MOVE_FLING); MOVE(opponent, MOVE_POUND); } + } THEN { + EXPECT_EQ(opponent->pp[0], 6); + EXPECT_EQ(opponent->pp[1], 10); + } +} + +SINGLE_BATTLE_TEST("Forced Leppa Berry consumption restores the first move found missing PP when none are at 0") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LEPPA_BERRY); Moves(MOVE_FLING); } + OPPONENT(SPECIES_WYNAUT) { MovesWithPP({MOVE_SCRATCH, 6}, {MOVE_CELEBRATE, 6}, {MOVE_POUND, 35}); } + } WHEN { + TURN { MOVE(player, MOVE_FLING); MOVE(opponent, MOVE_POUND); } + } THEN { + EXPECT_EQ(opponent->pp[0], 16); + EXPECT_EQ(opponent->pp[1], 6); + } +} diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c index a5cfca0769..cbbee6f958 100644 --- a/test/battle/hold_effect/safety_goggles.c +++ b/test/battle/hold_effect/safety_goggles.c @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks Effect Spore's effect") KNOWN_FAILING; PASSES_RANDOMLY(100, 100, RNG_EFFECT_SPORE); GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_5); // Setting it to Gen 6 causes it to pass + WITH_CONFIG(B_POWDER_GRASS, GEN_5); // Setting it to Gen 6 causes it to pass ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); } OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } diff --git a/test/battle/hold_effect/scope_lens.c b/test/battle/hold_effect/scope_lens.c index f74a06a1c5..5135c251c1 100644 --- a/test/battle/hold_effect/scope_lens.c +++ b/test/battle/hold_effect/scope_lens.c @@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Scope Lens increases the critical hit ratio by 1 stage") PARAMETRIZE { genConfig = j; passes = 1; trials = 8; } // 12.5% PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); ASSUME(GetSpeciesBaseSpeed(SPECIES_WOBBUFFET) == 33); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SCOPE_LENS); } diff --git a/test/battle/item_effect/dire_hit.c b/test/battle/item_effect/dire_hit.c index 27f62e7d07..1f66684d5f 100644 --- a/test/battle/item_effect/dire_hit.c +++ b/test/battle/item_effect/dire_hit.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stag PARAMETRIZE { genConfig = j; chance = 2; } // 50% PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(gItemsInfo[ITEM_DIRE_HIT].battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move.c b/test/battle/move.c index f77e61aaf8..87ffab3742 100644 --- a/test/battle/move.c +++ b/test/battle/move.c @@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Critical hits deal 100% (Gen 1-5) or 50% (Gen 6+) more damag PARAMETRIZE { criticalHit = TRUE; genConfig = GEN_5; } PARAMETRIZE { criticalHit = TRUE; genConfig = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_CRIT_MULTIPLIER, genConfig); + WITH_CONFIG(B_CRIT_MULTIPLIER, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/absorb.c b/test/battle/move_effect/absorb.c index 922d16fa0c..101cb0af7b 100644 --- a/test/battle/move_effect/absorb.c +++ b/test/battle/move_effect/absorb.c @@ -132,3 +132,33 @@ SINGLE_BATTLE_TEST("Absorb does not drain any HP if the move is blocked by Disgu EXPECT_EQ(player->hp, 1); } } + +DOUBLE_BATTLE_TEST("Spread Move: Heals the correct amount from all Pokemon") +{ + s16 damage[3]; + s16 healed[3]; + + GIVEN { + ASSUME(GetMoveEffect(MOVE_PARABOLIC_CHARGE) == EFFECT_ABSORB); + PLAYER(SPECIES_RAICHU) { HP(1); } + PLAYER(SPECIES_SQUIRTLE); + OPPONENT(SPECIES_SQUIRTLE); + OPPONENT(SPECIES_SQUIRTLE); + } WHEN { + TURN { MOVE(playerLeft, MOVE_PARABOLIC_CHARGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PARABOLIC_CHARGE, playerLeft); + + HP_BAR(opponentLeft, captureDamage: &damage[0]); + HP_BAR(playerRight, captureDamage: &damage[1]); + HP_BAR(opponentRight, captureDamage: &damage[2]); + + HP_BAR(playerLeft, captureDamage: &healed[0]); + HP_BAR(playerLeft, captureDamage: &healed[1]); + HP_BAR(playerLeft, captureDamage: &healed[2]); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(-0.5), healed[0]); + EXPECT_MUL_EQ(damage[1], Q_4_12(-0.5), healed[1]); + EXPECT_MUL_EQ(damage[2], Q_4_12(-0.5), healed[2]); + } +} diff --git a/test/battle/move_effect/after_you.c b/test/battle/move_effect/after_you.c index 91742f4595..3fc28bd21a 100644 --- a/test/battle/move_effect/after_you.c +++ b/test/battle/move_effect/after_you.c @@ -89,7 +89,7 @@ DOUBLE_BATTLE_TEST("After You calculates correct turn order if only one Pokémon DOUBLE_BATTLE_TEST("After You fails if the turn order remains the same after After You (Gen5-7)") { GIVEN { - WITH_CONFIG(CONFIG_AFTER_YOU_TURN_ORDER, GEN_7); + WITH_CONFIG(B_AFTER_YOU_TURN_ORDER, GEN_7); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } PLAYER(SPECIES_WYNAUT) { Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } @@ -114,7 +114,7 @@ DOUBLE_BATTLE_TEST("After You fails if the turn order remains the same after Aft DOUBLE_BATTLE_TEST("After You doesn't fail if the turn order remains the same after After You (Gen8+)") { GIVEN { - WITH_CONFIG(CONFIG_AFTER_YOU_TURN_ORDER, GEN_8); + WITH_CONFIG(B_AFTER_YOU_TURN_ORDER, GEN_8); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } PLAYER(SPECIES_WYNAUT) { Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c index af4e1810fc..a82816ef24 100644 --- a/test/battle/move_effect/ally_switch.c +++ b/test/battle/move_effect/ally_switch.c @@ -188,7 +188,7 @@ DOUBLE_BATTLE_TEST("Ally Switch doesn't make self-targeting status moves fail") DOUBLE_BATTLE_TEST("Ally Switch doesn't increase the Protect-like moves counter (Gen5-8)") { GIVEN { - WITH_CONFIG(CONFIG_ALLY_SWITCH_FAIL_CHANCE, GEN_8); + WITH_CONFIG(B_ALLY_SWITCH_FAIL_CHANCE, GEN_8); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -203,7 +203,7 @@ DOUBLE_BATTLE_TEST("Ally Switch doesn't increase the Protect-like moves counter DOUBLE_BATTLE_TEST("Ally Switch increases the Protect-like moves counter (Gen9+)") { GIVEN { - WITH_CONFIG(CONFIG_ALLY_SWITCH_FAIL_CHANCE, GEN_9); + WITH_CONFIG(B_ALLY_SWITCH_FAIL_CHANCE, GEN_9); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/beat_up.c b/test/battle/move_effect/beat_up.c index 719772c38c..9810f88543 100644 --- a/test/battle/move_effect/beat_up.c +++ b/test/battle/move_effect/beat_up.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Beat Up hits the target for each non-fainted, non-statused m PARAMETRIZE { gen = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, gen); + WITH_CONFIG(B_BEAT_UP, gen); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_PICHU) @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Beat Up doesn't consider Comatose as a status") SINGLE_BATTLE_TEST("Beat Up doesn't list party member's name (Gen5+)") { GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_5); + WITH_CONFIG(B_BEAT_UP, GEN_5); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); @@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Beat Up's damage is Dark-typed (Gen5+)", s16 damage) ASSUME(GetMoveType(MOVE_BEAT_UP) == TYPE_DARK); GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_5); + WITH_CONFIG(B_BEAT_UP, GEN_5); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(targetIsFairy ? SPECIES_SYLVEON : SPECIES_WOBBUFFET); @@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("Beat Up's base power is determined by each striking Pokémon s16 firstHit, secondHit; GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_5); + WITH_CONFIG(B_BEAT_UP, GEN_5); PLAYER(SPECIES_SHUCKLE); PLAYER(SPECIES_DEOXYS_ATTACK); PLAYER(SPECIES_WYNAUT) { HP(0); } @@ -135,7 +135,7 @@ SINGLE_BATTLE_TEST("Beat Up's damage considers stat stage changes (Gen5+)", s16 PARAMETRIZE { boosted = TRUE; } GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_5); + WITH_CONFIG(B_BEAT_UP, GEN_5); PLAYER(SPECIES_UMBREON); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); @@ -163,7 +163,7 @@ SINGLE_BATTLE_TEST("Beat Up's damage considers Huge Power and Choice Band (Gen5+ PARAMETRIZE { ability = ABILITY_THICK_FAT; item = ITEM_CHOICE_BAND; } GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_5); + WITH_CONFIG(B_BEAT_UP, GEN_5); PLAYER(SPECIES_AZUMARILL) { Ability(ability); Item(item); Moves(MOVE_BEAT_UP); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); @@ -183,7 +183,7 @@ SINGLE_BATTLE_TEST("Beat Up's damage considers Huge Power and Choice Band (Gen5+ SINGLE_BATTLE_TEST("Beat Up lists each party member's name") { GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_3); + WITH_CONFIG(B_BEAT_UP, GEN_3); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_WYNAUT) { HP(0); } @@ -225,7 +225,7 @@ SINGLE_BATTLE_TEST("Beat Up's damage is typeless", s16 damage) PARAMETRIZE { defender = SPECIES_SYLVEON; } // Fairy GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_3); + WITH_CONFIG(B_BEAT_UP, GEN_3); type1 = GetSpeciesType(defender, 0); type2 = GetSpeciesType(defender, 1); ASSUME(type2 == type1 || type2 == TYPE_MYSTERY); // Ensure monotype targets @@ -250,7 +250,7 @@ SINGLE_BATTLE_TEST("Beat Up's damage doesn't consider STAB") { s16 damage; GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_3); + WITH_CONFIG(B_BEAT_UP, GEN_3); damage = 0; PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT) { HP(0); } @@ -271,7 +271,7 @@ SINGLE_BATTLE_TEST("Beat Up's base power is the same for each strike") { s16 firstHit, secondHit; GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_3); + WITH_CONFIG(B_BEAT_UP, GEN_3); firstHit = 0; secondHit = 0; PLAYER(SPECIES_WYNAUT); @@ -296,7 +296,7 @@ SINGLE_BATTLE_TEST("Beat Up's damage is determined by each striking Pokémon's b { s16 shuckleHit, deoxysHit; GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_3); + WITH_CONFIG(B_BEAT_UP, GEN_3); shuckleHit = 0; deoxysHit = 0; PLAYER(SPECIES_SHUCKLE); @@ -330,7 +330,7 @@ SINGLE_BATTLE_TEST("Beat Up ignores stat stage changes", s16 damage) PARAMETRIZE { boosted = TRUE; } GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_3); + WITH_CONFIG(B_BEAT_UP, GEN_3); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); @@ -356,7 +356,7 @@ SINGLE_BATTLE_TEST("Beat Up ignores Huge Power", s16 damage) PARAMETRIZE { ability = ABILITY_HUGE_POWER; } GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_3); + WITH_CONFIG(B_BEAT_UP, GEN_3); PLAYER(SPECIES_AZUMARILL) { Ability(ability); Moves(MOVE_BEAT_UP); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); @@ -379,7 +379,7 @@ SINGLE_BATTLE_TEST("Beat Up ignores Choice Band", s16 damage) PARAMETRIZE { item = ITEM_CHOICE_BAND; } GIVEN { - WITH_CONFIG(CONFIG_BEAT_UP, GEN_3); + WITH_CONFIG(B_BEAT_UP, GEN_3); PLAYER(SPECIES_URSARING) { Item(item); Moves(MOVE_BEAT_UP); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/conversion_2.c b/test/battle/move_effect/conversion_2.c index 169243019b..e52dd17445 100644 --- a/test/battle/move_effect/conversion_2.c +++ b/test/battle/move_effect/conversion_2.c @@ -6,7 +6,7 @@ TO_DO_BATTLE_TEST("Conversion 2's type change considers Inverse Battles"); SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last move that hit the user (Gen 1-4)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_4); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_4); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type SINGLE_BATTLE_TEST("Conversion 2's type change considers Struggle to be Normal type (Gen 1-4)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_4); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_4); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers Struggle to be Normal t SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last used target's move (Gen 5+)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_5); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type SINGLE_BATTLE_TEST("Conversion 2's type change considers status moves (Gen 5+)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_5); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -85,7 +85,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers status moves (Gen 5+)") SINGLE_BATTLE_TEST("Conversion 2's type change considers the type of moves called by other moves") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_5); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -105,7 +105,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers the type of moves calle SINGLE_BATTLE_TEST("Conversion 2's type change considers dynamic type moves") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_5); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -127,7 +127,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers dynamic type moves") SINGLE_BATTLE_TEST("Conversion 2's type change considers move types changed by Normalize and Electrify") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_5); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_5); PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_NORMALIZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -158,7 +158,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers move types changed by N SINGLE_BATTLE_TEST("Conversion 2's type change fails targeting Struggle (Gen 5+)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_5); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change fails targeting Struggle (Gen 5+) SINGLE_BATTLE_TEST("Conversion 2 fails if the move used is of typeless damage (Gen 5+)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_5); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ENTEI); } WHEN { @@ -228,7 +228,7 @@ SINGLE_BATTLE_TEST("Conversion 2 fails if used by a Terastallized Pokemon") SINGLE_BATTLE_TEST("Conversion 2 fails if last hit by a Stellar-type move (Gen 1-4)") { GIVEN { - WITH_CONFIG(CONFIG_UPDATED_CONVERSION_2, GEN_4); + WITH_CONFIG(B_UPDATED_CONVERSION_2, GEN_4); PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/copycat.c b/test/battle/move_effect/copycat.c index d834564b13..cd063be4c0 100644 --- a/test/battle/move_effect/copycat.c +++ b/test/battle/move_effect/copycat.c @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Copycat deducts power points from itself, not the copied mov DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their base moves copied by Copycat") { GIVEN { - WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_7); // TODO: Decouple this config from other gimmicks + WITH_CONFIG(B_MEGA_EVO_TURN_ORDER, GEN_7); // TODO: Decouple this config from other gimmicks PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 7b2946f40a..e3136cbcd6 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -81,7 +81,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Aurora Veil, Reflect, Light Screen, Tailwind") { GIVEN { - WITH_CONFIG(CONFIG_TAILWIND_TURNS, GEN_5); + WITH_CONFIG(B_TAILWIND_TURNS, GEN_5); PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_WYNAUT); @@ -120,7 +120,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Auror DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aurora Veil, Reflect, Light Screen, Tailwind") { GIVEN { - WITH_CONFIG(CONFIG_TAILWIND_TURNS, GEN_5); + WITH_CONFIG(B_TAILWIND_TURNS, GEN_5); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 4ff5eb8b0e..68b1f017e9 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Defog fails if target has minimum evasion stat change") SINGLE_BATTLE_TEST("Defog lowers evasiveness of target behind Substitute (Gen4)") { GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, GEN_4); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, GEN_4); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } } WHEN { @@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness of target behind Substitute (Gen4)" SINGLE_BATTLE_TEST("Defog fails if target has minimum evasion stat change behind Substitute (Gen4)") { GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, GEN_4); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, GEN_4); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Ability(ABILITY_SIMPLE); } } WHEN { @@ -105,7 +105,7 @@ SINGLE_BATTLE_TEST("Defog does not lower evasiveness if target behind Substitute PARAMETRIZE { move = MOVE_CELEBRATE; } GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, GEN_5); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, GEN_5); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } } WHEN { @@ -333,7 +333,7 @@ DOUBLE_BATTLE_TEST("Defog removes Stealth Rock and Sticky Web from user's side ( PARAMETRIZE { move = MOVE_DEFOG; config = GEN_5; } PARAMETRIZE { move = MOVE_DEFOG; config = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, config); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, config); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } PLAYER(SPECIES_WOBBUFFET) { Speed(3); } PLAYER(SPECIES_WOBBUFFET) { Speed(3); } @@ -417,7 +417,7 @@ SINGLE_BATTLE_TEST("Defog removes Spikes from user's side (Gen 6+)") PARAMETRIZE { move = MOVE_DEFOG; config = GEN_5; } PARAMETRIZE { move = MOVE_DEFOG; config = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, config); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, config); PLAYER(SPECIES_WOBBUFFET) { Speed(2); } PLAYER(SPECIES_WOBBUFFET) { Speed(2); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } @@ -457,7 +457,7 @@ SINGLE_BATTLE_TEST("Defog removes terrain (Gen 8+)") PARAMETRIZE { move = MOVE_MISTY_TERRAIN; config = GEN_8; } PARAMETRIZE { move = MOVE_GRASSY_TERRAIN; config = GEN_8; } GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, config); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, config); PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } } WHEN { @@ -534,7 +534,7 @@ SINGLE_BATTLE_TEST("Defog removes Toxic Spikes from user's side (Gen 6+)") PARAMETRIZE { move = MOVE_DEFOG; config = GEN_5; } PARAMETRIZE { move = MOVE_DEFOG; config = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, config); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, config); PLAYER(SPECIES_WOBBUFFET) { Speed(5); } OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } @@ -650,7 +650,7 @@ DOUBLE_BATTLE_TEST("Defog removes everything it can") PARAMETRIZE { config = GEN_5; } PARAMETRIZE { config = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, config); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, config); ASSUME(GetMoveEffect(MOVE_HAIL) == EFFECT_HAIL); ASSUME(GetSpeciesType(SPECIES_GLALIE, 0) == TYPE_ICE); PLAYER(SPECIES_GLALIE) { Speed(4); } @@ -728,7 +728,7 @@ SINGLE_BATTLE_TEST("Defog is used on the correct side if opposing mon is behind PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, config); + WITH_CONFIG(B_DEFOG_EFFECT_CLEARING, config); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/destiny_bond.c b/test/battle/move_effect/destiny_bond.c index 3be2384003..76b1a49f92 100644 --- a/test/battle/move_effect/destiny_bond.c +++ b/test/battle/move_effect/destiny_bond.c @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Destiny Bond faints the opposing mon if it fainted from the SINGLE_BATTLE_TEST("Destiny Bond doesn't fail if used sequentially (Gen2-6)") { GIVEN { - WITH_CONFIG(CONFIG_DESTINY_BOND_FAIL, GEN_6); + WITH_CONFIG(B_DESTINY_BOND_FAIL, GEN_6); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); @@ -48,7 +48,7 @@ SINGLE_BATTLE_TEST("Destiny Bond doesn't fail if used sequentially (Gen2-6)") SINGLE_BATTLE_TEST("Destiny Bond fails if used sequentially (Gen7+)") { GIVEN { - WITH_CONFIG(CONFIG_DESTINY_BOND_FAIL, GEN_7); + WITH_CONFIG(B_DESTINY_BOND_FAIL, GEN_7); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Destiny Bond fails if used sequentially (Gen7+)") SINGLE_BATTLE_TEST("Destiny Bond does not fail if used repeatedly separated by other moves (Gen7+)") { GIVEN { - WITH_CONFIG(CONFIG_DESTINY_BOND_FAIL, GEN_7); + WITH_CONFIG(B_DESTINY_BOND_FAIL, GEN_7); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); @@ -85,7 +85,7 @@ SINGLE_BATTLE_TEST("Destiny Bond does not fail if used repeatedly separated by o SINGLE_BATTLE_TEST("Destiny Bond does not fail if used after failing (Gen7+)") { GIVEN { - WITH_CONFIG(CONFIG_DESTINY_BOND_FAIL, GEN_7); + WITH_CONFIG(B_DESTINY_BOND_FAIL, GEN_7); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); diff --git a/test/battle/move_effect/dragon_cheer.c b/test/battle/move_effect/dragon_cheer.c index e7b24f3495..c40b1734e8 100644 --- a/test/battle/move_effect/dragon_cheer.c +++ b/test/battle/move_effect/dragon_cheer.c @@ -28,7 +28,7 @@ DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by 1 on non-Dragon } PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_SCRATCH) == 0); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -62,7 +62,7 @@ DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by 2 on Dragon typ } PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_SCRATCH) == 0); ASSUME(GetSpeciesBaseSpeed(SPECIES_DRATINI) == 50); PLAYER(SPECIES_WOBBUFFET); @@ -126,6 +126,3 @@ AI_DOUBLE_BATTLE_TEST("AI uses Dragon Cheer") TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_DRAGON_CHEER); } } } - - - diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c index e98f00df3e..64cf73f224 100644 --- a/test/battle/move_effect/encore.c +++ b/test/battle/move_effect/encore.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns: Encore used PARAMETRIZE { encoreUser = opponent; encoreTarget = player; speedPlayer = 10; speedOpponent = 20; } PARAMETRIZE { encoreUser = player; encoreTarget = opponent; speedPlayer = 20; speedOpponent = 10; } GIVEN { - WITH_CONFIG(CONFIG_ENCORE_TARGET, GEN_3); + WITH_CONFIG(B_ENCORE_TARGET, GEN_3); PLAYER(SPECIES_WOBBUFFET) { Speed(speedPlayer); } OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOpponent); } } WHEN { @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for player: PARAMETRIZE { encoreUser = opponent; encoreTarget = player; speedPlayer = 20; speedOpponent = 10; } PARAMETRIZE { encoreUser = player; encoreTarget = opponent; speedPlayer = 10; speedOpponent = 20; } GIVEN { - WITH_CONFIG(CONFIG_ENCORE_TARGET, GEN_3); + WITH_CONFIG(B_ENCORE_TARGET, GEN_3); PLAYER(SPECIES_WOBBUFFET) { Speed(speedPlayer); } OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOpponent); } } WHEN { diff --git a/test/battle/move_effect/fail_if_not_arg_type.c b/test/battle/move_effect/fail_if_not_arg_type.c index 9714c15752..0fa013a98b 100644 --- a/test/battle/move_effect/fail_if_not_arg_type.c +++ b/test/battle/move_effect/fail_if_not_arg_type.c @@ -43,7 +43,7 @@ TO_DO_BATTLE_TEST("Burn Up doesn't thaw the user if it fails due to the user not SINGLE_BATTLE_TEST("Burn Up fails if the user has Protean/Libero and is not a Fire-type") { GIVEN { - WITH_CONFIG(CONFIG_PROTEAN_LIBERO, GEN_6); + WITH_CONFIG(B_PROTEAN_LIBERO, GEN_6); PLAYER(SPECIES_REGIROCK); OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_PROTEAN); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/fell_stinger.c b/test/battle/move_effect/fell_stinger.c index 8d395080fe..42a609d731 100644 --- a/test/battle/move_effect/fell_stinger.c +++ b/test/battle/move_effect/fell_stinger.c @@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Fell Stinger raises user's Attack by 2 stages (Gen6) or 3 st PARAMETRIZE { config = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_FELL_STINGER_STAT_RAISE, config); + WITH_CONFIG(B_FELL_STINGER_STAT_RAISE, config); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_FELL_STINGER); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index 595938bef5..e2ae81047b 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Fling fails for Pokémon with Klutz ability (Gen5+)") PARAMETRIZE { ability = ABILITY_KLUTZ; config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_KLUTZ_FLING_INTERACTION, config); + WITH_CONFIG(B_KLUTZ_FLING_INTERACTION, config); PLAYER(SPECIES_BUNEARY) { Item(ITEM_RAZOR_CLAW); Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -507,7 +507,7 @@ SINGLE_BATTLE_TEST("Fling deals damage based on items fling power") } } -SINGLE_BATTLE_TEST("Fling deals damage based on a TM's move power") +SINGLE_BATTLE_TEST("Fling deals damage based on a TM's move power if reusable or fails if breakable") { s16 damage[2]; @@ -520,33 +520,17 @@ SINGLE_BATTLE_TEST("Fling deals damage based on a TM's move power") TURN { MOVE(player, MOVE_FLING); } TURN { MOVE(player, MOVE_EGG_BOMB); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player); - HP_BAR(opponent, captureDamage: &damage[0]); + if (GetItemImportance(ITEM_TM_EARTHQUAKE) == 0) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player); + HP_BAR(opponent, captureDamage: &damage[0]); + } else { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player); + MESSAGE("But it failed!"); + } ANIMATION(ANIM_TYPE_MOVE, MOVE_EGG_BOMB, player); HP_BAR(opponent, captureDamage: &damage[1]); } THEN { - EXPECT_EQ(damage[0], damage[1]); - } -} - -SINGLE_BATTLE_TEST("Fling deals damage based on a TM's move power") -{ - s16 damage[2]; - - GIVEN { - ASSUME(GetMovePower(MOVE_EARTHQUAKE) == GetMovePower(MOVE_EGG_BOMB)); - ASSUME(!IsSpeciesOfType(SPECIES_WOBBUFFET, TYPE_DARK)); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_TM_EARTHQUAKE); } - OPPONENT(SPECIES_HIPPOWDON); - } WHEN { - TURN { MOVE(player, MOVE_FLING); } - TURN { MOVE(player, MOVE_EGG_BOMB); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player); - HP_BAR(opponent, captureDamage: &damage[0]); - ANIMATION(ANIM_TYPE_MOVE, MOVE_EGG_BOMB, player); - HP_BAR(opponent, captureDamage: &damage[1]); - } THEN { - EXPECT_EQ(damage[0], damage[1]); + if (GetItemImportance(ITEM_TM_EARTHQUAKE) == 0) + EXPECT_EQ(damage[0], damage[1]); } } diff --git a/test/battle/move_effect/focus_energy.c b/test/battle/move_effect/focus_energy.c index ffc9370572..11fcb848d9 100644 --- a/test/battle/move_effect/focus_energy.c +++ b/test/battle/move_effect/focus_energy.c @@ -23,8 +23,8 @@ SINGLE_BATTLE_TEST("Focus Energy increases the user's critical hit ratio by 1 st } PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, (genConfig == GEN_1)? GEN_2 : genConfig); - WITH_CONFIG(CONFIG_FOCUS_ENERGY_CRIT_RATIO, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, (genConfig == GEN_1)? GEN_2 : genConfig); + WITH_CONFIG(B_FOCUS_ENERGY_CRIT_RATIO, genConfig); ASSUME(GetSpeciesBaseSpeed(SPECIES_WOBBUFFET) == 33); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -50,8 +50,8 @@ SINGLE_BATTLE_TEST("Focus Energy multiplies crit chance by 4 with gen 1 crit cha } PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, GEN_1); - WITH_CONFIG(CONFIG_FOCUS_ENERGY_CRIT_RATIO, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, GEN_1); + WITH_CONFIG(B_FOCUS_ENERGY_CRIT_RATIO, genConfig); ASSUME(GetSpeciesBaseSpeed(SPECIES_WOBBUFFET) == 33); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/foresight.c b/test/battle/move_effect/foresight.c index 9879774bab..ecfd64ab44 100644 --- a/test/battle/move_effect/foresight.c +++ b/test/battle/move_effect/foresight.c @@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Foresight fails if the target is already under its effect (G PARAMETRIZE { genConfig = GEN_2; } PARAMETRIZE { genConfig = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_FORESIGHT_FAIL, genConfig); + WITH_CONFIG(B_FORESIGHT_FAIL, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -101,7 +101,7 @@ SINGLE_BATTLE_TEST("Foresight doesn't fail if the target is already under its ef PARAMETRIZE { genConfig = GEN_3; } PARAMETRIZE { genConfig = GEN_4; } GIVEN { - WITH_CONFIG(CONFIG_FORESIGHT_FAIL, genConfig); + WITH_CONFIG(B_FORESIGHT_FAIL, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/heal_bell.c b/test/battle/move_effect/heal_bell.c index 66a754df5c..e0dda9a34e 100644 --- a/test/battle/move_effect/heal_bell.c +++ b/test/battle/move_effect/heal_bell.c @@ -96,7 +96,7 @@ DOUBLE_BATTLE_TEST("Heal Bell does not cure Soundproof partners (Gen 4, Gen 6+)" GIVEN { ASSUME(IsSoundMove(MOVE_HEAL_BELL)); - WITH_CONFIG(CONFIG_HEAL_BELL_SOUNDPROOF, config); + WITH_CONFIG(B_HEAL_BELL_SOUNDPROOF, config); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); @@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("Heal Bell cures inactive Soundproof Pokemon (Gen5+)") GIVEN { ASSUME(IsSoundMove(MOVE_HEAL_BELL)); - WITH_CONFIG(CONFIG_HEAL_BELL_SOUNDPROOF, config); + WITH_CONFIG(B_HEAL_BELL_SOUNDPROOF, config); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); @@ -152,7 +152,7 @@ SINGLE_BATTLE_TEST("Heal Bell cures a Soundproof user (Gen5, Gen8+)") PARAMETRIZE { config = GEN_8; } GIVEN { ASSUME(IsSoundMove(MOVE_HEAL_BELL)); - WITH_CONFIG(CONFIG_HEAL_BELL_SOUNDPROOF, config); + WITH_CONFIG(B_HEAL_BELL_SOUNDPROOF, config); PLAYER(SPECIES_EXPLOUD) { Ability(ABILITY_SOUNDPROOF); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); } WHEN { @@ -178,7 +178,7 @@ DOUBLE_BATTLE_TEST("Aromatherapy cure Soundproof battlers regardless of config") GIVEN { ASSUME(!IsSoundMove(MOVE_AROMATHERAPY)); - WITH_CONFIG(CONFIG_HEAL_BELL_SOUNDPROOF, config); + WITH_CONFIG(B_HEAL_BELL_SOUNDPROOF, config); PLAYER(SPECIES_WOBBUFFET) { Ability(ability); Status1(STATUS1_POISON); } PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); @@ -203,7 +203,7 @@ SINGLE_BATTLE_TEST("Aromatherapy cures inactive Soundproof Pokemon regardless of GIVEN { ASSUME(!IsSoundMove(MOVE_AROMATHERAPY)); - WITH_CONFIG(CONFIG_HEAL_BELL_SOUNDPROOF, config); + WITH_CONFIG(B_HEAL_BELL_SOUNDPROOF, config); PLAYER(SPECIES_WOBBUFFET) { } PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); diff --git a/test/battle/move_effect/healing_wish.c b/test/battle/move_effect/healing_wish.c index ca78fd049e..cc5cbeeb20 100644 --- a/test/battle/move_effect/healing_wish.c +++ b/test/battle/move_effect/healing_wish.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Healing Wish causes the user to faint and heals the replacement's HP and status (singles)") { GIVEN { - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_7); ASSUME(GetMovePP(MOVE_SCRATCH) == 35); ASSUME(GetMovePP(MOVE_WATER_GUN) == 25); ASSUME(GetMovePP(MOVE_LEAFAGE) == 40); @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Healing Wish causes the user to faint and heals the replacem DOUBLE_BATTLE_TEST("Healing Wish causes the user to faint and heals the replacement's HP and status (doubles)") { GIVEN { - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_7); ASSUME(GetMovePP(MOVE_SCRATCH) == 35); ASSUME(GetMovePP(MOVE_WATER_GUN) == 25); ASSUME(GetMovePP(MOVE_LEAFAGE) == 40); @@ -77,7 +77,7 @@ DOUBLE_BATTLE_TEST("Healing Wish causes the user to faint and heals the replacem SINGLE_BATTLE_TEST("Healing Wish effect activates even if the the switched Pokémon can't be healed (Gen4-7)") { GIVEN { - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_7); PLAYER(SPECIES_GARDEVOIR) { Speed(300); } PLAYER(SPECIES_NINJASK) { Speed(400); } OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } @@ -99,7 +99,7 @@ SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched Pokémon PARAMETRIZE { switchTo = 3; } PARAMETRIZE { switchTo = 4; } GIVEN { - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_8); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_8); PLAYER(SPECIES_GARDEVOIR) { Speed(300); } PLAYER(SPECIES_NINJASK) { Speed(400); } PLAYER(SPECIES_WYNAUT) { HP(50); MaxHP(100); Speed(50); } diff --git a/test/battle/move_effect/instruct.c b/test/battle/move_effect/instruct.c index 04f5558155..b0bd715ddd 100644 --- a/test/battle/move_effect/instruct.c +++ b/test/battle/move_effect/instruct.c @@ -97,7 +97,7 @@ DOUBLE_BATTLE_TEST("Instruct fails if target doesn't know the last move it used" GIVEN { ASSUME(IsDanceMove(MOVE_DRAGON_DANCE)); PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_ORICORIO) { Moves(MOVE_SCRATCH, MOVE_POUND, MOVE_SCRATCH, MOVE_CELEBRATE); } + PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Moves(MOVE_SCRATCH, MOVE_POUND, MOVE_SCRATCH, MOVE_CELEBRATE); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -113,6 +113,27 @@ DOUBLE_BATTLE_TEST("Instruct fails if target doesn't know the last move it used" } } +DOUBLE_BATTLE_TEST("Instruct fails if the instructed move's PP is depleted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(20); Moves(MOVE_INSTRUCT, MOVE_CELEBRATE); } + PLAYER(SPECIES_WOBBUFFET) { Speed(30); MovesWithPP({MOVE_SCRATCH, 1}, {MOVE_CELEBRATE, 10}); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + } WHEN { + TURN { MOVE(playerRight, MOVE_SCRATCH, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, playerRight); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, playerRight); + } + } THEN { + EXPECT_EQ(playerRight->pp[0], 0); + } +} + DOUBLE_BATTLE_TEST("Instruct-called move fails if it can only be used on the first turn but consumes PP") { GIVEN { @@ -239,7 +260,7 @@ DOUBLE_BATTLE_TEST("Instructed move will be redirected and absorbed by Lightning PARAMETRIZE { moveTarget = opponentLeft; } PARAMETRIZE { moveTarget = opponentRight; } GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_PIKACHU) { Ability(ABILITY_LIGHTNING_ROD); } @@ -296,7 +317,7 @@ DOUBLE_BATTLE_TEST("Instructed move will be redirected by Rage Powder after inst PARAMETRIZE { moveTarget = opponentLeft; } PARAMETRIZE { moveTarget = opponentRight; } GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6); + WITH_CONFIG(B_POWDER_GRASS, GEN_6); ASSUME(GetMoveEffect(MOVE_RAGE_POWDER) == EFFECT_FOLLOW_ME); ASSUME(IsPowderMove(MOVE_RAGE_POWDER) == TRUE); ASSUME(GetMoveEffect(MOVE_SOAK) == EFFECT_SOAK); diff --git a/test/battle/move_effect/lunar_dance.c b/test/battle/move_effect/lunar_dance.c index 4714516b1f..dc4eda0c41 100644 --- a/test/battle/move_effect/lunar_dance.c +++ b/test/battle/move_effect/lunar_dance.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Lunar Dance causes the user to faint and heals the replacement's HP, PP and status (singles)") { GIVEN { - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_7); ASSUME(GetMovePP(MOVE_SCRATCH) == 35); ASSUME(GetMovePP(MOVE_WATER_GUN) == 25); ASSUME(GetMovePP(MOVE_LEAFAGE) == 40); @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Lunar Dance causes the user to faint and heals the replaceme DOUBLE_BATTLE_TEST("Lunar Dance causes the user to faint and heals the replacement's HP, PP and status (doubles)") { GIVEN { - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_7); ASSUME(GetMovePP(MOVE_SCRATCH) == 35); ASSUME(GetMovePP(MOVE_WATER_GUN) == 25); ASSUME(GetMovePP(MOVE_LEAFAGE) == 40); @@ -76,7 +76,7 @@ DOUBLE_BATTLE_TEST("Lunar Dance causes the user to faint and heals the replaceme SINGLE_BATTLE_TEST("Lunar Dance effect activates even if the the switched Pokémon can't be healed (Gen4-7)") { GIVEN { - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_7); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_7); PLAYER(SPECIES_GARDEVOIR) { Speed(300); } PLAYER(SPECIES_NINJASK) { Speed(400); } OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } @@ -99,7 +99,7 @@ SINGLE_BATTLE_TEST("Lunar Dance effect activates only if the switched Pokémon c PARAMETRIZE { switchTo = 4; } GIVEN { ASSUME(GetMovePP(MOVE_SCRATCH) == 35); - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_8); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_8); PLAYER(SPECIES_GARDEVOIR) { Speed(300); } PLAYER(SPECIES_NINJASK) { Speed(400); } PLAYER(SPECIES_WYNAUT) { HP(50); MaxHP(100); Speed(50); } diff --git a/test/battle/move_effect/metronome.c b/test/battle/move_effect/metronome.c index 7415594a64..5f1b38b450 100644 --- a/test/battle/move_effect/metronome.c +++ b/test/battle/move_effect/metronome.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Metronome picks a random move") SINGLE_BATTLE_TEST("Metronome's called powder move fails against Grass Types") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6); + WITH_CONFIG(B_POWDER_GRASS, GEN_6); ASSUME(IsPowderMove(MOVE_POISON_POWDER)); ASSUME(GetSpeciesType(SPECIES_TANGELA, 0) == TYPE_GRASS); ASSUME(GetMoveEffect(MOVE_POISON_POWDER) == EFFECT_NON_VOLATILE_STATUS); diff --git a/test/battle/move_effect/minimize.c b/test/battle/move_effect/minimize.c index b6730fca9b..4de9726851 100644 --- a/test/battle/move_effect/minimize.c +++ b/test/battle/move_effect/minimize.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Minimize increases the user's Evasion by 2 stages (Gen5+) or PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_MINIMIZE_EVASION, config); + WITH_CONFIG(B_MINIMIZE_EVASION, config); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/miracle_eye.c b/test/battle/move_effect/miracle_eye.c index 4f819036a5..2a60d478e5 100644 --- a/test/battle/move_effect/miracle_eye.c +++ b/test/battle/move_effect/miracle_eye.c @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Miracle Eye causes moves against the target to ignore positi SINGLE_BATTLE_TEST("Miracle Eye fails if the target is already affected by Miracle Eye (Gen5+)") { GIVEN { - WITH_CONFIG(CONFIG_MIRACLE_EYE_FAIL, GEN_5); + WITH_CONFIG(B_MIRACLE_EYE_FAIL, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Miracle Eye fails if the target is already affected by Mirac SINGLE_BATTLE_TEST("Miracle Eye does not fail if the target is already affected by Miracle Eye (Gen4)") { GIVEN { - WITH_CONFIG(CONFIG_MIRACLE_EYE_FAIL, GEN_4); + WITH_CONFIG(B_MIRACLE_EYE_FAIL, GEN_4); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/mirror_move.c b/test/battle/move_effect/mirror_move.c index c07dc6b84e..cfe28cb487 100644 --- a/test/battle/move_effect/mirror_move.c +++ b/test/battle/move_effect/mirror_move.c @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Mirror Move fails if no move was used before") SINGLE_BATTLE_TEST("Mirror Move's called powder move fails against Grass Types") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6); + WITH_CONFIG(B_POWDER_GRASS, GEN_6); ASSUME(IsPowderMove(MOVE_STUN_SPORE)); ASSUME(GetSpeciesType(SPECIES_ODDISH, 0) == TYPE_GRASS); ASSUME(GetMoveEffect(MOVE_STUN_SPORE) == EFFECT_NON_VOLATILE_STATUS); diff --git a/test/battle/move_effect/moonlight.c b/test/battle/move_effect/moonlight.c index 428227b66c..f741188294 100644 --- a/test/battle/move_effect/moonlight.c +++ b/test/battle/move_effect/moonlight.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Moonlight recovers 1/2 of the user's max HP (Gen3+)") { GIVEN { - WITH_CONFIG(CONFIG_TIME_OF_DAY_HEALING_MOVES, GEN_3); + WITH_CONFIG(B_TIME_OF_DAY_HEALING_MOVES, GEN_3); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(200); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Moonlight recovers 1/2 of the user's max HP (Gen3+)") SINGLE_BATTLE_TEST("Moonlight recovers 2/3 of the user's max HP in Sunlight (Gen3+)") { GIVEN { - WITH_CONFIG(CONFIG_TIME_OF_DAY_HEALING_MOVES, GEN_3); + WITH_CONFIG(B_TIME_OF_DAY_HEALING_MOVES, GEN_3); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Moonlight recovers 1/4 of the user's max HP in Rain, Sandsto PARAMETRIZE { move = MOVE_HAIL; } PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { - WITH_CONFIG(CONFIG_TIME_OF_DAY_HEALING_MOVES, GEN_3); + WITH_CONFIG(B_TIME_OF_DAY_HEALING_MOVES, GEN_3); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/morning_sun.c b/test/battle/move_effect/morning_sun.c index 10d69ae568..7505ddab25 100644 --- a/test/battle/move_effect/morning_sun.c +++ b/test/battle/move_effect/morning_sun.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Morning Sun recovers 1/2 of the user's max HP (Gen3+)") { GIVEN { - WITH_CONFIG(CONFIG_TIME_OF_DAY_HEALING_MOVES, GEN_3); + WITH_CONFIG(B_TIME_OF_DAY_HEALING_MOVES, GEN_3); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(200); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Morning Sun recovers 1/2 of the user's max HP (Gen3+)") SINGLE_BATTLE_TEST("Morning Sun recovers 2/3 of the user's max HP in Sunlight (Gen3+)") { GIVEN { - WITH_CONFIG(CONFIG_TIME_OF_DAY_HEALING_MOVES, GEN_3); + WITH_CONFIG(B_TIME_OF_DAY_HEALING_MOVES, GEN_3); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Morning Sun recovers 1/4 of the user's max HP in Rain, Sands PARAMETRIZE { move = MOVE_HAIL; } PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { - WITH_CONFIG(CONFIG_TIME_OF_DAY_HEALING_MOVES, GEN_3); + WITH_CONFIG(B_TIME_OF_DAY_HEALING_MOVES, GEN_3); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/mud_sport.c b/test/battle/move_effect/mud_sport.c index 31e0ea18ff..4a44436f7f 100644 --- a/test/battle/move_effect/mud_sport.c +++ b/test/battle/move_effect/mud_sport.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Mud Sport reduces the damage of Electric Type moves by 50% ( PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_SPORT_DMG_REDUCTION, config); + WITH_CONFIG(B_SPORT_DMG_REDUCTION, config); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index 62f9556879..635f2f7482 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit twice 37.5/35% of the time") PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - WITH_CONFIG(CONFIG_MULTI_HIT_CHANCE, genConfig); + WITH_CONFIG(B_MULTI_HIT_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 37.5/35% of the time") PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - WITH_CONFIG(CONFIG_MULTI_HIT_CHANCE, genConfig); + WITH_CONFIG(B_MULTI_HIT_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit four times 12.5/15% of the time") PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - WITH_CONFIG(CONFIG_MULTI_HIT_CHANCE, genConfig); + WITH_CONFIG(B_MULTI_HIT_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit five times 12.5/15% of the time") PASSES_RANDOMLY(passes, trials, RNG_HITS); GIVEN { - WITH_CONFIG(CONFIG_MULTI_HIT_CHANCE, genConfig); + WITH_CONFIG(B_MULTI_HIT_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/parting_shot.c b/test/battle/move_effect/parting_shot.c index 58c5ba5218..3e327605fa 100644 --- a/test/battle/move_effect/parting_shot.c +++ b/test/battle/move_effect/parting_shot.c @@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("Parting Shot: Mirror Armor switches even if reflected stats SINGLE_BATTLE_TEST("Parting Shot: Does not switch if both stats are at minimum (Gen7+)") { GIVEN { - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_7); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_7); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT, MOVE_TOPSY_TURVY, MOVE_CELEBRATE); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_OMASTAR) { Moves(MOVE_SHELL_SMASH, MOVE_CELEBRATE); } @@ -184,7 +184,7 @@ SINGLE_BATTLE_TEST("Parting Shot: Does not switch if both stats are at minimum ( SINGLE_BATTLE_TEST("Parting Shot: Does not switch if Contrary is at maximum stats (Gen7+)") { GIVEN { - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_7); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_7); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT, MOVE_TOPSY_TURVY, MOVE_CELEBRATE); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_INKAY) { Ability(ABILITY_CONTRARY); Moves(MOVE_SHELL_SMASH, MOVE_CELEBRATE); } @@ -213,7 +213,7 @@ SINGLE_BATTLE_TEST("Parting Shot: Stat drop prevention by abilities/items does n PARAMETRIZE { species = SPECIES_LUCARIO; ability = ABILITY_INNER_FOCUS; item = ITEM_CLEAR_AMULET; } GIVEN { - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_7); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_7); ASSUME(gItemsInfo[ITEM_CLEAR_AMULET].holdEffect == HOLD_EFFECT_CLEAR_AMULET); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT); } PLAYER(SPECIES_WYNAUT); @@ -232,7 +232,7 @@ SINGLE_BATTLE_TEST("Parting Shot: Stat drop prevention by abilities/items does n SINGLE_BATTLE_TEST("Parting Shot: Mist prevents stat drops and does not switch (Gen7+)") { GIVEN { - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_7); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_7); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT, MOVE_CELEBRATE); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_MIST, MOVE_CELEBRATE); } @@ -252,7 +252,7 @@ DOUBLE_BATTLE_TEST("Parting Shot: Flower Veil prevents stat drops and does not s { GIVEN { ASSUME(GetSpeciesType(SPECIES_BULBASAUR, 0) == TYPE_GRASS); - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_7); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_7); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT); } PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_WYNAUT); @@ -272,7 +272,7 @@ DOUBLE_BATTLE_TEST("Parting Shot: Flower Veil prevents stat drops and does not s SINGLE_BATTLE_TEST("Parting Shot: Switches if both stats are at minimum (Gen6)") { GIVEN { - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_6); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_6); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT, MOVE_TOPSY_TURVY, MOVE_CELEBRATE); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_OMASTAR) { Moves(MOVE_SHELL_SMASH, MOVE_CELEBRATE); } @@ -295,7 +295,7 @@ SINGLE_BATTLE_TEST("Parting Shot: Switches if both stats are at minimum (Gen6)") SINGLE_BATTLE_TEST("Parting Shot: Switches if Contrary is at maximum stats (Gen6)") { GIVEN { - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_6); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_6); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT, MOVE_TOPSY_TURVY, MOVE_CELEBRATE); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_INKAY) { Ability(ABILITY_CONTRARY); Moves(MOVE_SHELL_SMASH, MOVE_CELEBRATE); } @@ -325,7 +325,7 @@ SINGLE_BATTLE_TEST("Parting Shot: Stat drop prevention by abilities/items switch PARAMETRIZE { species = SPECIES_LUCARIO; ability = ABILITY_INNER_FOCUS; item = ITEM_CLEAR_AMULET; } GIVEN { - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_6); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_6); ASSUME(gItemsInfo[ITEM_CLEAR_AMULET].holdEffect == HOLD_EFFECT_CLEAR_AMULET); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT); } PLAYER(SPECIES_WYNAUT); @@ -345,7 +345,7 @@ SINGLE_BATTLE_TEST("Parting Shot: Stat drop prevention by abilities/items switch SINGLE_BATTLE_TEST("Parting Shot: Mist prevents stat drops and switches (Gen6)") { GIVEN { - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_6); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_6); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT, MOVE_CELEBRATE); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_MIST, MOVE_CELEBRATE); } @@ -365,7 +365,7 @@ SINGLE_BATTLE_TEST("Parting Shot: Mist prevents stat drops and switches (Gen6)") DOUBLE_BATTLE_TEST("Parting Shot: Flower Veil prevents stat drops and switches (Gen6)") { GIVEN { - WITH_CONFIG(CONFIG_PARTING_SHOT_SWITCH, GEN_6); + WITH_CONFIG(B_PARTING_SHOT_SWITCH, GEN_6); ASSUME(GetSpeciesType(SPECIES_BULBASAUR, 0) == TYPE_GRASS); PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_PARTING_SHOT); } PLAYER(SPECIES_WYNAUT); diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index 3c6b04b17a..7b5355aba1 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -910,7 +910,7 @@ DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Storm Drain") { GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); PLAYER(SPECIES_GASTRODON) { Ability(ABILITY_STORM_DRAIN); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/powder.c b/test/battle/move_effect/powder.c index 3f0a3135d9..2dd88357e9 100644 --- a/test/battle/move_effect/powder.c +++ b/test/battle/move_effect/powder.c @@ -83,7 +83,7 @@ SINGLE_BATTLE_TEST("Powder doesn't damage target if it has Magic Guard") SINGLE_BATTLE_TEST("Powder damages the target under heavy rain (Gen 6)") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_RAIN, GEN_6); + WITH_CONFIG(B_POWDER_RAIN, GEN_6); PLAYER(SPECIES_KYOGRE_PRIMAL) { Ability(ABILITY_PRIMORDIAL_SEA); } OPPONENT(SPECIES_VIVILLON); } WHEN { @@ -100,7 +100,7 @@ SINGLE_BATTLE_TEST("Powder damages the target under heavy rain (Gen 6)") SINGLE_BATTLE_TEST("Powder doesn't damage target under heavy rain (Gen 7+)") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_RAIN, GEN_7); + WITH_CONFIG(B_POWDER_RAIN, GEN_7); PLAYER(SPECIES_KYOGRE_PRIMAL) { Ability(ABILITY_PRIMORDIAL_SEA); } OPPONENT(SPECIES_VIVILLON); } WHEN { @@ -152,7 +152,7 @@ DOUBLE_BATTLE_TEST("Powder fails if target is already affected by Powder") SINGLE_BATTLE_TEST("Powder fails if the target is Grass type (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6); + WITH_CONFIG(B_POWDER_GRASS, GEN_6); ASSUME(GetSpeciesType(SPECIES_VENUSAUR, 0) == TYPE_GRASS || GetSpeciesType(SPECIES_VENUSAUR, 1) == TYPE_GRASS); PLAYER(SPECIES_VENUSAUR); OPPONENT(SPECIES_VIVILLON); @@ -168,7 +168,7 @@ SINGLE_BATTLE_TEST("Powder fails if the target is Grass type (Gen6+)") SINGLE_BATTLE_TEST("Powder fails if the target has Overcoat (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_OVERCOAT, GEN_6); + WITH_CONFIG(B_POWDER_OVERCOAT, GEN_6); PLAYER(SPECIES_FORRETRESS) { Ability(ABILITY_OVERCOAT); } OPPONENT(SPECIES_VIVILLON); } WHEN { diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 930f6d829a..9dc86808ed 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -550,7 +550,7 @@ DOUBLE_BATTLE_TEST("Protect: Wide Guard can not fail on consecutive turns (Gen6+ PARAMETRIZE { config = GEN_6; passes = 2; } PASSES_RANDOMLY(passes, 2); GIVEN { - WITH_CONFIG(CONFIG_WIDE_GUARD, config); + WITH_CONFIG(B_WIDE_GUARD, config); ASSUME(GetMoveTarget(MOVE_HYPER_VOICE) == MOVE_TARGET_BOTH); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); @@ -616,7 +616,7 @@ DOUBLE_BATTLE_TEST("Protect: Quick Guard can not fail on consecutive turns (Gen6 PARAMETRIZE { config = GEN_6; passes = 2; } PASSES_RANDOMLY(passes, 2); GIVEN { - WITH_CONFIG(CONFIG_QUICK_GUARD, config); + WITH_CONFIG(B_QUICK_GUARD, config); ASSUME(GetMovePriority(MOVE_QUICK_ATTACK) == 1); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/psych_up.c b/test/battle/move_effect/psych_up.c index 36241a4ed7..220190fc8c 100644 --- a/test/battle/move_effect/psych_up.c +++ b/test/battle/move_effect/psych_up.c @@ -1,4 +1,122 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Psych Up (Move Effect) test titles") +ASSUMPTIONS +{ + ASSUME(GetMoveEffect(MOVE_PSYCH_UP) == EFFECT_PSYCH_UP); +} + +SINGLE_BATTLE_TEST("Psych Up displays the correct battlers when used by the player") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2); + PLAYER(SPECIES_TORNADUS) { Speed(66); } + OPPONENT(SPECIES_LANDORUS) { Speed(99); } + } WHEN { + TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_PSYCH_UP); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent); + MESSAGE("Tornadus copied the opposing Landorus's stat changes!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], opponent->statStages[STAT_ATK]); + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Psych Up displays the correct battlers when used by the opponent") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2); + PLAYER(SPECIES_TORNADUS) { Speed(66); } + OPPONENT(SPECIES_LANDORUS) { Speed(99); } + } WHEN { + TURN { MOVE(player, MOVE_SWORDS_DANCE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(opponent, MOVE_PSYCH_UP); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player); + MESSAGE("The opposing Landorus copied Tornadus's stat changes!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], player->statStages[STAT_ATK]); + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Psych Up ignores Spiky Shield and Baneful Bunker but fails against Crafty Shield") +{ + u32 protectMove = MOVE_NONE; + bool32 shouldFail = FALSE; + + PARAMETRIZE { protectMove = MOVE_SPIKY_SHIELD; shouldFail = FALSE; } + PARAMETRIZE { protectMove = MOVE_BANEFUL_BUNKER; shouldFail = FALSE; } + PARAMETRIZE { protectMove = MOVE_CRAFTY_SHIELD; shouldFail = TRUE; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2); + ASSUME(GetMoveEffect(MOVE_SPIKY_SHIELD) == EFFECT_PROTECT); + ASSUME(GetMoveEffect(MOVE_BANEFUL_BUNKER) == EFFECT_PROTECT); + ASSUME(GetMoveEffect(MOVE_CRAFTY_SHIELD) == EFFECT_PROTECT); + PLAYER(SPECIES_TORNADUS) { Speed(66); } + OPPONENT(SPECIES_LANDORUS) { Speed(99); } + } WHEN { + TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(opponent, protectMove); MOVE(player, MOVE_PSYCH_UP); } + } SCENE { + if (shouldFail) { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCH_UP, player); + MESSAGE("Tornadus copied the opposing Landorus's stat changes!"); + } + } else { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCH_UP, player); + MESSAGE("Tornadus copied the opposing Landorus's stat changes!"); + } + } THEN { + if (shouldFail) { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } else { + EXPECT_EQ(player->statStages[STAT_ATK], opponent->statStages[STAT_ATK]); + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } + } +} + +SINGLE_BATTLE_TEST("Psych Up does not copy the target's critical hit ratio (Gen5)") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_FOCUS_ENERGY) == EFFECT_FOCUS_ENERGY); + WITH_CONFIG(B_PSYCH_UP_CRIT_RATIO, GEN_5); + WITH_CONFIG(B_FOCUS_ENERGY_CRIT_RATIO, GEN_9); + PLAYER(SPECIES_TORNADUS) { Speed(66); } + OPPONENT(SPECIES_LANDORUS) { Speed(99); } + } WHEN { + TURN { MOVE(opponent, MOVE_FOCUS_ENERGY); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_PSYCH_UP); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCH_UP, player); + MESSAGE("Tornadus copied the opposing Landorus's stat changes!"); + } THEN { + EXPECT(opponent->volatiles.focusEnergy); + EXPECT(!player->volatiles.focusEnergy); + } +} + +SINGLE_BATTLE_TEST("Psych Up copies the target's critical hit ratio (Gen6+)") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_FOCUS_ENERGY) == EFFECT_FOCUS_ENERGY); + WITH_CONFIG(B_PSYCH_UP_CRIT_RATIO, GEN_6); + WITH_CONFIG(B_FOCUS_ENERGY_CRIT_RATIO, GEN_9); + PLAYER(SPECIES_TORNADUS) { Speed(66); } + OPPONENT(SPECIES_LANDORUS) { Speed(99); } + } WHEN { + TURN { MOVE(opponent, MOVE_FOCUS_ENERGY); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_PSYCH_UP); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCH_UP, player); + MESSAGE("Tornadus copied the opposing Landorus's stat changes!"); + } THEN { + EXPECT(opponent->volatiles.focusEnergy); + EXPECT(player->volatiles.focusEnergy); + } +} diff --git a/test/battle/move_effect/psychic_terrain.c b/test/battle/move_effect/psychic_terrain.c index c8fb061d9c..11015b0e7e 100644 --- a/test/battle/move_effect/psychic_terrain.c +++ b/test/battle/move_effect/psychic_terrain.c @@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves against semi-in PARAMETRIZE { move = MOVE_SOLAR_BEAM; shouldWork = FALSE; } PARAMETRIZE { move = MOVE_FLY; shouldWork = TRUE; } GIVEN { - WITH_CONFIG(CONFIG_TOXIC_NEVER_MISS, GEN_6); + WITH_CONFIG(B_TOXIC_NEVER_MISS, GEN_6); ASSUME(IsSpeciesOfType(SPECIES_SHROODLE, TYPE_POISON)); PLAYER(SPECIES_SHROODLE) { Ability(ABILITY_PRANKSTER); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/pursuit.c b/test/battle/move_effect/pursuit.c index cc8c0a72b8..888f8eb0a6 100644 --- a/test/battle/move_effect/pursuit.c +++ b/test/battle/move_effect/pursuit.c @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Pursuit doesn't attack a foe using Teleport / Baton Pass to PARAMETRIZE { move = MOVE_TELEPORT; } PARAMETRIZE { move = MOVE_BATON_PASS; } GIVEN { - WITH_CONFIG(CONFIG_TELEPORT_BEHAVIOR, GEN_8); + WITH_CONFIG(B_TELEPORT_BEHAVIOR, GEN_8); ASSUME(GetMoveEffect(MOVE_QUASH) == EFFECT_QUASH); ASSUME(GetMoveEffect(MOVE_TELEPORT) == EFFECT_TELEPORT); ASSUME(GetMoveEffect(MOVE_BATON_PASS) == EFFECT_BATON_PASS); diff --git a/test/battle/move_effect/quash.c b/test/battle/move_effect/quash.c index 0fc2fbd25d..9dc2f464db 100644 --- a/test/battle/move_effect/quash.c +++ b/test/battle/move_effect/quash.c @@ -26,7 +26,7 @@ DOUBLE_BATTLE_TEST("Quash-affected target will move last in the priority bracket DOUBLE_BATTLE_TEST("Quash is not affected by dynamic speed") { GIVEN { - WITH_CONFIG(CONFIG_RECALC_TURN_AFTER_ACTIONS, GEN_8); + WITH_CONFIG(B_RECALC_TURN_AFTER_ACTIONS, GEN_8); ASSUME(GetMoveEffect(MOVE_TAILWIND) == EFFECT_TAILWIND); PLAYER(SPECIES_VOLBEAT) { Speed(10); Ability(ABILITY_PRANKSTER); } PLAYER(SPECIES_WOBBUFFET) { Speed(30); } @@ -112,7 +112,7 @@ DOUBLE_BATTLE_TEST("Quash-affected targets move from fastest to slowest (Gen 8+) DOUBLE_BATTLE_TEST("Quash-affected mon that acted early via After You is not affected by dynamic speed") { GIVEN { - WITH_CONFIG(CONFIG_RECALC_TURN_AFTER_ACTIONS, GEN_8); + WITH_CONFIG(B_RECALC_TURN_AFTER_ACTIONS, GEN_8); ASSUME(GetMoveEffect(MOVE_TAILWIND) == EFFECT_TAILWIND); ASSUME(GetMoveEffect(MOVE_AFTER_YOU) == EFFECT_AFTER_YOU); PLAYER(SPECIES_VOLBEAT) { Speed(20); Ability(ABILITY_PRANKSTER); } diff --git a/test/battle/move_effect/rage_fist.c b/test/battle/move_effect/rage_fist.c index 7a0b6bc322..c7c233e120 100644 --- a/test/battle/move_effect/rage_fist.c +++ b/test/battle/move_effect/rage_fist.c @@ -258,7 +258,7 @@ SINGLE_BATTLE_TEST("Rage Fist base power is increased if Disguise breaks (Gen7)" PARAMETRIZE { species = SPECIES_MIMIKYU_TOTEM_DISGUISED; } GIVEN { - WITH_CONFIG(CONFIG_DISGUISE_HP_LOSS, GEN_7); + WITH_CONFIG(B_DISGUISE_HP_LOSS, GEN_7); PLAYER(species) { Ability(ABILITY_DISGUISE); } OPPONENT(SPECIES_REGIROCK); } WHEN { @@ -285,7 +285,7 @@ SINGLE_BATTLE_TEST("Rage Fist base power is increased if Disguise breaks (Gen8+) PARAMETRIZE { species = SPECIES_MIMIKYU_TOTEM_DISGUISED; } GIVEN { - WITH_CONFIG(CONFIG_DISGUISE_HP_LOSS, GEN_8); + WITH_CONFIG(B_DISGUISE_HP_LOSS, GEN_8); PLAYER(species) { Ability(ABILITY_DISGUISE); } OPPONENT(SPECIES_REGIROCK); } WHEN { diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index 335120a5e5..939780d038 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick has 50% recoil on protect") SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick has no recoil if no target") { GIVEN { - WITH_CONFIG(CONFIG_HEALING_WISH_SWITCH, GEN_5); + WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); diff --git a/test/battle/move_effect/sheer_cold.c b/test/battle/move_effect/sheer_cold.c index c0b076f448..c6179d7831 100644 --- a/test/battle/move_effect/sheer_cold.c +++ b/test/battle/move_effect/sheer_cold.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon (Gen3-6)") { GIVEN { - WITH_CONFIG(CONFIG_SHEER_COLD_IMMUNITY, GEN_6); + WITH_CONFIG(B_SHEER_COLD_IMMUNITY, GEN_6); ASSUME(GetSpeciesType(SPECIES_GLALIE, 0) == TYPE_ICE); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_GLALIE); @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon (Gen3-6)") SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon (Gen7+)") { GIVEN { - WITH_CONFIG(CONFIG_SHEER_COLD_IMMUNITY, GEN_7); + WITH_CONFIG(B_SHEER_COLD_IMMUNITY, GEN_7); ASSUME(GetSpeciesType(SPECIES_GLALIE, 0) == TYPE_ICE); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_GLALIE); diff --git a/test/battle/move_effect/sleep_talk.c b/test/battle/move_effect/sleep_talk.c index 6980954714..94c9b1aa20 100644 --- a/test/battle/move_effect/sleep_talk.c +++ b/test/battle/move_effect/sleep_talk.c @@ -113,7 +113,7 @@ DOUBLE_BATTLE_TEST("Sleep Talk calls move and that move may be redirected by Lig { PASSES_RANDOMLY(1, 2, RNG_RANDOM_TARGET); GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); ASSUME(GetMoveType(MOVE_SPARK) == TYPE_ELECTRIC); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_SPARK, MOVE_FLY, MOVE_DIG); } PLAYER(SPECIES_WOBBUFFET); @@ -133,7 +133,7 @@ DOUBLE_BATTLE_TEST("Sleep Talk calls move and that move may be redirected by Sto { PASSES_RANDOMLY(1, 2, RNG_RANDOM_TARGET); GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_WATER_GUN, MOVE_FLY, MOVE_DIG); } PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/steal_item.c b/test/battle/move_effect/steal_item.c index dffc1ecd6a..af2497f425 100644 --- a/test/battle/move_effect/steal_item.c +++ b/test/battle/move_effect/steal_item.c @@ -113,7 +113,7 @@ WILD_BATTLE_TEST("Thief and Covet steal target's held item and it's added to Bag PARAMETRIZE { move = MOVE_THIEF; } PARAMETRIZE { move = MOVE_COVET; } GIVEN { - WITH_CONFIG(CONFIG_STEAL_WILD_ITEMS, GEN_9); + WITH_CONFIG(B_STEAL_WILD_ITEMS, GEN_9); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_HYPER_POTION); } } WHEN { diff --git a/test/battle/move_effect/synchronoise.c b/test/battle/move_effect/synchronoise.c index 45b4f125ea..8201f0e535 100644 --- a/test/battle/move_effect/synchronoise.c +++ b/test/battle/move_effect/synchronoise.c @@ -1,6 +1,17 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS +{ + ASSUME(GetMoveEffect(MOVE_SYNCHRONOISE) == EFFECT_SYNCHRONOISE); + ASSUME(GetSpeciesType(SPECIES_WOBBUFFET, 0) == TYPE_PSYCHIC); + ASSUME(GetSpeciesType(SPECIES_WOBBUFFET, 1) == TYPE_PSYCHIC); + ASSUME(GetSpeciesType(SPECIES_BULBASAUR, 0) == TYPE_GRASS); + ASSUME(GetSpeciesType(SPECIES_BULBASAUR, 1) == TYPE_POISON); + ASSUME(GetSpeciesType(SPECIES_ARCANINE, 0) == TYPE_FIRE); + ASSUME(GetSpeciesType(SPECIES_ARCANINE, 1) == TYPE_FIRE); +} + DOUBLE_BATTLE_TEST("Synchronoise hits all Pokemon that share a type with the attacker") { GIVEN { @@ -71,4 +82,35 @@ DOUBLE_BATTLE_TEST("Synchronoise will fail if the corresponding typing mon prote } } +DOUBLE_BATTLE_TEST("Synchronoise will fail for a typeless user even if a target is typeless") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_BURN_UP) == EFFECT_FAIL_IF_NOT_ARG_TYPE); + PLAYER(SPECIES_ARCANINE) { Moves(MOVE_BURN_UP, MOVE_SYNCHRONOISE); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARCANINE) { Moves(MOVE_BURN_UP, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(playerLeft, MOVE_BURN_UP, target: opponentRight); + MOVE(opponentLeft, MOVE_BURN_UP, target: playerRight); + MOVE(playerRight, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_CELEBRATE); + } + TURN { + MOVE(playerLeft, MOVE_SYNCHRONOISE); + MOVE(opponentLeft, MOVE_CELEBRATE); + MOVE(playerRight, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_CELEBRATE); + } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SYNCHRONOISE, playerLeft); + MESSAGE("Arcanine used Synchronoise!"); + MESSAGE("It doesn't affect the opposing Arcanine…"); + MESSAGE("It doesn't affect Wobbuffet…"); + MESSAGE("It doesn't affect the opposing Wobbuffet…"); + NOT MESSAGE("But it failed!"); + } +} + TO_DO_BATTLE_TEST("TODO: Write Synchronoise (Move Effect) test titles") diff --git a/test/battle/move_effect/synthesis.c b/test/battle/move_effect/synthesis.c index 5245ab9b38..c1b6f167fd 100644 --- a/test/battle/move_effect/synthesis.c +++ b/test/battle/move_effect/synthesis.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Synthesis recovers 1/2 of the user's max HP (Gen3+)") { GIVEN { - WITH_CONFIG(CONFIG_TIME_OF_DAY_HEALING_MOVES, GEN_3); + WITH_CONFIG(B_TIME_OF_DAY_HEALING_MOVES, GEN_3); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(200); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Synthesis recovers 1/2 of the user's max HP (Gen3+)") SINGLE_BATTLE_TEST("Synthesis recovers 2/3 of the user's max HP in Sunlight (Gen3+)") { GIVEN { - WITH_CONFIG(CONFIG_TIME_OF_DAY_HEALING_MOVES, GEN_3); + WITH_CONFIG(B_TIME_OF_DAY_HEALING_MOVES, GEN_3); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Synthesis recovers 1/4 of the user's max HP in Rain, Sandsto PARAMETRIZE { move = MOVE_HAIL; } PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { - WITH_CONFIG(CONFIG_TIME_OF_DAY_HEALING_MOVES, GEN_3); + WITH_CONFIG(B_TIME_OF_DAY_HEALING_MOVES, GEN_3); PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/tailwind.c b/test/battle/move_effect/tailwind.c index d22f36d285..1e566ab8d6 100644 --- a/test/battle/move_effect/tailwind.c +++ b/test/battle/move_effect/tailwind.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Tailwind applies for 3 turns (Gen4) or 4 turns (Gen5+)") PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_TAILWIND_TURNS, config); + WITH_CONFIG(B_TAILWIND_TURNS, config); PLAYER(SPECIES_WOBBUFFET) { Speed(10); } OPPONENT(SPECIES_WOBBUFFET) { Speed(15); } } WHEN { @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Tailwind applies for 3 turns (Gen4) or 4 turns (Gen5+)") DOUBLE_BATTLE_TEST("Tailwind doesn't affect the partner on the same turn it's used (Gen4-7)") { GIVEN { - WITH_CONFIG(CONFIG_RECALC_TURN_AFTER_ACTIONS, GEN_7); + WITH_CONFIG(B_RECALC_TURN_AFTER_ACTIONS, GEN_7); PLAYER(SPECIES_WOBBUFFET) { Speed(20); } PLAYER(SPECIES_WYNAUT) { Speed(10); } OPPONENT(SPECIES_WOBBUFFET) { Speed(15); } @@ -62,7 +62,7 @@ DOUBLE_BATTLE_TEST("Tailwind doesn't affect the partner on the same turn it's us DOUBLE_BATTLE_TEST("Tailwind affects the partner on the same turn it's used (Gen8+)") { GIVEN { - WITH_CONFIG(CONFIG_RECALC_TURN_AFTER_ACTIONS, GEN_8); + WITH_CONFIG(B_RECALC_TURN_AFTER_ACTIONS, GEN_8); PLAYER(SPECIES_WOBBUFFET) { Speed(20); } PLAYER(SPECIES_WYNAUT) { Speed(10); } OPPONENT(SPECIES_WOBBUFFET) { Speed(15); } diff --git a/test/battle/move_effect/teatime.c b/test/battle/move_effect/teatime.c index b5935d0cde..0148ac4338 100644 --- a/test/battle/move_effect/teatime.c +++ b/test/battle/move_effect/teatime.c @@ -205,7 +205,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Lightning Rod if it has been affected by El PARAMETRIZE { move = MOVE_PLASMA_FISTS; item = ITEM_NONE; } GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); PLAYER(SPECIES_PIKACHU) { Ability(ABILITY_LIGHTNING_ROD); Item(item); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIECHI_BERRY); } } WHEN { diff --git a/test/battle/move_effect/teleport.c b/test/battle/move_effect/teleport.c index c3b5b53519..70454c5309 100644 --- a/test/battle/move_effect/teleport.c +++ b/test/battle/move_effect/teleport.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Teleport fails to switch out when there is no Pokémon to switch in (Gen 8+)") { GIVEN { - WITH_CONFIG(CONFIG_TELEPORT_BEHAVIOR, GEN_8); + WITH_CONFIG(B_TELEPORT_BEHAVIOR, GEN_8); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Teleport fails to switch out when there is no Pokémon to sw SINGLE_BATTLE_TEST("Teleport fails to switch out the user when there no alive Pokémon left (Gen 8+)") { GIVEN { - WITH_CONFIG(CONFIG_TELEPORT_BEHAVIOR, GEN_8); + WITH_CONFIG(B_TELEPORT_BEHAVIOR, GEN_8); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT) { HP(0); } @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Teleport fails to switch out the user when there no alive Po SINGLE_BATTLE_TEST("Teleport fails in Trainer Battles (Gen 1-7)") { GIVEN { - WITH_CONFIG(CONFIG_TELEPORT_BEHAVIOR, GEN_7); + WITH_CONFIG(B_TELEPORT_BEHAVIOR, GEN_7); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Teleport fails in Trainer Battles (Gen 1-7)") SINGLE_BATTLE_TEST("Teleport forces the Pokémon to switch out in Trainer Battles (Gen 8+)") { GIVEN { - WITH_CONFIG(CONFIG_TELEPORT_BEHAVIOR, GEN_8); + WITH_CONFIG(B_TELEPORT_BEHAVIOR, GEN_8); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Teleport forces the Pokémon to switch out in Trainer Battle SINGLE_BATTLE_TEST("Teleport does not fail if the user is trapped") { GIVEN { - WITH_CONFIG(CONFIG_TELEPORT_BEHAVIOR, GEN_8); + WITH_CONFIG(B_TELEPORT_BEHAVIOR, GEN_8); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); diff --git a/test/battle/move_effect/toxic.c b/test/battle/move_effect/toxic.c index 55e09b24eb..d784c5de36 100644 --- a/test/battle/move_effect/toxic.c +++ b/test/battle/move_effect/toxic.c @@ -52,7 +52,7 @@ SINGLE_BATTLE_TEST("Toxic cannot miss if used by a Poison-type (Gen6+)") PARAMETRIZE { species = SPECIES_WOBBUFFET; hit = FALSE; gen = GEN_6; } PARAMETRIZE { species = SPECIES_NIDORAN_M; hit = TRUE; gen = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_TOXIC_NEVER_MISS, gen); + WITH_CONFIG(B_TOXIC_NEVER_MISS, gen); ASSUME(GetSpeciesType(SPECIES_NIDORAN_M, 0) == TYPE_POISON); PLAYER(species); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/transform.c b/test/battle/move_effect/transform.c index bf2bd66143..de98de70a6 100644 --- a/test/battle/move_effect/transform.c +++ b/test/battle/move_effect/transform.c @@ -28,3 +28,17 @@ SINGLE_BATTLE_TEST("(TERA) Transform does not copy the target's Tera Type, and i NOT { HP_BAR(opponent); } } } + +SINGLE_BATTLE_TEST("Transform returns the user to normal at the end of the battle after fainting") +{ + GIVEN { + PLAYER(SPECIES_DITTO) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIDGEOT) { Item(ITEM_PIDGEOTITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(player, MOVE_TRANSFORM); } + TURN { MOVE(opponent, MOVE_SCRATCH); SEND_OUT(player, 1); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_DITTO); + } +} diff --git a/test/battle/move_effect/upper_hand.c b/test/battle/move_effect/upper_hand.c index 49dc21bf49..b879303abf 100644 --- a/test/battle/move_effect/upper_hand.c +++ b/test/battle/move_effect/upper_hand.c @@ -160,7 +160,7 @@ DOUBLE_BATTLE_TEST("Upper Hand fails if the target has attempted to act even if SINGLE_BATTLE_TEST("Upper Hand failing will prevent Protean activation") { GIVEN { - WITH_CONFIG(CONFIG_PROTEAN_LIBERO, GEN_6); + WITH_CONFIG(B_PROTEAN_LIBERO, GEN_6); PLAYER(SPECIES_REGIROCK); OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_PROTEAN); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/water_sport.c b/test/battle/move_effect/water_sport.c index 5cf52ed1c2..37d4fddf7e 100644 --- a/test/battle/move_effect/water_sport.c +++ b/test/battle/move_effect/water_sport.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Water Sport reduces the damage of Fire Type moves by 50% (Ge PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_SPORT_DMG_REDUCTION, config); + WITH_CONFIG(B_SPORT_DMG_REDUCTION, config); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/wish.c b/test/battle/move_effect/wish.c index 6e9114bc09..a9f93820bb 100644 --- a/test/battle/move_effect/wish.c +++ b/test/battle/move_effect/wish.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Wish restores 50% of the user's HP when not switching") PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_WISH_HP_SOURCE, config); + WITH_CONFIG(B_WISH_HP_SOURCE, config); PLAYER(SPECIES_WYNAUT) { HP(50); MaxHP(100); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Wish restores 50% of the user's HP when not switching") SINGLE_BATTLE_TEST("Wish restores 50% of the user's HP when switching (Gen5+)") { GIVEN { - WITH_CONFIG(CONFIG_WISH_HP_SOURCE, GEN_5); + WITH_CONFIG(B_WISH_HP_SOURCE, GEN_5); PLAYER(SPECIES_WYNAUT) { HP(50); MaxHP(100); } PLAYER(SPECIES_WOBBUFFET) { HP(100); MaxHP(200); } OPPONENT(SPECIES_WOBBUFFET); @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Wish restores 50% of the user's HP when switching (Gen5+)") SINGLE_BATTLE_TEST("Wish restores 50% of the recipient's HP when switching (Gen3-4)") { GIVEN { - WITH_CONFIG(CONFIG_WISH_HP_SOURCE, GEN_4); + WITH_CONFIG(B_WISH_HP_SOURCE, GEN_4); PLAYER(SPECIES_WYNAUT) { HP(50); MaxHP(100); } PLAYER(SPECIES_WOBBUFFET) { HP(100); MaxHP(200); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect_secondary/dire_claw.c b/test/battle/move_effect_secondary/dire_claw.c index e45b8e3947..c90b763c1a 100644 --- a/test/battle/move_effect_secondary/dire_claw.c +++ b/test/battle/move_effect_secondary/dire_claw.c @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze poison/electric types respe PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; species = SPECIES_ARBOK; } GIVEN { - WITH_CONFIG(CONFIG_PARALYZE_ELECTRIC, GEN_6); + WITH_CONFIG(B_PARALYZE_ELECTRIC, GEN_6); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species); } WHEN { diff --git a/test/battle/move_effect_secondary/paralysis.c b/test/battle/move_effect_secondary/paralysis.c index 121d7ac6e9..942c57fe56 100644 --- a/test/battle/move_effect_secondary/paralysis.c +++ b/test/battle/move_effect_secondary/paralysis.c @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Thunder Shock cannot paralyze an Electric-type (Gen6+)") PARAMETRIZE { gen = GEN_5; } PARAMETRIZE { gen = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_PARALYZE_ELECTRIC, gen); + WITH_CONFIG(B_PARALYZE_ELECTRIC, gen); ASSUME(GetSpeciesType(SPECIES_PIKACHU, 0) == TYPE_ELECTRIC); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_PIKACHU); diff --git a/test/battle/move_effect_secondary/tri_attack.c b/test/battle/move_effect_secondary/tri_attack.c index 308e3914fd..c10d2e9d2a 100644 --- a/test/battle/move_effect_secondary/tri_attack.c +++ b/test/battle/move_effect_secondary/tri_attack.c @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_ARCANINE; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE_OR_FROSTBITE; species = SPECIES_GLALIE; } GIVEN { - WITH_CONFIG(CONFIG_PARALYZE_ELECTRIC, GEN_6); + WITH_CONFIG(B_PARALYZE_ELECTRIC, GEN_6); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species); } WHEN { diff --git a/test/battle/move_effect_secondary/wrap.c b/test/battle/move_effect_secondary/wrap.c index 2e430871fd..5d6b7c1d27 100644 --- a/test/battle/move_effect_secondary/wrap.c +++ b/test/battle/move_effect_secondary/wrap.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Wrap can damage the wrapped mon for 5 turns 25% (Gen3-4) or PARAMETRIZE { config = GEN_5; passes = 50; trials = 100; } PASSES_RANDOMLY(passes, trials, RNG_WRAP); GIVEN { - WITH_CONFIG(CONFIG_BINDING_TURNS, config); + WITH_CONFIG(B_BINDING_TURNS, config); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Wrap can damage the wrapped mon for 4 turns 25% (Gen3-4) or PARAMETRIZE { config = GEN_5; passes = 50; trials = 100; } PASSES_RANDOMLY(passes, trials, RNG_WRAP); GIVEN { - WITH_CONFIG(CONFIG_BINDING_TURNS, config); + WITH_CONFIG(B_BINDING_TURNS, config); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Wrap can damage the wrapped mon 5 turns (Gen4) or 7 turns (G PARAMETRIZE { config = GEN_4; } PARAMETRIZE { config = GEN_5; } GIVEN { - WITH_CONFIG(CONFIG_BINDING_TURNS, config); + WITH_CONFIG(B_BINDING_TURNS, config); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRIP_CLAW); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effects_combined/triple_arrows.c b/test/battle/move_effects_combined/triple_arrows.c index f9e0e550b8..5295418b35 100644 --- a/test/battle/move_effects_combined/triple_arrows.c +++ b/test/battle/move_effects_combined/triple_arrows.c @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Triple Arrows has an increased critical hit ratio") } PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_TRIPLE_ARROWS) == 1); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_flags/cant_use_twice.c b/test/battle/move_flags/cant_use_twice.c index 1945a2b198..d489dcca3f 100644 --- a/test/battle/move_flags/cant_use_twice.c +++ b/test/battle/move_flags/cant_use_twice.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Moves with the cantUseTwice flag strike again if fast encore PARAMETRIZE { move = MOVE_GIGATON_HAMMER; } PARAMETRIZE { move = MOVE_BLOOD_MOON; } GIVEN { - WITH_CONFIG(CONFIG_ENCORE_TARGET, GEN_3); + WITH_CONFIG(B_ENCORE_TARGET, GEN_3); ASSUME(GetMoveEffect(MOVE_ENCORE) == EFFECT_ENCORE); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_flags/critical_hit_stage.c b/test/battle/move_flags/critical_hit_stage.c index 0712d49ace..820e1964ff 100644 --- a/test/battle/move_flags/critical_hit_stage.c +++ b/test/battle/move_flags/critical_hit_stage.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("criticalHitStage set to 1 increases critical hits occur at a } PASSES_RANDOMLY(passes, trials, RNG_CRITICAL_HIT); GIVEN { - WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); + WITH_CONFIG(B_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1); ASSUME(GetSpeciesBaseSpeed(SPECIES_WOBBUFFET) == 33); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_flags/powder.c b/test/battle/move_flags/powder.c index bb109a252e..6de27dbdf6 100644 --- a/test/battle/move_flags/powder.c +++ b/test/battle/move_flags/powder.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Powder moves are blocked by Grass-type Pokémon (Gen6+)") PARAMETRIZE { gen = GEN_5; } PARAMETRIZE { gen = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, gen); + WITH_CONFIG(B_POWDER_GRASS, gen); ASSUME(IsPowderMove(MOVE_STUN_SPORE)); ASSUME(GetSpeciesType(SPECIES_ODDISH, 0) == TYPE_GRASS); PLAYER(SPECIES_WYNAUT); diff --git a/test/battle/sleep_clause.c b/test/battle/sleep_clause.c index ba14671b43..5341aff179 100644 --- a/test/battle/sleep_clause.c +++ b/test/battle/sleep_clause.c @@ -307,7 +307,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% (Gen5+) of the t PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -332,7 +332,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% (Gen5+) of the t PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -360,7 +360,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep from Effect Spore will not activate slee PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -388,7 +388,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep from Effect Spore will not activate slee PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -841,7 +841,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo PASSES_RANDOMLY(passes, 100, RNG_SHED_SKIN); GIVEN { - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, config); FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -1219,7 +1219,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep caused by Effect Spore does not prevent PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); @@ -1256,7 +1256,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(MoveMakesContact(MOVE_SCRATCH)); @@ -1296,7 +1296,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); @@ -1473,7 +1473,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Yawn'd Pokémon slept due to Effect Spore befo PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); + WITH_CONFIG(B_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); @@ -1778,7 +1778,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep Clause does not prevent sleeping your pa DOUBLE_BATTLE_TEST("Sleep Clause: Sleep moves used after being Encore'd are prevented when sleep clause is active") { GIVEN { - WITH_CONFIG(CONFIG_ENCORE_TARGET, GEN_3); + WITH_CONFIG(B_ENCORE_TARGET, GEN_3); FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); diff --git a/test/battle/spread_moves.c b/test/battle/spread_moves.c index 477af564c8..268633940e 100644 --- a/test/battle/spread_moves.c +++ b/test/battle/spread_moves.c @@ -172,7 +172,7 @@ DOUBLE_BATTLE_TEST("Spread Moves: A spread move attack will be weakened by stron DOUBLE_BATTLE_TEST("Spread Moves: AOE move vs Disguise, Volt Absorb (right) and Lightning Rod (left)") { GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); ASSUME(GetMoveTarget(MOVE_DISCHARGE) == MOVE_TARGET_FOES_AND_ALLY); ASSUME(GetMoveType(MOVE_DISCHARGE) == TYPE_ELECTRIC); PLAYER(SPECIES_WOBBUFFET); @@ -192,7 +192,7 @@ DOUBLE_BATTLE_TEST("Spread Moves: AOE move vs Disguise, Volt Absorb (right) and DOUBLE_BATTLE_TEST("Spread Moves: AOE move vs Disguise, Volt Absorb (left) and Lightning Rod (right)") { GIVEN { - WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); + WITH_CONFIG(B_REDIRECT_ABILITY_IMMUNITY, GEN_5); ASSUME(GetMoveTarget(MOVE_DISCHARGE) == MOVE_TARGET_FOES_AND_ALLY); ASSUME(GetMoveType(MOVE_DISCHARGE) == TYPE_ELECTRIC); PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/status1/burn.c b/test/battle/status1/burn.c index d283307590..ce85e76d87 100644 --- a/test/battle/status1/burn.c +++ b/test/battle/status1/burn.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Burn deals 1/8th damage (Gen2-6) or 1/16th (Gen1 and Gen7+) PARAMETRIZE { config = GEN_7; value = 16; } PARAMETRIZE { config = GEN_6; value = 8; } GIVEN { - WITH_CONFIG(CONFIG_BURN_DAMAGE, config); + WITH_CONFIG(B_BURN_DAMAGE, config); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/status1/frostbite.c b/test/battle/status1/frostbite.c index 9ae86a8738..825dff3831 100644 --- a/test/battle/status1/frostbite.c +++ b/test/battle/status1/frostbite.c @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Frostbite deals 1/8th damage (Gen1-6) or 1/16th (Gen7+) per PARAMETRIZE { config = GEN_7; value = 16; } PARAMETRIZE { config = GEN_6; value = 8; } GIVEN { - WITH_CONFIG(CONFIG_BURN_DAMAGE, config); + WITH_CONFIG(B_BURN_DAMAGE, config); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_FROSTBITE); } } WHEN { diff --git a/test/battle/status1/paralysis.c b/test/battle/status1/paralysis.c index fa78387af7..3f2d3627c0 100644 --- a/test/battle/status1/paralysis.c +++ b/test/battle/status1/paralysis.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50% (Gen 7+) or 75% (Gen 1-6)") PARAMETRIZE { playerSpeed = 98; playerFirst = FALSE; genConfig = GEN_7; } PARAMETRIZE { playerSpeed = 102; playerFirst = TRUE; genConfig = GEN_7; } GIVEN { - WITH_CONFIG(CONFIG_PARALYSIS_SPEED, genConfig); + WITH_CONFIG(B_PARALYSIS_SPEED, genConfig); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); Speed(playerSpeed); } OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } } WHEN { @@ -56,7 +56,7 @@ AI_SINGLE_BATTLE_TEST("AI avoids Thunder Wave when it can not paralyse target") PARAMETRIZE { species = SPECIES_PIKACHU; ability = ABILITY_STATIC; } GIVEN { - WITH_CONFIG(CONFIG_PARALYZE_ELECTRIC, GEN_6); + WITH_CONFIG(B_PARALYZE_ELECTRIC, GEN_6); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); PLAYER(species) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_THUNDER_WAVE); } @@ -71,7 +71,7 @@ SINGLE_BATTLE_TEST("Thunder Wave doesn't affect Electric types (Gen6+)") PARAMETRIZE { gen = GEN_5; } PARAMETRIZE { gen = GEN_6; } GIVEN { - WITH_CONFIG(CONFIG_PARALYZE_ELECTRIC, gen); + WITH_CONFIG(B_PARALYZE_ELECTRIC, gen); ASSUME(GetSpeciesType(SPECIES_PIKACHU, 0) == TYPE_ELECTRIC); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_PIKACHU); diff --git a/test/battle/status1/sleep.c b/test/battle/status1/sleep.c index 5cb60668b9..a087cc3290 100644 --- a/test/battle/status1/sleep.c +++ b/test/battle/status1/sleep.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Sleep prevents the battler from using a move") SINGLE_BATTLE_TEST("Sleep: Spore affects grass types (Gen1-5)") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_5); + WITH_CONFIG(B_POWDER_GRASS, GEN_5); ASSUME(IsPowderMove(MOVE_SPORE)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_CHIKORITA); @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Sleep: Spore affects grass types (Gen1-5)") SINGLE_BATTLE_TEST("Sleep: Spore doesn't affect grass types (Gen6+)") { GIVEN { - WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6); + WITH_CONFIG(B_POWDER_GRASS, GEN_6); ASSUME(IsPowderMove(MOVE_SPORE)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_CHIKORITA); diff --git a/test/battle/trainer_slides.c b/test/battle/trainer_slides.c index 8f7bae9b09..7c9f7e7d99 100644 --- a/test/battle/trainer_slides.c +++ b/test/battle/trainer_slides.c @@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("Trainer Slide: Enemy Mon Unaffected") { gBattleTestRunnerState->data.recordedBattle.opponentA = TRAINER_SLIDE_ENEMY_MON_UNAFFECTED; GIVEN { - WITH_CONFIG(CONFIG_SHEER_COLD_IMMUNITY, GEN_7); + WITH_CONFIG(B_SHEER_COLD_IMMUNITY, GEN_7); ASSUME(GetSpeciesType(SPECIES_GLALIE, 0) == TYPE_ICE); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_GLALIE); diff --git a/test/battle/volatiles/confusion.c b/test/battle/volatiles/confusion.c index b9a1237955..7fc8cc54c4 100644 --- a/test/battle/volatiles/confusion.c +++ b/test/battle/volatiles/confusion.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Confusion adds a 50/33% chance to hit self with 40 power") PARAMETRIZE { genConfig = GEN_7; pctChance = 33; } PASSES_RANDOMLY(pctChance, 100, RNG_CONFUSION); GIVEN { - WITH_CONFIG(CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig); + WITH_CONFIG(B_CONFUSION_SELF_DMG_CHANCE, genConfig); ASSUME(GetMovePower(MOVE_SCRATCH) == 40); PLAYER(SPECIES_WOBBUFFET) { Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Confusion self hit does not consume Gems") PARAMETRIZE { genConfig = GEN_7; pctChance = 33; } PASSES_RANDOMLY(pctChance, 100, RNG_CONFUSION); GIVEN { - WITH_CONFIG(CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig); + WITH_CONFIG(B_CONFUSION_SELF_DMG_CHANCE, genConfig); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c index 55b5907ffb..930b017f4e 100644 --- a/test/battle/weather/sandstorm.c +++ b/test/battle/weather/sandstorm.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Sandstorm multiplies the special defense of Rock-types by 1. PARAMETRIZE { move = MOVE_SANDSTORM; config = GEN_3; } PARAMETRIZE { move = MOVE_SANDSTORM; config = GEN_4; } GIVEN { - WITH_CONFIG(CONFIG_SANDSTORM_SPDEF_BOOST, config); + WITH_CONFIG(B_SANDSTORM_SPDEF_BOOST, config); ASSUME(GetMoveCategory(MOVE_SWIFT) == DAMAGE_CATEGORY_SPECIAL); PLAYER(SPECIES_WOBBUFFET) ; OPPONENT(SPECIES_NOSEPASS);