From a1fcfa2f26204531f063e9f147d726c330c2553b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 17 Aug 2022 13:30:22 -0400 Subject: [PATCH] Sync battle anim - normal --- data/battle_anim_scripts.s | 86 +++--- include/battle_anim.h | 2 +- src/battle_anim_normal.c | 453 +++++++++++++++++++------------- src/battle_anim_utility_funcs.c | 6 +- 4 files changed, 314 insertions(+), 233 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 8cb6c3502..f456f5cce 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1299,7 +1299,7 @@ Move_REVERSAL:: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, RGB_WHITE, 8, 0, 0 waitforvisualfinish delay 30 - createvisualtask AnimTask_CurseBlendEffect, 2, 31, 3, 2, 0, 10, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 31, 3, 2, 0, 10, RGB_WHITE delay 10 playsewithpan SE_M_REVERSAL, 192 createsprite gReversalOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 0 @@ -1873,7 +1873,7 @@ Move_SAFEGUARD:: createsprite gGuardRingSpriteTemplate, ANIM_ATTACKER, 2, waitforvisualfinish playsewithpan SE_SHINY, 192 - createvisualtask AnimTask_CurseBlendEffect, 2, 10, 0, 2, 0, 10, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 10, 0, 2, 0, 10, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -1965,7 +1965,7 @@ Move_PAY_DAY:: Move_OUTRAGE:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, 192, 8, 3 - createvisualtask AnimTask_CurseBlendEffect, 2, 7, 2, 5, 3, 8, 430 + createvisualtask AnimTask_BlendColorCycle, 2, 7, 2, 5, 3, 8, 430 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 12, 6, 5, 4 delay 0 createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, 0, 3 @@ -2012,25 +2012,25 @@ Move_SPARK:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 - createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 5, 5, 23551 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, 23551 playsewithpan SE_M_THUNDERBOLT2, 192 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, 0, 1, 0 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, 0, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, 0, 1, 1 delay 0 - createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 0, 0, 23551 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, 23551 delay 10 - createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 5, 5, 23551 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, 23551 playsewithpan SE_M_THUNDERBOLT2, 192 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, 0, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, 0, 1, 1 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, 0, 1, 1 delay 0 - createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 0, 0, 23551 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, 23551 delay 20 - createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 7, 7, 23551 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 7, 7, 23551 playsewithpan SE_M_THUNDERBOLT2, 192 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 @@ -2042,14 +2042,14 @@ Move_SPARK:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 delay 4 waitforvisualfinish - createvisualtask AnimTask_CurseBlendEffect, 2, 3, -31, 1, 0, 0, 23551 + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, 23551 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 4 playsewithpan SE_M_HYPER_BEAM, 63 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 2 createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_CurseBlendEffect, 2, 4, -31, 2, 0, 6, 23551 + createvisualtask AnimTask_BlendColorCycle, 2, 4, -31, 2, 0, 6, 23551 call ElectricityEffect waitforvisualfinish end @@ -2080,7 +2080,7 @@ Move_ATTRACT:: createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 112, 256, 90 createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 200, 272, 90 delay 75 - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 4, 4, 0, 10, 28479 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 4, 4, 0, 10, 28479 end Move_GROWTH:: @@ -2091,7 +2091,7 @@ Move_GROWTH:: end GrowthEffect:: - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE playsewithpan SE_M_TAKE_DOWN, 192 createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, 0, 0 return @@ -3193,7 +3193,7 @@ Move_SPITE:: playsewithpan SE_M_PSYBEAM, 192 waitbgfadein monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 6, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 6, 0, 8, RGB_WHITE createvisualtask AnimTask_SpiteTargetShadow, 2 loopsewithpan SE_M_PSYBEAM, 63, 20, 3 waitforvisualfinish @@ -3280,7 +3280,7 @@ Move_ENDURE:: playsewithpan SE_M_DRAGON_RAGE, 192 call EndureEffect delay 8 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 11, 31 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, 31 createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1 call EndureEffect delay 8 @@ -4722,7 +4722,7 @@ Move_MIND_READER:: createsprite gWhiteHaloSpriteTemplate, ANIM_ATTACKER, 5, delay 40 playsewithpan SE_M_LEER, 63 - createvisualtask AnimTask_CurseBlendEffect, 2, 1, 1, 2, 0, 10, 0 + createvisualtask AnimTask_BlendColorCycle, 2, 1, 1, 2, 0, 10, 0 call MindReaderEyeSpikeEffect waitforvisualfinish clearmonbg 4 @@ -4805,7 +4805,7 @@ Move_CONFUSION:: call SetPsychicBackground setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 10, 1 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE waitforvisualfinish playsewithpan SE_M_SUPERSONIC, 63 createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 15, 1 @@ -4822,7 +4822,7 @@ Move_PSYCHIC:: call SetPsychicBackground setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 10, 1 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 8, 767 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, 767 waitforvisualfinish loopsewithpan SE_M_SUPERSONIC, 63, 10, 3 createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 15, 1 @@ -4848,7 +4848,7 @@ FutureSight:: call SetPsychicBackground setalpha 8, 8 playsewithpan SE_M_SUPERSONIC, 192 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, 0, 1 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -5244,7 +5244,7 @@ Move_SMOG:: call SmogCloud delay 120 loopsewithpan SE_M_TOXIC, 63, 18, 2 - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 2, 2, 0, 12, 26650 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, 26650 delay 10 createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 15, 1 waitforvisualfinish @@ -5552,7 +5552,7 @@ SolarBeamEnd:: SolarBeamSetUp:: monbg ANIM_ATK_PARTNER setalpha 12, 8 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 1, 4, 0, 11, 12287 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 1, 4, 0, 11, 12287 playsewithpan SE_M_MEGA_KICK, 192 call SolarBeamAbsorbEffect waitforvisualfinish @@ -6032,7 +6032,7 @@ Move_LEECH_LIFE:: Move_SYNTHESIS:: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_SPARKLE_2 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 16, 19451 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 16, 19451 playsewithpan SE_M_MEGA_KICK, 192 call GrantingStarsEffect waitforvisualfinish @@ -6072,7 +6072,7 @@ Move_SLUDGE:: createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 5, 1 - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 1, 2, 0, 12, 31774 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, 31774 call PoisonBubblesEffect waitforvisualfinish end @@ -6090,7 +6090,7 @@ Move_SLUDGE_BOMB:: call SludgeBombProjectile call SludgeBombProjectile createvisualtask AnimTask_ShakeMon2, 5, 1, 3, 0, 15, 1 - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 1, 2, 0, 12, 31774 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, 31774 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 @@ -6135,7 +6135,7 @@ Move_ACID:: delay 15 createvisualtask AnimTask_ShakeMon2, 5, 1, 2, 0, 10, 1 createvisualtask AnimTask_ShakeMon2, 5, 3, 2, 0, 10, 1 - createvisualtask AnimTask_CurseBlendEffect, 2, 20, 2, 2, 0, 12, 31774 + createvisualtask AnimTask_BlendColorCycle, 2, 20, 2, 2, 0, 12, 31774 createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -22, 0, 15, 55 playsewithpan SE_M_BUBBLE, 63 delay 10 @@ -7053,7 +7053,7 @@ Move_MIST:: call MistCloud call MistCloud delay 32 - createvisualtask AnimTask_CurseBlendEffect, 2, 10, 8, 2, 0, 14, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 10, 8, 2, 0, 14, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -7224,7 +7224,7 @@ Move_POISON_GAS:: createsprite gPoisonGasCloudSpriteTemplate, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0 delay 40 loopsewithpan SE_M_MIST, 63, 28, 6 - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 6, 2, 0, 12, 26650 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 6, 2, 0, 12, 26650 waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER @@ -7259,7 +7259,7 @@ Move_PSYBEAM:: call PsybeamRings call PsybeamRings createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 4, 1 - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 2, 2, 0, 12, 32351 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, 32351 call PsybeamRings call PsybeamRings call PsybeamRings @@ -7285,7 +7285,7 @@ Move_HYPNOSIS:: call HypnosisRings call HypnosisRings call HypnosisRings - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 2, 2, 0, 12, 32351 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, 32351 waitforvisualfinish delay 1 call UnsetPsychicBg @@ -7306,7 +7306,7 @@ Move_PSYWAVE:: createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TELEPORT, -64, 63, 2, 9, 0, 10 call PsywaveRings call PsywaveRings - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 1, 4, 0, 12, 32351 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 4, 0, 12, 32351 call PsywaveRings call PsywaveRings call PsywaveRings @@ -7443,7 +7443,7 @@ Move_NIGHT_SHADE:: createvisualtask AnimTask_NightShadeClone, 5, 85 delay 70 createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 12, 1 - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 0, 2, 0, 13, 0 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 0, 2, 0, 13, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -7505,7 +7505,7 @@ Move_FOCUS_ENERGY:: playsewithpan SE_M_DRAGON_RAGE, 192 call EndureEffect delay 8 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 11, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1 call EndureEffect delay 8 @@ -7519,7 +7519,7 @@ Move_BIDE:: BattleAnimScript_Bide_Setup:: loopsewithpan SE_M_TAKE_DOWN, 192, 9, 2 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 11, 31 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, 31 createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1 waitforvisualfinish end @@ -7697,7 +7697,7 @@ Move_RECOVER:: monbg ANIM_ATK_PARTNER setalpha 12, 8 loopsewithpan SE_M_MEGA_KICK, 192, 13, 3 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 6, 0, 11, 12287 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, 12287 call RecoverAbsorbEffect call RecoverAbsorbEffect call RecoverAbsorbEffect @@ -7738,7 +7738,7 @@ Move_MIMIC:: setarg 7, 65535 waitforvisualfinish playsewithpan SE_M_TAKE_DOWN, 192 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 2, 0, 11, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 11, RGB_WHITE waitforvisualfinish clearmonbg_23 3 blendoff @@ -7807,7 +7807,7 @@ CurseStats:: CurseStats1:: playsewithpan SE_M_DRAGON_RAGE, 192 createvisualtask AnimTask_SetUpCurseBackground, 5, - createvisualtask AnimTask_CurseBlendEffect, 5, 2, 4, 2, 0, 10, 31 + createvisualtask AnimTask_BlendColorCycle, 5, 2, 4, 2, 0, 10, 31 return Move_SOFT_BOILED:: @@ -8055,7 +8055,7 @@ PresentHeal:: Move_BATON_PASS:: loadspritegfx ANIM_TAG_POKEBALL playsewithpan SE_M_BATON_PASS, 192 - createvisualtask AnimTask_CurseBlendEffect, 2, 31, 1, 2, 0, 11, 31455 + createvisualtask AnimTask_BlendColorCycle, 2, 31, 1, 2, 0, 11, 31455 createsprite gBatonPassPokeballSpriteTemplate, ANIM_ATTACKER, 2, end @@ -8303,7 +8303,7 @@ Move_WISH:: Move_STOCKPILE:: loadspritegfx ANIM_TAG_GRAY_ORB playsewithpan SE_M_MEGA_KICK, 192 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 8, 1, 0, 12, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 8, 1, 0, 12, RGB_WHITE createvisualtask AnimTask_StockpileDeformMon, 5, call StockpileAbsorb call StockpileAbsorb @@ -8469,7 +8469,7 @@ Move_SWEET_SCENT:: call SweetScentEffect createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 55, 0 setpan 63 - createvisualtask AnimTask_CurseBlendEffect, 2, 20, 1, 5, 5, 13, 22207 + createvisualtask AnimTask_BlendColorCycle, 2, 20, 1, 5, 5, 13, 22207 call SweetScentEffect waitforvisualfinish end @@ -8898,7 +8898,7 @@ Move_REVENGE:: playsewithpan SE_M_TAKE_DOWN, 192 createsprite gRevengeSmallScratchSpriteTemplate, ANIM_ATTACKER, 2, 10, -10 waitforvisualfinish - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 0, 4, 2, 8, 31 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 4, 2, 8, 31 waitforvisualfinish unloadspritegfx ANIM_TAG_PURPLE_SCRATCH loadspritegfx ANIM_TAG_PURPLE_SWIPE @@ -8928,7 +8928,7 @@ Move_POISON_FANG:: delay 10 createvisualtask AnimTask_ShakeMon, 3, 1, 3, 0, 10, 1 waitforvisualfinish - createvisualtask AnimTask_CurseBlendEffect, 2, 4, 0, 4, 0, 12, 26650 + createvisualtask AnimTask_BlendColorCycle, 2, 4, 0, 4, 0, 12, 26650 call PoisonBubblesEffect waitforvisualfinish end @@ -9703,7 +9703,7 @@ Move_PSYCHO_BOOST:: createvisualtask AnimTask_FadeScreenToWhite, 5, waitbgfadein delay 6 - createvisualtask AnimTask_CurseBlendEffect, 2, 1, 2, 8, 0, 10, 0 + createvisualtask AnimTask_BlendColorCycle, 2, 1, 2, 8, 0, 10, 0 delay 0 monbgprio_28 0 setalpha 8, 8 @@ -10438,7 +10438,7 @@ UnsetSolarBeamBg:: Status_Poison:: loopsewithpan SE_M_TOXIC, 63, 13, 6 createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 18, 2 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 12, 31774 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 12, 31774 end Status_Confusion:: @@ -10858,7 +10858,7 @@ General_FocusPunchSetUp:: playsewithpan SE_M_DRAGON_RAGE, 192 call EndureEffect delay 8 - createvisualtask AnimTask_CurseBlendEffect, 2, 2, 2, 2, 0, 11, 31 + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, 31 createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1 call EndureEffect delay 8 diff --git a/include/battle_anim.h b/include/battle_anim.h index cd5785871..ffff805d6 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -478,7 +478,7 @@ void AnimTask_ShakeTargetBasedOnMovePowerOrDmg(u8 taskId); extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate; extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate; extern const struct SpriteTemplate gWaterHitSplatSpriteTemplate; -u32 UnpackSelectedBattleAnimPalettes(s16 selector); +u32 UnpackSelectedBattlePalettes(s16 selector); void AnimTask_CurseBlendEffect(u8 taskId); void AnimTask_BlendColorCycleExclude(u8 taskId); void AnimTask_BlendColorCycleByTag(u8 taskId); diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c index 09efc5354..a76ad1fa2 100644 --- a/src/battle_anim_normal.c +++ b/src/battle_anim_normal.c @@ -8,7 +8,7 @@ static void AnimConfusionDuck(struct Sprite *sprite); static void AnimSimplePaletteBlend(struct Sprite *sprite); static void AnimComplexPaletteBlend(struct Sprite *sprite); -static void sub_80B9B8C(struct Sprite *sprite); +static void AnimCirclingSparkle(struct Sprite *sprite); static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite); static void AnimHitSplatBasic(struct Sprite *sprite); static void AnimHitSplatHandleInvert(struct Sprite *sprite); @@ -17,22 +17,22 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite); static void AnimCrossImpact(struct Sprite *sprite); static void AnimFlashingHitSplat(struct Sprite *sprite); static void AnimHitSplatPersistent(struct Sprite *sprite); -static void AnimConfusionDuckStep(struct Sprite *sprite); -static void AnimSimplePaletteBlendStep(struct Sprite *sprite); -static void sub_80B9AD0(struct Sprite *sprite); -static void sub_80B9B5C(struct Sprite *sprite); -static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount); -static void sub_80B9C7C(u8 taskId); -static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount); -static void sub_80B9DF0(u8 taskId); -static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount); -static void sub_80B9F04(u8 taskId); -static void sub_80B9FD8(u8 taskId); -static void sub_80BA090(u8 taskId); -static void sub_80BA3CC(void); -static void sub_80BA320(struct Sprite *sprite); -static void sub_80BA4D0(u8 taskId); -static void sub_80BA7BC(struct Sprite *sprite); +static void AnimConfusionDuck_Step(struct Sprite *sprite); +static void AnimSimplePaletteBlend_Step(struct Sprite *sprite); +static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite); +static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite); +static void BlendColorCycle(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount); +static void AnimTask_BlendColorCycleLoop(u8 taskId); +static void BlendColorCycleExclude(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount); +static void AnimTask_BlendColorCycleExcludeLoop(u8 taskId); +static void BlendColorCycleByTag(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount); +static void AnimTask_BlendColorCycleByTagLoop(u8 taskId); +static void AnimTask_FlashAnimTagWithColor_Step1(u8 taskId); +static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId); +static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void); +static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite); +static void AnimTask_ShakeBattleTerrain_Step(u8 taskId); +static void AnimFlashingHitSplat_Step(struct Sprite *sprite); static const union AnimCmd sAnim_ConfusionDuck_0[] = @@ -92,7 +92,7 @@ const struct SpriteTemplate gComplexPaletteBlendSpriteTemplate = .callback = AnimComplexPaletteBlend, }; -static const union AnimCmd gUnknown_83E7B54[] = +static const union AnimCmd sAnim_CirclingSparkle[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(16, 3), @@ -102,20 +102,21 @@ static const union AnimCmd gUnknown_83E7B54[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const gUnknown_83E7B6C[] = +static const union AnimCmd *const sAnims_CirclingSparkle[] = { - gUnknown_83E7B54, + sAnim_CirclingSparkle, }; -const struct SpriteTemplate gUnknown_83E7B70 = +// Unused +static const struct SpriteTemplate sCirclingSparkleSpriteTemplate = { .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_SPARKLE_4, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = gUnknown_83E7B6C, + .anims = sAnims_CirclingSparkle, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80B9B8C, + .callback = AnimCirclingSparkle, }; const struct SpriteTemplate gShakeMonOrTerrainSpriteTemplate = @@ -275,11 +276,11 @@ static void AnimConfusionDuck(struct Sprite *sprite) StartSpriteAnim(sprite, 1); } sprite->data[3] = gBattleAnimArgs[4]; - sprite->callback = AnimConfusionDuckStep; + sprite->callback = AnimConfusionDuck_Step; sprite->callback(sprite); } -static void AnimConfusionDuckStep(struct Sprite *sprite) +static void AnimConfusionDuck_Step(struct Sprite *sprite) { sprite->x2 = Cos(sprite->data[0], 30); sprite->y2 = Sin(sprite->data[0], 10); @@ -300,36 +301,36 @@ static void AnimConfusionDuckStep(struct Sprite *sprite) // arg 4: blend color static void AnimSimplePaletteBlend(struct Sprite *sprite) { - u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]); + u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]); sprite->invisible = TRUE; - sprite->callback = AnimSimplePaletteBlendStep; + sprite->callback = AnimSimplePaletteBlend_Step; } // Unpacks a bitfield and returns a bitmask of its selected palettes. // Bits 0-6 of the selector parameter result in the following palettes being selected: -// 0: battle background palettes (BG palettes 1, 2, and 3) -// 1: gBattleAnimAttacker OBJ palette -// 2: gBattleAnimTarget OBJ palette -// 3: gBattleAnimAttacker partner OBJ palette -// 4: gBattleAnimTarget partner OBJ palette -// 5: BG palette 4 -// 6: BG palette 5 -u32 UnpackSelectedBattleAnimPalettes(s16 selector) +// 0: F_PAL_BG, battle background palettes (BG palettes 1, 2, and 3) +// 1: F_PAL_ATTACKER, gBattleAnimAttacker OBJ palette +// 2: F_PAL_TARGET, gBattleAnimTarget OBJ palette +// 3: F_PAL_ATK_PARTNER, gBattleAnimAttacker partner OBJ palette +// 4: F_PAL_DEF_PARTNER, gBattleAnimTarget partner OBJ palette +// 5: F_PAL_ANIM_1, BG palette 8 +// 6: F_PAL_ANIM_2, BG palette 9 +u32 UnpackSelectedBattlePalettes(s16 selector) { u8 battleBackground = selector & 1; u8 attacker = (selector >> 1) & 1; u8 target = (selector >> 2) & 1; u8 attackerPartner = (selector >> 3) & 1; u8 targetPartner = (selector >> 4) & 1; - u8 arg5 = (selector >> 5) & 1; - u8 arg6 = (selector >> 6) & 1; + u8 anim1 = (selector >> 5) & 1; + u8 anim2 = (selector >> 6) & 1; - return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, arg5, arg6); + return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, anim1, anim2); } -static void AnimSimplePaletteBlendStep(struct Sprite *sprite) +static void AnimSimplePaletteBlend_Step(struct Sprite *sprite) { if (!gPaletteFade.active) DestroyAnimSprite(sprite); @@ -347,13 +348,13 @@ static void AnimComplexPaletteBlend(struct Sprite *sprite) sprite->data[5] = gBattleAnimArgs[5]; sprite->data[6] = gBattleAnimArgs[6]; sprite->data[7] = gBattleAnimArgs[0]; - selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]); sprite->invisible = TRUE; - sprite->callback = sub_80B9AD0; + sprite->callback = AnimComplexPaletteBlend_Step1; } -static void sub_80B9AD0(struct Sprite *sprite) +static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite) { u32 selectedPalettes; @@ -366,10 +367,10 @@ static void sub_80B9AD0(struct Sprite *sprite) return; if (sprite->data[2] == 0) { - sprite->callback = sub_80B9B5C; + sprite->callback = AnimComplexPaletteBlend_Step2; return; } - selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); if (sprite->data[1] & 0x100) BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]); else @@ -379,19 +380,19 @@ static void sub_80B9AD0(struct Sprite *sprite) --sprite->data[2]; } -static void sub_80B9B5C(struct Sprite *sprite) +static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite) { u32 selectedPalettes; if (!gPaletteFade.active) { - selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); BlendPalettes(selectedPalettes, 0, 0); DestroyAnimSprite(sprite); } } -static void sub_80B9B8C(struct Sprite *sprite) +static void AnimCirclingSparkle(struct Sprite *sprite) { sprite->x += gBattleAnimArgs[0]; sprite->y += gBattleAnimArgs[1]; @@ -406,53 +407,71 @@ static void sub_80B9B8C(struct Sprite *sprite) sprite->callback(sprite); } -void AnimTask_CurseBlendEffect(u8 taskId) +// Task data for AnimTask_BlendColorCycle, AnimTask_BlendColorCycleExclude, and AnimTask_BlendColorCycleByTag +#define tPalSelector data[0] // AnimTask_BlendColorCycle +#define tPalTag data[0] // AnimTask_BlendColorCycleByTag +#define tDelay data[1] +#define tNumBlends data[2] +#define tInitialBlendY data[3] +#define tTargetBlendY data[4] +#define tBlendColor data[5] +#define tRestoreBlend data[8] +#define tPalSelectorHi data[9] +#define tPalSelectorLo data[10] + +// Blends mon/screen to designated color or back alternately tNumBlends times +// 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].data[0] = gBattleAnimArgs[0]; - 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[8] = 0; - sub_80B9C2C(taskId, 0, gTasks[taskId].data[4]); - gTasks[taskId].func = sub_80B9C7C; + 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]; + gTasks[taskId].tRestoreBlend = FALSE; + BlendColorCycle(taskId, 0, gTasks[taskId].tTargetBlendY); + gTasks[taskId].func = AnimTask_BlendColorCycleLoop; } -static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount) +static void BlendColorCycle(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount) { - u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gTasks[taskId].data[0]); - - BeginNormalPaletteFade(selectedPalettes, - gTasks[taskId].data[1], - initialBlendAmount, - targetBlendAmount, - gTasks[taskId].data[5]); - --gTasks[taskId].data[2]; - gTasks[taskId].data[8] ^= 1; + u32 selectedPalettes = UnpackSelectedBattlePalettes(gTasks[taskId].tPalSelector); + BeginNormalPaletteFade( + selectedPalettes, + gTasks[taskId].tDelay, + startBlendAmount, + targetBlendAmount, + gTasks[taskId].tBlendColor); + + gTasks[taskId].tNumBlends--; + gTasks[taskId].tRestoreBlend ^= 1; } -static void sub_80B9C7C(u8 taskId) +static void AnimTask_BlendColorCycleLoop(u8 taskId) { - u8 initialBlendAmount, targetBlendAmount; - + u8 startBlendAmount, targetBlendAmount; if (!gPaletteFade.active) { - if (gTasks[taskId].data[2] > 0) + if (gTasks[taskId].tNumBlends > 0) { - if (gTasks[taskId].data[8] == 0) + if (!gTasks[taskId].tRestoreBlend) { - initialBlendAmount = gTasks[taskId].data[3]; - targetBlendAmount = gTasks[taskId].data[4]; + // Blend to designated color + startBlendAmount = gTasks[taskId].tInitialBlendY; + targetBlendAmount = gTasks[taskId].tTargetBlendY; } else { - initialBlendAmount = gTasks[taskId].data[4]; - targetBlendAmount = gTasks[taskId].data[3]; + // Blend back to original color + startBlendAmount = gTasks[taskId].tTargetBlendY; + targetBlendAmount = gTasks[taskId].tInitialBlendY; } - if (gTasks[taskId].data[2] == 1) + + if (gTasks[taskId].tNumBlends == 1) targetBlendAmount = 0; - sub_80B9C2C(taskId, initialBlendAmount, targetBlendAmount); + + BlendColorCycle(taskId, startBlendAmount, targetBlendAmount); } else { @@ -461,64 +480,73 @@ static void sub_80B9C7C(u8 taskId) } } +// See AnimTask_BlendColorCycle. Same, but excludes Attacker and Target void AnimTask_BlendColorCycleExclude(u8 taskId) { - s32 battler; + int battler; u32 selectedPalettes = 0; gTasks[taskId].data[0] = gBattleAnimArgs[0]; - 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[8] = 0; - for (battler = 0; battler < gBattlersCount; ++battler) + 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].tRestoreBlend = 0; + + for (battler = 0; battler < gBattlersCount; battler++) + { if (battler != gBattleAnimAttacker && battler != gBattleAnimTarget) selectedPalettes |= 1 << (battler + 16); + } + if (gBattleAnimArgs[0] == 1) selectedPalettes |= 0xE; - gTasks[taskId].data[9] = selectedPalettes >> 16; - gTasks[taskId].data[10] = selectedPalettes & 0xFF; - sub_80B9DA0(taskId, 0, gTasks[taskId].data[4]); - gTasks[taskId].func = sub_80B9DF0; + + gTasks[taskId].tPalSelectorHi = selectedPalettes >> 16; + gTasks[taskId].tPalSelectorLo = selectedPalettes & 0xFF; + BlendColorCycleExclude(taskId, 0, gTasks[taskId].tTargetBlendY); + gTasks[taskId].func = AnimTask_BlendColorCycleExcludeLoop; } -static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount) +static void BlendColorCycleExclude(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount) { - u32 selectedPalettes = ((u16)gTasks[taskId].data[9] << 16) | (u16)gTasks[taskId].data[10]; - - BeginNormalPaletteFade(selectedPalettes, - gTasks[taskId].data[1], - initialBlendAmount, - targetBlendAmount, - gTasks[taskId].data[5]); - --gTasks[taskId].data[2]; - gTasks[taskId].data[8] ^= 1; + u32 selectedPalettes = ((u16)gTasks[taskId].tPalSelectorHi << 16) | (u16)gTasks[taskId].tPalSelectorLo; + BeginNormalPaletteFade( + selectedPalettes, + gTasks[taskId].tDelay, + startBlendAmount, + targetBlendAmount, + gTasks[taskId].tBlendColor); + + gTasks[taskId].tNumBlends--; + gTasks[taskId].tRestoreBlend ^= 1; } -static void sub_80B9DF0(u8 taskId) +static void AnimTask_BlendColorCycleExcludeLoop(u8 taskId) { - u8 initialBlendAmount, targetBlendAmount; - + u8 startBlendAmount, targetBlendAmount; if (!gPaletteFade.active) { - if (gTasks[taskId].data[2] > 0) + if (gTasks[taskId].tNumBlends > 0) { - if (gTasks[taskId].data[8] == 0) + if (!gTasks[taskId].tRestoreBlend) { - initialBlendAmount = gTasks[taskId].data[3]; - targetBlendAmount = gTasks[taskId].data[4]; + // Blend to designated color + startBlendAmount = gTasks[taskId].tInitialBlendY; + targetBlendAmount = gTasks[taskId].tTargetBlendY; } else { - initialBlendAmount = gTasks[taskId].data[4]; - targetBlendAmount = gTasks[taskId].data[3]; + // Blend back to original color + startBlendAmount = gTasks[taskId].tTargetBlendY; + targetBlendAmount = gTasks[taskId].tInitialBlendY; } - if (gTasks[taskId].data[2] == 1) + if (gTasks[taskId].tNumBlends == 1) targetBlendAmount = 0; - sub_80B9DA0(taskId, initialBlendAmount, targetBlendAmount); + + BlendColorCycleExclude(taskId, startBlendAmount, targetBlendAmount); } else { @@ -527,56 +555,59 @@ static void sub_80B9DF0(u8 taskId) } } +// See AnimTask_BlendColorCycle. Same, but selects palette by ANIM_TAG_* void AnimTask_BlendColorCycleByTag(u8 taskId) { - u8 paletteIndex; + 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]; + gTasks[taskId].tRestoreBlend = FALSE; - gTasks[taskId].data[0] = gBattleAnimArgs[0]; - 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[8] = 0; - sub_80B9EA8(taskId, 0, gTasks[taskId].data[4]); - gTasks[taskId].func = sub_80B9F04; + BlendColorCycleByTag(taskId, 0, gTasks[taskId].tTargetBlendY); + gTasks[taskId].func = AnimTask_BlendColorCycleByTagLoop; } -static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount) +static void BlendColorCycleByTag(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount) { - u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].data[0]); - - BeginNormalPaletteFade(1 << (paletteIndex + 16), - gTasks[taskId].data[1], - initialBlendAmount, - targetBlendAmount, - gTasks[taskId].data[5]); - --gTasks[taskId].data[2]; - gTasks[taskId].data[8] ^= 1; + u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].tPalTag); + BeginNormalPaletteFade( + 1 << (paletteIndex + 16), + gTasks[taskId].tDelay, + startBlendAmount, + targetBlendAmount, + gTasks[taskId].tBlendColor); + + gTasks[taskId].tNumBlends--; + gTasks[taskId].tRestoreBlend ^= 1; } -static void sub_80B9F04(u8 taskId) +static void AnimTask_BlendColorCycleByTagLoop(u8 taskId) { - u8 initialBlendAmount, targetBlendAmount; - + u8 startBlendAmount, targetBlendAmount; if (!gPaletteFade.active) { - if (gTasks[taskId].data[2] > 0) + if (gTasks[taskId].tNumBlends > 0) { - if (gTasks[taskId].data[8] == 0) + if (!gTasks[taskId].tRestoreBlend) { - initialBlendAmount = gTasks[taskId].data[3]; - targetBlendAmount = gTasks[taskId].data[4]; + // Blend to designated color + startBlendAmount = gTasks[taskId].tInitialBlendY; + targetBlendAmount = gTasks[taskId].tTargetBlendY; } else { - initialBlendAmount = gTasks[taskId].data[4]; - targetBlendAmount = gTasks[taskId].data[3]; + // Blend back to original color + startBlendAmount = gTasks[taskId].tTargetBlendY; + targetBlendAmount = gTasks[taskId].tInitialBlendY; } - if (gTasks[taskId].data[2] == 1) + if (gTasks[taskId].tNumBlends == 1) targetBlendAmount = 0; - sub_80B9EA8(taskId, initialBlendAmount, targetBlendAmount); + + BlendColorCycleByTag(taskId, startBlendAmount, targetBlendAmount); } else { @@ -585,6 +616,18 @@ static void sub_80B9F04(u8 taskId) } } +#undef tPalSelector +#undef tPalTag +#undef tDelay +#undef tNumBlends +#undef tInitialBlendY +#undef tTargetBlendY +#undef tBlendColor +#undef tRestoreBlend +#undef tPalSelectorHi +#undef tPalSelectorLo + +// Flashes the specified anim tag with given color. Used e.g. to flash the particles red in Hyper Beam void AnimTask_FlashAnimTagWithColor(u8 taskId) { u8 paletteIndex; @@ -603,10 +646,10 @@ void AnimTask_FlashAnimTagWithColor(u8 taskId) gBattleAnimArgs[4], gBattleAnimArgs[4], gBattleAnimArgs[3]); - gTasks[taskId].func = sub_80B9FD8; + gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step1; } -static void sub_80B9FD8(u8 taskId) +static void AnimTask_FlashAnimTagWithColor_Step1(u8 taskId) { u32 selectedPalettes; @@ -619,7 +662,7 @@ static void sub_80B9FD8(u8 taskId) return; if (gTasks[taskId].data[2] == 0) { - gTasks[taskId].func = sub_80BA090; + gTasks[taskId].func = AnimTask_FlashAnimTagWithColor_Step2; return; } selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16); @@ -640,7 +683,7 @@ static void sub_80B9FD8(u8 taskId) --gTasks[taskId].data[2]; } -static void sub_80BA090(u8 taskId) +static void AnimTask_FlashAnimTagWithColor_Step2(u8 taskId) { u32 selectedPalettes; @@ -659,7 +702,7 @@ void AnimTask_InvertScreenColor(u8 taskId) u8 targetBattler = gBattleAnimTarget; if (gBattleAnimArgs[0] & 0x100) - selectedPalettes = GetBattlePalettesMask(1, 0, 0, 0, 0, 0, 0); + selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); if (gBattleAnimArgs[1] & 0x100) selectedPalettes |= (0x10000 << attackerBattler); if (gBattleAnimArgs[2] & 0x100) @@ -668,8 +711,16 @@ void AnimTask_InvertScreenColor(u8 taskId) DestroyAnimVisualTask(taskId); } -// not used -static void sub_80BA16C(u8 taskId) +// Unused +#define tTimer data[0] +#define tLength data[1] +#define tFlagsScenery data[2] +#define tFlagsAttacker data[3] +#define tFlagsTarget data[4] +#define tColorR data[5] +#define tColorG data[6] +#define tColorB data[7] +static void AnimTask_TintPalettes(u8 taskId) { u8 attackerBattler; u8 targetBattler; @@ -708,6 +759,15 @@ static void sub_80BA16C(u8 taskId) } } +#undef tTimer +#undef tLength +#undef tFlagsScenery +#undef tFlagsAttacker +#undef tFlagsTarget +#undef tColorR +#undef tColorG +#undef tColorB + static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite) { u16 var0; @@ -737,11 +797,11 @@ static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite) sprite->data[5] = gBattleAnimArgs[3]; var0 = sprite->data[5] - 2; if (var0 < 2) - sub_80BA3CC(); - sprite->callback = sub_80BA320; + AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(); + sprite->callback = AnimShakeMonOrBattleTerrain_Step; } -static void sub_80BA320(struct Sprite *sprite) +static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite) { u8 i; u16 var0; @@ -766,58 +826,70 @@ static void sub_80BA320(struct Sprite *sprite) var0 = sprite->data[5] - 2; if (var0 < 2) for (i = 0; i < gBattlersCount; ++i) - gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = 0; + gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = FALSE; DestroyAnimSprite(sprite); } } -static void sub_80BA3CC(void) +static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void) { - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 0; - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 0; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = FALSE; + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = FALSE; if (gBattleAnimArgs[4] == 2) { - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1; - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE; + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE; } else { if (gBattleAnimArgs[4] == 0) - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = TRUE; else - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1; + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = TRUE; } } +// Task data for AnimTask_ShakeBattleTerrain +#define tXOffset data[0] +#define tYOffset data[1] +#define tNumShakes data[2] +#define tTimer data[3] +#define tShakeDelay data[8] + +// Can shake battle terrain 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_ShakeBattleTerrain(u8 taskId) { - gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[2] = gBattleAnimArgs[2]; - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - gTasks[taskId].data[8] = gBattleAnimArgs[3]; + 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]; - gTasks[taskId].func = sub_80BA4D0; + gTasks[taskId].func = AnimTask_ShakeBattleTerrain_Step; gTasks[taskId].func(taskId); } -static void sub_80BA4D0(u8 taskId) +static void AnimTask_ShakeBattleTerrain_Step(u8 taskId) { - if (gTasks[taskId].data[3] == 0) + if (gTasks[taskId].tTimer == 0) { - if (gBattle_BG3_X == gTasks[taskId].data[0]) - gBattle_BG3_X = -gTasks[taskId].data[0]; + if (gBattle_BG3_X == gTasks[taskId].tXOffset) + gBattle_BG3_X = -gTasks[taskId].tXOffset; else - gBattle_BG3_X = gTasks[taskId].data[0]; + gBattle_BG3_X = gTasks[taskId].tXOffset; - if (gBattle_BG3_Y == -gTasks[taskId].data[1]) + if (gBattle_BG3_Y == -gTasks[taskId].tYOffset) gBattle_BG3_Y = 0; else - gBattle_BG3_Y = -gTasks[taskId].data[1]; + gBattle_BG3_Y = -gTasks[taskId].tYOffset; - gTasks[taskId].data[3] = gTasks[taskId].data[8]; - if (--gTasks[taskId].data[2] == 0) + gTasks[taskId].tTimer = gTasks[taskId].tShakeDelay; + if (--gTasks[taskId].tNumShakes == 0) { gBattle_BG3_X = 0; gBattle_BG3_Y = 0; @@ -826,26 +898,33 @@ static void sub_80BA4D0(u8 taskId) } else { - --gTasks[taskId].data[3]; + gTasks[taskId].tTimer--; } } +#undef tXOffset +#undef tYOffset +#undef tNumShakes +#undef tTimer +#undef tShakeDelay + static void AnimHitSplatBasic(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); if (gBattleAnimArgs[2] == 0) - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); sprite->callback = RunStoredCallbackWhenAffineAnimEnds; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } +// Same as basic hit splat but takes a length of time to persist for (arg4) static void AnimHitSplatPersistent(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); if (gBattleAnimArgs[2] == 0) - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[4]; @@ -853,6 +932,8 @@ static void AnimHitSplatPersistent(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSpriteAfterTimer); } +// For paired hit splats whose position is inverted when used by the opponent on the player. +// Used by Twineedle and Spike Cannon static void AnimHitSplatHandleInvert(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER && !IsContest()) @@ -865,8 +946,8 @@ static void AnimHitSplatRandom(struct Sprite *sprite) if (gBattleAnimArgs[1] == -1) gBattleAnimArgs[1] = Random() & 3; StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]); - if (gBattleAnimArgs[0] == 0) - InitSpritePosToAnimAttacker(sprite, 0); + if (gBattleAnimArgs[0] == ANIM_ATTACKER) + InitSpritePosToAnimAttacker(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); sprite->x2 += (Random() % 48) - 24; @@ -889,8 +970,8 @@ static void AnimHitSplatOnMonEdge(struct Sprite *sprite) static void AnimCrossImpact(struct Sprite *sprite) { - if (gBattleAnimArgs[2] == 0) - InitSpritePosToAnimAttacker(sprite, 1); + if (gBattleAnimArgs[2] == ANIM_ATTACKER) + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[3]; @@ -901,14 +982,14 @@ static void AnimCrossImpact(struct Sprite *sprite) static void AnimFlashingHitSplat(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); - if (gBattleAnimArgs[2] == 0) - InitSpritePosToAnimAttacker(sprite, 1); + if (gBattleAnimArgs[2] == ANIM_ATTACKER) + InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); - sprite->callback = sub_80BA7BC; + sprite->callback = AnimFlashingHitSplat_Step; } -static void sub_80BA7BC(struct Sprite *sprite) +static void AnimFlashingHitSplat_Step(struct Sprite *sprite) { sprite->invisible ^= 1; if (sprite->data[0]++ > 12) diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 638ac7a6e..5814daa1a 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -52,7 +52,7 @@ const u8 gBattleIntroRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, RE // 10: Enemy battler right void AnimTask_BlendSelected(u8 taskId) { - u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]); + u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); selectedPalettes |= GetBattleMonSpritePalettesMask( (gBattleAnimArgs[0] >> 7) & 1, @@ -79,7 +79,7 @@ void AnimTask_BlendExcept(u8 taskId) u8 animBattlers[2]; animBattlers[1] = 0xFF; - selectedPalettes = UnpackSelectedBattleAnimPalettes(1); + selectedPalettes = UnpackSelectedBattlePalettes(1); switch (gBattleAnimArgs[0]) { case 2: @@ -122,7 +122,7 @@ void AnimTask_BlendExcept(u8 taskId) void AnimTask_SetCamouflageBlend(u8 taskId) { - u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]); + u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); switch (gBattleTerrain) {