diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index e9cf8fa0b6a6..f3f8d246be62 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -524,10 +524,59 @@ createsprite gFistFootSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration, \initPosition, 1 .endm + @ battle_anim_electric + .macro create_electricity_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, duration:req, tile_offset:req + createsprite gElectricitySpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \duration, \tile_offset + .endm + .macro create_electric_puff_sprite anim_battler:req, subpriority_offset:req, relative_to:req, x:req, y:req createsprite gElectricPuffSpriteTemplate, \anim_battler, \subpriority_offset, \relative_to, \x, \y .endm + .macro create_growing_charge_orb_sprite anim_battler:req, subpriority_offset:req, relative_to:req + createsprite gGrowingChargeOrbSpriteTemplate, \anim_battler, \subpriority_offset, \relative_to + .endm + + .macro create_growing_shock_wave_orb_sprite anim_battler:req, subpriority_offset:req + createsprite gGrowingShockWaveOrbSpriteTemplate, \anim_battler, \subpriority_offset + .endm + + .macro create_lightning_sprite anim_battler:req, subpriority_offset:req, x:req, y:req + createsprite gLightningSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y + .endm + + .macro create_spark_electricity_sprite anim_battler:req, subpriority_offset:req, sine1:req, wave_amplitude:req, sine2:req, duration:req, relative_to:req, useAltCoords=TRUE, priority:req + createsprite gSparkElectricitySpriteTemplate, \anim_battler, \subpriority_offset, \sine1, \wave_amplitude, \sine2, \duration, \relative_to, \useAltCoords, \priority + .endm + + .macro create_spark_electricity_flashing_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, wave_amplitude:req, duration:req, wave_offset:req, wave_period:req, tile_offset:req, unk7:req + createsprite gSparkElectricityFlashingSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \wave_amplitude, \duration, \wave_offset, \wave_period, \tile_offset, \unk7 + .endm + + .macro create_thunderbolt_orb_sprite anim_battler:req, subpriority_offset:req, duration:req, x:req, y:req, visibility_duration:req + createsprite gThunderboltOrbSpriteTemplate, \anim_battler, \subpriority_offset, \duration, \x, \y, \visibility_duration + .endm + + .macro create_thunder_wave_sprite anim_battler:req, subpriority_offset:req, x:req, y:req + createsprite gThunderWaveSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y + .endm + + .macro create_volt_tackle_orb_slide_sprite anim_battler:req, subpriority_offset:req + createsprite gVoltTackleOrbSlideSpriteTemplate, \anim_battler, \subpriority_offset + .endm + + .macro create_zap_cannon_ball_sprite anim_battler:req, subpriority_offset:req, initial_x:req, initial_y:req, target_x:req, target_y:req, duration:req, location:req + createsprite gZapCannonBallSpriteTemplate, \anim_battler, \subpriority_offset, \initial_x, \initial_y, \target_x, \target_y, \duration, \location + .endm + + .macro create_zap_cannon_spark_sprite anim_battler:req, subpriority_offset:req, x:req, y:req, wave_amplitude:req, duration:req, wave_offset:req, wave_period:req, tile_offset:req + createsprite gZapCannonSparkSpriteTemplate, \anim_battler, \subpriority_offset, \x, \y, \wave_amplitude, \duration, \wave_offset, \wave_period, \tile_offset + .endm + + @.macro create_sprite anim_battler:req, subpriority_offset:req + @createsprite gSpriteTemplate, \anim_battler, \subpriority_offset + @.endm + @ createvisualtask wrappers @ The arguments are based on the CMD_ARGS of the task. @@ -595,3 +644,28 @@ .macro create_surf_wave priority=2, palette:req createvisualtask AnimTask_CreateSurfWave, \priority, \palette .endm + + @ battle_anim_electric + .macro electric_bolt priority=5, x:req, y:req, big_bolt:req + createvisualtask AnimTask_ElectricBolt, \priority, \x, \y, \big_bolt + .endm + + .macro electric_charging_particles priority=2, relative_to:req, amount:req, duration:req, compaction:req + createvisualtask AnimTask_ElectricChargingParticles, \priority, \relative_to, \amount, \duration, \compaction + .endm + + .macro shock_wave_lightning priority=5 + createvisualtask AnimTask_ShockWaveLightning, \priority + .endm + + .macro shock_wave_progressing_bolt priority=5 + createvisualtask AnimTask_ShockWaveProgressingBolt, \priority + .endm + + .macro volt_tackle_attacker_reappear priority=5 + createvisualtask AnimTask_VoltTackleAttackerReappear, \priority + .endm + + .macro volt_tackle_bolt priority=5, y:req + createvisualtask AnimTask_VoltTackleBolt, \priority, \y + .endm diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 4f4338ad8d2a..ffd7693d8f96 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1057,7 +1057,7 @@ Move_THUNDER_SHOCK: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK waitforvisualfinish delay 10 - createvisualtask AnimTask_ElectricBolt, 5, 0, -44, 0 + electric_bolt x=0, y=-44, big_bolt=FALSE playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET delay 9 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 13, RGB_BLACK @@ -1079,13 +1079,13 @@ Move_THUNDERBOLT: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK waitforvisualfinish delay 10 - createvisualtask AnimTask_ElectricBolt, 5, 24, -52, 0 + electric_bolt x=24, y=-52, big_bolt=FALSE playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET delay 7 - createvisualtask AnimTask_ElectricBolt, 5, -24, -52, 0 + electric_bolt x=-24, y=-52, big_bolt=FALSE playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET delay 7 - createvisualtask AnimTask_ElectricBolt, 5, 0, -60, 1 + electric_bolt x=0, y=-60, big_bolt=TRUE playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET delay 9 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 13, RGB_BLACK @@ -1093,15 +1093,15 @@ Move_THUNDERBOLT: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 13, 0, RGB_BLACK waitforvisualfinish delay 20 - createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 44, 0, 0, 3 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 0, 40, 0, -32765 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 64, 40, 1, -32765 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 128, 40, 0, -32765 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 192, 40, 2, -32765 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 32, 40, 0, -32765 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 96, 40, 1, -32765 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 160, 40, 0, -32765 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 224, 40, 2, -32765 + create_thunderbolt_orb_sprite ANIM_TARGET, 3, duration=44, x=0, y=0, visibility_duration=3 + create_spark_electricity_flashing_sprite ANIM_TARGET, 4, x=0, y=0, wave_amplitude=32, duration=44, wave_offset=0, wave_period=40, tile_offset=0, unk7=-32765 + create_spark_electricity_flashing_sprite ANIM_TARGET, 4, x=0, y=0, wave_amplitude=32, duration=44, wave_offset=64, wave_period=40, tile_offset=1, unk7=-32765 + create_spark_electricity_flashing_sprite ANIM_TARGET, 4, x=0, y=0, wave_amplitude=32, duration=44, wave_offset=128, wave_period=40, tile_offset=0, unk7=-32765 + create_spark_electricity_flashing_sprite ANIM_TARGET, 4, x=0, y=0, wave_amplitude=32, duration=44, wave_offset=192, wave_period=40, tile_offset=2, unk7=-32765 + create_spark_electricity_flashing_sprite ANIM_TARGET, 4, x=0, y=0, wave_amplitude=16, duration=44, wave_offset=32, wave_period=40, tile_offset=0, unk7=-32765 + create_spark_electricity_flashing_sprite ANIM_TARGET, 4, x=0, y=0, wave_amplitude=16, duration=44, wave_offset=96, wave_period=40, tile_offset=1, unk7=-32765 + create_spark_electricity_flashing_sprite ANIM_TARGET, 4, x=0, y=0, wave_amplitude=16, duration=44, wave_offset=160, wave_period=40, tile_offset=0, unk7=-32765 + create_spark_electricity_flashing_sprite ANIM_TARGET, 4, x=0, y=0, wave_amplitude=16, duration=44, wave_offset=224, wave_period=40, tile_offset=2, unk7=-32765 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 0 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK @@ -1128,15 +1128,15 @@ Move_THUNDER_WAVE: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK waitforvisualfinish delay 10 - createvisualtask AnimTask_ElectricBolt, 5, 0, -48, 0 + electric_bolt x=0, y=-48, big_bolt=FALSE playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET delay 20 loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 10, 4 - createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, -16 + create_thunder_wave_sprite ANIM_TARGET, 2, x=-16, y=-16 delay 4 - createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 0 + create_thunder_wave_sprite ANIM_TARGET, 2, x=-16, y=0 delay 4 - createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 16 + create_thunder_wave_sprite ANIM_TARGET, 2, x=-16, y=16 waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK waitforvisualfinish @@ -1948,32 +1948,32 @@ Move_SPARK: delay 0 blend_color_cycle priority=2, 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 + create_spark_electricity_sprite ANIM_ATTACKER, 0, sine1=32, wave_amplitude=24, sine2=190, duration=12, relative_to=ANIM_ATTACKER, priority=FALSE 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 + create_spark_electricity_sprite ANIM_ATTACKER, 0, sine1=80, wave_amplitude=24, sine2=22, duration=12, relative_to=ANIM_ATTACKER, priority=FALSE + create_spark_electricity_sprite ANIM_ATTACKER, 0, sine1=156, wave_amplitude=24, sine2=121, duration=13, relative_to=ANIM_ATTACKER, priority=TRUE delay 0 blend_color_cycle priority=2, 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 blend_color_cycle priority=2, 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 + create_spark_electricity_sprite ANIM_ATTACKER, 0, sine1=100, wave_amplitude=24, sine2=60, duration=10, relative_to=ANIM_ATTACKER, priority=FALSE + create_spark_electricity_sprite ANIM_ATTACKER, 0, sine1=170, wave_amplitude=24, sine2=42, duration=11, relative_to=ANIM_ATTACKER, priority=TRUE delay 0 - createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, ANIM_ATTACKER, 1, 1 + create_spark_electricity_sprite ANIM_ATTACKER, 0, sine1=238, wave_amplitude=24, sine2=165, duration=10, relative_to=ANIM_ATTACKER, priority=TRUE delay 0 blend_color_cycle priority=2, 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 blend_color_cycle priority=2, 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 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 128, 20, 0, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 192, 20, 2, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 32, 20, 0, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 96, 20, 1, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 160, 20, 0, 0 - createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 + create_spark_electricity_flashing_sprite ANIM_ATTACKER, 4, x=0, y=0, wave_amplitude=32, duration=12, wave_offset=0, wave_period=20, tile_offset=0, unk7=0 + create_spark_electricity_flashing_sprite ANIM_ATTACKER, 4, x=0, y=0, wave_amplitude=32, duration=12, wave_offset=64, wave_period=20, tile_offset=1, unk7=0 + create_spark_electricity_flashing_sprite ANIM_ATTACKER, 4, x=0, y=0, wave_amplitude=32, duration=12, wave_offset=128, wave_period=20, tile_offset=0, unk7=0 + create_spark_electricity_flashing_sprite ANIM_ATTACKER, 4, x=0, y=0, wave_amplitude=32, duration=12, wave_offset=192, wave_period=20, tile_offset=2, unk7=0 + create_spark_electricity_flashing_sprite ANIM_ATTACKER, 4, x=0, y=0, wave_amplitude=16, duration=12, wave_offset=32, wave_period=20, tile_offset=0, unk7=0 + create_spark_electricity_flashing_sprite ANIM_ATTACKER, 4, x=0, y=0, wave_amplitude=16, duration=12, wave_offset=96, wave_period=20, tile_offset=1, unk7=0 + create_spark_electricity_flashing_sprite ANIM_ATTACKER, 4, x=0, y=0, wave_amplitude=16, duration=12, wave_offset=160, wave_period=20, tile_offset=0, unk7=0 + create_spark_electricity_flashing_sprite ANIM_ATTACKER, 4, x=0, y=0, wave_amplitude=16, duration=12, wave_offset=224, wave_period=20, tile_offset=2, unk7=0 delay 4 waitforvisualfinish blend_color_cycle priority=2, 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) @@ -3575,13 +3575,13 @@ Move_CHARGE: setalpha 12, 8 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 + electric_charging_particles relative_to=ANIM_ATTACKER, amount=60, duration=2, compaction=12 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 30 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 30 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 + create_growing_charge_orb_sprite ANIM_ATTACKER, 2, relative_to=ANIM_ATTACKER delay 25 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 20 @@ -4422,25 +4422,25 @@ Move_VOLT_TACKLE: setalpha 12, 8 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 8, RGB_BLACK waitforvisualfinish - createsprite gVoltTackleOrbSlideSpriteTemplate, ANIM_ATTACKER, 1 + create_volt_tackle_orb_slide_sprite ANIM_ATTACKER, 1 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff delay 8 - createvisualtask AnimTask_VoltTackleBolt, 5, 0 + volt_tackle_bolt y=0 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_VoltTackleBolt, 5, 1 + volt_tackle_bolt y=1 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_VoltTackleBolt, 5, 2 + volt_tackle_bolt y=2 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_VoltTackleBolt, 5, 3 + volt_tackle_bolt y=3 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_VoltTackleBolt, 5, 4 + volt_tackle_bolt y=4 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER delay 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 10, 0, 18, 1 @@ -4449,7 +4449,7 @@ Move_VOLT_TACKLE: delay 2 create_electric_puff_sprite ANIM_ATTACKER, 2, relative_to=1, x=-16, y=-16 delay 8 - createvisualtask AnimTask_VoltTackleAttackerReappear, 5 + volt_tackle_attacker_reappear waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 3, 0, 9, 1 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER @@ -4555,15 +4555,15 @@ Move_SHOCK_WAVE: setalpha 12, 8 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 + electric_charging_particles relative_to=ANIM_ATTACKER, amount=20, duration=0, compaction=2 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 12 - createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 + create_growing_shock_wave_orb_sprite ANIM_ATTACKER, 2 delay 30 - createvisualtask AnimTask_ShockWaveProgressingBolt, 5 + shock_wave_progressing_bolt delay 12 waitforvisualfinish - createvisualtask AnimTask_ShockWaveLightning, 5 + shock_wave_lightning playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 @@ -4778,38 +4778,38 @@ Move_THUNDER: invert_screen_color scenery=TRUE, attacker=TRUE, target=TRUE playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 16, -36 + create_lightning_sprite ANIM_TARGET, 2, x=16, y=-36 delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 16, -20 + create_lightning_sprite ANIM_TARGET, 2, x=16, y=-20 delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 16, 12 + create_lightning_sprite ANIM_TARGET, 2, x=16, y=12 delay 20 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 6, -16, -32 + create_lightning_sprite ANIM_TARGET, 6, x=-16, y=-32 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 6, -16, -16 + create_lightning_sprite ANIM_TARGET, 6, x=-16, y=-16 delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 6, -16, 16 + create_lightning_sprite ANIM_TARGET, 6, x=-16, y=16 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET delay 5 invert_screen_color scenery=TRUE, attacker=TRUE, target=TRUE delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 24, -32 + create_lightning_sprite ANIM_TARGET, 2, x=24, y=-32 delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 24, -16 + create_lightning_sprite ANIM_TARGET, 2, x=24, y=-16 delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 24, 16 + create_lightning_sprite ANIM_TARGET, 2, x=24, y=16 delay 30 invert_screen_color scenery=TRUE, attacker=TRUE, target=TRUE delay 5 invert_screen_color scenery=TRUE, attacker=TRUE, target=TRUE delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -32 + create_lightning_sprite ANIM_TARGET, 2, x=0, y=-32 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 + create_lightning_sprite ANIM_TARGET, 2, x=0, y=-16 delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 + create_lightning_sprite ANIM_TARGET, 2, x=0, y=16 delay 10 invert_screen_color scenery=TRUE, attacker=TRUE, target=TRUE delay 1 @@ -4839,11 +4839,11 @@ Move_THUNDER_PUNCH: delay 1 invert_screen_color scenery=TRUE, attacker=TRUE, target=TRUE delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 + create_lightning_sprite ANIM_TARGET, 2, x=0, y=-48 delay 1 - createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, -16 + create_lightning_sprite ANIM_ATTACKER, 2, x=0, y=-16 delay 1 - createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, 16 + create_lightning_sprite ANIM_ATTACKER, 2, x=0, y=16 delay 1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET invert_screen_color scenery=TRUE, attacker=TRUE, target=TRUE @@ -7204,15 +7204,15 @@ Move_ZAP_CANNON: loadspritegfx ANIM_TAG_BLACK_BALL_2 loadspritegfx ANIM_TAG_SPARK_2 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER - createsprite gZapCannonBallSpriteTemplate, ANIM_TARGET, 3, 10, 0, 0, 0, 30, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 64, 40, 1 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 128, 40, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 192, 40, 2 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 32, 40, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 96, 40, 1 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 160, 40, 0 - createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 8, 30, 224, 40, 2 + create_zap_cannon_ball_sprite ANIM_TARGET, 3, initial_x=10, initial_y=0, target_x=0, target_y=0, duration=30, location=0 + create_zap_cannon_spark_sprite ANIM_TARGET, 4, x=10, y=0, wave_amplitude=16, duration=30, wave_offset=0, wave_period=40, tile_offset=0 + create_zap_cannon_spark_sprite ANIM_TARGET, 4, x=10, y=0, wave_amplitude=16, duration=30, wave_offset=64, wave_period=40, tile_offset=1 + create_zap_cannon_spark_sprite ANIM_TARGET, 4, x=10, y=0, wave_amplitude=16, duration=30, wave_offset=128, wave_period=40, tile_offset=0 + create_zap_cannon_spark_sprite ANIM_TARGET, 4, x=10, y=0, wave_amplitude=16, duration=30, wave_offset=192, wave_period=40, tile_offset=2 + create_zap_cannon_spark_sprite ANIM_TARGET, 4, x=10, y=0, wave_amplitude=8, duration=30, wave_offset=32, wave_period=40, tile_offset=0 + create_zap_cannon_spark_sprite ANIM_TARGET, 4, x=10, y=0, wave_amplitude=8, duration=30, wave_offset=96, wave_period=40, tile_offset=1 + create_zap_cannon_spark_sprite ANIM_TARGET, 4, x=10, y=0, wave_amplitude=8, duration=30, wave_offset=160, wave_period=40, tile_offset=0 + create_zap_cannon_spark_sprite ANIM_TARGET, 4, x=10, y=0, wave_amplitude=8, duration=30, wave_offset=224, wave_period=40, tile_offset=2 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 delay 15 @@ -8057,11 +8057,11 @@ Move_TRI_ATTACK: loadspritegfx ANIM_TAG_LIGHTNING invert_screen_color scenery=TRUE, attacker=TRUE, target=TRUE playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 + create_lightning_sprite ANIM_TARGET, 2, x=0, y=-48 delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 + create_lightning_sprite ANIM_TARGET, 2, x=0, y=-16 delay 1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 + create_lightning_sprite ANIM_TARGET, 2, x=0, y=16 delay 20 createvisualtask AnimTask_ShakeTargetInPattern, 2, 20, 3, TRUE, 0 delay 2 @@ -10136,21 +10136,21 @@ WaterBubblesEffectLong: ElectricityEffect: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0 + create_electricity_sprite ANIM_TARGET, 2, x=5, y=0, duration=5, tile_offset=0 delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1 + create_electricity_sprite ANIM_TARGET, 2, x=-5, y=10, duration=5, tile_offset=1 delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2 + create_electricity_sprite ANIM_TARGET, 2, x=15, y=20, duration=5, tile_offset=2 delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0 + create_electricity_sprite ANIM_TARGET, 2, x=-15, y=-10, duration=5, tile_offset=0 delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1 + create_electricity_sprite ANIM_TARGET, 2, x=25, y=0, duration=5, tile_offset=1 delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2 + create_electricity_sprite ANIM_TARGET, 2, x=-8, y=8, duration=5, tile_offset=2 delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0 + create_electricity_sprite ANIM_TARGET, 2, x=2, y=-8, duration=5, tile_offset=0 delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1 + create_electricity_sprite ANIM_TARGET, 2, x=-20, y=15, duration=5, tile_offset=1 return ConfusionEffect: diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index cc36e608f891..ce12350e679c 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle_anim.h" +#include "battle_anim_internal.h" #include "constants/rgb.h" #include "trig.h" #include "constants/songs.h" @@ -458,12 +459,14 @@ const struct SpriteTemplate gShockWaveProgressingBoltSpriteTemplate = static void AnimLightning(struct Sprite *sprite) { + CMD_ARGS(x, y); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - 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; sprite->callback = AnimLightning_Step; } @@ -475,10 +478,12 @@ static void AnimLightning_Step(struct Sprite *sprite) static void AnimUnusedSpinningFist(struct Sprite *sprite) { + CMD_ARGS(x); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - sprite->x -= gBattleAnimArgs[0]; + sprite->x -= cmd->x; else - sprite->x += gBattleAnimArgs[0]; + sprite->x += cmd->x; sprite->callback = AnimUnusedSpinningFist_Step; } @@ -491,34 +496,38 @@ static void AnimUnusedSpinningFist_Step(struct Sprite *sprite) static void AnimUnusedCirclingShock(struct Sprite *sprite) { + CMD_ARGS(x, y, amplitude, speed, duration); + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { - sprite->x -= gBattleAnimArgs[0]; - sprite->y -= gBattleAnimArgs[1]; + sprite->x -= cmd->x; + sprite->y -= cmd->y; } else { - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; + sprite->x += cmd->x; + sprite->y += cmd->y; } sprite->data[0] = 0; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[1] = cmd->amplitude; + sprite->data[2] = cmd->speed; + sprite->data[3] = cmd->duration; StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); sprite->callback = TranslateSpriteInCircle; } static void AnimSparkElectricity(struct Sprite *sprite) { + CMD_ARGS(sine1, waveAmplitude, sine2, duration, relativeTo, useAltCoords, priority); + u8 battler; u32 matrixNum; s16 sineVal; - switch (gBattleAnimArgs[4]) + switch (cmd->relativeTo) { case ANIM_ATTACKER: battler = gBattleAnimAttacker; @@ -541,7 +550,7 @@ static void AnimSparkElectricity(struct Sprite *sprite) break; } - if (gBattleAnimArgs[5] == 0) + if (cmd->useAltCoords == FALSE) { sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y); @@ -552,36 +561,38 @@ static void AnimSparkElectricity(struct Sprite *sprite) sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET); } - sprite->x2 = (gSineTable[gBattleAnimArgs[0]] * gBattleAnimArgs[1]) >> 8; - sprite->y2 = (gSineTable[gBattleAnimArgs[0] + 64] * gBattleAnimArgs[1]) >> 8; + sprite->x2 = (gSineTable[cmd->sine1] * cmd->waveAmplitude) >> 8; + sprite->y2 = (gSineTable[cmd->sine1 + 64] * cmd->waveAmplitude) >> 8; - if (gBattleAnimArgs[6] & 1) + if (cmd->priority & 1) sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; matrixNum = sprite->oam.matrixNum; - sineVal = gSineTable[gBattleAnimArgs[2]]; + sineVal = gSineTable[cmd->sine2]; - gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[gBattleAnimArgs[2] + 64]; + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[cmd->sine2 + 64]; gOamMatrices[matrixNum].b = sineVal; gOamMatrices[matrixNum].c = -sineVal; - sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[0] = cmd->duration; sprite->callback = DestroyAnimSpriteAfterTimer; } static void AnimZapCannonSpark(struct Sprite *sprite) { + CMD_ARGS(x, y, waveAmplitude, duration, waveOffset, wavePeriod, tileOffset); + InitSpritePosToAnimAttacker(sprite, TRUE); - sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[0] = cmd->duration; sprite->data[1] = sprite->x; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); InitAnimLinearTranslation(sprite); - sprite->data[5] = gBattleAnimArgs[2]; - sprite->data[6] = gBattleAnimArgs[5]; - sprite->data[7] = gBattleAnimArgs[4]; - sprite->oam.tileNum += gBattleAnimArgs[6] * 4; + sprite->data[5] = cmd->waveAmplitude; + sprite->data[6] = cmd->wavePeriod; + sprite->data[7] = cmd->waveOffset; + sprite->oam.tileNum += cmd->tileOffset * 4; sprite->callback = AnimZapCannonSpark_Step; sprite->callback(sprite); } @@ -615,39 +626,44 @@ static void AnimThunderboltOrb_Step(struct Sprite *sprite) static void AnimThunderboltOrb(struct Sprite *sprite) { + // When visibilityDuration is set to X, the sprite is visible for X+1 frames, then invisible for X+1 frames + CMD_ARGS(duration, x, y, visibilityDuration); + if (IsContest() || GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + cmd->x = -cmd->x; - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; - sprite->data[3] = gBattleAnimArgs[0]; - sprite->data[4] = gBattleAnimArgs[3]; - sprite->data[5] = gBattleAnimArgs[3]; + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->x; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + cmd->y; + sprite->data[3] = cmd->duration; + sprite->data[4] = cmd->visibilityDuration; + sprite->data[5] = cmd->visibilityDuration; sprite->callback = AnimThunderboltOrb_Step; } static void AnimSparkElectricityFlashing(struct Sprite *sprite) { + CMD_ARGS(x, y, waveAmplitude, duration, waveOffset, wavePeriod, tileOffset, unk7); + u8 battler; - sprite->data[0] = gBattleAnimArgs[3]; - if (gBattleAnimArgs[7] & 0x8000) + sprite->data[0] = cmd->duration; + if (cmd->unk7 & 0x8000) battler = gBattleAnimTarget; else battler = gBattleAnimAttacker; if (IsContest() || GetBattlerSide(battler) == B_SIDE_PLAYER) - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + cmd->x = -cmd->x; - sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; + sprite->x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + cmd->x; + sprite->y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + cmd->y; - sprite->data[4] = gBattleAnimArgs[7] & 0x7FFF; - sprite->data[5] = gBattleAnimArgs[2]; - sprite->data[6] = gBattleAnimArgs[5]; - sprite->data[7] = gBattleAnimArgs[4]; + sprite->data[4] = cmd->unk7 & 0x7FFF; + sprite->data[5] = cmd->waveAmplitude; + sprite->data[6] = cmd->wavePeriod; + sprite->data[7] = cmd->waveOffset; - sprite->oam.tileNum += gBattleAnimArgs[6] * 4; + sprite->oam.tileNum += cmd->tileOffset * 4; sprite->callback = AnimSparkElectricityFlashing_Step; sprite->callback(sprite); } @@ -659,7 +675,7 @@ static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite) sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF; if (sprite->data[7] % sprite->data[4] == 0) - sprite->invisible ^= TRUE; + sprite->invisible ^= 1; if (sprite->data[0]-- <= 0) DestroyAnimSprite(sprite); @@ -668,15 +684,17 @@ static void AnimSparkElectricityFlashing_Step(struct Sprite *sprite) // Electricity arcs around the target. Used for Paralysis and various electric move hits static void AnimElectricity(struct Sprite *sprite) { + CMD_ARGS(x, y, duration, tileOffset); + InitSpritePosToAnimTarget(sprite, FALSE); - sprite->oam.tileNum += gBattleAnimArgs[3] * 4; + sprite->oam.tileNum += cmd->tileOffset * 4; - if (gBattleAnimArgs[3] == 1) + if (cmd->tileOffset == 1) sprite->oam.matrixNum = ST_OAM_HFLIP; - else if (gBattleAnimArgs[3] == 2) + else if (cmd->tileOffset == 2) sprite->oam.matrixNum = ST_OAM_VFLIP; - sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[0] = cmd->duration; sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -684,64 +702,66 @@ static void AnimElectricity(struct Sprite *sprite) // The vertical falling thunder bolt used in Thunder Wave/Shock/Bolt void AnimTask_ElectricBolt(u8 taskId) { - gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0]; - gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1]; - gTasks[taskId].data[2] = gBattleAnimArgs[2]; + CMD_ARGS(x, y, bigBolt); + + gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + cmd->x; + gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + cmd->y; + gTasks[taskId].data[2] = cmd->bigBolt; gTasks[taskId].func = AnimTask_ElectricBolt_Step; } static void AnimTask_ElectricBolt_Step(u8 taskId) { - u16 r8; + u16 tileOffset; u16 r2; - s16 r12; + s16 yOffset; u8 spriteId = 0; u8 r7 = 0; - u8 sp = gTasks[taskId].data[2]; + u8 bigBolt = gTasks[taskId].data[2]; s16 x = gTasks[taskId].data[0]; s16 y = gTasks[taskId].data[1]; if (!gTasks[taskId].data[2]) { - r8 = 0; + tileOffset = 0; r2 = 1; - r12 = 16; + yOffset = 16; } else { - r12 = 16; - r8 = 8; + yOffset = 16; + tileOffset = 8; r2 = 4; } switch (gTasks[taskId].data[10]) { case 0: - r12 *= 1; - spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + r12, 2); + yOffset *= 1; // 16 + spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + yOffset, 2); r7++; break; case 2: - r12 *= 2; - r8 += r2; - spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + r12, 2); + yOffset *= 2; // 32 + tileOffset += r2; // If bigBolt: 8+4=12, else 0+1=1 + spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + yOffset, 2); r7++; break; case 4: - r12 *= 3; - r8 += r2 * 2; - spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + r12, 2); + yOffset *= 3; // 96 + tileOffset += r2 * 2; // If bigBolt: 12+8=20, else 1+2=3 + spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + yOffset, 2); r7++; break; case 6: - r12 *= 4; - r8 += r2 * 3; - spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + r12, 2); + yOffset *= 4; // 384 + tileOffset += r2 * 3; // If bigBolt: 20+12=32, else 3+3=6 + spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + yOffset, 2); r7++; break; case 8: - r12 *= 5; - spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + r12, 2); + yOffset *= 5; // 1920 + spriteId = CreateSprite(&gElectricBoltSegmentSpriteTemplate, x, y + yOffset, 2); r7++; break; case 10: @@ -751,8 +771,8 @@ static void AnimTask_ElectricBolt_Step(u8 taskId) if (r7) { - gSprites[spriteId].oam.tileNum += r8; - gSprites[spriteId].data[0] = sp; + gSprites[spriteId].oam.tileNum += tileOffset; + gSprites[spriteId].data[0] = bigBolt; gSprites[spriteId].callback(&gSprites[spriteId]); } @@ -778,10 +798,12 @@ static void AnimElectricBoltSegment(struct Sprite *sprite) // The horizontal bands of electricity used in Thunder Wave static void AnimThunderWave(struct Sprite *sprite) { + CMD_ARGS(x, y); + u8 spriteId; - sprite->x += gBattleAnimArgs[0]; - sprite->y += gBattleAnimArgs[1]; + sprite->x += cmd->x; + sprite->y += cmd->y; spriteId = CreateSprite(&gThunderWaveSpriteTemplate, sprite->x + 32, sprite->y, sprite->subpriority); gSprites[spriteId].oam.tileNum += 8; gAnimVisualTaskCount++; @@ -804,9 +826,11 @@ static void AnimThunderWave_Step(struct Sprite *sprite) // Animates small electric orbs moving from around the battler inward. For Charge/Shock Wave void AnimTask_ElectricChargingParticles(u8 taskId) { + CMD_ARGS(relativeTo, amount, duration, compaction); + struct Task *task = &gTasks[taskId]; - if (gBattleAnimArgs[0] == ANIM_ATTACKER) + if (cmd->relativeTo == ANIM_ATTACKER) { task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); @@ -817,14 +841,14 @@ void AnimTask_ElectricChargingParticles(u8 taskId) task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } - task->data[6] = gBattleAnimArgs[1]; + task->data[6] = cmd->amount; task->data[7] = 0; task->data[8] = 0; task->data[9] = 0; task->data[10] = 0; - task->data[11] = gBattleAnimArgs[3]; + task->data[11] = cmd->compaction; task->data[12] = 0; - task->data[13] = gBattleAnimArgs[2]; + task->data[13] = cmd->duration; task->func = AnimTask_ElectricChargingParticles_Step; } @@ -894,7 +918,9 @@ static void AnimElectricChargingParticles(struct Sprite *sprite) static void AnimGrowingChargeOrb(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); @@ -912,7 +938,9 @@ static void AnimGrowingChargeOrb(struct Sprite *sprite) // The quick electric burst at the end of Charge / during the Volt Tackle hit static void AnimElectricPuff(struct Sprite *sprite) { - if (gBattleAnimArgs[0] == ANIM_ATTACKER) + CMD_ARGS(relativeTo, x, y); + + if (cmd->relativeTo == ANIM_ATTACKER) { sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); @@ -923,8 +951,8 @@ static void AnimElectricPuff(struct Sprite *sprite) sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } - sprite->x2 = gBattleAnimArgs[1]; - sprite->y2 = gBattleAnimArgs[2]; + sprite->x2 = cmd->x; + sprite->y2 = cmd->y; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); sprite->callback = RunStoredCallbackWhenAnimEnds; } @@ -1020,6 +1048,8 @@ void AnimTask_VoltTackleAttackerReappear(u8 taskId) // The horizontal bolts of electricity for Volt Tackle void AnimTask_VoltTackleBolt(u8 taskId) { + CMD_ARGS(y); + struct Task *task = &gTasks[taskId]; switch(task->data[0]) @@ -1027,7 +1057,7 @@ void AnimTask_VoltTackleBolt(u8 taskId) case 0: task->data[1] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : -1; - switch (gBattleAnimArgs[0]) + switch (cmd->y) { case 0: task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); @@ -1040,7 +1070,7 @@ void AnimTask_VoltTackleBolt(u8 taskId) task->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - (task->data[1] * 32); break; default: - if ((gBattleAnimArgs[0] & 1) != 0) + if ((cmd->y & 1) != 0) { task->data[3] = 256; task->data[4] = -16; @@ -1053,12 +1083,12 @@ void AnimTask_VoltTackleBolt(u8 taskId) if (task->data[1] == 1) { - task->data[5] = 80 - gBattleAnimArgs[0] * 10; + task->data[5] = 80 - cmd->y * 10; } else { u16 temp; - task->data[5] = gBattleAnimArgs[0] * 10 + 40; + task->data[5] = cmd->y * 10 + 40; temp = task->data[3]; task->data[3] = task->data[4]; task->data[4] = temp; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index dff3a71fa1ce..873a9d4c140e 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "battle_anim_internal.h" #include "bg.h" #include "contest.h" #include "data.h" @@ -1545,26 +1546,28 @@ void AnimSpriteOnMonPos(struct Sprite *sprite) // arg 5: lower 8 bits = location on attacking mon, upper 8 bits = location on target mon pick to target void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) { + CMD_ARGS(initialX, initialY, targetX, targetY, duration, location); + bool8 respectMonPicOffsets; u8 coordType; - if (!(gBattleAnimArgs[5] & 0xff00)) + if (!(cmd->location & 0xff00)) respectMonPicOffsets = TRUE; else respectMonPicOffsets = FALSE; - if (!(gBattleAnimArgs[5] & 0xff)) + if (!(cmd->location & 0xff)) coordType = BATTLER_COORD_Y_PIC_OFFSET; else coordType = BATTLER_COORD_Y; InitSpritePosToAnimAttacker(sprite, respectMonPicOffsets); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - 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, coordType) + gBattleAnimArgs[3]; + sprite->data[0] = cmd->duration; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + cmd->targetX; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + cmd->targetY; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); }